bio 1.0.0 → 1.1.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/bin/bioruby +14 -122
- data/bin/br_biofetch.rb +2 -2
- data/bin/br_bioflat.rb +2 -2
- data/bin/br_biogetseq.rb +2 -2
- data/bin/br_pmfetch.rb +3 -3
- data/doc/Changes-0.7.rd +77 -0
- data/doc/KEGG_API.rd +523 -232
- data/doc/KEGG_API.rd.ja +529 -207
- data/doc/Tutorial.rd +48 -11
- data/lib/bio.rb +59 -6
- data/lib/bio/alignment.rb +713 -103
- data/lib/bio/appl/bl2seq/report.rb +2 -18
- data/lib/bio/appl/blast.rb +108 -91
- data/lib/bio/appl/blast/format0.rb +33 -18
- data/lib/bio/appl/blast/format8.rb +6 -20
- data/lib/bio/appl/blast/report.rb +293 -429
- data/lib/bio/appl/blast/rexml.rb +8 -22
- data/lib/bio/appl/blast/wublast.rb +21 -12
- data/lib/bio/appl/blast/xmlparser.rb +180 -183
- data/lib/bio/appl/blat/report.rb +127 -30
- data/lib/bio/appl/clustalw.rb +87 -59
- data/lib/bio/appl/clustalw/report.rb +20 -22
- data/lib/bio/appl/emboss.rb +113 -20
- data/lib/bio/appl/fasta.rb +173 -198
- data/lib/bio/appl/fasta/format10.rb +244 -347
- data/lib/bio/appl/gcg/msf.rb +212 -0
- data/lib/bio/appl/gcg/seq.rb +195 -0
- data/lib/bio/appl/genscan/report.rb +5 -23
- data/lib/bio/appl/hmmer.rb +8 -45
- data/lib/bio/appl/hmmer/report.rb +2 -20
- data/lib/bio/appl/iprscan/report.rb +374 -0
- data/lib/bio/appl/mafft.rb +87 -50
- data/lib/bio/appl/mafft/report.rb +151 -44
- data/lib/bio/appl/muscle.rb +52 -0
- data/lib/bio/appl/phylip/alignment.rb +129 -0
- data/lib/bio/appl/phylip/distance_matrix.rb +96 -0
- data/lib/bio/appl/probcons.rb +41 -0
- data/lib/bio/appl/psort.rb +89 -96
- data/lib/bio/appl/psort/report.rb +6 -22
- data/lib/bio/appl/pts1.rb +263 -0
- data/lib/bio/appl/sim4.rb +26 -36
- data/lib/bio/appl/sim4/report.rb +2 -18
- data/lib/bio/appl/sosui/report.rb +5 -20
- data/lib/bio/appl/spidey/report.rb +2 -2
- data/lib/bio/appl/targetp/report.rb +4 -20
- data/lib/bio/appl/tcoffee.rb +55 -0
- data/lib/bio/appl/tmhmm/report.rb +4 -20
- data/lib/bio/command.rb +235 -64
- data/lib/bio/data/aa.rb +21 -26
- data/lib/bio/data/codontable.rb +2 -20
- data/lib/bio/data/na.rb +19 -4
- data/lib/bio/db.rb +27 -12
- data/lib/bio/db/aaindex.rb +2 -20
- data/lib/bio/db/embl/common.rb +4 -21
- data/lib/bio/db/embl/embl.rb +33 -85
- data/lib/bio/db/embl/sptr.rb +612 -302
- data/lib/bio/db/embl/swissprot.rb +10 -29
- data/lib/bio/db/embl/trembl.rb +10 -29
- data/lib/bio/db/embl/uniprot.rb +10 -29
- data/lib/bio/db/fantom.rb +15 -20
- data/lib/bio/db/fasta.rb +3 -3
- data/lib/bio/db/genbank/common.rb +37 -46
- data/lib/bio/db/genbank/ddbj.rb +6 -18
- data/lib/bio/db/genbank/genbank.rb +47 -186
- data/lib/bio/db/genbank/genpept.rb +4 -17
- data/lib/bio/db/genbank/refseq.rb +4 -17
- data/lib/bio/db/gff.rb +103 -35
- data/lib/bio/db/go.rb +4 -20
- data/lib/bio/db/kegg/brite.rb +26 -36
- data/lib/bio/db/kegg/compound.rb +81 -85
- data/lib/bio/db/kegg/drug.rb +98 -0
- data/lib/bio/db/kegg/enzyme.rb +133 -110
- data/lib/bio/db/kegg/expression.rb +2 -20
- data/lib/bio/db/kegg/genes.rb +208 -238
- data/lib/bio/db/kegg/genome.rb +164 -285
- data/lib/bio/db/kegg/glycan.rb +114 -157
- data/lib/bio/db/kegg/keggtab.rb +242 -303
- data/lib/bio/db/kegg/kgml.rb +117 -160
- data/lib/bio/db/kegg/orthology.rb +112 -0
- data/lib/bio/db/kegg/reaction.rb +54 -69
- data/lib/bio/db/kegg/taxonomy.rb +331 -0
- data/lib/bio/db/lasergene.rb +209 -0
- data/lib/bio/db/litdb.rb +3 -27
- data/lib/bio/db/medline.rb +228 -249
- data/lib/bio/db/nbrf.rb +3 -3
- data/lib/bio/db/newick.rb +510 -0
- data/lib/bio/db/nexus.rb +1854 -0
- data/lib/bio/db/pdb.rb +5 -17
- data/lib/bio/db/pdb/atom.rb +2 -18
- data/lib/bio/db/pdb/chain.rb +2 -18
- data/lib/bio/db/pdb/chemicalcomponent.rb +2 -18
- data/lib/bio/db/pdb/model.rb +2 -18
- data/lib/bio/db/pdb/pdb.rb +73 -34
- data/lib/bio/db/pdb/residue.rb +4 -20
- data/lib/bio/db/pdb/utils.rb +2 -18
- data/lib/bio/db/prosite.rb +403 -422
- data/lib/bio/db/rebase.rb +84 -40
- data/lib/bio/db/soft.rb +404 -0
- data/lib/bio/db/transfac.rb +5 -17
- data/lib/bio/feature.rb +106 -52
- data/lib/bio/io/das.rb +32 -42
- data/lib/bio/io/dbget.rb +2 -20
- data/lib/bio/io/ddbjxml.rb +77 -138
- data/lib/bio/io/ebisoap.rb +158 -0
- data/lib/bio/io/ensembl.rb +229 -0
- data/lib/bio/io/fastacmd.rb +89 -82
- data/lib/bio/io/fetch.rb +163 -96
- data/lib/bio/io/flatfile.rb +170 -73
- data/lib/bio/io/flatfile/bdb.rb +3 -16
- data/lib/bio/io/flatfile/index.rb +2 -2
- data/lib/bio/io/flatfile/indexer.rb +3 -2
- data/lib/bio/io/higet.rb +12 -31
- data/lib/bio/io/keggapi.rb +210 -269
- data/lib/bio/io/ncbisoap.rb +155 -0
- data/lib/bio/io/pubmed.rb +169 -147
- data/lib/bio/io/registry.rb +4 -20
- data/lib/bio/io/soapwsdl.rb +43 -38
- data/lib/bio/io/sql.rb +242 -305
- data/lib/bio/location.rb +407 -285
- data/lib/bio/map.rb +410 -0
- data/lib/bio/pathway.rb +558 -695
- data/lib/bio/reference.rb +272 -75
- data/lib/bio/sequence.rb +255 -13
- data/lib/bio/sequence/aa.rb +71 -10
- data/lib/bio/sequence/common.rb +187 -33
- data/lib/bio/sequence/compat.rb +59 -4
- data/lib/bio/sequence/format.rb +54 -7
- data/lib/bio/sequence/generic.rb +3 -3
- data/lib/bio/sequence/na.rb +328 -26
- data/lib/bio/shell.rb +11 -4
- data/lib/bio/shell/core.rb +221 -160
- data/lib/bio/shell/demo.rb +18 -15
- data/lib/bio/shell/interface.rb +14 -12
- data/lib/bio/shell/irb.rb +95 -0
- data/lib/bio/shell/object.rb +45 -26
- data/lib/bio/shell/plugin/blast.rb +42 -0
- data/lib/bio/shell/plugin/codon.rb +22 -14
- data/lib/bio/shell/plugin/das.rb +58 -0
- data/lib/bio/shell/plugin/emboss.rb +2 -2
- data/lib/bio/shell/plugin/entry.rb +22 -11
- data/lib/bio/shell/plugin/flatfile.rb +2 -2
- data/lib/bio/shell/plugin/keggapi.rb +13 -6
- data/lib/bio/shell/plugin/midi.rb +4 -4
- data/lib/bio/shell/plugin/obda.rb +2 -2
- data/lib/bio/shell/plugin/psort.rb +56 -0
- data/lib/bio/shell/plugin/seq.rb +35 -8
- data/lib/bio/shell/plugin/soap.rb +87 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/bioruby_generator.rb +29 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/_classes.rhtml +4 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/_log.rhtml +27 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/_methods.rhtml +11 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/_modules.rhtml +4 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/_variables.rhtml +7 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby-bg.gif +0 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby-console.png +0 -0
- data/lib/bio/shell/rails/{public/images/icon.png → vendor/plugins/generators/bioruby/templates/bioruby-gem.png} +0 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby-link.gif +0 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby.css +369 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby.rhtml +47 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby_controller.rb +144 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby_helper.rb +47 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/commands.rhtml +8 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/history.rhtml +10 -0
- data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/index.rhtml +22 -0
- data/lib/bio/shell/script.rb +25 -0
- data/lib/bio/shell/setup.rb +109 -0
- data/lib/bio/shell/web.rb +70 -58
- data/lib/bio/tree.rb +850 -0
- data/lib/bio/util/color_scheme.rb +84 -107
- data/lib/bio/util/color_scheme/buried.rb +5 -24
- data/lib/bio/util/color_scheme/helix.rb +5 -24
- data/lib/bio/util/color_scheme/hydropathy.rb +5 -24
- data/lib/bio/util/color_scheme/nucleotide.rb +5 -24
- data/lib/bio/util/color_scheme/strand.rb +5 -24
- data/lib/bio/util/color_scheme/taylor.rb +5 -24
- data/lib/bio/util/color_scheme/turn.rb +5 -24
- data/lib/bio/util/color_scheme/zappo.rb +5 -24
- data/lib/bio/util/contingency_table.rb +70 -43
- data/lib/bio/util/restriction_enzyme.rb +228 -0
- data/lib/bio/util/restriction_enzyme/analysis.rb +249 -0
- data/lib/bio/util/restriction_enzyme/analysis_basic.rb +217 -0
- data/lib/bio/util/restriction_enzyme/cut_symbol.rb +107 -0
- data/lib/bio/util/restriction_enzyme/double_stranded.rb +321 -0
- data/lib/bio/util/restriction_enzyme/double_stranded/aligned_strands.rb +130 -0
- data/lib/bio/util/restriction_enzyme/double_stranded/cut_location_pair.rb +103 -0
- data/lib/bio/util/restriction_enzyme/double_stranded/cut_location_pair_in_enzyme_notation.rb +38 -0
- data/lib/bio/util/restriction_enzyme/double_stranded/cut_locations.rb +76 -0
- data/lib/bio/util/restriction_enzyme/double_stranded/cut_locations_in_enzyme_notation.rb +107 -0
- data/lib/bio/util/restriction_enzyme/enzymes.yaml +7061 -0
- data/lib/bio/util/restriction_enzyme/range/cut_range.rb +24 -0
- data/lib/bio/util/restriction_enzyme/range/cut_ranges.rb +47 -0
- data/lib/bio/util/restriction_enzyme/range/horizontal_cut_range.rb +67 -0
- data/lib/bio/util/restriction_enzyme/range/sequence_range.rb +257 -0
- data/lib/bio/util/restriction_enzyme/range/sequence_range/calculated_cuts.rb +242 -0
- data/lib/bio/util/restriction_enzyme/range/sequence_range/fragment.rb +51 -0
- data/lib/bio/util/restriction_enzyme/range/sequence_range/fragments.rb +41 -0
- data/lib/bio/util/restriction_enzyme/range/vertical_cut_range.rb +77 -0
- data/lib/bio/util/restriction_enzyme/single_strand.rb +199 -0
- data/lib/bio/util/restriction_enzyme/single_strand/cut_locations_in_enzyme_notation.rb +135 -0
- data/lib/bio/util/restriction_enzyme/single_strand_complement.rb +23 -0
- data/lib/bio/util/restriction_enzyme/string_formatting.rb +111 -0
- data/lib/bio/util/sirna.rb +4 -22
- data/sample/color_scheme_na.rb +4 -12
- data/sample/enzymes.rb +78 -0
- data/sample/goslim.rb +5 -13
- data/sample/psortplot_html.rb +4 -12
- data/test/data/blast/2.2.15.blastp.m7 +876 -0
- data/test/data/embl/AB090716.embl.rel89 +63 -0
- data/test/data/fasta/example1.txt +75 -0
- data/test/data/fasta/example2.txt +21 -0
- data/test/data/iprscan/merged.raw +32 -0
- data/test/data/iprscan/merged.txt +74 -0
- data/test/data/soft/GDS100_partial.soft +92 -0
- data/test/data/soft/GSE3457_family_partial.soft +874 -0
- data/test/functional/bio/io/test_ensembl.rb +103 -0
- data/test/functional/bio/io/test_soapwsdl.rb +5 -17
- data/test/unit/bio/appl/bl2seq/test_report.rb +2 -2
- data/test/unit/bio/appl/blast/test_report.rb +3 -16
- data/test/unit/bio/appl/blast/test_xmlparser.rb +4 -16
- data/test/unit/bio/appl/genscan/test_report.rb +3 -16
- data/test/unit/bio/appl/hmmer/test_report.rb +3 -16
- data/test/unit/bio/appl/iprscan/test_report.rb +338 -0
- data/test/unit/bio/appl/mafft/test_report.rb +63 -0
- data/test/unit/bio/appl/sosui/test_report.rb +3 -16
- data/test/unit/bio/appl/targetp/test_report.rb +3 -16
- data/test/unit/bio/appl/test_blast.rb +3 -16
- data/test/unit/bio/appl/test_fasta.rb +4 -16
- data/test/unit/bio/appl/test_pts1.rb +140 -0
- data/test/unit/bio/appl/tmhmm/test_report.rb +3 -16
- data/test/unit/bio/data/test_aa.rb +4 -17
- data/test/unit/bio/data/test_codontable.rb +3 -16
- data/test/unit/bio/data/test_na.rb +3 -3
- data/test/unit/bio/db/embl/test_common.rb +3 -16
- data/test/unit/bio/db/embl/test_embl.rb +3 -16
- data/test/unit/bio/db/embl/test_embl_rel89.rb +219 -0
- data/test/unit/bio/db/embl/test_sptr.rb +1548 -41
- data/test/unit/bio/db/embl/test_uniprot.rb +3 -16
- data/test/unit/bio/db/kegg/test_genes.rb +3 -16
- data/test/unit/bio/db/pdb/test_pdb.rb +7 -24
- data/test/unit/bio/db/test_aaindex.rb +2 -2
- data/test/unit/bio/db/test_fasta.rb +3 -16
- data/test/unit/bio/db/test_gff.rb +3 -16
- data/test/unit/bio/db/test_lasergene.rb +95 -0
- data/test/unit/bio/db/test_newick.rb +56 -0
- data/test/unit/bio/db/test_nexus.rb +360 -0
- data/test/unit/bio/db/test_prosite.rb +5 -18
- data/test/unit/bio/db/test_rebase.rb +11 -25
- data/test/unit/bio/db/test_soft.rb +138 -0
- data/test/unit/bio/io/test_ddbjxml.rb +5 -17
- data/test/unit/bio/io/test_ensembl.rb +109 -0
- data/test/unit/bio/io/test_fastacmd.rb +3 -16
- data/test/unit/bio/io/test_flatfile.rb +237 -0
- data/test/unit/bio/io/test_soapwsdl.rb +4 -17
- data/test/unit/bio/sequence/test_aa.rb +3 -3
- data/test/unit/bio/sequence/test_common.rb +3 -16
- data/test/unit/bio/sequence/test_compat.rb +3 -16
- data/test/unit/bio/sequence/test_na.rb +29 -3
- data/test/unit/bio/shell/plugin/test_seq.rb +8 -8
- data/test/unit/bio/test_alignment.rb +16 -27
- data/test/unit/bio/test_command.rb +242 -25
- data/test/unit/bio/test_db.rb +3 -16
- data/test/unit/bio/test_feature.rb +4 -16
- data/test/unit/bio/test_location.rb +4 -16
- data/test/unit/bio/test_map.rb +230 -0
- data/test/unit/bio/test_pathway.rb +4 -16
- data/test/unit/bio/test_reference.rb +2 -2
- data/test/unit/bio/test_sequence.rb +7 -19
- data/test/unit/bio/test_shell.rb +3 -16
- data/test/unit/bio/test_tree.rb +593 -0
- data/test/unit/bio/util/restriction_enzyme/analysis/test_calculated_cuts.rb +299 -0
- data/test/unit/bio/util/restriction_enzyme/analysis/test_cut_ranges.rb +103 -0
- data/test/unit/bio/util/restriction_enzyme/analysis/test_sequence_range.rb +240 -0
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_aligned_strands.rb +100 -0
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_location_pair.rb +75 -0
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_location_pair_in_enzyme_notation.rb +73 -0
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_locations.rb +53 -0
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_locations_in_enzyme_notation.rb +104 -0
- data/test/unit/bio/util/restriction_enzyme/single_strand/test_cut_locations_in_enzyme_notation.rb +83 -0
- data/test/unit/bio/util/restriction_enzyme/test_analysis.rb +246 -0
- data/test/unit/bio/util/restriction_enzyme/test_cut_symbol.rb +44 -0
- data/test/unit/bio/util/restriction_enzyme/test_double_stranded.rb +115 -0
- data/test/unit/bio/util/restriction_enzyme/test_single_strand.rb +147 -0
- data/test/unit/bio/util/restriction_enzyme/test_single_strand_complement.rb +147 -0
- data/test/unit/bio/util/restriction_enzyme/test_string_formatting.rb +60 -0
- data/test/unit/bio/util/test_color_scheme.rb +6 -18
- data/test/unit/bio/util/test_contingency_table.rb +6 -18
- data/test/unit/bio/util/test_restriction_enzyme.rb +42 -0
- data/test/unit/bio/util/test_sirna.rb +3 -16
- metadata +228 -169
- data/doc/BioRuby.rd.ja +0 -225
- data/doc/Design.rd.ja +0 -341
- data/doc/TODO.rd.ja +0 -138
- data/lib/bio/appl/fasta/format6.rb +0 -37
- data/lib/bio/db/kegg/cell.rb +0 -88
- data/lib/bio/db/kegg/ko.rb +0 -178
- data/lib/bio/shell/rails/Rakefile +0 -10
- data/lib/bio/shell/rails/app/controllers/application.rb +0 -4
- data/lib/bio/shell/rails/app/controllers/shell_controller.rb +0 -94
- data/lib/bio/shell/rails/app/helpers/application_helper.rb +0 -3
- data/lib/bio/shell/rails/app/models/shell_connection.rb +0 -30
- data/lib/bio/shell/rails/app/views/layouts/shell.rhtml +0 -37
- data/lib/bio/shell/rails/app/views/shell/history.rhtml +0 -5
- data/lib/bio/shell/rails/app/views/shell/index.rhtml +0 -2
- data/lib/bio/shell/rails/app/views/shell/show.rhtml +0 -13
- data/lib/bio/shell/rails/config/boot.rb +0 -19
- data/lib/bio/shell/rails/config/database.yml +0 -85
- data/lib/bio/shell/rails/config/environment.rb +0 -53
- data/lib/bio/shell/rails/config/environments/development.rb +0 -19
- data/lib/bio/shell/rails/config/environments/production.rb +0 -19
- data/lib/bio/shell/rails/config/environments/test.rb +0 -19
- data/lib/bio/shell/rails/config/routes.rb +0 -19
- data/lib/bio/shell/rails/doc/README_FOR_APP +0 -2
- data/lib/bio/shell/rails/public/404.html +0 -8
- data/lib/bio/shell/rails/public/500.html +0 -8
- data/lib/bio/shell/rails/public/dispatch.cgi +0 -10
- data/lib/bio/shell/rails/public/dispatch.fcgi +0 -24
- data/lib/bio/shell/rails/public/dispatch.rb +0 -10
- data/lib/bio/shell/rails/public/favicon.ico +0 -0
- data/lib/bio/shell/rails/public/images/rails.png +0 -0
- data/lib/bio/shell/rails/public/index.html +0 -277
- data/lib/bio/shell/rails/public/javascripts/controls.js +0 -750
- data/lib/bio/shell/rails/public/javascripts/dragdrop.js +0 -584
- data/lib/bio/shell/rails/public/javascripts/effects.js +0 -854
- data/lib/bio/shell/rails/public/javascripts/prototype.js +0 -1785
- data/lib/bio/shell/rails/public/robots.txt +0 -1
- data/lib/bio/shell/rails/public/stylesheets/main.css +0 -187
- data/lib/bio/shell/rails/script/about +0 -3
- data/lib/bio/shell/rails/script/breakpointer +0 -3
- data/lib/bio/shell/rails/script/console +0 -3
- data/lib/bio/shell/rails/script/destroy +0 -3
- data/lib/bio/shell/rails/script/generate +0 -3
- data/lib/bio/shell/rails/script/performance/benchmarker +0 -3
- data/lib/bio/shell/rails/script/performance/profiler +0 -3
- data/lib/bio/shell/rails/script/plugin +0 -3
- data/lib/bio/shell/rails/script/process/reaper +0 -3
- data/lib/bio/shell/rails/script/process/spawner +0 -3
- data/lib/bio/shell/rails/script/process/spinner +0 -3
- data/lib/bio/shell/rails/script/runner +0 -3
- data/lib/bio/shell/rails/script/server +0 -42
- data/lib/bio/shell/rails/test/test_helper.rb +0 -28
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#
|
|
2
|
+
# bio/util/restriction_enzyme/range/sequence_range/fragment.rb -
|
|
3
|
+
#
|
|
4
|
+
# Author:: Trevor Wennblom <mailto:trevor@corevx.com>
|
|
5
|
+
# Copyright:: Copyright (c) 2005-2007 Midwinter Laboratories, LLC (http://midwinterlabs.com)
|
|
6
|
+
# License:: The Ruby License
|
|
7
|
+
#
|
|
8
|
+
# $Id: fragment.rb,v 1.6 2007/07/16 19:28:48 k Exp $
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
require 'bio/util/restriction_enzyme'
|
|
12
|
+
|
|
13
|
+
module Bio
|
|
14
|
+
class RestrictionEnzyme
|
|
15
|
+
class Range
|
|
16
|
+
class SequenceRange
|
|
17
|
+
|
|
18
|
+
class Fragment
|
|
19
|
+
|
|
20
|
+
attr_reader :size
|
|
21
|
+
|
|
22
|
+
def initialize( primary_bin, complement_bin )
|
|
23
|
+
@primary_bin = primary_bin
|
|
24
|
+
@complement_bin = complement_bin
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
DisplayFragment = Struct.new(:primary, :complement, :p_left, :p_right, :c_left, :c_right)
|
|
28
|
+
|
|
29
|
+
def for_display(p_str=nil, c_str=nil)
|
|
30
|
+
df = DisplayFragment.new
|
|
31
|
+
df.primary = ''
|
|
32
|
+
df.complement = ''
|
|
33
|
+
|
|
34
|
+
both_bins = (@primary_bin + @complement_bin).sort.uniq
|
|
35
|
+
both_bins.each do |item|
|
|
36
|
+
@primary_bin.include?(item) ? df.primary << p_str[item] : df.primary << ' '
|
|
37
|
+
@complement_bin.include?(item) ? df.complement << c_str[item] : df.complement << ' '
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
df.p_left = @primary_bin.first
|
|
41
|
+
df.p_right = @primary_bin.last
|
|
42
|
+
df.c_left = @complement_bin.first
|
|
43
|
+
df.c_right = @complement_bin.last
|
|
44
|
+
|
|
45
|
+
df
|
|
46
|
+
end
|
|
47
|
+
end # Fragment
|
|
48
|
+
end # SequenceRange
|
|
49
|
+
end # Range
|
|
50
|
+
end # RestrictionEnzyme
|
|
51
|
+
end # Bio
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#
|
|
2
|
+
# bio/util/restriction_enzyme/analysis/fragments.rb -
|
|
3
|
+
#
|
|
4
|
+
# Author:: Trevor Wennblom <mailto:trevor@corevx.com>
|
|
5
|
+
# Copyright:: Copyright (c) 2005-2007 Midwinter Laboratories, LLC (http://midwinterlabs.com)
|
|
6
|
+
# License:: The Ruby License
|
|
7
|
+
#
|
|
8
|
+
# $Id: fragments.rb,v 1.5 2007/07/16 19:28:48 k Exp $
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
require 'bio/util/restriction_enzyme'
|
|
12
|
+
|
|
13
|
+
module Bio
|
|
14
|
+
class RestrictionEnzyme
|
|
15
|
+
class Range
|
|
16
|
+
class SequenceRange
|
|
17
|
+
|
|
18
|
+
class Fragments < Array
|
|
19
|
+
|
|
20
|
+
attr_accessor :primary
|
|
21
|
+
attr_accessor :complement
|
|
22
|
+
|
|
23
|
+
def initialize(primary, complement)
|
|
24
|
+
@primary = primary
|
|
25
|
+
@complement = complement
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
DisplayFragment = Struct.new(:primary, :complement)
|
|
29
|
+
|
|
30
|
+
def for_display(p_str=nil, c_str=nil)
|
|
31
|
+
p_str ||= @primary
|
|
32
|
+
c_str ||= @complement
|
|
33
|
+
pretty_fragments = []
|
|
34
|
+
self.each { |fragment| pretty_fragments << fragment.for_display(p_str, c_str) }
|
|
35
|
+
pretty_fragments
|
|
36
|
+
end
|
|
37
|
+
end # Fragments
|
|
38
|
+
end # SequenceRange
|
|
39
|
+
end # Range
|
|
40
|
+
end # RestrictionEnzyme
|
|
41
|
+
end # Bio
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#
|
|
2
|
+
# bio/util/restriction_enzyme/range/vertical_cut_range.rb -
|
|
3
|
+
#
|
|
4
|
+
# Author:: Trevor Wennblom <mailto:trevor@corevx.com>
|
|
5
|
+
# Copyright:: Copyright (c) 2005-2007 Midwinter Laboratories, LLC (http://midwinterlabs.com)
|
|
6
|
+
# License:: The Ruby License
|
|
7
|
+
#
|
|
8
|
+
# $Id: vertical_cut_range.rb,v 1.5 2007/07/16 19:28:48 k Exp $
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
require 'bio/util/restriction_enzyme'
|
|
12
|
+
|
|
13
|
+
module Bio
|
|
14
|
+
class RestrictionEnzyme
|
|
15
|
+
class Range
|
|
16
|
+
|
|
17
|
+
# FIXME docs are kind of out of date. Change this to VerticalAndHorizontalCutRange
|
|
18
|
+
class VerticalCutRange < CutRange
|
|
19
|
+
attr_reader :p_cut_left, :p_cut_right
|
|
20
|
+
attr_reader :c_cut_left, :c_cut_right
|
|
21
|
+
attr_reader :min, :max
|
|
22
|
+
attr_reader :range
|
|
23
|
+
|
|
24
|
+
# VerticalCutRange provides an extremely raw, yet precise, method of
|
|
25
|
+
# defining the location of cuts on primary and complementary sequences.
|
|
26
|
+
#
|
|
27
|
+
# Many VerticalCutRange objects are used with HorizontalCutRange objects
|
|
28
|
+
# to be contained in CutRanges to define the cut pattern that a
|
|
29
|
+
# specific enzyme may make.
|
|
30
|
+
#
|
|
31
|
+
# VerticalCutRange takes up to four possible cuts, two on the primary
|
|
32
|
+
# strand and two on the complementary strand. In typical usage
|
|
33
|
+
# you will want to make a single cut on the primary strand and a single
|
|
34
|
+
# cut on the complementary strand.
|
|
35
|
+
#
|
|
36
|
+
# However, you can construct it with whatever cuts you desire to accomadate
|
|
37
|
+
# the most eccentric of imaginary restriction enzymes.
|
|
38
|
+
#
|
|
39
|
+
# ---
|
|
40
|
+
# *Arguments*
|
|
41
|
+
# * +p_cut_left+: (_optional_) Left-most cut on the primary strand. +nil+ to skip
|
|
42
|
+
# * +p_cut_right+: (_optional_) Right-most cut on the primary strand. +nil+ to skip
|
|
43
|
+
# * +c_cut_left+: (_optional_) Left-most cut on the complementary strand. +nil+ to skip
|
|
44
|
+
# * +c_cut_right+: (_optional_) Right-most cut on the complementary strand. +nil+ to skip
|
|
45
|
+
# *Returns*:: nothing
|
|
46
|
+
def initialize( p_cut_left=nil, p_cut_right=nil, c_cut_left=nil, c_cut_right=nil )
|
|
47
|
+
@p_cut_left = p_cut_left
|
|
48
|
+
@p_cut_right = p_cut_right
|
|
49
|
+
@c_cut_left = c_cut_left
|
|
50
|
+
@c_cut_right = c_cut_right
|
|
51
|
+
|
|
52
|
+
a = [@p_cut_left, @c_cut_left, @p_cut_right, @c_cut_right]
|
|
53
|
+
a.delete(nil)
|
|
54
|
+
a.sort!
|
|
55
|
+
@min = a.first
|
|
56
|
+
@max = a.last
|
|
57
|
+
|
|
58
|
+
@range = nil
|
|
59
|
+
@range = (@min..@max) unless @min == nil or @max == nil
|
|
60
|
+
return
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Check if a location falls within the minimum or maximum values of this
|
|
64
|
+
# range.
|
|
65
|
+
#
|
|
66
|
+
# ---
|
|
67
|
+
# *Arguments*
|
|
68
|
+
# * +i+: Location to check if it is included in the range
|
|
69
|
+
# *Returns*:: +true+ _or_ +false+
|
|
70
|
+
def include?(i)
|
|
71
|
+
return false if @range == nil
|
|
72
|
+
@range.include?(i)
|
|
73
|
+
end
|
|
74
|
+
end # VerticalCutRange
|
|
75
|
+
end # Range
|
|
76
|
+
end # RestrictionEnzyme
|
|
77
|
+
end # Bio
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
#
|
|
2
|
+
# bio/util/restriction_enzyme/single_strand.rb - Single strand of a restriction enzyme sequence
|
|
3
|
+
#
|
|
4
|
+
# Author:: Trevor Wennblom <mailto:trevor@corevx.com>
|
|
5
|
+
# Copyright:: Copyright (c) 2005-2007 Midwinter Laboratories, LLC (http://midwinterlabs.com)
|
|
6
|
+
# License:: The Ruby License
|
|
7
|
+
#
|
|
8
|
+
# $Id: single_strand.rb,v 1.7 2007/07/16 19:28:48 k Exp $
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
require 'bio/util/restriction_enzyme'
|
|
12
|
+
require 'bio/sequence'
|
|
13
|
+
|
|
14
|
+
module Bio
|
|
15
|
+
class RestrictionEnzyme
|
|
16
|
+
|
|
17
|
+
# A single strand of restriction enzyme sequence pattern with a 5' to 3'
|
|
18
|
+
# orientation.
|
|
19
|
+
#
|
|
20
|
+
# DoubleStranded puts the SingleStrand and SingleStrandComplement together to
|
|
21
|
+
# create the sequence pattern with cuts on both strands.
|
|
22
|
+
#
|
|
23
|
+
class SingleStrand < Bio::Sequence::NA
|
|
24
|
+
|
|
25
|
+
autoload :CutLocationsInEnzymeNotation, 'bio/util/restriction_enzyme/single_strand/cut_locations_in_enzyme_notation'
|
|
26
|
+
|
|
27
|
+
include CutSymbol
|
|
28
|
+
include StringFormatting
|
|
29
|
+
|
|
30
|
+
# The cut locations in enzyme notation. Contains a
|
|
31
|
+
# CutLocationsInEnzymeNotation object set when the SingleStrand
|
|
32
|
+
# object is initialized.
|
|
33
|
+
attr_reader :cut_locations_in_enzyme_notation
|
|
34
|
+
|
|
35
|
+
# The cut locations transformed from enzyme index notation to 0-based
|
|
36
|
+
# array index notation. Contains an Array.
|
|
37
|
+
attr_reader :cut_locations
|
|
38
|
+
|
|
39
|
+
# Orientation of the strand, 5' to 3'
|
|
40
|
+
def orientation; [5,3]; end
|
|
41
|
+
|
|
42
|
+
# Constructor for a Bio::RestrictionEnzyme::StingleStrand object.
|
|
43
|
+
#
|
|
44
|
+
# A single strand of restriction enzyme sequence pattern with a 5' to 3' orientation.
|
|
45
|
+
#
|
|
46
|
+
# ---
|
|
47
|
+
# *Arguments*
|
|
48
|
+
# * +sequence+: (_required_) The enzyme sequence.
|
|
49
|
+
# * +c+: (_optional_) Cut locations in enzyme notation.
|
|
50
|
+
# See Bio::RestrictionEnzyme::SingleStrand::CutLocationsInEnzymeNotation
|
|
51
|
+
#
|
|
52
|
+
# *Constraints*
|
|
53
|
+
# * +sequence+ cannot contain immediately adjacent cut symbols (ex. atg^^c).
|
|
54
|
+
# * +c+ is in enzyme index notation and therefore cannot contain a 0.
|
|
55
|
+
# * If +c+ is omitted, +sequence+ must contain a cut symbol.
|
|
56
|
+
# * You cannot provide both a sequence with cut symbols and provide cut locations - ambiguous.
|
|
57
|
+
#
|
|
58
|
+
# +sequence+ must be a kind of:
|
|
59
|
+
# * String
|
|
60
|
+
# * Bio::Sequence::NA
|
|
61
|
+
# * Bio::RestrictionEnzyme::SingleStrand
|
|
62
|
+
#
|
|
63
|
+
# +c+ must be a kind of:
|
|
64
|
+
# * Bio::RestrictionEnzyme::SingleStrand::CutLocationsInEnzymeNotation
|
|
65
|
+
# * Integer, one or more
|
|
66
|
+
# * Array
|
|
67
|
+
#
|
|
68
|
+
# *Returns*:: nothing
|
|
69
|
+
def initialize( sequence, *c )
|
|
70
|
+
c.flatten! # if an array was supplied as an argument
|
|
71
|
+
validate_args(sequence, c)
|
|
72
|
+
sequence.downcase!
|
|
73
|
+
|
|
74
|
+
if sequence =~ re_cut_symbol
|
|
75
|
+
@cut_locations_in_enzyme_notation = CutLocationsInEnzymeNotation.new( strip_padding(sequence) )
|
|
76
|
+
else
|
|
77
|
+
@cut_locations_in_enzyme_notation = CutLocationsInEnzymeNotation.new( c )
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
@stripped = Bio::Sequence::NA.new( strip_cuts_and_padding( sequence ) )
|
|
81
|
+
super( pattern )
|
|
82
|
+
@cut_locations = @cut_locations_in_enzyme_notation.to_array_index
|
|
83
|
+
return
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Returns true if this enzyme is palindromic with its reverse complement.
|
|
87
|
+
# Does not report if the +cut_locations+ are palindromic or not.
|
|
88
|
+
#
|
|
89
|
+
# Examples:
|
|
90
|
+
# * This would be palindromic:
|
|
91
|
+
# 5' - ATGCAT - 3'
|
|
92
|
+
# TACGTA
|
|
93
|
+
#
|
|
94
|
+
# * This would not be palindromic:
|
|
95
|
+
# 5' - ATGCGTA - 3'
|
|
96
|
+
# TACGCAT
|
|
97
|
+
#
|
|
98
|
+
# ---
|
|
99
|
+
# *Arguments*
|
|
100
|
+
# * _none_
|
|
101
|
+
# *Returns*:: +true+ _or_ +false+
|
|
102
|
+
def palindromic?
|
|
103
|
+
@stripped.reverse_complement == @stripped
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Sequence pattern with no cut symbols and no 'n' padding.
|
|
107
|
+
# * <code>SingleStrand.new('garraxt', [-2, 1, 7]).stripped # => "garraxt"</code>
|
|
108
|
+
attr_reader :stripped
|
|
109
|
+
|
|
110
|
+
# The sequence with 'n' padding and cut symbols.
|
|
111
|
+
# * <code>SingleStrand.new('garraxt', [-2, 1, 7]).with_cut_symbols # => "n^ng^arraxt^n"</code>
|
|
112
|
+
#
|
|
113
|
+
# ---
|
|
114
|
+
# *Arguments*
|
|
115
|
+
# * _none_
|
|
116
|
+
# *Returns*:: The sequence with 'n' padding and cut symbols.
|
|
117
|
+
def with_cut_symbols
|
|
118
|
+
s = pattern
|
|
119
|
+
@cut_locations_in_enzyme_notation.to_array_index.sort.reverse.each { |c| s.insert(c+1, cut_symbol) }
|
|
120
|
+
s
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# The sequence with 'n' padding on the left and right for cuts larger than the sequence.
|
|
124
|
+
# * <code>SingleStrand.new('garraxt', [-2, 1, 7]).pattern # => "nngarraxtn"</code>
|
|
125
|
+
#
|
|
126
|
+
# ---
|
|
127
|
+
# *Arguments*
|
|
128
|
+
# * _none_
|
|
129
|
+
# *Returns*:: The sequence with 'n' padding on the left and right for cuts larger than the sequence.
|
|
130
|
+
def pattern
|
|
131
|
+
return stripped if @cut_locations_in_enzyme_notation.min == nil
|
|
132
|
+
left = (@cut_locations_in_enzyme_notation.min < 0 ? 'n' * @cut_locations_in_enzyme_notation.min.abs : '')
|
|
133
|
+
|
|
134
|
+
# Add one more 'n' if a cut is at the last position
|
|
135
|
+
right = ( (@cut_locations_in_enzyme_notation.max >= @stripped.length) ? ('n' * (@cut_locations_in_enzyme_notation.max - @stripped.length + 1)) : '')
|
|
136
|
+
[left, stripped, right].to_s
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# The sequence with 'n' pads, cut symbols, and spacing for alignment.
|
|
140
|
+
# * <code>SingleStrand.new('garraxt', [-2, 1, 7]).with_spaces # => "n^n g^a r r a x t^n"</code>
|
|
141
|
+
#
|
|
142
|
+
# ---
|
|
143
|
+
# *Arguments*
|
|
144
|
+
# * _none_
|
|
145
|
+
# *Returns*:: The sequence with 'n' pads, cut symbols, and spacing for alignment.
|
|
146
|
+
def with_spaces
|
|
147
|
+
add_spacing( with_cut_symbols )
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
#########
|
|
151
|
+
protected
|
|
152
|
+
#########
|
|
153
|
+
|
|
154
|
+
def validate_args( input_pattern, input_cut_locations )
|
|
155
|
+
unless input_pattern.kind_of?(String)
|
|
156
|
+
err = "input_pattern is not a String, Bio::Sequence::NA, or Bio::RestrictionEnzyme::SingleStrand object\n"
|
|
157
|
+
err += "pattern: #{input_pattern}\n"
|
|
158
|
+
err += "class: #{input_pattern.class}"
|
|
159
|
+
raise ArgumentError, err
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
if ( input_pattern =~ re_cut_symbol ) and !input_cut_locations.empty?
|
|
163
|
+
err = "Cut symbol found in sequence, but cut locations were also supplied. Ambiguous.\n"
|
|
164
|
+
err += "pattern: #{input_pattern}\n"
|
|
165
|
+
err += "symbol: #{cut_symbol}\n"
|
|
166
|
+
err += "locations: #{input_cut_locations.inspect}"
|
|
167
|
+
raise ArgumentError, err
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
input_pattern.each_byte do |c|
|
|
171
|
+
c = c.chr.downcase
|
|
172
|
+
unless Bio::NucleicAcid::NAMES.has_key?(c) or c == 'x' or c == 'X' or c == cut_symbol
|
|
173
|
+
err = "Invalid character in pattern.\n"
|
|
174
|
+
err += "Not a nucleotide or representation of possible nucleotides. See Bio::NucleicAcid::NAMES for more information.\n"
|
|
175
|
+
err += "char: #{c}\n"
|
|
176
|
+
err += "input_pattern: #{input_pattern}"
|
|
177
|
+
raise ArgumentError, err
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Tadayoshi Funaba's method as discussed in Programming Ruby 2ed, p390
|
|
183
|
+
def self.once(*ids)
|
|
184
|
+
for id in ids
|
|
185
|
+
module_eval <<-"end;"
|
|
186
|
+
alias_method :__#{id.to_i}__, :#{id.to_s}
|
|
187
|
+
private :__#{id.to_i}__
|
|
188
|
+
def #{id.to_s}(*args, &block)
|
|
189
|
+
(@__#{id.to_i}__ ||= [__#{id.to_i}__(*args, &block)])[0]
|
|
190
|
+
end
|
|
191
|
+
end;
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
once :pattern, :with_cut_symbols, :with_spaces, :to_re
|
|
196
|
+
|
|
197
|
+
end # SingleStrand
|
|
198
|
+
end # RestrictionEnzyme
|
|
199
|
+
end # Bio
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
#
|
|
2
|
+
# bio/util/restriction_enzyme/single_strand/cut_locations_in_enzyme_notation.rb - The cut locations, in enzyme notation
|
|
3
|
+
#
|
|
4
|
+
# Author:: Trevor Wennblom <mailto:trevor@corevx.com>
|
|
5
|
+
# Copyright:: Copyright (c) 2005-2007 Midwinter Laboratories, LLC (http://midwinterlabs.com)
|
|
6
|
+
# License:: The Ruby License
|
|
7
|
+
#
|
|
8
|
+
# $Id: cut_locations_in_enzyme_notation.rb,v 1.7 2007/07/16 19:28:48 k Exp $
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
require 'bio/util/restriction_enzyme'
|
|
12
|
+
|
|
13
|
+
module Bio
|
|
14
|
+
class RestrictionEnzyme
|
|
15
|
+
class SingleStrand
|
|
16
|
+
|
|
17
|
+
# Stores the cut location in thier enzyme index notation
|
|
18
|
+
#
|
|
19
|
+
# May be initialized with a series of cuts or an enzyme pattern marked
|
|
20
|
+
# with cut symbols.
|
|
21
|
+
#
|
|
22
|
+
# Enzyme index notation:: 1.._n_, value before 1 is -1
|
|
23
|
+
#
|
|
24
|
+
# example:: [-3][-2][-1][1][2][3][4][5]
|
|
25
|
+
#
|
|
26
|
+
# Negative values are used to indicate when a cut may occur at a specified
|
|
27
|
+
# distance before the sequence begins. This would be padded with 'n'
|
|
28
|
+
# nucleotides to represent wildcards.
|
|
29
|
+
#
|
|
30
|
+
# Notes:
|
|
31
|
+
# * <code>0</code> is invalid as it does not refer to any index
|
|
32
|
+
# * +nil+ is not allowed here as it has no meaning
|
|
33
|
+
# * +nil+ values are kept track of in DoubleStranded::CutLocations as they
|
|
34
|
+
# need a reference point on the correlating strand. In
|
|
35
|
+
# DoubleStranded::CutLocations +nil+ represents no cut or a partial
|
|
36
|
+
# digestion.
|
|
37
|
+
#
|
|
38
|
+
class CutLocationsInEnzymeNotation < Array
|
|
39
|
+
include CutSymbol
|
|
40
|
+
extend CutSymbol
|
|
41
|
+
|
|
42
|
+
# First cut, in enzyme-index notation
|
|
43
|
+
attr_reader :min
|
|
44
|
+
|
|
45
|
+
# Last cut, in enzyme-index notation
|
|
46
|
+
attr_reader :max
|
|
47
|
+
|
|
48
|
+
# Constructor for CutLocationsInEnzymeNotation
|
|
49
|
+
#
|
|
50
|
+
# ---
|
|
51
|
+
# *Arguments*
|
|
52
|
+
# * +a+: Locations of cuts represented as a string with cuts or an array of values
|
|
53
|
+
# Examples:
|
|
54
|
+
# * n^ng^arraxt^n
|
|
55
|
+
# * 2
|
|
56
|
+
# * -1, 5
|
|
57
|
+
# * [-1, 5]
|
|
58
|
+
# *Returns*:: nothing
|
|
59
|
+
def initialize(*a)
|
|
60
|
+
a.flatten! # in case an array was passed as an argument
|
|
61
|
+
|
|
62
|
+
if a.size == 1 and a[0].kind_of? String and a[0] =~ re_cut_symbol
|
|
63
|
+
# Initialize with a cut symbol pattern such as 'n^ng^arraxt^n'
|
|
64
|
+
s = a[0]
|
|
65
|
+
a = []
|
|
66
|
+
i = -( s.tr(cut_symbol, '') =~ %r{[^n]} ) # First character that's not 'n'
|
|
67
|
+
s.each_byte { |c| (a << i; next) if c.chr == cut_symbol; i += 1 }
|
|
68
|
+
a.collect! { |n| n <= 0 ? n-1 : n } # 0 is not a valid enzyme index, decrement from 0 and all negative
|
|
69
|
+
else
|
|
70
|
+
a.collect! { |n| n.to_i } # Cut locations are always integers
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
validate_cut_locations( a )
|
|
74
|
+
super(a)
|
|
75
|
+
self.sort!
|
|
76
|
+
@min = self.first
|
|
77
|
+
@max = self.last
|
|
78
|
+
self.freeze
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Transform the cut locations from enzyme index notation to 0-based index
|
|
82
|
+
# notation.
|
|
83
|
+
#
|
|
84
|
+
# input -> output
|
|
85
|
+
# [ 1, 2, 3 ] -> [ 0, 1, 2 ]
|
|
86
|
+
# [ 1, 3, 5 ] -> [ 0, 2, 4 ]
|
|
87
|
+
# [ -1, 1, 2 ] -> [ 0, 1, 2 ]
|
|
88
|
+
# [ -2, 1, 3 ] -> [ 0, 2, 4 ]
|
|
89
|
+
#
|
|
90
|
+
# ---
|
|
91
|
+
# *Arguments*
|
|
92
|
+
# * _none_
|
|
93
|
+
# *Returns*:: +Array+ of cuts in 0-based index notation
|
|
94
|
+
def to_array_index
|
|
95
|
+
return [] if @min == nil
|
|
96
|
+
if @min < 0
|
|
97
|
+
calc = lambda do |n|
|
|
98
|
+
n -= 1 unless n < 0
|
|
99
|
+
n + @min.abs
|
|
100
|
+
end
|
|
101
|
+
else
|
|
102
|
+
calc = lambda { |n| n - 1 }
|
|
103
|
+
end
|
|
104
|
+
self.collect(&calc)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
#########
|
|
108
|
+
protected
|
|
109
|
+
#########
|
|
110
|
+
|
|
111
|
+
def validate_cut_locations( input_cut_locations )
|
|
112
|
+
unless input_cut_locations == input_cut_locations.uniq
|
|
113
|
+
err = "The cut locations supplied contain duplicate values. Redundant / undefined meaning.\n"
|
|
114
|
+
err += "cuts: #{input_cut_locations.inspect}\n"
|
|
115
|
+
err += "unique: #{input_cut_locations.uniq.inspect}"
|
|
116
|
+
raise ArgumentError, err
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
if input_cut_locations.include?(nil)
|
|
120
|
+
err = "The cut locations supplied contained a nil. nil has no index for enzyme notation, alternative meaning is 'no cut'.\n"
|
|
121
|
+
err += "cuts: #{input_cut_locations.inspect}"
|
|
122
|
+
raise ArgumentError, err
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
if input_cut_locations.include?(0)
|
|
126
|
+
err = "The cut locations supplied contained a '0'. '0' has no index for enzyme notation, alternative meaning is 'no cut'.\n"
|
|
127
|
+
err += "cuts: #{input_cut_locations.inspect}"
|
|
128
|
+
raise ArgumentError, err
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
end
|
|
132
|
+
end # CutLocationsInEnzymeNotation
|
|
133
|
+
end # SingleStrand
|
|
134
|
+
end # RestrictionEnzyme
|
|
135
|
+
end # Bio
|