mspire 0.4.9 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. data/README +27 -17
  2. data/changelog.txt +31 -62
  3. data/lib/ms/calc.rb +32 -0
  4. data/lib/ms/data/interleaved.rb +60 -0
  5. data/lib/ms/data/lazy_io.rb +73 -0
  6. data/lib/ms/data/lazy_string.rb +15 -0
  7. data/lib/ms/data/simple.rb +59 -0
  8. data/lib/ms/data/transposed.rb +41 -0
  9. data/lib/ms/data.rb +57 -0
  10. data/lib/ms/format/format_error.rb +12 -0
  11. data/lib/ms/spectrum.rb +25 -384
  12. data/lib/ms/support/binary_search.rb +126 -0
  13. data/lib/ms.rb +10 -10
  14. metadata +38 -350
  15. data/INSTALL +0 -58
  16. data/README.rdoc +0 -18
  17. data/Rakefile +0 -330
  18. data/bin/aafreqs.rb +0 -23
  19. data/bin/bioworks2excel.rb +0 -14
  20. data/bin/bioworks_to_pepxml.rb +0 -148
  21. data/bin/bioworks_to_pepxml_gui.rb +0 -225
  22. data/bin/fasta_shaker.rb +0 -5
  23. data/bin/filter_and_validate.rb +0 -5
  24. data/bin/gi2annot.rb +0 -14
  25. data/bin/id_class_anal.rb +0 -112
  26. data/bin/id_precision.rb +0 -172
  27. data/bin/ms_to_lmat.rb +0 -67
  28. data/bin/pepproph_filter.rb +0 -16
  29. data/bin/prob_validate.rb +0 -6
  30. data/bin/protein_summary.rb +0 -6
  31. data/bin/protxml2prots_peps.rb +0 -32
  32. data/bin/raw_to_mzXML.rb +0 -55
  33. data/bin/run_percolator.rb +0 -122
  34. data/bin/sqt_group.rb +0 -26
  35. data/bin/srf_group.rb +0 -27
  36. data/bin/srf_to_sqt.rb +0 -40
  37. data/lib/align/chams.rb +0 -78
  38. data/lib/align.rb +0 -154
  39. data/lib/archive/targz.rb +0 -94
  40. data/lib/bsearch.rb +0 -120
  41. data/lib/core_extensions.rb +0 -16
  42. data/lib/fasta.rb +0 -626
  43. data/lib/gi.rb +0 -124
  44. data/lib/group_by.rb +0 -10
  45. data/lib/index_by.rb +0 -11
  46. data/lib/merge_deep.rb +0 -21
  47. data/lib/ms/converter/mzxml.rb +0 -77
  48. data/lib/ms/gradient_program.rb +0 -170
  49. data/lib/ms/msrun.rb +0 -244
  50. data/lib/ms/msrun_index.rb +0 -108
  51. data/lib/ms/parser/mzdata/axml.rb +0 -67
  52. data/lib/ms/parser/mzdata/dom.rb +0 -175
  53. data/lib/ms/parser/mzdata/libxml.rb +0 -7
  54. data/lib/ms/parser/mzdata.rb +0 -31
  55. data/lib/ms/parser/mzxml/axml.rb +0 -70
  56. data/lib/ms/parser/mzxml/dom.rb +0 -182
  57. data/lib/ms/parser/mzxml/hpricot.rb +0 -253
  58. data/lib/ms/parser/mzxml/libxml.rb +0 -19
  59. data/lib/ms/parser/mzxml/regexp.rb +0 -122
  60. data/lib/ms/parser/mzxml/rexml.rb +0 -72
  61. data/lib/ms/parser/mzxml/xmlparser.rb +0 -248
  62. data/lib/ms/parser/mzxml.rb +0 -282
  63. data/lib/ms/parser.rb +0 -108
  64. data/lib/ms/precursor.rb +0 -25
  65. data/lib/ms/scan.rb +0 -81
  66. data/lib/mspire.rb +0 -4
  67. data/lib/pi_zero.rb +0 -244
  68. data/lib/qvalue.rb +0 -161
  69. data/lib/roc.rb +0 -187
  70. data/lib/sample_enzyme.rb +0 -160
  71. data/lib/scan_i.rb +0 -21
  72. data/lib/spec_id/aa_freqs.rb +0 -170
  73. data/lib/spec_id/bioworks.rb +0 -497
  74. data/lib/spec_id/digestor.rb +0 -138
  75. data/lib/spec_id/mass.rb +0 -179
  76. data/lib/spec_id/parser/proph.rb +0 -335
  77. data/lib/spec_id/precision/filter/cmdline.rb +0 -218
  78. data/lib/spec_id/precision/filter/interactive.rb +0 -134
  79. data/lib/spec_id/precision/filter/output.rb +0 -148
  80. data/lib/spec_id/precision/filter.rb +0 -637
  81. data/lib/spec_id/precision/output.rb +0 -60
  82. data/lib/spec_id/precision/prob/cmdline.rb +0 -160
  83. data/lib/spec_id/precision/prob/output.rb +0 -94
  84. data/lib/spec_id/precision/prob.rb +0 -249
  85. data/lib/spec_id/proph/pep_summary.rb +0 -104
  86. data/lib/spec_id/proph/prot_summary.rb +0 -484
  87. data/lib/spec_id/proph.rb +0 -4
  88. data/lib/spec_id/protein_summary.rb +0 -489
  89. data/lib/spec_id/sequest/params.rb +0 -316
  90. data/lib/spec_id/sequest/pepxml.rb +0 -1458
  91. data/lib/spec_id/sequest.rb +0 -33
  92. data/lib/spec_id/sqt.rb +0 -349
  93. data/lib/spec_id/srf.rb +0 -973
  94. data/lib/spec_id.rb +0 -778
  95. data/lib/spec_id_xml.rb +0 -99
  96. data/lib/transmem/phobius.rb +0 -147
  97. data/lib/transmem/toppred.rb +0 -368
  98. data/lib/transmem.rb +0 -157
  99. data/lib/validator/aa.rb +0 -48
  100. data/lib/validator/aa_est.rb +0 -112
  101. data/lib/validator/background.rb +0 -77
  102. data/lib/validator/bias.rb +0 -95
  103. data/lib/validator/cmdline.rb +0 -431
  104. data/lib/validator/decoy.rb +0 -107
  105. data/lib/validator/digestion_based.rb +0 -70
  106. data/lib/validator/probability.rb +0 -51
  107. data/lib/validator/prot_from_pep.rb +0 -234
  108. data/lib/validator/q_value.rb +0 -32
  109. data/lib/validator/transmem.rb +0 -272
  110. data/lib/validator/true_pos.rb +0 -46
  111. data/lib/validator.rb +0 -197
  112. data/lib/xml.rb +0 -38
  113. data/lib/xml_style_parser.rb +0 -119
  114. data/lib/xmlparser_wrapper.rb +0 -19
  115. data/release_notes.txt +0 -2
  116. data/script/compile_and_plot_smriti_final.rb +0 -97
  117. data/script/create_little_pepxml.rb +0 -61
  118. data/script/degenerate_peptides.rb +0 -47
  119. data/script/estimate_fpr_by_cysteine.rb +0 -226
  120. data/script/extract_gradient_programs.rb +0 -56
  121. data/script/find_cysteine_background.rb +0 -137
  122. data/script/genuine_tps_and_probs.rb +0 -136
  123. data/script/get_apex_values_rexml.rb +0 -44
  124. data/script/histogram_probs.rb +0 -61
  125. data/script/mascot_fix_pepxml.rb +0 -123
  126. data/script/msvis.rb +0 -42
  127. data/script/mzXML2timeIndex.rb +0 -25
  128. data/script/peps_per_bin.rb +0 -67
  129. data/script/prep_dir.rb +0 -121
  130. data/script/simple_protein_digestion.rb +0 -27
  131. data/script/smriti_final_analysis.rb +0 -103
  132. data/script/sqt_to_meta.rb +0 -24
  133. data/script/top_hit_per_scan.rb +0 -67
  134. data/script/toppred_to_yaml.rb +0 -47
  135. data/script/tpp_installer.rb +0 -249
  136. data/specs/align_spec.rb +0 -79
  137. data/specs/bin/bioworks_to_pepxml_spec.rb +0 -79
  138. data/specs/bin/fasta_shaker_spec.rb +0 -259
  139. data/specs/bin/filter_and_validate__multiple_vals_helper.yaml +0 -199
  140. data/specs/bin/filter_and_validate_spec.rb +0 -180
  141. data/specs/bin/ms_to_lmat_spec.rb +0 -34
  142. data/specs/bin/prob_validate_spec.rb +0 -86
  143. data/specs/bin/protein_summary_spec.rb +0 -14
  144. data/specs/fasta_spec.rb +0 -354
  145. data/specs/gi_spec.rb +0 -22
  146. data/specs/load_bin_path.rb +0 -7
  147. data/specs/merge_deep_spec.rb +0 -13
  148. data/specs/ms/gradient_program_spec.rb +0 -77
  149. data/specs/ms/msrun_spec.rb +0 -498
  150. data/specs/ms/parser_spec.rb +0 -92
  151. data/specs/ms/spectrum_spec.rb +0 -87
  152. data/specs/pi_zero_spec.rb +0 -115
  153. data/specs/qvalue_spec.rb +0 -39
  154. data/specs/roc_spec.rb +0 -251
  155. data/specs/rspec_autotest.rb +0 -149
  156. data/specs/sample_enzyme_spec.rb +0 -126
  157. data/specs/spec_helper.rb +0 -135
  158. data/specs/spec_id/aa_freqs_spec.rb +0 -52
  159. data/specs/spec_id/bioworks_spec.rb +0 -148
  160. data/specs/spec_id/digestor_spec.rb +0 -75
  161. data/specs/spec_id/precision/filter/cmdline_spec.rb +0 -20
  162. data/specs/spec_id/precision/filter/output_spec.rb +0 -31
  163. data/specs/spec_id/precision/filter_spec.rb +0 -246
  164. data/specs/spec_id/precision/prob_spec.rb +0 -44
  165. data/specs/spec_id/precision/prob_spec_helper.rb +0 -0
  166. data/specs/spec_id/proph/pep_summary_spec.rb +0 -98
  167. data/specs/spec_id/proph/prot_summary_spec.rb +0 -128
  168. data/specs/spec_id/protein_summary_spec.rb +0 -189
  169. data/specs/spec_id/sequest/params_spec.rb +0 -68
  170. data/specs/spec_id/sequest/pepxml_spec.rb +0 -374
  171. data/specs/spec_id/sequest_spec.rb +0 -38
  172. data/specs/spec_id/sqt_spec.rb +0 -246
  173. data/specs/spec_id/srf_spec.rb +0 -172
  174. data/specs/spec_id/srf_spec_helper.rb +0 -139
  175. data/specs/spec_id_helper.rb +0 -33
  176. data/specs/spec_id_spec.rb +0 -366
  177. data/specs/spec_id_xml_spec.rb +0 -33
  178. data/specs/transmem/phobius_spec.rb +0 -425
  179. data/specs/transmem/toppred_spec.rb +0 -298
  180. data/specs/transmem_spec.rb +0 -60
  181. data/specs/transmem_spec_shared.rb +0 -64
  182. data/specs/validator/aa_est_spec.rb +0 -66
  183. data/specs/validator/aa_spec.rb +0 -40
  184. data/specs/validator/background_spec.rb +0 -67
  185. data/specs/validator/bias_spec.rb +0 -122
  186. data/specs/validator/decoy_spec.rb +0 -51
  187. data/specs/validator/fasta_helper.rb +0 -26
  188. data/specs/validator/prot_from_pep_spec.rb +0 -141
  189. data/specs/validator/transmem_spec.rb +0 -146
  190. data/specs/validator/true_pos_spec.rb +0 -58
  191. data/specs/validator_helper.rb +0 -33
  192. data/specs/xml_spec.rb +0 -12
  193. data/test_files/000_pepxml18_small.xml +0 -206
  194. data/test_files/020a.mzXML.timeIndex +0 -4710
  195. data/test_files/4-03-03_mzXML/000.mzXML.timeIndex +0 -3973
  196. data/test_files/4-03-03_mzXML/020.mzXML.timeIndex +0 -3872
  197. data/test_files/4-03-03_small-prot.xml +0 -321
  198. data/test_files/4-03-03_small.xml +0 -3876
  199. data/test_files/7MIX_STD_110802_1.sequest_params_fragment.srf +0 -0
  200. data/test_files/bioworks-3.3_10prots.xml +0 -5999
  201. data/test_files/bioworks31.params +0 -77
  202. data/test_files/bioworks32.params +0 -62
  203. data/test_files/bioworks33.params +0 -63
  204. data/test_files/bioworks_single_run_small.xml +0 -7237
  205. data/test_files/bioworks_small.fasta +0 -212
  206. data/test_files/bioworks_small.params +0 -63
  207. data/test_files/bioworks_small.phobius +0 -109
  208. data/test_files/bioworks_small.toppred.out +0 -2847
  209. data/test_files/bioworks_small.xml +0 -5610
  210. data/test_files/bioworks_with_INV_small.xml +0 -3753
  211. data/test_files/bioworks_with_SHUFF_small.xml +0 -2503
  212. data/test_files/corrupted_900.srf +0 -0
  213. data/test_files/head_of_7MIX.srf +0 -0
  214. data/test_files/interact-opd1_mods_small-prot.xml +0 -304
  215. data/test_files/messups.fasta +0 -297
  216. data/test_files/opd1/000.my_answer.100lines.xml +0 -101
  217. data/test_files/opd1/000.tpp_1.2.3.first10.xml +0 -115
  218. data/test_files/opd1/000.tpp_2.9.2.first10.xml +0 -126
  219. data/test_files/opd1/000.v2.1.mzXML.timeIndex +0 -3748
  220. data/test_files/opd1/000_020-prot.png +0 -0
  221. data/test_files/opd1/000_020_3prots-prot.mod_initprob.xml +0 -62
  222. data/test_files/opd1/000_020_3prots-prot.xml +0 -62
  223. data/test_files/opd1/opd1_cat_inv_small-prot.xml +0 -139
  224. data/test_files/opd1/sequest.3.1.params +0 -77
  225. data/test_files/opd1/sequest.3.2.params +0 -62
  226. data/test_files/opd1/twenty_scans.mzXML +0 -418
  227. data/test_files/opd1/twenty_scans.v2.1.mzXML +0 -382
  228. data/test_files/opd1/twenty_scans_answ.lmat +0 -0
  229. data/test_files/opd1/twenty_scans_answ.lmata +0 -9
  230. data/test_files/opd1_020_beginning.RAW +0 -0
  231. data/test_files/opd1_2runs_2mods/data/020.mzData.xml +0 -683
  232. data/test_files/opd1_2runs_2mods/data/020.readw.mzXML +0 -382
  233. data/test_files/opd1_2runs_2mods/data/040.mzData.xml +0 -683
  234. data/test_files/opd1_2runs_2mods/data/040.readw.mzXML +0 -382
  235. data/test_files/opd1_2runs_2mods/data/README.txt +0 -6
  236. data/test_files/opd1_2runs_2mods/interact-opd1_mods__small.xml +0 -753
  237. data/test_files/orbitrap_mzData/000_cut.xml +0 -1920
  238. data/test_files/pepproph_small.xml +0 -4691
  239. data/test_files/phobius.small.noheader.txt +0 -50
  240. data/test_files/phobius.small.small.txt +0 -53
  241. data/test_files/s01_anC1_ld020mM.key.txt +0 -25
  242. data/test_files/s01_anC1_ld020mM.meth +0 -0
  243. data/test_files/small.fasta +0 -297
  244. data/test_files/small.sqt +0 -87
  245. data/test_files/smallraw.RAW +0 -0
  246. data/test_files/tf_bioworks2excel.bioXML +0 -14340
  247. data/test_files/tf_bioworks2excel.txt.actual +0 -1035
  248. data/test_files/toppred.small.out +0 -416
  249. data/test_files/toppred.xml.out +0 -318
  250. data/test_files/validator_hits_separate/bias_bioworks_small_HS.fasta +0 -7
  251. data/test_files/validator_hits_separate/bioworks_small_HS.xml +0 -5651
  252. data/test_files/yeast_gly_small-prot.xml +0 -265
  253. data/test_files/yeast_gly_small.1.0_1.0_1.0.parentTimes +0 -6
  254. data/test_files/yeast_gly_small.xml +0 -3807
  255. data/test_files/yeast_gly_small2.parentTimes +0 -6
@@ -1,498 +0,0 @@
1
-
2
- require File.expand_path( File.dirname(__FILE__) + '/../spec_helper' )
3
- require 'ms/msrun'
4
- require 'ostruct'
5
- require 'fileutils'
6
- require 'ms/parser/mzxml'
7
-
8
- parsers = %w(AXML LibXML XMLParser Regexp REXML)
9
-
10
- XMLStyleParser::Parser_precedence.replace( %w(AXML) )
11
-
12
-
13
- shared_examples_for "an msrun with basic, non-spectral information" do
14
- it 'knows the type and version of file' do
15
- @run.filetype.should == @info.filetype
16
- @run.version.should == @info.version
17
- end
18
-
19
- it 'knows basic run information' do
20
- @run.scan_count.should == @info.scan_count
21
- @run.start_time.should == @info.start_time
22
- @run.end_time.should == @info.end_time
23
- end
24
-
25
- it 'has all scans' do
26
- @run.scans.size.should == @info.scan_count
27
- @run.scans.each_with_index do |sc,i|
28
- sc.class.should == MS::Scan
29
- end
30
- end
31
-
32
- it 'can determine scan counts for any mslevel' do
33
- @run.scan_counts.class.should == Array
34
- @run.scan_count(0).should == @info.scan_count0
35
- @run.scan_count(1).should == @info.scan_count1
36
- @run.scan_count(2).should == @info.scan_count2
37
- end
38
-
39
- it 'has correct first two scans and last scan' do
40
- [0,1,-1].each do |i|
41
- @info.scans[i].each do |k,v|
42
- testing = @run.scans[i].send(k)
43
- if k == :precursor
44
- testing.mz.should be_close(v.mz, 0.000001)
45
- if testing.intensity # intensity not guaranteed to exist!
46
- testing.intensity.should == v.intensity
47
- end
48
- else
49
- @run.scans[i].send(k).should == v
50
- end
51
- end
52
- end
53
- end
54
- end
55
-
56
- shared_examples_for "an msrun with spectrum" do
57
-
58
- it 'has all scans with spectrum data' do
59
- @run.scans.size.should == @info.scan_count
60
- @run.scans.each_with_index do |sc,i|
61
- sc.class.should == MS::Scan
62
- sc.spectrum.should have_mz_data
63
- sc.spectrum.should have_intensity_data
64
- end
65
- end
66
-
67
- it 'can determine start_and_end_mz' do
68
- @run.start_and_end_mz(1).should == @info.start_and_end_mz1
69
- @run.start_and_end_mz(2).should == @info.start_and_end_mz2
70
- end
71
-
72
- it_should_behave_like "an msrun with basic, non-spectral information"
73
- end
74
-
75
- # some xml formats have precursor intensities built in, some do not
76
- shared_examples_for "an msrun with precursor intensities" do
77
-
78
- it "has correct prec inten for first two scans and last scan" do
79
- [0,1,-1].each do |i|
80
- if i == 0
81
- @run.scans[i].precursor.should be_nil
82
- next
83
- end
84
- expected = @info.scans[i][:precursor]
85
- @run.scans[i].precursor.mz.should be_close(expected.mz, 0.000001)
86
- @run.scans[i].precursor.intensity.should == expected.intensity
87
- end
88
- end
89
-
90
- end
91
-
92
- shared_examples_for 'a basic scan info generator' do
93
-
94
- def check_table(table, answer)
95
- answer.each do |k,v|
96
- if v == nil
97
- table[k].should be_nil
98
- else
99
- table[k].should be_close(v, 0.000001)
100
- end
101
- end
102
- end
103
-
104
- it 'generates precursor_mz_by_scan_num lookup table' do
105
- ar = @run.precursor_mz_by_scan_num
106
- check_table(ar, @info.num_to_prec_mz_hash)
107
- end
108
-
109
- it 'class method -> precursor_mz_by_scan_num (with file)' do
110
- ar = @info.klass.precursor_mz_by_scan_num(@info.file)
111
- check_table(ar, @info.num_to_prec_mz_hash)
112
- end
113
- end
114
-
115
- MzXML_version_1_info = MyOpenStruct.new do |info|
116
- info.file = Tfiles_l + '/yeast_gly_mzXML/000.mzXML'
117
- info.klass = MS::MSRun
118
- info.filetype = :mzxml
119
- info.version = '1.0'
120
- info.scan_count = 3748
121
- #info.scan_counts = [3748, 937, nil] ## need to get ms2
122
- info.start_time = 0.44
123
- info.end_time = 5102.55
124
- info.num_to_prec_mz_hash = {
125
- 0 => nil,
126
- 1 => nil,
127
- 2 => 391.045410,
128
- 3 => 446.009033,
129
- 4 => 1222.033203,
130
- 5 => nil,
131
- 6 => 390.947449,
132
- 3744 => 338.779114,
133
- 3745 => nil,
134
- 3746 => 304.136597,
135
- 3748 => 433.564941,
136
- }
137
- info.scans = {}
138
-
139
- info.scans[0] = {
140
- :num => 1,
141
- :ms_level => 1,
142
- :time => 0.440,
143
- }
144
- info.scans[1] = {
145
- :num => 2,
146
- :ms_level => 2,
147
- :time => 1.90,
148
- :precursor => MS::Precursor.new(:mz => 391.045410, :intensity => 6986078.0)
149
- }
150
- info.scans[-1] = {
151
- :num => 3748,
152
- :ms_level => 2,
153
- :time => 5102.55,
154
- :precursor => MS::Precursor.new(:mz => 433.564941, :intensity => 481800.0)
155
- }
156
- info.scan_count0 = info.scan_count
157
- info.scan_count1 = 937
158
- info.scan_count2 = 2811
159
- info.start_and_end_mz1 = [300.0, 1500.0]
160
- info.start_and_end_mz2 = [0.0, 2000.0]
161
- end
162
-
163
- describe MS::MSRun, "on mzXML version 1 files (w/o spectra)" do
164
- spec_large do
165
- before(:all) do
166
- @info = MzXML_version_1_info
167
- start = Time.now
168
- @run = @info.klass.new(@info.file, :lazy => :no_spectra)
169
- puts "- read #{File.basename(@info.file)} in #{Time.now - start} seconds" if $specdoc
170
- end
171
- it_should_behave_like "an msrun with basic, non-spectral information"
172
- it_should_behave_like 'a basic scan info generator'
173
- end
174
- end
175
-
176
- describe MS::MSRun, "on mzXML version 1 files (w/spectra)" do
177
- spec_large do
178
- before(:all) do
179
- @info = MzXML_version_1_info
180
- start = Time.now
181
- @run = @info.klass.new(@info.file, :lazy => :not)
182
- puts "- read #{File.basename(@info.file)} in #{Time.now - start} seconds" if $specdoc
183
- end
184
-
185
- it_should_behave_like "an msrun with spectrum"
186
- it_should_behave_like "an msrun with precursor intensities"
187
- it_should_behave_like 'a basic scan info generator'
188
- end
189
- end
190
-
191
- MzXML_version_20_info = MyOpenStruct.new do |info|
192
- info.file = Tfiles + '/opd1_2runs_2mods/data/020.readw.mzXML'
193
- info.klass = MS::MSRun
194
- info.filetype = :mzxml
195
- info.version = '2.0'
196
- info.scan_count = 20
197
- #info.scan_counts = ??
198
- info.start_time = 0.13
199
- info.end_time = 27.31
200
- info.num_to_prec_mz_hash = {
201
- 0 => nil,
202
- 1 => nil,
203
- 2 => 390.9291992,
204
- 3 => 1121.944824,
205
- 4 => 1321.913574,
206
- 17 => nil,
207
- 18 => 308.795959,
208
- 19 => 444.983337,
209
- 20 => 361.671875,
210
- }
211
- info.scans = {}
212
- info.scans[0]= {
213
- :num => 1,
214
- :ms_level => 1,
215
- :time => 0.13,
216
- }
217
- info.scans[1] = {
218
- :num => 2,
219
- :ms_level => 2,
220
- :time => 1.49,
221
- :precursor => MS::Precursor.new(:mz => 390.9291992, :intensity => 8.14409e+006)
222
- }
223
- info.scans[-1] = {
224
- :num => 20,
225
- :ms_level => 2,
226
- :time => 27.31,
227
- :precursor => MS::Precursor.new(:mz => 361.671875, :intensity => 572148.0)
228
- }
229
- info.scan_count0 = info.scan_count
230
- info.scan_count1 = 5
231
- info.scan_count2 = 15
232
- info.start_and_end_mz1 = [300.0, 1499] # apparently nothing brushes right up to 1500
233
- # that first number on start_and_end_mz2 is a arbitrary as to accuracy...
234
- # I'm not sure the correct answer
235
- info.start_and_end_mz2 = [110.0, 1955] ## again, this is based on data
236
- end
237
-
238
- describe MS::MSRun, "on mzXML version 2.0 files (w/o spectra)" do
239
- before(:all) do
240
- @info = MzXML_version_20_info
241
- start = Time.now
242
- @run = @info.klass.new(@info.file, :lazy => :no_spectra)
243
- puts "- read #{File.basename(@info.file)} in #{Time.now - start} seconds" if $specdoc
244
- end
245
-
246
- #it_should_behave_like "an msrun with basic, non-spectral information"
247
- it_should_behave_like 'a basic scan info generator'
248
-
249
- it 'fixes bad scan tags on the fly!' do
250
- # if this test works, this is true
251
- end
252
- end
253
-
254
- shared_examples_for "an mzXML version 2.0 file (w/spectra)" do
255
- before(:all) do
256
- @info = MzXML_version_20_info
257
- # first fix the file of bad scan tags
258
- @info.file
259
- #start = Time.now
260
- @fh = File.open(@info.file)
261
- @run = @info.klass.new(@fh, :lazy => @lazy_type)
262
- #puts "- read #{File.basename(@new_file)} in #{Time.now - start} seconds" if $specdoc
263
- end
264
-
265
- after(:all) do
266
- # @fh.close # not sure why, but the filehandle is already closed!
267
- # Maybe because the filehandle went out of scope??
268
- end
269
-
270
- it_should_behave_like "an msrun with spectrum" # <- trouble
271
- it_should_behave_like 'a basic scan info generator'
272
- end
273
-
274
- #[:io, :string, :not].each do |lazy_type|
275
- [:io, :string, :not].each do |lazy_type|
276
- describe MS::MSRun, "mzXML v2.0 with :lazy => :#{lazy_type}" do
277
- before(:all) { @lazy_type = lazy_type}
278
- it_should_behave_like "an mzXML version 2.0 file (w/spectra)"
279
- end
280
-
281
- end
282
-
283
- Mzdata_105_info = MyOpenStruct.new do |info|
284
- info.file = Tfiles + '/opd1_2runs_2mods/data/020.mzData.xml'
285
- info.klass = MS::MSRun
286
- info.filetype = :mzdata
287
- info.version = '1.05'
288
- # NOTE that the real file drops the last scan!! giving a mismatch
289
- info.scan_count = 20
290
- info.start_time = 0.13002 # minutes == 0.00216667
291
- # This is the correct one!, but Thermo drops last scan
292
- # info.end_time = 5099.688 #84.9948
293
- #info.end_time = 84.968500*60 # 5098.11
294
- info.end_time = 0.455167 * 60
295
-
296
- info.num_to_prec_mz_hash = {
297
- 0 => nil,
298
- 1 => nil,
299
- 2 => 390.9291992,
300
- 3 => 1121.944824,
301
- 4 => 1321.913574,
302
- 17 => nil,
303
- 18 => 308.795959,
304
- 19 => 444.983337,
305
- 20 => 361.671875,
306
- # 3620 => 357.0411987, Bioworks 3.3 is broken
307
- }
308
-
309
- info.scans = {}
310
- info.scans[0] = {
311
- :num => 1,
312
- :ms_level => 1,
313
- :time => 0.13002, # a little rounding error coming from minutes
314
- }
315
- info.scans[1] = {
316
- :num => 2,
317
- :ms_level => 2,
318
- :time => 0.024833 * 60, # 1.48998
319
- :precursor => MS::Precursor.new( :mz => 390.9291992, :intensity => 8.144094e+006),
320
- }
321
- info.scans[-1] = {
322
- :num => 20,
323
- :ms_level => 2,
324
- #:time => 5099.69,
325
- #:time => 84.968500 * 60, # 5098.11
326
- :time => 0.455167 * 60,
327
-
328
- :precursor => MS::Precursor.new( :mz => 361.671875, :intensity => 572148.0 ) # wrong
329
- }
330
- info.scan_count0 = info.scan_count
331
- info.scan_count1 = 5
332
- info.scan_count2 = 15 # should be 2715, they dropped the last scan!
333
- info.start_and_end_mz1 = [300.0, 1500.0]
334
- # This is the Correct one!!!, but Thermo drops last scan
335
- #info.start_and_end_mz2 = [112.0, 2000.0]
336
- info.start_and_end_mz2 = [95.0, 1955]
337
- end
338
-
339
- describe MS::MSRun, "on mzData version 1.05 files (Bioworks3.3) (w/o spectra)" do
340
- before(:all) do
341
- @info = Mzdata_105_info
342
- start = Time.now
343
- @run = @info.klass.new(@info.file, :lazy => :no_spectra)
344
- puts "- read #{File.basename(@info.file)} in #{Time.now - start} seconds" if $specdoc
345
- puts "- [NOTE] mzData files from Thermo are missing their last scan!" if $specdoc
346
- end
347
-
348
- it_should_behave_like "an msrun with basic, non-spectral information"
349
- it_should_behave_like 'a basic scan info generator'
350
-
351
- end
352
-
353
- shared_examples_for "mzData v1.05 (Bioworks3.3) (w/spectra)" do
354
- before(:all) do
355
- @info = Mzdata_105_info
356
- #start = Time.now
357
- @fh = File.open(@info.file)
358
- @run = @info.klass.new(@fh, :lazy => @lazy_type)
359
- #puts "- read #{File.basename(@info.file)} in #{Time.now - start} seconds" if $specdoc
360
- puts "- [NOTE] mzData files from Thermo are missing their last scan!" if $specdoc
361
- end
362
-
363
- it_should_behave_like "an msrun with spectrum"
364
- it_should_behave_like 'a basic scan info generator'
365
-
366
- it 'has (or can get) correct precursor intensities for all scans' do
367
- check_file = Tfiles + '/opd1_2runs_2mods/data/020.readw.mzXML'
368
- prec_inten_mzs = IO.readlines(check_file).grep(/precursorMz/).map do |line|
369
- if line =~ /Intensity="([\d\.e\+\-]+)">([\d\.e\+\-]+)</
370
- [$1.to_f, $2.to_f]
371
- else
372
- abort "didn't match for some crazy reason! (probably newline issues)"
373
- end
374
- end
375
-
376
- prec_mz_cnt = 0
377
- @run.scans.each_with_index do |scan,i|
378
- next if i % 4 == 0
379
- (exp_int, exp_mz) = prec_inten_mzs[prec_mz_cnt]
380
-
381
- precursor = scan.precursor
382
- precursor.mz.should be_close(exp_mz, 0.00001)
383
- prec_inten =
384
- if precursor.intensity.nil?
385
- precursor.parent.spectrum.intensity_at_mz(precursor.mz)
386
- else
387
- precursor.intensity
388
- end
389
- prec_inten.should be_close(exp_int, 51)
390
-
391
- prec_mz_cnt += 1
392
- end
393
- end
394
- end
395
-
396
- #[:string, :not, :io].each do |lazy_type|
397
- [:io].each do |lazy_type|
398
- describe MS::MSRun, "mzData v1.05 with :lazy => :#{lazy_type}" do
399
- before(:all) { @lazy_type = lazy_type}
400
- it_should_behave_like "mzData v1.05 (Bioworks3.3) (w/spectra)"
401
- end
402
- end
403
-
404
- describe 'reading a small file of twenty scans' do
405
- before(:all) do
406
- @file = Tfiles + "/opd1/twenty_scans.mzXML"
407
- end
408
-
409
- it 'retrieves times and spectra with all lazy types' do
410
- [:not, :string, :io].each do |lazy_type|
411
-
412
- File.open(@file) do |io|
413
- msrun = MS::MSRun.new(io, :lazy => lazy_type)
414
-
415
-
416
- (times, spectra) = msrun.times_and_spectra(1)
417
- etimes = %w(0.440000 5.150000 10.690000 16.400000 22.370000).map {|t| t.to_f }
418
- num_peaks = [992, 814, 796, 849, 813]
419
- tol = 0.000000001
420
- spectra[0].mzs[1].should be_close(301.430114746094, tol)
421
- spectra[0].intensities[1].should be_close(22192.0, tol)
422
- spectra[0].mzs[-1].should be_close(1499.09912109375, tol)
423
- spectra[0].intensities[-1].should be_close(111286.0, tol)
424
-
425
- spectra[-1].mzs[1].should be_close(301.243774414062, tol)
426
- spectra[-1].intensities[1].should be_close(77503.0, tol)
427
- spectra[-1].mzs[-1].should be_close(1499.42016601562, tol)
428
- spectra[-1].intensities[-1].should be_close(13.0, tol)
429
-
430
- num_peaks.each_with_index do |n,i|
431
- spectra[i].mzs.size.should == n
432
- end
433
- etimes.each_with_index do |t,i|
434
- times[i].should be_close(t, 0.00001)
435
- end
436
- end
437
- end
438
- end
439
- end
440
-
441
- describe MS::MSRun, 'with a small set of scans' do
442
- it 'can add parent scans' do
443
- vals = [
444
- [1,1,0.13],
445
- [2,2,0.23],
446
- [3,2,0.33],
447
- [4,3,0.43],
448
- [5,3,0.53],
449
- [6,1,0.63],
450
- [7,2,0.73],
451
- [8,3,0.83],
452
- [9,2,0.93]
453
- ]
454
- precs = (0..(vals.size)).to_a.map do |x|
455
- MS::Precursor.new([x,100])
456
- end
457
-
458
- scans = vals.zip(precs).map do |ar,prec|
459
- scan = MS::Scan.new(ar)
460
- scan.precursor = prec
461
- scan
462
- end
463
- scans.size.should == vals.size
464
- s = scans
465
- parents = [nil,s[0],s[0],s[2],s[2],nil,s[5],s[6],s[5]]
466
- MS::MSRun.add_parent_scan(scans)
467
- scans.each_with_index do |scan,i|
468
- scan.precursor.parent.should == parents[i]
469
- end
470
- end
471
- end
472
-
473
- =begin
474
- ###################################################
475
- # SHOULD IMPLEMENT BASIC INFO FOR ALL FILE TYPES
476
- ###################################################
477
-
478
- require 'test/unit'
479
- require 'ms/mzxml/parser'
480
-
481
- class MSMzXML < Test::Unit::TestCase
482
- def initialize(arg)
483
- super(arg)
484
- @tfiles = File.dirname(__FILE__) + '/tfiles/'
485
- @tscans = @tfiles + "opd1/twenty_scans.mzXML"
486
- @big_file = "../bioworks2prophet/xml/opd00001_test_set/opd00001_prophprepped/000.mzXML"
487
- end
488
-
489
- def test_basic_info
490
- hash = MS::MzXML::Parser.new.basic_info(@tscans)
491
- assert_equal({:scan_count=>[20, 5, 15], :start_time=>0.44, :end_time=>27.05, :start_mz=>300.0, :end_mz=>1500.0, :ms_level=>1}, hash, "basic info the same")
492
- end
493
-
494
- end
495
-
496
- =end
497
-
498
-
@@ -1,92 +0,0 @@
1
-
2
- require File.expand_path( File.dirname(__FILE__) + '/../spec_helper' )
3
- require 'ms/parser'
4
-
5
- describe "a MS::Parser on a file", :shared => true do
6
- it 'finds filetype and version on file and handle' do
7
- ft_version = nil
8
- File.open(@file) do |fh|
9
- ft_version = MS::Parser.filetype_and_version(fh)
10
- end
11
- ft_version.should == @filetype_version
12
- ft_version = MS::Parser.filetype_and_version(@file)
13
- ft_version.should == @filetype_version
14
- end
15
-
16
- it 'creates a sub-classed parser responding to "msrun"' do
17
- parser = MS::Parser.new(@file, :msrun)
18
- parser.class.to_s.should match(/^MS::Parser::/)
19
- parser.class.to_s.should match(Regexp.new(Regexp.escape(@subclass)))
20
- parser.respond_to?(:msrun).should be_true
21
- end
22
-
23
- ########################################################################
24
- # NOTE: methods to verify parsing of information should be defined where
25
- # that information is required.
26
- # e.g. msrun_spec.rb will verify that msrun objects are created properly.
27
- # this is because we don't care how we get that file, just that we get it.
28
- # The whole process of parsing a file should be transparent to users.
29
- ########################################################################
30
-
31
- end
32
-
33
- describe MS::Parser, "on a RAW file (Xcalibur 1.3 SP 1)" do
34
- spec_large do
35
- before(:all) do
36
- @filetype = :raw
37
- @version = nil
38
- @filetype_version = [@filetype, @version]
39
- @file = Tfiles_large + '/opd1_2runs_2mods/data/020.RAW'
40
- end
41
-
42
- it 'finds filetype (NO version yet!) on file and handle' do
43
- ft_version = nil
44
- File.open(@file) do |fh|
45
- ft_version = MS::Parser.filetype_and_version(fh)
46
- end
47
- ft_version.should == @filetype_version
48
- ft_version = MS::Parser.filetype_and_version(@file)
49
- ft_version.should == @filetype_version
50
- end
51
- end
52
- end
53
-
54
- describe MS::Parser, "on an mzXML version 1 file" do
55
- spec_large do
56
- before(:all) do
57
- @filetype = :mzxml
58
- @version = '1.0'
59
- @filetype_version = [@filetype, @version]
60
- @subclass = 'MS::Parser::MzXML'
61
- @file = Tfiles_large + '/yeast_gly_mzXML/000.mzXML'
62
- end
63
- it_should_behave_like "a MS::Parser on a file"
64
- end
65
- end
66
-
67
- describe MS::Parser, "on an mzXML version 2 file" do
68
- spec_large do
69
- before(:all) do
70
- @filetype = :mzxml
71
- @version = '2.0'
72
- @filetype_version = [@filetype, @version]
73
- @subclass = 'MS::Parser::MzXML'
74
- @file = Tfiles + '/opd1_2runs_2mods/data/020.readw.mzXML'
75
- end
76
- it_should_behave_like "a MS::Parser on a file"
77
- end
78
- end
79
-
80
- describe MS::Parser, "on an mzData version 1.05 file" do
81
- spec_large do
82
- before(:all) do
83
- @filetype = :mzdata
84
- @version = '1.05'
85
- @filetype_version = [@filetype, @version]
86
- @subclass = 'MS::Parser::MzData'
87
- @file = Tfiles + '/opd1_2runs_2mods/data/020.mzData.xml'
88
- end
89
- it_should_behave_like "a MS::Parser on a file"
90
- end
91
- end
92
-
@@ -1,87 +0,0 @@
1
-
2
- require File.expand_path( File.dirname(__FILE__) + '/../spec_helper' )
3
- require 'ms/spectrum'
4
-
5
- describe MS::Spectrum, 'equal_after_rounding?' do
6
- before(:all) do
7
- @spectrum = MS::Spectrum.new
8
- end
9
- it 'returns equal after rounding' do
10
- [[123.32145, 123.32, true], [123.328, 123.32, false], [123, 124, false], [122.94532, 123, true], [123, 123, true], [6.233355, 6.2334, true], [1029.212890625, 1029.212891, true]].each do |ar|
11
- (precise, less_precise, answ) = ar
12
- @spectrum.equal_after_rounding?(precise.to_f, less_precise.to_f).should == answ
13
- end
14
- end
15
-
16
-
17
- end
18
- describe MS::Spectrum, 'with a few values' do
19
- before(:each) do
20
- @mz = [1.2, 4.23332, 5.345734, 6.233355, 7.889]
21
- @spec = MS::Spectrum.new(@mz,Array.new(5,100))
22
- end
23
- it 'finds an index given an exact m/z' do
24
- @mz.each_with_index do |x,i|
25
- @spec.index(x).should == i
26
- end
27
- [1, 4.233, 5.346, 6.2334, 7.89].each_with_index do |x,i|
28
- @spec.index(x).should == i
29
- end
30
- end
31
-
32
- it 'index returns nil if the m/z does not exist' do
33
- [0.9, 1.28, 0, -10, 100, 4.233322, 4.233310, 4.3, 8.001, 7.905].each_with_index do |x,i|
34
- @spec.index(x).should == nil
35
- end
36
- end
37
- it 'finds an index given a rounded m/z' do
38
- [1, 4, 5, 6, 8].each_with_index do |x,i|
39
- @spec.index(x).should == i
40
- end
41
- end
42
-
43
- end
44
-
45
- describe MS::Spectrum, 'of full values' do
46
- before(:each) do
47
- @spec = MS::Spectrum.new(Ref::MZ,Array.new(Ref::MZ.size,100))
48
- end
49
-
50
- it 'finds an index given an exact m/z' do
51
- @spec.index(1121.91625976562).should == 665
52
- @spec.index(1029.212890625).should == 597
53
-
54
- #@spec.index(1029.212891).should == 665
55
- end
56
-
57
- it 'finds an index given approximate m/z' do
58
- @spec.index(1121.91626).should == 665
59
- @spec.index(1029.212891).should == 597
60
- end
61
-
62
- end
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
- class Ref
86
- MZ = [300.801086425781, 301.70166015625, 302.771240234375, 303.972473144531, 304.845275878906, 305.704711914062, 306.92919921875, 307.755126953125, 309.0087890625, 309.868713378906, 310.956420898438, 312.174194335938, 312.815185546875, 314.045654296875, 315.086730957031, 316.046752929688, 317.3525390625, 318.233642578125, 319.613647460938, 321.082092285156, 322.192321777344, 322.95458984375, 323.894653320312, 325.020385742188, 325.743286132812, 326.779418945312, 327.823303222656, 328.613891601562, 329.550903320312, 330.544738769531, 331.53125, 332.574829101562, 334.576965332031, 335.536254882812, 336.649353027344, 337.825805664062, 339.057189941406, 340.065063476562, 340.720581054688, 341.499572753906, 342.942199707031, 343.76025390625, 344.600280761719, 345.855041503906, 346.655639648438, 347.846435546875, 348.9169921875, 349.891235351562, 350.635437011719, 351.70458984375, 352.663940429688, 353.673217773438, 354.972717285156, 355.828247070312, 356.828125, 357.716613769531, 358.844848632812, 360.2294921875, 360.850402832031, 361.569580078125, 362.565002441406, 363.612182617188, 365.454711914062, 366.121337890625, 366.760559082031, 367.6083984375, 368.523986816406, 369.439453125, 370.830444335938, 371.803466796875, 372.514587402344, 374.044555664062, 374.806091308594, 375.821472167969, 377.040344238281, 377.854248046875, 378.756591796875, 379.71533203125, 380.576477050781, 381.725463867188, 382.475708007812, 383.616394042969, 384.813537597656, 386.129638671875, 387.6005859375, 388.932556152344, 390.297546386719, 391.094055175781, 392.089965820312, 392.823608398438, 394.235961914062, 394.960632324219, 395.694702148438, 396.635864257812, 397.776733398438, 399.250183105469, 400.538269042969, 401.433288574219, 402.387023925781, 402.995971679688, 403.692077636719, 404.801391601562, 405.716735839844, 406.731872558594, 408.219970703125, 409.398498535156, 410.421936035156, 411.209594726562, 412.011962890625, 412.739013671875, 413.435119628906, 414.143432617188, 415.083251953125, 416.492919921875, 417.629638671875, 418.542541503906, 419.22216796875, 419.897338867188, 420.7880859375, 421.839172363281, 422.86328125, 424.165710449219, 425.020263671875, 425.712097167969, 427.219360351562, 427.953247070312, 429.039367675781, 429.842346191406, 430.9833984375, 431.811462402344, 432.787719726562, 434.198486328125, 434.911071777344, 435.6279296875, 437.321166992188, 438.197448730469, 441.392822265625, 442.794372558594, 443.688232421875, 444.597534179688, 445.466247558594, 446.227966308594, 446.914245605469, 447.546936035156, 448.173278808594, 449.515563964844, 450.155517578125, 451.076049804688, 451.80859375, 452.888122558594, 454.161865234375, 455.119873046875, 456.791748046875, 457.733276367188, 458.702209472656, 459.986145019531, 460.669982910156, 461.494323730469, 462.233276367188, 463.476440429688, 464.808959960938, 465.488830566406, 466.521667480469, 467.236267089844, 468.25927734375, 469.573364257812, 470.788391113281, 471.397033691406, 472.3251953125, 473.016174316406, 473.884033203125, 474.768127441406, 475.71484375, 476.4599609375, 477.563171386719, 478.803833007812, 479.960021972656, 480.684143066406, 482.565612792969, 483.507568359375, 484.445495605469, 485.277221679688, 485.967590332031, 486.720397949219, 487.870178222656, 488.918029785156, 489.744018554688, 491.068664550781, 491.833435058594, 492.650573730469, 493.965026855469, 495.259765625, 496.394714355469, 497.059448242188, 498.060180664062, 499.154357910156, 501.302062988281, 502.07275390625, 504.229919433594, 505.106811523438, 505.800537109375, 508.017761230469, 508.681884765625, 509.696044921875, 510.333312988281, 512.247802734375, 513.393798828125, 514.066650390625, 515.622314453125, 516.840087890625, 518.3681640625, 519.65673828125, 521.18798828125, 521.8134765625, 522.556640625, 525.173583984375, 526.93017578125, 527.8955078125, 528.546630859375, 530.037109375, 530.682250976562, 531.6689453125, 533.123291015625, 534.359375, 535.144409179688, 535.915893554688, 537.208251953125, 537.831787109375, 538.450927734375, 539.700805664062, 540.919921875, 541.69873046875, 542.658203125, 544.65087890625, 546.431884765625, 547.52587890625, 549.49169921875, 551.28564453125, 552.2568359375, 554.173461914062, 554.998901367188, 555.777709960938, 556.683837890625, 557.781616210938, 558.829345703125, 559.62548828125, 561.412719726562, 566.22509765625, 568.303344726562, 569.317138671875, 570.64501953125, 571.35302734375, 572.68603515625, 573.504028320312, 574.764892578125, 576.551025390625, 578.062744140625, 579.164184570312, 579.979125976562, 580.649169921875, 581.505859375, 582.594116210938, 583.317016601562, 583.935546875, 584.800659179688, 585.533325195312, 586.652099609375, 588.186767578125, 589.5595703125, 591.04345703125, 593.177368164062, 594.206787109375, 595.06591796875, 595.67822265625, 596.616333007812, 598.947021484375, 599.933471679688, 601.442138671875, 602.24853515625, 603.02880859375, 604.325927734375, 605.169189453125, 606.299560546875, 608.28369140625, 609.507202148438, 610.47900390625, 611.820556640625, 616.285278320312, 617.404052734375, 618.650390625, 619.768432617188, 621.320068359375, 622.8955078125, 624.17431640625, 625.194091796875, 625.898803710938, 627.26611328125, 628.497802734375, 630.142333984375, 630.95556640625, 631.862182617188, 632.593872070312, 634.557373046875, 635.619506835938, 636.28173828125, 638.259521484375, 639.084716796875, 641.210693359375, 642.184326171875, 642.822143554688, 643.704345703125, 644.605224609375, 645.71630859375, 646.426391601562, 648.9580078125, 650.461791992188, 651.25927734375, 652.406005859375, 653.15771484375, 654.167236328125, 655.859619140625, 656.52783203125, 657.96044921875, 658.822143554688, 659.909545898438, 660.773681640625, 661.7734375, 664.002197265625, 664.96533203125, 666.625610351562, 668.973022460938, 669.7646484375, 670.6513671875, 672.27294921875, 673.169555664062, 674.858642578125, 675.718994140625, 676.745361328125, 677.466552734375, 678.604736328125, 680.147705078125, 681.142578125, 681.933349609375, 683.229736328125, 684.41357421875, 686.447509765625, 687.880859375, 689.662719726562, 690.491821289062, 691.112060546875, 694.089599609375, 694.885620117188, 695.734619140625, 698.015625, 699.21630859375, 700.71533203125, 702.184936523438, 703.388549804688, 704.596923828125, 705.3076171875, 706.487548828125, 707.610107421875, 708.528564453125, 709.323608398438, 710.18505859375, 711.12939453125, 712.266967773438, 713.28564453125, 715.2998046875, 716.581298828125, 717.333251953125, 718.65185546875, 719.658813476562, 721.110717773438, 722.131591796875, 723.205322265625, 724.197265625, 725.251342773438, 726.477783203125, 727.608154296875, 728.540283203125, 729.320678710938, 730.3056640625, 731.65185546875, 733.397705078125, 734.366943359375, 735.504150390625, 736.795166015625, 738.273315429688, 740.48046875, 741.299072265625, 742.173461914062, 742.86669921875, 744.785888671875, 746.8779296875, 748.128784179688, 748.85986328125, 750.027709960938, 750.9765625, 751.95361328125, 753.22216796875, 754.343505859375, 755.197631835938, 756.30712890625, 756.968139648438, 757.953491210938, 759.24609375, 760.630615234375, 762.342041015625, 763.35302734375, 765.677978515625, 766.75634765625, 768.7939453125, 769.42138671875, 770.463500976562, 771.560180664062, 772.955078125, 775.075927734375, 775.7666015625, 776.741333007812, 777.477416992188, 779.6455078125, 780.4052734375, 781.199340820312, 782.47265625, 783.567260742188, 784.414794921875, 785.167358398438, 785.986083984375, 787.664794921875, 788.28759765625, 791.491821289062, 793.939086914062, 795.66455078125, 797.485595703125, 798.37841796875, 799.091796875, 800.07421875, 801.76806640625, 802.5009765625, 803.33642578125, 806.570556640625, 807.333251953125, 808.1796875, 809.757690429688, 810.576171875, 811.278564453125, 813.463623046875, 814.234252929688, 815.956665039062, 818.929931640625, 820.739624023438, 822.134033203125, 823.384643554688, 824.442260742188, 827.7109375, 829.531616210938, 830.426879882812, 832.463134765625, 833.255004882812, 834.453125, 835.244750976562, 836.306396484375, 837.582153320312, 838.958251953125, 840.4677734375, 841.878173828125, 843.275024414062, 844.0, 845.133544921875, 846.884399414062, 847.799926757812, 848.9990234375, 850.070434570312, 851.87646484375, 854.469604492188, 855.295166015625, 857.824829101562, 860.77685546875, 862.132202148438, 863.554321289062, 864.557250976562, 865.8017578125, 867.702270507812, 868.665649414062, 869.851806640625, 872.493774414062, 873.479125976562, 875.295043945312, 876.073608398438, 877.45458984375, 878.231567382812, 879.895141601562, 881.426513671875, 882.178955078125, 882.82421875, 884.2978515625, 885.93603515625, 887.682739257812, 888.5888671875, 889.888305664062, 891.596313476562, 892.661010742188, 893.334716796875, 894.553466796875, 897.082275390625, 899.702270507812, 901.876586914062, 903.037475585938, 904.111450195312, 906.00146484375, 906.629516601562, 908.138671875, 909.345825195312, 911.360107421875, 913.2080078125, 915.34326171875, 915.966552734375, 918.234741210938, 919.238403320312, 920.685913085938, 922.227783203125, 925.145385742188, 926.242797851562, 927.669921875, 928.302124023438, 929.865600585938, 931.137939453125, 931.89404296875, 932.522705078125, 933.502563476562, 934.323364257812, 936.171630859375, 936.822021484375, 938.020751953125, 940.005615234375, 941.223266601562, 942.777587890625, 943.456787109375, 945.176391601562, 946.310302734375, 947.45068359375, 950.406494140625, 951.199829101562, 952.004028320312, 952.9482421875, 954.328369140625, 955.021484375, 955.98681640625, 957.270385742188, 958.439697265625, 959.066650390625, 961.471313476562, 964.653442382812, 965.29296875, 966.430786132812, 967.450073242188, 969.279663085938, 970.070434570312, 972.778686523438, 975.616088867188, 976.281982421875, 977.298461914062, 980.384887695312, 982.016845703125, 983.19482421875, 985.753173828125, 986.75439453125, 987.38916015625, 988.11328125, 989.251220703125, 991.101318359375, 992.167358398438, 993.356567382812, 994.288818359375, 994.909545898438, 996.360107421875, 997.033203125, 999.596435546875, 1000.70825195312, 1001.82934570312, 1002.5859375, 1003.97521972656, 1006.16870117188, 1007.17919921875, 1008.37512207031, 1010.92126464844, 1011.68957519531, 1014.60095214844, 1015.32788085938, 1016.53491210938, 1019.423828125, 1021.97961425781, 1023.03479003906, 1024.06762695312, 1025.23022460938, 1028.0390625, 1029.212890625, 1030.20458984375, 1030.9814453125, 1031.58642578125, 1032.22314453125, 1033.47900390625, 1035.31103515625, 1036.27783203125, 1037.73461914062, 1040.73681640625, 1041.61083984375, 1042.40795898438, 1044.15625, 1047.22192382812, 1048.4150390625, 1049.326171875, 1050.52856445312, 1052.19677734375, 1052.86840820312, 1055.55029296875, 1056.19995117188, 1056.91650390625, 1059.255859375, 1060.0, 1060.95922851562, 1062.39501953125, 1063.42504882812, 1064.02978515625, 1066.18505859375, 1067.46337890625, 1068.771484375, 1070.34008789062, 1071.54541015625, 1072.4619140625, 1073.06665039062, 1074.25317382812, 1075.02587890625, 1075.91650390625, 1077.90380859375, 1078.623046875, 1079.625, 1081.20092773438, 1082.90673828125, 1084.12646484375, 1084.93627929688, 1086.10693359375, 1086.8212890625, 1089.87060546875, 1090.95751953125, 1091.58227539062, 1092.58056640625, 1093.18798828125, 1094.03076171875, 1094.85888671875, 1095.67578125, 1096.91772460938, 1097.76611328125, 1099.94018554688, 1104.1787109375, 1106.17016601562, 1109.21435546875, 1110.64526367188, 1111.39990234375, 1115.15551757812, 1118.62060546875, 1119.3232421875, 1120.49560546875, 1121.24438476562, 1121.91625976562, 1123.04467773438, 1124.11328125, 1125.00732421875, 1128.94750976562, 1132.93701171875, 1135.576171875, 1137.48706054688, 1140.6787109375, 1142.33544921875, 1144.44482421875, 1145.72021484375, 1146.33325195312, 1148.22900390625, 1151.29833984375, 1155.04272460938, 1155.8359375, 1157.00634765625, 1159.06323242188, 1160.17724609375, 1161.82397460938, 1164.59252929688, 1166.2470703125, 1169.43603515625, 1172.52734375, 1174.78784179688, 1175.90966796875, 1177.07763671875, 1178.1201171875, 1179.05493164062, 1180.10815429688, 1181.087890625, 1182.23583984375, 1183.14404296875, 1183.8203125, 1184.86596679688, 1185.9677734375, 1187.96240234375, 1192.14208984375, 1192.8876953125, 1194.31494140625, 1195.25439453125, 1197.404296875, 1198.44677734375, 1199.986328125, 1200.9560546875, 1202.10986328125, 1204.16528320312, 1204.92626953125, 1207.64697265625, 1209.29638671875, 1210.31469726562, 1211.55810546875, 1212.96728515625, 1213.66650390625, 1215.88720703125, 1216.65844726562, 1221.25219726562, 1222.03955078125, 1222.94189453125, 1223.84765625, 1224.94677734375, 1226.40893554688, 1227.57470703125, 1229.04736328125, 1229.91796875, 1233.10815429688, 1234.28564453125, 1235.01904296875, 1236.62036132812, 1238.3466796875, 1242.61328125, 1247.39184570312, 1248.78662109375, 1250.59375, 1253.32861328125, 1254.3173828125, 1256.03540039062, 1259.39404296875, 1261.6796875, 1263.22534179688, 1265.2001953125, 1267.65600585938, 1271.38818359375, 1272.033203125, 1272.81103515625, 1273.9462890625, 1275.4443359375, 1276.86669921875, 1277.63012695312, 1278.470703125, 1283.57397460938, 1285.2294921875, 1286.77807617188, 1287.529296875, 1289.22631835938, 1289.90405273438, 1290.55541992188, 1291.89868164062, 1293.01733398438, 1297.19946289062, 1298.38549804688, 1299.29638671875, 1300.2783203125, 1303.30151367188, 1304.17211914062, 1306.76318359375, 1307.55786132812, 1308.35620117188, 1310.16162109375, 1312.1787109375, 1313.92797851562, 1314.58325195312, 1315.9853515625, 1318.7001953125, 1320.08544921875, 1321.87451171875, 1322.6083984375, 1323.46728515625, 1324.13891601562, 1326.99365234375, 1329.58764648438, 1334.52392578125, 1335.72412109375, 1336.44018554688, 1340.24731445312, 1342.57275390625, 1345.16650390625, 1346.63305664062, 1348.08911132812, 1352.998046875, 1354.26928710938, 1354.98779296875, 1355.89990234375, 1360.693359375, 1361.45068359375, 1370.07788085938, 1373.84790039062, 1376.78540039062, 1378.5107421875, 1379.88793945312, 1382.77880859375, 1386.8427734375, 1389.30444335938, 1391.45263671875, 1392.22045898438, 1395.37744140625, 1396.14916992188, 1401.87231445312, 1408.41772460938, 1409.84790039062, 1411.30883789062, 1414.53955078125, 1415.2880859375, 1417.7275390625, 1418.34155273438, 1419.27978515625, 1420.90063476562, 1422.11083984375, 1423.06079101562, 1423.76318359375, 1424.69409179688, 1425.6943359375, 1426.994140625, 1438.1064453125, 1441.8935546875, 1445.77099609375, 1448.7431640625, 1455.90747070312, 1458.3203125, 1462.12548828125, 1463.53540039062, 1466.44091796875, 1469.74291992188, 1472.12841796875, 1473.33764648438, 1478.65185546875, 1479.49877929688, 1480.69287109375, 1487.7763671875, 1493.84423828125, 1497.70141601562]
87
- end