Module: Ytilib::Randoom

Defined in:
lib/sequence_logo/ytilib/randoom.rb

Constant Summary collapse

DEF_PROBS =
PPM.probs2IUPAC!({ 'A' => 0.25, 'C' => 0.25, 'G' => 0.25, 'T' => 0.25, 'N' => 0.25 })
DMEL40_PROBS1 =

probabilities counted without _random.fa files for human genome

{"A"=>0.287729562173578, "C"=>0.21236364146414, "G"=>0.212259972960341, "T"=>0.287646823401942}
DMEL40_PROBS2 =
{"A"=>0.28768819278776, "C"=>0.21231180721224, "G"=>0.21231180721224, "T"=>0.28768819278776}
DMEL40_PROBS1_M =
{"A"=>{"A"=>0.350403075314602, "C"=>0.181194374386404, "G"=>0.188361404205017, "T"=>0.280041146093977}, 
"C"=>{"A"=>0.325366772443085, "C"=>0.222264645612127, "G"=>0.197213801868993, "T"=>0.255154780075794}, 
"G"=>{"A"=>0.260710563672393, "C"=>0.27150575901391, "G"=>0.222294234776053, "T"=>0.245489442537644}, 
"T"=>{"A"=>0.217189093089999, "C"=>0.192590127484359, "G"=>0.239869076706963, "T"=>0.350351702718679}}
HG17_PROBS1 =
{"A"=>0.295309361730334, "C"=>0.204413561169847, "G"=>0.204519414193999, "T"=>0.295757662905821}
HG17_PROBS2 =
{"A"=>0.295533512318077, "C"=>0.204466487681923, "G"=>0.204466487681923, "T"=>0.295533512318077}
HG17_PROBS1_M =
{"A"=>{"A"=>0.331091206257755, "C"=>0.170458424092748, "G"=>0.236770972081246, "T"=>0.261679397568252}, 
"C"=>{"A"=>0.354813019140533, "C"=>0.254741288394943, "G"=>0.0481667110625576, "T"=>0.342278981401966}, 
"G"=>{"A"=>0.290057117684408, "C"=>0.208514091370804, "G"=>0.254732297362797, "T"=>0.246696493581991}, 
"T"=>{"A"=>0.222087715262152, "C"=>0.200697606508443, "G"=>0.245657322003887, "T"=>0.331557356225517}}
HG18_PROBS1 =
{"A"=>0.291900580635872, "C"=>0.207855064518284, "G"=>0.207968587245859, "T"=>0.292275767599985}
HG18_PROBS2 =
{"A"=>0.292088174117929, "C"=>0.207911825882071, "G"=>0.207911825882071, "T"=>0.292088174117929}
MM9_PROBS1 =
{"A"=>0.289755259854654, "C"=>0.210085673636132, "G"=>0.210143929198141, "T"=>0.290015137311074}
MM9_PROBS2 =
{"A"=>0.289885198582864, "C"=>0.210114801417136, "G"=>0.210114801417136, "T"=>0.289885198582864}
MM9_PROBS1_M =
{"A"=>{"A"=>0.310389104265713, "C"=>0.184962574392377, "G"=>0.251904718465914, "T"=>0.252743602875996}, "C"=>{"A"=>0.352189584318682, "C"=>0.250794045222924, "G"=>0.0494404816637487, "T"=>0.347575888794645}, "G"=>{"A"=>0.295931117515178, "C"=>0.197870954111653, "G"=>0.250756985626016, "T"=>0.255440942747154}, "T"=>{"A"=>0.219437756702452, "C"=>0.214548041970626, "G"=>0.255405334730743, "T"=>0.310608866596179}}

Class Method Summary collapse

Class Method Details

.calc_probs(input) ⇒ Object



24
25
26
27
28
29
30
31
# File 'lib/sequence_logo/ytilib/randoom.rb', line 24

def Randoom.calc_probs(input)
  counts = new_counts
  counts.default = 0
  (0...input.length).each { |i|
    counts[input[i,1].upcase] += 1
  }
  return make_probs!(counts)
end

.calc_probs_m(input) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/sequence_logo/ytilib/randoom.rb', line 49

def Randoom.calc_probs_m(input)
  probs_m = { 'A' => {}, 'C' => {}, 'G' => {}, 'T' => {} }
  counts = { 'A' => new_counts, 'C' => new_counts, 'G' => new_counts, 'T' => new_counts, 'N' => new_counts }
  (0...input.length-1).each { |i|
    pair = input[i, 2].upcase
    counts[pair[0,1]][pair[1,1]] += 1
  }
  probs_m['A'] = make_probs!(counts['A'])
  probs_m['C'] = make_probs!(counts['C'])
  probs_m['G'] = make_probs!(counts['G'])
  probs_m['T'] = make_probs!(counts['T'])
  return probs_m
end

.equalize!(probs) ⇒ Object



92
93
94
95
96
# File 'lib/sequence_logo/ytilib/randoom.rb', line 92

def Randoom.equalize!(probs)
  probs['A'] = probs['T'] = (probs['A'] + probs['T']) / 2
  probs['C'] = probs['G'] = (probs['C'] + probs['G']) / 2
  return probs
end

.make_probs!(counts, length = nil) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/sequence_logo/ytilib/randoom.rb', line 79

def Randoom.make_probs!(counts, length = nil)
  probs = { 'A' => 0, 'C' => 0, 'G' => 0, 'T' => 0 }
  length = counts['A'] + counts['C'] + counts['G'] + counts['T'] + counts['N'] if length == nil
  length = length.to_f
  ['A','C','G','T'].each { |l| counts[l] += counts['N'] / 4.0 }
  return probs if length == 0
  probs['A'] = counts['A'] / length
  probs['C'] = counts['C'] / length
  probs['G'] = counts['G'] / length
  probs['T'] = 1 - probs['A'] - probs['C'] - probs['G']
  return probs
end

.make_probs_m!(counts) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/sequence_logo/ytilib/randoom.rb', line 63

def Randoom.make_probs_m!(counts)
  ['A','C','G','T','N'].each { |l2|
    addv = counts['N'][l2] / 4.0
    ['A','C','G','T'].each { |l1|
      counts[l1][l2] += addv
    }
  }
  
  probs_m = { 'A' => {}, 'C' => {}, 'G' => {}, 'T' => {} }
  probs_m['A'] = make_probs!(counts['A'])
  probs_m['C'] = make_probs!(counts['C'])
  probs_m['G'] = make_probs!(counts['G'])
  probs_m['T'] = make_probs!(counts['T'])
  return probs_m
end

.rand_seq(req_len, probs = DEF_PROBS, probs_m = nil) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/sequence_logo/ytilib/randoom.rb', line 33

def Randoom.rand_seq(req_len, probs = DEF_PROBS, probs_m = nil)
  randoom = ''
  if (probs_m == nil)
    req_len.times { randoom << random_letter(probs) }
    return randoom  
  end
  random_l = random_letter(probs)
  randoom = random_l
  (req_len-1).times {
    cur_probs = probs_m[random_l]
    random_l = random_letter(cur_probs)
    randoom << random_l
  }
  return randoom
end

.twostrand!(probs) ⇒ Object



98
99
100
# File 'lib/sequence_logo/ytilib/randoom.rb', line 98

def Randoom.twostrand!(probs)
  return Randoom.equalize!(probs)
end