bio-ipcress 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
@@ -0,0 +1,12 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - jruby-19mode # JRuby in 1.9 mode
6
+ - rbx-19mode
7
+ # - 1.8.7
8
+ # - jruby-18mode # JRuby in 1.8 mode
9
+ # - rbx-18mode
10
+
11
+ # uncomment this line if your project needs to run something other than `rake`:
12
+ # script: bundle exec rspec spec
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+ gem 'bio', '>=1.4.2'
6
+
7
+ # Add dependencies to develop your gem here.
8
+ # Include everything needed to run rake, tests, features, etc.
9
+ group :development do
10
+ gem "shoulda", ">= 0"
11
+ gem "rdoc", "~> 3.12"
12
+ gem "jeweler", "~> 1.8.3"
13
+ gem "bundler", ">= 1.0.21"
14
+ gem "bio", ">= 1.4.2"
15
+ gem "rdoc", "~> 3.12"
16
+ end
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Ben J Woodcroft
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,112 @@
1
+ # bio-ipcress
2
+
3
+ ```bio-ipcress``` is a programmatic interface to the ```ipcress``` in-silico PCR software, which
4
+ is bundled with [exonerate](http://www.ebi.ac.uk/~guy/exonerate/).
5
+
6
+ You can run a PCR:
7
+ ```ruby
8
+ require 'bio-ipcress'
9
+
10
+ #hits the first and last bits of the Methanocella_conradii_16s.fa
11
+ primer_set = Bio::Ipcress::PrimerSet.new(
12
+ 'GGTCACTGCTA','GGCTACCTTGTTACGACTTAAC'
13
+ )
14
+
15
+ # Run ipcress on a template sequence, specified in as a FASTA file
16
+ results = Bio::Ipcress.run(
17
+ primer_set,
18
+ 'Methanocella_conradii_16s.fa', #this file is in the test/data/Ipcress directory
19
+ {:min_distance => 2, :max_distance => 10000})
20
+ #=> A Bio::Ipcress::Result object, parsed from
21
+ #
22
+ #Ipcress result
23
+ #--------------
24
+ # Experiment: AE12_pmid21856836_16S
25
+ # Primers: A B
26
+ # Target: gi|335929284|gb|JN048683.1|:filter(unmasked) Methanocella conradii HZ254 16S ribosomal RNA gene, partial sequence
27
+ # Matches: 19/20 14/15
28
+ # Product: 502 bp (range 2-10000)
29
+ #Result type: forward
30
+ #
31
+ #...AAACTTAAAGGAATTGGCGG......................... # forward
32
+ # ||||| ||| |||||| |||-->
33
+ #5'-AAACTYAAAKGAATTGRCGG-3' 3'-CRTGTGTGGCGGGCA-5' # primers
34
+ # <--| |||||||||||||
35
+ #..............................CGTGTGTGGCGGGCA... # revcomp
36
+ #--
37
+ #ipcress: gi|335929284|gb|JN048683.1|:filter(unmasked) AE12_pmid21856836_16S 502 A 826 1 B 1313 1 forward
38
+ #-- completed ipcress analysis"
39
+
40
+
41
+
42
+ # This Bio::Ipcress::Result object now holds info about the result:
43
+ results.length #=> 1
44
+
45
+ res = results[0]
46
+ res.experiment_name #=> 'AE12_pmid21856836_16S'
47
+ res.primers #=> 'A B'
48
+ res.target #=> 'gi|335929284|gb|JN048683.1|:filter(unmasked) Methanocella conradii HZ254 16S ribosomal RNA gene, partial sequence'
49
+ res.matches #=> '19/20 14/15'
50
+ res.product #=> '502 bp (range 2-10000)'
51
+ res.result_type #=> 'forward'
52
+ res.forward_matching_sequence #=> 'AAACTTAAAGGAATTGGCGG'
53
+ res.forward_primer_sequence #=> 'AAACTYAAAKGAATTGRCGG'
54
+ res.reverse_primer_sequence #=> 'CRTGTGTGGCGGGCA'
55
+ res.reverse_matching_sequence #=> 'CGTGTGTGGCGGGCA'
56
+ res.length #=> 502
57
+ res.start #=> 826
58
+ res.forward_mismatches #=> 1
59
+ res.reverse_mismatches #=> 1
60
+ ```
61
+
62
+ There appears to be a slight bug in iPCRess, in the way it handles primers with 'wobble' bases like AAACT*Y*,
63
+ which indicates that both AAACT*C* and AAACT*T* are added as primers.
64
+ IPCress always suggests that there is at least a single mismatch,
65
+ when this is not always the case. To workaround this, the
66
+ ```Result#recalculate_mismatches_from_alignments``` method re-computes the
67
+ number of forward and reverse mismatches.
68
+
69
+ ```ruby
70
+ #...AAACTTAAAGGAATTGGCGG......................... # forward
71
+ # ||||| ||| |||||| |||-->
72
+ #5'-AAACTYAAAKGAATTGRCGG-3' 3'-CRTGTGTGGCGGGCA-5' # primers
73
+ # <--| |||||||||||||
74
+ #..............................CGTGTGTGGCGGGCA... # revcomp
75
+ res = Bio::Ipcress::Result.new
76
+ res.forward_matching_sequence = 'AAACTTAAAGGAATTGGCGG'
77
+ res.forward_primer_sequence = 'AAACTYAAAKGAATTGRCGG'
78
+ res.reverse_matching_sequence = 'CGTGTGTGGCGGGCA'
79
+ res.reverse_primer_sequence = 'CRTGTGTGGCGGGCA'
80
+
81
+ res.recalculate_mismatches_from_alignments #=> [0,0]
82
+ ```
83
+
84
+ ## Installation
85
+
86
+ ```sh
87
+ gem install bio-ipcress
88
+ ```
89
+
90
+ You'll also need to install [exonerate](http://www.ebi.ac.uk/~guy/exonerate/)
91
+
92
+ ## Project home page
93
+
94
+ Information on the source tree, documentation, examples, issues and
95
+ how to contribute, see
96
+
97
+ http://github.com/wwood/bioruby-ipcress
98
+
99
+ The BioRuby community is on IRC server: irc.freenode.org, channel: #bioruby.
100
+
101
+ ## Cite
102
+
103
+ If you use this software, please cite exonerate
104
+
105
+ ## Biogems.info
106
+
107
+ This Biogem is published at [#bio-ipcress](http://biogems.info/index.html)
108
+
109
+ ## Copyright
110
+
111
+ Copyright (c) 2012 Ben J Woodcroft. See LICENSE.txt for further details.
112
+
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "bio-ipcress"
18
+ gem.homepage = "http://github.com/wwood/bioruby-ipcress"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{a programmatic interface to the iPCRess in-silico PCR software}
21
+ gem.description = %Q{a programmatic interface to the iPCRess in-silico PCR software. iPCRess is part of the exonerate suite.}
22
+ gem.email = "gmail.com after donttrustben"
23
+ gem.authors = ["Ben J Woodcroft"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ task :default => :test
36
+
37
+ require 'rdoc/task'
38
+ Rake::RDocTask.new do |rdoc|
39
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
40
+
41
+ rdoc.rdoc_dir = 'rdoc'
42
+ rdoc.title = "bio-ipcress #{version}"
43
+ rdoc.rdoc_files.include('README*')
44
+ rdoc.rdoc_files.include('lib/**/*.rb')
45
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,3 @@
1
+ require 'bio'
2
+ require 'bio/appl/ipcress.rb'
3
+
@@ -0,0 +1,180 @@
1
+ require 'bio'
2
+ require 'tempfile'
3
+
4
+ module Bio
5
+ class Ipcress
6
+ # A full Ipcress result looks something like this. Parse it into an array of Ipcress::Result objects
7
+ #
8
+ # ** Message: Loaded [1] experiments
9
+ #
10
+ # Ipcress result
11
+ # --------------
12
+ # Experiment: AE12_pmid21856836_16S
13
+ # Primers: A B
14
+ # Target: gi|335929284|gb|JN048683.1|:filter(unmasked) Methanocella conradii HZ254 16S ribosomal RNA gene, partial sequence
15
+ # Matches: 19/20 14/15
16
+ # Product: 502 bp (range 2-10000)
17
+ # Result type: forward
18
+ #
19
+ # ...AAACTTAAAGGAATTGGCGG......................... # forward
20
+ # ||||| ||| |||||| |||-->
21
+ # 5'-AAACTYAAAKGAATTGRCGG-3' 3'-CRTGTGTGGCGGGCA-5' # primers
22
+ # <--| |||||||||||||
23
+ # ..............................CGTGTGTGGCGGGCA... # revcomp
24
+ # --
25
+ # ipcress: gi|335929284|gb|JN048683.1|:filter(unmasked) AE12_pmid21856836_16S 502 A 826 1 B 1313 1 forward
26
+ # -- completed ipcress analysis
27
+ def self.parse(ipcress_output_string)
28
+ results = Results.new
29
+
30
+ ipcress_output_string.split(/\nIpcress result\n--------------\n/m).each_with_index do |result_chunk, index|
31
+ next if index == 0 # ignore the first chunk since that isn't a result
32
+
33
+ lines = result_chunk.split("\n").collect{|l| l.strip}
34
+
35
+ result = Result.new
36
+ i=0
37
+ result.experiment_name = lines[i].match(/^Experiment: (.+)$/)[1]; i+=1
38
+ result.primers = lines[i].match(/^Primers: (.+)$/)[1]; i+=1
39
+ result.target = lines[i].match(/^Target: (.+)$/)[1]; i+=1
40
+ result.matches = lines[i].match(/^Matches: (.+)$/)[1]; i+=1
41
+ result.product = lines[i].match(/^Product: (.+)$/)[1]; i+=1
42
+ result.result_type = lines[i].match(/^Result type: (.+)$/)[1]
43
+
44
+ i+= 2
45
+ result.forward_matching_sequence = lines[i].match(/^\.\.\.(\w+)\.+ \# forward$/)[1]
46
+ i+= 2
47
+ matching = lines[i].match(/^5'\-(\w+)-3' 3'\-(\w+)-5' \# primers$/)
48
+ result.forward_primer_sequence = matching[1]
49
+ result.reverse_primer_sequence = matching[2]
50
+ i+= 2
51
+ result.reverse_matching_sequence = lines[i].match(/^\.+(\w+)\.\.\. \# revcomp$/)[1]
52
+
53
+ i+= 2
54
+ matching = lines[i].match(/^ipcress: (\S+) (\S+) (\d+) [AB] (\d+) (\d+) [AB] (\d+) (\d+) (\S+)$/)
55
+ result.length = matching[3].to_i
56
+ result.start = matching[4].to_i
57
+ result.forward_mismatches = matching[5].to_i
58
+ result.reverse_mismatches = matching[7].to_i
59
+
60
+ results.push result
61
+ end
62
+ return results
63
+ end
64
+
65
+ # Run ipcress
66
+ #
67
+ # * primer_set: a PrimerSet object with defined forward and reverse primers
68
+ # * fasta_file: a String path to a fasta file that will be used as template
69
+ # * options hash: contains less-used parameters
70
+ # ** :min_distance: the minimum length of product to be amplified (default 100)
71
+ # ** :max_distance: the maxmimum length of product to be amplified (default 1000)
72
+ # ** :ipcress_path: path the ipcress executable (default 'ipcress')
73
+ # ** :mismatches: number of mismatches allowable (-m parameter to ipcress binary, default 0)
74
+ #
75
+ # Return an array of parsed Result objects
76
+ def self.run(primer_set, fasta_file, options={})
77
+ raise unless primer_set.kind_of?(PrimerSet)
78
+ raise unless fasta_file.kind_of?(String)
79
+ options[:ipcress_path] ||= 'ipcress'
80
+
81
+ Tempfile.open('ipcress') do |tempfile|
82
+ # Write a tempfile that contains the primer set to be queried
83
+ primers = primer_set.to_ipcress_format(options)
84
+ tempfile.puts primers
85
+ tempfile.close
86
+
87
+ command = [
88
+ options[:ipcress_path],
89
+ ]
90
+ if options[:mismatches]
91
+ command.push '-m'
92
+ command.push options[:mismatches].to_s
93
+ end
94
+ command.push tempfile.path
95
+ command.push fasta_file
96
+
97
+ Bio::Command.call_command_open3(command) do |stdin, stdout, stderr|
98
+ out = stdout.read
99
+ raise stderr.read if out == '' #if there is a problem running ipcress e.g. the fasta file isn't found
100
+
101
+ return parse(out)
102
+ end
103
+ end
104
+ end
105
+
106
+ # A class to represent a pair of primers that will be used by Ipcress
107
+ # to amplify from template DNA in-silico
108
+ class PrimerSet
109
+ attr_accessor :forward_primer, :reverse_primer
110
+
111
+ def initialize(forward_primer, reverse_primer)
112
+ @forward_primer = forward_primer
113
+ @reverse_primer = reverse_primer
114
+ end
115
+
116
+ # To a string in the "ipcress file" format required for ipcress usage
117
+ def to_ipcress_format(options={})
118
+ options ||= {}
119
+ options[:min_distance] ||= 100
120
+ options[:max_distance] ||= 1000
121
+ "ID1 #{@forward_primer} #{@reverse_primer} #{options[:min_distance]} #{options[:max_distance]}"
122
+ end
123
+ end
124
+
125
+ # A collection of Ipcress Result objects for a given run
126
+ class Results < Array
127
+ end
128
+
129
+ # Ipcress single result (single primer pair match)
130
+ #
131
+ # Attributes of this class should be largely obvious by inspecting the Ipcress output
132
+ class Result
133
+ attr_accessor :experiment_name
134
+
135
+ attr_accessor :primers, :target, :matches, :product, :result_type
136
+
137
+ # A String representing the matching part of the sequence
138
+ attr_accessor :forward_matching_sequence
139
+
140
+ # A String representing the matching primer
141
+ attr_accessor :forward_primer_sequence
142
+
143
+ # A String representing the matching primer
144
+ attr_accessor :reverse_primer_sequence
145
+
146
+ # A String representing the matching part of the sequence
147
+ attr_accessor :reverse_matching_sequence
148
+
149
+ attr_accessor :length, :forward_mismatches, :start, :reverse_mismatches
150
+
151
+ # When there are wobbles in the primers, Ipcress always reports at
152
+ # least 1 mismatch (1 for all matching wobbles plus regular mismatches).
153
+ #
154
+ # This method recalculates the mismatches by re-aligning the primers
155
+ # against the sequences that they hit in this Result.
156
+ #
157
+ # Returns an array of 2 values corresponding to the number of mismatches
158
+ # in the forward and revcomp primers, respectively.
159
+ #
160
+ # Assumes that there is only wobbles in the primers, not the sequence
161
+ # (Does ipcress itself assume this?)
162
+ def recalculate_mismatches_from_alignments
163
+ calculate_mismatches = lambda do |seq, primer|
164
+ mismatches = 0
165
+ (0..(seq.length-1)).each do |position|
166
+ regex = Bio::Sequence::NA.new(primer[position].downcase).to_re
167
+ seqp = seq[position].downcase
168
+ mismatches += 1 unless regex.match(seqp)
169
+ end
170
+ mismatches
171
+ end
172
+
173
+ return [
174
+ calculate_mismatches.call(@forward_matching_sequence, @forward_primer_sequence),
175
+ calculate_mismatches.call(@reverse_matching_sequence, @reverse_primer_sequence)
176
+ ]
177
+ end
178
+ end
179
+ end
180
+ end
@@ -0,0 +1,22 @@
1
+ >gi|335929284|gb|JN048683.1| Methanocella conradii HZ254 16S ribosomal RNA gene, partial sequence
2
+ GGTCACTGCTATCGGTGTCCGATTAAGCCATGCGAGTCGTGAGGGGTGAGCCCTCGGCGTACTGCTCAGT
3
+ AACACGTGGACAATCTGCCCAAAAGTCCGGGATAACCCCGGGAAACTGGGGATAATACCGGATAGGCCAC
4
+ CAATTGCTGGAATGGCCTGGTGGTTGAAACGAGAGGCTTTTGGATGGGTCTGCGGCGGATTAGGTTGACG
5
+ CCGGTGTAACGTACCGGCGTGCCTGTAATCCGTACGGGTTGTGGGAGCAAGAGCCCGGAGATGGATTCTG
6
+ AGACACGAATCCAGGCCCTACGGGGCGCAGCAGGCGCGAAAACTCTACAATGCAGGCAATCTGCGATAGG
7
+ GGGACATCGAGTGGCATCTTCTTAAGGTGCCTGTCCAACCGTCTAAAAAACGGTTGTTAGCAAGGGCCGG
8
+ GTAAGACCGGTGCCAGCCGCCGCGGTAATACCGGCGGCTCGAGTGGTGGCCGATATTATTGAGTCTAAAG
9
+ GGTCCGTAGCCGGCTTTGCAAGTCCCCTGGGAAATCCAGCGGCTTAACCGTTGGGCGCCCATGGGATACT
10
+ ACATTGCTTGGGACTGGGAGAGGCGAGAGGTACTCGAGGGGTAGGGGTGAAATCCTGTAATCCTTCGGGG
11
+ ACCACCGGTGGCGAAGGCGTCTCGCCAGAACAGGTCCGACGGTGAGGGACGAAAGCTAGGGGCACGAACC
12
+ GGATTAGATACCCGGGTAGTCCTAGCCGTAAACGATGCCCGCTAGGTGTCACGATAATCGTGAATTATCG
13
+ TGGTGCCGTAGGGAAGCCGCGAAGCGGGCCACTTGGGAAGTACGACCGCAAGGTTGAAACTTAAAGGAAT
14
+ TGGCGGGGGAGCACCACAACGGGTGGAGCCTGCGGTTTAATTGGATTCAACGCCGGGAAGCTTACCGGGA
15
+ TCGACAGTTGAATGAAGGCCAGGCCGAAGACCTTGCCGGACTAGCTGAGAGGAGGTGCATGGCCGTCGTC
16
+ AGTTCGTACCGTGAGGCGTCCTGTTAAGTCAGGCAACGAGCGAGACCCATGTCCACTGTTGCTAACGCGT
17
+ CCGCGAGGACGGCGAGTACACTGTGGAGACTGCTGGCGCTAAGTCAGAGGAAGGGTTGGTCGACGGTAGG
18
+ TCAGTATGCCCCGAATATCCCGGGCTACACGCGGGCTACAATGGACAGGACAATGGGTAACAACACCGAG
19
+ AGGTGAAGTTAATCTCTTAAACCTGTCCCTAGTTCGGATTGAGGGCTGAAACCCGCCCTCATGAAGATGG
20
+ AATCCGTAGTAATCGCATTTCAAAACAGTGCGGTGAATACGTCCCTGCTCCTTGCACACACCGCCCGTCA
21
+ AACCACCCGAGCGGGGCGTGAATAAGGACTCTTTTCCTTGAAGAGCTCGAATTCACGTTCTGTAAGGGGG
22
+ GTTAAGTCGTAACAAGGTAGCC
@@ -0,0 +1,44 @@
1
+ >gi|335929284|gb|JN048683.1| Methanocella conradii HZ254 16S ribosomal RNA gene, partial sequence
2
+ GGTCACTGCTATCGGTGTCCGATTAAGCCATGCGAGTCGTGAGGGGTGAGCCCTCGGCGTACTGCTCAGT
3
+ AACACGTGGACAATCTGCCCAAAAGTCCGGGATAACCCCGGGAAACTGGGGATAATACCGGATAGGCCAC
4
+ CAATTGCTGGAATGGCCTGGTGGTTGAAACGAGAGGCTTTTGGATGGGTCTGCGGCGGATTAGGTTGACG
5
+ CCGGTGTAACGTACCGGCGTGCCTGTAATCCGTACGGGTTGTGGGAGCAAGAGCCCGGAGATGGATTCTG
6
+ AGACACGAATCCAGGCCCTACGGGGCGCAGCAGGCGCGAAAACTCTACAATGCAGGCAATCTGCGATAGG
7
+ GGGACATCGAGTGGCATCTTCTTAAGGTGCCTGTCCAACCGTCTAAAAAACGGTTGTTAGCAAGGGCCGG
8
+ GTAAGACCGGTGCCAGCCGCCGCGGTAATACCGGCGGCTCGAGTGGTGGCCGATATTATTGAGTCTAAAG
9
+ GGTCCGTAGCCGGCTTTGCAAGTCCCCTGGGAAATCCAGCGGCTTAACCGTTGGGCGCCCATGGGATACT
10
+ ACATTGCTTGGGACTGGGAGAGGCGAGAGGTACTCGAGGGGTAGGGGTGAAATCCTGTAATCCTTCGGGG
11
+ ACCACCGGTGGCGAAGGCGTCTCGCCAGAACAGGTCCGACGGTGAGGGACGAAAGCTAGGGGCACGAACC
12
+ GGATTAGATACCCGGGTAGTCCTAGCCGTAAACGATGCCCGCTAGGTGTCACGATAATCGTGAATTATCG
13
+ TGGTGCCGTAGGGAAGCCGCGAAGCGGGCCACTTGGGAAGTACGACCGCAAGGTTGAAACTTAAAGGAAT
14
+ TGGCGGGGGAGCACCACAACGGGTGGAGCCTGCGGTTTAATTGGATTCAACGCCGGGAAGCTTACCGGGA
15
+ TCGACAGTTGAATGAAGGCCAGGCCGAAGACCTTGCCGGACTAGCTGAGAGGAGGTGCATGGCCGTCGTC
16
+ AGTTCGTACCGTGAGGCGTCCTGTTAAGTCAGGCAACGAGCGAGACCCATGTCCACTGTTGCTAACGCGT
17
+ CCGCGAGGACGGCGAGTACACTGTGGAGACTGCTGGCGCTAAGTCAGAGGAAGGGTTGGTCGACGGTAGG
18
+ TCAGTATGCCCCGAATATCCCGGGCTACACGCGGGCTACAATGGACAGGACAATGGGTAACAACACCGAG
19
+ AGGTGAAGTTAATCTCTTAAACCTGTCCCTAGTTCGGATTGAGGGCTGAAACCCGCCCTCATGAAGATGG
20
+ AATCCGTAGTAATCGCATTTCAAAACAGTGCGGTGAATACGTCCCTGCTCCTTGCACACACCGCCCGTCA
21
+ AACCACCCGAGCGGGGCGTGAATAAGGACTCTTTTCCTTGAAGAGCTCGAATTCACGTTCTGTAAGGGGG
22
+ GTTAAGTCGTAACAAGGTAGCC
23
+ >2nd
24
+ GGTCACTGCTATCGGTGTCCGATTAAGCCATGCGAGTCGTGAGGGGTGAGCCCTCGGCGTACTGCTCAGT
25
+ AACACGTGGACAATCTGCCCAAAAGTCCGGGATAACCCCGGGAAACTGGGGATAATACCGGATAGGCCAC
26
+ CAATTGCTGGAATGGCCTGGTGGTTGAAACGAGAGGCTTTTGGATGGGTCTGCGGCGGATTAGGTTGACG
27
+ CCGGTGTAACGTACCGGCGTGCCTGTAATCCGTACGGGTTGTGGGAGCAAGAGCCCGGAGATGGATTCTG
28
+ AGACACGAATCCAGGCCCTACGGGGCGCAGCAGGCGCGAAAACTCTACAATGCAGGCAATCTGCGATAGG
29
+ GGGACATCGAGTGGCATCTTCTTAAGGTGCCTGTCCAACCGTCTAAAAAACGGTTGTTAGCAAGGGCCGG
30
+ GTAAGACCGGTGCCAGCCGCCGCGGTAATACCGGCGGCTCGAGTGGTGGCCGATATTATTGAGTCTAAAG
31
+ GGTCCGTAGCCGGCTTTGCAAGTCCCCTGGGAAATCCAGCGGCTTAACCGTTGGGCGCCCATGGGATACT
32
+ ACATTGCTTGGGACTGGGAGAGGCGAGAGGTACTCGAGGGGTAGGGGTGAAATCCTGTAATCCTTCGGGG
33
+ ACCACCGGTGGCGAAGGCGTCTCGCCAGAACAGGTCCGACGGTGAGGGACGAAAGCTAGGGGCACGAACC
34
+ GGATTAGATACCCGGGTAGTCCTAGCCGTAAACGATGCCCGCTAGGTGTCACGATAATCGTGAATTATCG
35
+ TGGTGCCGTAGGGAAGCCGCGAAGCGGGCCACTTGGGAAGTACGACCGCAAGGTTGAAACTTAAAGGAAT
36
+ TGGCGGGGGAGCACCACAACGGGTGGAGCCTGCGGTTTAATTGGATTCAACGCCGGGAAGCTTACCGGGA
37
+ TCGACAGTTGAATGAAGGCCAGGCCGAAGACCTTGCCGGACTAGCTGAGAGGAGGTGCATGGCCGTCGTC
38
+ AGTTCGTACCGTGAGGCGTCCTGTTAAGTCAGGCAACGAGCGAGACCCATGTCCACTGTTGCTAACGCGT
39
+ CCGCGAGGACGGCGAGTACACTGTGGAGACTGCTGGCGCTAAGTCAGAGGAAGGGTTGGTCGACGGTAGG
40
+ TCAGTATGCCCCGAATATCCCGGGCTACACGCGGGCTACAATGGACAGGACAATGGGTAACAACACCGAG
41
+ AGGTGAAGTTAATCTCTTAAACCTGTCCCTAGTTCGGATTGAGGGCTGAAACCCGCCCTCATGAAGATGG
42
+ AATCCGTAGTAATCGCATTTCAAAACAGTGCGGTGAATACGTCCCTGCTCCTTGCACACACCGCCCGTCA
43
+ AACCACCCGAGCGGGGCGTGAATAAGGACTCTTTTCCTTGAAGAGCTCGAATTCACGTTCTGTAAGGGGG
44
+ GTTAAGTCGTAACAAGGTAGCC
@@ -0,0 +1,43 @@
1
+ >gi|335929284|gb|JN048683.1| Methanocella conradii HZ254 16S ribosomal RNA gene, partial sequence
2
+ GGTCACTGCTATCGGTGTCCGATTAAGCCATGCGAGTCGTGAGGGGTGAGCCCTCGGCGTACTGCTCAGT
3
+ AACACGTGGACAATCTGCCCAAAAGTCCGGGATAACCCCGGGAAACTGGGGATAATACCGGATAGGCCAC
4
+ CAATTGCTGGAATGGCCTGGTGGTTGAAACGAGAGGCTTTTGGATGGGTCTGCGGCGGATTAGGTTGACG
5
+ CCGGTGTAACGTACCGGCGTGCCTGTAATCCGTACGGGTTGTGGGAGCAAGAGCCCGGAGATGGATTCTG
6
+ AGACACGAATCCAGGCCCTACGGGGCGCAGCAGGCGCGAAAACTCTACAATGCAGGCAATCTGCGATAGG
7
+ GGGACATCGAGTGGCATCTTCTTAAGGTGCCTGTCCAACCGTCTAAAAAACGGTTGTTAGCAAGGGCCGG
8
+ GTAAGACCGGTGCCAGCCGCCGCGGTAATACCGGCGGCTCGAGTGGTGGCCGATATTATTGAGTCTAAAG
9
+ GGTCCGTAGCCGGCTTTGCAAGTCCCCTGGGAAATCCAGCGGCTTAACCGTTGGGCGCCCATGGGATACT
10
+ ACATTGCTTGGGACTGGGAGAGGCGAGAGGTACTCGAGGGGTAGGGGTGAAATCCTGTAATCCTTCGGGG
11
+ ACCACCGGTGGCGAAGGCGTCTCGCCAGAACAGGTCCGACGGTGAGGGACGAAAGCTAGGGGCACGAACC
12
+ GGATTAGATACCCGGGTAGTCCTAGCCGTAAACGATGCCCGCTAGGTGTCACGATAATCGTGAATTATCG
13
+ TGGTGCCGTAGGGAAGCCGCGAAGCGGGCCACTTGGGAAGTACGACCGCAAGGTTGAAACTTAAAGGAAT
14
+ TGGCGGGGGAGCACCACAACGGGTGGAGCCTGCGGTTTAATTGGATTCAACGCCGGGAAGCTTACCGGGA
15
+ TCGACAGTTGAATGAAGGCCAGGCCGAAGACCTTGCCGGACTAGCTGAGAGGAGGTGCATGGCCGTCGTC
16
+ AGTTCGTACCGTGAGGCGTCCTGTTAAGTCAGGCAACGAGCGAGACCCATGTCCACTGTTGCTAACGCGT
17
+ CCGCGAGGACGGCGAGTACACTGTGGAGACTGCTGGCGCTAAGTCAGAGGAAGGGTTGGTCGACGGTAGG
18
+ TCAGTATGCCCCGAATATCCCGGGCTACACGCGGGCTACAATGGACAGGACAATGGGTAACAACACCGAG
19
+ AGGTGAAGTTAATCTCTTAAACCTGTCCCTAGTTCGGATTGAGGGCTGAAACCCGCCCTCATGAAGATGG
20
+ AATCCGTAGTAATCGCATTTCAAAACAGTGCGGTGAATACGTCCCTGCTCCTTGCACACACCGCCCGTCA
21
+ AACCACCCGAGCGGGGCGTGAATAAGGACTCTTTTCCTTGAAGAGCTCGAATTCACGTTCTGTAAGGGGG
22
+ GTTAAGTCGTAACAAGGTAGCC
23
+ GGTCACTGCTATCGGTGTCCGATTAAGCCATGCGAGTCGTGAGGGGTGAGCCCTCGGCGTACTGCTCAGT
24
+ AACACGTGGACAATCTGCCCAAAAGTCCGGGATAACCCCGGGAAACTGGGGATAATACCGGATAGGCCAC
25
+ CAATTGCTGGAATGGCCTGGTGGTTGAAACGAGAGGCTTTTGGATGGGTCTGCGGCGGATTAGGTTGACG
26
+ CCGGTGTAACGTACCGGCGTGCCTGTAATCCGTACGGGTTGTGGGAGCAAGAGCCCGGAGATGGATTCTG
27
+ AGACACGAATCCAGGCCCTACGGGGCGCAGCAGGCGCGAAAACTCTACAATGCAGGCAATCTGCGATAGG
28
+ GGGACATCGAGTGGCATCTTCTTAAGGTGCCTGTCCAACCGTCTAAAAAACGGTTGTTAGCAAGGGCCGG
29
+ GTAAGACCGGTGCCAGCCGCCGCGGTAATACCGGCGGCTCGAGTGGTGGCCGATATTATTGAGTCTAAAG
30
+ GGTCCGTAGCCGGCTTTGCAAGTCCCCTGGGAAATCCAGCGGCTTAACCGTTGGGCGCCCATGGGATACT
31
+ ACATTGCTTGGGACTGGGAGAGGCGAGAGGTACTCGAGGGGTAGGGGTGAAATCCTGTAATCCTTCGGGG
32
+ ACCACCGGTGGCGAAGGCGTCTCGCCAGAACAGGTCCGACGGTGAGGGACGAAAGCTAGGGGCACGAACC
33
+ GGATTAGATACCCGGGTAGTCCTAGCCGTAAACGATGCCCGCTAGGTGTCACGATAATCGTGAATTATCG
34
+ TGGTGCCGTAGGGAAGCCGCGAAGCGGGCCACTTGGGAAGTACGACCGCAAGGTTGAAACTTAAAGGAAT
35
+ TGGCGGGGGAGCACCACAACGGGTGGAGCCTGCGGTTTAATTGGATTCAACGCCGGGAAGCTTACCGGGA
36
+ TCGACAGTTGAATGAAGGCCAGGCCGAAGACCTTGCCGGACTAGCTGAGAGGAGGTGCATGGCCGTCGTC
37
+ AGTTCGTACCGTGAGGCGTCCTGTTAAGTCAGGCAACGAGCGAGACCCATGTCCACTGTTGCTAACGCGT
38
+ CCGCGAGGACGGCGAGTACACTGTGGAGACTGCTGGCGCTAAGTCAGAGGAAGGGTTGGTCGACGGTAGG
39
+ TCAGTATGCCCCGAATATCCCGGGCTACACGCGGGCTACAATGGACAGGACAATGGGTAACAACACCGAG
40
+ AGGTGAAGTTAATCTCTTAAACCTGTCCCTAGTTCGGATTGAGGGCTGAAACCCGCCCTCATGAAGATGG
41
+ AATCCGTAGTAATCGCATTTCAAAACAGTGCGGTGAATACGTCCCTGCTCCTTGCACACACCGCCCGTCA
42
+ AACCACCCGAGCGGGGCGTGAATAAGGACTCTTTTCCTTGAAGAGCTCGAATTCACGTTCTGTAAGGGGG
43
+ GTTAAGTCGTAACAAGGTAGCC
@@ -0,0 +1 @@
1
+ AE12_pmid21856836_16S AAACTYAAAKGAATTGRCGG ACGGGCGGTGTGTRC 2 10000
@@ -0,0 +1 @@
1
+ AE12_pmid21856836_16S AAACTYAAAAKGAATTGRCGG ACGGGCGGTGTGTRC 2 10000
@@ -0,0 +1,2 @@
1
+ AE12_pmid21856836_16S_1 AAACTYAAAKGAATTGRCGG ACGGGCGGTGTGTRC 2 10000
2
+ AE12_pmid21856836_16S_mismatch AATCTYAAAKGAATTGRCGG ACGGGCGGTGTGTRC 2 10000
@@ -0,0 +1,21 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'bio-ipcress'
16
+
17
+ class Test::Unit::TestCase
18
+ end
19
+
20
+
21
+ DATA_DIR = File.join(File.dirname(__FILE__), 'data','Ipcress')
@@ -0,0 +1,178 @@
1
+ require 'helper'
2
+ require 'stringio'
3
+
4
+ class TestBioIpcress < Test::Unit::TestCase
5
+ should "test 1 result" do
6
+ ipcress = "
7
+ Ipcress result
8
+ --------------
9
+ Experiment: AE12_pmid21856836_16S
10
+ Primers: A B
11
+ Target: gi|335929284|gb|JN048683.1|:filter(unmasked) Methanocella conradii HZ254 16S ribosomal RNA gene, partial sequence
12
+ Matches: 19/20 14/15
13
+ Product: 502 bp (range 2-10000)
14
+ Result type: forward
15
+
16
+ ...AAACTTAAAGGAATTGGCGG......................... # forward
17
+ ||||| ||| |||||| |||-->
18
+ 5'-AAACTYAAAKGAATTGRCGG-3' 3'-CRTGTGTGGCGGGCA-5' # primers
19
+ <--| |||||||||||||
20
+ ..............................CGTGTGTGGCGGGCA... # revcomp
21
+ --
22
+ ipcress: gi|335929284|gb|JN048683.1|:filter(unmasked) AE12_pmid21856836_16S 502 A 826 1 B 1313 1 forward
23
+ -- completed ipcress analysis"
24
+ results = Bio::Ipcress.parse(ipcress)
25
+ assert_equal 1, results.length
26
+ res = results[0]
27
+ assert_equal 'AE12_pmid21856836_16S', res.experiment_name
28
+ assert_equal 'A B', res.primers
29
+ assert_equal 'gi|335929284|gb|JN048683.1|:filter(unmasked) Methanocella conradii HZ254 16S ribosomal RNA gene, partial sequence',
30
+ res.target
31
+ assert_equal '19/20 14/15', res.matches
32
+ assert_equal '502 bp (range 2-10000)', res.product
33
+ assert_equal 'forward', res.result_type
34
+ assert_equal 'AAACTTAAAGGAATTGGCGG', res.forward_matching_sequence
35
+ assert_equal 'AAACTYAAAKGAATTGRCGG', res.forward_primer_sequence
36
+ assert_equal 'CRTGTGTGGCGGGCA', res.reverse_primer_sequence
37
+ assert_equal 'CGTGTGTGGCGGGCA', res.reverse_matching_sequence
38
+ assert_equal 502, res.length
39
+ assert_equal 826, res.start
40
+ assert_equal 1, res.forward_mismatches
41
+ assert_equal 1, res.reverse_mismatches
42
+ end
43
+
44
+ should "test multi-experiment results" do
45
+ ipcress = "
46
+ Ipcress result
47
+ --------------
48
+ Experiment: AE12_pmid21856836_16S
49
+ Primers: B B
50
+ Target: gi|335929284|gb|JN048683.1|:filter(unmasked) Methanocella conradii HZ254 16S ribosomal RNA gene, partial sequence
51
+ Matches: 10/15 14/15
52
+ Product: 1085 bp (range 2-10000)
53
+ Result type: single_B
54
+
55
+ ...ACGGGTTGTGGGAGC......................... # forward
56
+ ||||| ||| | |-->
57
+ 5'-ACGGGCGGTGTGTRC-3' 3'-CRTGTGTGGCGGGCA-5' # primers
58
+ <--| |||||||||||||
59
+ .........................CGTGTGTGGCGGGCA... # revcomp
60
+ --
61
+ ipcress: gi|335929284|gb|JN048683.1|:filter(unmasked) AE12_pmid21856836_16S 1085 B 243 5 B 1313 1 single_B
62
+
63
+ Ipcress result
64
+ --------------
65
+ Experiment: AE12_pmid21856836_16S
66
+ Primers: A B
67
+ Target: gi|335929284|gb|JN048683.1|:filter(unmasked) Methanocella conradii HZ254 16S ribosomal RNA gene, partial sequence
68
+ Matches: 16/21 14/15
69
+ Product: 503 bp (range 2-10000)
70
+ Result type: forward
71
+
72
+ ...GAAACTTAAAGGAATTGGCGG......................... # forward
73
+ || ||| |||||| |||-->
74
+ 5'-AAACTYAAAAKGAATTGRCGG-3' 3'-CRTGTGTGGCGGGCA-5' # primers
75
+ <--| |||||||||||||
76
+ ...............................CGTGTGTGGCGGGCA... # revcomp
77
+ --
78
+ ipcress: gi|335929284|gb|JN048683.1|:filter(unmasked) AE12_pmid21856836_16S 503 A 825 5 B 1313 1 forward
79
+
80
+ Ipcress result
81
+ --------------
82
+ Experiment: AE12_pmid21856836_16S
83
+ Primers: B B
84
+ Target: gi|335929284|gb|JN048683.1|:filter(unmasked) Methanocella conradii HZ254 16S ribosomal RNA gene, partial sequence
85
+ Matches: 10/15 14/15
86
+ Product: 470 bp (range 2-10000)
87
+ Result type: single_B
88
+
89
+ ...ACGGGTGGAGCCTGC......................... # forward
90
+ ||||| || | | |-->
91
+ 5'-ACGGGCGGTGTGTRC-3' 3'-CRTGTGTGGCGGGCA-5' # primers
92
+ <--| |||||||||||||
93
+ .........................CGTGTGTGGCGGGCA... # revcomp
94
+ --
95
+ ipcress: gi|335929284|gb|JN048683.1|:filter(unmasked) AE12_pmid21856836_16S 470 B 858 5 B 1313 1 single_B
96
+ -- completed ipcress analysis
97
+ "
98
+ results = Bio::Ipcress.parse(ipcress)
99
+ assert_equal 3, results.length
100
+ assert_equal 5, results[0].forward_mismatches
101
+ end
102
+
103
+ should "test recalculation of matches" do
104
+ res = Bio::Ipcress::Result.new
105
+
106
+ #...AAACTTAAAGGAATTGGCGG......................... # forward
107
+ # ||||| ||| |||||| |||-->
108
+ #5'-AAACTYAAAKGAATTGRCGG-3' 3'-CRTGTGTGGCGGGCA-5' # primers
109
+ # <--| |||||||||||||
110
+ #..............................CGTGTGTGGCGGGCA... # revcomp
111
+ res.forward_matching_sequence = 'AAACTTAAAGGAATTGGCGG'
112
+ res.forward_primer_sequence = 'AAACTYAAAKGAATTGRCGG'
113
+ res.reverse_matching_sequence = 'CGTGTGTGGCGGGCA'
114
+ res.reverse_primer_sequence = 'CRTGTGTGGCGGGCA'
115
+ assert_equal [0,0], res.recalculate_mismatches_from_alignments
116
+
117
+ res.reverse_primer_sequence = 'CRTGTGTGGCGGGCT'
118
+ assert_equal [0,1], res.recalculate_mismatches_from_alignments
119
+
120
+ res.forward_primer_sequence = 'AAACTRAAAKGAATTGRCGG'
121
+ res.reverse_primer_sequence = 'CRTGTGTGGCGGGCA'
122
+ assert_equal [1,0], res.recalculate_mismatches_from_alignments, "mismatching wobble R"
123
+ end
124
+
125
+ should "primer set to ipcress format" do
126
+ primer_set = Bio::Ipcress::PrimerSet.new('AAT','GTG')
127
+
128
+ assert_equal 'ID1 AAT GTG 100 1000', primer_set.to_ipcress_format
129
+ assert_equal 'ID1 AAT GTG 3 700', primer_set.to_ipcress_format({:min_distance => 3, :max_distance => 700})
130
+ end
131
+
132
+ should "run ipcress ok" do
133
+ primer_set = Bio::Ipcress::PrimerSet.new('GGTCACTGCTA','GGCTACCTTGTTACGACTTAAC') #the first and last bits of the Methanocella_conradii_16s.fa
134
+ results = Bio::Ipcress.run(primer_set, File.join(DATA_DIR, 'Methanocella_conradii_16s.fa'), {:min_distance => 2, :max_distance => 10000})
135
+ assert_equal 1, results.length
136
+ assert_equal 'ID1', results[0].experiment_name
137
+ end
138
+
139
+ should "return empty array when ipcress finds nadda" do
140
+ primer_set = Bio::Ipcress::PrimerSet.new('AAAAAAAAAAAAAAAA','TTTTTTTTTTTTTTTTT') #the first and last bits of the Methanocella_conradii_16s.fa
141
+ results = Bio::Ipcress.run(primer_set, File.join(DATA_DIR, 'Methanocella_conradii_16s.fa'))
142
+ assert_kind_of Array, results
143
+ assert_equal 0, results.length
144
+ end
145
+
146
+ # This test is handled by bioruby's Bio::Command, so eh
147
+ # should "raise exception when there is a problem running ipcress" do
148
+ # primer_set = Bio::Ipcress::PrimerSet.new('AAAAAAAAAAAAAAAA','TTTTTTTTTTTTTTTTT') #the first and last bits of the Methanocella_conradii_16s.fa
149
+ # assert_raise RuntimeError do
150
+ # Bio::Ipcress.run(primer_set, File.join(DATA_DIR, 'Methanocella_conradii_16s.fa'), :ipcress_path => 'not_ipcress')
151
+ # end
152
+ # end
153
+
154
+ should "run should complain about bad inputs" do
155
+ assert_raise RuntimeError do
156
+ Bio::Ipcress.run(nil, 'abc.fa')
157
+ end
158
+ assert_raise RuntimeError do
159
+ Bio::Ipcress.run(Bio::Ipcress::PrimerSet.new('GGTCACTGCTA','GGCTACCTTGTTACGACTTAAC'), [])
160
+ end
161
+ end
162
+
163
+ should "run sensibly when the fasta file is not found" do
164
+ assert_raise RuntimeError do
165
+ Bio::Ipcress.run(Bio::Ipcress::PrimerSet.new('GGTCACTGCTA','GGCTACCTTGTTACGACTTAAC'), 'notafasta_file_fo_so.fa')
166
+ end
167
+ end
168
+
169
+ should "run with multiple hits" do
170
+ primer_set = Bio::Ipcress::PrimerSet.new('GGTCACTGCTA','GGCTACCTTGTTACGACTTAAC') #the first and last bits of the Methanocella_conradii_16s.fa
171
+ results = Bio::Ipcress.run(primer_set, File.join(DATA_DIR, 'Methanocella_conradii_16s_2_sequences.fa'), {:min_distance => 2, :max_distance => 10000})
172
+ assert_equal 2, results.length
173
+ assert_equal 'ID1', results[0].experiment_name
174
+ assert_equal 'gi|335929284|gb|JN048683.1|:filter(unmasked) Methanocella conradii HZ254 16S ribosomal RNA gene, partial sequence', results[0].target
175
+ assert_equal '2nd:filter(unmasked)', results[1].target
176
+ end
177
+
178
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bio-ipcress
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ben J Woodcroft
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bio
16
+ requirement: &72407200 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.4.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *72407200
25
+ - !ruby/object:Gem::Dependency
26
+ name: shoulda
27
+ requirement: &72406750 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *72406750
36
+ - !ruby/object:Gem::Dependency
37
+ name: rdoc
38
+ requirement: &72406370 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '3.12'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *72406370
47
+ - !ruby/object:Gem::Dependency
48
+ name: jeweler
49
+ requirement: &72406020 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.8.3
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *72406020
58
+ - !ruby/object:Gem::Dependency
59
+ name: bundler
60
+ requirement: &72405780 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: 1.0.21
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *72405780
69
+ - !ruby/object:Gem::Dependency
70
+ name: bio
71
+ requirement: &72405540 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: 1.4.2
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *72405540
80
+ - !ruby/object:Gem::Dependency
81
+ name: rdoc
82
+ requirement: &72405300 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: '3.12'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *72405300
91
+ description: a programmatic interface to the iPCRess in-silico PCR software. iPCRess
92
+ is part of the exonerate suite.
93
+ email: gmail.com after donttrustben
94
+ executables: []
95
+ extensions: []
96
+ extra_rdoc_files:
97
+ - LICENSE.txt
98
+ - README.md
99
+ files:
100
+ - .document
101
+ - .travis.yml
102
+ - Gemfile
103
+ - LICENSE.txt
104
+ - README.md
105
+ - Rakefile
106
+ - VERSION
107
+ - lib/bio-ipcress.rb
108
+ - lib/bio/appl/ipcress.rb
109
+ - test/data/Ipcress/Methanocella_conradii_16s.fa
110
+ - test/data/Ipcress/Methanocella_conradii_16s_2_sequences.fa
111
+ - test/data/Ipcress/Methanocella_conradii_16s_twice.fa
112
+ - test/data/Ipcress/input1.txt
113
+ - test/data/Ipcress/input1_with_insert.txt
114
+ - test/data/Ipcress/input2.txt
115
+ - test/helper.rb
116
+ - test/test_bio-ipcress.rb
117
+ homepage: http://github.com/wwood/bioruby-ipcress
118
+ licenses:
119
+ - MIT
120
+ post_install_message:
121
+ rdoc_options: []
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ segments:
131
+ - 0
132
+ hash: 237777805
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ none: false
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ requirements: []
140
+ rubyforge_project:
141
+ rubygems_version: 1.8.17
142
+ signing_key:
143
+ specification_version: 3
144
+ summary: a programmatic interface to the iPCRess in-silico PCR software
145
+ test_files: []