mspire 0.6.7 → 0.6.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/Rakefile +5 -0
  2. data/VERSION +1 -1
  3. data/lib/cv/param.rb +25 -5
  4. data/lib/cv/referenceable_param_group_ref.rb +13 -0
  5. data/lib/cv.rb +3 -1
  6. data/lib/ms/cv/param.rb +19 -24
  7. data/lib/ms/cv/paramable.rb +42 -0
  8. data/lib/ms/mzml/activation.rb +33 -0
  9. data/lib/ms/mzml/chromatogram.rb +29 -0
  10. data/lib/ms/mzml/chromatogram_list.rb +26 -0
  11. data/lib/ms/mzml/component.rb +21 -0
  12. data/lib/ms/mzml/contact.rb +23 -0
  13. data/lib/ms/mzml/cv.rb +46 -0
  14. data/lib/ms/mzml/data_array.rb +65 -0
  15. data/lib/ms/mzml/data_array_container_like.rb +57 -0
  16. data/lib/ms/mzml/data_processing.rb +27 -0
  17. data/lib/ms/mzml/file_content.rb +21 -0
  18. data/lib/ms/mzml/file_description.rb +47 -0
  19. data/lib/ms/mzml/instrument_configuration.rb +37 -0
  20. data/lib/ms/mzml/isolation_window.rb +21 -0
  21. data/lib/ms/mzml/list.rb +23 -0
  22. data/lib/ms/mzml/precursor.rb +42 -0
  23. data/lib/ms/mzml/processing_method.rb +24 -0
  24. data/lib/ms/mzml/product.rb +22 -0
  25. data/lib/ms/mzml/referenceable_param_group.rb +40 -0
  26. data/lib/ms/mzml/run.rb +54 -0
  27. data/lib/ms/mzml/sample.rb +27 -0
  28. data/lib/ms/mzml/scan.rb +44 -0
  29. data/lib/ms/mzml/scan_list.rb +33 -0
  30. data/lib/ms/mzml/scan_settings.rb +28 -0
  31. data/lib/ms/mzml/selected_ion.rb +18 -0
  32. data/lib/ms/mzml/software.rb +28 -0
  33. data/lib/ms/mzml/source_file.rb +48 -0
  34. data/lib/ms/mzml/spectrum.rb +91 -0
  35. data/lib/ms/mzml/spectrum_list.rb +42 -0
  36. data/lib/ms/mzml.rb +173 -6
  37. data/lib/ms/quant/qspec/protein_group_comparison.rb +3 -3
  38. data/lib/ms/quant/qspec.rb +4 -4
  39. data/lib/ms/spectrum.rb +137 -260
  40. data/lib/ms/spectrum_like.rb +133 -0
  41. data/lib/ms/user_param.rb +43 -0
  42. data/lib/mspire.rb +6 -0
  43. data/obo/ms.obo +670 -121
  44. data/obo/unit.obo +23 -1
  45. data/spec/ms/cv/param_spec.rb +33 -0
  46. data/spec/ms/mzml/cv_spec.rb +17 -0
  47. data/spec/ms/mzml/file_content_spec.rb +25 -0
  48. data/spec/ms/mzml/file_description_spec.rb +34 -0
  49. data/spec/ms/mzml/referenceable_param_group_spec.rb +33 -0
  50. data/spec/ms/mzml_spec.rb +65 -4
  51. data/spec/ms/user_param_spec.rb +51 -0
  52. data/spec/mspire_spec.rb +9 -0
  53. data/spec/testfiles/ms/mzml/mspire_simulated.noidx.check.mzML +81 -0
  54. metadata +57 -21
  55. data/lib/cv/description.rb +0 -19
  56. data/lib/ms/cv/description.rb +0 -44
  57. data/lib/msplat.rb +0 -2
  58. data/spec/ms/cv/description_spec.rb +0 -60
  59. data/spec/msplat_spec.rb +0 -24
@@ -0,0 +1,42 @@
1
+ require 'ms/mzml/list'
2
+
3
+ module MS
4
+ class Mzml
5
+ # The method of precursor ion selection and activation
6
+ class Precursor
7
+ # (optional) the MS::Mzml::Spectrum object from which the precursor is
8
+ # derived
9
+ attr_accessor :spectrum
10
+
11
+ # (optional)
12
+ attr_accessor :isolation_window
13
+
14
+ # (optional) An array of ions that were selected.
15
+ attr_accessor :selected_ions
16
+
17
+ # (required) The type and energy level used for activation.
18
+ attr_accessor :activation
19
+
20
+ # a boolean indicating the spectrum is from an external source file
21
+ attr_accessor :from_external_source_file
22
+
23
+ def to_xml(builder)
24
+ atts = {}
25
+ if @from_external_source_file
26
+ atts[:sourceFileRef] = @spectrum.source_file.id
27
+ atts[:externalSpectrumRef] = @spectrum.id
28
+ else
29
+ atts[:spectrumRef] = @spectrum.id if @spectrum
30
+ end
31
+ builder.precursor(atts) do |prec_n|
32
+ @isolation_window.to_xml(prec_n) if @isolation_window
33
+ MS::Mzml::SelectedIonList.list_xml(@selected_ions, prec_n) if @selected_ions
34
+ @activation.to_xml(prec_n)
35
+ end
36
+ end
37
+
38
+ extend(MS::Mzml::List)
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,24 @@
1
+ require 'ms/cv/paramable'
2
+
3
+ module MS
4
+ class Mzml
5
+ class ProcessingMethod
6
+ include MS::CV::Paramable
7
+
8
+ attr_accessor :order, :software
9
+
10
+ def initialize(order, software, opts={params: []}, &block)
11
+ @order, @software = order, software
12
+ describe!(*opts[:params])
13
+ block.call(self) if block
14
+ end
15
+
16
+ def to_xml(builder)
17
+ builder.processingMethod(order: @order, softwareRef: software.id) do |pm_n|
18
+ super(pm_n) # params
19
+ end
20
+ builder
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ require 'ms/mzml/list'
2
+
3
+ module MS
4
+ class Mzml
5
+ class Product
6
+ attr_accessor :isolation_window
7
+
8
+ def initialize(isolation_window=nil)
9
+ @isolation_window = isolation_window
10
+ end
11
+
12
+ def to_xml(builder)
13
+ builder.product do |p_n|
14
+ @isolation_window.to_xml(p_n) if @isolation_window
15
+ end
16
+ end
17
+
18
+ extend(MS::Mzml::List)
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,40 @@
1
+ require 'ms/cv/paramable'
2
+
3
+ module MS
4
+ class Mzml
5
+
6
+ # need to call to_xml_definition (or use
7
+ # MS::Mzml::ReferenceableParamGroupList.list_xml) to get the xml for the
8
+ # object itself (and not a reference). Merely callying #to_xml will
9
+ # result in a referenceableParamGroupRef being created.
10
+ class ReferenceableParamGroup
11
+ include MS::CV::Paramable
12
+
13
+ attr_accessor :id
14
+
15
+ def initialize(id, opts={params: []} )
16
+ @id = id
17
+ describe!(*opts[:params])
18
+ end
19
+
20
+ def to_xml(builder)
21
+ builder.referenceableParamGroupRef(ref: @id)
22
+ builder
23
+ end
24
+
25
+ def to_xml_definition(builder)
26
+ builder.referenceableParamGroup(id: @id) do |fc_n|
27
+ @params.each {|obj| obj.to_xml(fc_n) }
28
+ end
29
+ builder
30
+ end
31
+
32
+ def self.list_xml(objs, builder)
33
+ builder.referenceableParamGroupList(count: objs.size) do |rpgl_n|
34
+ objs.each {|obj| obj.to_xml_definition(rpgl_n) }
35
+ end
36
+ builder
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,54 @@
1
+ require 'ms/cv/paramable'
2
+
3
+ module MS
4
+ class Mzml
5
+ class Run
6
+ include MS::CV::Paramable
7
+
8
+ # required
9
+ attr_accessor :default_instrument_configuration
10
+
11
+ # optional
12
+ attr_accessor :default_source_file
13
+
14
+ # required
15
+ attr_accessor :id
16
+
17
+ # optional
18
+ attr_accessor :sample
19
+
20
+ # optional
21
+ attr_accessor :start_time_stamp
22
+
23
+ # a SpectrumList object (a special array of spectra)
24
+ attr_accessor :spectrum_list
25
+
26
+ # takes a ChromatogramList object (a special array of chromatograms)
27
+ attr_accessor :chromatogram_list
28
+
29
+ # yields self if given a block
30
+ def initialize(id, default_instrument_configuration, opts={params: []}, &block)
31
+ @id = id
32
+ @default_instrument_configuration = default_instrument_configuration
33
+ describe!(*opts[:params])
34
+ block.call(self) if block
35
+ end
36
+
37
+ def to_xml(builder)
38
+ atts = { id: @id,
39
+ defaultInstrumentConfigurationRef: @default_instrument_configuration.id
40
+ }
41
+ atts[:defaultSourceFileRef] = @default_source_file.id if @default_source_file
42
+ atts[:sampleRef] = @sample.id if @sample
43
+ atts[:startTimeStamp] = @start_time_stamp if @start_time_stamp
44
+
45
+ builder.run(atts) do |run_n|
46
+ super(run_n)
47
+ spectrum_list.to_xml(run_n) if spectrum_list
48
+ chromatogram_list.to_xml(run_n) if chromatogram_list
49
+ end
50
+ builder
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,27 @@
1
+ require 'ms/cv/paramable'
2
+ require 'ms/mzml/list'
3
+
4
+ module MS
5
+ class Mzml
6
+ class Sample
7
+ include MS::CV::Paramable
8
+
9
+ attr_accessor :id, :name
10
+
11
+ def initialize(id, name, opts={params: []}, &block)
12
+ @id, @name = id, name
13
+ describe!(*opts[:params])
14
+ block.call(self) if block
15
+ end
16
+
17
+ def to_xml(builder)
18
+ builder.sample( id: @id, name: @name ) do |sample_n|
19
+ super(sample_n)
20
+ end
21
+ builder
22
+ end
23
+
24
+ extend(MS::Mzml::List)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,44 @@
1
+ require 'ms/cv/paramable'
2
+
3
+ module MS
4
+ class Mzml
5
+ class Scan
6
+ include MS::CV::Paramable
7
+
8
+ # (optional) the MS::Mzml::Spectrum object from which the precursor is
9
+ # derived. (the sourceFileRef is derived from this spectrum object if
10
+ # from_external_source_file == true)
11
+ attr_accessor :spectrum
12
+
13
+ # a boolean indicating the spectrum is from an external source file
14
+ attr_accessor :from_external_source_file
15
+
16
+ # an InstrumentConfiguration object
17
+ attr_accessor :instrument_configuration
18
+
19
+ # ScanWindow objects
20
+ attr_accessor :scan_windows
21
+
22
+ def initialize(opts={params: []}, &block)
23
+ describe!(*opts[:params])
24
+ block.call(self) if block
25
+ end
26
+
27
+ def to_xml(builder)
28
+ atts = {}
29
+ if @from_external_source_file
30
+ atts[:sourceFileRef] = @spectrum.source_file.id
31
+ atts[:externalSpectrumRef] = @spectrum.id
32
+ else
33
+ atts[:spectrumRef] = @spectrum.id if @spectrum
34
+ end
35
+ atts[:instrumentConfigurationRef] = @instrument_configuration.id if @instrument_configuration
36
+ builder.scan(atts) do |prec_n|
37
+ super(prec_n) # description
38
+ ScanWindow.list_xml(@scan_windows, prec_n) if @scan_windows
39
+ end
40
+ end
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,33 @@
1
+ require 'ms/cv/paramable'
2
+
3
+ module MS
4
+ class Mzml
5
+
6
+ # MUST supply a *child* term of MS:1000570 (spectra combination) only once
7
+ #
8
+ # e.g.: MS:1000571 (sum of spectra)
9
+ # e.g.: MS:1000573 (median of spectra)
10
+ # e.g.: MS:1000575 (mean of spectra)
11
+ # e.g.: MS:1000795 (no combination)
12
+ class ScanList < Array
13
+ include MS::CV::Paramable
14
+
15
+ def initialize(opts={params: []}, &block)
16
+ describe!(*opts[:params])
17
+ block.call(self) if block
18
+ end
19
+
20
+ def to_xml(builder)
21
+ builder.scanList(count: self.size) do |sl_n|
22
+ @description.to_xml(sl_n) if @description
23
+ self.each do |scan|
24
+ scan.to_xml(sl_n)
25
+ end
26
+ end
27
+ builder
28
+ end
29
+
30
+ alias_method :list_xml, :to_xml
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,28 @@
1
+ require 'ms/mzml/list'
2
+ require 'ms/cv/paramable'
3
+
4
+ module MS
5
+ class Mzml
6
+ class ScanSettings
7
+ include MS::CV::Paramable
8
+
9
+ attr_accessor :id
10
+
11
+ def initialize(id, opts={params: []}, &block)
12
+ @id = id
13
+ describe!(*opts[:params])
14
+ block.call(self) if block
15
+ end
16
+
17
+ def to_xml(builder)
18
+ builder.scanSettings( id: @id ) do |ss_n|
19
+ super(ss_n)
20
+ end
21
+ builder
22
+ end
23
+
24
+ extend(MS::Mzml::List)
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,18 @@
1
+ require 'ms/mzml/list'
2
+ require 'ms/cv/paramable'
3
+
4
+
5
+ module MS
6
+ class Mzml
7
+ # MUST supply a *child* term of MS:1000455 (ion selection attribute) one or more times
8
+ #
9
+ # e.g.: MS:1000041 (charge state)
10
+ # e.g.: MS:1000042 (intensity)
11
+ # e.g.: MS:1000633 (possible charge state)
12
+ # e.g.: MS:1000744 (selected ion m/z)
13
+ class SelectedIon
14
+ include MS::CV::Paramable
15
+ extend(MS::Mzml::List)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ require 'mspire'
2
+ require 'ms/mzml/list'
3
+ require 'ms/cv/paramable'
4
+
5
+ module MS
6
+ class Mzml
7
+ class Software
8
+ include MS::CV::Paramable
9
+
10
+ attr_accessor :id, :version
11
+
12
+ def initialize(id='mspire', version=Mspire::VERSION, opts={params: []}, &block)
13
+ @id, @version = id, version
14
+ describe!(*opts[:params])
15
+ block.call(self) if block
16
+ end
17
+
18
+ def to_xml(builder)
19
+ builder.software( id: @id, version: @version) do |sf_n|
20
+ super(sf_n)
21
+ end
22
+ builder
23
+ end
24
+
25
+ extend(MS::Mzml::List)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,48 @@
1
+ require 'ms/cv/paramable'
2
+ require 'ms/mzml/list'
3
+ require 'pathname'
4
+
5
+ module MS
6
+ class Mzml
7
+ class SourceFile
8
+ include MS::CV::Paramable
9
+
10
+ DEFAULT_SOURCEFILE_ID = 'sourcefile1'
11
+
12
+ # (required) An identifier for this file.
13
+ attr_accessor :id
14
+ # (required) Name of the source file, without reference to location
15
+ # (either URI or local path).
16
+ attr_accessor :name
17
+ # (required) URI-formatted location where the file was retrieved.
18
+ attr_accessor :location
19
+
20
+ # expands the path and sets the name and location
21
+ def self.[](path, opts={})
22
+ self.new DEFAULT_SOURCEFILE_ID, *uri_basename_and_path(path)
23
+ end
24
+
25
+ def self.uri_basename_and_path(file)
26
+ pathname = Pathname.new(path)
27
+ dir = pathname.expand_path.dirname
28
+ dir = '/'+dir unless (dir[0] == '/')
29
+ [pathname.basename, 'file://'+ dir]
30
+ end
31
+
32
+ def initialize(id="sourcefile1", name="mspire-simulated", location='file://', opts={params: []}, &block)
33
+ @id, @name, @location = id, name, location
34
+ describe!(*opts[:params])
35
+ block.call(self) if block
36
+ end
37
+
38
+ def to_xml(builder)
39
+ builder.sourceFile( id: @id, name: @name, location: @location ) do |sf_n|
40
+ super(sf_n)
41
+ end
42
+ builder
43
+ end
44
+
45
+ extend(MS::Mzml::List)
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,91 @@
1
+ require 'ms/mzml/data_array_container_like'
2
+ require 'ms/spectrum_like'
3
+ require 'ms/mzml/data_array'
4
+ require 'ms/mzml/scan_list'
5
+ require 'ms/mzml/precursor'
6
+ require 'ms/mzml/product'
7
+
8
+ module MS
9
+ class Mzml
10
+
11
+ # MAY supply a *child* term of MS:1000465 (scan polarity) only once
12
+ # e.g.: MS:1000129 (negative scan)
13
+ # e.g.: MS:1000130 (positive scan)
14
+ # MUST supply a *child* term of MS:1000559 (spectrum type) only once
15
+ # e.g.: MS:1000322 (charge inversion mass spectrum)
16
+ # e.g.: MS:1000325 (constant neutral gain spectrum)
17
+ # e.g.: MS:1000326 (constant neutral loss spectrum)
18
+ # e.g.: MS:1000328 (e/2 mass spectrum)
19
+ # e.g.: MS:1000341 (precursor ion spectrum)
20
+ # e.g.: MS:1000581 (CRM spectrum)
21
+ # e.g.: MS:1000582 (SIM spectrum)
22
+ # e.g.: MS:1000583 (SRM spectrum)
23
+ # e.g.: MS:1000789 (enhanced multiply charged spectrum)
24
+ # e.g.: MS:1000790 (time-delayed fragmentation spectrum)
25
+ # et al.
26
+ # MUST supply term MS:1000525 (spectrum representation) or any of its children only once
27
+ # e.g.: MS:1000127 (centroid spectrum)
28
+ # e.g.: MS:1000128 (profile spectrum)
29
+ # MAY supply a *child* term of MS:1000499 (spectrum attribute) one or more times
30
+ # e.g.: MS:1000285 (total ion current)
31
+ # e.g.: MS:1000497 (zoom scan)
32
+ # e.g.: MS:1000504 (base peak m/z)
33
+ # e.g.: MS:1000505 (base peak intensity)
34
+ # e.g.: MS:1000511 (ms level)
35
+ # e.g.: MS:1000527 (highest observed m/z)
36
+ # e.g.: MS:1000528 (lowest observed m/z)
37
+ # e.g.: MS:1000618 (highest observed wavelength)
38
+ # e.g.: MS:1000619 (lowest observed wavelength)
39
+ # e.g.: MS:1000796 (spectrum title)
40
+ # et al.
41
+ class Spectrum
42
+ include MS::SpectrumLike
43
+ include MS::Mzml::DataArrayContainerLike
44
+
45
+ # (optional) an MS::Mzml::SourceFile object
46
+ attr_accessor :source_file
47
+
48
+ # (optional) The identifier for the spot from which this spectrum was derived, if a
49
+ # MALDI or similar run.
50
+ attr_accessor :spot_id
51
+
52
+ ###########################################
53
+ # SUBELEMENTS
54
+ ###########################################
55
+
56
+ # (optional) a ScanList object
57
+ attr_accessor :scan_list
58
+
59
+ # (optional) List and descriptions of precursor isolations to the spectrum
60
+ # currently being described, ordered.
61
+ attr_accessor :precursors
62
+
63
+ # (optional) List and descriptions of product isolations to the spectrum
64
+ # currently being described, ordered.
65
+ attr_accessor :products
66
+
67
+ # the most common param to pass in would be ms level: 'MS:1000511'
68
+ #
69
+ # This would generate a spectrum of ms_level=2 :
70
+ #
71
+ # MS::Mzml::Spectrum.new(0, "scan=1", 'MS:1000511')
72
+ def initialize(*args, &block)
73
+ super(*args)
74
+ block.call(self) if block
75
+ end
76
+
77
+ # see SpectrumList for generating the entire list
78
+ def to_xml(builder)
79
+ atts = {}
80
+ atts[:sourceFile] = @source_file.id if @source_file
81
+ atts[:spotID] = @spot_id if @spot_id
82
+ super(builder, atts) do |node|
83
+ @scan_list.list_xml( node ) if @scan_list
84
+ MS::Mzml::Precursor.list_xml(@precursors, node) if @precursors
85
+ MS::Mzml::Product.list_xml(@products, node) if @products
86
+ end
87
+ end
88
+
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,42 @@
1
+ require 'ms/mzml/spectrum'
2
+
3
+ module MS
4
+ class Mzml
5
+ class SpectrumList < Array
6
+
7
+ # a DataProcessing object
8
+ attr_reader :default_data_processing
9
+
10
+ def initialize(default_data_processing, spectra=[])
11
+ @default_data_processing = default_data_processing
12
+ super(spectra)
13
+ end
14
+
15
+ # This method takes an MS::Spectrum object and transforms it into an
16
+ # MS::Mzml::Spectrum object and puts it in the internal list
17
+ def add_ms_spectrum(spectrum, id)
18
+ mzml_spec = MS::Mzml::Spectrum.new(id)
19
+ mzml_spec.data = spectrum.data
20
+ self << mzml_spec
21
+ end
22
+
23
+ # takes an array of spectra and performs add_spectrum on each
24
+ # returns self
25
+ def add_spectra(spectra, ids=[])
26
+ spectra.zip(ids).each_with_index {|(spec,id),i| add_spectrum(spec, "spectrum=#{i+1}") }
27
+ self
28
+ end
29
+
30
+ def to_xml(builder)
31
+ builder.spectrumList(count: self.size, defaultDataProcessingRef: @default_data_processing.id) do |spl_n|
32
+ self.each_with_index do |spectrum,i|
33
+ spectrum.index = i unless spectrum.index
34
+ spectrum.to_xml(spl_n)
35
+ end
36
+ end
37
+ builder
38
+ end
39
+
40
+ end
41
+ end
42
+ end