ms-xcalibur 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/History ADDED
@@ -0,0 +1,8 @@
1
+ == 0.2.0 / 2009-03-31
2
+
3
+ Updated release to use latest tap. Removed
4
+ raw_to_mgf task as it can be performed using
5
+ existing tasks.
6
+
7
+ * removed RawToMgf
8
+ * updated tasks
@@ -1,21 +1,19 @@
1
- Copyright (c) 2006-2008, Regents of the University of Colorado.
2
- Developer:: Simon Chiang, Biomolecular Structure Program, Hansen Lab
3
- Support:: CU Denver School of Medicine Deans Academic Enrichment Fund
1
+ Copyright (c) 2009, Regents of the University of Colorado.
4
2
 
5
- Permission is hereby granted, free of charge, to any person obtaining a copy of this
6
- software and associated documentation files (the "Software"), to deal in the Software
7
- without restriction, including without limitation the rights to use, copy, modify, merge,
8
- publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
9
- to whom the Software is furnished to do so, subject to the following conditions:
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
10
9
 
11
- The above copyright notice and this permission notice shall be included in all copies or
12
- substantial portions of the Software.
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
13
12
 
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
19
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21
- OTHER DEALINGS IN THE SOFTWARE.
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
data/README CHANGED
@@ -8,6 +8,14 @@ An {Mspire}[http://mspire.rubyforge.org] library supporting {Xcalibur}[http://ww
8
8
  * Github[http://github.com/bahuvrihi/ms-xcalibur/tree/master]
9
9
  * {Google Group}[http://groups.google.com/group/mspire-forum]
10
10
 
11
+ == Usage
12
+
13
+ Currently the primary use of Ms-Xcalibur is to convert RAW files to dta files. Use this workflow to do so:
14
+
15
+ % tap run -- raw_to_dta RAW_FILE --:s dta_to_mgf > MGF_FILE
16
+
17
+ The extract_msn.exe tool provided by Xcalibur/BioWorks must already be installed.
18
+
11
19
  == Installation
12
20
 
13
21
  Ms-Xcalibur is available as a gem on RubyForge[http://rubyforge.org/projects/mspire]. Use:
@@ -16,7 +24,7 @@ Ms-Xcalibur is available as a gem on RubyForge[http://rubyforge.org/projects/msp
16
24
 
17
25
  == Info
18
26
 
19
- Copyright (c) 2006-2008, Regents of the University of Colorado.
27
+ Copyright (c) 2009, Regents of the University of Colorado.
20
28
  Developer:: {Simon Chiang}[http://bahuvrihi.wordpress.com], {Biomolecular Structure Program}[http://biomol.uchsc.edu/], {Hansen Lab}[http://hsc-proteomics.uchsc.edu/hansenlab/]
21
29
  Support:: CU Denver School of Medicine Deans Academic Enrichment Fund
22
30
  Licence:: {MIT-Style}[link:files/MIT-LICENSE.html]
@@ -3,9 +3,20 @@ require 'constants'
3
3
  module Ms
4
4
  module Xcalibur
5
5
  module Convert
6
+
6
7
  # :startdoc::manifest convert dta files to mgf format
7
- # Converts a set of .dta files (Sequest format) into an .mgf (Mascot format)
8
- # file. The conversion is straightforward.
8
+ #
9
+ # Converts a set of dta files (Sequest format) into an mgf (Mascot format)
10
+ # file. By default the mgf file is printed to $stdout, so redirection is
11
+ # a good way to save the results.
12
+ #
13
+ # % tap run -- dta_to_mgf ... > results.mgf
14
+ #
15
+ # Alternatively, specify the output file using the output configuration.
16
+ #
17
+ # === Conversion
18
+ #
19
+ # The dta -> mgf conversion is straightforward:
9
20
  #
10
21
  # dta format:
11
22
  # [input_file.dta]
@@ -36,26 +47,17 @@ module Ms
36
47
 
37
48
  # Returns the unrounded mass of a proton (H - e) as calculated
38
49
  # from the {constants}[bioactive.rubyforge.org/constants] gem.
39
- config :proton_mass, Element['H'].mass - Particle['Electron'].mass, &c.num_or_nil # allows specification of an alternate proton mass
40
-
41
- def process(output_file, *inputs)
42
- return output_file if inputs.empty?
43
-
44
- dta_files = inputs.collect do |file|
45
- if File.directory?(file)
46
- Dir.glob(File.expand_path(File.join(file, "*.dta")))
47
- else
48
- raise "Not a .dta file: #{file}" unless file =~ /\.(dta)$/
49
- file
50
- end
51
- end
52
-
53
- prepare(output_file)
54
- File.open(output_file, "wb") do |target|
55
- h = proton_mass
56
-
57
- dta_files.flatten.each do |file|
58
- #log_basename(:merging, file)
50
+ config :proton_mass, Element['H'].mass - Particle['Electron'].mass, &c.num_or_nil # Specify the proton mass
51
+ config :output, $stdout, &c.io(:<<, :binmode) # The output file
52
+
53
+ def process(*dta_files)
54
+ prepare(output) if output.kind_of?(String)
55
+ open_io(output, 'w') do |target|
56
+ target.binmode
57
+
58
+ log :convert, "#{dta_files.length} dta files"
59
+ dta_files.each do |file|
60
+ check_terminate
59
61
  lines = File.read(file).split(/\r?\n/)
60
62
 
61
63
  # get the mh and z
@@ -70,19 +72,15 @@ module Ms
70
72
  target << %Q{BEGIN IONS
71
73
  TITLE=#{File.basename(file)}
72
74
  CHARGE=#{z}+
73
- PEPMASS=#{(mh + (z-1) * h)/ z}
75
+ PEPMASS=#{(mh + (z-1) * proton_mass)/ z}
74
76
  #{lines.join("\n")}
75
77
  END IONS
76
-
78
+
77
79
  }
78
80
  end
79
81
  end
80
- log(:made, output_file)
81
-
82
- output_file
83
82
  end
84
83
  end
85
-
86
84
  end
87
85
  end
88
86
  end
@@ -1,38 +1,54 @@
1
1
  module Ms
2
2
  module Xcalibur
3
3
  module Convert
4
+
4
5
  # :startdoc::manifest convert RAW files to dta format
5
- # Converts a .RAW file to dta files using extract_msn.exe
6
6
  #
7
- # extract_msn.exe is an Xcalibur/BioWorks tool that extracts spectra from .RAW
8
- # files into .dta (Sequest) format and must be installed for RawToDta to work.
9
- # RawToDta was developed against extract_msn version 4.0. You can check if
10
- # extract_msn is installed at the default location, as well as determine the
11
- # version of your executable using:
7
+ # Converts a RAW file to dta files using extract_msn.exe. Returns an
8
+ # array of the output dta files. By default extracted files are put
9
+ # in a directory named after the RAW file, but an alternate extraction
10
+ # directory can be specified iwth the output-dir option.
12
11
  #
13
- # % tap run -- xcalibur/convert/raw_to_dta --extract_msn_help
12
+ # RawToDta will skip extraction of an 'lcq_dta.txt' file and all the dta
13
+ # files listed therein exist in the output directory. This is good in
14
+ # most cases; if you want to force execution set force true for the run:
15
+ #
16
+ # % tap run --force -- raw_to_dta ...
17
+ #
18
+ # === extract_msn
19
+ #
20
+ # extract_msn.exe is an Xcalibur/BioWorks tool that extracts spectra from
21
+ # RAW files into dta (Sequest) format and must be installed for RawToDta
22
+ # to work. At present this means that RawToDta can only work on Windows.
23
+ #
24
+ # RawToDta was developed against extract_msn version 4.0. You can check
25
+ # if extract_msn is installed at the default location, as well as
26
+ # determine the version of your executable using:
27
+ #
28
+ # % tap run -- raw_to_dta --extract_msn_help
14
29
  #
15
30
  class RawToDta < Tap::FileTask
16
- config :extract_msn, 'C:\Xcalibur\System\Programs\extract_msn.exe' # the full path to the extract_msn executable
17
- config :first_scan, nil, &c.integer_or_nil # (-F)
18
- config :last_scan, nil, &c.integer_or_nil # (-L)
19
- config :lower_MW, nil, &c.num_or_nil # (-B)
20
- config :upper_MW, nil, &c.num_or_nil # (-T)
21
- config :precursor_mass_tol, 1.4, &c.num # (-M)
22
- config :num_allowed_intermediate_scans_for_grouping, 1, &c.integer # (-S)
23
- config :charge_state, nil, &c.integer_or_nil # (-C)
24
- config :num_required_group_scans, 1, &c.integer_or_nil # (-G)
25
- config :num_ions_required, 0, &c.integer_or_nil # (-I)
26
- config :intensity_threshold, nil, &c.integer_or_nil # (-E)
27
- config :use_unified_search_file, nil, &c.flag # (-U)
28
- config :subsequence, nil # (-Y)
29
- config :write_zta_files, nil, &c.flag # (-Z)
30
- config :perform_charge_calculations, nil, &c.flag # (-K)
31
- config :template_file, nil # (-O)
32
- config :options_string, nil # (-A)
33
- config :minimum_signal_to_noise, 3, &c.num # (-R)
34
- config :minimum_number_of_peaks, 5, &c.integer # (-r)
35
-
31
+ config :extract_msn, 'C:\Xcalibur\System\Programs\extract_msn.exe' # The full path to the extract_msn executable
32
+ config :first_scan, nil, :short => :F, &c.integer_or_nil
33
+ config :last_scan, nil, :short => :L, &c.integer_or_nil
34
+ config :lower_MW, nil, :short => :B, &c.num_or_nil
35
+ config :upper_MW, nil, :short => :T, &c.num_or_nil
36
+ config :precursor_mass_tol, 1.4, :short => :M, &c.num
37
+ config :num_allowed_intermediate_scans_for_grouping, 1, :short => :S, &c.integer
38
+ config :charge_state, nil, :short => :C, &c.integer_or_nil
39
+ config :num_required_group_scans, 1, :short => :G, &c.integer_or_nil
40
+ config :num_ions_required, 0, :short => :I, &c.integer_or_nil
41
+ config :intensity_threshold, nil, :short => :E, &c.integer_or_nil
42
+ config :use_unified_search_file, nil, :short => :U, &c.flag
43
+ config :subsequence, nil, :short => :Y
44
+ config :write_zta_files, nil, :short => :Z, &c.flag
45
+ config :perform_charge_calculations, nil, :short => :K, &c.flag
46
+ config :template_file, nil, :short => :O
47
+ config :options_string, nil, :short => :A
48
+ config :minimum_signal_to_noise, 3, :short => :R, &c.num
49
+ config :minimum_number_of_peaks, 5, :short => :r, &c.integer
50
+
51
+ config :output_dir, nil, &c.string_or_nil # The output directory
36
52
  config_attr(:extract_msn_help, nil, :arg_type => :flag) do |value| # Print the extract_msn help
37
53
  if value
38
54
  sh(extract_msn)
@@ -114,29 +130,52 @@ module Ms
114
130
  args.join(' ')
115
131
  end
116
132
 
117
- def process(input_file, output_dir=nil)
133
+ def process(input_file)
118
134
  extname = File.extname(input_file)
119
135
  raise "Expected .RAW file: #{input_file}" unless extname =~ /\.RAW$/i
120
136
 
121
137
  # Target the output to a directory with the same basename
122
138
  # as the raw file, unless otherwise specified.
123
- output_dir = input_file.chomp(File.extname(input_file)) if output_dir == nil
124
-
125
- mkdir(output_dir)
126
- command = cmd(input_file, output_dir)
127
-
128
- log :sh, command
129
- if app.quiet
130
- capture_sh(command, true)
139
+ output_dir = self.output_dir || input_file.chomp(File.extname(input_file))
140
+ current_dta_files = dta_files(output_dir)
141
+ if !current_dta_files.empty? && uptodate?(current_dta_files, input_file)
142
+ log_basename :uptodate, input_file
143
+ current_dta_files
131
144
  else
132
- sh(command)
133
- puts "" # add extra line to make logging nice
134
- end
145
+ unless File.exists?(extract_msn)
146
+ raise "extract_msn does not exist at: #{extract_msn}"
147
+ end
148
+
149
+ mkdir(output_dir)
150
+ command = cmd(input_file, output_dir)
135
151
 
136
- # This may select additional .dta files that existed before raw_to_dta
137
- # TODO - maybe read lcq_dta for files?
138
- Dir.glob( File.expand_path(File.join(output_dir, "*.dta")) )
152
+ log :sh, command
153
+ if app.quiet
154
+ capture_sh(command, true)
155
+ else
156
+ sh(command)
157
+ puts "" # add extra line to make logging nice
158
+ end
159
+
160
+ dta_files(output_dir)
161
+ end
162
+ end
163
+
164
+ # Returns an array of dta_files specified in the lcq_dta.txt file under
165
+ # output_dir. A simple glob is less preferable than reading the list of
166
+ # files from lcq_dta because there is no guarantee all the .dta file in
167
+ # the output directory should be used for a particular file.
168
+ def dta_files(output_dir)
169
+ lcq_dta = File.join(output_dir, 'lcq_dta.txt')
170
+
171
+ dta_files = []
172
+ File.read(lcq_dta).scan(/Datafile:\s(.*?\.dta)\s/) do |dta_file|
173
+ dta_files << File.join(output_dir, dta_file)
174
+ end if File.exists?(lcq_dta)
175
+
176
+ dta_files
139
177
  end
178
+
140
179
  end
141
180
  end
142
181
  end
@@ -3,7 +3,7 @@ module Ms
3
3
  # A simple representation of a peak file exported from Xcalibur Qual
4
4
  # Browser (v 2.0). The expected format of a peak file is as shown below:
5
5
  #
6
- # [peak_file.txt]
6
+ # [peak_file.txt]
7
7
  # SPECTRUM - MS
8
8
  # GSE_T29K_080703143635.raw
9
9
  # ITMS + c ESI Full ms [300.00-2000.00]
@@ -3,11 +3,12 @@ require 'ms/xcalibur/peak_file'
3
3
  module Ms
4
4
  module Xcalibur
5
5
  # :startdoc::manifest adds graph data to an exported peak file
6
- # Peakify adds points to signify the relative intensity
7
- # (ie the rounded intensity/max_intensity) of peaks in
8
- # an exported peak list. This can be useful as a visual aid.
9
6
  #
10
- # [a_sample_result.txt]
7
+ # Peakify adds points to signify the relative intensity (ie the rounded
8
+ # intensity/max_intensity) of peaks to a peak list extracted from Xcalibur
9
+ # Qual Browser (v 2.0).. This can be useful as a visual aid.
10
+ #
11
+ # [peakfile.txt]
11
12
  # SPECTRUM - MS
12
13
  # GSE_T29K_080703143635.raw
13
14
  # ITMS + c ESI Full ms [300.00-2000.00]
@@ -20,45 +21,44 @@ module Ms
20
21
  # 302.465759 3000.0 ..................................................
21
22
  # ...
22
23
  #
23
- # Options can be specified to filter out points within a
24
- # range of relative intensities. Peakify can handle exported
25
- # peak lists from Xcalibur Qual Browser (v 2.0).
24
+ # Options can be specified to filter out points within a range of relative
25
+ # intensities.
26
26
  #
27
27
  class Peakify < Tap::FileTask
28
28
 
29
- config :point_char, '.' # a character used for each intensity point
30
- config :min, 0, &c.num # min relative intenisty
31
- config :max, 100, &c.num # max relative intenisty
32
- config :sort, false, &c.flag # sort by intensity
29
+ config :point_char, '.' # A character used for each intensity point
30
+ config :min, 0, &c.num # Min relative intenisty
31
+ config :max, 100, &c.num # Max relative intenisty
32
+ config :sort, false, &c.flag # Sort by intensity
33
+ config :output, $stdout, &c.io(:<<, :binmode) # The output file
33
34
 
34
- def process(source, target=basepath(source, 'peaks.txt'))
35
- prepare(target)
35
+ def process(source)
36
+ prepare(output) if output.kind_of?(String)
37
+ open_io(output, 'w') do |target|
38
+ target.binmode
39
+
40
+ # now perform the task...
41
+ peak_file = PeakFile.parse File.read(source)
42
+ max_intensity = peak_file.data.inject(0) do |max, (mz, intensity)|
43
+ intensity > max ? intensity : max
44
+ end
36
45
 
37
- # now perform the task...
38
- peak_file = PeakFile.parse File.read(source)
39
- max_intensity = peak_file.data.inject(0) do |max, (mz, intensity)|
40
- intensity > max ? intensity : max
41
- end
46
+ range = min..max
47
+ peak_file.data = peak_file.data.collect do |(mz, intensity)|
48
+ percent = (intensity / max_intensity * 100)
49
+ next unless range.include?(percent)
42
50
 
43
- range = min..max
44
- peak_file.data = peak_file.data.collect do |(mz, intensity)|
45
- percent = (intensity / max_intensity * 100)
46
- next unless range.include?(percent)
51
+ [mz, intensity, point_char * percent.round]
52
+ end.compact
47
53
 
48
- [mz, intensity, point_char * percent.round]
49
- end.compact
54
+ if sort
55
+ peak_file.data = peak_file.data.sort_by do |(mz, intensity)|
56
+ intensity
57
+ end.reverse
58
+ end
50
59
 
51
- if sort
52
- peak_file.data = peak_file.data.sort_by do |(mz, intensity)|
53
- intensity
54
- end.reverse
60
+ target << peak_file.to_s
55
61
  end
56
-
57
- File.open(target, "wb") do |file|
58
- file << peak_file.to_s
59
- end
60
-
61
- target
62
62
  end
63
63
  end
64
64
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ms-xcalibur
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Chiang
@@ -9,9 +9,19 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-12-03 00:00:00 -07:00
12
+ date: 2009-03-31 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: configurable
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.4.2
24
+ version:
15
25
  - !ruby/object:Gem::Dependency
16
26
  name: tap
17
27
  type: :runtime
@@ -20,7 +30,7 @@ dependencies:
20
30
  requirements:
21
31
  - - ">="
22
32
  - !ruby/object:Gem::Version
23
- version: "0.11"
33
+ version: 0.12.4
24
34
  version:
25
35
  - !ruby/object:Gem::Dependency
26
36
  name: constants
@@ -39,15 +49,16 @@ executables: []
39
49
  extensions: []
40
50
 
41
51
  extra_rdoc_files:
52
+ - History
42
53
  - README
43
54
  - MIT-LICENSE
44
55
  files:
45
56
  - lib/ms/xcalibur/convert/dta_to_mgf.rb
46
57
  - lib/ms/xcalibur/convert/raw_to_dta.rb
47
- - lib/ms/xcalibur/convert/raw_to_mgf.rb
48
58
  - lib/ms/xcalibur/peak_file.rb
49
59
  - lib/ms/xcalibur/peakify.rb
50
60
  - tap.yml
61
+ - History
51
62
  - README
52
63
  - MIT-LICENSE
53
64
  has_rdoc: true
@@ -1,86 +0,0 @@
1
- require 'ms/xcalibur/convert/raw_to_dta'
2
- require 'ms/xcalibur/convert/dta_to_mgf'
3
-
4
- module Ms
5
- module Xcalibur
6
- module Convert
7
- # :startdoc::manifest convert RAW files to mgf format
8
- # Extracts spectra from a .RAW file and formats them as mgf (Mascot
9
- # Generic Format). RawToMgf is a workflow that uses the RawToDta
10
- # and DtaToMgf tasks, and can be configured through these tasks
11
- # using the following configuration files:
12
- #
13
- # config/xcalibur/convert
14
- # |- raw_to_mgf.yml # configures RawToMgf
15
- # `- raw_to_mgf
16
- # |- raw_to_dta.yml # configures RawToDta
17
- # `- dta_to_mgf.yml # configures DtaToMgf
18
- #
19
- # Mgf files are named after the RAW file they represent; the group
20
- # merge file is named 'merge.mgf' although an alternate merge file
21
- # name can be specified in the options.
22
- #
23
- class RawToMgf < Tap::Task
24
-
25
- define :raw_to_dta, Xcalibur::Convert::RawToDta
26
- define :dta_to_mgf, Xcalibur::Convert::DtaToMgf
27
- define :cleanup do |raw_dir|
28
- log :rm, raw_dir
29
-
30
- # take this stepwise to be a little safer...
31
- FileUtils.rm Dir.glob(raw_dir + "/*.dta")
32
- FileUtils.rm ["#{raw_dir }/lcq_dta.txt", "#{raw_dir }/lcq_profile.txt"]
33
- FileUtils.rmdir raw_dir
34
- end
35
-
36
- config :merge_file, 'merge.mgf' # the group merge file
37
- config :merge_individual, true, &c.switch # merge the dta's for each RAW file
38
- config :merge_group, true, &c.switch # merge the dta's for all RAW files
39
- config :remove_dta_files, true, &c.switch # clean up dta files upon completion
40
-
41
- def workflow
42
- group_results = []
43
- raw_to_dta.on_complete do |_result|
44
- if merge_individual
45
- input_file = _result._original[0]
46
- output_file = File.join( File.dirname(merge_file), File.basename(input_file).chomp(File.extname(input_file)) + ".mgf")
47
- dta_to_mgf.execute(output_file, *_result._iterate)
48
- end
49
-
50
- # collect _results to determine when all the input
51
- # files have been processed by raw_to_dta
52
- group_results << _result
53
-
54
- # When all the input files have been converted, merge the
55
- # group and enque a task to cleanup the dta files, as specified.
56
- if group_results.length == @n_inputs
57
- if merge_group
58
- all_results = group_results.collect {|_result| _result._iterate }.flatten
59
- dta_to_mgf.execute(merge_file, *all_results)
60
- end
61
- end
62
- end
63
- end
64
-
65
- def process(*input_files)
66
- @n_inputs = input_files.length
67
-
68
- dta_dirs = []
69
- input_files.each do |input_file|
70
- dta_dir = File.basename(input_file).chomp(File.extname(input_file))
71
- dta_dirs << dta_dir
72
- raw_to_dta.execute(input_file, dta_dir)
73
- end
74
-
75
- if remove_dta_files
76
- dta_dirs.each {|dir| cleanup.process(dir) }
77
- end
78
-
79
- @n_inputs = nil
80
- nil
81
- end
82
-
83
- end
84
- end
85
- end
86
- end