예제 #1
0
def sample_clonesize_stat(sample, samdir, freqs=[], numtop=50, args=None):
    # calculate: number of clones/ counts that lie within each freq
    # range. Note: freqs must be sorted, or the func will sort it
    # <numtop>: number of top clones whose freqs will be report
    stat = CloneSizeStat(sorted(freqs))
    stat.set_sample_info(sample)
    if args:
        numtop = args[0]
    clones = libsample.sample_all_clones(samdir)
    sorted_clones = sorted(clones, reverse=True, key=lambda c: c.freq)
   
    for index, clone in enumerate(sorted_clones):
        if index < numtop:
            stat.topfreqs.append(clone.freq)

        for i, minfreq in enumerate(stat.freqs):
            maxfreq = float('inf')
            if i + 1 < len(stat.freqs):
                maxfreq = stat.freqs[i + 1]
            if minfreq <= clone.freq and clone.freq < maxfreq:
                stat.numclones[i] += 1
                stat.counts[i] += clone.count
    # convert to frequencies:
    stat.numclones = [libcommon.get_pc(c, stat.numclone) for c in
                                                                stat.numclones]
    stat.counts = [libcommon.get_pc(c, stat.size) for c in stat.counts]
    # get cumulative stats:
    stat.numclones_cumul = libcommon.get_cumulative(stat.numclones)
    stat.counts_cumul = libcommon.get_cumulative(stat.counts)
    stat.topfreqs_cumul = libcommon.get_cumulative(stat.topfreqs, True)
    return stat
예제 #2
0
 def test_get_cumulative(self):
     vals = [1, 0, -1, 0.5, 2.5]
     forward_vals = [1, 1, 0, 0.5, 3]
     cumu_vals = lcommon.get_cumulative(vals, forward=True)
     self.assertEqual(forward_vals, cumu_vals)
     backward_vals = [3, 2, 2, 3, 2.5] 
     cumu_vals = lcommon.get_cumulative(vals)
     self.assertEqual(backward_vals, cumu_vals)