class Bio::Grid

Attributes

input[RW]
number[RW]
uuid[RW]

Public Class Methods

new(input,number, uuid) click to toggle source
# File lib/bio/grid.rb, line 6
def initialize(input,number, uuid)
        @input = input
        @number = number
        @uuid = uuid ? uuid : UUID.new.generate.split("-").first 
end
run(options) click to toggle source
# File lib/bio/grid.rb, line 12
def self.run(options)
        options[:number] = "all" unless options[:number]
        grid = self.new options[:input], options[:number], options[:uuid]
        options[:uuid] = grid.uuid unless options[:uuid]
        groups = grid.prepare_input_groups
        inputs = groups.keys.sort
        groups[inputs.shift].each_with_index do |input1,index|
                if options[:cmd]=~/<(\d+),(\d+)(,\d+)*>/
                        step = ($3) ? $3.tr(",","").to_i : 1
                        range = Range.new($1.to_i,$2.to_i,false).step(step).to_a
                        range.each do |value|
                                cmd_line = options[:cmd].gsub(/<(\d+),(\d+)(,\d+)*>/,value.to_s)
                                job = Bio::Grid::Job.new(options) # inherit global options
                                job.options[:parameter_value] = "-param:#{value}"
                                job.execute(cmd_line,inputs,input1,groups,index)
                        end
                elsif options[:params]
                        options[:params].each do |p|
                                cmd_line = options[:cmd].gsub(/<param>|<parameter>/,p)
                                job = Bio::Grid::Job.new(options)
                                job.options[:parameter_value] = "-param:#{p}"
                                job.execute(cmd_line,inputs,input1,groups,index)
                        end
                else
                        job = Bio::Grid::Job.new(options) # inherit global options
                        job.execute(options[:cmd],inputs,input1,groups,index)
                end

                break if options[:test]
        end                  
end

Public Instance Methods

prepare_input_groups() click to toggle source
# File lib/bio/grid.rb, line 44
def   prepare_input_groups
        groups = Hash.new {|h,k| h[k] = [] }
        self.input.each_with_index do |location,index|
                list = Dir.glob(location).sort
                raise ArgumentError,"Input file or folder #{location} do not exist!" if list.empty?
                if self.number == "all"
                        groups["input#{index+1}"] = [list]
                else
                        list.each_slice(self.number.to_i) {|subgroup| groups["input#{index+1}"] << subgroup}
                end
        end
        groups
end