class FrequencyTable
Attributes
frequency_table[RW]
position_table[RW]
sequences[RW]
Public Class Methods
new()
click to toggle source
# File lib/scbi_cominer/classes/frequency_table.rb, line 5 def initialize @frequency_table = {} @position_table = {} @sequences =[] end
Public Instance Methods
add_fasta(name,fasta, in_consensus_offset, align_clip_start, align_clip_end)
click to toggle source
# File lib/scbi_cominer/classes/frequency_table.rb, line 107 def add_fasta(name,fasta, in_consensus_offset, align_clip_start, align_clip_end) @sequences.push({:name=>name,:fasta=>fasta}) index = @sequences.length fasta_u=fasta.upcase i = (align_clip_start.to_i+in_consensus_offset.to_i)-2 # seq_i=in_seq_offset.to_i # while !(c=fasta_u[seq_i]).nil? # puts ("_"*i+fasta[align_clip_start.to_i-1..align_clip_end.to_i-1])[0..80]+'...' fasta[align_clip_start.to_i-1..align_clip_end.to_i-1].upcase.each_char do |c| #get current freq freq = @frequency_table[c] if freq.nil? @frequency_table[c] = [] freq = @frequency_table[c] end #increment current freq if freq[i].nil? freq[i] = 1 else freq[i]+=1 end #get current pos pos = @position_table[c] if pos.nil? @position_table[c] = [] pos = @position_table[c] end #increment current freq if pos[i].nil? pos[i] = [index] else pos[i].push index end #increment pos i +=1 end # puts " "+fasta[0..30] end
add_read(read)
click to toggle source
# File lib/scbi_cominer/classes/frequency_table.rb, line 99 def add_read(read) add_fasta(read.name, read.fasta, read.start_in_consensus, read.align_clip_start, read.align_clip_end) end
add_sequence(seq, offset)
click to toggle source
# File lib/scbi_cominer/classes/frequency_table.rb, line 103 def add_sequence(seq, offset) add_fasta(seq.seq_name,seq.seq_fasta) end
consensus_freq(pos)
click to toggle source
cuenta las secuencias efectivas de la posicion pos
# File lib/scbi_cominer/classes/frequency_table.rb, line 62 def consensus_freq(pos) ke=nil m = 0 @frequency_table.each { |k,v| if (!v[pos].nil?) && (k!='-') && (k!='*') if v[pos] >= m m = v[pos] ke=k end end } return [ke,m] #return @sequences.count end
extract_col(pos)
click to toggle source
# File lib/scbi_cominer/classes/frequency_table.rb, line 157 def extract_col(pos) h={} @frequency_table.each do |k,v| if (!v[pos].nil?) && (k!='-') && (k!='*') if v[pos]>0 h[k]=v[pos] end end end return h end
inspect()
click to toggle source
# File lib/scbi_cominer/classes/frequency_table.rb, line 229 def inspect # return @frequency_table.to_json res = '' @frequency_table.each do |c,v| res += c+':'+(v[0..30].map{|c1| c1 ||= 0 }).join("")+"...more.\n" end @position_table.each do |c,v| # res += c+':'+(v[0..10].map{|c1| (c1 && ('['+c1.map{|c2| @sequences[c2-1].seq_name}.join(","))+']') || "[]" }).join(" - ")+"...more.\n" res += c+':'+(v[0..10].map{|c1| (c1 && ('['+c1.map{|c2| @sequences[c2-1][:name]}.join(","))+']') || "[]" }).join(" - ")+"...more.\n" end return res end
inspect_pos(pos_start,pos_end)
click to toggle source
# File lib/scbi_cominer/classes/frequency_table.rb, line 252 def inspect_pos(pos_start,pos_end) res = '' @frequency_table.each do |c,v| res += c+':'+(v[pos_start..pos_end].map{|c1| c1 ||= 0 }).join("")+"...more.\n" end return res end
max_length()
click to toggle source
# File lib/scbi_cominer/classes/frequency_table.rb, line 83 def max_length m = 0 mk = nil @frequency_table.each { |k,v| if v.length>m m = v.length mk = k end } return m end
max_length_key()
click to toggle source
# File lib/scbi_cominer/classes/frequency_table.rb, line 11 def max_length_key m = 0 mk = nil @frequency_table.each { |k,v| if v.length>m m = v.length mk = k end } return mk end
nseq(pos)
click to toggle source
cuenta las secuencias efectivas de la posicion pos
# File lib/scbi_cominer/classes/frequency_table.rb, line 28 def nseq(pos) m = 0 @frequency_table.each { |k,v| if (!v[pos].nil?) && (k!='-') #puts v[pos].to_s + k if pos==0 m += v[pos] end } return m #return @sequences.count end
nseq_valid(pos)
click to toggle source
cuenta las secuencias efectivas de la posicion pos
# File lib/scbi_cominer/classes/frequency_table.rb, line 45 def nseq_valid(pos) m = 0 @frequency_table.each { |k,v| if (!v[pos].nil?) && (k!='-') && (k!='*') #puts v[pos].to_s + k if pos==0 m += v[pos] end } return m #return @sequences.count end
valid_snp(pos)
click to toggle source
# File lib/scbi_cominer/classes/frequency_table.rb, line 175 def valid_snp(pos) res = false # a valid SNP is a change in at least two valid sequences. total_seqs = nseq_valid(pos) consensus_base, consensus_frequency = consensus_freq(pos) # puts h.to_json # change a pos #if pos = 128 # @frequency_table['A'][pos]=1 # @frequency_table['C'][pos]=2 # @frequency_table['T'][pos]=0 # @frequency_table['G'][pos]=4 # end # if consensus_frequency <= total_seqs - 2 h = extract_col(pos) h.each do |k,v| if (k!=consensus_base) && (v>=2) res = true # puts "#{k} is #{v}>=2" break end end end # puts inspect_pos(pos,pos) # puts "POS: #{pos}" # puts res.to_s # puts "base #{consensus_base}, freq #{consensus_frequency}, tot: #{total_seqs}" # puts '-' * 20 #puts "nseq[#{pos}] = #{total_seqs} => #{consensus_base}: #{consensus_frequency}" # @frequency_table.each { |k,v| # # puts "#{k}:#{v[pos] ||= '0'}" # # # } # # puts res.to_s return res end