def mergeFunc(self, products): dd = collections.defaultdict epochs = dd(lambda: dd(set)) prescales = {} for ps in products['prescales']: prescales.update(ps) if not prescales: return for (run, lumi), val in prescales.iteritems(): epochs[val][run].add(lumi) lumiDir = self.outputFileName if not os.path.exists(lumiDir): utils.mkdir(lumiDir) lumis = utils.luminosity.recordedInvMicrobarnsShotgun( [utils.jsonFromRunDict(rundict) for rundict in epochs.values()], cores=4, cacheDir=lumiDir) lumiA, lumiB, lumiBPF = [ sum(lumis) for lumis in zip(*[(lumi / A if A else 0, lumi / B if B else 0, lumi / BPF if BPF else 0) for (A, B, BPF), lumi in zip(epochs.keys(), lumis)]) ] lumiHist = r.TH1D('lumis', 'luminosity by path;;1/pb', 3, 0, 3) lumiHist.SetBinContent(1, lumiA * 1e-6) lumiHist.GetXaxis().SetBinLabel(1, '2011A') lumiHist.SetBinContent(2, lumiB * 1e-6) lumiHist.GetXaxis().SetBinLabel(2, '2011B') lumiHist.SetBinContent(3, lumiBPF * 1e-6) lumiHist.GetXaxis().SetBinLabel(3, '2011BPF') lumiHist.Write() return
def mergeFunc(self, products): self.setupDicts() for eLumis in products["staticEpochLumis"]: for epoch in eLumis: for run in eLumis[epoch]: self.epochLumis[epoch][run] |= eLumis[epoch][run] if not self.epochLumis: return lumiDir = self.outputFileName if not os.path.exists(lumiDir): utils.mkdir(lumiDir) lumis = utils.luminosity.recordedInvMicrobarnsShotgun([ utils.jsonFromRunDict(self.epochLumis[epoch]) for epoch in self.epochLumis ], cores=4, cacheDir=lumiDir) probs = [[1. / prescale if prescale else 0 for prescale in epoch] for epoch in self.epochLumis] inclu = [[ utils.unionProbability(prob[:i + 1]) for i in range(len(prob)) ] for prob in probs] thresholds = sorted(set(self.thresholds)) inclusives = [[ max([0] + [p for p, t in zip(inc, self.thresholds) if t is thresh]) for thresh in thresholds ] for inc in inclu] weights = np.array(lumis).dot(inclusives) / sum(lumis) # write total lumi and weight by threshold lumiHist = r.TH1D('susyTreeLumi', 'luminosity from susyTree;;1/pb', 1, 0, 1) lumiHist.SetBinContent(1, sum(lumis)) lumiHist.Write() weightHist = r.TH1D( self.name, ";%s;%s" % (self.var, self.name), len(thresholds), np.array([0.] + thresholds + [max(thresholds) + 10])) for i, w in enumerate(weights): weightHist.SetBinContent(i + 2, w) weightHist.SetBinContent(len(thresholds) + 3, 1) weightHist.Write()