class Ulla::CLI
Public Class Methods
calculate_pid(seq1, seq2, unit)
click to toggle source
# File lib/ulla/cli.rb, line 76 def self.calculate_pid(seq1, seq2, unit) begin self.calculate_pid_cpp(seq1, seq2, unit) rescue self.calculate_pid_rb(seq1, seq2, unit) end end
Ulla::CLI::calculate_pid(seq1, seq2, unit) → Float
click to toggle source
Calculate PID between two sequences
# File lib/ulla/cli.rb, line 12 def self.calculate_pid_rb(seq1, seq2, unit) aas1 = seq1.scan(/\S{#{unit}}/) aas2 = seq2.scan(/\S{#{unit}}/) gap = ($gap || '-') * unit align = 0 # no. of aligned columns ident = 0 # no. of identical columns intgp = 0 # no. of internal gaps if (aas1.size != aas2.size) $logger.error "Cannot calculate PID between unaligned sequences" $logger.error seq1, seq2 exit 1 end (0...aas1.size).each do |i| if (aas1[i] != gap) && (aas2[i] != gap) align += 1 if aas1[i] == aas2[i] ident += 1 end elsif (((aas1[i] == gap) && (aas2[i] != gap)) || ((aas1[i] != gap) && (aas2[i] == gap))) intgp += 1 end end 100.0 * ident / (align + intgp) end