shyamrallapalli/cheripic

View on GitHub
lib/cheripic/options.rb

Summary

Maintainability
A
2 hrs
Test Coverage
#!/usr/bin/env ruby

module Cheripic

  # A class to get default settings and update user settings for parameters
  # and facilitate retrieval of settings any where in the module
  class Options

    # Default parameter settings
    @def_settings = {
        :hmes_adjust => 0.5,
        :htlow => 0.25,
        :hthigh => 0.75,
        :mindepth => 6,
        :maxdepth => 0,
        :max_d_multiple => 5,
        :min_non_ref_count => 3,
        :min_indel_count_support => 3,
        :ambiguous_ref_bases => false,
        :mapping_quality => 20,
        :base_quality => 15,
        :noise => 0.1,
        :cross_type => 'back',
        :use_all_contigs => false,
        :include_low_hmes => false,
        :polyploidy => false,
        :bfr_adjust => 0.05,
        :sel_seq_len => 50
    }

    # set defaults as user settings
    @user_settings = @def_settings

    # A value to adjust calculation of Homozygosity Enrichment Score (HMES)
    # @return [Float]
    def self.hmes_adjust
      @user_settings[:hmes_adjust]
    end

    # Lower cut off of Allele fraction for categorization of an variant to heterozygous
    # @return [Float]
    def self.htlow
      @user_settings[:htlow]
    end

    # Higher cut off of Allele fraction for categorization of an variant to heterozygous
    # @return [Float]
    def self.hthigh
      @user_settings[:hthigh]
    end

    # Minimum read coverage at the variant position to be considered for analysis
    # @return [Integer]
    def self.mindepth
      @user_settings[:mindepth]
    end

    # Maximum read coverage at the variant position to be considered for analysis
    # @return [Integer]
    def self.maxdepth
      @user_settings[:maxdepth]
    end

    # Setting maximum read coverage at the variant position to be considered for analysis
    # @param value [Integer] provided integer value will be updated as maxdepth
    # @return [Integer] updated maxdepth value
    def self.maxdepth=(value)
      @user_settings[:maxdepth] = value
    end

    # Multiplication factor to average coverage to calculate maximum read coverage
    # at the variant position to be considered for analysis
    # @return [Integer]
    def self.max_d_multiple
      @user_settings[:max_d_multiple]
    end

    # Minimum non reference count at the variant position to be considered for analysis
    # @return [Integer]
    def self.min_non_ref_count
      @user_settings[:min_non_ref_count]
    end

    # Minimum reads supporting an indel at the variant position to be considered for analysis as indel
    # @return [Integer]
    def self.min_indel_count_support
      @user_settings[:min_indel_count_support]
    end

    # Option to whether to ignore or consider the reference positions which are ambiguous
    # @note switching option name here so Pileup options are same
    # @return [Boolean]
    def self.ignore_reference_n
      @user_settings[:ambiguous_ref_bases] ? false : true
    end

    # Minimum alignment mapping quality of the read to be used for bam files
    # @return [Integer]
    def self.mapping_quality
      @user_settings[:mapping_quality]
    end

    # Minimum aligned base quality at the variant position to be considered for analysis
    # @return [Integer]
    def self.base_quality
      @user_settings[:base_quality]
    end

    # Threshold for fraction of read bases at variant position below which are ignored as noise
    # @return [Float]
    def self.noise
      @user_settings[:noise]
    end

    # Option for cross type used for generating bulk population
    # @note options are either 'back' or 'out'
    # @return [String]
    def self.cross_type
      @user_settings[:cross_type]
    end

    # Option to whether to ignore or consider the contigs with out any variants
    # @return [Boolean]
    def self.use_all_contigs
      @user_settings[:use_all_contigs]
    end

    # Option to whether to ignore or consider the contigs with low HME score
    # @return [Boolean]
    def self.include_low_hmes
      @user_settings[:include_low_hmes]
    end

    # Option to whether to set the input data is from polyploid or not
    # @return [Boolean]
    def self.polyploidy
      @user_settings[:polyploidy]
    end

    # A value to adjust calculation of bulk frequency ratio (bfr)
    # @return [Float]
    def self.bfr_adjust
      @user_settings[:bfr_adjust]
    end

    # Number of nucleotides of sequence to select from each side of the selected variant
    # @return [Integer]
    def self.sel_seq_len
      @user_settings[:sel_seq_len]
    end

    # Updates the values of options using a hash generated from user inputs
    # @param newset [Hash] a hash of option names as keys user settings as values
    def self.update(newset)
      @user_settings = @def_settings.merge(newset)
    end

    # Resets the values of options to defaults
    def self.defaults
      @user_settings = @def_settings
    end

    # Resets the values of options to defaults
    def self.current_values
      @user_settings
    end

  end

end