bio-ipcress 0.0.1
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/.document +5 -0
- data/.travis.yml +12 -0
- data/Gemfile +16 -0
- data/LICENSE.txt +20 -0
- data/README.md +112 -0
- data/Rakefile +45 -0
- data/VERSION +1 -0
- data/lib/bio-ipcress.rb +3 -0
- data/lib/bio/appl/ipcress.rb +180 -0
- data/test/data/Ipcress/Methanocella_conradii_16s.fa +22 -0
- data/test/data/Ipcress/Methanocella_conradii_16s_2_sequences.fa +44 -0
- data/test/data/Ipcress/Methanocella_conradii_16s_twice.fa +43 -0
- data/test/data/Ipcress/input1.txt +1 -0
- data/test/data/Ipcress/input1_with_insert.txt +1 -0
- data/test/data/Ipcress/input2.txt +2 -0
- data/test/helper.rb +21 -0
- data/test/test_bio-ipcress.rb +178 -0
- metadata +145 -0
data/.document
ADDED
data/.travis.yml
ADDED
@@ -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
|
data/LICENSE.txt
ADDED
@@ -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.
|
data/README.md
ADDED
@@ -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
|
+
|
data/Rakefile
ADDED
@@ -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
|
data/lib/bio-ipcress.rb
ADDED
@@ -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
|
data/test/helper.rb
ADDED
@@ -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: []
|