class Mspire::Plms1
Prince Lab MS 1: a simple format for reading and writing MS1 level mass spec data
see Mspire::Plms1::SPECIFICATION
for the file specification
Constants
- SPECIFICATION
Attributes
scan_numbers[RW]
an array of scan numbers
spectra[RW]
an array that contains spectrum objects
times[RW]
an array of time data
Public Class Methods
new(_scan_numbers=[], _times=[], _spectra=[])
click to toggle source
# File lib/mspire/plms1.rb, line 71 def initialize(_scan_numbers=[], _times=[], _spectra=[]) (@scan_numbers, @times, @spectra) = [_scan_numbers, _times, _spectra] end
Public Instance Methods
read(io_or_filename)
click to toggle source
returns self for chaining
# File lib/mspire/plms1.rb, line 86 def read(io_or_filename) openany(io_or_filename) do |io| num_scans = read_uint32(io)[0] @scan_numbers = read_uint32(io, num_scans) @times = read_float64(io, num_scans) @spectra = num_scans.times.map do data = read_uint32(io)[0].times.map do read_float64(io, read_uint32(io)[0]) end Mspire::Spectrum.new(data) end end self end
read_float64(io, cnt=1)
click to toggle source
returns an array of Floats
# File lib/mspire/plms1.rb, line 81 def read_float64(io, cnt=1) io.read(cnt*8).unpack("E*") end
read_uint32(io, cnt=1)
click to toggle source
returns an array of Integers
# File lib/mspire/plms1.rb, line 76 def read_uint32(io, cnt=1) io.read(cnt*4).unpack("V*") end
write(filename=nil, ascii=false)
click to toggle source
returns the string if no filename given
# File lib/mspire/plms1.rb, line 136 def write(filename=nil, ascii=false) if ascii write_ascii(filename) else write_file_or_string(filename) do |out| write_uint32(out, spectra.size) write_uint32(out, scan_numbers) write_float64(out, times) spectra.each do |spectrum| write_uint32(out, spectrum.size) # number of rows if spectrum.size > 0 mzs = spectrum.mzs write_uint32(out, mzs.size) write_float64(out, mzs) intensities = spectrum.intensities write_uint32(out, intensities.size) write_float64(out, intensities) end end end end end
write_ascii(filename=nil)
click to toggle source
writes an ascii version of the format It is the same as the binary format, except a newline follows each length indicator or array of data. An empty line represents an empty array.
# File lib/mspire/plms1.rb, line 115 def write_ascii(filename=nil) write_file_or_string(filename) do |out| out.puts scan_numbers.size out.puts scan_numbers.join(' ') out.puts times.join(' ') spectra.each do |spectrum| puts "HIAYDSFA DSF" puts spectrum.class p spectrum out.puts spectrum.size if spectrum.size > 0 out.puts spectrum.mzs.size out.puts spectrum.mzs.join(' ') out.puts spectrum.intensities.size out.puts spectrum.intensities.join(' ') end end end end
write_float64(out, data)
click to toggle source
# File lib/mspire/plms1.rb, line 106 def write_float64(out, data) to_pack = data.is_a?(Array) ? data : [data] out << to_pack.pack('E*') end
write_uint32(out, data)
click to toggle source
# File lib/mspire/plms1.rb, line 101 def write_uint32(out, data) to_pack = data.is_a?(Array) ? data : [data] out << to_pack.pack('V*') end