Sha256: 3ff8cc9754ea875c56e895e080477fd1d51c92305dfe84f573f33c85b28f1b89
Contents?: true
Size: 1.02 KB
Versions: 1
Compression:
Stored size: 1.02 KB
Contents
require_relative 'pm' module Bioinform module MotifModel def self.acts_as_ppm?(ppm) ppm.is_a?(MotifModel::PPM) || ppm.is_a?(MotifModel::NamedModel) && acts_as_ppm?(ppm.model) end class PPM < PM def self.default_validator PPM::VALIDATOR end def self.probability_validator(eps: 1.0e-4) Validator.new{|matrix, alphabet| errors = [] unless matrix.all?{|pos| pos.all?{|el| el >= 0 } } errors << "Elements of PPM should be non-negative." end warnings = [] probability_sums = matrix.map{|pos| pos.inject(0.0, &:+) } max_discrepancy = probability_sums.map{|sum| (sum - 1.0).abs }.max unless max_discrepancy <= eps warnings << "PPM should sum up to 1, with discrepancy not greater than #{eps}." end ValidationResult.new(errors: errors, warnings: warnings) } end VALIDATOR = PM::VALIDATOR * PPM.probability_validator(eps: 1.0e-4).make_strict end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
bioinform-0.3.1 | lib/bioinform/data_models/ppm.rb |