bio-ipcress 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|