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?(input_file = ) ⇒ Boolean

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

Returns:

  • (Boolean)


85
86
87
88
89
90
91
92
93
94
95
# File 'lib/genevalidator/validation.rb', line 85

def check_if_maker_input?(input_file = @opt[:input_fasta_file])
  query        = IO.binread(input_file, @query_idx[1], @query_idx[0])
  parse_query  = query.scan(/>([^\n]*)\n([A-Za-z\n]*)/)[0]
  definition   = parse_query[0].gsub("\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(input_file = , seq_type = ) ⇒ Object

get info about the query



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/genevalidator/validation.rb', line 66

def get_info_on_query_sequence(input_file = @opt[:input_fasta_file],
                                    seq_type = @config[:type])
  start_offset = @query_idx[@config[:idx] + 1] - @query_idx[@config[:idx]]
  end_offset   = @query_idx[@config[:idx]]
  query        = IO.binread(input_file, start_offset, end_offset)
  parse_query  = query.scan(/>([^\n]*)\n([A-Za-z\n]*)/)[0]

  prediction                = Query.new
  prediction.definition     = parse_query[0].gsub("\n", '')
  prediction.identifier     = prediction.definition.gsub(/ .*/, '')
  prediction.type           = seq_type
  prediction.raw_sequence   = parse_query[1].gsub("\n", '')
  prediction.length_protein = prediction.raw_sequence.length
  prediction.length_protein /= 3 if seq_type == :nucleotide
  prediction
end

#parse_next_iteration(iterator, prediction) ⇒ Object



97
98
99
100
101
102
103
104
# File 'lib/genevalidator/validation.rb', line 97

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
# 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

    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