class GeneValidator::Validations

Class that initalises a separate Validate.new() instance for each query.

Public Class Methods

new() click to toggle source
# File lib/genevalidator/validation.rb, line 28
def initialize
  @opt       = opt
  @config    = config
  @query_idx = query_idx
end

Public Instance Methods

check_if_maker_input?() click to toggle source

Adds 'maker' to @opt if the first definiton in the input fasta file contains MAKER's QI (quality index) score

# File lib/genevalidator/validation.rb, line 86
def check_if_maker_input?
  query        = GeneValidator.extract_input_fasta_sequence(0)
  parse_query  = query.scan(/>([^\n]*)\n([A-Za-z\n]*)/)[0]
  definition   = parse_query[0].delete("\n")
  number       = '-?\d*\.?\d*'
  qi_match     = definition.match(/QI:#{number}\|#{number}\|#{number}\|
                                  #{number}\|#{number}\|#{number}\|
                                  #{number}\|#{number}\|#{number}/x)
  return if qi_match.nil?
  @opt[:validations] << 'maker_qi'
end
get_info_on_query_sequence(seq_type = @config[:type], index = @config[:idx]) click to toggle source

get info about the query

# File lib/genevalidator/validation.rb, line 69
def get_info_on_query_sequence(seq_type = @config[:type],
                               index = @config[:idx])
  query        = GeneValidator.extract_input_fasta_sequence(index)
  parse_query  = query.scan(/>([^\n]*)\n([A-Za-z\n]*)/)[0]

  prediction                = Query.new
  prediction.definition     = parse_query[0].delete("\n")
  prediction.identifier     = prediction.definition.gsub(/ .*/, '')
  prediction.type           = seq_type
  prediction.raw_sequence   = parse_query[1].delete("\n")
  prediction.length_protein = prediction.raw_sequence.length
  prediction.length_protein /= 3 if seq_type == :nucleotide
  prediction
end
parse_next_iteration(iterator, prediction) click to toggle source
# File lib/genevalidator/validation.rb, line 98
def parse_next_iteration(iterator, prediction)
  iterator.next if @config[:idx] < @config[:start_idx]
  if @opt[:blast_xml_file]
    BlastUtils.parse_next(iterator)
  elsif @opt[:blast_tabular_file]
    iterator.parse_next(prediction.identifier)
  end
end
run_validations(iterator) click to toggle source
# File lib/genevalidator/validation.rb, line 36
def run_validations(iterator)
  p = Pool.new(@opt[:num_threads]) if @opt[:num_threads] > 1

  check_if_maker_input?

  while @config[:idx] + 1 < @query_idx.length
    prediction = get_info_on_query_sequence
    @config[:idx] += 1

    blast_hits = parse_next_iteration(iterator, prediction)

    if blast_hits.nil?
      @config[:idx] -= 1
      break
    end

    arr_idx = @config[:idx] - 1
    next unless @config[:json_output][arr_idx].nil?

    if @opt[:num_threads] == 1
      Validate.new.validate(prediction, blast_hits, @config[:idx])
    else
      p.schedule(prediction, blast_hits, @config[:idx]) do |pred, hits, idx|
        Validate.new.validate(pred, hits, idx)
      end
    end
  end
ensure
  p.shutdown if @opt[:num_threads] > 1
end