lib/mspire/mzml/run.rb
require 'mspire/paramable'
require 'mspire/mzml/io_index'
require 'mspire/mzml/spectrum_list'
require 'mspire/mzml/chromatogram_list'
module Mspire
class Mzml
class Run
include Mspire::Paramable
# required
attr_accessor :default_instrument_configuration
# optional
attr_accessor :default_source_file
# required
attr_accessor :id
# optional
attr_accessor :sample
# optional
attr_accessor :start_time_stamp
# a SpectrumList object (a special array of spectra)
attr_accessor :spectrum_list
# takes a ChromatogramList object (a special array of chromatograms)
attr_accessor :chromatogram_list
# yields self if given a block
def initialize(id, default_instrument_configuration)
@id = id
@default_instrument_configuration = default_instrument_configuration
params_init
if block_given?
yield self
end
end
def to_xml(builder)
atts = { id: @id,
defaultInstrumentConfigurationRef: @default_instrument_configuration.id
}
atts[:defaultSourceFileRef] = @default_source_file.id if @default_source_file
atts[:sampleRef] = @sample.id if @sample
atts[:startTimeStamp] = @start_time_stamp if @start_time_stamp
default_ids = { instrument_configuration: @default_instrument_configuration.id }
builder.run(atts) do |run_n|
super(run_n)
spectrum_list.to_xml(run_n, default_ids) if spectrum_list
chromatogram_list.to_xml(run_n, default_ids) if chromatogram_list
end
builder
end
# expects link to have the following keys:
#
# :ref_hash
# :instrument_config_hash
# :source_file_hash
# :sample_hash
# :data_processing_hash
# :spectrum_default_data_processing
# :chromatogram_default_data_processing
# :index_list
def self.from_xml(io, xml, link)
# expects that the DataProcessing objects to link to have *already* been
# parsed (parse the defaultDataProcessingRef's after grabbing the
# index, then grab the DataProcessing object associated with that id).
obj = self.new(xml[:id],
link[:instrument_configuration_hash][xml[:defaultInstrumentConfigurationRef]]
)
obj.start_time_stamp = xml[:startTimeStamp]
link[:default_instrument_configuration] = obj.default_instrument_configuration
# two optional object refs
if def_source_ref=xml[:defaultSourceFileRef]
obj.default_source_file = link[:source_file_hash][def_source_ref]
end
if sample_ref=xml[:sampleRef]
obj.sample = link[:sample_hash][sample_ref]
end
obj.describe_from_xml!(xml, link[:ref_hash])
index_list = link[:index_list]
[:spectrum, :chromatogram].each do |list_type|
next unless (byte_index = index_list[list_type])
io_index = IOIndex.new(io, byte_index, link)
list_obj = Mspire::Mzml.const_get(list_type.to_s.capitalize + "List")
.new(link["#{list_type}_default_data_processing".to_sym],
io_index,
Hash[byte_index.ids.each_with_index.map.to_a]
)
obj.send(list_type.to_s + "_list=", list_obj)
end
obj
end
end
end
end