bio 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +3421 -0
- data/KNOWN_ISSUES.rdoc +88 -0
- data/README.rdoc +252 -0
- data/README_DEV.rdoc +285 -0
- data/Rakefile +143 -0
- data/bin/bioruby +0 -0
- data/bin/br_biofetch.rb +0 -0
- data/bin/br_bioflat.rb +12 -1
- data/bin/br_biogetseq.rb +0 -0
- data/bin/br_pmfetch.rb +4 -3
- data/bioruby.gemspec +477 -0
- data/bioruby.gemspec.erb +117 -0
- data/doc/Changes-0.7.rd +7 -0
- data/doc/Changes-1.3.rdoc +239 -0
- data/doc/Tutorial.rd +296 -184
- data/doc/Tutorial.rd.html +1031 -0
- data/doc/Tutorial.rd.ja +111 -45
- data/doc/Tutorial.rd.ja.html +2225 -0
- data/doc/bioruby.css +281 -0
- data/extconf.rb +2 -0
- data/lib/bio.rb +29 -4
- data/lib/bio/appl/blast.rb +306 -121
- data/lib/bio/appl/blast/ddbj.rb +142 -0
- data/lib/bio/appl/blast/format0.rb +35 -25
- data/lib/bio/appl/blast/format8.rb +2 -2
- data/lib/bio/appl/blast/genomenet.rb +263 -0
- data/lib/bio/appl/blast/ncbioptions.rb +220 -0
- data/lib/bio/appl/blast/remote.rb +106 -0
- data/lib/bio/appl/blast/report.rb +260 -9
- data/lib/bio/appl/blast/rexml.rb +12 -5
- data/lib/bio/appl/blast/rpsblast.rb +277 -0
- data/lib/bio/appl/blast/wublast.rb +133 -12
- data/lib/bio/appl/blast/xmlparser.rb +35 -18
- data/lib/bio/appl/blat/report.rb +46 -5
- data/lib/bio/appl/emboss.rb +62 -13
- data/lib/bio/appl/fasta.rb +9 -11
- data/lib/bio/appl/genscan/report.rb +3 -3
- data/lib/bio/appl/hmmer.rb +1 -1
- data/lib/bio/appl/hmmer/report.rb +10 -10
- data/lib/bio/appl/paml/baseml.rb +95 -0
- data/lib/bio/appl/paml/baseml/report.rb +32 -0
- data/lib/bio/appl/paml/codeml.rb +242 -0
- data/lib/bio/appl/paml/codeml/rates.rb +67 -0
- data/lib/bio/appl/paml/codeml/report.rb +67 -0
- data/lib/bio/appl/paml/common.rb +348 -0
- data/lib/bio/appl/paml/common_report.rb +38 -0
- data/lib/bio/appl/paml/yn00.rb +103 -0
- data/lib/bio/appl/paml/yn00/report.rb +32 -0
- data/lib/bio/appl/psort.rb +2 -2
- data/lib/bio/appl/pts1.rb +5 -5
- data/lib/bio/appl/tmhmm/report.rb +10 -1
- data/lib/bio/command.rb +297 -41
- data/lib/bio/compat/features.rb +157 -0
- data/lib/bio/compat/references.rb +128 -0
- data/lib/bio/db/biosql/biosql_to_biosequence.rb +67 -0
- data/lib/bio/db/biosql/sequence.rb +508 -0
- data/lib/bio/db/embl/common.rb +28 -12
- data/lib/bio/db/embl/embl.rb +107 -9
- data/lib/bio/db/embl/embl_to_biosequence.rb +85 -0
- data/lib/bio/db/embl/format_embl.rb +190 -0
- data/lib/bio/db/embl/sptr.rb +15 -16
- data/lib/bio/db/fantom.rb +6 -8
- data/lib/bio/db/fasta.rb +10 -507
- data/lib/bio/db/fasta/defline.rb +532 -0
- data/lib/bio/db/fasta/fasta_to_biosequence.rb +63 -0
- data/lib/bio/db/fasta/format_fasta.rb +97 -0
- data/lib/bio/db/genbank/common.rb +25 -8
- data/lib/bio/db/genbank/format_genbank.rb +187 -0
- data/lib/bio/db/genbank/genbank.rb +36 -1
- data/lib/bio/db/genbank/genbank_to_biosequence.rb +86 -0
- data/lib/bio/db/gff.rb +1791 -119
- data/lib/bio/db/kegg/glycan.rb +2 -6
- data/lib/bio/db/lasergene.rb +3 -3
- data/lib/bio/db/medline.rb +4 -1
- data/lib/bio/db/newick.rb +10 -10
- data/lib/bio/db/pdb/chain.rb +6 -2
- data/lib/bio/db/pdb/pdb.rb +12 -3
- data/lib/bio/db/rebase.rb +7 -8
- data/lib/bio/db/soft.rb +3 -3
- data/lib/bio/feature.rb +1 -88
- data/lib/bio/io/biosql/biodatabase.rb +64 -0
- data/lib/bio/io/biosql/bioentry.rb +29 -0
- data/lib/bio/io/biosql/bioentry_dbxref.rb +11 -0
- data/lib/bio/io/biosql/bioentry_path.rb +12 -0
- data/lib/bio/io/biosql/bioentry_qualifier_value.rb +10 -0
- data/lib/bio/io/biosql/bioentry_reference.rb +10 -0
- data/lib/bio/io/biosql/bioentry_relationship.rb +10 -0
- data/lib/bio/io/biosql/biosequence.rb +11 -0
- data/lib/bio/io/biosql/comment.rb +7 -0
- data/lib/bio/io/biosql/config/database.yml +20 -0
- data/lib/bio/io/biosql/dbxref.rb +13 -0
- data/lib/bio/io/biosql/dbxref_qualifier_value.rb +12 -0
- data/lib/bio/io/biosql/location.rb +32 -0
- data/lib/bio/io/biosql/location_qualifier_value.rb +11 -0
- data/lib/bio/io/biosql/ontology.rb +10 -0
- data/lib/bio/io/biosql/reference.rb +9 -0
- data/lib/bio/io/biosql/seqfeature.rb +32 -0
- data/lib/bio/io/biosql/seqfeature_dbxref.rb +11 -0
- data/lib/bio/io/biosql/seqfeature_path.rb +11 -0
- data/lib/bio/io/biosql/seqfeature_qualifier_value.rb +20 -0
- data/lib/bio/io/biosql/seqfeature_relationship.rb +11 -0
- data/lib/bio/io/biosql/taxon.rb +12 -0
- data/lib/bio/io/biosql/taxon_name.rb +9 -0
- data/lib/bio/io/biosql/term.rb +27 -0
- data/lib/bio/io/biosql/term_dbxref.rb +11 -0
- data/lib/bio/io/biosql/term_path.rb +12 -0
- data/lib/bio/io/biosql/term_relationship.rb +13 -0
- data/lib/bio/io/biosql/term_relationship_term.rb +11 -0
- data/lib/bio/io/biosql/term_synonym.rb +10 -0
- data/lib/bio/io/das.rb +7 -7
- data/lib/bio/io/ddbjxml.rb +57 -0
- data/lib/bio/io/ensembl.rb +2 -2
- data/lib/bio/io/fetch.rb +28 -14
- data/lib/bio/io/flatfile.rb +17 -853
- data/lib/bio/io/flatfile/autodetection.rb +545 -0
- data/lib/bio/io/flatfile/buffer.rb +237 -0
- data/lib/bio/io/flatfile/index.rb +17 -7
- data/lib/bio/io/flatfile/indexer.rb +30 -12
- data/lib/bio/io/flatfile/splitter.rb +297 -0
- data/lib/bio/io/hinv.rb +442 -0
- data/lib/bio/io/keggapi.rb +2 -2
- data/lib/bio/io/ncbirest.rb +733 -0
- data/lib/bio/io/pubmed.rb +34 -80
- data/lib/bio/io/registry.rb +2 -2
- data/lib/bio/io/sql.rb +178 -357
- data/lib/bio/io/togows.rb +458 -0
- data/lib/bio/location.rb +106 -11
- data/lib/bio/pathway.rb +120 -14
- data/lib/bio/reference.rb +115 -101
- data/lib/bio/sequence.rb +164 -183
- data/lib/bio/sequence/adapter.rb +108 -0
- data/lib/bio/sequence/common.rb +22 -45
- data/lib/bio/sequence/compat.rb +2 -2
- data/lib/bio/sequence/dblink.rb +54 -0
- data/lib/bio/sequence/format.rb +254 -77
- data/lib/bio/sequence/format_raw.rb +23 -0
- data/lib/bio/shell.rb +3 -1
- data/lib/bio/shell/core.rb +2 -2
- data/lib/bio/shell/plugin/entry.rb +33 -4
- data/lib/bio/shell/plugin/ncbirest.rb +64 -0
- data/lib/bio/shell/plugin/togows.rb +40 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/bioruby_generator.rb +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_classes.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_log.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_methods.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_modules.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_variables.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby-bg.gif +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby-gem.png +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby-link.gif +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby.css +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby_controller.rb +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby_helper.rb +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/commands.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/history.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/index.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/spinner.gif +0 -0
- data/lib/bio/tree.rb +4 -2
- data/lib/bio/util/color_scheme.rb +2 -2
- data/lib/bio/util/contingency_table.rb +2 -2
- data/lib/bio/util/restriction_enzyme.rb +2 -2
- data/lib/bio/util/restriction_enzyme/single_strand.rb +6 -5
- data/lib/bio/version.rb +25 -0
- data/rdoc.zsh +8 -0
- data/sample/any2fasta.rb +0 -0
- data/sample/biofetch.rb +0 -0
- data/sample/dbget +0 -0
- data/sample/demo_sequence.rb +158 -0
- data/sample/enzymes.rb +0 -0
- data/sample/fasta2tab.rb +0 -0
- data/sample/fastagrep.rb +72 -0
- data/sample/fastasort.rb +54 -0
- data/sample/fsplit.rb +0 -0
- data/sample/gb2fasta.rb +2 -3
- data/sample/gb2tab.rb +0 -0
- data/sample/gbtab2mysql.rb +0 -0
- data/sample/genes2nuc.rb +0 -0
- data/sample/genes2pep.rb +0 -0
- data/sample/genes2tab.rb +0 -0
- data/sample/genome2rb.rb +0 -0
- data/sample/genome2tab.rb +0 -0
- data/sample/goslim.rb +0 -0
- data/sample/gt2fasta.rb +0 -0
- data/sample/na2aa.rb +34 -0
- data/sample/pmfetch.rb +0 -0
- data/sample/pmsearch.rb +0 -0
- data/sample/ssearch2tab.rb +0 -0
- data/sample/tfastx2tab.rb +0 -0
- data/sample/vs-genes.rb +0 -0
- data/setup.rb +1596 -0
- data/test/data/blast/blastp-multi.m7 +188 -0
- data/test/data/command/echoarg2.bat +1 -0
- data/test/data/paml/codeml/control_file.txt +30 -0
- data/test/data/paml/codeml/output.txt +78 -0
- data/test/data/paml/codeml/rates +217 -0
- data/test/data/rpsblast/misc.rpsblast +193 -0
- data/test/data/soft/GDS100_partial.soft +0 -0
- data/test/data/soft/GSE3457_family_partial.soft +0 -0
- data/test/functional/bio/appl/test_pts1.rb +115 -0
- data/test/functional/bio/io/test_ensembl.rb +123 -80
- data/test/functional/bio/io/test_togows.rb +267 -0
- data/test/functional/bio/sequence/test_output_embl.rb +51 -0
- data/test/functional/bio/test_command.rb +301 -0
- data/test/runner.rb +17 -1
- data/test/unit/bio/appl/blast/test_ncbioptions.rb +112 -0
- data/test/unit/bio/appl/blast/test_report.rb +753 -35
- data/test/unit/bio/appl/blast/test_rpsblast.rb +398 -0
- data/test/unit/bio/appl/paml/codeml/test_rates.rb +45 -0
- data/test/unit/bio/appl/paml/codeml/test_report.rb +45 -0
- data/test/unit/bio/appl/paml/test_codeml.rb +174 -0
- data/test/unit/bio/appl/test_blast.rb +135 -4
- data/test/unit/bio/appl/test_fasta.rb +2 -2
- data/test/unit/bio/appl/test_pts1.rb +1 -64
- data/test/unit/bio/db/embl/test_common.rb +15 -15
- data/test/unit/bio/db/embl/test_embl.rb +4 -4
- data/test/unit/bio/db/embl/test_embl_rel89.rb +5 -5
- data/test/unit/bio/db/embl/test_embl_to_bioseq.rb +203 -0
- data/test/unit/bio/db/embl/test_sptr.rb +38 -1
- data/test/unit/bio/db/pdb/test_pdb.rb +2 -2
- data/test/unit/bio/db/test_gff.rb +1151 -25
- data/test/unit/bio/db/test_medline.rb +127 -0
- data/test/unit/bio/db/test_nexus.rb +5 -1
- data/test/unit/bio/db/test_prosite.rb +4 -4
- data/test/unit/bio/io/flatfile/test_autodetection.rb +375 -0
- data/test/unit/bio/io/flatfile/test_buffer.rb +251 -0
- data/test/unit/bio/io/flatfile/test_splitter.rb +369 -0
- data/test/unit/bio/io/test_ddbjxml.rb +8 -3
- data/test/unit/bio/io/test_fastacmd.rb +5 -5
- data/test/unit/bio/io/test_flatfile.rb +357 -106
- data/test/unit/bio/io/test_soapwsdl.rb +2 -2
- data/test/unit/bio/io/test_togows.rb +161 -0
- data/test/unit/bio/sequence/test_common.rb +210 -11
- data/test/unit/bio/sequence/test_compat.rb +3 -3
- data/test/unit/bio/sequence/test_dblink.rb +58 -0
- data/test/unit/bio/sequence/test_na.rb +2 -2
- data/test/unit/bio/test_command.rb +111 -50
- data/test/unit/bio/test_feature.rb +29 -1
- data/test/unit/bio/test_location.rb +566 -6
- data/test/unit/bio/test_pathway.rb +91 -65
- data/test/unit/bio/test_reference.rb +67 -13
- data/test/unit/bio/util/restriction_enzyme/analysis/test_calculated_cuts.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/analysis/test_cut_ranges.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/analysis/test_sequence_range.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_aligned_strands.rb +4 -3
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_location_pair.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_location_pair_in_enzyme_notation.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_locations.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_locations_in_enzyme_notation.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/single_strand/test_cut_locations_in_enzyme_notation.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/test_analysis.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/test_cut_symbol.rb +4 -4
- data/test/unit/bio/util/restriction_enzyme/test_double_stranded.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/test_single_strand.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/test_single_strand_complement.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/test_string_formatting.rb +3 -3
- data/test/unit/bio/util/test_restriction_enzyme.rb +3 -3
- metadata +202 -167
- data/test/unit/bio/appl/blast/test_xmlparser.rb +0 -388
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
#
|
|
2
|
+
# = bio/appl/paml/common.rb - Basic wrapper class common to PAML programs
|
|
3
|
+
#
|
|
4
|
+
# Copyright:: Copyright (C) 2008
|
|
5
|
+
# Michael D. Barton <mail@michaelbarton.me.uk>,
|
|
6
|
+
# Naohisa Goto <ng@bioruby.org>
|
|
7
|
+
#
|
|
8
|
+
# License:: The Ruby License
|
|
9
|
+
#
|
|
10
|
+
# == Description
|
|
11
|
+
#
|
|
12
|
+
# This file contains Bio::PAML::Common, a basic wrapper class for
|
|
13
|
+
# running PAML programs.
|
|
14
|
+
#
|
|
15
|
+
# == References
|
|
16
|
+
#
|
|
17
|
+
# * http://abacus.gene.ucl.ac.uk/software/paml.html
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
require 'tempfile'
|
|
21
|
+
require 'bio/command'
|
|
22
|
+
require 'bio/alignment'
|
|
23
|
+
|
|
24
|
+
module Bio
|
|
25
|
+
module PAML
|
|
26
|
+
|
|
27
|
+
autoload :Codeml, 'bio/appl/paml/codeml'
|
|
28
|
+
autoload :Baseml, 'bio/appl/paml/baseml'
|
|
29
|
+
autoload :Yn00, 'bio/appl/paml/yn00'
|
|
30
|
+
#--
|
|
31
|
+
# The autoload of Common::Report, Codeml::Report, Codeml::Rates,
|
|
32
|
+
# Baseml::Report, Yn00::Report are described inside the classes.
|
|
33
|
+
#++
|
|
34
|
+
|
|
35
|
+
# == Description
|
|
36
|
+
#
|
|
37
|
+
# Bio::PAML::Common is a basic wrapper class for PAML programs.
|
|
38
|
+
# The class provides methods for generating the necessary configuration
|
|
39
|
+
# file, and running a program.
|
|
40
|
+
#
|
|
41
|
+
class Common
|
|
42
|
+
|
|
43
|
+
autoload :Report, 'bio/appl/paml/common_report'
|
|
44
|
+
|
|
45
|
+
# Default parameters. Should be redefined in subclass.
|
|
46
|
+
DEFAULT_PARAMETERS = {}
|
|
47
|
+
|
|
48
|
+
# Default program. Should be redifined in subclass.
|
|
49
|
+
DEFAULT_PROGRAM = nil
|
|
50
|
+
|
|
51
|
+
# Parameters described in the control file. (Hash)
|
|
52
|
+
# Each key of the hash must be a Symbol object, and each value
|
|
53
|
+
# must be a String object or nil.
|
|
54
|
+
attr_accessor :parameters
|
|
55
|
+
|
|
56
|
+
# Preferred order of parameters.
|
|
57
|
+
DEFAULT_PARAMETERS_ORDER = %w( seqfile outfile treefile
|
|
58
|
+
noisy verbose runmode seqtype CodonFreq ndata clock
|
|
59
|
+
aaDist aaRatefile model NSsites icode Mgene
|
|
60
|
+
fix_kappa kappa fix_omega omega fix_alpha alpha Malpha ncatG
|
|
61
|
+
fix_rho rho nparK nhomo getSE RateAncestor
|
|
62
|
+
Small_Diff cleandata fix_blength method ).collect { |x| x.to_sym }
|
|
63
|
+
|
|
64
|
+
# Creates a wrapper instance, which will run using the specified
|
|
65
|
+
# binary location or the command in the PATH.
|
|
66
|
+
# If program is specified as nil, DEFAULT_PROGRAM is used.
|
|
67
|
+
# Default parameters are automatically loaded and merged with
|
|
68
|
+
# the specified parameters.
|
|
69
|
+
# ---
|
|
70
|
+
# *Arguments*:
|
|
71
|
+
# * (optional) _program_: path to the program, or command name (String)
|
|
72
|
+
# * (optional) _params_: parameters (Hash)
|
|
73
|
+
def initialize(program = nil, params = {})
|
|
74
|
+
@program = program || self.class::DEFAULT_PROGRAM
|
|
75
|
+
set_default_parameters
|
|
76
|
+
self.parameters.update(params)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Runs the program on the parameters in the passed control file.
|
|
80
|
+
# No parameters checks are performed.
|
|
81
|
+
# All internal parameters are ignored and are kept untouched.
|
|
82
|
+
# The output and report attributes are cleared in this method.
|
|
83
|
+
#
|
|
84
|
+
# Warning about PAML's behavior:
|
|
85
|
+
# PAML writes supplemental output files in the current directory
|
|
86
|
+
# with fixed file names which can not be changed with parameters
|
|
87
|
+
# or command-line options, for example, rates, rst, and rub.
|
|
88
|
+
# This behavior may ovarwrite existing files, especially
|
|
89
|
+
# previous supplemental results.
|
|
90
|
+
#
|
|
91
|
+
# ---
|
|
92
|
+
# *Arguments*:
|
|
93
|
+
# * (optional) _control_file_: file name of control file (String)
|
|
94
|
+
# *Returns*:: messages printed to the standard output (String)
|
|
95
|
+
def run(control_file)
|
|
96
|
+
exec_local([ control_file ])
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
# Runs the program on the internal parameters with the specified
|
|
101
|
+
# sequence alignment and tree.
|
|
102
|
+
#
|
|
103
|
+
# Note that parameters[:seqfile] and parameters[:outfile]
|
|
104
|
+
# are always modified, and parameters[:treefile] is modified
|
|
105
|
+
# when tree is specified.
|
|
106
|
+
#
|
|
107
|
+
# To prevent overwrite of existing files by PAML, this method
|
|
108
|
+
# automatically creates a temporary directory and the program
|
|
109
|
+
# is run inside the directory. After the end of the program,
|
|
110
|
+
# the temporary directory is automatically removed.
|
|
111
|
+
#
|
|
112
|
+
# ---
|
|
113
|
+
# *Arguments*:
|
|
114
|
+
# * (required) _alignment_: Bio::Alignment object or similar object
|
|
115
|
+
# * (optional) _tree_: Bio::Tree object
|
|
116
|
+
# *Returns*:: Report object
|
|
117
|
+
def query(alignment, tree = nil)
|
|
118
|
+
astr = alignment.output(:phylipnon)
|
|
119
|
+
if tree then
|
|
120
|
+
tstr = [ sprintf("%3d %2d\n", tree.leaves.size, 1), "\n",
|
|
121
|
+
tree.output(:newick,
|
|
122
|
+
{ :indent => false,
|
|
123
|
+
:bootstrap_style => :disabled,
|
|
124
|
+
:branch_length_style => :disabled })
|
|
125
|
+
].join('')
|
|
126
|
+
else
|
|
127
|
+
tstr = nil
|
|
128
|
+
end
|
|
129
|
+
str = _query_by_string(astr, tstr)
|
|
130
|
+
@report = self.class::Report.new(str)
|
|
131
|
+
@report
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Runs the program on the internal parameters with the specified
|
|
135
|
+
# sequence alignment data string and tree data string.
|
|
136
|
+
#
|
|
137
|
+
# Note that parameters[:outfile] is always modified, and
|
|
138
|
+
# parameters[:seqfile] and parameters[:treefile] are modified when
|
|
139
|
+
# alignment and tree are specified respectively.
|
|
140
|
+
#
|
|
141
|
+
# It raises RuntimeError if seqfile is not specified in the argument
|
|
142
|
+
# or in the parameter.
|
|
143
|
+
#
|
|
144
|
+
# For other information, see the document of query method.
|
|
145
|
+
#
|
|
146
|
+
# ---
|
|
147
|
+
# *Arguments*:
|
|
148
|
+
# * (optional) _alignment_: String
|
|
149
|
+
# * (optional) _tree_: String or nil
|
|
150
|
+
# *Returns*:: contents of output file (String)
|
|
151
|
+
def query_by_string(alignment = nil, tree = nil)
|
|
152
|
+
_query_by_string(alignment, tree)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# (private) implementation of query_by_string().
|
|
156
|
+
def _query_by_string(alignment = nil, tree = nil)
|
|
157
|
+
@parameters ||= {}
|
|
158
|
+
Bio::Command.mktmpdir('paml') do |path|
|
|
159
|
+
#$stderr.puts path.inspect
|
|
160
|
+
filenames = []
|
|
161
|
+
begin
|
|
162
|
+
# preparing outfile
|
|
163
|
+
outfile = Tempfile.new('out', path)
|
|
164
|
+
outfile.close(false)
|
|
165
|
+
outfn = File.basename(outfile.path)
|
|
166
|
+
self.parameters[:outfile] = outfn
|
|
167
|
+
filenames.push outfn
|
|
168
|
+
# preparing seqfile
|
|
169
|
+
if alignment then
|
|
170
|
+
seqfile = Tempfile.new('seq', path)
|
|
171
|
+
seqfile.print alignment
|
|
172
|
+
seqfile.close(false)
|
|
173
|
+
seqfn = File.basename(seqfile.path)
|
|
174
|
+
self.parameters[:seqfile] = seqfn
|
|
175
|
+
filenames.push seqfn
|
|
176
|
+
end
|
|
177
|
+
# preparing treefile
|
|
178
|
+
if tree then
|
|
179
|
+
treefile = Tempfile.new('tree', path)
|
|
180
|
+
treefile.print tree
|
|
181
|
+
treefile.close(false)
|
|
182
|
+
treefn = File.basename(treefile.path)
|
|
183
|
+
self.parameters[:treefile] = treefn
|
|
184
|
+
filenames.push treefn
|
|
185
|
+
end
|
|
186
|
+
# preparing control file
|
|
187
|
+
ctlfile = Tempfile.new('control', path)
|
|
188
|
+
ctlfile.print self.dump_parameters
|
|
189
|
+
ctlfile.close(false)
|
|
190
|
+
ctlfn = File.basename(ctlfile.path)
|
|
191
|
+
filenames.push ctlfn
|
|
192
|
+
# check parameters
|
|
193
|
+
if errors = check_parameters then
|
|
194
|
+
msg = errors.collect { |e| "error in parameter #{e[0]}: #{e[1]}" }
|
|
195
|
+
raise RuntimeError, msg.join("; ")
|
|
196
|
+
end
|
|
197
|
+
# exec command
|
|
198
|
+
stdout = exec_local([ ctlfn ], { :chdir => path })
|
|
199
|
+
# get main output
|
|
200
|
+
outfile.open
|
|
201
|
+
@output = outfile.read
|
|
202
|
+
# get supplemental result files
|
|
203
|
+
@supplemental_outputs = {}
|
|
204
|
+
(Dir.entries(path) - filenames).each do |name|
|
|
205
|
+
next unless /\A\w/ =~ name
|
|
206
|
+
fn = File.join(path, name)
|
|
207
|
+
if File.file?(fn) then
|
|
208
|
+
@supplemental_outputs[name] = File.read(fn)
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
ensure
|
|
212
|
+
outfile.close(true) if outfile
|
|
213
|
+
seqfile.close(true) if seqfile
|
|
214
|
+
treefile.close(true) if treefile
|
|
215
|
+
ctlfile.close(true) if ctlfile
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
@output
|
|
219
|
+
end
|
|
220
|
+
private :_query_by_string
|
|
221
|
+
|
|
222
|
+
# the last result of the program (String)
|
|
223
|
+
attr_reader :output
|
|
224
|
+
|
|
225
|
+
# Report object created from the last result
|
|
226
|
+
attr_reader :report
|
|
227
|
+
|
|
228
|
+
# the last exit status of the program
|
|
229
|
+
attr_reader :exit_status
|
|
230
|
+
|
|
231
|
+
# the last output to the stdout (String)
|
|
232
|
+
attr_reader :data_stdout
|
|
233
|
+
|
|
234
|
+
# the last executed command (Array of String)
|
|
235
|
+
attr_reader :command
|
|
236
|
+
|
|
237
|
+
# contents of supplemental output files (Hash).
|
|
238
|
+
# Each key is a file name and value is content of the file.
|
|
239
|
+
attr_reader :supplemental_outputs
|
|
240
|
+
|
|
241
|
+
# Loads parameters from the specified string.
|
|
242
|
+
# Note that all previous parameters are erased.
|
|
243
|
+
# Returns the parameters as a hash.
|
|
244
|
+
# ---
|
|
245
|
+
# *Arguments*:
|
|
246
|
+
# * (required) _str_: contents of a PAML control file (String)
|
|
247
|
+
# *Returns*:: parameters (Hash)
|
|
248
|
+
def load_parameters(str)
|
|
249
|
+
hash = {}
|
|
250
|
+
str.each_line do |line|
|
|
251
|
+
param, value = parse_parameter(line)
|
|
252
|
+
hash[param] = value if param
|
|
253
|
+
end
|
|
254
|
+
self.parameters = hash
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
# Loads system-wide default parameters.
|
|
258
|
+
# Note that all previous parameters are erased.
|
|
259
|
+
# Returns the parameters as a hash.
|
|
260
|
+
# ---
|
|
261
|
+
# *Returns*:: parameters (Hash)
|
|
262
|
+
def set_default_parameters
|
|
263
|
+
self.parameters = self.class::DEFAULT_PARAMETERS.merge(Hash.new)
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
# Shows parameters (content of control file) as a string.
|
|
267
|
+
# The string can be used for control file.
|
|
268
|
+
# ---
|
|
269
|
+
# *Returns*:: string representation of the parameters (String)
|
|
270
|
+
def dump_parameters
|
|
271
|
+
keyorder = DEFAULT_PARAMETERS_ORDER
|
|
272
|
+
keys = parameters.keys
|
|
273
|
+
str = ''
|
|
274
|
+
keys.sort do |x, y|
|
|
275
|
+
(keyorder.index(x) || (keyorder.size + keys.index(x))) <=>
|
|
276
|
+
(keyorder.index(y) || (keyorder.size + keys.index(y)))
|
|
277
|
+
end.each do |key|
|
|
278
|
+
value = parameters[key]
|
|
279
|
+
# Note: spaces are required in both side of the "=".
|
|
280
|
+
str.concat "#{key.to_s} = #{value.to_s}\n" if value
|
|
281
|
+
end
|
|
282
|
+
str
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
private
|
|
286
|
+
|
|
287
|
+
# (private) clear attributes except program and parameters
|
|
288
|
+
def reset
|
|
289
|
+
@command = nil
|
|
290
|
+
@output = nil
|
|
291
|
+
@report = nil
|
|
292
|
+
@exit_status = nil
|
|
293
|
+
@data_stdout = nil
|
|
294
|
+
@supplemental_outputs = nil
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
# (private) parses a parameter in a line
|
|
298
|
+
# ---
|
|
299
|
+
# *Arguments*:
|
|
300
|
+
# * (required) _line_: single line string (String)
|
|
301
|
+
# *Returns*:: parameter name (Symbol or nil), value (String or nil)
|
|
302
|
+
def parse_parameter(line)
|
|
303
|
+
# remove comment
|
|
304
|
+
line = line.sub(/\*.*/, '')
|
|
305
|
+
# Note: spaces are required in both side of the "=".
|
|
306
|
+
param, value = line.strip.split(/\s+=\s+/, 2)
|
|
307
|
+
if !param or param.empty? then
|
|
308
|
+
param = nil
|
|
309
|
+
else
|
|
310
|
+
param = param.to_sym
|
|
311
|
+
end
|
|
312
|
+
return param, value
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
# (private) Runs the program on the parameters in the passed control file.
|
|
316
|
+
# No parameter check are executed.
|
|
317
|
+
# ---
|
|
318
|
+
# *Arguments*:
|
|
319
|
+
# * (optional) _control_file_: file name of control file (String)
|
|
320
|
+
# *Returns*:: messages printed to the standard output (String)
|
|
321
|
+
def exec_local(arguments, options = {})
|
|
322
|
+
reset
|
|
323
|
+
cmd = [ @program, *arguments ]
|
|
324
|
+
@command = cmd
|
|
325
|
+
stdout = Bio::Command.query_command(cmd, nil, options)
|
|
326
|
+
@exit_status = $?
|
|
327
|
+
@data_stdout = stdout
|
|
328
|
+
stdout
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
# (private) Checks parameters.
|
|
332
|
+
# Returns nil if no errors found. Otherwise, returns an Array
|
|
333
|
+
# containing [ parameter, message ] pairs.
|
|
334
|
+
# ---
|
|
335
|
+
# *Arguments*:
|
|
336
|
+
# *Returns*:: nil or Array
|
|
337
|
+
def check_parameters
|
|
338
|
+
errors = []
|
|
339
|
+
param = self.parameters
|
|
340
|
+
if !param[:seqfile] or param[:seqfile].empty? then
|
|
341
|
+
errors.push([ :seqfile, 'seqfile not specified' ])
|
|
342
|
+
end
|
|
343
|
+
errors.empty? ? nil : errors
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
end #class Common
|
|
347
|
+
end #module PAML
|
|
348
|
+
end #module Bio
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#
|
|
2
|
+
# = bio/appl/paml/common_report.rb - basic report class for PAML results
|
|
3
|
+
#
|
|
4
|
+
# Copyright:: Copyright (C) 2008
|
|
5
|
+
# Naohisa Goto <ng@bioruby.org>
|
|
6
|
+
#
|
|
7
|
+
# License:: The Ruby License
|
|
8
|
+
#
|
|
9
|
+
# == Description
|
|
10
|
+
#
|
|
11
|
+
# This file contains Bio::PAML::Common::Report, a basic report class
|
|
12
|
+
# for PAML program's results.
|
|
13
|
+
#
|
|
14
|
+
# == References
|
|
15
|
+
#
|
|
16
|
+
# * http://abacus.gene.ucl.ac.uk/software/paml.html
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'bio/appl/paml/common'
|
|
20
|
+
|
|
21
|
+
module Bio::PAML
|
|
22
|
+
class Common
|
|
23
|
+
|
|
24
|
+
# UNDER CONSTRUCTION.
|
|
25
|
+
#
|
|
26
|
+
# Bio::PAML::Common::Report is a basic report class for PAML program's
|
|
27
|
+
# results. It will have common function for baseml and codeml.
|
|
28
|
+
#
|
|
29
|
+
# Normally, users should not use this class directly.
|
|
30
|
+
class Report
|
|
31
|
+
|
|
32
|
+
# Creates a new Report object.
|
|
33
|
+
def initialize(str)
|
|
34
|
+
end
|
|
35
|
+
end #class Report
|
|
36
|
+
|
|
37
|
+
end #class Common
|
|
38
|
+
end #module Bio::PAML
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#
|
|
2
|
+
# = bio/appl/paml/baseml.rb - Wrapper for running PAML program yn00
|
|
3
|
+
#
|
|
4
|
+
# Copyright:: Copyright (C) 2008
|
|
5
|
+
# Naohisa Goto <ng@bioruby.org>
|
|
6
|
+
#
|
|
7
|
+
# License:: The Ruby License
|
|
8
|
+
#
|
|
9
|
+
# == Description
|
|
10
|
+
#
|
|
11
|
+
# This file contains Bio::PAML::Yn00, a wrapper class running yn00.
|
|
12
|
+
#
|
|
13
|
+
# == References
|
|
14
|
+
#
|
|
15
|
+
# * http://abacus.gene.ucl.ac.uk/software/paml.html
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
require 'bio/appl/paml/common'
|
|
19
|
+
|
|
20
|
+
module Bio::PAML
|
|
21
|
+
|
|
22
|
+
# == Description
|
|
23
|
+
#
|
|
24
|
+
# Bio::PAML::Yn00 is a wrapper for running PAML yn00 program.
|
|
25
|
+
#
|
|
26
|
+
# Because most of the methods in this class are inherited from
|
|
27
|
+
# Bio::PAML::Common, see documents of Bio::PAML::Common for details.
|
|
28
|
+
#
|
|
29
|
+
# == Examples
|
|
30
|
+
#
|
|
31
|
+
# Example 1:
|
|
32
|
+
#
|
|
33
|
+
# require 'bio'
|
|
34
|
+
# # Reads multi-fasta formatted file and gets a Bio::Alignment object.
|
|
35
|
+
# alignment = Bio::FlatFile.open(Bio::Alignment::MultiFastaFormat,
|
|
36
|
+
# 'example.fst').alignment
|
|
37
|
+
# # Creates a Yn00 object
|
|
38
|
+
# baseml = Bio::PAML::Yn00.new
|
|
39
|
+
# # Sets parameters
|
|
40
|
+
# baseml.parameters[:verbose] = 1
|
|
41
|
+
# baseml.parameters[:icode] = 0
|
|
42
|
+
# # You can also set many parameters at a time.
|
|
43
|
+
# baseml.parameters.update({ :weighting => 0, :commonf3x4 => 0 })
|
|
44
|
+
# # Executes yn00 with the alignment
|
|
45
|
+
# report = yn00.query(alignment)
|
|
46
|
+
#
|
|
47
|
+
class Yn00 < Common
|
|
48
|
+
|
|
49
|
+
autoload :Report, 'bio/appl/paml/yn00/report'
|
|
50
|
+
|
|
51
|
+
# Default program name
|
|
52
|
+
DEFAULT_PROGRAM = 'yn00'.freeze
|
|
53
|
+
|
|
54
|
+
# Default parameters when running baseml.
|
|
55
|
+
#
|
|
56
|
+
# The parameters whose values are different from the baseml defalut
|
|
57
|
+
# value (described in pamlDOC.pdf) in PAML 4.1 are:
|
|
58
|
+
# seqfile, outfile, treefile, ndata, noisy, verbose
|
|
59
|
+
#
|
|
60
|
+
DEFAULT_PARAMETERS = {
|
|
61
|
+
# Essential argumemts
|
|
62
|
+
:seqfile => nil,
|
|
63
|
+
:outfile => nil,
|
|
64
|
+
# Optional arguments
|
|
65
|
+
:verbose => 1,
|
|
66
|
+
:icode => 0,
|
|
67
|
+
:weighting => 0,
|
|
68
|
+
:commonf3x4 => 0
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
# Runs the program on the internal parameters with the specified
|
|
72
|
+
# sequence alignment.
|
|
73
|
+
# Note that parameters[:seqfile] and parameters[:outfile]
|
|
74
|
+
# are always modified.
|
|
75
|
+
#
|
|
76
|
+
# For other important information, see the document of
|
|
77
|
+
# Bio::PAML::Common#query.
|
|
78
|
+
#
|
|
79
|
+
# ---
|
|
80
|
+
# *Arguments*:
|
|
81
|
+
# * (required) _alignment_: Bio::Alignment object or similar object
|
|
82
|
+
# *Returns*:: Report object
|
|
83
|
+
def query(alignment)
|
|
84
|
+
super(alignment)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Runs the program on the internal parameters with the specified
|
|
88
|
+
# sequence alignment as a String object.
|
|
89
|
+
#
|
|
90
|
+
# For other important information, see the document of
|
|
91
|
+
# query and Bio::PAML::Common#query_by_string methods.
|
|
92
|
+
#
|
|
93
|
+
# ---
|
|
94
|
+
# *Arguments*:
|
|
95
|
+
# * (required) _alignment_: Bio::Alignment object or similar object
|
|
96
|
+
# *Returns*:: Report object
|
|
97
|
+
def query_by_string(alignment = nil)
|
|
98
|
+
super(alignment)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
end #class Yn00
|
|
102
|
+
end #module Bio::PAML
|
|
103
|
+
|