Class: GeneValidator::Validations

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/genevalidator/validation.rb

Overview

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

Instance Method Summary collapse

Constructor Details

#initializeValidations

Returns a new instance of Validations.



28
29
30
31
32
# File 'lib/genevalidator/validation.rb', line 28

def initialize
  @opt       = opt
  @config    = config
  @query_idx = query_idx
end

Instance Method Details

#check_if_maker_input?Boolean

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

Returns:

  • (Boolean)


86
87
88
89
90
91
92
93
94
95
96
# 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 = , index = ) ⇒ Object

get info about the query



69
70
71
72
73
74
75
76
77
78
79
80
81
82
# 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) ⇒ Object



98
99
100
101
102
103
104
105
# 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) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 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