16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/mspire/imzml/writer/commandline.rb', line 16
def self.run(argv, progname=$0)
default_config = "config.yaml"
scan_patterns = %w(flyback meandering random)
scan_types = %w(horizontal vertical)
scan_direction = %w(left-right right-left bottom-up top-down none)
scan_sequence = %w(top-down bottom-up left-right right-left)
default_dims = '800x600'
default_pixel_size = '1x1'
matrix_application_types = %w(sprayed precoated printed drieddroplet)
parser = Trollop::Parser.new do
banner <<-EOS
usage: #{File.basename(progname)} [OPTIONS] <file>.mzML ..."
output: <file>.imzML and <file>.ibd
* imzML docs:
http://www.maldi-msi.org/index.php?option=com_content&view=article&id=187&Itemid=67
* explanation of vocabulary (followed here):
http://www.maldi-msi.org/index.php?option=com_content&view=article&id=193&Itemid=66
* github repository:
https://github.com/princelab/mzml_to_imzml
EOS
text "\ngeneral:"
opt :config, "read a config file for default values. Command line options overide those from the config file ", :type => :string
opt :print_config, "print current options to #{default_config} and exit"
opt :omit_zeros, "remove zero values"
opt :combine, "combine all files and set the base name of resulting imzML and ibd files", :type => String
opt :outfile, "use a specific basename for the resulting file. Acts like --combine for multiple files", :type => String
text "\nimaging:"
opt :continuous, "assumes m/z values are the same for every scan. The 'processed' storage format is used unless this flag is given."
opt :scan_pattern, scan_patterns.join('|'), :default => scan_patterns.first
opt :scan_type, scan_types.join('|'), :default => scan_types.first
opt :linescan_direction, scan_direction.join('|'), :default => scan_direction.first
opt :linescan_sequence, scan_sequence.join('|'), :default => scan_sequence.first
opt :max_dimensions_pixels, "maximum X by Y pixels (e.g. 300x100)", :default => default_dims
opt :shots_per_position, "number of spectra per position", :default => 1
opt :pixel_size, "X by Y of a single pixel in microns (μm)", :default => default_pixel_size
opt :max_dimensions_microns, "maximum X by Y in microns (e.g. 25x20)", :default => default_dims
text "\ncontact: "
opt :name, "name of the person or organization", :type => :string
opt :address, "address of the person or organization", :type => :string
opt :url, "url of person or organization", :type => :string
opt :email, "email of person or organization", :type => :string
opt :organization, "home institution of contact", :type => :string
text "\nDESI: "
opt :solvent, "the solvent used", :type => :string
opt :solvent_flowrate, "flowrate of the solvent (ml/min)", :type => :float
opt :spray_voltage, "spray voltage in kV", :type => :float
opt :target_material, "the material the target is made of", :type => :string
text "\nMALDI: "
opt :matrix_application_types, "#{matrix_application_types.join('|')} (comma separated)", :type => :string
opt :matrix_solution_concentration, "in grams per liter", :type => :float
opt :matrix_solution, "the chemical solution used as matrix (e.g., DHB)", :type => :string
end
opts = parser.parse(argv)
opts = Hash[YAML.load_file(opts[:config]).map {|k,v| [k.to_sym, v]}].merge(opts) if opts[:config]
opts[:combine] ||= opts.delete(:outfile)
if opts.delete(:print_config)
puts "writing defaults to: #{default_config}"
string_opts = Hash[ opts.map {|k,v| [k.to_s, v] } ]
%w(help).each {|key| string_opts.delete key }
string_opts.delete_if {|k,v| k =~ /_given$/ }
File.write(default_config, string_opts.to_yaml)
exit
end
if argv.size == 0
return parser.educate
end
opts[:data_structure] = (opts.delete(:continuous) ? :continuous : :processed)
opts[:matrix_application_types] = opts[:matrix_application_types].split(',') if opts[:matrix_application_types]
writer = Mspire::Imzml::Writer.new
writer.write(argv, opts)
end
|