Пример #1
0
    def beginFile(self, inputFile, outputFile, inputTree, wrappedOutputTree):
        self.out = wrappedOutputTree
        self.out.branch("isMC", "I")
        self.out.branch("is2016", "I")
        self.out.branch("is2017", "I")
        self.out.branch("is2018", "I")
        self.out.branch("is4m", "I")
        self.out.branch("is4e", "I")
        self.out.branch("is2e2m", "I")
        self.out.branch("isDoubleElectronTrigger", "I")
        self.out.branch("isDoubleMuonTrigger", "I")
        self.out.branch("isMuonElectronTrigger", "I")
        self.out.branch("passedMETFilters", "I")
        self.out.branch("nCleanElectron", "I")
        self.out.branch("nCleanMuon", "I")
        self.out.branch("nCleanTau", "I")
        self.out.branch("nCleanPhoton", "I")
        self.out.branch("nCleanJet", "I")
        self.out.branch("nCleanBTagJet", "I")
        self.out.branch("HT30", "F")
        self.out.branch("iLepton1", "I")
        self.out.branch("iLepton2", "I")
        self.out.branch("iLepton3", "I")
        self.out.branch("iLepton4", "I")
        self.out.branch("Z1_pt", "F")
        self.out.branch("Z1_eta", "F")
        self.out.branch("Z1_phi", "F")
        self.out.branch("Z1_mass", "F")
        self.out.branch("Z1_dEta", "F")
        self.out.branch("Z1_dPhi", "F")
        self.out.branch("Z1_dR", "F")
        self.out.branch("Z2_pt", "F")
        self.out.branch("Z2_eta", "F")
        self.out.branch("Z2_phi", "F")
        self.out.branch("Z2_mass", "F")
        self.out.branch("Z2_dEta", "F")
        self.out.branch("Z2_dPhi", "F")
        self.out.branch("Z2_dR", "F")
        self.out.branch("H_pt", "F")
        self.out.branch("H_eta", "F")
        self.out.branch("H_phi", "F")
        self.out.branch("H_mass", "F")
        self.out.branch("H_dEta", "F")
        self.out.branch("H_dPhi", "F")
        self.out.branch("H_dR", "F")
        self.out.branch("cosThetaStar", "F")
        self.out.branch("cosTheta1", "F")
        self.out.branch("cosTheta2", "F")
        self.out.branch("phi", "F")
        self.out.branch("phi1", "F")
        #self.out.branch("genCosThetaStar", "F")
        #self.out.branch("genCosTheta1", "F")
        #self.out.branch("genPhi1", "F")
        self.out.branch("lumiWeight", "F")
        self.out.branch("lheWeight", "F")
        self.out.branch("stitchWeight", "F")
        self.out.branch("puWeight", "F")
        self.out.branch("topWeight", "F")
        self.out.branch("qcdnloWeight", "F")
        self.out.branch("qcdnnloWeight", "F")
        self.out.branch("ewknloWeight", "F")
        self.out.branch("triggerWeight", "F")
        self.out.branch("leptonWeight", "F")
        self.out.branch("eventWeightLumi", "F")

        self.fileName = inputFile.GetName()
        self.sampleName = getNameFromFile(self.fileName)

        self.isMC = not "Run201" in self.fileName

        if self.verbose >= 0: print "+ Opening file", self.fileName

        # b-tagging working points for DeepCSV
        # https://twiki.cern.ch/twiki/bin/viewauth/CMS/BtagRecommendation2016Legacy
        # https://twiki.cern.ch/twiki/bin/viewauth/CMS/BtagRecommendation94X
        # https://twiki.cern.ch/twiki/bin/viewauth/CMS/BtagRecommendation102X
        if "Run2016" in self.fileName or "Summer16" in self.fileName:
            self.year = 2016
            self.lumi = 35920.
            self.btagLoose = 0.2217  #0.0614
            self.btagMedium = 0.6321  #0.3093
            self.btagTight = 0.8953  #0.7221
        elif "Run2017" in self.fileName or "Fall17" in self.fileName:
            self.year = 2017
            self.lumi = 41530.
            self.btagLoose = 0.1522  #0.0521
            self.btagMedium = 0.4941  #0.3033
            self.btagTight = 0.8001  #0.7489
        elif "Run2018" in self.fileName or "Autumn18" in self.fileName:
            self.year = 2018
            self.lumi = 59740.
            self.btagLoose = 0.1241  #0.0494
            self.btagMedium = 0.4184  #0.2770
            self.btagTight = 0.7527  #0.7264
        else:
            if self.verbose >= 0: print "- Unknown year, aborting module"
            import sys
            sys.exit()

        self.xs = XS[self.sampleName] if self.sampleName in XS else 0.
        self.nevents = EV[self.sampleName] if self.sampleName in EV else 0.
        self.xsWeight = self.xs / self.nevents if self.nevents > 0 else 1.
        self.lumiWeight = self.xsWeight * self.lumi if self.isMC else 1.
        self.isLO = abs(
            self.nevents % 1
        ) < 1.e-6  # if True, the event count is integer, so the weight should be normalized (+1)

        if self.verbose >= 1:
            print "+ Module parameters: isMC", self.isMC, ", year", self.year, ", lumi", self.lumi, "pb"
        if self.verbose >= 1:
            print "+ Sample", self.sampleName, ", XS", self.xs, ", events", self.nevents
        if self.verbose >= 1: print "+ Weight", self.lumiWeight
        if self.isMC and self.isLO and self.verbose >= 1:
            print "+ Sample is LO, gen weight will be set to 1"
        #        self.puTool = PileupWeightTool(year = year) if self.isMC else None

        self.DoubleElectronTriggers = [
            "HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL",
            "HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ",
            "HLT_DoubleEle33_CaloIdL_MW",
            "HLT_Ele16_Ele12_Ele8_CaloIdL_TrackIdL"
        ]
        self.DoubleMuonTriggers = [
            "HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL",
            "HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8",
            "HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8",
            "HLT_TripleMu_12_10_5", "HLT_TripleMu_10_5_5_DZ"
        ]
        self.MuonElectronTriggers = [
            "HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
            "HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ",
            "HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL",
            "HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ",
            "HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ",
            "HLT_Mu8_DiEle12_CaloIdL_TrackIdL",
            "HLT_Mu8_DiEle12_CaloIdL_TrackIdL_DZ",
            "HLT_DiMu9_Ele9_CaloIdL_TrackIdL",
            "HLT_DiMu9_Ele9_CaloIdL_TrackIdL_DZ"
        ]

        if self.isMC:
            self.muSFs = MuonSFs(year=self.year)
            self.elSFs = ElectronSFs(year=self.year)
            self.puTool = PileupWeightTool(year=self.year)
Пример #2
0
    def __init__(self, name, dataType, **kwargs):

        year = kwargs.get('year', 2017)
        tes = kwargs.get('tes', 1.0)
        channel = 'eletau'

        self.name = name
        self.year = year
        self.tes = tes
        self.out = TreeProducerEleTau(name)
        self.isData = dataType == 'data'
        self.doZpt = 'DY' in self.name

        setYear(year)
        self.vlooseIso = getVLooseTauIso(year)
        if year == 2016:
            self.trigger = lambda e: e.HLT_Ele25_eta2p1_WPTight_Gsf or e.HLT_Ele45_WPLoose_Gsf_L1JetTauSeeded  #or e.HLT_Ele24_eta2p1_WPLoose_Gsf_LooseIsoPFTau20_SingleL1 or e.HLT_Ele24_eta2p1_WPLoose_Gsf_LooseIsoPFTau20 or e.HLT_Ele24_eta2p1_WPLoose_Gsf_LooseIsoPFTau30
            self.electronCutPt = 26
        else:
            # HLT_Ele32_WPTight_Gsf_L1DoubleEG
            # HLT_Ele32_WPTight_Gsf
            self.trigger = lambda e: e.HLT_Ele35_WPTight_Gsf or e.HLT_Ele32_WPTight_Gsf
            self.electronCutPt = 36
        self.tauCutPt = 20

        if not self.isData:
            self.eleSFs = ElectronSFs(year=year)
            self.puTool = PileupWeightTool(year=year)
            self.ltfSFs = LeptonTauFakeSFs('loose', 'tight', year=year)
            self.btagTool = BTagWeightTool('CSVv2',
                                           'medium',
                                           channel=channel,
                                           year=year)
            self.btagTool_deep = BTagWeightTool('DeepCSV',
                                                'medium',
                                                channel=channel,
                                                year=year)
            if self.doZpt:
                self.recoilTool = RecoilCorrectionTool(year=year)
        self.csvv2_wp = BTagWPs('CSVv2', year=year)
        self.deepcsv_wp = BTagWPs('DeepCSV', year=year)

        self.Nocut = 0
        self.Trigger = 1
        self.GoodElectrons = 2
        self.GoodTaus = 3
        self.GoodDiLepton = 4
        self.TotalWeighted = 15
        self.TotalWeighted_no0PU = 16

        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.Nocut, "no cut")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.Trigger, "trigger")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.GoodElectrons,
                                                "electron object")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.GoodTaus,
                                                "tau object")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.GoodDiLepton,
                                                "eletau pair")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.TotalWeighted,
                                                "no cut, weighted")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.TotalWeighted_no0PU,
                                                "no cut, weighted, PU>0")
        self.out.cutflow.GetXaxis().SetLabelSize(0.041)
Пример #3
0
    def __init__(self, name, dataType, **kwargs):

        self.name = name
        self.out = TreeProducerEleTau(name)
        self.isData = dataType == 'data'
        self.year = kwargs.get('year', 2017)
        self.tes = kwargs.get('tes', 1.0)
        self.ltf = kwargs.get('ltf', 1.0)
        self.jtf = kwargs.get('jtf', 1.0)
        self.doZpt = kwargs.get('doZpt', 'DY' in name)
        self.doRecoil = kwargs.get(
            'doRecoil', ('DY' in name or re.search(r"W\d?Jets", name))
            and self.year > 2016)
        self.doTTpt = kwargs.get('doTTpt', 'TT' in name)
        self.doTight = kwargs.get('doTight', self.tes != 1 or self.ltf != 1)
        self.channel = 'eletau'
        year, channel = self.year, self.channel

        self.vlooseIso = getVLooseTauIso(year)
        if year == 2016:
            self.trigger = lambda e: e.HLT_Ele25_eta2p1_WPTight_Gsf or e.HLT_Ele27_WPTight_Gsf  #or e.HLT_Ele45_WPLoose_Gsf_L1JetTauSeeded #or e.HLT_Ele24_eta2p1_WPLoose_Gsf_LooseIsoPFTau20_SingleL1 or e.HLT_Ele24_eta2p1_WPLoose_Gsf_LooseIsoPFTau20 or e.HLT_Ele24_eta2p1_WPLoose_Gsf_LooseIsoPFTau30
            self.eleCutPt = 26
        elif year == 2017:
            self.trigger = lambda e: e.HLT_Ele35_WPTight_Gsf or e.HLT_Ele32_WPTight_Gsf_L1DoubleEG or e.HLT_Ele32_WPTight_Gsf
            self.eleCutPt = 36
        else:
            self.trigger = lambda e: e.HLT_Ele32_WPTight_Gsf or e.HLT_Ele35_WPTight_Gsf
            self.eleCutPt = 33
        self.tauCutPt = 20

        if not self.isData:
            self.eleSFs = ElectronSFs(year=year)
            self.puTool = PileupWeightTool(year=year)
            self.ltfSFs = LeptonTauFakeSFs('loose', 'tight', year=year)
            self.btagTool = BTagWeightTool('DeepCSV',
                                           'medium',
                                           channel='mutau',
                                           year=year)
            if self.doZpt:
                self.zptTool = ZptCorrectionTool(year=year)
            if self.doRecoil:
                self.recoilTool = RecoilCorrectionTool(year=year)
        self.deepcsv_wp = BTagWPs('DeepCSV', year=year)

        self.Nocut = 0
        self.Trigger = 1
        self.GoodElectrons = 2
        self.GoodTaus = 3
        self.GoodDiLepton = 4
        self.TotalWeighted = 15
        self.TotalWeighted_no0PU = 16

        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.Nocut, "no cut")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.Trigger, "trigger")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.GoodElectrons,
                                                "electron object")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.GoodTaus,
                                                "tau object")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.GoodDiLepton,
                                                "eletau pair")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.TotalWeighted,
                                                "no cut, weighted")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.TotalWeighted_no0PU,
                                                "no cut, weighted, PU>0")
        self.out.cutflow.GetXaxis().SetLabelSize(0.041)
Пример #4
0
    def beginFile(self, inputFile, outputFile, inputTree, wrappedOutputTree):
        self.out = wrappedOutputTree
        self.out.branch("iSkim", "I")
        self.out.branch("isMC", "I")
        self.out.branch("isSingleMuIsoTrigger", "I")
        self.out.branch("isSingleMuTrigger", "I")
        self.out.branch("isDoubleMuonTrigger", "I")
        self.out.branch("isSingleEleIsoTrigger", "I")
        self.out.branch("isSingleEleTrigger", "I")
        self.out.branch("passedMETFilters", "I")
        self.out.branch("nCleanElectron", "I")
        self.out.branch("nCleanMuon", "I")
        self.out.branch("nCleanJet", "I")
        self.out.branch("Z_mass", "F")
        self.out.branch("Z_pt", "F")
        self.out.branch("W_mass", "F")
        self.out.branch("W_tmass", "F")
        self.out.branch("W_pt", "F")
        self.out.branch("ll_dEta", "F")
        self.out.branch("ll_dPhi", "F")
        self.out.branch("ll_dR", "F")
        self.out.branch("Wqq_mass", "F")
        self.out.branch("Tlvb1_mass", "F")
        self.out.branch("Tlvb2_mass", "F")
        self.out.branch("Tqqb1_mass", "F")
        self.out.branch("Tqqb2_mass", "F")
        self.out.branch("jj_mass", "F")
        self.out.branch("jj_pt", "F")
        self.out.branch("jj_dEta", "F")
        self.out.branch("jj_dPhi", "F")
        self.out.branch("jj_dR", "F")
        self.out.branch("nj_mass", "F")
        self.out.branch("vis_mass", "F")
        self.out.branch("lljj_mass", "F")
        self.out.branch("minMuonIso", "F")
        self.out.branch("maxMuonIso", "F")
        self.out.branch("minMuonMetDPhi", "F")
        self.out.branch("maxMuonMetDPhi", "F")
        self.out.branch("minMuonJetDR", "F")
        self.out.branch("HT30", "F")
        self.out.branch("nj20", "I")
        self.out.branch("nj30", "I")
        self.out.branch("nj40", "I")
        self.out.branch("nBJet", "I")
        self.out.branch("CSV1", "F")
        self.out.branch("CSV2", "F")
        self.out.branch("CSV3", "F")
        self.out.branch("CSV4", "F")
        self.out.branch("iCSV1", "I")
        self.out.branch("iCSV2", "I")
        self.out.branch("iCSV3", "I")
        self.out.branch("iCSV4", "I")
        self.out.branch("lumiWeight", "F")
        self.out.branch("lheWeight", "F")
        self.out.branch("stitchWeight", "F")
        self.out.branch("puWeight", "F")
        self.out.branch("topWeight", "F")
        self.out.branch("qcdnloWeight", "F")
        self.out.branch("qcdnnloWeight", "F")
        self.out.branch("ewknloWeight", "F")
        self.out.branch("triggerWeight", "F")
        self.out.branch("leptonWeight", "F")
        self.out.branch("eventWeightLumi", "F")

        self.fileName = inputFile.GetName()
        self.sampleName = getNameFromFile(self.fileName)

        self.isMC = not "Run201" in self.fileName

        print "+ Opening file", self.fileName

        # b-tagging working points for DeepCSV
        # https://twiki.cern.ch/twiki/bin/viewauth/CMS/BtagRecommendation2016Legacy
        # https://twiki.cern.ch/twiki/bin/viewauth/CMS/BtagRecommendation94X
        # https://twiki.cern.ch/twiki/bin/viewauth/CMS/BtagRecommendation102X
        if "Run2016" in self.fileName or "Summer16" in self.fileName:
            self.year = 2016
            self.lumi = 35920.
            self.btagLoose = 0.2217  #0.0614
            self.btagMedium = 0.6321  #0.3093
            self.btagTight = 0.8953  #0.7221
        elif "Run2017" in self.fileName or "Fall17" in self.fileName:
            self.year = 2017
            self.lumi = 41530.
            self.btagLoose = 0.1522  #0.0521
            self.btagMedium = 0.4941  #0.3033
            self.btagTight = 0.8001  #0.7489
        elif "Run2018" in self.fileName or "Autumn18" in self.fileName:
            self.year = 2018
            self.lumi = 59740.
            self.btagLoose = 0.1241  #0.0494
            self.btagMedium = 0.4184  #0.2770
            self.btagTight = 0.7527  #0.7264
        else:
            print "- Unknown year, aborting module"
            import sys
            sys.exit()

        self.xs = XS[self.sampleName] if self.sampleName in XS else 0.
        self.nevents = EV[self.sampleName] if self.sampleName in EV else 0.
        self.xsWeight = self.xs / self.nevents if self.nevents > 0 else 1.
        self.lumiWeight = self.xsWeight * self.lumi if self.isMC else 1.
        self.isLO = abs(
            self.nevents % 1
        ) < 1.e-6  # if True, the event count is integer, so the weight should be normalized (+1)

        print "+ Module parameters: isMC", self.isMC, ", year", self.year, ", lumi", self.lumi, "pb"
        print "+ Sample", self.sampleName, (
            "is LO" if self.isLO else
            "is not LO"), ", XS", self.xs, ", events", self.nevents
        print "+ Weight", self.lumiWeight
        if self.isMC and self.isLO:
            print "+ Sample is LO, gen weight will be set to 1"
        #        self.puTool = PileupWeightTool(year = year) if self.isMC else None

        self.SingleMuIsoTriggers = [
            "HLT_IsoMu24", "HLT_IsoTkMu24", "HLT_IsoMu27", "HLT_IsoTkMu27"
        ]
        self.SingleMuTriggers = [
            "HLT_Mu50", "HLT_TkMu50", "HLT_Mu100", "HLT_TkMu100"
        ]
        self.DoubleMuonTriggers = [
            "HLT_Mu17_Mu8", "HLT_Mu17_Mu8_DZ", "HLT_Mu17_TkMu8_DZ"
        ]
        self.SingleEleIsoTriggers = [
            "HLT_Ele27_WPTight_Gsf", "HLT_Ele27_WPLoose_Gsf",
            "HLT_Ele32_WPTight_Gsf", "HLT_Ele35_WPTight_Gsf"
        ]
        self.SingleEleTriggers = [
            "HLT_Ele105_CaloIdVT_GsfTrkIdT", "HLT_Ele115_CaloIdVT_GsfTrkIdT",
            "HLT_Photon175", "HLT_Photon200"
        ]

        if self.isMC:
            self.muSFs = MuonSFs(year=self.year)
            self.elSFs = ElectronSFs(year=self.year)
            self.puTool = PileupWeightTool(year=self.year)
            #            self.btagToolAK8 = BTagWeightTool('CSVv2','AK8','loose',sigma='central',channel='ll',year=year)
            #            self.btagToolAK4 = BTagWeightTool('CSVv2','AK4','loose',sigma='central',channel='ll',year=year)
            #            self.btagToolAK8_deep = BTagWeightTool('DeepCSV','AK8','loose',sigma='central',channel='ll',year=year)
            #            self.btagToolAK8_deep_up = BTagWeightTool('DeepCSV','AK8','loose',sigma='up',channel='ll',year=year)
            #            self.btagToolAK8_deep_down = BTagWeightTool('DeepCSV','AK8','loose',sigma='down',channel='ll',year=year)
            #            self.btagToolAK4_deep = BTagWeightTool('DeepCSV','AK4','loose',sigma='central',channel='ll',year=year)
            #            self.btagToolAK4_deep_up = BTagWeightTool('DeepCSV','AK4','loose',sigma='up',channel='ll',year=year)
            #            self.btagToolAK4_deep_down = BTagWeightTool('DeepCSV','AK4','loose',sigma='down',channel='ll',year=year)
            if 'DYJetsToLL_M-50' in self.fileName:
                self.VptCorr = DYCorrection('DYJetsToLL')
            elif 'ZJetsToNuNu' in self.fileName:
                self.VptCorr = DYCorrection('ZJetsToNuNu')
            elif 'WJetsToLNu' in self.fileName:
                self.VptCorr = DYCorrection('WJetsToLNu')
            else:
                self.VptCorr = None
Пример #5
0
    def __init__(self, name, dataType, **kwargs):

        self.name = name
        self.out = TreeProducerEleMu(name)
        self.isData = dataType == 'data'
        self.year = kwargs.get('year', 2017)
        self.tes = kwargs.get('tes', 1.0)
        self.ltf = kwargs.get('ltf', 1.0)
        self.doZpt = kwargs.get('doZpt', 'DY' in name)
        self.doRecoil = kwargs.get(
            'doRecoil', ('DY' in name or re.search(r"W\d?Jets", name))
            and self.year > 2016)
        self.doTTpt = kwargs.get('doTTpt', 'TT' in name)
        self.doTight = kwargs.get('doTight', self.tes != 1 or self.ltf != 1)
        self.channel = 'elemu'
        year, channel = self.year, self.channel

        if year == 2016:
            self.trigger = lambda e: e.HLT_IsoMu22 or e.HLT_IsoMu22_eta2p1 or e.HLT_IsoTkMu22 or e.HLT_IsoTkMu22_eta2p1  #or e.HLT_IsoMu19_eta2p1_LooseIsoPFTau20_SingleL1
            self.muonCutPt = lambda e: 23
        elif year == 2017:
            self.trigger = lambda e: e.HLT_IsoMu24 or e.HLT_IsoMu27  #or e.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTau27_eta2p1_CrossL1
            self.muonCutPt = lambda e: 25 if e.HLT_IsoMu24 else 28
        else:
            self.trigger = lambda e: e.HLT_IsoMu24 or e.HLT_IsoMu27  #or e.HLT_IsoMu20_eta2p1_LooseChargedIsoPFTau27_eta2p1_CrossL1
            self.muonCutPt = lambda e: 25
        self.eleCutPt = 15

        if not self.isData:
            self.eleSFs = ElectronSFs(year=year)
            self.muonSFs = MuonSFs(year=year)
            self.puTool = PileupWeightTool(year=year)
            self.btagTool = BTagWeightTool('DeepCSV',
                                           'medium',
                                           channel='mutau',
                                           year=year)
            if self.doZpt:
                self.zptTool = ZptCorrectionTool(year=year)
            if self.doRecoil:
                self.recoilTool = RecoilCorrectionTool(year=year)
        self.deepcsv_wp = BTagWPs('DeepCSV', year=year)

        self.Nocut = 0
        self.Trigger = 1
        self.GoodMuons = 2
        self.GoodElectrons = 3
        self.GoodDiLepton = 4
        self.TotalWeighted = 15
        self.TotalWeighted_no0PU = 16

        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.Nocut, "no cut")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.Trigger, "trigger")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.GoodMuons,
                                                "muon object")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.GoodElectrons,
                                                "electron object")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.GoodDiLepton,
                                                "mumu pair")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.TotalWeighted,
                                                "no cut, weighted")
        self.out.cutflow.GetXaxis().SetBinLabel(1 + self.TotalWeighted_no0PU,
                                                "no cut, weighted, PU>0")
        self.out.cutflow.GetXaxis().SetLabelSize(0.041)
Пример #6
0
    def beginFile(self, inputFile, outputFile, inputTree, wrappedOutputTree):
        self.out = wrappedOutputTree
        self.out.branch("isMC", "I")
        self.out.branch("is2016", "I")
        self.out.branch("is2017", "I")
        self.out.branch("is2018", "I")
        self.out.branch("isSingleMuonTrigger", "I")
        self.out.branch("isSingleMuonPhotonTrigger", "I")
        self.out.branch("isSingleMuonNoFiltersPhotonTrigger", "I")
        self.out.branch("isDoubleMuonTrigger", "I")
        self.out.branch("isDoubleMuonPhotonTrigger", "I")
        self.out.branch("isJPsiTrigger", "I")
        self.out.branch("isDisplacedTrigger", "I")
        self.out.branch("passedMETFilters", "I")
        self.out.branch("nCleanElectron", "I")
        self.out.branch("nCleanMuon", "I")
        self.out.branch("nCleanTau", "I")
        self.out.branch("nCleanPhoton", "I")
        self.out.branch("nCleanJet", "I")
        self.out.branch("nCleanBTagJet", "I")
        self.out.branch("HT30", "F")
        self.out.branch("iPhoton", "I")
        self.out.branch("iMuon1", "I")
        self.out.branch("iMuon2", "I")
        
        self.out.branch("Muon1_pt", "F")
        self.out.branch("Muon1_eta", "F")
        self.out.branch("Muon2_pt", "F")
        self.out.branch("Muon2_eta", "F")
        self.out.branch("Muon1_pfRelIso03_all", "F")
        self.out.branch("Muon2_pfRelIso03_all", "F")
        self.out.branch("Muon1_mediumId", "I")
        self.out.branch("Muon2_mediumId", "I")
        self.out.branch("Muon1_ip3d", "F")
        self.out.branch("Muon2_ip3d", "F")
        self.out.branch("minMuonIso", "F")
        self.out.branch("maxMuonIso", "F")
        self.out.branch("minMuonTrkIso", "F")
        self.out.branch("maxMuonTrkIso", "F")
        self.out.branch("Muon12_diffdxy", "F")
        self.out.branch("Muon12_diffdz", "F")
        self.out.branch("Muon12_signdxy", "F")
        self.out.branch("Muon12_signdz", "F")
        self.out.branch("Photon1_pt", "F")
        self.out.branch("Photon1_eta", "F")
        self.out.branch("Photon1_mvaID_WP80", "I")
        self.out.branch("Photon1_pfRelIso03_all", "F")
        
        self.out.branch("JPsi_pt", "F")
        self.out.branch("JPsi_eta", "F")
        self.out.branch("JPsi_phi", "F")
        self.out.branch("JPsi_mass", "F")
        self.out.branch("JPsi_dEta", "F")
        self.out.branch("JPsi_dPhi", "F")
        self.out.branch("JPsi_dR", "F")
        self.out.branch("H_pt", "F")
        self.out.branch("H_eta", "F")
        self.out.branch("H_phi", "F")
        self.out.branch("H_mass", "F")
        self.out.branch("H_dEta", "F")
        self.out.branch("H_dPhi", "F")
        self.out.branch("H_dR", "F")
        self.out.branch("minMuonMetDPhi", "F")
        self.out.branch("maxMuonMetDPhi", "F")
        self.out.branch("photonMetDPhi", "F")
        self.out.branch("metPlusPhotonDPhi", "F")
        self.out.branch("cosThetaStar", "F")
        self.out.branch("cosTheta1", "F")
        self.out.branch("phi1", "F")
        self.out.branch("genCosThetaStar", "F")
        self.out.branch("genCosTheta1", "F")
        self.out.branch("genPhi1", "F")
        self.out.branch("lumiWeight", "F")
        self.out.branch("lheWeight", "F")
        self.out.branch("stitchWeight", "F")
        self.out.branch("puWeight", "F")
        self.out.branch("topWeight", "F")
        self.out.branch("qcdnloWeight", "F")
        self.out.branch("qcdnnloWeight", "F")
        self.out.branch("ewknloWeight", "F")
        self.out.branch("triggerWeight", "F")
        self.out.branch("leptonWeight", "F")
        self.out.branch("eventWeightLumi", "F")
        
        
        self.fileName = inputFile.GetName()
        self.sampleName = getNameFromFile(self.fileName)
        
        self.isMC = not "Run201" in self.fileName
        
        if self.verbose >= 0: print "+ Opening file", self.fileName
        
        self.thMuons = [10., 3.]
        self.thPhoton = [10.]
        
        # b-tagging working points for DeepCSV
        # https://twiki.cern.ch/twiki/bin/viewauth/CMS/BtagRecommendation2016Legacy
        # https://twiki.cern.ch/twiki/bin/viewauth/CMS/BtagRecommendation94X
        # https://twiki.cern.ch/twiki/bin/viewauth/CMS/BtagRecommendation102X
        if "Run2016" in self.fileName or "UL16" in self.fileName or "Summer16" in self.fileName:
            self.year = 2016
            self.lumi = 35920.
            self.btagLoose = 0.2217 #0.0614
            self.btagMedium = 0.6321 #0.3093
            self.btagTight = 0.8953 #0.7221
        elif "Run2017" in self.fileName or "UL17" in self.fileName or "Fall17" in self.fileName:
            self.year = 2017
            self.lumi = 41530.
            self.btagLoose = 0.1522 #0.0521
            self.btagMedium = 0.4941 #0.3033
            self.btagTight = 0.8001 #0.7489
        elif "Run2018" in self.fileName or "UL18" in self.fileName or "Autumn18" in self.fileName:
            self.year = 2018
            self.lumi = 59740.
            self.btagLoose = 0.1241 #0.0494
            self.btagMedium = 0.4184 #0.2770
            self.btagTight = 0.7527 #0.7264
        else:
            if self.verbose >= 0: print "- Unknown year, aborting module"
            import sys
            sys.exit()
        
        self.xs = XS[self.sampleName] if self.sampleName in XS else 0.
        self.nevents = EV[self.sampleName] if self.sampleName in EV else 0.
        self.xsWeight = self.xs / self.nevents if self.nevents > 0 else 1.
        self.lumiWeight = self.xsWeight * self.lumi if self.isMC else 1.
        self.isLO = abs(self.nevents % 1) < 1.e-6 # if True, the event count is integer, so the weight should be normalized (+1)
        self.isSignal = ('JPsiG' in self.sampleName)
        
        if self.verbose >= 1: print "+ Module parameters: isMC", self.isMC, ", year", self.year, ", lumi", self.lumi, "pb"
        if self.verbose >= 1: print "+ Sample", self.sampleName, ", XS", self.xs, ", events", self.nevents
        if self.verbose >= 1: print "+ Weight", self.lumiWeight
        if self.isMC and self.isLO and self.verbose >= 1: print "+ Sample is LO, gen weight will be set to 1"
#        self.puTool = PileupWeightTool(year = year) if self.isMC else None

        self.SingleMuonTriggers = ["HLT_IsoMu27"]
        self.SingleMuonPhotonTriggers = ["HLT_Mu17_Photon30_CaloIdL_L1ISO", "HLT_Mu17_Photon30_IsoCaloId", "HLT_Mu17_Photon30_CaloIdL"] # 27.13 in 2017
        self.SingleMuonNoFiltersPhotonTriggers = ["HLT_Mu38NoFiltersNoVtxDisplaced_Photon38_CaloIdL", "HLT_Mu38NoFiltersNoVtx_Photon38_CaloIdL", "HLT_Mu43NoFiltersNoVtx_Photon43_CaloIdL"]
        self.DoubleMuonTriggers = ["HLT_Mu17_Mu8", "HLT_Mu17_Mu8_DZ", "HLT_Mu17_TkMu8_DZ", "HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass", "HLT_Mu37_TkMu27", ] #, "HLT_DoubleMu33NoFiltersNoVtxDisplaced"]
        self.DoubleMuonPhotonTriggers = ["HLT_DoubleMu20_7_Mass0to30_Photon23"]
        self.JPsiTriggers = ["HLT_Dimuon16_Jpsi", "HLT_Dimuon18_PsiPrime", "HLT_Dimuon18_PsiPrime_noCorrL1", "HLT_Dimuon25_Jpsi", "HLT_Dimuon25_Jpsi_noCorrL1", "HLT_Dimuon20_Jpsi", ]
        self.DisplacedTriggers = ["HLT_DoubleMu4_JpsiTrk_Displaced", "HLT_DoubleMu4_PsiPrimeTrk_Displaced"]
        
        if self.isMC:
            self.muSFs  = MuonSFs(year = self.year)
            self.elSFs  = ElectronSFs(year = self.year)
            self.puTool = PileupWeightTool(year = self.year)