module CoutinhoAssembly::Runners

Public Instance Methods

run_sample_seqs(exe:, forward_reads:, reverse_reads:, single_reads:, out_dir:, out_prefix: nil, sampling_percentage:, num_subsamples:, random_seed: nil) click to toggle source
# File lib/coutinho_assembly.rb, line 123
  def run_sample_seqs(exe:,
                      forward_reads:,
                      reverse_reads:,
                      single_reads:,

                      out_dir:,
                      out_prefix: nil,

                      sampling_percentage:,
                      num_subsamples:,
                      random_seed: nil)

    unless out_prefix
      # Zero pad the left for single digits.
      # TODO maybe use 3?  Will you ever take a 100% subsample?
      out_prefix = sprintf "percent_%02d", sampling_percentage
    end

    # TODO if we want to make the 1 2 or s reads optional, we'll need to NOT pass those params to this program (it doesn't handle nil inputs)
    # TODO not passing in the random seed at all yet
    cmd = "#{exe} " \
"-1 #{forward_reads} " \
"-2 #{reverse_reads} " \
"-s #{single_reads} " \
"-p #{sampling_percentage} " \
"-n #{num_subsamples} " \
"-o #{out_dir} " \
"-b #{out_prefix}"

    subsample_file_names = {}

    num_subsamples.times do |sample_num|
      subsample_file_names[sample_num] = {
        forward_reads: File.join(out_dir, "#{out_prefix}.sample_#{sample_num}.1.fq"),
        reverse_reads: File.join(out_dir, "#{out_prefix}.sample_#{sample_num}.2.fq"),
        single_reads:  File.join(out_dir, "#{out_prefix}.sample_#{sample_num}.U.fq")
      }
    end

    outputs = {
      out_dir:              out_dir,
      subsample_file_names: subsample_file_names
    }

    proc_status = Process.run_it cmd

    CoutinhoAssembly::RunnerExit.new proc_status, proc_status.exitstatus, outputs
  end