def SimulateStats(winSize): snpposits = LoadSnpPositions() maxcount = 200 countsList =[[] for i in range(maxcount)] for simnr in range(100000):#!!! should be at least 10000 print('Simulation {0}'.format(simnr)) simevents = SimulateEvents(snpposits) #print('Simulated total events: {0}'.format(len(simevents['posits']))) rs = CalcIt(simevents,winSize) #print(str(rs['sizecountscumul'])) sizecountscumul = rs['sizecountscumul'] for nr in range(maxcount): if nr<len(sizecountscumul): countsList[nr].append(sizecountscumul[nr]) else: countsList[nr].append(0) rs = [] for nr in range(len(countsList)): vals={} samples = sorted(countsList[nr]) vals['average'] = sum(samples)*1.0/len(samples) vals['median'] = DQXMathUtils.quantile(samples,0.5,7,True) vals['q95'] = DQXMathUtils.quantile(samples,0.95,7,True) vals['q99'] = DQXMathUtils.quantile(samples,0.99,7,True) vals['q999'] = DQXMathUtils.quantile(samples,0.999,7,True) rs.append(vals) return rs
def calcSummary(self, list): sortfloatlist = list.GetSortedFloatList() if len(sortfloatlist) == 0: return None return DQXMathUtils.quantile(sortfloatlist, self.frac, 7, True)
def getQuantile(self, idx, fraction): if not (self.needQuantiles): raise Exception("Quantiles are not being calculated") if (fraction < 0) or (fraction > 1): raise Exception("Invalid quantile fraction") return DQXMathUtils.quantile(self.dataList[idx], fraction)