genevalidator 1.6.12 → 2.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +30 -1
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +13 -12
  5. data/Gemfile +4 -1
  6. data/Gemfile.lock +135 -0
  7. data/README.md +104 -122
  8. data/Rakefile +377 -5
  9. data/aux/gv_results.slim +155 -0
  10. data/aux/html_files/css/gv.compiled.min.css +8 -0
  11. data/aux/{files → html_files}/css/src/bootstrap.min.css +0 -0
  12. data/aux/{files → html_files}/css/src/font-awesome.min.css +0 -0
  13. data/aux/{files → html_files}/css/src/style.css +0 -0
  14. data/aux/{files → html_files}/fonts/FontAwesome.otf +0 -0
  15. data/aux/{files → html_files}/fonts/fontawesome-webfont.eot +0 -0
  16. data/aux/{files → html_files}/fonts/fontawesome-webfont.svg +0 -0
  17. data/aux/{files → html_files}/fonts/fontawesome-webfont.ttf +0 -0
  18. data/aux/{files → html_files}/fonts/fontawesome-webfont.woff +0 -0
  19. data/aux/{files → html_files}/img/gene.png +0 -0
  20. data/aux/html_files/js/gv.compiled.min.js +1 -0
  21. data/aux/{files → html_files}/js/src/bootstrap.min.js +0 -0
  22. data/aux/{files → html_files}/js/src/d3.v3.min.js +0 -0
  23. data/aux/{files → html_files}/js/src/jquery-2.1.1.min.js +0 -0
  24. data/aux/{files → html_files}/js/src/jquery.tablesorter.min.js +0 -0
  25. data/aux/{files → html_files}/js/src/plots.js +1 -1
  26. data/aux/{files → html_files}/js/src/script.js +0 -0
  27. data/aux/{files → html_files}/json/.gitkeep +0 -0
  28. data/bin/genevalidator +393 -56
  29. data/exemplar_data/README.md +60 -0
  30. data/{data/mrna_data.fasta → exemplar_data/mrna_data.fa} +1 -1
  31. data/{data/protein_data.fasta → exemplar_data/protein_data.fa} +0 -0
  32. data/genevalidator.gemspec +35 -20
  33. data/install.sh +92 -0
  34. data/lib/genevalidator.rb +171 -56
  35. data/lib/genevalidator/arg_validation.rb +26 -55
  36. data/lib/genevalidator/blast.rb +44 -99
  37. data/lib/genevalidator/clusterization.rb +18 -22
  38. data/lib/genevalidator/exceptions.rb +17 -17
  39. data/lib/genevalidator/ext/array.rb +21 -4
  40. data/lib/genevalidator/get_raw_sequences.rb +32 -31
  41. data/lib/genevalidator/hsp.rb +31 -2
  42. data/lib/genevalidator/json_to_gv_results.rb +38 -122
  43. data/lib/genevalidator/output.rb +158 -172
  44. data/lib/genevalidator/output_files.rb +134 -0
  45. data/lib/genevalidator/pool.rb +2 -5
  46. data/lib/genevalidator/query.rb +1 -1
  47. data/lib/genevalidator/tabular_parser.rb +8 -29
  48. data/lib/genevalidator/validation.rb +48 -90
  49. data/lib/genevalidator/validation_alignment.rb +64 -75
  50. data/lib/genevalidator/validation_blast_reading_frame.rb +13 -9
  51. data/lib/genevalidator/validation_duplication.rb +85 -84
  52. data/lib/genevalidator/validation_gene_merge.rb +46 -35
  53. data/lib/genevalidator/validation_length_cluster.rb +18 -15
  54. data/lib/genevalidator/validation_length_rank.rb +19 -15
  55. data/lib/genevalidator/validation_maker_qi.rb +13 -12
  56. data/lib/genevalidator/validation_open_reading_frame.rb +16 -13
  57. data/lib/genevalidator/validation_report.rb +1 -1
  58. data/lib/genevalidator/validation_test.rb +1 -1
  59. data/lib/genevalidator/version.rb +1 -1
  60. data/test/overall.rb +1 -1
  61. data/test/test_all_validations.rb +36 -24
  62. data/test/test_blast.rb +39 -24
  63. data/test/test_clusterization_2d.rb +4 -4
  64. data/test/test_helper.rb +2 -2
  65. data/test/test_query.rb +16 -20
  66. data/test/test_validation_open_reading_frame.rb +122 -122
  67. data/test/test_validations.rb +12 -10
  68. metadata +94 -79
  69. data/aux/files/css/genevalidator.compiled.min.css +0 -16
  70. data/aux/files/js/genevalidator.compiled.min.js +0 -28
  71. data/aux/json_footer.erb +0 -8
  72. data/aux/json_header.erb +0 -19
  73. data/aux/json_query.erb +0 -15
  74. data/aux/template_footer.erb +0 -8
  75. data/aux/template_header.erb +0 -19
  76. data/aux/template_query.erb +0 -14
  77. data/data/README.md +0 -57
  78. data/data/mrna_data.fasta.blast_tabular +0 -3567
  79. data/data/mrna_data.fasta.blast_tabular.raw_seq +0 -53998
  80. data/data/mrna_data.fasta.blast_tabular.raw_seq.idx +0 -5440
  81. data/data/mrna_data.fasta.blast_xml +0 -39800
  82. data/data/mrna_data.fasta.blast_xml.raw_seq +0 -2554
  83. data/data/mrna_data.fasta.blast_xml.raw_seq.idx +0 -3127
  84. data/data/mrna_data.fasta.json +0 -1
  85. data/data/protein_data.fasta.blast_tabular +0 -3278
  86. data/data/protein_data.fasta.blast_tabular.raw_seq +0 -61295
  87. data/data/protein_data.fasta.blast_tabular.raw_seq.idx +0 -4438
  88. data/data/protein_data.fasta.blast_xml +0 -26228
  89. data/data/protein_data.fasta.blast_xml.raw_seq +0 -9803
  90. data/data/protein_data.fasta.blast_xml.raw_seq.idx +0 -1777
  91. data/data/protein_data.fasta.json +0 -1
@@ -38,14 +38,16 @@ module GeneValidator
38
38
  file_mrna.puts(query_mrna)
39
39
  file_mrna.close
40
40
 
41
- FileUtils.rm_rf("#{filename_mrna}.html") rescue Errno::ENOENT
42
-
43
41
  default_opt = {
44
42
  input_fasta_file: filename_mrna,
45
43
  validations: ['all'],
46
44
  db: 'swissprot -remote',
47
45
  num_threads: 1,
48
- test: true
46
+ min_blast_hits: 5,
47
+ test: true,
48
+ force_rewrite: true,
49
+ output_formats: %w[html csv json stdout],
50
+ output_dir: "#{filename_mrna}.html"
49
51
  }
50
52
 
51
53
  GeneValidator.init(default_opt)
@@ -72,14 +74,16 @@ module GeneValidator
72
74
  file_prot.puts(query_prot)
73
75
  file_prot.close
74
76
 
75
- FileUtils.rm_rf("#{filename_prot}.html") rescue Errno::ENOENT
76
-
77
77
  default_opt = {
78
78
  input_fasta_file: filename_prot,
79
79
  validations: ['all'],
80
80
  db: 'swissprot -remote',
81
81
  num_threads: 1,
82
- test: true
82
+ min_blast_hits: 5,
83
+ test: true,
84
+ force_rewrite: true,
85
+ output_formats: %w[html csv json stdout],
86
+ output_dir: "#{filename_prot}.html"
83
87
  }
84
88
 
85
89
  GeneValidator.init(default_opt)
@@ -95,14 +99,16 @@ module GeneValidator
95
99
  original_stderr = $stderr
96
100
  $stderr.reopen('/dev/null', 'w')
97
101
 
98
- FileUtils.rm_rf("#{filename_prot}.html") rescue Errno::ENOENT
99
-
100
102
  default_opt = {
101
103
  input_fasta_file: mixed_fasta,
102
104
  validations: ['all'],
103
105
  db: 'swissprot -remote',
104
106
  num_threads: 1,
105
- test: true
107
+ min_blast_hits: 5,
108
+ test: true,
109
+ force_rewrite: true,
110
+ output_formats: %w[html csv json stdout],
111
+ output_dir: "#{mixed_fasta}.html"
106
112
  }
107
113
 
108
114
  GeneValidator.init(default_opt)
@@ -115,8 +121,9 @@ module GeneValidator
115
121
 
116
122
  it 'should parse xml input' do
117
123
  output = File.open(filename_prot_xml, 'rb').read
124
+ GeneValidator.config = { type: :protein }
118
125
  iterator = Bio::BlastXMLParser::NokogiriBlastXml.new(output).to_enum
119
- hits = BlastUtils.parse_next(iterator, :protein)
126
+ hits = BlastUtils.parse_next(iterator)
120
127
  assert_equal(500, hits.length)
121
128
  assert_equal(870, hits[19].length_protein)
122
129
  assert_equal('XP_004524940', hits[19].accession_no)
@@ -136,13 +143,13 @@ module GeneValidator
136
143
  assert_equal(20, hits.length)
137
144
  assert_equal(1, hits[0].hsp_list.length)
138
145
  assert_equal(111, hits[0].hsp_list[0].hit_to)
139
- assert(hits[0].hsp_list[0].hit_from.is_a? Fixnum)
146
+ assert(hits[0].hsp_list[0].hit_from.is_a?(Integer))
140
147
 
141
148
  assert_equal(100, hits[0].hsp_list[0].pidentity)
142
- assert(hits[0].hsp_list[0].pidentity.is_a? Float)
149
+ assert(hits[0].hsp_list[0].pidentity.is_a?(Float))
143
150
 
144
151
  assert_equal(2.0e-44, hits[0].hsp_list[0].hsp_evalue)
145
- assert(hits[0].hsp_list[0].hsp_evalue.is_a? Float)
152
+ assert(hits[0].hsp_list[0].hsp_evalue.is_a?(Float))
146
153
  end
147
154
 
148
155
  it 'should parse tabular -6 input with tabular format as argument' do
@@ -191,14 +198,16 @@ module GeneValidator
191
198
  end
192
199
 
193
200
  it 'should remove identical matches (protein sequences)' do
194
- FileUtils.rm_rf("#{filename_fasta}.html") rescue Errno::ENOENT
195
-
196
201
  default_opt = {
197
202
  input_fasta_file: filename_fasta,
198
203
  validations: ['all'],
199
204
  db: 'swissprot -remote',
200
205
  num_threads: 1,
201
- test: true
206
+ min_blast_hits: 5,
207
+ test: true,
208
+ force_rewrite: true,
209
+ output_formats: %w[html csv json stdout],
210
+ output_dir: "#{filename_fasta}.html"
202
211
  }
203
212
 
204
213
  GeneValidator.init(default_opt)
@@ -230,14 +239,16 @@ module GeneValidator
230
239
  end
231
240
 
232
241
  it 'should remove identical matches (nucleotide seqs) - tabular input' do
233
- FileUtils.rm_rf("#{filename_fasta}.html") rescue Errno::ENOENT
234
-
235
242
  default_opt = {
236
243
  input_fasta_file: filename_fasta,
237
244
  validations: ['all'],
238
245
  db: 'swissprot -remote',
239
246
  num_threads: 1,
240
- test: true
247
+ min_blast_hits: 5,
248
+ test: true,
249
+ force_rewrite: true,
250
+ output_formats: %w[html csv json stdout],
251
+ output_dir: "#{filename_fasta}.html"
241
252
  }
242
253
 
243
254
  GeneValidator.init(default_opt)
@@ -263,24 +274,27 @@ module GeneValidator
263
274
  end
264
275
 
265
276
  it 'should remove identical matches (nucleotide seqs) - xml input' do
266
- FileUtils.rm_rf("#{filename_fasta}.html") rescue Errno::ENOENT
267
-
268
277
  # just use a valid opts hash to create the object
269
278
  default_opt = {
270
279
  input_fasta_file: filename_fasta,
271
280
  validations: ['all'],
272
281
  db: 'swissprot -remote',
273
282
  num_threads: 1,
274
- test: true
283
+ min_blast_hits: 5,
284
+ test: true,
285
+ force_rewrite: true,
286
+ output_formats: %w[html csv json stdout],
287
+ output_dir: "#{filename_fasta}.html"
275
288
  }
276
289
 
277
290
  GeneValidator.init(default_opt)
291
+ GeneValidator.config = { type: :protein }
278
292
 
279
293
  prediction = Query.new
280
294
  prediction.length_protein = 219 / 3
281
295
  output = File.open(ncbi_mrna_xml20, 'rb').read
282
296
  iterator = Bio::BlastXMLParser::NokogiriBlastXml.new(output).to_enum
283
- hits = BlastUtils.parse_next(iterator, :protein)
297
+ hits = BlastUtils.parse_next(iterator)
284
298
 
285
299
  assert_equal(20, hits.length)
286
300
 
@@ -300,11 +314,12 @@ module GeneValidator
300
314
  validations: ['all'],
301
315
  db: 'swissprot -remote',
302
316
  num_threads: 1,
317
+ min_blast_hits: 5,
318
+ output_formats: %w[html csv json stdout],
303
319
  test: true
304
320
  }
305
321
 
306
322
  GeneValidator.init(default_opt)
307
-
308
323
  rescue SystemExit
309
324
  error = true
310
325
  end
@@ -29,12 +29,12 @@ module GeneValidator
29
29
  hc = HierarchicalClusterization.new(vec3)
30
30
  clusters = hc.hierarchical_clusterization_2d(2, 1)
31
31
  actual = clusters[0].objects.map { |elem| elem[0] }
32
- .sort { |a, b| a.x <=> b.x }
33
- .sort { |a, b| a.y <=> b.y }
32
+ .sort_by(&:x)
33
+ .sort_by(&:y)
34
34
  ex_array = [Pair.new(1, 1), Pair.new(1.2, 1), Pair.new(1, 1.5),
35
35
  Pair.new(1.1, 1.3), Pair.new(0.9, 0.9)]
36
- expected = ex_array.sort { |a, b| a.x <=> b.x }
37
- .sort { |a, b| a.y <=> b.y }
36
+ expected = ex_array.sort_by(&:x)
37
+ .sort_by(&:y)
38
38
  assert_equal(expected, actual)
39
39
  end
40
40
  end
@@ -1,2 +1,2 @@
1
- require 'codeclimate-test-reporter'
2
- CodeClimate::TestReporter.start
1
+ require 'simplecov'
2
+ SimpleCov.start
@@ -23,14 +23,10 @@ module GeneValidator
23
23
  assert_equal(identifier, seq.identifier)
24
24
  assert_equal(accession_no, seq.accession_no)
25
25
  assert_equal(slen, seq.length_protein)
26
- assert(seq.length_protein.is_a? Fixnum)
26
+ assert(seq.length_protein.is_a?(Integer))
27
27
  end
28
28
 
29
29
  it 'should initialize hsp tabular attributes' do
30
- qseqid = 'sp|Q8GBW6|12S_PROFR'
31
- sseqid = 'sp|A5GSN7|ACCD_SYNR3'
32
- sacc = 'A5GSN7'
33
- slen = '291'
34
30
  qstart = '49'
35
31
  qend = '217'
36
32
  sstart = '65'
@@ -43,10 +39,10 @@ module GeneValidator
43
39
  qseq = 'ERLNNLLDPHSFDEVG---------'
44
40
  sseq = 'ERLRILLDPGSFIPVDGELSPTDPL'
45
41
 
46
- hash = { 'qseqid' => qseqid,
47
- 'sseqid' => sseqid,
48
- 'sacc' => sacc,
49
- 'slen' => slen,
42
+ hash = { 'qseqid' => 'sp|Q8GBW6|12S_PROFR',
43
+ 'sseqid' => 'sp|A5GSN7|ACCD_SYNR3',
44
+ 'sacc' => 'A5GSN7',
45
+ 'slen' => '291',
50
46
  'qstart' => qstart,
51
47
  'qend' => qend,
52
48
  'sstart' => sstart,
@@ -74,17 +70,17 @@ module GeneValidator
74
70
  assert_equal(nident, seq.identity.to_s)
75
71
  assert_equal(evalue, seq.hsp_evalue.to_s)
76
72
 
77
- assert(seq.match_query_from.is_a? Fixnum)
78
- assert(seq.match_query_to.is_a? Fixnum)
79
- assert(seq.query_reading_frame.is_a? Fixnum)
80
- assert(seq.hit_from.is_a? Fixnum)
81
- assert(seq.hit_to.is_a? Fixnum)
82
- assert(seq.query_alignment.is_a? String)
83
- assert(seq.hit_alignment.is_a? String)
84
- assert(seq.align_len.is_a? Fixnum)
85
- assert(seq.pidentity.is_a? Float)
86
- assert(seq.identity.is_a? Float)
87
- assert(seq.hsp_evalue.is_a? Float)
73
+ assert(seq.match_query_from.is_a?(Integer))
74
+ assert(seq.match_query_to.is_a?(Integer))
75
+ assert(seq.query_reading_frame.is_a?(Integer))
76
+ assert(seq.hit_from.is_a?(Integer))
77
+ assert(seq.hit_to.is_a?(Integer))
78
+ assert(seq.query_alignment.is_a?(String))
79
+ assert(seq.hit_alignment.is_a?(String))
80
+ assert(seq.align_len.is_a?(Integer))
81
+ assert(seq.pidentity.is_a?(Float))
82
+ assert(seq.identity.is_a?(Float))
83
+ assert(seq.hsp_evalue.is_a?(Float))
88
84
  end
89
85
  end
90
86
  end
@@ -223,128 +223,128 @@ module GeneValidator
223
223
 
224
224
  validation = OpenReadingFrameValidation.new(prediction, nil)
225
225
  result =
226
- { 1 => { frame: 1, orf_start: 1, orf_end: 20, coverage: 4,
227
- translated_length: 1003 },
228
- 2 => { frame: 1, orf_start: 62, orf_end: 143, coverage: 10,
229
- translated_length: 1003 },
230
- 3 => { frame: 1, orf_start: 165, orf_end: 187, coverage: 5,
231
- translated_length: 1003 },
232
- 4 => { frame: 1, orf_start: 244, orf_end: 277, coverage: 6,
233
- translated_length: 1003 },
234
- 5 => { frame: 1, orf_start: 383, orf_end: 393, coverage: 4,
235
- translated_length: 1003 },
236
- 6 => { frame: 1, orf_start: 415, orf_end: 443, coverage: 5,
237
- translated_length: 1003 },
238
- 7 => { frame: 1, orf_start: 477, orf_end: 510, coverage: 6,
239
- translated_length: 1003 },
240
- 8 => { frame: 1, orf_start: 640, orf_end: 706, coverage: 9,
241
- translated_length: 1003 },
242
- 9 => { frame: 1, orf_start: 728, orf_end: 757, coverage: 5,
243
- translated_length: 1003 },
244
- 10 => { frame: 1, orf_start: 786, orf_end: 813, coverage: 5,
245
- translated_length: 1003 },
246
- 11 => { frame: 2, orf_start: 24, orf_end: 41, coverage: 4,
247
- translated_length: 1003 },
248
- 12 => { frame: 2, orf_start: 115, orf_end: 129, coverage: 4,
249
- translated_length: 1003 },
250
- 13 => { frame: 2, orf_start: 151, orf_end: 161, coverage: 4,
251
- translated_length: 1003 },
252
- 14 => { frame: 2, orf_start: 290, orf_end: 305, coverage: 4,
253
- translated_length: 1003 },
254
- 15 => { frame: 2, orf_start: 327, orf_end: 339, coverage: 4,
255
- translated_length: 1003 },
256
- 16 => { frame: 2, orf_start: 391, orf_end: 417, coverage: 5,
257
- translated_length: 1003 },
258
- 17 => { frame: 2, orf_start: 439, orf_end: 479, coverage: 6,
259
- translated_length: 1003 },
260
- 18 => { frame: 2, orf_start: 501, orf_end: 557, coverage: 8,
261
- translated_length: 1003 },
262
- 19 => { frame: 2, orf_start: 660, orf_end: 678, coverage: 4,
263
- translated_length: 1003 },
264
- 20 => { frame: 2, orf_start: 711, orf_end: 739, coverage: 5,
265
- translated_length: 1003 },
266
- 21 => { frame: 2, orf_start: 800, orf_end: 809, coverage: 3,
267
- translated_length: 1003 },
268
- 22 => { frame: 2, orf_start: 832, orf_end: 841, coverage: 3,
269
- translated_length: 1003 },
270
- 23 => { frame: 2, orf_start: 943, orf_end: 957, coverage: 4,
271
- translated_length: 1003 },
272
- 24 => { frame: 2, orf_start: 979, orf_end: 1003, coverage: 5,
273
- translated_length: 1003 },
274
- 25 => { frame: 3, orf_start: 1, orf_end: 720, coverage: 73,
275
- translated_length: 1003 },
276
- 26 => { frame: 3, orf_start: 749, orf_end: 773, coverage: 5,
277
- translated_length: 1003 },
278
- 27 => { frame: 3, orf_start: 842, orf_end: 869, coverage: 5,
279
- translated_length: 1003 },
280
- 28 => { frame: 3, orf_start: 891, orf_end: 904, coverage: 4,
281
- translated_length: 1003 },
282
- 29 => { frame: 3, orf_start: 982, orf_end: 1003, coverage: 5,
283
- translated_length: 1003 },
284
- 30 => { frame: -1, orf_start: 69, orf_end: 81, coverage: 4,
285
- translated_length: 1003 },
286
- 31 => { frame: -1, orf_start: 106, orf_end: 115, coverage: 3,
287
- translated_length: 1003 },
288
- 32 => { frame: -1, orf_start: 178, orf_end: 219, coverage: 7,
289
- translated_length: 1003 },
290
- 33 => { frame: -1, orf_start: 299, orf_end: 391, coverage: 12,
291
- translated_length: 1003 },
292
- 34 => { frame: -1, orf_start: 436, orf_end: 447, coverage: 4,
293
- translated_length: 1003 },
294
- 35 => { frame: -1, orf_start: 469, orf_end: 540, coverage: 9,
295
- translated_length: 1003 },
296
- 36 => { frame: -1, orf_start: 562, orf_end: 575, coverage: 4,
297
- translated_length: 1003 },
298
- 37 => { frame: -1, orf_start: 597, orf_end: 617, coverage: 5,
299
- translated_length: 1003 },
300
- 38 => { frame: -1, orf_start: 639, orf_end: 655, coverage: 4,
301
- translated_length: 1003 },
302
- 39 => { frame: -1, orf_start: 728, orf_end: 818, coverage: 11,
303
- translated_length: 1003 },
304
- 40 => { frame: -1, orf_start: 863, orf_end: 885, coverage: 5,
305
- translated_length: 1003 },
306
- 41 => { frame: -1, orf_start: 950, orf_end: 963, coverage: 4,
307
- translated_length: 1003 },
308
- 42 => { frame: -1, orf_start: 985, orf_end: 1003, coverage: 4,
309
- translated_length: 1003 },
310
- 43 => { frame: -2, orf_start: 79, orf_end: 99, coverage: 5,
311
- translated_length: 1003 },
312
- 44 => { frame: -2, orf_start: 121, orf_end: 133, coverage: 4,
313
- translated_length: 1003 },
314
- 45 => { frame: -2, orf_start: 355, orf_end: 599, coverage: 26,
315
- translated_length: 1003 },
316
- 46 => { frame: -2, orf_start: 652, orf_end: 736, coverage: 11,
317
- translated_length: 1003 },
318
- 47 => { frame: -2, orf_start: 758, orf_end: 828, coverage: 9,
319
- translated_length: 1003 },
320
- 48 => { frame: -2, orf_start: 868, orf_end: 887, coverage: 4,
321
- translated_length: 1003 },
322
- 49 => { frame: -2, orf_start: 952, orf_end: 1003, coverage: 8,
323
- translated_length: 1003 },
324
- 50 => { frame: -3, orf_start: 1, orf_end: 18, coverage: 4,
325
- translated_length: 1003 },
326
- 51 => { frame: -3, orf_start: 90, orf_end: 100, coverage: 4,
327
- translated_length: 1003 },
328
- 52 => { frame: -3, orf_start: 208, orf_end: 220, coverage: 4,
329
- translated_length: 1003 },
330
- 53 => { frame: -3, orf_start: 279, orf_end: 347, coverage: 9,
331
- translated_length: 1003 },
332
- 54 => { frame: -3, orf_start: 369, orf_end: 382, coverage: 4,
333
- translated_length: 1003 },
334
- 55 => { frame: -3, orf_start: 461, orf_end: 511, coverage: 7,
335
- translated_length: 1003 },
336
- 56 => { frame: -3, orf_start: 533, orf_end: 542, coverage: 3,
337
- translated_length: 1003 },
338
- 57 => { frame: -3, orf_start: 635, orf_end: 708, coverage: 10,
339
- translated_length: 1003 },
340
- 58 => { frame: -3, orf_start: 768, orf_end: 801, coverage: 6,
341
- translated_length: 1003 },
342
- 59 => { frame: -3, orf_start: 830, orf_end: 875, coverage: 7,
343
- translated_length: 1003 },
344
- 60 => { frame: -3, orf_start: 933, orf_end: 945, coverage: 4,
345
- translated_length: 1003 },
346
- 61 => { frame: -3, orf_start: 967, orf_end: 980, coverage: 4,
347
- translated_length: 1003 } }
226
+ { 1 => { frame: 1, orf_start: 1, orf_end: 20, coverage: 4,
227
+ translated_length: 1003 },
228
+ 2 => { frame: 1, orf_start: 62, orf_end: 143, coverage: 10,
229
+ translated_length: 1003 },
230
+ 3 => { frame: 1, orf_start: 165, orf_end: 187, coverage: 5,
231
+ translated_length: 1003 },
232
+ 4 => { frame: 1, orf_start: 244, orf_end: 277, coverage: 6,
233
+ translated_length: 1003 },
234
+ 5 => { frame: 1, orf_start: 383, orf_end: 393, coverage: 4,
235
+ translated_length: 1003 },
236
+ 6 => { frame: 1, orf_start: 415, orf_end: 443, coverage: 5,
237
+ translated_length: 1003 },
238
+ 7 => { frame: 1, orf_start: 477, orf_end: 510, coverage: 6,
239
+ translated_length: 1003 },
240
+ 8 => { frame: 1, orf_start: 640, orf_end: 706, coverage: 9,
241
+ translated_length: 1003 },
242
+ 9 => { frame: 1, orf_start: 728, orf_end: 757, coverage: 5,
243
+ translated_length: 1003 },
244
+ 10 => { frame: 1, orf_start: 786, orf_end: 813, coverage: 5,
245
+ translated_length: 1003 },
246
+ 11 => { frame: 2, orf_start: 24, orf_end: 41, coverage: 4,
247
+ translated_length: 1003 },
248
+ 12 => { frame: 2, orf_start: 115, orf_end: 129, coverage: 4,
249
+ translated_length: 1003 },
250
+ 13 => { frame: 2, orf_start: 151, orf_end: 161, coverage: 4,
251
+ translated_length: 1003 },
252
+ 14 => { frame: 2, orf_start: 290, orf_end: 305, coverage: 4,
253
+ translated_length: 1003 },
254
+ 15 => { frame: 2, orf_start: 327, orf_end: 339, coverage: 4,
255
+ translated_length: 1003 },
256
+ 16 => { frame: 2, orf_start: 391, orf_end: 417, coverage: 5,
257
+ translated_length: 1003 },
258
+ 17 => { frame: 2, orf_start: 439, orf_end: 479, coverage: 6,
259
+ translated_length: 1003 },
260
+ 18 => { frame: 2, orf_start: 501, orf_end: 557, coverage: 8,
261
+ translated_length: 1003 },
262
+ 19 => { frame: 2, orf_start: 660, orf_end: 678, coverage: 4,
263
+ translated_length: 1003 },
264
+ 20 => { frame: 2, orf_start: 711, orf_end: 739, coverage: 5,
265
+ translated_length: 1003 },
266
+ 21 => { frame: 2, orf_start: 800, orf_end: 809, coverage: 3,
267
+ translated_length: 1003 },
268
+ 22 => { frame: 2, orf_start: 832, orf_end: 841, coverage: 3,
269
+ translated_length: 1003 },
270
+ 23 => { frame: 2, orf_start: 943, orf_end: 957, coverage: 4,
271
+ translated_length: 1003 },
272
+ 24 => { frame: 2, orf_start: 979, orf_end: 1003, coverage: 5,
273
+ translated_length: 1003 },
274
+ 25 => { frame: 3, orf_start: 1, orf_end: 720, coverage: 73,
275
+ translated_length: 1003 },
276
+ 26 => { frame: 3, orf_start: 749, orf_end: 773, coverage: 5,
277
+ translated_length: 1003 },
278
+ 27 => { frame: 3, orf_start: 842, orf_end: 869, coverage: 5,
279
+ translated_length: 1003 },
280
+ 28 => { frame: 3, orf_start: 891, orf_end: 904, coverage: 4,
281
+ translated_length: 1003 },
282
+ 29 => { frame: 3, orf_start: 982, orf_end: 1003, coverage: 5,
283
+ translated_length: 1003 },
284
+ 30 => { frame: -1, orf_start: 69, orf_end: 81, coverage: 4,
285
+ translated_length: 1003 },
286
+ 31 => { frame: -1, orf_start: 106, orf_end: 115, coverage: 3,
287
+ translated_length: 1003 },
288
+ 32 => { frame: -1, orf_start: 178, orf_end: 219, coverage: 7,
289
+ translated_length: 1003 },
290
+ 33 => { frame: -1, orf_start: 299, orf_end: 391, coverage: 12,
291
+ translated_length: 1003 },
292
+ 34 => { frame: -1, orf_start: 436, orf_end: 447, coverage: 4,
293
+ translated_length: 1003 },
294
+ 35 => { frame: -1, orf_start: 469, orf_end: 540, coverage: 9,
295
+ translated_length: 1003 },
296
+ 36 => { frame: -1, orf_start: 562, orf_end: 575, coverage: 4,
297
+ translated_length: 1003 },
298
+ 37 => { frame: -1, orf_start: 597, orf_end: 617, coverage: 5,
299
+ translated_length: 1003 },
300
+ 38 => { frame: -1, orf_start: 639, orf_end: 655, coverage: 4,
301
+ translated_length: 1003 },
302
+ 39 => { frame: -1, orf_start: 728, orf_end: 818, coverage: 11,
303
+ translated_length: 1003 },
304
+ 40 => { frame: -1, orf_start: 863, orf_end: 885, coverage: 5,
305
+ translated_length: 1003 },
306
+ 41 => { frame: -1, orf_start: 950, orf_end: 963, coverage: 4,
307
+ translated_length: 1003 },
308
+ 42 => { frame: -1, orf_start: 985, orf_end: 1003, coverage: 4,
309
+ translated_length: 1003 },
310
+ 43 => { frame: -2, orf_start: 79, orf_end: 99, coverage: 5,
311
+ translated_length: 1003 },
312
+ 44 => { frame: -2, orf_start: 121, orf_end: 133, coverage: 4,
313
+ translated_length: 1003 },
314
+ 45 => { frame: -2, orf_start: 355, orf_end: 599, coverage: 26,
315
+ translated_length: 1003 },
316
+ 46 => { frame: -2, orf_start: 652, orf_end: 736, coverage: 11,
317
+ translated_length: 1003 },
318
+ 47 => { frame: -2, orf_start: 758, orf_end: 828, coverage: 9,
319
+ translated_length: 1003 },
320
+ 48 => { frame: -2, orf_start: 868, orf_end: 887, coverage: 4,
321
+ translated_length: 1003 },
322
+ 49 => { frame: -2, orf_start: 952, orf_end: 1003, coverage: 8,
323
+ translated_length: 1003 },
324
+ 50 => { frame: -3, orf_start: 1, orf_end: 18, coverage: 4,
325
+ translated_length: 1003 },
326
+ 51 => { frame: -3, orf_start: 90, orf_end: 100, coverage: 4,
327
+ translated_length: 1003 },
328
+ 52 => { frame: -3, orf_start: 208, orf_end: 220, coverage: 4,
329
+ translated_length: 1003 },
330
+ 53 => { frame: -3, orf_start: 279, orf_end: 347, coverage: 9,
331
+ translated_length: 1003 },
332
+ 54 => { frame: -3, orf_start: 369, orf_end: 382, coverage: 4,
333
+ translated_length: 1003 },
334
+ 55 => { frame: -3, orf_start: 461, orf_end: 511, coverage: 7,
335
+ translated_length: 1003 },
336
+ 56 => { frame: -3, orf_start: 533, orf_end: 542, coverage: 3,
337
+ translated_length: 1003 },
338
+ 57 => { frame: -3, orf_start: 635, orf_end: 708, coverage: 10,
339
+ translated_length: 1003 },
340
+ 58 => { frame: -3, orf_start: 768, orf_end: 801, coverage: 6,
341
+ translated_length: 1003 },
342
+ 59 => { frame: -3, orf_start: 830, orf_end: 875, coverage: 7,
343
+ translated_length: 1003 },
344
+ 60 => { frame: -3, orf_start: 933, orf_end: 945, coverage: 4,
345
+ translated_length: 1003 },
346
+ 61 => { frame: -3, orf_start: 967, orf_end: 980, coverage: 4,
347
+ translated_length: 1003 } }
348
348
  assert_equal(result, validation.get_orfs)
349
349
  end
350
350
  end