rpipe 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.1.0
data/bin/rpipe CHANGED
@@ -5,6 +5,7 @@ begin
5
5
  require 'trollop'
6
6
  require 'output_catcher'
7
7
  require 'pp'
8
+ require 'etc'
8
9
  require 'log4r'
9
10
  rescue LoadError
10
11
  require 'rubygems'
@@ -24,8 +25,8 @@ EOS
24
25
  # Main Function for the CLI runner.
25
26
  def run!
26
27
  options, driver = setup_options
27
- run_with_logging File.basename(driver, File.extname(driver)) do
28
- $Log.info "Begin Pipelining #{driver}"
28
+ run_with_logging File.basename(driver, File.extname(driver)), options do
29
+ $Log.info "Begin Pipelining #{driver} | #{Etc.getlogin} on #{`hostname`}"
29
30
  run_pipe(options, driver)
30
31
  $Log.info "Finished Pipelining #{driver}"
31
32
  end
@@ -61,6 +62,7 @@ def setup_options
61
62
  banner BANNER
62
63
  opt :only, "Perform only a certain step (recon, preproc, stats)", :type => String
63
64
  opt :debug, "Be more wordy than usual for debugging"
65
+ opt :log_directory, "Output Directory for processing logs.", :type => String
64
66
  end
65
67
 
66
68
  if opts[:only_given]
@@ -71,7 +73,7 @@ def setup_options
71
73
 
72
74
  Trollop::die "Driver file not given" if (ARGV.size < 1)
73
75
  driver = ARGV.shift
74
- Trollop::die :driver, "file does not exist" unless File.exist?(driver)
76
+ Trollop::die "Driver file #{driver} does not exist. Check the path to that file and try again" unless File.exist?(driver)
75
77
 
76
78
  pp opts if opts[:debug]
77
79
 
@@ -79,18 +81,28 @@ def setup_options
79
81
  end
80
82
 
81
83
  # Setup Tee IO's for Out and Error and start logs for them.
82
- def run_with_logging(logfile_stem, &block)
83
- out_logfile = logfile_stem + '.out'
84
- error_logfile = logfile_stem + '.err'
85
- command_logfile = logfile_stem + '.log'
84
+ def run_with_logging(logfile_stem, options, &block)
85
+ if options[:log_directory]
86
+ log_dir = options[:log_directory]
87
+ else
88
+ # If no explicit directory has been passed as an argument, check to see if
89
+ # a directory named "logs" exists. If so, use that, otherwise use the current directory.
90
+ log_dir = File.directory?('logs') ? 'logs' : '.'
91
+ end
92
+ out_logfile = File.join(log_dir, logfile_stem + '.out')
93
+ error_logfile = File.join(log_dir, logfile_stem + '.err')
94
+ command_logfile = File.join(log_dir, logfile_stem + '.sh')
86
95
 
87
- teeout = Tee.new(out_logfile, :out)
88
- teeerr = Tee.new(error_logfile, :err)
96
+ teeout = Tee.new(out_logfile, :out, 'a')
97
+ teeerr = Tee.new(error_logfile, :err, 'a')
89
98
 
90
- setup_logger(command_logfile, teeout)
99
+ setup_logger(command_logfile, teeout, teeerr, options)
91
100
 
92
101
  begin
93
102
  yield
103
+ rescue Exception => e
104
+ $ErrorLog.error e
105
+ raise e
94
106
  ensure
95
107
  # Discard the error log if there were no errors.
96
108
  # Size returns nil for an empty file.
@@ -100,15 +112,19 @@ def run_with_logging(logfile_stem, &block)
100
112
  end
101
113
 
102
114
  # Log Commands to a file and Output to stdout
103
- def setup_logger(command_logfile, tee)
115
+ def setup_logger(command_logfile, teeout, teeerr, options)
104
116
  console_pattern = "#{'*' * 10} %m [ %d ]"
105
117
  $Log = Log4r::Logger.new('output')
106
- $Log.add Log4r::IOOutputter.new(:stdout, tee, :formatter => FlashFormatter.new)
118
+ $Log.level = Log4r::DEBUG
119
+ $Log.add Log4r::IOOutputter.new(:stdout, teeout, :formatter => FlashFormatter.new)
107
120
 
108
121
  File.delete command_logfile if File.exist? command_logfile
109
122
  $CommandLog = Log4r::Logger.new('command::output')
110
- $CommandLog.add Log4r::FileOutputter.new(:file, :filename => command_logfile, :formatter => Log4r::PatternFormatter.new(:pattern => "%m"))
111
- $CommandLog.add Log4r::IOOutputter.new(:stdout, tee, :formatter => FlashFormatter.new)
123
+ $CommandLog.add Log4r::FileOutputter.new(:file, :filename => command_logfile, :trunc => false, :formatter => Log4r::PatternFormatter.new(:pattern => "%m"))
124
+ $CommandLog.add Log4r::IOOutputter.new(:stdout, teeout, :formatter => FlashFormatter.new)
125
+
126
+ $ErrorLog = Log4r::Logger.new('error::output')
127
+ $ErrorLog.add Log4r::IOOutputter.new(:stderr, teeerr, :formatter => Log4r::PatternFormatter.new(:pattern => "%m"))
112
128
  end
113
129
 
114
130
 
@@ -25,12 +25,15 @@ module JohnsonMerit220Visit1Preproc
25
25
 
26
26
  def run_preproc_mfile
27
27
  raise ScriptError, "Can't find any slice-time corrected images in #{@origdir}" if image_files.empty?
28
+
29
+ validate_existence_of @image_files
30
+
28
31
  queue = MatlabQueue.new
29
- queue.paths << ['/Applications/spm/spm8/spm8_current',
30
- '/apps/spm/spm8_current',
31
- File.join(@libdir, 'custom_methods'),
32
- File.join(@libdir, 'matlab_helpers')
33
- ]
32
+ queue.paths << [
33
+ File.join(@spmdir, 'config'),
34
+ File.join(@spmdir, 'matlabbatch'),
35
+ File.expand_path(File.join(@libdir, 'custom_methods')),
36
+ File.expand_path(File.join(@libdir, 'matlab_helpers')) ]
34
37
 
35
38
  queue << "JohnsonMerit220Visit1Preproc('#{@procdir}/', \
36
39
  { #{image_files.collect {|im| "'#{File.basename(im)}'"}.join(' ')} }, \
@@ -44,10 +44,11 @@ module JohnsonMerit220Visit1Stats
44
44
  raise ScriptError, "Can't find any smoothed, warped images in #{@statsdir}" if images.empty?
45
45
 
46
46
  queue = MatlabQueue.new
47
- queue.paths << ['/Applications/spm/spm8/spm8_current',
48
- '/apps/spm/spm8_current',
49
- File.join(@libdir, 'custom_methods'),
50
- File.join(@libdir, 'matlab_helpers') ]
47
+ queue.paths << [
48
+ File.join(@spmdir, 'config'),
49
+ File.join(@spmdir, 'matlabbatch'),
50
+ File.expand_path(File.join(@libdir, 'custom_methods')),
51
+ File.expand_path(File.join(@libdir, 'matlab_helpers')) ]
51
52
 
52
53
  queue << "#{@method}('#{@statsdir}/', \
53
54
  { #{images.collect {|im| "'#{File.basename(im)}'"}.join(' ')} }, \
@@ -46,6 +46,7 @@ module DefaultStats
46
46
  # Finally runs the stats job and writes output to current working directory.
47
47
  def run_stats_spm_job
48
48
  # TODO
49
+ # These are mostly being implemented in custom methods.
49
50
  end
50
51
 
51
52
  # Create onsets files using logfile responses for given conditions.
@@ -81,7 +81,7 @@ module DefaultRecon
81
81
  epirecon_cmd_format = "epirecon_ex -f %s -NAME %s -skip %d -scltype=0"
82
82
  epirecon_cmd_options = [@pfile_data, outfile, volumes_to_skip]
83
83
  epirecon_cmd = epirecon_cmd_format % epirecon_cmd_options
84
- raise ScriptError, "Problem running #{epirecon_cmd}" unless run(epirecon_cmd)
84
+ raise ScriptError, "Problem running #{epirecon_cmd}" unless run(epirecon_cmd)
85
85
  end
86
86
 
87
87
  alias_method :prepare, :reconstruct_sequence
@@ -99,11 +99,13 @@ module DefaultRecon
99
99
  # Create a new unzipped local copy of the ref.dat file and link it into
100
100
  # pwd for reconstruction.
101
101
  def setup_refdat(refdat_stem)
102
- base_refdat_path = File.join(@rawdir, refdat_stem)
102
+ $Log.debug "Using refdat file: #{refdat_stem}"
103
+ base_refdat_path = File.join(@rawdir, refdat_stem)
103
104
  refdat_path = File.exist?(base_refdat_path) ? base_refdat_path : base_refdat_path + ".bz2"
104
105
  raise IOError, "#{refdat_path} does not exist." unless File.exist?(refdat_path)
105
106
  local_refdat_file = Pathname.new(refdat_path).local_copy
106
- FileUtils.ln_s(local_refdat_file, Dir.pwd, :force => true)
107
+ # epirecon expects a reference named _exactly_ ref.dat, so that's what the link should be named.
108
+ FileUtils.ln_s(local_refdat_file, File.join(Dir.pwd, 'ref.dat'), :force => true)
107
109
  end
108
110
  end
109
- end
111
+ end
@@ -51,10 +51,14 @@ class StatsJobGenerator < JobGenerator
51
51
 
52
52
  def logfiles
53
53
  return @logfiles if @logfiles
54
- logfiles = Dir.glob(File.join(@responses['directory'], @config['subid'] + "*.txt"))
55
- raise IOError, "No logfiles found in #{@responses['directory']} matching #{@config['subid']}" if logfiles.empty?
56
- logfiles = logfiles.collect! {|file| Logfile.new(file)}.sort
57
- @logfiles = logfiles.collect! {|file| File.basename(file.textfile) }
54
+ if @responses['directory']
55
+ logfiles = Dir.glob(File.join(@responses['directory'], @config['subid'] + "*.txt"))
56
+ raise IOError, "No logfiles found in #{@responses['directory']} matching #{@config['subid']}" if logfiles.empty?
57
+ logfiles = logfiles.collect! {|file| Logfile.new(file)}.sort
58
+ @logfiles = logfiles.collect! {|file| File.basename(file.textfile) }
59
+ else
60
+ puts "Warning: No responses specified."
61
+ end
58
62
  end
59
63
 
60
64
  def regressorsfiles
@@ -31,7 +31,7 @@ class WorkflowGenerator < JobGenerator
31
31
  @spec['subid'] = parse_subid
32
32
  @spec['study_procedure'] = @config['study_procedure'] ||= guess_study_procedure_from(@rawdir)
33
33
 
34
- config_requires 'responses_dir'
34
+ # config_requires 'responses_dir'
35
35
  end
36
36
 
37
37
  # Create and return a workflow spec to drive processing
@@ -6,7 +6,7 @@ def run(command)
6
6
 
7
7
  status = POpen4::popen4(command) do |stdout, stderr|
8
8
  puts stdout.read.strip
9
- puts stderr.read.strip
9
+ $Log.error stderr.read.strip
10
10
  end
11
11
 
12
12
  status && status.exitstatus == 0 ? true : false
data/lib/logfile.rb CHANGED
@@ -76,12 +76,12 @@ class Logfile
76
76
  def write_mat(prefix)
77
77
  queue = MatlabQueue.new
78
78
  queue.paths << [
79
- Pathname.new(File.join(File.dirname(__FILE__), 'matlab_helpers'))
79
+ Pathname.new(File.join(File.dirname(__FILE__), 'matlab_helpers')).realpath
80
80
  ]
81
81
 
82
82
  raise ScriptError, "Can't find #{@csv_filename}" unless File.exist?(@csv_filename)
83
83
 
84
- queue << "prepare_onsets_xls( \
84
+ queue << "prepare_onsets( \
85
85
  '#{@csv_filename}', \
86
86
  '#{prefix}', \
87
87
  { #{@conditions.collect {|c| "'#{c}'"}.join(' ') } } \
@@ -15,14 +15,12 @@ class MatlabQueue
15
15
  end
16
16
 
17
17
  def to_s
18
- [
19
- @paths.flatten.collect {|path| "addpath(genpath('#{path}'))"},
20
- @commands
21
- ].flatten.join('; ')
18
+ @commands.flatten.join(', ')
22
19
  end
23
20
 
24
21
  def run!
25
- cmd = @ml_command + " -r \"#{ to_s }; exit\" "
22
+ set_matlabpath
23
+ cmd = @ml_command + " -r \"#{ escape_error(to_s) }, exit\" "
26
24
  @success = run(cmd)
27
25
  end
28
26
 
@@ -30,8 +28,22 @@ class MatlabQueue
30
28
  @commands.send(m, *args, &block)
31
29
  end
32
30
 
31
+ # Add paths that should be available for Matlab scripts.
33
32
  def add_to_path(*args)
34
33
  args.each { |arg| @paths << arg }
35
34
  end
36
35
 
36
+ private
37
+
38
+ # Ensure all the paths from #MatlabQueue @paths instance var are present.
39
+ def set_matlabpath
40
+ mlpath = ENV['MATLABPATH'].split(":")
41
+ @paths.flatten.collect { |path| mlpath << path }
42
+ $Log.debug ENV['MATLABPATH'] = mlpath.uniq.join(":")
43
+ end
44
+
45
+ def escape_error(command)
46
+ "try; #{command}; catch exception; display(getReport(exception)); pause(1); end"
47
+ end
48
+
37
49
  end
@@ -1,9 +1,16 @@
1
- function [] = prepare_onsets_xls(csvfile, matfileprefix, conditions)
1
+ function [] = prepare_onsets(csvfile, matfileprefix, conditions)
2
2
  %IMPORTFILE(FILETOREAD1)
3
3
  % Imports data from the specified file
4
4
  % FILETOREAD1: file to read
5
5
 
6
- import_csv(csvfile);
6
+ try
7
+ import_csv(csvfile);
8
+ catch exception
9
+ % Since this is running in a script, catch errors and force Matlab to exit
10
+ % instead of hanging. (Not exactly elegant, but it works.)
11
+ ['Error Importing CSV' exception.identifier]
12
+ exit
13
+ end
7
14
 
8
15
  for i = 1:length(conditions)
9
16
  condition = conditions{i};
data/lib/rpipe.rb CHANGED
@@ -23,7 +23,7 @@ class JobStep
23
23
 
24
24
  COLLISION_POLICY = :panic # options -- :panic, :destroy, :overwrite
25
25
 
26
- attr_accessor :subid, :rawdir, :origdir, :procdir, :statsdir, :spmdir, :collision_policy, :libdir
26
+ attr_accessor :subid, :rawdir, :origdir, :procdir, :statsdir, :spmdir, :collision_policy, :libdir, :step
27
27
 
28
28
  # Intialize with two configuration option hashes - workflow_spec and job_spec
29
29
  def initialize(workflow_spec, job_spec)
@@ -33,10 +33,11 @@ class JobStep
33
33
  @origdir = job_spec['origdir'] || workflow_spec['origdir']
34
34
  @procdir = job_spec['procdir'] || workflow_spec['procdir']
35
35
  @statsdir = job_spec['statsdir'] || workflow_spec['statsdir']
36
- @spmdir = job_spec['spmdir'] || workflow_spec['spmdir']
36
+ @spmdir = job_spec['spmdir'] || workflow_spec['spmdir'] || default_spmdir
37
37
  @scans = job_spec['scans'] || workflow_spec['scans']
38
38
  @scan_labels = job_spec['scan_labels'] || workflow_spec['scan_labels']
39
39
  @collision_policy = (job_spec['collision'] || workflow_spec['collision'] || COLLISION_POLICY).to_sym
40
+ @step = job_spec['step']
40
41
  @method = job_spec['method']
41
42
  include_custom_methods(@method)
42
43
  @libdir = File.dirname(Pathname.new(__FILE__).realpath)
@@ -49,8 +50,24 @@ class JobStep
49
50
  if module_name.nil? or ['default','wadrc'].include?(module_name)
50
51
  # do nothing, use default implementation
51
52
  else
52
- require module_name
53
- extend self.class.const_get(module_name.dot_camelize)
53
+ # Search the load path and require a file named after the custom method.
54
+ # Include methods contained in the custom method module.
55
+ # Ensure it's named properly according to file convention or it won't be correctly included.
56
+ begin
57
+ require module_name
58
+ extend self.class.const_get(module_name.dot_camelize)
59
+ rescue LoadError => e
60
+ puts "Unable to find the specified method #{module_name}"
61
+ puts "Please either use a standard preprocessing step or put a method in app/methods/#{module_name}.rb"
62
+ puts "Looking in: #{$LOAD_PATH.join(":")}"
63
+ raise e
64
+ rescue NameError => e
65
+ $Log.error "Unable to include a module #{module_name.dot_camelize} (for custom #{@step} step)."
66
+ puts "Please check app/methods/#{module_name}.rb and ensure that you declared a module named _exactly_ #{module_name.dot_camelize}."
67
+ puts
68
+ raise e
69
+ end
70
+
54
71
  end
55
72
  end
56
73
 
@@ -78,7 +95,7 @@ class JobStep
78
95
  error = "
79
96
  Warning: Misconfiguration detected.
80
97
  You are missing the following required variables from your spec file:
81
- #{missing_vars.collect { |var| " - #{var} \n" } }
98
+ #{missing_vars.collect { |var| "\t - #{var} \n" } }
82
99
  "
83
100
 
84
101
  puts error
@@ -99,6 +116,19 @@ class JobStep
99
116
  end
100
117
  end
101
118
 
119
+ def validate_existence_of(*args)
120
+ missing_files = []
121
+ args.flatten.collect { |file| missing_files << file unless File.exist?(file) }
122
+ raise ScriptError, "Missing files: #{missing_files.join(", ")}" unless missing_files.empty?
123
+ end
124
+
125
+ def default_spmdir
126
+ spmdirs = %w{/Applications/spm/spm8/spm8_current /apps/spm/spm8_current}
127
+ spmdirs.each do |dir|
128
+ return dir if File.directory? dir
129
+ end
130
+ raise IOError, "Couldn't find default SPM directory in #{spmdirs.join("; ")}."
131
+ end
102
132
 
103
133
 
104
134
  end
@@ -182,7 +212,8 @@ class Stats < JobStep
182
212
  @bold_reps = stats_spec['bold_reps']
183
213
  @conditions = stats_spec['conditions'] || workflow_spec['conditions']
184
214
 
185
- job_requires 'bold_reps', 'conditions', 'procdir'
215
+ job_requires 'bold_reps', 'procdir', 'statsdir'
216
+ job_requires 'conditions' if @responses
186
217
  end
187
218
 
188
219
  end
@@ -221,6 +252,7 @@ class RPipe
221
252
  # the configuration.
222
253
  @workflow_spec = driver.kind_of?(Hash) ? driver : read_driver_file(driver)
223
254
 
255
+ # lib/default_logger.rb
224
256
  setup_logger
225
257
 
226
258
  jobs = @workflow_spec['jobs']
@@ -229,18 +261,29 @@ class RPipe
229
261
  @preproc_jobs << Preprocessing.new(@workflow_spec, job_params) if job_params['step'] == 'preprocess'
230
262
  @stats_jobs << Stats.new(@workflow_spec, job_params) if job_params['step'] == 'stats'
231
263
  end
232
-
233
- def jobs
234
- [@recon_jobs, @preproc_jobs, @stats_jobs].flatten
235
- end
236
-
237
264
  end
265
+
266
+ def jobs
267
+ [@recon_jobs, @preproc_jobs, @stats_jobs].flatten
268
+ end
238
269
 
239
270
  # Reads a YAML driver file, parses it with ERB and returns the Configuration Hash.
240
271
  # Raises an error if the file is not found in the file system.
241
272
  def read_driver_file(driver_file)
273
+ @matlab_paths = []
274
+ # Add Application Config files to the path if they are present.
275
+ application_directory = File.expand_path(File.join(File.dirname(driver_file), '..'))
276
+ %w( matlab methods jobs ).each do |directory|
277
+ code_dir = File.join(application_directory, directory)
278
+ if File.directory?(code_dir)
279
+ $LOAD_PATH.unshift(code_dir)
280
+ p = ENV['MATLABPATH'].split(":") << code_dir
281
+ ENV['MATLABPATH'] = p.join(":")
282
+ end
283
+ end
284
+
242
285
  raise(IOError, "Driver file not found: #{driver_file}") unless File.exist?(driver_file)
243
- YAML.load(ERB.new(File.read(driver_file)).result)
286
+ YAML.load(ERB.new(File.read(driver_file)).result)
244
287
  end
245
288
 
246
289
  private
data/rpipe.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rpipe}
8
- s.version = "0.0.3"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kristopher Kosmatka", "Erik Kastman"]
12
- s.date = %q{2010-07-16}
12
+ s.date = %q{2010-09-21}
13
13
  s.description = %q{Neuroimaging preprocessing the Ruby way}
14
14
  s.email = %q{kjkosmatka@gmail.com}
15
15
  s.executables = ["rpipe", "swallow_batch_run.rb", "create_driver.rb"]
@@ -59,7 +59,7 @@ Gem::Specification.new do |s|
59
59
  "lib/matlab_helpers/CreateFunctionalVolumeStruct.m",
60
60
  "lib/matlab_helpers/import_csv.m",
61
61
  "lib/matlab_helpers/matlab_queue.rb",
62
- "lib/matlab_helpers/prepare_onsets_xls.m",
62
+ "lib/matlab_helpers/prepare_onsets.m",
63
63
  "lib/rpipe.rb",
64
64
  "rpipe.gemspec",
65
65
  "spec/generators/preproc_job_generator_spec.rb",
@@ -126,7 +126,7 @@ Gem::Specification.new do |s|
126
126
  s.homepage = %q{http://github.com/brainmap/rpipe}
127
127
  s.rdoc_options = ["--charset=UTF-8"]
128
128
  s.require_paths = ["lib"]
129
- s.rubygems_version = %q{1.3.7}
129
+ s.rubygems_version = %q{1.3.6}
130
130
  s.summary = %q{Neuroimaging preprocessing the Ruby way}
131
131
  s.test_files = [
132
132
  "spec/generators/preproc_job_generator_spec.rb",
@@ -153,7 +153,7 @@ Gem::Specification.new do |s|
153
153
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
154
154
  s.specification_version = 3
155
155
 
156
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
156
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
157
157
  s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
158
158
  s.add_runtime_dependency(%q<metamri>, [">= 0"])
159
159
  s.add_runtime_dependency(%q<log4r>, [">= 0"])
@@ -77,7 +77,7 @@ class Tee < IO
77
77
 
78
78
  def initialize(filename, post = :out, mode_string = 'w')
79
79
  super(FILE_DESC[post], mode_string)
80
- @file = File.open(filename, 'w')
80
+ @file = File.open(filename, mode_string)
81
81
  eval("$std#{post} = self")
82
82
  end
83
83
 
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rpipe
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
7
+ - 1
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ version: 0.1.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - Kristopher Kosmatka
@@ -16,18 +15,16 @@ autorequire:
16
15
  bindir: bin
17
16
  cert_chain: []
18
17
 
19
- date: 2010-07-16 00:00:00 -05:00
18
+ date: 2010-09-21 00:00:00 -05:00
20
19
  default_executable:
21
20
  dependencies:
22
21
  - !ruby/object:Gem::Dependency
23
22
  name: thoughtbot-shoulda
24
23
  prerelease: false
25
24
  requirement: &id001 !ruby/object:Gem::Requirement
26
- none: false
27
25
  requirements:
28
26
  - - ">="
29
27
  - !ruby/object:Gem::Version
30
- hash: 3
31
28
  segments:
32
29
  - 0
33
30
  version: "0"
@@ -37,11 +34,9 @@ dependencies:
37
34
  name: metamri
38
35
  prerelease: false
39
36
  requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
37
  requirements:
42
38
  - - ">="
43
39
  - !ruby/object:Gem::Version
44
- hash: 3
45
40
  segments:
46
41
  - 0
47
42
  version: "0"
@@ -51,11 +46,9 @@ dependencies:
51
46
  name: log4r
52
47
  prerelease: false
53
48
  requirement: &id003 !ruby/object:Gem::Requirement
54
- none: false
55
49
  requirements:
56
50
  - - ">="
57
51
  - !ruby/object:Gem::Version
58
- hash: 3
59
52
  segments:
60
53
  - 0
61
54
  version: "0"
@@ -65,11 +58,9 @@ dependencies:
65
58
  name: POpen4
66
59
  prerelease: false
67
60
  requirement: &id004 !ruby/object:Gem::Requirement
68
- none: false
69
61
  requirements:
70
62
  - - ">="
71
63
  - !ruby/object:Gem::Version
72
- hash: 3
73
64
  segments:
74
65
  - 0
75
66
  version: "0"
@@ -79,11 +70,9 @@ dependencies:
79
70
  name: ruport
80
71
  prerelease: false
81
72
  requirement: &id005 !ruby/object:Gem::Requirement
82
- none: false
83
73
  requirements:
84
74
  - - ">="
85
75
  - !ruby/object:Gem::Version
86
- hash: 3
87
76
  segments:
88
77
  - 0
89
78
  version: "0"
@@ -142,7 +131,7 @@ files:
142
131
  - lib/matlab_helpers/CreateFunctionalVolumeStruct.m
143
132
  - lib/matlab_helpers/import_csv.m
144
133
  - lib/matlab_helpers/matlab_queue.rb
145
- - lib/matlab_helpers/prepare_onsets_xls.m
134
+ - lib/matlab_helpers/prepare_onsets.m
146
135
  - lib/rpipe.rb
147
136
  - rpipe.gemspec
148
137
  - spec/generators/preproc_job_generator_spec.rb
@@ -215,27 +204,23 @@ rdoc_options:
215
204
  require_paths:
216
205
  - lib
217
206
  required_ruby_version: !ruby/object:Gem::Requirement
218
- none: false
219
207
  requirements:
220
208
  - - ">="
221
209
  - !ruby/object:Gem::Version
222
- hash: 3
223
210
  segments:
224
211
  - 0
225
212
  version: "0"
226
213
  required_rubygems_version: !ruby/object:Gem::Requirement
227
- none: false
228
214
  requirements:
229
215
  - - ">="
230
216
  - !ruby/object:Gem::Version
231
- hash: 3
232
217
  segments:
233
218
  - 0
234
219
  version: "0"
235
220
  requirements: []
236
221
 
237
222
  rubyforge_project:
238
- rubygems_version: 1.3.7
223
+ rubygems_version: 1.3.6
239
224
  signing_key:
240
225
  specification_version: 3
241
226
  summary: Neuroimaging preprocessing the Ruby way