def run(lst = @hits)
      if type.to_s != 'nucleotide'
        @validation_report = ValidationReport.new('', :unapplicable)
        return @validation_report
      end

      raise NotEnoughHitsError if hits.length < opt[:min_blast_hits]
      raise unless prediction.is_a?(Query) && hits[0].is_a?(Query)

      start = Time.now

      rfs =  lst.map { |x| x.hsp_list.map(&:query_reading_frame) }.flatten
      frames = Hash[rfs.group_by { |x| x }.map { |k, vs| [k, vs.length] }]

      # get the main reading frame
      main_rf = frames.map { |_k, v| v }.max
      @prediction.nucleotide_rf = frames.find { |_k, v| v == main_rf }.first

      @validation_report = BlastRFValidationOutput.new(@short_header, @header,
                                                       @description, frames)
      @validation_report.run_time = Time.now - start
      @validation_report
    rescue NotEnoughHitsError
      @validation_report = ValidationReport.new('Not enough evidence',
                                                :warning, @short_header,
                                                @header, @description)
    rescue StandardError
      @validation_report = ValidationReport.new('Unexpected error', :error,
                                                @short_header, @header,
                                                @description)
      @validation_report.errors.push 'Unexpected Error'
    end
def run(lst = @hits)
      if type.to_s != 'nucleotide'
        @validation_report = ValidationReport.new('', :unapplicable)
        return @validation_report
      end

      raise NotEnoughHitsError if hits.length < opt[:min_blast_hits]
      raise unless prediction.is_a?(Query) && hits[0].is_a?(Query)

      start = Time.now

      rfs =  lst.map { |x| x.hsp_list.map(&:query_reading_frame) }.flatten
      frames = Hash[rfs.group_by { |x| x }.map { |k, vs| [k, vs.length] }]

      # get the main reading frame
      main_rf = frames.map { |_k, v| v }.max
      @prediction.nucleotide_rf = frames.find { |_k, v| v == main_rf }.first

      @validation_report = BlastRFValidationOutput.new(@short_header, @header,
                                                       @description, frames)
      @validation_report.run_time = Time.now - start
      @validation_report
    rescue NotEnoughHitsError
      @validation_report = ValidationReport.new('Not enough evidence',
                                                :warning, @short_header,
                                                @header, @description)
    rescue StandardError
      @validation_report = ValidationReport.new('Unexpected error', :error,
                                                @short_header, @header,
                                                @description)
      @validation_report.errors.push 'Unexpected Error'
    end
Check reading frame inconsistency
 Params:
 +lst+: vector of +Sequence+ objects
 Output:
 +BlastRFValidationOutput+ object