示例#1
0
def calcMETSig(event, sample):
    if sample.isData:
        JER = JERData
        params = paramsData
    else:
        JER = JERMC
        params = paramsMC
    ev = Event(event, JER, isData=sample.isData)
    ev.calcMETSig(params)
    event.MET_significance_rec = ev.MET_sig
    event.Jet_dpt = [x for x in ev.Jet_dpt]
示例#2
0
def calcMETSig( event, sample ):
    if sample.isData:
        JER    = JERData
        params = paramsData
    else:
        JER    = JERMC
        params = paramsMC

    ev = Event(event, JER, isData=sample.isData, METPtVar=METPtVar, METPhiVar=METPhiVar, JetCollection=JetCollection, vetoEtaRegion=vetoEtaRegion, jetThreshold=jetThresh, pTdepMetSig=pTdependent)
    ev.calcMETSig(params)
    event.MET_significance_rec = ev.MET_sig
    event.Jet_dpt = [ x*ev.Jet_pt[i] for i,x in enumerate(ev.Jet_dpt) ] if len(ev.Jet_dpt) > 0 else [0]
示例#3
0
def calcMETSig( event, sample ):
    if sample.isData:
        JER = JERData
        params = paramsData
    else:
        JER = JERMC
        params = paramsMC
    if year == 2017:
        METPtVar = "METFixEE2017_pt"
        METPhiVar = "METFixEE2017_phi"
    elif year == 2018:
        METPtVar = "MET_pt_nom"
        METPhiVar = "MET_phi"
    else:
        METPtVar = "MET_pt"
        METPhiVar = "MET_phi"
    if year == 2018: JetCollection = "Jet_pt_nom"
    else: JetCollection = "Jet_pt"
    ev = Event(event, JER, isData=sample.isData, METPtVar=METPtVar, METPhiVar=METPhiVar, JetCollection=JetCollection, vetoEtaRegion=vetoEtaRegion, jetThreshold=jetThreshold)
    ev.calcMETSig(params)
    event.MET_significance_rec = ev.MET_sig
    event.Jet_dpt = [ x for x in ev.Jet_dpt ]
示例#4
0
文件: run.py 项目: Lvigilante/nanoMET
    def __init__(self,
                 samples,
                 selection,
                 jetResolution,
                 outfile="results/tune",
                 METPtVar="MET_pt",
                 METPhiVar="MET_phi",
                 JetCollection="Jet_pt",
                 maxN=1e6,
                 vetoEtaRegion=(10, 10),
                 jetThreshold=15.,
                 puWeight="puWeight",
                 ttbarModifier=1,
                 pTdepMetSig=True,
                 nvtxHist=None):
        # Need fill a list in order to do the minimization, reading from the tree is too slow

        self.eventlist = []
        if samples[0].isData:
            self.variables = map(TreeVariable.fromString, [
                "nJet/I", "fixedGridRhoFastjetAll/F",
                "%s/F" % METPtVar,
                "%s/F" % METPhiVar, "MET_sumPtUnclustered/F"
            ])
        else:
            self.variables = map(TreeVariable.fromString, [
                "weight/F", "puWeight/F", "puWeightUp/F", "puWeightDown/F",
                "nJet/I", "fixedGridRhoFastjetAll/F", "PV_npvsGood/I",
                "%s/F" % METPtVar,
                "%s/F" % METPhiVar, "MET_sumPtUnclustered/F"
            ])
        self.variables += [
            VectorTreeVariable.fromString(
                "Jet[pt/F,eta/F,phi/F,cleanmask/O,jetId/I,cleanmaskMETSig/I,cleanmaskMETSigRec/I]"
            )
        ]
        if JetCollection == "Jet_pt_nom":
            self.variables += [VectorTreeVariable.fromString("Jet[pt_nom/F]")]
        elif JetCollection == "Jet_pt_jerUp":
            self.variables += [
                VectorTreeVariable.fromString("Jet[pt_jerUp/F]")
            ]

        self.outfile = os.path.abspath(outfile)
        self.outdir = os.path.dirname(self.outfile)

        if not os.path.isdir(self.outdir):
            os.makedirs(self.outdir)

        self.pTdepMetSig = pTdepMetSig
        self.paramRange = 12 if self.pTdepMetSig else 7

        self.variableNames = ["a%i" % i for i in range(self.paramRange - 2)
                              ] + ["u1", "u2"]
        self.defaultStep = [0.05] * self.paramRange
        self.defaultStart = [1.5] * (self.paramRange - 2) + [0., .5]

        for s in samples:
            logger.info("Now working on sample: %s" % s.name)
            s.setSelectionString(selection)
            logger.info("Getting number of events")
            nEvents = s.getYieldFromDraw(selectionString="(1)",
                                         weightString="(1)")
            logger.info("Running over %s events for sample %s." %
                        (nEvents["val"], s.name))
            nEvents = nEvents["val"]
            if nEvents > maxN:
                weightModifier = nEvents / float(maxN)
                fracToKeep = float(maxN) / nEvents
                logger.info(
                    "Preliminary factor for modifying the event weight: %s" %
                    weightModifier)
            else:
                weightModifier = 1
                fracToKeep = 1

            if "top" in s.name.lower():
                weightModifier *= ttbarModifier
            logger.info("Filling the eventlist")
            reader = s.treeReader(variables=self.variables)
            reader.start()
            i = 0
            tmp_eventlist = []
            while reader.run():
                i += 1
                nvtxWeight = 1
                if random.random() < fracToKeep:
                    if nvtxHist:
                        nvtxWeight = getNVtxWeight(nvtxHist,
                                                   reader.event.PV_npvsGood)
                    tmp_eventlist += [
                        Event(reader.event,
                              jetResolution,
                              weightModifier=weightModifier * nvtxWeight,
                              isData=s.isData,
                              METPtVar=METPtVar,
                              METPhiVar=METPhiVar,
                              JetCollection=JetCollection,
                              vetoEtaRegion=vetoEtaRegion,
                              jetThreshold=jetThreshold,
                              puWeight=puWeight,
                              pTdepMetSig=self.pTdepMetSig)
                    ]
                update_progress(i / nEvents)

            self.eventlist += tmp_eventlist