Example #1
0
    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
Example #2
0
    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()