mspire 0.4.9 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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