def read_mute_freqs(self, mute_freq_dir): # NOTE these are mute freqs, not branch lengths, but it's ok for now for mtype in ['all',] + utils.regions: infname = mute_freq_dir + '/' + mtype + '-mean-mute-freqs.csv' self.branch_lengths[mtype] = {} self.branch_lengths[mtype]['lengths'], self.branch_lengths[mtype]['probs'] = [], [] mutehist = Hist(fname=infname) self.branch_lengths[mtype]['mean'] = mutehist.get_mean() # if mutehist.GetBinContent(0) > 0.0 or mutehist.GetBinContent(mutehist.GetNbinsX()+1) > 0.0: # print 'WARNING nonzero under/overflow bins read from %s' % infname mutehist.normalize(include_overflows=False, overflow_eps_to_ignore=1e-2) # if it was written with overflows included, it'll need to be renormalized check_sum = 0.0 for ibin in range(1, mutehist.n_bins + 1): # ignore under/overflow bins freq = mutehist.get_bin_centers()[ibin] branch_length = self.convert_observed_changes_to_branch_length(float(freq)) prob = mutehist.bin_contents[ibin] self.branch_lengths[mtype]['lengths'].append(branch_length) self.branch_lengths[mtype]['probs'].append(prob) check_sum += self.branch_lengths[mtype]['probs'][-1] if not utils.is_normed(check_sum): raise Exception('not normalized %f' % check_sum) if self.args.debug: print ' mean branch lengths' for mtype in ['all',] + utils.regions: print ' %4s %7.3f (ratio %7.3f)' % (mtype, self.branch_lengths[mtype]['mean'], self.branch_lengths[mtype]['mean'] / self.branch_lengths['all']['mean'])