#rR gscope_bigbang.tcl proc NotreOS {{Valeur ""}} { global NotreOS if {$Valeur!=""} { set NotreOS $Valeur } if {[info exists NotreOS]} { return $NotreOS } 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 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 [Tax $NOS TaxId] return $NotreOX } proc NotreTaxId {} { return [NotreOS] } 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 OuSuisJe {} { set Ici [info script] Espionne $Ici return [Realpath $Ici] } 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 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 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 ChangeGenome {{Genome ""}} { global RepertoireDuGenome global RepertoireRacineDuGenome global LesBoutonsDeVitrine global LesBoutonsDeVitrineCaches global LesBoutonsNonOpen global VariableADetruire if {$Genome!=""} { set GenomeOrigine $Genome if { ! [file exists $Genome]} { set Genome "$RepertoireDuGenome/../[file tail $Genome]" } if { ! [file exists $Genome]} { if { [OuiOuNon "$GenomeOrigine\n and \n$Genome\n don't exist.\n Do I cancel ?"]} { return "Cancel" } } } while { ! [file exists $Genome]} { if { ! [OuiOuNon "Do You want to display another genome or collection." 0]} { return "Cancel" } set Genome [tk_chooseDirectory -mustexist 1 -initialdir "$RepertoireDuGenome/.."] if {$Genome==""} { if {[OuiOuNon "Do I cancel ?"]} { return "Cancel" } continue } break } set genome $Genome set monNiveau [info level] if {[info exists LesBoutonsDeVitrineCaches]} { foreach b $LesBoutonsDeVitrineCaches { catch {destroy $b} } } if {[info exists LesBoutonsDeVitrine]} { foreach b $LesBoutonsDeVitrine { catch {destroy $b} } } if {[info exists LesBoutonsNonOpen]} { foreach b $LesBoutonsNonOpen { catch {destroy $b} } } set lesVariables [uplevel {info vars}] foreach variable $lesVariables { Espionne "variable testee $variable" if {[EstUneVariableGlobaleGenerale $variable]} { continue } Espionne "Variable detruite .................. $variable" set VariableADetruire $variable uplevel $monNiveau {unset $VariableADetruire} } set RepertoireDuGenome $Genome set env(REPERTOIREDUGENOME) $RepertoireDuGenome uplevel $monNiveau ChargeConfig uplevel $monNiveau Gscope } 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 LocaliseTBlastNDataBase {{NomDeLaBanque ""}} { return [LocaliseBlastNDataBase $NomDeLaBanque "T"] } 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 LocalisePsiBlastPDataBase {{Banque ""}} { return [LocaliseBlastPDataBase $Banque] } proc DedicatedBlastDatabase {{Rep ""}} { global DedicatedBlastDatabase if {$Rep=="Reset"} { set DedicatedBlastDatabase "" ; return "" } if {$Rep==""} { if {[info exists DedicatedBlastDatabase]} { return $DedicatedBlastDatabase } } set DedicatedBlastDatabase $Rep return $DedicatedBlastDatabase } 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" #rR 20200526 j'ai fait les choses correctemetn pour pouvoir lire le lien if {[file type $BlastPDataBase]=="link"} { set BlastPDataBase [ReadLink $BlastPDataBase $RepDesBanques] } #rR 20200526 et tester .phr while { ! [file exists $BlastPDataBase] && ! [file exists "$BlastPDataBase.phr"]} { 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 FinPasTouche Nom { PasTouche $Nom "fin" } proc TestPasTouche {} { return [PasTouche Bidon12345] } 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]} { catch { 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 } Sauve "Ne me touche pas ..." dans $FichierPasTouche 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 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 PrefixeDuProjet Projet { return [PrefixeDuGenome $Projet] } 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 FormatDesNumerosPourCollectionDuProjet {{Projet ""}} { return [FormatDesNumerosPourCollectionDuGenome $Projet] } 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 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 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 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 BornesDuPABDUnAutreGenome {Nom {Genome ""}} { global RepertoireDuGenome if {$Genome==""} { set Genome [lindex [GenomeDu $Nom] 0]} if { ! [file exists $Genome]} { set Genome "$RepertoireDuGenome/../$Genome" } set FichierBornes "$Genome/fiches/bornesdespabs" if { ! [file exists $Genome]} { return "" } foreach Ligne [LesLignesDuFichier $FichierBornes] { if {[regexp "$Nom" $Ligne]} { return $Ligne } } return "" } proc CreateurDesPABs {{Dieu ""}} { global RepertoireDuGenome global CreateurDesPABs set FichierCreateur "$RepertoireDuGenome/fiches/createurdespabs" if {$Dieu==""} { if {[info exists CreateurDesPABs]} { return $CreateurDesPABs } if {[file exists $FichierCreateur]} { set CreateurDesPABs [ContenuDuFichier $FichierCreateur] } else { set CreateurDesPABs "Inconnu" } return $CreateurDesPABs } set CreateurDesPABs $Dieu Sauve $CreateurDesPABs dans $FichierCreateur return $CreateurDesPABs } 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 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 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 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 BootstrapPourTous {{NomATraiter ""} {nBootstraps 1000} } { if {$NomATraiter == "" } { set Liste [ListeDeBoites] } else { set Liste [list $NomATraiter] } set RepertoireMSF "[RepertoireDuGenome]/msf" set RepertoireBootstrap "[RepertoireDuGenome]/bootstrap" set MatriceDeSimilarite "[RepertoireDuGenome]/fiches/bootstrapmatrix" File mkdir $RepertoireBootstrap set Conserve 1 if {! $Conserve && [llength [glob -nocomplain "$RepertoireBootstrap/*"]] > 0} { set Conserve [OuiOuNon "Should I keep the existing files in $RepertoireBootstrap"] } foreach Nom $Liste { set FichierMSF "$RepertoireMSF/$Nom" set FichierBootstrap "$RepertoireBootstrap/$Nom" set Log "tmp.bootstrap.log" if { ! [file exists $FichierMSF]} { continue } if { $Conserve && [file exists $FichierBootstrap] } { continue } exec bootstrap $FichierMSF $FichierBootstrap $MatriceDeSimilarite $Log $nBootstraps } } 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 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 BallastUnBlastP {Fichier {RepertoireDestination ""}} { global RepertoireDeTravail if {$RepertoireDestination==""} { set RepertoireDestination $RepertoireDeTravail } set Query [QueryDuFichierBlast $Fichier] set Destination [Ballast $Fichier $RepertoireDestination $Query] return [ContenuDuFichier $Destination] } 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 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 CreeLeFichierBornesDesPABs {} { global RepertoireDuGenome file mkdir "$RepertoireDuGenome/fiches" set FichierBornes "$RepertoireDuGenome/fiches/bornesdespabs" if {[file exists $FichierBornes]} { return 1 } FaireLire "I will ask You how to determine the ORFs.\n\ So You have to choose between : \n\ - Glimmer\n\ - Gscope own calculation (ab initio)\n\ - already existing ORFs list\n\ - already known proteome (with or without DNA file)\n\ - from a GenBank file (with prots and DNA)\n\ - sequences from a Blast or MSF output." if {[OuiOuNon "Should I use Glimmer to create the ORFs ?"]} { Glimmer SauveLesLignes [LesBornesDeGlimmer] dans $FichierBornes CreateurDesPABs "Glimmer" return 1 } if {[OuiOuNon "Should I create the ORFs ab initio ?"]} { if { ! [CreeLesPABsAbInitio]} { return 0 } CreateurDesPABs "GscopeAbInitio" return 1 } if {[OuiOuNon "Could I use an old version of ORFs ... ?"]} { if { ! [RepriseDeVieuxPABs]} { return 0 } CreateurDesPABs "RepriseDeVieuxPABs" return 1 } if {[OuiOuNon "Could I use an existing proteome from a GenBank file (with Prot and DNA) ... ?"]} { return [CreeLesPABsAvecGenBank] } if {[OuiOuNon "Could I use an existing proteome from a tfas file (with Prot with/without DNA) ... ?"]} { return [CreeLesPABsAvecUnProteomeDansTFAs] } if {[OuiOuNon "Could I use an existing proteome ... ?"]} { set FichierBornesProteome "$RepertoireDuGenome/fiches/bornesdespabs.proteome" while { ! [file exists $FichierBornesProteome] } { if {[OuiOuNon "Do I create $FichierBornesProteome"]} { CreeLesPABsAvecUnProteomeEtADN } else { if {[OuiOuNon "Do I skip proteome scanning ?"]} { return 0 } if {[OuiOuNon "Do I stop ?"]} { exit } } } if {[OuiOuNon "Can I use \n $FichierBornesProteome\nas ORFs limits ?"]} { File copy $FichierBornesProteome "$RepertoireDuGenome/fiches/bornesdespabs" CreateurDesPABs "Proteome" return 1 } } if {[OuiOuNon "Could I create ORFs from a Collection ... ?"]} { if { ! [CreeBornesDesPABsPourUneCollection [ButineArborescence "FOF"]]} { return 0 } CreateurDesPABs "Collection" return 1 } if {[OuiOuNon "Stop ?"]} { exit } return 0 } 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 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]" Espionne $Repertoire #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] { Espionne "$Key $Value" 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]} { 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 BlastNPourTous {{Banque ""} {NomATraiter ""} {RepQuery ""} {Filtre ""} {NbProc ""}} { global RepertoireDuGenome global GardeToutBlastNPourTous global TestExistenceBlastNPourTous if {$Banque==""} { set Banque "human" } if {$Filtre==""} { set Filtre "T" } if {$NbProc==""} { set NbProc 1 } 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 NomDeLaBanque $Banque set NomDeLaBanque "/catalog/blast/$Banque" while { ! [file exists "$NomDeLaBanque.nhr"] && ! [file exists "$NomDeLaBanque.nal"]} { set Possible "[RepertoireDuGenome]/banques/$Banque" if {[file exists "$Possible.nhr"] || [file exists "$Possible.nal"]} { if {[OuiOuNon "Do I use $Possible ?"]} { set NomDeLaBanque $Possible set Banque [file tail $NomDeLaBanque] break } } 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 "[RepertoireDuGenome]/"] 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 ?" 0]} { RepeatMaskerForAll } } Espionne $Repertoire 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 #rR 2017/07/10 j'ai introduit la possiblilité d'utiliser BlastParameters is dans le rep tblastn set p "blastn" 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] { Espionne "$Key $Value" regsub -- {^\-+} $Key "" Key if {[regexp " $Key " $LesObliges]} { set $Key $Value } else { append MoreOptions " -$Key $Value" } } if {$d==""} { set BlastNDataBase [LocaliseBlastNDataBase $NomDeLaBanque] if {$BlastNDataBase==""} { return "" } set NomDeLaBanque $BlastNDataBase } set CommandeBlast "blastall \ -p $p \ -i \$FichierTFA \ -o \$FichierBlast.encours \ -d $d \ -v $v \ -b $b \ -K $K \ -e $e \ -F $F" 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 "" if {$RepQuery==""} { set ListeDesReps [list \ "[RepertoireDuGenome]/nucMaskAndReMask" \ "[RepertoireDuGenome]/nucmask" \ "[RepertoireDuGenome]/nuctfa"] } else { set ListeDesReps $RepQuery } foreach Rep $ListeDesReps { set FichierTFA "$Rep/$Nom" if {[file exists $FichierTFA]} { break } } if { $FichierTFA=="" || ! [file exists $FichierTFA]} { 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"]} { CorrectionPourVarsplicDuBlastP "${FichierBlast}.encours" file rename -force "${FichierBlast}.encours" $FichierBlast } else { Espionne "${FichierBlast}.encours doesn't exist ... bouhouhouhou !" } FinPasTouche $Nom } } proc BlastXDesTROUsPourTous {{NomATraiter ""}} { global RepertoireDuGenome set BlastXDataBase "/catalog/blast/protall" set RepTROUs "$RepertoireDuGenome/nuctfa" set Repertoire "$RepertoireDuGenome/trousblastx" if { ! [file exists "$Repertoire"]} { File mkdir $Repertoire } if {$NomATraiter == ""} { set Liste [ListeDesTROUs] } else { set Liste [list $NomATraiter] } set CommandeBlast "blastall \ -p blastx \ -i \$FichierTFA \ -o \$FichierBlast.encours \ -d $BlastXDataBase \ -v 100 \ -b 100 " if {[OuiOuNon "Do You want to edit the Blast command ?" 0]} { set CommandeBlast [Entre $CommandeBlast] if {$CommandeBlast==""} { return "" } } foreach Nom $Liste { set FichierTFA "$RepTROUs/$Nom" if { ! [file exists "$FichierTFA"]} { continue } set FichierBlast "$Repertoire/$Nom" if {[file exists $FichierBlast] } { continue } if {[PasTouche $Nom]} { 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 !" } 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 BlastXPourTous {{NomATraiter ""} {Banque ""}} { global RepertoireDuGenome if {$Banque==""} { set BlastXDataBase "/catalog/blast/protall" } else { if {[regexp "/" $Banque]} { set BlastXDataBase $Banque } else { set BlastXDataBase "/catalog/blast/$Banque" } } set RepFileMask "$RepertoireDuGenome/nucmask" set Repertoire "$RepertoireDuGenome/blastx" 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 blastx \ -i \$FichierTFA \ -o \$FichierBlast.encours \ -d $BlastXDataBase \ -v 50 \ -b 50 " if {[OuiOuNonMemo "Do You want to edit the Blast command ?" 0]} { set CommandeBlast [Entre $CommandeBlast] if {$CommandeBlast==""} { return "" } } 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 } if {[PasTouche $Nom]} { continue } Espionne "Je vais lancer BlastX 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 BlastParameters {{Rep ""}} { if {$Rep==""} { set Rep "blastp" } if {[regexp "/" $Rep]} { set ParametersFile "$Rep/BlastParameters.txt" } else { set ParametersFile "[RepertoireDuGenome]/$Rep/BlastParameters.txt" } if {[FileAbsent $ParametersFile]} { return {} } set LesKV {} foreach Ligne [LesLignesDuFichier $ParametersFile] { if {[regexp {^\#} $Ligne]} { continue } regsub RepertoireDuGenome $Ligne [RepertoireDuGenome] Ligne scan $Ligne "%s %s" K V regsub -- {^\-+} $K "" K lappend LesKV "-$K" $V } return $LesKV } proc BlastPPourTous {{NomATraiter ""} {Banque ""} {AvecPasTouche ""} {Expect ""} {Vparam ""} {Bparam ""}} { global RepertoireDuGenome global CommandeBlastPPourTous global GardeToutBlastPPourTous global TestExistenceBlastPPourTous JeMeSignale set Extension [file tail $Banque] if {$Expect==""} { set Expect 10 } if {$AvecPasTouche==""} { set AvecPasTouche "AvecPasTouche" } set AvecPasTouche [string equal -nocase $AvecPasTouche "AvecPasTouche"] if {$NomATraiter=="" || $NomATraiter=="All"} { set NomATraiter "" set Liste [ListeDesPABs] } elseif {[regexp "," $NomATraiter]} { set Liste [split $NomATraiter ","] } 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/blastp$Extension" if { ! [file exists "$Repertoire"]} { File mkdir $Repertoire } if {[info exists CommandeBlastPPourTous]} { set CommandeBlast $CommandeBlastPPourTous if {[info exists GardeToutBlastPPourTous]} { set GardeTout $GardeToutBlastPPourTous } else { setGardeTout 0 } if {[info exists TestExistenceBlastPPourTous]} { set TestExistence $TestExistenceBlastPPourTous } else { set TestExistence 1 } } else { set GardeTout 0 set TestExistence 1 set BlastPDataBase [LocaliseBlastPDataBase $Banque] set V 250 set B $V if {[regexp "protall" $BlastPDataBase]} { set V 500; set B 500 } ;#rR attention BlastPDatabase peut etre remplacé pas BlastParameters if {[OnTraite "CilioCarta"]} { set V 1000; set B $V } if {[OnTraite "CilioCode"]} { set V 1000; set B $V } if {[OnTraite "TTLL"]} { set V 2000; set B $V } if {$Vparam!=""} { set V $Vparam } if {$Bparam!=""} { set B $Bparam } set p "blastp" set v $V set K 0 set b $B set e $Expect set F "T" set d $BlastPDataBase set LesObliges " p i o d 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" } } if {$d==""} { return "" } ;#rR je l'ai déplacé de la haut pour qu'il soit pris en compte set CommandeBlast "blastall \ -p $p \ -i \$FichierTFA \ -o \$FichierBlast.encours \ -d $d \ -v $v \ -b $b \ -K 0 \ -e $e \ -F $F \ $MoreOptions" 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 CommandeBlastPPourTous $CommandeBlast set GardeToutBlastPPourTous $GardeTout set TestExistenceBlastPPourTous $TestExistence } set FichierBlast "" foreach Nom $Liste { set NomOrigine $Nom set Nom [file tail $Nom] if {$AvecPasTouche && [PasTouche $Nom]} { continue } if {[EstUnPAB $Nom]} { set FichierTFA "$RepertoireDuGenome/prottfa/$Nom" set FichierTFABest "$RepertoireDuGenome/prottfaBEST/$Nom" if {[file exists $FichierTFABest]} {set FichierTFA $FichierTFABest} } else { set FichierTFA $NomOrigine if { ! [file exists $FichierTFA]} { set FichierTFA "$NomOrigine.tfa" } } set FichierBlast "$Repertoire/$Nom" if { ! [file exists $FichierTFA]} { Warne "$FichierTFA does'nt exist." if {$AvecPasTouche} { FinPasTouche $Nom } continue } if {$GardeTout && [file exists $FichierBlast] } { Espionne "$Nom already done" if {$AvecPasTouche} { FinPasTouche $Nom } continue } if { $TestExistence && [file exists $FichierBlast] } { if {[OuiOuNon "$FichierBlast already exists\nDo I keep it ?"]} { if {$AvecPasTouche} { FinPasTouche $Nom } continue } } if {[set Dedicated [DedicatedBlastDatabase]]!=""} { set BanqueDedicated "[RepertoireDuGenome]/$Dedicated" set MaBanque "$BanqueDedicated/$Nom-plus" Espionne $BanqueDedicated if {[FileAbsent $MaBanque]} { set General [file tail $BlastPDataBase] lappend LeTexte "TITLE $General and $BanqueDedicated for $Nom" lappend LeTexte "DBLIST $BlastPDataBase $BanqueDedicated/$Nom" SauveLesLignes $LeTexte dans $MaBanque.pal } Espionne $MaBanque Espionne $CommandeBlast Espionne "-d $BlastPDataBase" regsub -- "-d $BlastPDataBase " $CommandeBlast "-d $MaBanque " CommandeBlast Espionne $CommandeBlast } catch {eval exec $CommandeBlast} if {[file exists "$FichierBlast.encours"]} { file rename -force "$FichierBlast.encours" $FichierBlast } if {$AvecPasTouche} { FinPasTouche $Nom } Espionne $FichierBlast } DedicatedBlastDatabase "Reset" return $FichierBlast } 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 CreeLesFichiersNucTFAetProtTFAetNucEMBLetProtEMBL {Nom Debut Fin Orient {GardeLesExistants 1}} { global RepertoireDuGenome global ADN TDN RAC global LongueurADN DerniereBase global DuProteome NucOui set NotreOS [NotreOS] set NotreOC [NotreOC] set NotreOX [NotreOX] if { ! [info exists ADN]} { ChargeADNetTDNetRAC } if { ! [info exists DuProteome]} { while {[file exists "$RepertoireDuGenome/proteometfa"]} { if {[OuiOuNon "Do I keep the protein sequences from the proteome ?"]} { set DuProteome 1 break } else { if {[OuiOuNon "Do You confirm that I forget the proteome ?"]} { set DuProteome 0 break } if {[OuiOuNon "Do I skip sequence creation ?"]} { return 0 } if {[OuiOuNon "Do I exit ?"]} { exit } } } } if { ! [info exists NucOui]} { set NucOui [OuiOuNon "Do I create the nuc files ?"] } set LongN [expr $Fin - $Debut +1] set LongP [expr $LongN/3] if {$NucOui} { set SeqNuc [BoutADN $Debut $Fin $Orient] set SeqPro [SeqNucToSeqPro $SeqNuc] } set FichierNucTFA "$RepertoireDuGenome/nuctfa/$Nom" set FichierProtTFA "$RepertoireDuGenome/prottfa/$Nom" set FichierNucEMBL "$RepertoireDuGenome/nucembl/$Nom" set FichierProtEMBL "$RepertoireDuGenome/protembl/$Nom" if { $NucOui && (! $GardeLesExistants || ! [file exists "$FichierNucTFA"])} { set NucTFA ">$Nom" append NucTFA "\n[SequenceFormatBrut $SeqNuc]" Espionne [Sauve $NucTFA dans "$FichierNucTFA"] } if { ! [regexp "ARN|TRNA" $Nom] && (! $GardeLesExistants || ! [file exists "$FichierProtTFA"])} { if {[info exists DuProteome] && $DuProteome} { regsub -nocase {[a-z_\.]*} $Nom "ORF" Orf set FichierProteome "$RepertoireDuGenome/proteometfa/$Orf" if {[file exists $FichierProteome]} { set TFA [ContenuDuFichier $FichierProteome] regsub -nocase {>[a-z0-9\._]+ } $TFA ">$Nom " TFA Sauve $TFA dans $FichierProtTFA } } else { set ProtTFA ">$Nom" append ProtTFA "\n[SequenceFormatBrut $SeqPro]" Espionne [Sauve $ProtTFA dans "$FichierProtTFA"] } } if { $NucOui && (! $GardeLesExistants || ! [file exists "$FichierNucEMBL"])} { set NucEMBL "" append NucEMBL "ID $Nom PRELIMINARY; DNA; $LongN Bps." append NucEMBL "\nAC $Nom" append NucEMBL "\nOS $NotreOS." append NucEMBL "\nOC $NotreOC" append NucEMBL "\nOX $NotreOX" append NucEMBL "\nCC -!- from $Debut to $Fin. Orientation $Orient" append NucEMBL "\n[QueSequenceFormatEMBL $SeqNuc AvecSQ]" Espionne [Sauve $NucEMBL dans "$FichierNucEMBL"] } if { ! [regexp "ARN|TRNA" $Nom] && (! $GardeLesExistants || ! [file exists "$FichierProtEMBL"])} { set ProtEMBL "" append ProtEMBL "ID $Nom PRELIMINARY; PRT; $LongP AA." append ProtEMBL "\nAC $Nom" append ProtEMBL "\nOS $NotreOS." append ProtEMBL "\nOC $NotreOC" append ProtEMBL "\nOC $NotreOX" if {[info exists DuProteome] && $DuProteome} { set Head [PremiereLigneDuFichier $FichierProtTFA] regsub -nocase {>[a-z0-9\._]+ } $TFA ">$Nom " DE append ProtEMBl "\nDE $DE" set SeqBrute [QueLaSequence [ContenuDuFichier $FichierProtTFA]] append ProtEMBl "\nCC -!- taken frome known proteome" append ProtEMBL "\n[QueSequenceFormatEMBL $SeqBrute AvecSQ]" } else { append ProtEMBL "\nCC -!- from $Debut to $Fin. Orientation $Orient" append ProtEMBL "\n[QueSequenceFormatEMBL $SeqPro AvecSQ]" } Espionne [Sauve $ProtEMBL dans "$FichierProtEMBL"] } } proc CreeLesFichiersNucTFAetProtTFAetNucEMBLetProtEMBLAvecBornesDesPABsEtADN {} { global RepertoireDuGenome if { ! [OuiOuNon "Do I create the sequences in \n $RepertoireDuGenome/..."]} { return } if { ! [file exists "$RepertoireDuGenome/nuctfa"]} { File mkdir $RepertoireDuGenome/nuctfa } if { ! [file exists "$RepertoireDuGenome/prottfa"]} { File mkdir $RepertoireDuGenome/prottfa } if { ! [file exists "$RepertoireDuGenome/nucembl"]} { File mkdir $RepertoireDuGenome/nucembl } if { ! [file exists "$RepertoireDuGenome/protembl"]} { File mkdir $RepertoireDuGenome/protembl } set GardeLesExistants [OuiOuNon "Do I keep existing files ?"] foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/bornesdespabs"] { ExtraireDe $Ligne Nom Debut Fin Orient CreeLesFichiersNucTFAetProtTFAetNucEMBLetProtEMBL $Nom $Debut $Fin $Orient $GardeLesExistants } } proc CreeLesFichiersNucTFAetNucEMBLAvecBornesDesTRNAsEtADN {} { global RepertoireDuGenome if { ! [file exists "$RepertoireDuGenome/nuctfa"]} { File mkdir $RepertoireDuGenome/nuctfa } if { ! [file exists "$RepertoireDuGenome/nucembl"]} { File mkdir $RepertoireDuGenome/nucembl } set GardeLesExistants [OuiOuNon "Do I keep existing files ?"] foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/bornesdestrnas"] { ExtraireDe $Ligne Nom Debut Fin Orient CreeLesFichiersNucTFAetProtTFAetNucEMBLetProtEMBL $Nom $Debut $Fin $Orient $GardeLesExistants } } proc CreeCompletTFAavecADN {{Extension ""}} { global RepertoireDuGenome global ADN TDN RAC global FichierSequenceADN set NotreOS [NotreOS] if { $Extension!=""} { catch {unset ADN} ; catch {unset TDN} ; catch {unset RAC} } if { ! [info exists ADN]} { ChargeADNetTDNetRAC $Extension} set NomDeLaBete "$NotreOS" regsub " " $NomDeLaBete "_" NomDeLaBete regsub {\.} $NomDeLaBete "" NomDeLaBete set Long [string length [string range $ADN 1 end]] set Entete ">$NomDeLaBete Genome complet.$Extension $Long BP" set Fichier [string tolower "$NomDeLaBete.tfa$Extension"] set TFA [SequenceFormatBrut [string range $ADN 1 end]] set NomDuFichierCompletTFA "$RepertoireDuGenome/beton/$Fichier" set NomDuFichierCompletTFA [Sauve "$Entete\n$TFA" dans "$RepertoireDuGenome/beton/$Fichier"] if {$Extension==""} { set FichierMiniConfig "$RepertoireDuGenome/beton/miniconfig" set LesNommes {} foreach Ligne [LesLignesDuFichier "$FichierMiniConfig"] { if { ! [regexp "FichierSequenceADN" $Ligne]} { lappend LesNommes $Ligne } else { lappend LesNommes "FichierSequenceADN $NomDuFichierCompletTFA" } } SauveLesLignes $LesNommes dans $FichierMiniConfig set FichierSequenceADN $NomDuFichierCompletTFA } return $NomDuFichierCompletTFA } proc CreeADNetTDNetRACaPartirDuFichierTFA Fichier { Wup "Create the flat files beton/adn beton/tdn beton/rac with the tfa file Fichier" Wup " if Fichier ends with .pure it creates adn.pure tdn.pure rac.pure" set DejaDemandeCodeDegenere 0 set AccepteCodeDegenere 0 set SequenceBrute "" foreach Ligne [LesLignesDuFichier $Fichier] { regsub " " $Ligne "" BelleLigne if {[regexp -nocase {[^ATGCNX]} $BelleLigne]} { if {[regexp "^>" $BelleLigne]} { continue } if {[regexp -nocase {[^ATGCNXMKRSYWVHDB]} $BelleLigne]} { if {[OuiOuNon "$Ligne\n shows to be illegal, Do I stop ?"]} { exit } if {[OuiOuNon "Do I skipp ?"]} { continue } } else { if { ! $DejaDemandeCodeDegenere} { set DejaDemandeCodeDegenere 1 set AccepteCodeDegenere [OuiOuNon "Do You accept the degenerated code (ATGCNXMKRSYWVHDB) ?"]} { } if { ! $AccepteCodeDegenere } { if {[OuiOuNon "$Ligne\n shows to be illegal, Do I stop ?"]} { exit } if {[OuiOuNon "Do I skipp ?"]} { continue } } } } append SequenceBrute [string toupper $BelleLigne] } if {[regexp "\.pure$" $Fichier]} { CreeADNetTDNetRAC $SequenceBrute ".pure" } else { CreeADNetTDNetRAC $SequenceBrute } } proc ChargeConfig {{Force ""}} { global ConfigChargee global SansCafeDesSciences if {$Force=="" && [info exists ConfigChargee]} { return } CommandesExecPossibles RepertoireDuGenome CurrentGenome if { ! [info exists SansCafeDesSciences] || ! $SansCafeDesSciences } { NommeLesFichiersForum } RepertoireDeTravail ChargeMiniConfig $Force LesOrganismesTresProches LesGenomesComplets # Glossaire "bidon" "Court" # LesGenomesCompletsPourGlossaire } proc ChargeMiniConfig {{Force ""}} { #rR Force rajouté 2016/01/07 ...... c'était débile avant, sans cela !!! global RepertoireDuGenome global CurrentGenome global FichierMiniConfig global FichierMiniConfigSansGenome global VersionDeGscopeAuBigBang global FichierSequenceADN global PrefixeDesORFs global FormatOrfNumbering global LongueurMiniDesORFs global NotreOS global NotreOC global NotreOX global NotreOrga global GenomeOuCollection global MaquilleNon global ConfigChargee if {$Force!=""} { set FichierMiniConfig "[RepertoireDuGenome]/beton/miniconfig" } if { ! [info exists FichierMiniConfig] || ! [file exists $FichierMiniConfig]} { set FichierMiniConfig $FichierMiniConfigSansGenome } set MaquilleOui 0 set MaquilleNon 1 set GenomeOuCollection "Genome" foreach Ligne [LesLignesDuFichier $FichierMiniConfig] { if {[regexp "^#" $Ligne]} { continue } if {[regexp "VersionDeGscopeAuBigBang" $Ligne]} { scan $Ligne "%s %s" Toto VersionDeGscopeAuBigBang } if {[regexp "FichierSequenceADN" $Ligne]} { scan $Ligne "%s %s" Toto FichierSequenceADN } if {[regexp "PrefixeDesORFs" $Ligne]} { scan $Ligne "%s %s" Toto PrefixeDesORFs } if {[regexp "FormatOrfNumbering" $Ligne]} { # Attention il etait jusqu'au 29/06/2009 dans fiches/format_orf_numbering." # pour les nouveaux projets il sera pris ici en premier. # mais le fichier est cree quand meme car on l'appelle FormatDesNumerosPourCollection # dans CreeMiniConfig. scan $Ligne "%s %s" Toto FormatOrfNumbering } if {[regexp "LongueurMiniDesORFs" $Ligne]} { scan $Ligne "%s %d" Toto LongueurMiniDesORFs } if {[regexp "NotreOS" $Ligne]} { regsub {\.} [string range $Ligne 8 end] "" NotreOS set NotreOrga [Glossaire $NotreOS Court] } if {[regexp "NotreOC" $Ligne]} { set NotreOC [string range $Ligne 8 end] } if {[regexp "NotreOX" $Ligne]} { set NotreOX [string range $Ligne 8 end] } if {[regexp "GenomeOuCollection" $Ligne]} { set GenomeOuCollection [string trim [string range $Ligne 19 end]] } if {[regexp "MaquilleOui" $Ligne]} { scan $Ligne "%s %s" Bidon MaquilleOui set MaquilleNon [expr ! $MaquilleOui] } } if { ! [PourWscope] } { DialogPort } set ConfigChargee 1 } proc CreeLaBaseOuLaCollection {} { global FichierMiniConfig global GenomeOuCollection if {[file exists "$FichierMiniConfig"]} { ChargeMiniConfig } if { [OnTraiteUnGenome] } { CreeLaBase } else { CreeLaCollection } } proc CreeFichierMiniConfig {{MiniConfigOrPrefixe ""} {OrfNumbering ""} {CollectionType ""} {OS ""} {OC ""} {OX ""} {RepGen ""}} { JeMeSignale #rR Attention j'ai rajouté RepGen pour pouvoir le faire pour un autre RepGen global RepertoireDuGenome global CurrentGenome global FichierMiniConfig global VersionDeGscopeAuBigBang global FichierSequenceADN global PrefixeDesORFs global LongueurMiniDesORFs global GenomeOuCollection global NarcisseDuAlias if {[regexp {%?([0-9]+)(\.[0-9]+d)?$} $OrfNumbering Match ON]} { set $OrfNumbering $ON } set Prefixe $MiniConfigOrPrefixe if {[regexp "," $MiniConfigOrPrefixe]} { set OS "" set OC "" set OX "" set RepGen "" lassign [split $MiniConfigOrPrefixe ","] Prefixe OrfNumbering CollectionType OS OC OX RepGen } if {$RepGen==""} { set RepGen [RepertoireDuGenome] set YaDuNeuf [expr ![string equal $Prefixe ""]] } else { set YaDuNeuf 0 } set FichierMiniConfigACreer "$RepGen/beton/miniconfig" file mkdir "$RepGen/beton" if {[regexp {^[0-9]+$} $OS]} { set OX $OS; set OS "" } set OS [Tax $OS Name] if {$OX!="" && $OS=="" } { set OS [Tax $OX Name] } if {$OX==""} { set OX [Tax $OS TaxId] } if {$OC==""} { set OC [TaxClass $OX Name] } regsub -all "_" $OS " " OS regsub -all "_" $OC " " OC if {[info exists FichierMiniConfigACreer] && [file exists $FichierMiniConfigACreer]} { if { ! $YaDuNeuf} { return $FichierMiniConfigACreer } if {1 || [OuiOuNon "Do we overwrite $FichierMiniConfigACreer"]} { Garde $FichierMiniConfigACreer "AndDelete" } } set Interactif [expr !$YaDuNeuf] set VersionDeGscopeAuBigBang "VersionDeGscopeAuBigBang [VersionDeGscope]" set TFA [lindex [glob -nocomplain "$RepGen/beton/*.tfa"] 0] set FichierSequenceADN "FichierSequenceADN $TFA" if {$Prefixe!=""} { set PrefixeDesORFs $Prefixe } else { set Interactif 1 set PrefixeDesORFs [Entre "PrefixeDesORFs BOX"] } regsub { *PrefixeDesORFs *} $PrefixeDesORFs "" P set PrefixeDesORFs "PrefixeDesORFs $P" set FormatOrfNumbering [FormatDesNumerosPourCollection $OrfNumbering] set TextFormatOrfNumbering "FormatOrfNumbering $FormatOrfNumbering" set LongueurMiniDesORFs "LongueurMiniDesORFs 0" set GenomeOuCollection "GenomeOuCollection Collection" if {$OS!=""} { NotreOS $OS if {$OC!=""} { NotreOC $OC } else { set OC [NotreOC] } if {$OX!=""} { NotreOX $OX } else { set OX [NotreOX] } set TexteNotreOS "NotreOS $OS" set TexteNotreOC "NotreOC $OC" set TexteNotreOX "NotreOX $OX" } else { set Interactif 1 if {[OuiOuNon "Do this collection concern only one organism ?" 0]} { set OS [Entre "Homo sapiens"] if {$OS==""} { set OS "Inconnu inconnu" } while {$OS=="Inconnu inconnu" || [Glossaire $OS Complet]!=$OS} { FaireLire "Sorry I don't know the organism $OS" scan [MontreOrganismes "AvecRetour"] "%s %s %s" Orga Genre Espece set OS "$Genre $Espece" Espionne $OS } set OC [Entre [NotreOC $OS]] set OX [NotreOX] set TexteNotreOS "NotreOS $OS" set TexteNotreOC "NotreOC $OC" set TexteNotreOX "NotreOX $OX" } else { set TexteNotreOS "NotreOS Inconnu inconnu" set TexteNotreOC "NotreOC ClassUnknown" set TexteNotreOX "NotreOX 0" } } if {$CollectionType==""} { set Interactif 1 FaireLire "Please tell me what kind of collection you want to create.\n\ To each one corresponds a specific analysis." set LeChoix [list \ "DNA" "DNA simple analysis (blastn, blastx, etc.)" \ "" "" \ "Prot" "Prot: Protein for blastp tblastn etc." \ "CDS" "CDS: DNA coding for a protein ( with correct frame )" \ "CDSProt" "Both: DNA coding for a protein ( with correct frame ) AND protein sequence" \ "CDSProtFoF" "Both: DNA coding for a protein ( with correct frame ) AND protein sequence in a FoF" \ "" "" \ "EukProt" "Eukaryotic Prot full analysis (loc, prot search, ontology...) " \ "EukDNA" "Eukaryotic cDNA full analysis (loc, prot search, ontology...) " \ "EukDNAAffy" "Eukaryotic cDNA full analysis (loc, prot search, ontology...) from Affymetrix" \ ] foreach {Clef Texte} $LeChoix { lappend LesClefs $Clef lappend LesTextes $Texte } set Clef "" while {$Clef==""} { set Clef [ChoixParmiJoli $LesClefs "" $LesTextes] if {$Clef!=""} { break } Boum } } else { set Clef $CollectionType } switch $Clef { "DNA" { set GenomeOuCollection "GenomeOuCollection Collection of DNA" } "Prot" { set GenomeOuCollection "GenomeOuCollection Collection of proteins" } "CDS" { set GenomeOuCollection "GenomeOuCollection Collection of CDS" } "CDSProt" { set GenomeOuCollection "GenomeOuCollection Collection of CDS with protein" } "CDSProtFoF" { set GenomeOuCollection "GenomeOuCollection Collection of CDS with protein in a FoF" } "EukDNA" { set GenomeOuCollection "GenomeOuCollection Collection of cDNA" } "EukDNAAffy" { set GenomeOuCollection "GenomeOuCollection Collection of cDNA from Affymetrix" } default { set GenomeOuCollection $Clef } } set LaConfig {} lappend LaConfig "#MiniConfig " lappend LaConfig "$FichierSequenceADN" lappend LaConfig "$VersionDeGscopeAuBigBang" lappend LaConfig "$PrefixeDesORFs" lappend LaConfig "$TextFormatOrfNumbering" lappend LaConfig "$LongueurMiniDesORFs" lappend LaConfig "$TexteNotreOS" lappend LaConfig "$TexteNotreOC" lappend LaConfig "$TexteNotreOX" lappend LaConfig "$GenomeOuCollection" set Config [join $LaConfig "\n"] if {$Interactif && ! [OuiOuNon "OK to save following miniconfig ?\n\n$Config" ]} { Boum } Sauve $Config dans $FichierMiniConfigACreer return $FichierMiniConfigACreer } proc CreeLaCollection {{CollectionType ""} {SequenceSourceFile ""} {MiniConfig ""} {KeepEntete ""} {CreateNarcisse ""} {ForceAccessFirst ""}} { JeMeSignale global RepertoireDuGenome global CurrentGenome global FichierMiniConfig global VersionDeGscopeAuBigBang global FichierSequenceADN global PrefixeDesORFs global LongueurMiniDesORFs global GenomeOuCollection global NarcisseDuAlias set LesRepertoiresNecessaires [list "beton" "fiches" "infos"] foreach Rep $LesRepertoiresNecessaires { file mkdir "$RepertoireDuGenome/$Rep" } set FichierMiniConfig [CreeFichierMiniConfig $MiniConfig] Espionne $FichierMiniConfig ChargeMiniConfig LesOrganismesTresProches PasTouche Check #rR Avec les quelques lignes qui suivent on peut creer bornesdespabs automatiquement if {$CollectionType=="AAD" || $CollectionType=="BAAD"} { set FileOfFilename [CreeProteomeAvecUneListeAccessAliasDefinition $SequenceSourceFile $CollectionType] set Coll [CreeLaCollection "FOF" $FileOfFilename] if {[PourWscope]} { return [GuideMoi] } else { return $Coll } } if {$CollectionType=="FOF"} { CreeBornesDesPABsPourUneCollection $SequenceSourceFile set Coll [CreeLaCollection] if {[PourWscope]} { return [GuideMoi] } else { return $Coll } } if {$CollectionType=="TFA"} { CreeBornesDesPABsAvecTFAs $SequenceSourceFile $KeepEntete $CreateNarcisse $ForceAccessFirst set Coll [CreeLaCollection] if {[PourWscope]} { return [GuideMoi] } else { return $Coll } } #rR Voila, la creation automatique de bornesdespabs est faite Espionne coucou if {0 && [FileAbsent "[RepertoireDuGenome]/fiches/bornesdespabs]"] && [OnTraiteDesCDSProtFoF]} { Espionne salut CreateGscopeDatabaseForCDSProtFoF exit } if {[OnTraiteDesClones] && ! [OnTraiteDesCDS]} { GestionDesClones exit } if {[OnTraiteDesCDNAs] && [OuiOuNon "Do I run LaTotalePourLesCDNAs ?"]} { LaTotalePourLesCDNAs exit } if {[file exists "$RepertoireDuGenome/fiches/bornesdespabs"] && \ ! [OnTraiteSM2PH] && \ [OuiOuNon "Do you want to add a new sequence using the SeqIn procedure ?" 0]} { return [UneNouvelleSequencePourGscope] } set QuestionDidYouAddNew "Did You add new elements to the collection ?" while { ! [file exists "$RepertoireDuGenome/fiches/bornesdespabs"] \ || [OuiOuNon $QuestionDidYouAddNew 0] \ || [OuiOuNon "Do You want that I process a file with Access or FOF ?" 0] } { set QuestionDidYouAddNew "Once again,\n\ Did You add new elements to the collection ? \n\ Normally you answer NO" set Queue [file tail [RepertoireDuGenome]] set Possible "[RepertoireDuGenome]/$Queue.fof" if {[file exists $Possible]} { set FichierFOFDefaut $Possible } else { set FichierFOFDefaut [RepertoireDuGenome] } set FichierFOF $FichierFOFDefaut set AskForFOF 1 FaireLire "Please help me to find your sequences" if {[OuiOuNon "Do You have a file with lines like (it can be mixed)\ \nAccess \ \nAccess Alias \ \nAccess Alias Definition \ \n or \nBanqueId Access \ \nBanqueId Access Alias \ \nBanqueId Access Alias Definition \ \n or \nhttp://uniprot.org/uniprot/P12345.txt \ \nhttp://uniprot.org/uniprot/P12345.txt Alias\ \n \ \n for example \ \nSW:ANDR_RAT P15207 AR Androgen receptor (Dihydrotestosterone receptor) \n to collect the ORFs?"]} { set FichierAccessAlias [ButineArborescence "All" $RepertoireDuGenome] set FichierFOF [CreeProteomeAvecUneListeAccessAliasDefinition $FichierAccessAlias] if {$FichierFOF!=""} { set AskForFOF 0 } } if {$FichierFOF==""} { set FichierFOF $FichierFOFDefaut } if {[OuiOuNon "Do you want to create a proteome from OrthoInspector" 0]} { while {[OiDomain "Ask"]=="" && [OuiOuNon "Do I exit ?"]} { exit } file mkdir "[RepertoireDuGenome]/banques" OiSplit FaireLire "Please verify that banques/blastpdatabase links to \n/blast/OrthoInspector/Oi[OiDomain]\nand this database is online.\nThen run gscope Blastong ;)" exit } if { ! $AskForFOF || \ [OuiOuNon "Do you have a file of filenames with Filename\nFileName\n or \nAlias FileName\nAlias FileName\n...\n ?"]} { CreeBornesDesPABsPourUneCollection [ButineArborescence "FOF" $FichierFOF] } elseif {[OuiOuNon "Do you have a file with all sequences in FASTA format in one file ?"]} { CreeBornesDesPABsAvecTFAs } elseif {[OuiOuNon "Do you want to use an existing ORF list ?\ \n From an other Gscope project ... or\ \n From Glimmer\ \n From a GenBank File\ \n etc."]} { CreeLeFichierBornesDesPABs } set FichierNarcisse "$RepertoireDuGenome/fiches/narcisse" if {[info exists NarcisseDuAlias] && ! [file exists $FichierNarcisse]} { if {[OuiOuNon "Can I use NarcisseDuAlias to create Narcisse ?" 0]} { 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 } } } } if {[OnTraiteUneCollection]} { if {[OuiOuNon "Do I collect the mRNA sequences corresponding to proteins ?" 0]} { CollectionDeNucAPartirDeProtTFAPourTous exit } } if { ! [OnTraiteSM2PH] && [OuiOuNon "Do I complete the basic data for of each Gene \n\ (sequence, blastp, dbclustal)?" ]} { set RepMSF "$RepertoireDuGenome/msf" set RepBlastP "$RepertoireDuGenome/blastp" set RepTBlastN "$RepertoireDuGenome/tblastngenomes" set RepVer "$RepertoireDuGenome/ver" set RepProtTFA "$RepertoireDuGenome/prottfa" set RepProtEMBL "$RepertoireDuGenome/protembl" set RepNucTFA "$RepertoireDuGenome/nuctfa" set RepNucEMBL "$RepertoireDuGenome/nucembl" foreach Rep [list $RepMSF $RepBlastP $RepVer $RepProtTFA $RepProtEMBL $RepNucTFA $RepNucEMBL] { if {[file exists $Rep]} { continue } File mkdir $Rep } set SeqOnly [OuiOuNon "Do I create ONLY sequences ?"] if {[OnTraiteDesProteines]} { set NucOnly 0 } else { set NucOnly [OuiOuNonMemo "Do I create only NUCLEIC sequences (no translation to protein) ?"] } foreach Nom [ListeDesPABs] { Espionne "Traitement $Nom" if {[PasTouche $Nom]} { continue } set FiMSF "$RepMSF/$Nom" set FiBla "$RepBlastP/$Nom" set FiTBN "$RepTBlastN/$Nom" set FiVer "$RepVer/$Nom" set FiProtEMBL "$RepProtEMBL/$Nom" set FiProtTFA "$RepProtTFA/$Nom" set FiNucEMBL "$RepNucEMBL/$Nom" set FiNucTFA "$RepNucTFA/$Nom" set Encore 1 set GN "" while {$Encore} { if { $SeqOnly } { if {[file exists $FiProtTFA]} { break } if {$NucOnly && [file exists $FiNucTFA]} { break } } else { set Encore 0 if {[file exists $FiMSF]} { continue } set Encore 1 if {[file exists $FiBla]} { MSFPourCollection $Nom ; continue } if {[file exists $FiProtTFA]} { BlastPPourCollection $Nom ; continue } } if {[file exists $FiProtEMBL] && ! [file exists $FiProtTFA]} { set ProtTFA [SequenceFormatTFA [ContenuDuFichier $FiProtEMBL] "" "embl"] Sauve $ProtTFA dans $FiProtTFA continue } if {[file exists $FiVer]} { set SeqVer [ContenuDuFichier $FiVer] Espionne "SeqVer\n$SeqVer" if { [OnTraiteDesCDS] || $NucOnly} { set FormatVer [FormatDeLaSequence $SeqVer] set NucEMBL [SequenceFormatEMBL $SeqVer $Nom "tfa"] if {$FormatVer=="tfa"} { set NucTFA $SeqVer regsub "^>" $NucTFA ">$Nom " NucTFA } else { set NucEMBL [SequenceFormatEMBL $SeqVer $FormatVer] set NucTFA [SequenceFormatTFA $NucEMBL "" "embl"] } Sauve $NucEMBL dans $FiNucEMBL Sauve $NucTFA dans $FiNucTFA set QueSeqNuc [QueLaSequenceDuTexteTFA $NucTFA] set DernierCodon [string range $QueSeqNuc end-2 end] if {[CodonStopPossible $DernierCodon]} { set QueSeqNuc [string range $QueSeqNuc 0 end-3] } set SeqProt [SeqNucToSeqPro $QueSeqNuc] set LongSeq [string length $SeqProt] set LesLignesEMBL {} lappend LesLignesEMBL "ID $Nom created by Gscope from a CDS file " set LigneAC [lindex [split $NucEMBL "\n"] 1] if {[regexp "^AC " $LigneAC]} { lappend LesLignesEMBL $LigneAC } else { lappend LesLignesEMBL "AC $Nom;" } set ChampsInteressants [ChampsInteressantsDansTexteEMBL $NucEMBL] if {$ChampsInteressants!=""} { foreach Champ [split $ChampsInteressants "\n"] { lappend LesLignesEMBL $Champ if {$GN=="" && [regexp "^GN " $Champ]} { set GN [VraiGNDeLaLigneGN $Champ] InformeSansDemander $Nom "ValiGN: $GN" } if {[regexp "^DE " $Champ]} { set DE [VraiDEDeLaLigneDE $Champ] InformeSansDemander $Nom "ValiDE: $DE" } } } if {$NucOnly} { continue } lappend LesLignesEMBL "SQ SEQUENCE $LongSeq AA;" lappend LesLignesEMBL [SequenceFormatBrut $SeqProt] set ProtEMBL [join $LesLignesEMBL "\n"] set ProtTFA [SequenceFormatTFA $ProtEMBL "$Nom" "embl"] Sauve $ProtEMBL dans $FiProtEMBL Sauve $ProtTFA dans $FiProtTFA } else { set SeqProt [SequenceFormatEMBL $SeqVer] Espionne "SeqProt\n$SeqProt" regsub {^ID [^\n]+} $SeqProt "ID $Nom created by Gscope" SeqProt Sauve $SeqProt dans $FiProtEMBL set Entete "$Nom" set ChampsInteressants [ChampsInteressantsDansTexteEMBL $SeqProt] if {$ChampsInteressants!=""} { lappend LesLignesEMBL $ChampsInteressants foreach Champ [split $ChampsInteressants "\n"] { lappend LesLignesEMBL $Champ if {[regexp "^GN " $Champ]} { set GN [VraiGNDeLaLigneGN $Champ] InformeSansDemander $Nom "ValiGN: $GN" append Entete " $GN" } if {[regexp "^DE " $Champ]} { set DE [VraiDEDeLaLigneDE $Champ] InformeSansDemander $Nom "ValiDE: $DE" append Entete " $DE" } } } set ProtTFA [SequenceFormatTFA $SeqProt "$Entete" "embl"] Sauve $ProtTFA dans $FiProtTFA } continue } if {[OuiOuNon "The Query sequence for $Nom doesn't yet exists. \n\ Do I skipp $Nom [Alias $Nom] ?"]} { break } } FinPasTouche $Nom } } set BanqueTBlastN "" if {[OuiOuNon "Do I run a tblastn for all ? " 0]} { set BanqueTBlastN [ChoixParmi [list "human" "genomes" "myself"]] if {$BanqueTBlastN!=""} { set RepTBlastN "$RepertoireDuGenome/tblastn$BanqueTBlastN" if { ! [file exists $RepTBlastN]} { File mkdir $RepTBlastN } TBlastNPourTous $BanqueTBlastN } } if { ! [OuiOuNon "Do you want to complete the database ?" 0]} { return } set BanqueTBlastN [WhichBanqueTBlastN $BanqueTBlastN] CompleteLaDataBase $BanqueTBlastN } proc CreeLaBase {} { global RepertoireDuGenome global CurrentGenome global FichierMiniConfig global VersionDeGscopeAuBigBang global FichierSequenceADN global PrefixeDesORFs global LongueurMiniDesORFs global GenomeOuCollection global Org1 Org2 if { ! [OuiOuNon "We will build, together, the database for $CurrentGenome.\ \n \n ... this means beton/MiniConfig \ \n beton/adn tdn rac \ \n fiches/bornesdespabs \ \n nuctfa/*, prottfa/*, nucembl/*, protembl/* \ \n fiches/compositionenatgc\ \n blastp/*, apn/* fiches/nombredecopainsdansblast \ \n msf/*, phylo \ \n tblastngenomes/* TwoGeneClusterAnalysis etc. \ \n \n If some of these files exist You can delete them before answering.\ \n \ \n Go ?"]} { if {[OuiOuNon "Do I exit ?"]} { exit } else { return } } set GenomeOuCollection "Genome" set LesRepertoiresNecessaires {"beton" "fiches" "infos"} foreach Rep $LesRepertoiresNecessaires { if {[file exists "$RepertoireDuGenome/$Rep"]} { continue } File mkdir "$RepertoireDuGenome/$Rep" } while { ! [file exists $FichierMiniConfig]} { set VersionDeGscopeAuBigBang "VersionDeGscopeAuBigBang [VersionDeGscope]" set FichierSequenceADN "" while {$FichierSequenceADN==""} { set TFA [lindex [glob -nocomplain $RepertoireDuGenome/beton/*.tfa] 0] if {$TFA == ""} { set TFA "$RepertoireDuGenome/" } if {[OuiOuNon "Can You browse for DNA sequence file ?"]} { set TFA [ButineArborescence "All" $TFA] if {$TFA==""} { continue } set FichierSequenceADN "FichierSequenceADN $TFA" break } if {[OuiOuNon "Do You want to concatenate contigs ?"]} { set RepertoireContigs "$RepertoireDuGenome/contigs" while { ! [file exists $RepertoireContigs]} { if { ! [OuiOuNon "Before answering, could You create $RepertoireContigs\n\ containing all the contigs files ?"]} { break } } if {[file exists $RepertoireContigs]} { set TFA [ConcateneLesContigs] if {$TFA==""} { continue } set FichierSequenceADN "FichierSequenceADN $TFA" break } } if {[OuiOuNon "Do You want to read GenBank files ?"]} { set OffsetNumero 0 while {[OuiOuNon "Do I use the ORF numbering in the GenBank files ?" 0]} { if {[OuiOuNon "From the /locus-tag ?"]} { set OffsetNumero "NumeroDansLocusTag" break } if {[OuiOuNon "From the /gene and-or the /note field ?"]} { set OffsetNumero "NumeroDansGeNo" break } if {[OuiOuNon "Only from the /gene field ?"]} { set OffsetNumero "NumeroDansGene" break } if {[OuiOuNon "Only from the /note field ?"]} { set OffsetNumero "NumeroDansNote" break } } if {$OffsetNumero!=0} { global SupposePrefixe if { ! [info exists SupposePrefixe]} { set SupposePrefixe "" while {$SupposePrefixe==""} { if {[OuiOuNon "Do You know which prefixe is used for ORF numbering ?" 0]} { set SupposePrefixe [Entre "ECU\[0-9\]+_"] if {$SupposePrefixe!=""} { break } } else { break } } } } while {1} { FaireLire "I accept 3 situations ;\n \ One GenBank file \n \ Several GenBank files are in one directory, without other files\n \ or \n \ The file are somewhere (with other files) but numbered in increasing order" if {[OuiOuNon "Is there only ONE GenBank file to read ?"]} { set FichiersGB [ButineArborescence All $RepertoireDuGenome] break } elseif {[OuiOuNon "Are all the GenBank files alone in one directory ?"]} { set Rep [tk_chooseDirectory -mustexist 1 -initialdir "$RepertoireDuGenome/"] if {$Rep==""} { continue } set FichiersGB "$Rep/*" break } elseif {[OuiOuNon "OK for increasing numbering.\nPlease browse for one of these files"]} { set FichiersGB [ButineArborescence All $RepertoireDuGenome] if {$FichiersGB==""} { continue } if {[regexp {[0-9]+$} $FichiersGB]} { regsub {[0-9]+$} $FichiersGB "" FichiersGB } break } else { continue } } if {$FichiersGB!=""} { set TFA [DecortiqueLesGenBank $FichiersGB $OffsetNumero] if {$TFA==""} { continue } set FichierSequenceADN "FichierSequenceADN $TFA" break } } if {[OuiOuNon "Do You want to read a FASTA file with all your sequences ?"]} { CreeLesPABsAvecUnProteomeDansTFAs break } if {[OuiOuNon "Do You want to use an existing ORF list ?\n(typically from an other Gscope project)"]} { CreeLeFichierBornesDesPABs break } if {[OuiOuNon "Do I stop ?"]} { exit } } set PrefixeDesORFs [Entre "PrefixeDesORFs ORF"] regsub { *PrefixeDesORFs *} $PrefixeDesORFs "" P set PrefixeDesORFs "PrefixeDesORFs $P" set LongueurMiniDesORFs [Entre "LongueurMiniDesORFs 300"] regsub { *LongueurMiniDesORFs *} $LongueurMiniDesORFs "" L set LongueurMiniDesORFs "LongueurMiniDesORFs $L" FaireLire "Please select the organism." set Genre "Genius" set Espece "species" scan [MontreOrganismes "AvecRetour"] "%s %s %s" Orga Genre Espece set TexteNotreOS "NotreOS $Genre $Espece." set TexteNotreOC "NotreOC [OCduOS "$Genre $Espece"]" set TexteNotreOX "NotreOX [NotreOX]" set GenomeOuCollection "GenomeOuCollection Genome" set LaConfig {} lappend LaConfig "#MiniConfig " lappend LaConfig "$FichierSequenceADN" lappend LaConfig "$VersionDeGscopeAuBigBang" lappend LaConfig "$PrefixeDesORFs" lappend LaConfig "$LongueurMiniDesORFs" lappend LaConfig "$TexteNotreOS" lappend LaConfig "$TexteNotreOC" lappend LaConfig "$TexteNotreOX" lappend LaConfig "$GenomeOuCollection" if {[OuiOuNon "[join $LaConfig "\n"]\n\n OK ?" ]} { SauveLesLignes $LaConfig dans $FichierMiniConfig } else { if {[OuiOuNon "Stop ?"]} { exit } } } ChargeMiniConfig LesOrganismesTresProches if { ! [file exists "$RepertoireDuGenome/beton/adn"]} { set AncienNomDuFichierSequenceADN $FichierSequenceADN if {[OuiOuNon "Should I create $RepertoireDuGenome/beton/adn tdn rac ?"]} { CreeADNetTDNetRACaPartirDuFichierTFA $FichierSequenceADN CreeCompletTFAavecADN } if {[file exists "$AncienNomDuFichierSequenceADN.pure"] && \ [OuiOuNon "Should I create $RepertoireDuGenome/beton/adn.pure tdn.pure rac.pure ?"]} { CreeADNetTDNetRACaPartirDuFichierTFA "$AncienNomDuFichierSequenceADN.pure" } } if { ! [file exists "$RepertoireDuGenome/fiches/bornesdespabs"]} { CreeLeFichierBornesDesPABs } if { [OuiOuNon "Do I run some basic sequence analysis ?"]} { if { [OuiOuNon "Do I create the files Nuc and Prot ? "]} { CreeLesFichiersNucTFAetProtTFAetNucEMBLetProtEMBLAvecBornesDesPABsEtADN } set SeqLaTotale [OuiOuNon " Do I run all standard analysis ?\n\ ATGC composition, GC drawing, ShineDalgarno\n\ CodonW, Glimmer, tRNAscan\n\ (I hope You didn't forget to setcodonW setglimmer settrnascan !)"] if { $SeqLaTotale || [OuiOuNon "Do I create the file compositionenatgc ? "]} { CreeLeFichierCompositionEnATGC } if { $SeqLaTotale || [OuiOuNon "Do I create the file spectregc ? "]} { CreeLesFichiersSpectreDesGC } if { $SeqLaTotale || [OuiOuNon "Do I see for ShineDalgarno ? "]} { CreeLesFichiersDesShineDalgarnoDesPABs } if { $SeqLaTotale || [OuiOuNon "Do I run CodonW for Codon Adaptation Index ? \n(Answer No if you didn't 'setcodonw'.)"]} { CodonW } if { $SeqLaTotale || [CreateurDesPABs] != "Glimmer" && [OuiOuNon "Do I run Glimmer to compare with existing ORFs ?"]} { Glimmer "GLIMMER0000" CreeCorrespondanceAvecGlimmer } if { $SeqLaTotale || [OuiOuNon "Do I run tRNAscan-SE ? "]} { TRNAscanSE CreeLesFichiersNucTFAetNucEMBLAvecBornesDesTRNAsEtADN } } if { [OuiOuNon "Do I run all BlastP ? "]} { BlastPPourTous } if { [OuiOuNon "Do I run all BlastN against human ? "]} { BlastNPourTous } set BanqueTBlastN "" if {[OuiOuNon "Do I run a tblastn for all ? "]} { set BanqueTBlastN [ChoixParmi [list "human" "genomes" "myself"]] if {$BanqueTBlastN!=""} { set RepTBlastN "$RepertoireDuGenome/tblastn$BanqueTBlastN" if { ! [file exists $RepTBlastN]} { File mkdir $RepTBlastN } TBlastNPourTous $BanqueTBlastN } } set BanqueTBlastN [WhichBanqueTBlastN $BanqueTBlastN] if { ! [OuiOuNon "Do You want to complete the database ?"]} { return } CompleteLaDataBase $BanqueTBlastN if {[OuiOuNon "Do I exit Gscope ?"]} { exit } } proc CompleteLaDataBase {{BanqueTBlastN ""}} { global RepertoireDuGenome global NotreOS global NotreOC global Org1 Org2 if { [file exists "$RepertoireDuGenome/blastp"] && [OuiOuNon "Can I count the blastp hits ? "]} { if {[OuiOuNon "Do I use Daedalus ?"]} { DaedalusHitsDuBlastPPourTous CreeLeFichierNombreDeCopainsDansBlast } else { CreeLesFichiersApns CreeLeFichierNombreDeCopainsDansBlast } WithPDB "CreateIt" } if { [file exists "$RepertoireDuGenome/blastn"] && [OuiOuNon "Can I count the blastn hits ? "]} { CreeLesFichiersApns blastn CreeLeFichierNombreDeCopainsDansBlast } if {[file exists "$RepertoireDuGenome/apns"] && [OuiOuNon "Do I create Narcisse (the database reference of each prot) ?" ]} { Narcisse CreateIt if {[OuiOuNon "Do I update /infos files with the fields ID AC DE GN found in the database ?"]} { InformeParNarcissePourTous } } if {[file exists "$RepertoireDuGenome/apns"] && [OuiOuNon "Do I create OrthoBlastP ?" ]} { CreeOrthoBlastP ORGAorgaDesBlastPs "CreateIt" } AnalyseLesDbClustal if { [OuiOuNon "Do I create the phylo ranks ? "]} { PhyloRank } AnalyseLesTBlastN $BanqueTBlastN if {[OuiOuNon "Do I create the summary files in $RepertoireDuGenome/notes/ ?"]} { CreeToutesLesNotes } } 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 } } } }