class Basil::CLI
Public Class Methods
parse_arguments()
click to toggle source
# File lib/basil/cli.rb, line 79 def parse_arguments opts = Trollop::options do version "PRE-RELEASE" banner <<-EOS Basil is an HTPS demultiplexer Version: #{version} Usage: basil [options] -i <reads/directory> -o <output directory> where [options] are: EOS opt :barcodes, 'barcodes definition file', :short => 'b', :type => String opt :reads, 'reads (fastq/fasta/qseq)', :short => 'i', :type => String opt :illumina, 'Illumina output directory', :short => 'd' opt :out_fmt, 'Output format (default: same format as input)', :short => 'f' opt :pretrim, 'trim N nucleotides from start before searching for barcode', :type => Integer opt :out, 'output directory', :short => 'o', :type => String end filename = ARGV.shift Trollop::die :barcodes, "must specify barcodes" if opts[:barcodes].nil? Trollop::die :reads, "must specify reads or Illumina directory" if !(opts[:reads] || opts[:illumina]) Trollop::die "cannot specify both reads and Illumina directory" if opts[:reads] && opts[:illumina] Trollop::die :out, "must specify output directory" if !opts[:out] opts end
parse_barcodes(barcodes)
click to toggle source
# File lib/basil/cli.rb, line 54 def parse_barcodes barcodes barcodes_file = # barcodes included in barcodes/ directory? if Barcodes.has_barcode? barcodes Barcodes.barcode_path(barcodes) # barcodes specified by filename else barcodes end File.open(barcodes) { |h| Basil.parse_barcodes h } end
parse_illumina_directory(dir)
click to toggle source
For parsing illumina-generated output directories containing paired QSEQ files
# File lib/basil/cli.rb, line 70 def parse_illumina_directory dir files = Dir[File.join(dir, '*')] files.collect do |x| m = File.basename(x).match(/s_(\d)_(\d)_(\d*)_qseq\.txt/) { :lane => m[1], :pair => m[2], :n => m[3], :filename => File.join(dir, m[0]) } end.group_by { |x| x[:n] } end
run!()
click to toggle source
# File lib/basil/cli.rb, line 5 def run! opts = parse_arguments barcodes = parse_barcodes opts[:barcodes] out_dir = opts[:out] buffer = Buffer.new basil = Basil.new(barcodes) handles = Array.new if opts[:illumina] if pretrim raise "pretrim is not supported with paired-end data" end else reads_handle = File.open(opts[:reads]) handles << reads_handle records_format = records.format pretrim = opts[:pretrim] || 0 afttrim = -1*opts[:afttrim] || -1 end if File.exist? out_dir $stderr.puts "#{out_dir} already exists -- delete or move!" exit else Dir.mkdir(out_dir) end records.each do |record| match = basil.recognize record.sequence barcode, sequence = match if match unless match barcode = 'unknown' trimmed_sequence = record.sequence end trimmed_sequence = record.sequence[pretrim..afttrim] new_record = Fasta.new :name => record.name, :sequence => trimmed_sequence buffer.add_to File.join(out_dir, barcode + ".#{records_format}"), new_record end # Finish up buffer.finalize handles.collect { |x| x.close } end