mspire 0.4.9 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +27 -17
- data/changelog.txt +31 -62
- data/lib/ms/calc.rb +32 -0
- data/lib/ms/data/interleaved.rb +60 -0
- data/lib/ms/data/lazy_io.rb +73 -0
- data/lib/ms/data/lazy_string.rb +15 -0
- data/lib/ms/data/simple.rb +59 -0
- data/lib/ms/data/transposed.rb +41 -0
- data/lib/ms/data.rb +57 -0
- data/lib/ms/format/format_error.rb +12 -0
- data/lib/ms/spectrum.rb +25 -384
- data/lib/ms/support/binary_search.rb +126 -0
- data/lib/ms.rb +10 -10
- metadata +38 -350
- data/INSTALL +0 -58
- data/README.rdoc +0 -18
- data/Rakefile +0 -330
- data/bin/aafreqs.rb +0 -23
- data/bin/bioworks2excel.rb +0 -14
- data/bin/bioworks_to_pepxml.rb +0 -148
- data/bin/bioworks_to_pepxml_gui.rb +0 -225
- data/bin/fasta_shaker.rb +0 -5
- data/bin/filter_and_validate.rb +0 -5
- data/bin/gi2annot.rb +0 -14
- data/bin/id_class_anal.rb +0 -112
- data/bin/id_precision.rb +0 -172
- data/bin/ms_to_lmat.rb +0 -67
- data/bin/pepproph_filter.rb +0 -16
- data/bin/prob_validate.rb +0 -6
- data/bin/protein_summary.rb +0 -6
- data/bin/protxml2prots_peps.rb +0 -32
- data/bin/raw_to_mzXML.rb +0 -55
- data/bin/run_percolator.rb +0 -122
- data/bin/sqt_group.rb +0 -26
- data/bin/srf_group.rb +0 -27
- data/bin/srf_to_sqt.rb +0 -40
- data/lib/align/chams.rb +0 -78
- data/lib/align.rb +0 -154
- data/lib/archive/targz.rb +0 -94
- data/lib/bsearch.rb +0 -120
- data/lib/core_extensions.rb +0 -16
- data/lib/fasta.rb +0 -626
- data/lib/gi.rb +0 -124
- data/lib/group_by.rb +0 -10
- data/lib/index_by.rb +0 -11
- data/lib/merge_deep.rb +0 -21
- data/lib/ms/converter/mzxml.rb +0 -77
- data/lib/ms/gradient_program.rb +0 -170
- data/lib/ms/msrun.rb +0 -244
- data/lib/ms/msrun_index.rb +0 -108
- data/lib/ms/parser/mzdata/axml.rb +0 -67
- data/lib/ms/parser/mzdata/dom.rb +0 -175
- data/lib/ms/parser/mzdata/libxml.rb +0 -7
- data/lib/ms/parser/mzdata.rb +0 -31
- data/lib/ms/parser/mzxml/axml.rb +0 -70
- data/lib/ms/parser/mzxml/dom.rb +0 -182
- data/lib/ms/parser/mzxml/hpricot.rb +0 -253
- data/lib/ms/parser/mzxml/libxml.rb +0 -19
- data/lib/ms/parser/mzxml/regexp.rb +0 -122
- data/lib/ms/parser/mzxml/rexml.rb +0 -72
- data/lib/ms/parser/mzxml/xmlparser.rb +0 -248
- data/lib/ms/parser/mzxml.rb +0 -282
- data/lib/ms/parser.rb +0 -108
- data/lib/ms/precursor.rb +0 -25
- data/lib/ms/scan.rb +0 -81
- data/lib/mspire.rb +0 -4
- data/lib/pi_zero.rb +0 -244
- data/lib/qvalue.rb +0 -161
- data/lib/roc.rb +0 -187
- data/lib/sample_enzyme.rb +0 -160
- data/lib/scan_i.rb +0 -21
- data/lib/spec_id/aa_freqs.rb +0 -170
- data/lib/spec_id/bioworks.rb +0 -497
- data/lib/spec_id/digestor.rb +0 -138
- data/lib/spec_id/mass.rb +0 -179
- data/lib/spec_id/parser/proph.rb +0 -335
- data/lib/spec_id/precision/filter/cmdline.rb +0 -218
- data/lib/spec_id/precision/filter/interactive.rb +0 -134
- data/lib/spec_id/precision/filter/output.rb +0 -148
- data/lib/spec_id/precision/filter.rb +0 -637
- data/lib/spec_id/precision/output.rb +0 -60
- data/lib/spec_id/precision/prob/cmdline.rb +0 -160
- data/lib/spec_id/precision/prob/output.rb +0 -94
- data/lib/spec_id/precision/prob.rb +0 -249
- data/lib/spec_id/proph/pep_summary.rb +0 -104
- data/lib/spec_id/proph/prot_summary.rb +0 -484
- data/lib/spec_id/proph.rb +0 -4
- data/lib/spec_id/protein_summary.rb +0 -489
- data/lib/spec_id/sequest/params.rb +0 -316
- data/lib/spec_id/sequest/pepxml.rb +0 -1458
- data/lib/spec_id/sequest.rb +0 -33
- data/lib/spec_id/sqt.rb +0 -349
- data/lib/spec_id/srf.rb +0 -973
- data/lib/spec_id.rb +0 -778
- data/lib/spec_id_xml.rb +0 -99
- data/lib/transmem/phobius.rb +0 -147
- data/lib/transmem/toppred.rb +0 -368
- data/lib/transmem.rb +0 -157
- data/lib/validator/aa.rb +0 -48
- data/lib/validator/aa_est.rb +0 -112
- data/lib/validator/background.rb +0 -77
- data/lib/validator/bias.rb +0 -95
- data/lib/validator/cmdline.rb +0 -431
- data/lib/validator/decoy.rb +0 -107
- data/lib/validator/digestion_based.rb +0 -70
- data/lib/validator/probability.rb +0 -51
- data/lib/validator/prot_from_pep.rb +0 -234
- data/lib/validator/q_value.rb +0 -32
- data/lib/validator/transmem.rb +0 -272
- data/lib/validator/true_pos.rb +0 -46
- data/lib/validator.rb +0 -197
- data/lib/xml.rb +0 -38
- data/lib/xml_style_parser.rb +0 -119
- data/lib/xmlparser_wrapper.rb +0 -19
- data/release_notes.txt +0 -2
- data/script/compile_and_plot_smriti_final.rb +0 -97
- data/script/create_little_pepxml.rb +0 -61
- data/script/degenerate_peptides.rb +0 -47
- data/script/estimate_fpr_by_cysteine.rb +0 -226
- data/script/extract_gradient_programs.rb +0 -56
- data/script/find_cysteine_background.rb +0 -137
- data/script/genuine_tps_and_probs.rb +0 -136
- data/script/get_apex_values_rexml.rb +0 -44
- data/script/histogram_probs.rb +0 -61
- data/script/mascot_fix_pepxml.rb +0 -123
- data/script/msvis.rb +0 -42
- data/script/mzXML2timeIndex.rb +0 -25
- data/script/peps_per_bin.rb +0 -67
- data/script/prep_dir.rb +0 -121
- data/script/simple_protein_digestion.rb +0 -27
- data/script/smriti_final_analysis.rb +0 -103
- data/script/sqt_to_meta.rb +0 -24
- data/script/top_hit_per_scan.rb +0 -67
- data/script/toppred_to_yaml.rb +0 -47
- data/script/tpp_installer.rb +0 -249
- data/specs/align_spec.rb +0 -79
- data/specs/bin/bioworks_to_pepxml_spec.rb +0 -79
- data/specs/bin/fasta_shaker_spec.rb +0 -259
- data/specs/bin/filter_and_validate__multiple_vals_helper.yaml +0 -199
- data/specs/bin/filter_and_validate_spec.rb +0 -180
- data/specs/bin/ms_to_lmat_spec.rb +0 -34
- data/specs/bin/prob_validate_spec.rb +0 -86
- data/specs/bin/protein_summary_spec.rb +0 -14
- data/specs/fasta_spec.rb +0 -354
- data/specs/gi_spec.rb +0 -22
- data/specs/load_bin_path.rb +0 -7
- data/specs/merge_deep_spec.rb +0 -13
- data/specs/ms/gradient_program_spec.rb +0 -77
- data/specs/ms/msrun_spec.rb +0 -498
- data/specs/ms/parser_spec.rb +0 -92
- data/specs/ms/spectrum_spec.rb +0 -87
- data/specs/pi_zero_spec.rb +0 -115
- data/specs/qvalue_spec.rb +0 -39
- data/specs/roc_spec.rb +0 -251
- data/specs/rspec_autotest.rb +0 -149
- data/specs/sample_enzyme_spec.rb +0 -126
- data/specs/spec_helper.rb +0 -135
- data/specs/spec_id/aa_freqs_spec.rb +0 -52
- data/specs/spec_id/bioworks_spec.rb +0 -148
- data/specs/spec_id/digestor_spec.rb +0 -75
- data/specs/spec_id/precision/filter/cmdline_spec.rb +0 -20
- data/specs/spec_id/precision/filter/output_spec.rb +0 -31
- data/specs/spec_id/precision/filter_spec.rb +0 -246
- data/specs/spec_id/precision/prob_spec.rb +0 -44
- data/specs/spec_id/precision/prob_spec_helper.rb +0 -0
- data/specs/spec_id/proph/pep_summary_spec.rb +0 -98
- data/specs/spec_id/proph/prot_summary_spec.rb +0 -128
- data/specs/spec_id/protein_summary_spec.rb +0 -189
- data/specs/spec_id/sequest/params_spec.rb +0 -68
- data/specs/spec_id/sequest/pepxml_spec.rb +0 -374
- data/specs/spec_id/sequest_spec.rb +0 -38
- data/specs/spec_id/sqt_spec.rb +0 -246
- data/specs/spec_id/srf_spec.rb +0 -172
- data/specs/spec_id/srf_spec_helper.rb +0 -139
- data/specs/spec_id_helper.rb +0 -33
- data/specs/spec_id_spec.rb +0 -366
- data/specs/spec_id_xml_spec.rb +0 -33
- data/specs/transmem/phobius_spec.rb +0 -425
- data/specs/transmem/toppred_spec.rb +0 -298
- data/specs/transmem_spec.rb +0 -60
- data/specs/transmem_spec_shared.rb +0 -64
- data/specs/validator/aa_est_spec.rb +0 -66
- data/specs/validator/aa_spec.rb +0 -40
- data/specs/validator/background_spec.rb +0 -67
- data/specs/validator/bias_spec.rb +0 -122
- data/specs/validator/decoy_spec.rb +0 -51
- data/specs/validator/fasta_helper.rb +0 -26
- data/specs/validator/prot_from_pep_spec.rb +0 -141
- data/specs/validator/transmem_spec.rb +0 -146
- data/specs/validator/true_pos_spec.rb +0 -58
- data/specs/validator_helper.rb +0 -33
- data/specs/xml_spec.rb +0 -12
- data/test_files/000_pepxml18_small.xml +0 -206
- data/test_files/020a.mzXML.timeIndex +0 -4710
- data/test_files/4-03-03_mzXML/000.mzXML.timeIndex +0 -3973
- data/test_files/4-03-03_mzXML/020.mzXML.timeIndex +0 -3872
- data/test_files/4-03-03_small-prot.xml +0 -321
- data/test_files/4-03-03_small.xml +0 -3876
- data/test_files/7MIX_STD_110802_1.sequest_params_fragment.srf +0 -0
- data/test_files/bioworks-3.3_10prots.xml +0 -5999
- data/test_files/bioworks31.params +0 -77
- data/test_files/bioworks32.params +0 -62
- data/test_files/bioworks33.params +0 -63
- data/test_files/bioworks_single_run_small.xml +0 -7237
- data/test_files/bioworks_small.fasta +0 -212
- data/test_files/bioworks_small.params +0 -63
- data/test_files/bioworks_small.phobius +0 -109
- data/test_files/bioworks_small.toppred.out +0 -2847
- data/test_files/bioworks_small.xml +0 -5610
- data/test_files/bioworks_with_INV_small.xml +0 -3753
- data/test_files/bioworks_with_SHUFF_small.xml +0 -2503
- data/test_files/corrupted_900.srf +0 -0
- data/test_files/head_of_7MIX.srf +0 -0
- data/test_files/interact-opd1_mods_small-prot.xml +0 -304
- data/test_files/messups.fasta +0 -297
- data/test_files/opd1/000.my_answer.100lines.xml +0 -101
- data/test_files/opd1/000.tpp_1.2.3.first10.xml +0 -115
- data/test_files/opd1/000.tpp_2.9.2.first10.xml +0 -126
- data/test_files/opd1/000.v2.1.mzXML.timeIndex +0 -3748
- data/test_files/opd1/000_020-prot.png +0 -0
- data/test_files/opd1/000_020_3prots-prot.mod_initprob.xml +0 -62
- data/test_files/opd1/000_020_3prots-prot.xml +0 -62
- data/test_files/opd1/opd1_cat_inv_small-prot.xml +0 -139
- data/test_files/opd1/sequest.3.1.params +0 -77
- data/test_files/opd1/sequest.3.2.params +0 -62
- data/test_files/opd1/twenty_scans.mzXML +0 -418
- data/test_files/opd1/twenty_scans.v2.1.mzXML +0 -382
- data/test_files/opd1/twenty_scans_answ.lmat +0 -0
- data/test_files/opd1/twenty_scans_answ.lmata +0 -9
- data/test_files/opd1_020_beginning.RAW +0 -0
- data/test_files/opd1_2runs_2mods/data/020.mzData.xml +0 -683
- data/test_files/opd1_2runs_2mods/data/020.readw.mzXML +0 -382
- data/test_files/opd1_2runs_2mods/data/040.mzData.xml +0 -683
- data/test_files/opd1_2runs_2mods/data/040.readw.mzXML +0 -382
- data/test_files/opd1_2runs_2mods/data/README.txt +0 -6
- data/test_files/opd1_2runs_2mods/interact-opd1_mods__small.xml +0 -753
- data/test_files/orbitrap_mzData/000_cut.xml +0 -1920
- data/test_files/pepproph_small.xml +0 -4691
- data/test_files/phobius.small.noheader.txt +0 -50
- data/test_files/phobius.small.small.txt +0 -53
- data/test_files/s01_anC1_ld020mM.key.txt +0 -25
- data/test_files/s01_anC1_ld020mM.meth +0 -0
- data/test_files/small.fasta +0 -297
- data/test_files/small.sqt +0 -87
- data/test_files/smallraw.RAW +0 -0
- data/test_files/tf_bioworks2excel.bioXML +0 -14340
- data/test_files/tf_bioworks2excel.txt.actual +0 -1035
- data/test_files/toppred.small.out +0 -416
- data/test_files/toppred.xml.out +0 -318
- data/test_files/validator_hits_separate/bias_bioworks_small_HS.fasta +0 -7
- data/test_files/validator_hits_separate/bioworks_small_HS.xml +0 -5651
- data/test_files/yeast_gly_small-prot.xml +0 -265
- data/test_files/yeast_gly_small.1.0_1.0_1.0.parentTimes +0 -6
- data/test_files/yeast_gly_small.xml +0 -3807
- data/test_files/yeast_gly_small2.parentTimes +0 -6
data/specs/ms/msrun_spec.rb
DELETED
@@ -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
|
-
|
data/specs/ms/parser_spec.rb
DELETED
@@ -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
|
-
|
data/specs/ms/spectrum_spec.rb
DELETED
@@ -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
|