def main(): iFile = TFile(input_file) c = iFile.Get('tEvent') h = TH1F("bdt", "bdt", 40, -1, 1) (univ_testBGHists, univ_trainBGHists, univ_testSignalHists, univ_trainSignalHists, univ_methods, univ_names) = cut_optimisation.get_bdt_hists([univ_bdt]) univ_trainSignalHist, univ_trainBGHist, univ_testSignalHist, univ_testBGHist = univ_trainSignalHists[0], univ_trainBGHists[0], univ_testSignalHists[0], univ_testBGHists[0] univ_highestZ, univ_highestS, univ_highestB, univ_highestMVA, univ_ST, univ_BT = cut_optimisation.getHighestZ(univ_trainSignalHist, univ_trainBGHist, univ_testSignalHist, univ_testBGHist) univ_bdt_weights = univ_bdt + "/dataset/weights/TMVAClassification_BDT.weights.xml" univ_bdt_vars = cut_optimisation.getVariablesFromXMLWeightsFile(univ_bdt_weights) univ_bdt_vars_map = cut_optimisation.getVariablesMemMap(univ_bdt_vars) univ_bdt_specs = cut_optimisation.getSpecSpectatorFromXMLWeightsFile(univ_bdt_weights) univ_bdt_specs_map = cut_optimisation.getSpectatorsMemMap(univ_bdt_specs) univ_bdt_reader = cut_optimisation.prepareReader(univ_bdt_weights, univ_bdt_vars, univ_bdt_vars_map, univ_bdt_specs, univ_bdt_specs_map) print "univ_highestMVA=" + str(univ_highestMVA) nentries = c.GetEntries() print 'Analysing', nentries, "entries" total = 0 passed = 0 for ientry in range(nentries): if ientry % 1000 == 0: print "Processing " + str(ientry) total += 1 c.GetEntry(ientry) for k, v in univ_bdt_vars_map.items(): v[0] = eval("c." + k) for k, v in univ_bdt_specs_map.items(): v[0] = eval("c." + k) value = univ_bdt_reader.EvaluateMVA("BDT") h.Fill(value) if value >= univ_highestMVA: passed += 1 print "total=" + str(total) print "passed=" + str(passed) # Create canvas canvas = TCanvas("roc", "roc", 520, 10, 1000, 1000) canvas.SetTopMargin(0.5 * canvas.GetTopMargin()) canvas.SetBottomMargin(1 * canvas.GetBottomMargin()) canvas.SetLeftMargin(1 * canvas.GetLeftMargin()) canvas.SetRightMargin(0.5 * canvas.GetRightMargin()) h.Draw('h') canvas.Update() canvas.SaveAs(output_file)
def main(): if jpsi: utils.defaultJetIsoSetting = "NoIso" iFile = TFile(input_file, "update") #hHt = iFile.Get('hHt') tree = iFile.Get('tEvent') nentries = tree.GetEntries() # CREATE VARS, BRANCHES, AND BDT READERS vars["BDT"] = ROOT.std.vector(double)() vars["BtagsDeepMedium"] = np.zeros(1, dtype=int) if tree.GetBranchStatus("BDT"): print "Reseting branch", "BDT" branches["BDT"] = tree.GetBranch("BDT") branches["BDT"].Reset() tree.SetBranchAddress("BDT", vars["BDT"]) else: print "Branching", "BDT" branches["BDT"] = tree.Branch("BDT", 'std::vector<double>', vars["BDT"]) tree.SetBranchAddress("BDT", vars["BDT"]) if tree.GetBranchStatus("BtagsDeepMedium"): branch = tree.GetBranch("BtagsDeepMedium") branch.Reset() branch.SetAddress(vars["BtagsDeepMedium"]) else: branches["BtagsDeepMedium"] = tree.Branch("BtagsDeepMedium", vars["BtagsDeepMedium"], "BtagsDeepMedium/I") bdt_weights = bdt + "/dataset/weights/TMVAClassification_BDT.weights.xml" bdt_vars = cut_optimisation.getVariablesFromXMLWeightsFile(bdt_weights) print "bdt_vars", bdt_vars bdt_vars_map = cut_optimisation.getVariablesMemMap(bdt_vars) print "bdt_vars_map", bdt_vars_map bdt_specs = cut_optimisation.getSpecSpectatorFromXMLWeightsFile( bdt_weights) print "bdt_specs", bdt_specs bdt_specs_map = cut_optimisation.getSpectatorsMemMap(bdt_specs) print "bdt_specs_map", bdt_specs_map bdt_reader = cut_optimisation.prepareReader(bdt_weights, bdt_vars, bdt_vars_map, bdt_specs, bdt_specs_map) bdt_vars_maps["BDT"] = bdt_vars_map bdt_specs_maps["BDT"] = bdt_specs_map bdt_readers["BDT"] = bdt_reader print 'Analysing', nentries, "entries" iFile.cd() for ientry in range(nentries): if ientry % 1000 == 0: print "Processing " + str(ientry) + " out of " + str(nentries) tree.GetEntry(ientry) c = tree vars["BDT"] = ROOT.std.vector(double)() nj, btagsDeepMedium, ljet = analysis_ntuples.eventNumberOfJets25Pt2_4Eta_DeepMedium( c.Jets, c.Jets_bJetTagDeepCSVBvsAll) if nj is None or btagsDeepMedium is None: btagsDeepMedium = 0 vars["BtagsDeepMedium"][0] = btagsDeepMedium for i in range(c.invMass.size()): tagMuonIdx = c.tagMuon[i] probeTrackIdx = c.probeTrack[i] tagMuon = c.Muons[tagMuonIdx] probeTrack = c.tracks[probeTrackIdx] if not (probeTrack.Pt() < 3 and abs(probeTrack.Eta()) >= 1.2 and abs(probeTrack.Eta()) <= 2.4): vars["BDT"].push_back(1) else: for k, v in bdt_vars_maps["BDT"].items(): #print "********" if analysis_ntuples.commonFlatObs.get(k) is not None: v[0] = eval("tree." + k) elif analysis_ntuples.muonsObs.get(k) is not None: if analysis_ntuples.muonsObs.get(k) == "bool": v[0] = bool(eval("tree." + k)[tagMuonIdx]) else: #print "eval(tree." + k + ")", eval("tree." + k + "[" + str(tagMuonIdx) + "]"), tagMuonIdx v[0] = eval("tree." + k)[tagMuonIdx] elif utils.commonObservablesDTypesList.get(k) is not None: v[0] = eval("tree." + k)[i] elif "tagMuon" in k: #print "eval(" + k + ")", eval(k) v[0] = eval(k) else: print "WTF", k exit(1) bdt_score = bdt_readers["BDT"].EvaluateMVA("BDT") #print bdt_specs_maps["BDT"] #print "bdt_score", bdt_score vars["BDT"].push_back(bdt_score) tree.SetBranchAddress("BDT", vars["BDT"]) branches["BDT"].Fill() branches["BtagsDeepMedium"].Fill() tree.Write("tEvent", TObject.kOverwrite) print "DONE SKIMMING" iFile.Close()
def main(): iFile = TFile(input_file) #hHt = iFile.Get('hHt') c = iFile.Get('tEvent') triggerFileName = os.path.expandvars( "$CMSSW_BASE/src/cms-tools/lib/susy-trig-plots.root") print "Opening trigger file: " + triggerFileName triggerFile = TFile(triggerFileName, "read") tEffhMetMhtRealXMet2016 = analysis_ntuples.getTrigEffGraph( triggerFile, 'tEffhMetMhtRealXMet;1') tEffhMetMhtRealXMet2017 = analysis_ntuples.getTrigEffGraph( triggerFile, 'tEffhMetMhtRealXMet;2') tEffhMetMhtRealXMet2018 = analysis_ntuples.getTrigEffGraph( triggerFile, 'tEffhMetMhtRealXMet;3') tEffhMetMhtRealXMht2016 = analysis_ntuples.getTrigEffGraph( triggerFile, 'tEffhMetMhtRealXMht;1') tEffhMetMhtRealXMht2017 = analysis_ntuples.getTrigEffGraph( triggerFile, 'tEffhMetMhtRealXMht;2') tEffhMetMhtRealXMht2018 = analysis_ntuples.getTrigEffGraph( triggerFile, 'tEffhMetMhtRealXMht;3') tree = c.CloneTree(0) tree.SetDirectory(0) var_dilepBDT = np.zeros(1, dtype=float) var_leptons_ParentPdgId = ROOT.std.vector(int)() var_leptonParentPdgId = np.zeros(1, dtype=int) var_trackParentPdgId = np.zeros(1, dtype=int) var_trackParentPdgId = np.zeros(1, dtype=int) var_tEffhMetMhtRealXMet2016 = np.zeros(1, dtype=float) var_tEffhMetMhtRealXMet2017 = np.zeros(1, dtype=float) var_tEffhMetMhtRealXMet2018 = np.zeros(1, dtype=float) var_tEffhMetMhtRealXMht2016 = np.zeros(1, dtype=float) var_tEffhMetMhtRealXMht2017 = np.zeros(1, dtype=float) var_tEffhMetMhtRealXMht2018 = np.zeros(1, dtype=float) var_passedMhtMet6pack = np.zeros(1, dtype=bool) var_tautau = np.zeros(1, dtype=bool) var_rr = np.zeros(1, dtype=bool) var_rf = np.zeros(1, dtype=bool) var_ff = np.zeros(1, dtype=bool) var_sc = np.zeros(1, dtype=bool) var_n_body = np.zeros(1, dtype=bool) var_tc = np.zeros(1, dtype=bool) var_other = np.zeros(1, dtype=bool) var_omega = np.zeros(1, dtype=bool) var_rho_0 = np.zeros(1, dtype=bool) var_eta = np.zeros(1, dtype=bool) var_phi = np.zeros(1, dtype=bool) var_eta_prime = np.zeros(1, dtype=bool) var_j_psi = np.zeros(1, dtype=bool) var_upsilon_1 = np.zeros(1, dtype=bool) var_upsilon_2 = np.zeros(1, dtype=bool) tree.Branch('dilepBDT', var_dilepBDT, 'dilepBDT/D') tree.Branch('tEffhMetMhtRealXMet2016', var_tEffhMetMhtRealXMet2016, 'tEffhMetMhtRealXMet2016/D') tree.Branch('tEffhMetMhtRealXMet2017', var_tEffhMetMhtRealXMet2017, 'tEffhMetMhtRealXMet2017/D') tree.Branch('tEffhMetMhtRealXMet2018', var_tEffhMetMhtRealXMet2018, 'tEffhMetMhtRealXMet2018/D') tree.Branch('tEffhMetMhtRealXMht2016', var_tEffhMetMhtRealXMht2016, 'tEffhMetMhtRealXMht2016/D') tree.Branch('tEffhMetMhtRealXMht2017', var_tEffhMetMhtRealXMht2017, 'tEffhMetMhtRealXMht2017/D') tree.Branch('tEffhMetMhtRealXMht2018', var_tEffhMetMhtRealXMht2018, 'tEffhMetMhtRealXMht2018/D') tree.Branch('passedMhtMet6pack', var_passedMhtMet6pack, 'passedMhtMet6pack/b') if not data: if two_leptons: print "TWO_LEPTONS!" tree.Branch('leptons_ParentPdgId', 'std::vector<int>', var_leptons_ParentPdgId) if bg: tree.Branch('tautau', var_tautau, 'tautau/b') tree.Branch('rr', var_rr, 'rr/b') tree.Branch('rf', var_rf, 'rf/b') tree.Branch('ff', var_ff, 'ff/b') tree.Branch('sc', var_sc, 'sc/b') tree.Branch('n_body', var_n_body, 'n_body/b') tree.Branch('tc', var_tc, 'tc/b') tree.Branch('other', var_other, 'other/b') tree.Branch('omega', var_omega, 'omega/b') tree.Branch('rho_0', var_rho_0, 'rho_0/b') tree.Branch('eta', var_eta, 'eta/b') tree.Branch('phi', var_phi, 'phi/b') tree.Branch('eta_prime', var_eta_prime, 'eta_prime/b') tree.Branch('j_psi', var_j_psi, 'j_psi/b') tree.Branch('upsilon_1', var_upsilon_1, 'upsilon_1/b') tree.Branch('upsilon_2', var_upsilon_2, 'upsilon_2/b') else: tree.Branch('leptonParentPdgId', var_leptonParentPdgId, 'leptonParentPdgId/I') tree.Branch('trackParentPdgId', var_trackParentPdgId, 'trackParentPdgId/I') nentries = c.GetEntries() print 'Analysing', nentries, "entries" (univ_testBGHists, univ_trainBGHists, univ_testSignalHists, univ_trainSignalHists, univ_methods, univ_names) = cut_optimisation.get_bdt_hists([univ_bdt]) univ_trainSignalHist, univ_trainBGHist, univ_testSignalHist, univ_testBGHist = univ_trainSignalHists[ 0], univ_trainBGHists[0], univ_testSignalHists[0], univ_testBGHists[0] univ_highestZ, univ_highestS, univ_highestB, univ_highestMVA, univ_ST, univ_BT = cut_optimisation.getHighestZ( univ_trainSignalHist, univ_trainBGHist, univ_testSignalHist, univ_testBGHist) univ_bdt_weights = univ_bdt + "/dataset/weights/TMVAClassification_BDT.weights.xml" univ_bdt_vars = cut_optimisation.getVariablesFromXMLWeightsFile( univ_bdt_weights) univ_bdt_vars_map = cut_optimisation.getVariablesMemMap(univ_bdt_vars) univ_bdt_specs = cut_optimisation.getSpecSpectatorFromXMLWeightsFile( univ_bdt_weights) univ_bdt_specs_map = cut_optimisation.getSpectatorsMemMap(univ_bdt_specs) print univ_bdt_vars print univ_bdt_vars_map print univ_bdt_specs print univ_bdt_specs_map univ_bdt_reader = cut_optimisation.prepareReader(univ_bdt_weights, univ_bdt_vars, univ_bdt_vars_map, univ_bdt_specs, univ_bdt_specs_map) print "-------------------" print "univ_highestZ=" + str(univ_highestZ) print "univ_highestS=" + str(univ_highestS) print "univ_highestB=" + str(univ_highestB) print "univ_highestMVA=" + str(univ_highestMVA) print "univ_ST=" + str(univ_ST) print "univ_BT=" + str(univ_BT) print "-------------------" for ientry in range(nentries): if ientry % 1000 == 0: print "Processing " + str(ientry) + " out of " + str(nentries) c.GetEntry(ientry) for k, v in univ_bdt_vars_map.items(): v[0] = eval("c." + k) dilep_tmva_value = univ_bdt_reader.EvaluateMVA("BDT") # Selection #if dilep_tmva_value < -0.3 or c.Met < 200 or c.univBDT < -0.4 or c.tracks[0].Pt() < 3 or c.tracks[0].Pt() > 15 or c.tracks_dzVtx[0] > 0.1 or c.tracks_dxyVtx[0] > 0.1 or abs(c.tracks[0].Eta()) > 2.4: #if dilep_tmva_value < -0.3 or c.Met < 200 or c.univBDT < -0.4 or c.tracks[0].Pt() < 3 or c.tracks[0].Pt() > 15 or abs(c.tracks[0].Eta()) > 2.4: # continue #if c.Mht < 200: # continue var_dilepBDT[0] = dilep_tmva_value if not data: gens = [i for i in range(c.GenParticles.size())] #print "c.GenParticles.size() ", c.GenParticles.size(), gens if two_leptons: if bg: var_tautau[0] = False var_rr[0] = False var_rf[0] = False var_ff[0] = False var_sc[0] = False var_n_body[0] = False var_tc[0] = False var_other[0] = False var_omega[0] = False var_rho_0[0] = False var_eta[0] = False var_phi[0] = False var_eta_prime[0] = False var_j_psi[0] = False var_upsilon_1[0] = False var_upsilon_2[0] = False var_leptons_ParentPdgId = ROOT.std.vector(int)() lepCans = [] numRealLeptons = 0 for i in range(c.leptons.size()): lepton = c.leptons[i] min, minCan = analysis_ntuples.minDeltaRGenParticles( lepton, gens, c.GenParticles) pdgId = c.GenParticles_ParentId[minCan] if min > 0.01: #print "BAD GEN!!! ", min pdgId = 0 else: if ((abs(c.GenParticles_PdgId[minCan]) == 13 and c.leptonFlavour == "Muons") or (abs(c.GenParticles_PdgId[minCan]) == 11 and c.leptonFlavour == "Electrons")) and c.leptons_charge[ i] * c.GenParticles_PdgId[minCan] < 0: numRealLeptons += 1 lepCans.append(minCan) else: #print "BAD GEN MATCH! " pdgId = 0 # parentIdx = c.GenParticles_ParentIdx[minCan] # if c.GenParticles_PdgId[parentIdx] != pdgId: # print "WHAT?!?! ******** c.GenParticles_PdgId[parentIdx]", c.GenParticles_PdgId[parentIdx], "pdgId", pdgId, "parentIdx", parentIdx # print "c.GenParticles_ParentId[minCan]", c.GenParticles_ParentId[minCan], "c.GenParticles_PdgId[parentIdx]", c.GenParticles_PdgId[parentIdx] var_leptons_ParentPdgId.push_back(pdgId) tree.SetBranchAddress('leptons_ParentPdgId', var_leptons_ParentPdgId) if bg: if numRealLeptons == 0: var_ff[0] = True elif numRealLeptons == 1: var_rf[0] = True else: var_rr[0] = True if abs(var_leptons_ParentPdgId[0]) == abs( var_leptons_ParentPdgId[1]) == 15: var_tautau[0] = True parentIdx = c.GenParticles_ParentIdx[lepCans[0]] parentIdx2 = c.GenParticles_ParentIdx[lepCans[1]] if parentIdx == -1 and parentIdx2 == -1: var_other[0] = True if abs(var_leptons_ParentPdgId[0]) == abs( var_leptons_ParentPdgId[1]) == 223: var_omega[0] = True elif abs(var_leptons_ParentPdgId[0]) == abs( var_leptons_ParentPdgId[1]) == 113: var_rho_0[0] = True elif abs(var_leptons_ParentPdgId[0]) == abs( var_leptons_ParentPdgId[1]) == 221: var_eta[0] = True elif abs(var_leptons_ParentPdgId[0]) == abs( var_leptons_ParentPdgId[1]) == 333: var_phi[0] = True elif abs(var_leptons_ParentPdgId[0]) == abs( var_leptons_ParentPdgId[1]) == 331: var_eta_prime[0] = True elif abs(var_leptons_ParentPdgId[0]) == abs( var_leptons_ParentPdgId[1]) == 443: var_j_psi[0] = True elif abs(var_leptons_ParentPdgId[0]) == abs( var_leptons_ParentPdgId[1]) == 553: var_upsilon_1[0] = True elif abs(var_leptons_ParentPdgId[0]) == abs( var_leptons_ParentPdgId[1]) == 100553: var_upsilon_2[0] = True else: if c.GenParticles_ParentIdx[ lepCans[0]] == c.GenParticles_ParentIdx[ lepCans[1]]: numOfParentChildren = 0 for i in range(c.GenParticles.size()): if c.GenParticles_Status[ i] == 1 and c.GenParticles_ParentIdx[ i] == parentIdx: numOfParentChildren += 1 #print "numOfParentChildren=", numOfParentChildren, "var_leptons_ParentPdgId[0]", var_leptons_ParentPdgId[0], "c.GenParticles_PdgId[parentIdx]", c.GenParticles_PdgId[parentIdx], "c.GenParticles_PdgId[parentIdx2]", c.GenParticles_PdgId[parentIdx2] #print lepCans if numOfParentChildren == 2: var_sc[0] = True if abs(c.GenParticles_PdgId[parentIdx] ) == 223: var_omega[0] = True elif abs(c.GenParticles_PdgId[parentIdx] ) == 113: var_rho_0[0] = True elif abs(c.GenParticles_PdgId[parentIdx] ) == 221: var_eta[0] = True elif abs(c.GenParticles_PdgId[parentIdx] ) == 333: var_phi[0] = True elif abs(c.GenParticles_PdgId[parentIdx] ) == 331: var_eta_prime[0] = True elif abs(c.GenParticles_PdgId[parentIdx] ) == 443: var_j_psi[0] = True elif abs(c.GenParticles_PdgId[parentIdx] ) == 553: var_upsilon_1[0] = True elif abs(c.GenParticles_PdgId[parentIdx] ) == 100553: var_upsilon_2[0] = True else: var_n_body[0] = True else: var_tc[0] = True else: min, minCan = analysis_ntuples.minDeltaRGenParticles( c.lepton, gens, c.GenParticles) #print min, m inCan pdgId = c.GenParticles_ParentId[minCan] if min > 0.05: # print "BAD GEN LEPTON!!!" pdgId = 0 #else: # print "GOOD LEPTON ", pdgId var_leptonParentPdgId[0] = pdgId min, minCan = analysis_ntuples.minDeltaRGenParticles( c.track, gens, c.GenParticles) pdgId = c.GenParticles_ParentId[minCan] if min > 0.05: #print "BAD GEN TRACK!!!" pdgId = 0 #else: # print "GOOD TRACK ", pdgId var_trackParentPdgId[0] = pdgId if not data: var_tEffhMetMhtRealXMet2016[0] = tEffhMetMhtRealXMet2016.Eval( c.Met) var_tEffhMetMhtRealXMet2017[0] = tEffhMetMhtRealXMet2017.Eval( c.Met) var_tEffhMetMhtRealXMet2018[0] = tEffhMetMhtRealXMet2018.Eval( c.Met) var_tEffhMetMhtRealXMht2016[0] = tEffhMetMhtRealXMht2016.Eval( c.Mht) var_tEffhMetMhtRealXMht2017[0] = tEffhMetMhtRealXMht2017.Eval( c.Mht) var_tEffhMetMhtRealXMht2018[0] = tEffhMetMhtRealXMht2018.Eval( c.Mht) var_passedMhtMet6pack[0] = True #if c.Met < 200: # print "HERE:", var_tEffhMetMhtRealXMet2016[0] else: print "ELSE!!" var_tEffhMetMhtRealXMet2016[0] = 1 var_tEffhMetMhtRealXMet2017[0] = 1 var_tEffhMetMhtRealXMet2018[0] = 1 var_tEffhMetMhtRealXMht2016[0] = 1 var_tEffhMetMhtRealXMht2017[0] = 1 var_tEffhMetMhtRealXMht2018[0] = 1 var_passedMhtMet6pack[0] = analysis_ntuples.passTrig( c, "MhtMet6pack") tree.Fill() print "DONE SKIMMING" if iFile.GetListOfKeys().Contains("lumiSecs") or tree.GetEntries() != 0: fnew = TFile(output_file, 'recreate') tree.Write() print "Done writing tree..." if iFile.GetListOfKeys().Contains("lumiSecs"): lumiSecs = iFile.Get("lumiSecs") lumiSecs.Write("lumiSecs") #hHt.Write() fnew.Close() else: print "*** RESULT EMPTY" iFile.Close()
def main(): if jpsi: utils.defaultJetIsoSetting = "NoIso" iFile = TFile(input_file, "update") #hHt = iFile.Get('hHt') tree = iFile.Get('tEvent') nentries = tree.GetEntries() # CREATE VARS, BRANCHES, AND BDT READERS for iso in utils.leptonIsolationList: for cat in utils.leptonIsolationCategories: ptRanges = [""] drCuts = [""] if iso == "CorrJetIso": ptRanges = utils.leptonCorrJetIsoPtRange drCuts = utils.leptonCorrJetIsoDrCuts for ptRange in ptRanges: for drCut in drCuts: cuts = "" if len(str(ptRange)) > 0: cuts = str(ptRange) + "Dr" + str(drCut) postfixi = [iso + cuts + cat] if iso + str(ptRange) + cat == utils.defaultJetIsoSetting: postfixi = [iso + cuts + cat, ""] for postfix in postfixi: for DTypeObs in analysis_observables.commonPostBdtObservablesDTypesList: for prefix in ["", "exTrack_"]: sameChargeOptions = [False, True] if prefix == "exTrack_" else [False] for sameCharge in sameChargeOptions: sc_prefix = "sc_" if sameCharge else "" vars[sc_prefix + prefix + DTypeObs + postfix] = np.zeros(1,dtype=analysis_observables.commonPostBdtObservablesDTypesList[DTypeObs]) if tree.GetBranchStatus(sc_prefix + prefix + DTypeObs + postfix): print "Reseting branch", sc_prefix + prefix + DTypeObs + postfix branches[sc_prefix + prefix + DTypeObs + postfix] = tree.GetBranch(sc_prefix + prefix + DTypeObs + postfix) branches[sc_prefix + prefix + DTypeObs + postfix].Reset() tree.SetBranchAddress(sc_prefix + prefix + DTypeObs + postfix, vars[sc_prefix + prefix + DTypeObs + postfix]) else: print "Branching", sc_prefix + prefix + DTypeObs + postfix branches[sc_prefix + prefix + DTypeObs + postfix] = tree.Branch(sc_prefix + prefix + DTypeObs + postfix, vars[sc_prefix + prefix + DTypeObs + postfix], sc_prefix + prefix + DTypeObs + postfix + "/" + utils.typeTranslation[analysis_observables.commonPostBdtObservablesDTypesList[DTypeObs]]) tree.SetBranchAddress(sc_prefix + prefix + DTypeObs + postfix, vars[sc_prefix + prefix + DTypeObs + postfix]) for DTypeObs in analysis_observables.exclusiveTrackPostBdtObservablesDTypesList: for sameCharge in [False, True]: sc_prefix = "sc_" if sameCharge else "" vars[sc_prefix + DTypeObs + postfix] = np.zeros(1,dtype=analysis_observables.exclusiveTrackPostBdtObservablesDTypesList[DTypeObs]) if tree.GetBranchStatus(sc_prefix + DTypeObs + postfix): print "Reseting branch", sc_prefix + DTypeObs + postfix branches[sc_prefix + DTypeObs + postfix] = tree.GetBranch(sc_prefix + DTypeObs + postfix) branches[sc_prefix + DTypeObs + postfix].Reset() tree.SetBranchAddress(sc_prefix + DTypeObs + postfix, vars[sc_prefix + DTypeObs + postfix]) else: print "Branching", sc_prefix + DTypeObs + postfix branches[sc_prefix + DTypeObs + postfix] = tree.Branch(sc_prefix + DTypeObs + postfix, vars[sc_prefix + DTypeObs + postfix], sc_prefix + DTypeObs + postfix + "/" + utils.typeTranslation[analysis_observables.exclusiveTrackPostBdtObservablesDTypesList[DTypeObs]]) tree.SetBranchAddress(sc_prefix + DTypeObs + postfix, vars[sc_prefix + DTypeObs + postfix]) if not jpsi: for prefix in ["reco", "exTrack"]: for lep in ["Muons", "Electrons"]: dirname = prefix + lep + iso + cat + cuts name = prefix + lep + iso + cuts + cat bdt_weights = bdt + "/" + dirname + "/dataset/weights/TMVAClassification_" + name + ".weights.xml" bdt_vars = cut_optimisation.getVariablesFromXMLWeightsFile(bdt_weights) bdt_vars_map = cut_optimisation.getVariablesMemMap(bdt_vars) bdt_specs = cut_optimisation.getSpecSpectatorFromXMLWeightsFile(bdt_weights) bdt_specs_map = cut_optimisation.getSpectatorsMemMap(bdt_specs) bdt_reader = cut_optimisation.prepareReader(bdt_weights, bdt_vars, bdt_vars_map, bdt_specs, bdt_specs_map) bdt_vars_maps[prefix + lep + iso + cuts + cat] = bdt_vars_map bdt_specs_maps[prefix + lep + iso + cuts + cat] = bdt_specs_map bdt_readers[prefix + lep + iso + cuts + cat] = bdt_reader print 'Analysing', nentries, "entries" iFile.cd() for ientry in range(nentries): if ientry % 1000 == 0: print "Processing " + str(ientry) + " out of " + str(nentries) tree.GetEntry(ientry) for iso in utils.leptonIsolationList: for cat in utils.leptonIsolationCategories: ptRanges = [""] drCuts = [""] if iso == "CorrJetIso": ptRanges = utils.leptonCorrJetIsoPtRange drCuts = utils.leptonCorrJetIsoDrCuts for ptRange in ptRanges: for drCut in drCuts: cuts = "" if len(str(ptRange)) > 0: cuts = str(ptRange) + "Dr" + str(drCut) postfixi = [iso + cuts + cat] if iso + str(ptRange) + cat == utils.defaultJetIsoSetting: postfixi = [iso + cuts + cat, ""] for postfix in postfixi: for prefix in ["reco", "exTrack"]: prefixVars = "" if prefix == "exTrack": prefixVars = "exTrack_" sameChargeOptions = [False, True] if prefix == "exTrack" else [False] for sameCharge in sameChargeOptions: sc_prefix = "sc_" if sameCharge else "" eventPassed = False leptonFlavour = "" if prefix == "reco": #if eval("tree.twoLeptons" + postfix) == 1 and tree.BTagsDeepMedium == 0 and eval("tree.leptons" + postfix).size() == 2: if getattr(tree, "twoLeptons" + postfix) == 1 and getattr(tree, "leptons" + postfix).size() == 2: eventPassed = True leptonFlavour = getattr(tree, "leptonFlavour" + postfix) # Before #elif eval("tree." + sc_prefix + "exclusiveTrack" + postfix) == 1 and tree.BTagsDeepMedium == 0 and eval("tree." + sc_prefix + "trackBDT" + postfix) >= 0: # Making new version without trackBDT precut elif getattr(tree, sc_prefix + "exclusiveTrack" + postfix) == 1 and tree.BTagsDeepMedium == 0: eventPassed = True leptonFlavour = getattr(tree, sc_prefix + "exclusiveTrackLeptonFlavour" + postfix) if not jpsi and eventPassed: leptonFlavour = str(leptonFlavour) name = prefix + leptonFlavour + postfix #print bdt_vars_maps[prefix + postfix] #print name, eval("tree.twoLeptons" + postfix), eval("tree.exclusiveTrack" + postfix) for k, v in bdt_vars_maps[prefix + leptonFlavour + iso + cuts + cat].items(): #print k, v try: if k in analysis_observables.dileptonBDTeventObservables: if k == "LeadingJet.Eta()": v[0] = eval("tree.LeadingJet.Eta()") else: #print "getattr(tree, k)", k v[0] = getattr(tree, k) else: #print k, " not in analysis_observables.dileptonBDTeventObservables" #print "eval", "tree." + sc_prefix + k #print "getattr(tree, sc_prefix + k)", sc_prefix + k if "[" in k: #print "Special stuff" (basenameK, postfixK) = k.split("[") #print basenameK, postfixK branch = getattr(tree, sc_prefix + basenameK) #print "branch", branch #print "Going to eval", "branch[" + postfixK v[0] = eval("branch[" + postfixK) #print "After", v[0] elif "()" in k: #print "Special stuff" (basenameK, postfixK) = k.rsplit(".", 1) #print basenameK, postfixK branch = getattr(tree, sc_prefix + basenameK) #print "branch", branch #print "Going to eval", "branch." + postfixK v[0] = eval("branch." + postfixK) #print "After", v[0] else: v[0] = getattr(tree, sc_prefix + k) except Exception as e: print "exception", e print ientry, k, name, getattr(tree, "twoLeptons" + iso + cuts + cat), getattr(tree, "exclusiveTrack" + iso + cuts + cat) print "ERROR!!! GIVING UP..." exit(0) for k, v in bdt_specs_maps[prefix + leptonFlavour + iso + cuts + cat].items(): if data and k == "Weight": v[0] = 1 else: v[0] = getattr(tree, k) vars[sc_prefix + prefixVars + "dilepBDT" + postfix][0] = bdt_readers[prefix + leptonFlavour+ iso + cuts + cat].EvaluateMVA("BDT") #if sc_prefix == "sc_" and postfix == "" and prefixVars == "exTrack_": # print "Getting BDT score", sc_prefix + prefixVars + "dilepBDT" + postfix, vars[sc_prefix + prefixVars + "dilepBDT" + postfix][0] #print bdt_vars_maps else: vars[sc_prefix + prefixVars + "dilepBDT" + postfix][0] = -1 if signal and getattr(tree, sc_prefix + "exclusiveTrack" + postfix) == 1: gens = [i for i in range(tree.GenParticles.size())] min, minCan = analysis_ntuples.minDeltaRGenParticles(getattr(tree, sc_prefix + "lepton" + postfix), gens, tree.GenParticles) #print min, minCan pdgId = tree.GenParticles_ParentId[minCan] if minCan is None or min > 0.05: # print "BAD GEN LEPTON!!!" pdgId = 0 #else: # print "GOOD LEPTON ", pdgId vars[sc_prefix + "leptonParentPdgId" + postfix][0] = pdgId min, minCan = analysis_ntuples.minDeltaRGenParticles(getattr(tree, sc_prefix + "track"+ postfix), gens, tree.GenParticles) pdgId = tree.GenParticles_ParentId[minCan] if min > 0.05: #print "BAD GEN TRACK!!!" pdgId = 0 #else: # print "GOOD TRACK ", pdgId vars[sc_prefix + "trackParentPdgId" + postfix][0] = pdgId else: vars[sc_prefix + "leptonParentPdgId" + postfix][0] = -1 vars[sc_prefix + "trackParentPdgId" + postfix][0] = -1 for DTypeObs in analysis_observables.commonPostBdtObservablesDTypesList: for prefix in ["", "exTrack_"]: sameChargeOptions = [False, True] if prefix == "exTrack_" else [False] for sameCharge in sameChargeOptions: sc_prefix = "sc_" if sameCharge else "" branches[sc_prefix + prefix + DTypeObs + postfix].Fill() for DTypeObs in analysis_observables.exclusiveTrackPostBdtObservablesDTypesList: for sameCharge in [False, True]: sc_prefix = "sc_" if sameCharge else "" branches[sc_prefix + DTypeObs + postfix].Fill() tree.Write("tEvent",TObject.kOverwrite) print "DONE SKIMMING" iFile.Close()
def main(): if jpsi: utils.defaultJetIsoSetting = "NoIso" file = TFile(input_file, "update") c = file.Get("tEvent") nentries = c.GetEntries() # CREATE VARS, BRANCHES, AND BDT READERS for iso in utils.leptonIsolationList: for cat in utils.leptonIsolationCategories: ptRanges = [""] drCuts = [""] if iso == "CorrJetIso": ptRanges = utils.leptonCorrJetIsoPtRange drCuts = utils.leptonCorrJetIsoDrCuts for ptRange in ptRanges: for drCut in drCuts: cuts = "" if len(str(ptRange)) > 0: cuts = str(ptRange) + "Dr" + str(drCut) postfixi = [iso + cuts + cat] if iso + cuts + cat == utils.defaultJetIsoSetting: postfixi = [iso + cuts + cat, ""] for postfix in postfixi: for sameCharge in [False, True]: prefix = "sc_" if sameCharge else "" for stringObs in analysis_observables.exclusiveTrackObservablesStringList: exTrackVars[prefix + stringObs + postfix] = cppyy.gbl.std.string("") if c.GetBranchStatus(prefix + stringObs + postfix): print("Reseting branch", prefix + stringObs + postfix) branches[prefix + stringObs + postfix] = c.GetBranch(prefix + stringObs + postfix) branches[prefix + stringObs + postfix].Reset() c.SetBranchAddress(prefix + stringObs + postfix, exTrackVars[prefix + stringObs + postfix]) else: print("Branching", prefix + stringObs + postfix) branches[prefix + stringObs + postfix] = c.Branch(prefix + stringObs + postfix, 'std::string', exTrackVars[prefix + stringObs + postfix]) c.SetBranchAddress(prefix + stringObs + postfix, exTrackVars[prefix + stringObs + postfix]) for DTypeObs in analysis_observables.commonObservablesDTypesList: exTrackVars[prefix + "exTrack_" + DTypeObs + postfix] = np.zeros(1,dtype=analysis_observables.commonObservablesDTypesList[DTypeObs]) if c.GetBranchStatus(prefix + "exTrack_" + DTypeObs + postfix): print("Reseting branch", prefix + "exTrack_" + DTypeObs + postfix) branches[prefix + "exTrack_" + DTypeObs + postfix] = c.GetBranch(prefix + "exTrack_" + DTypeObs + postfix) branches[prefix + "exTrack_" + DTypeObs + postfix].Reset() c.SetBranchAddress(prefix + "exTrack_" + DTypeObs + postfix, exTrackVars[prefix + "exTrack_" + DTypeObs + postfix]) #branches["exTrack_" + DTypeObs + postfix].SetAddress(exTrackVars["exTrack_" + DTypeObs + postfix]) else: print("Branching", prefix + "exTrack_" + DTypeObs + postfix) branches[prefix + "exTrack_" + DTypeObs + postfix] = c.Branch(prefix + "exTrack_" + DTypeObs + postfix, exTrackVars[prefix + stringObs + postfix], prefix + "exTrack_" + DTypeObs + postfix + "/" + utils.typeTranslation[analysis_observables.commonObservablesDTypesList[DTypeObs]]) c.SetBranchAddress(prefix + "exTrack_" + DTypeObs + postfix, exTrackVars[prefix + "exTrack_" + DTypeObs + postfix]) for DTypeObs in analysis_observables.exclusiveTrackObservablesDTypesList: exTrackVars[prefix + DTypeObs + postfix] = np.zeros(1,dtype=analysis_observables.exclusiveTrackObservablesDTypesList[DTypeObs]) if c.GetBranchStatus(prefix + DTypeObs + postfix): print("Reseting branch", prefix + DTypeObs + postfix) branches[prefix + DTypeObs + postfix] = c.GetBranch(prefix + DTypeObs + postfix) branches[prefix + DTypeObs + postfix].Reset() c.SetBranchAddress(prefix + DTypeObs + postfix, exTrackVars[prefix + DTypeObs + postfix]) #branches[DTypeObs + postfix].SetAddress(exTrackVars[DTypeObs + postfix]) else: print("Branching", prefix + DTypeObs + postfix) branches[prefix + DTypeObs + postfix] = c.Branch(prefix + DTypeObs + postfix, exTrackVars[prefix + DTypeObs + postfix], prefix + DTypeObs + postfix + "/" + utils.typeTranslation[analysis_observables.exclusiveTrackObservablesDTypesList[DTypeObs]]) c.SetBranchAddress(prefix + DTypeObs + postfix, exTrackVars[prefix + DTypeObs + postfix]) for CTypeObs in analysis_observables.exclusiveTrackObservablesClassList: exTrackVars[prefix + CTypeObs + postfix] = eval(analysis_observables.exclusiveTrackObservablesClassList[CTypeObs])() if c.GetBranchStatus(prefix + CTypeObs + postfix): print("Reseting branch", prefix + CTypeObs + postfix) branches[prefix + CTypeObs + postfix] = c.GetBranch(prefix + CTypeObs + postfix) branches[prefix + CTypeObs + postfix].Reset() c.SetBranchAddress(prefix + CTypeObs + postfix, exTrackVars[prefix + CTypeObs + postfix]) else: print("Branching", prefix + CTypeObs + postfix) branches[prefix + CTypeObs + postfix] = c.Branch(prefix + CTypeObs + postfix, analysis_observables.exclusiveTrackObservablesClassList[CTypeObs], exTrackVars[prefix + CTypeObs + postfix]) c.SetBranchAddress(prefix + CTypeObs + postfix, exTrackVars[prefix + CTypeObs + postfix]) if not jpsi: for lep in ["Muons", "Electrons"]: track_bdt_weights = track_bdt + "/dataset/weights/TMVAClassification_" + lep + iso + cuts + cat + ".weights.xml" track_bdt_vars = cut_optimisation.getVariablesFromXMLWeightsFile(track_bdt_weights) track_bdt_vars_map = cut_optimisation.getVariablesMemMap(track_bdt_vars) track_bdt_specs = cut_optimisation.getSpecSpectatorFromXMLWeightsFile(track_bdt_weights) track_bdt_specs_map = cut_optimisation.getSpectatorsMemMap(track_bdt_specs) track_bdt_reader = cut_optimisation.prepareReader(track_bdt_weights, track_bdt_vars, track_bdt_vars_map, track_bdt_specs, track_bdt_specs_map) track_bdt_vars_maps[lep + iso + cuts + cat] = track_bdt_vars_map track_bdt_specs_maps[lep + iso + cuts + cat] = track_bdt_specs_map track_bdt_readers[lep + iso + cuts + cat] = track_bdt_reader print('Analysing', nentries, "entries") afterMonoLepton = 0 afterUniversalBdt = 0 afterMonoTrack = 0 afterAtLeastOneTrack = 0 totalTracks = 0 totalSurvivedTracks = 0 eventsWithGreaterThanOneOppSignTracks = 0 noSurvivingTracks = 0 file.cd() for ientry in range(nentries): if ientry % 100 == 0: print("Processing " + str(ientry) + " out of " + str(nentries)) c.GetEntry(ientry) #continue genZL, genNonZL = None, None if signal: genZL, genNonZL = analysis_ntuples.classifyGenZLeptons(c) for iso in utils.leptonIsolationList: for cat in utils.leptonIsolationCategories: ptRanges = [""] drCuts = [""] if iso == "CorrJetIso": ptRanges = utils.leptonCorrJetIsoPtRange drCuts = utils.leptonCorrJetIsoDrCuts for ptRange in ptRanges: for drCut in drCuts: cuts = "" if len(str(ptRange)) > 0: cuts = str(ptRange) + "Dr" + str(drCut) postfixi = [iso + cuts + cat] if iso + cuts + cat == utils.defaultJetIsoSetting: postfixi = [iso + cuts + cat, ""] for postfix in postfixi: for sameCharge in [False, True]: prefix = "sc_" if sameCharge else "" exTrackVars[prefix + "exclusiveTrack" + postfix][0] = 0 exTrackVars[prefix + "trackZ" + postfix][0] = 0 ll, lepIdx, leptonCharge, leptonFlavour, t, ti = None, None, None, None, None, None if jpsi: ll, lepIdx, t, ti = analysis_ntuples.getSingleJPsiLeptonAfterSelection(24, 24, c.Muons, getattr(c, "Muons_pass" + iso + cuts), c.Muons_mediumID, c.Muons_charge, c.tracks, c.tracks_charge, utils.leptonIsolationCategories[cat]["muonPt"], utils.leptonIsolationCategories[cat]["lowPtTightMuons"], c.Muons_tightID, c.Muons_passIso) else: ll, lepIdx, leptonCharge, leptonFlavour = analysis_ntuples.getSingleLeptonAfterSelection(c.Electrons, getattr(c, "Electrons_pass" + iso + cuts), c.Electrons_deltaRLJ, c.Electrons_charge, c.Muons, getattr(c, "Muons_pass" + iso + cuts), c.Muons_mediumID, c.Muons_deltaRLJ, c.Muons_charge, utils.leptonIsolationCategories[cat]["muonPt"], utils.leptonIsolationCategories[cat]["lowPtTightMuons"], c.Muons_tightID) if ll is None: # NOT TWO TRACKS #print "**** BEFORE FILL ***" fillInNonTrackInfo(c, postfix, prefix) #print "**** AFTER FILL ***" continue if jpsi: leptonFlavour = "Muons" leptonCharge = c.Muons_charge[lepIdx] if leptonCharge == 0: print("WHAT?! leptonCharge=0") exTrackVars[prefix + "lepton_charge" + postfix][0] = leptonCharge exTrackVars[prefix + "exclusiveTrackLeptonFlavour" + postfix] = cppyy.gbl.std.string(leptonFlavour) afterMonoLepton += 1 exTrackVars[prefix + "secondTrackBDT" + postfix][0] = -1 metvec = TLorentzVector() metvec.SetPtEtaPhiE(c.MET, 0, c.METPhi, c.MET) mhtvec = TLorentzVector() mhtvec.SetPtEtaPhiE(c.MHT, 0, c.MHTPhi, c.MHT) highestOppositeTrackScore = None secondTrackScore = None secondTrack = None oppositeChargeTrack = None ntracks = 0 if not jpsi: for ti in range(c.tracks.size()): t = c.tracks[ti] if t.Pt() > 10: continue if abs(t.Eta()) > 2.4: continue tcharge = c.tracks_charge[ti] #Try lowering to 0!! if c.tracks_trkRelIso[ti] > 0.1: continue if c.tracks_dxyVtx[ti] > 0.02: continue if c.tracks_dzVtx[ti] > 0.02: continue if sameCharge: if tcharge * leptonCharge < 0: continue else: if tcharge * leptonCharge > 0: continue totalTracks +=1 deltaRLL = abs(t.DeltaR(ll)) if deltaRLL < 0.01: continue ntracks += 1 track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["deltaEtaLJ"][0] = abs(t.Eta() - c.LeadingJet.Eta()) track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["deltaRLJ"][0] = abs(t.DeltaR(c.LeadingJet)) track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["track.Phi()"][0] = t.Phi() track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["track.Pt()"][0] = t.Pt() track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["track.Eta()"][0] = t.Eta() track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["deltaEtaLL"][0] = abs(t.Eta()-ll.Eta()) track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["deltaRLL"][0] = abs(t.DeltaR(ll)) track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["mtt"][0] = analysis_tools.MT2(c.MET, c.METPhi, t) #track_bdt_vars_map["deltaRMet"][0] = abs(t.DeltaR(metvec)) track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["deltaPhiMht"][0] = abs(t.DeltaPhi(mhtvec)) track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["lepton.Eta()"][0] = ll.Eta() track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["lepton.Phi()"][0] = ll.Phi() track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["lepton.Pt()"][0] = ll.Pt() track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["invMass"][0] = (t + ll).M() #for trackVar in ['dxyVtx', 'dzVtx','trkMiniRelIso', 'trkRelIso']: # val = eval("c.tracks_" + trackVar + "[" + str(ti) + "]") # if val == 0: # val = 0.000000000000001 # track_bdt_vars_maps[leptonFlavour + iso + cuts + cat]["log(" + trackVar + ")"][0] = log(val) track_tmva_value = track_bdt_readers[leptonFlavour + iso + cuts + cat].EvaluateMVA("BDT") if highestOppositeTrackScore is None or highestOppositeTrackScore < track_tmva_value: if highestOppositeTrackScore is not None: secondTrackScore = highestOppositeTrackScore exTrackVars[prefix + "secondTrackBDT" + postfix][0] = exTrackVars[prefix + "trackBDT" + postfix][0] secondTrack = oppositeChargeTrack highestOppositeTrackScore = track_tmva_value exTrackVars[prefix + "trackBDT" + postfix][0] = track_tmva_value oppositeChargeTrack = ti else: highestOppositeTrackScore = 1 secondTrackScore = 1 secondTrack = None oppositeChargeTrack = ti ntracks = 0 if highestOppositeTrackScore is None: fillInNonTrackInfo(c, postfix, prefix) #print "2" continue #print "REAL ONE" afterAtLeastOneTrack += 1 afterMonoTrack += 1 exTrackVars[prefix + "exclusiveTrack" + postfix][0] = 1 exTrackVars[prefix + "ti" + postfix][0] = oppositeChargeTrack if secondTrack is not None: exTrackVars[prefix + "sti" + postfix][0] = secondTrack else: exTrackVars[prefix + "sti" + postfix][0] = -1 if signal: if genZL is None: exTrackVars[prefix + "trackZ" + postfix][0] = 0 else: l = c.tracks[oppositeChargeTrack] minZ, minCanZ = analysis_ntuples.minDeltaRGenParticles(l, genZL, c.GenParticles) minNZ, minCanNZ = analysis_ntuples.minDeltaRGenParticles(l, genNonZL, c.GenParticles) min = 0 if minNZ is None or minZ < minNZ: min = minZ else: min = minNZ if min < 0.01 and (minNZ is None or minZ < minNZ): if c.tracks_charge[ti] * c.GenParticles_PdgId[minCanZ] < 0 and (abs(c.GenParticles_PdgId[minCanZ]) == 11 or abs(c.GenParticles_PdgId[minCanZ]) == 13): exTrackVars[prefix + "trackZ" + postfix][0] = 1 l1 = None l2 = None if ll.Pt() > c.tracks[oppositeChargeTrack].Pt(): l1 = ll l2 = c.tracks[oppositeChargeTrack] else: l1 = c.tracks[oppositeChargeTrack] l2 = ll exTrackVars[prefix + "l1" + postfix] = l1 exTrackVars[prefix + "l2" + postfix] = l2 exTrackVars[prefix + "lepton" + postfix] = ll exTrackVars[prefix + "track" + postfix] = c.tracks[oppositeChargeTrack] exTrackVars[prefix + "leptonIdx" + postfix][0] = lepIdx if secondTrack is not None: exTrackVars[prefix + "secondTrack" + postfix] = c.tracks[secondTrack] else: exTrackVars[prefix + "secondTrack" + postfix] = TLorentzVector() exTrackVars[prefix + "exTrack_invMass" + postfix][0] = (l1 + l2).M() exTrackVars[prefix + "exTrack_dileptonPt" + postfix][0] = abs((l1 + l2).Pt()) exTrackVars[prefix + "exTrack_deltaPhi" + postfix][0] = abs(l1.DeltaPhi(l2)) exTrackVars[prefix + "exTrack_deltaEta" + postfix][0] = abs(l1.Eta() - l2.Eta()) exTrackVars[prefix + "exTrack_deltaR" + postfix][0] = abs(l1.DeltaR(l2)) exTrackVars[prefix + "NTracks" + postfix][0] = ntracks exTrackVars[prefix + "exTrack_pt3" + postfix][0] = analysis_tools.pt3(l1.Pt(),l1.Phi(),l2.Pt(),l2.Phi(),c.MET,c.METPhi) exTrackVars[prefix + "exTrack_mt1" + postfix][0] = analysis_tools.MT2(c.MET, c.METPhi, l1) exTrackVars[prefix + "exTrack_mt2" + postfix][0] = analysis_tools.MT2(c.MET, c.METPhi, l2) exTrackVars[prefix + "mtt" + postfix][0] = analysis_tools.MT2(c.MET, c.METPhi, c.tracks[oppositeChargeTrack]) exTrackVars[prefix + "mtl" + postfix][0] = analysis_tools.MT2(c.MET, c.METPhi, ll) exTrackVars[prefix + "exTrack_mtautau" + postfix][0] = analysis_tools.Mtautau(metvec, l1, l2) exTrackVars[prefix + "exTrack_deltaEtaLeadingJetDilepton" + postfix][0] = abs((l1 + l2).Eta() - c.LeadingJet.Eta()) exTrackVars[prefix + "exTrack_deltaPhiLeadingJetDilepton" + postfix][0] = abs((l1 + l2).DeltaPhi(c.LeadingJet)) exTrackVars[prefix + "exTrack_dilepHt" + postfix][0] = analysis_ntuples.htJet30Leps(c.Jets, [l1,l2]) exTrackVars[prefix + "deltaPhiMetTrack" + postfix][0] = abs(c.tracks[oppositeChargeTrack].DeltaPhi(metvec)) exTrackVars[prefix + "deltaPhiMetLepton" + postfix][0] = abs(ll.DeltaPhi(metvec)) exTrackVars[prefix + "deltaPhiMhtTrack" + postfix][0] = abs(c.tracks[oppositeChargeTrack].DeltaPhi(mhtvec)) exTrackVars[prefix + "deltaPhiMhtLepton" + postfix][0] = abs(ll.DeltaPhi(mhtvec)) #print "HERE!!!" for stringObs in analysis_observables.exclusiveTrackObservablesStringList: c.SetBranchAddress(prefix + stringObs + postfix, exTrackVars[prefix + stringObs + postfix]) #branches[stringObs + postfix].SetAddress(exTrackVars[stringObs + postfix]) branches[prefix + stringObs + postfix].Fill() for DTypeObs in analysis_observables.commonObservablesDTypesList: branches[prefix + "exTrack_" + DTypeObs + postfix].Fill() for DTypeObs in analysis_observables.exclusiveTrackObservablesDTypesList: branches[prefix + DTypeObs + postfix].Fill() for CTypeObs in analysis_observables.exclusiveTrackObservablesClassList: c.SetBranchAddress(prefix + CTypeObs + postfix, exTrackVars[prefix + CTypeObs + postfix]) #branches[CTypeObs + postfix].SetAddress(exTrackVars[CTypeObs + postfix]) branches[prefix + CTypeObs + postfix].Fill() #print "AFTER!!!" c.Write("tEvent",TObject.kOverwrite) file.Close() print("nentries=" + str(nentries)) print("totalTracks=" + str(totalTracks)) print("totalSurvivedTracks=" + str(totalSurvivedTracks)) print("eventsWithGreaterThanOneOppSignTracks=" + str(eventsWithGreaterThanOneOppSignTracks)) print("noSurvivingTracks=" + str(noSurvivingTracks)) print("afterAtLeastOneTrack=" + str(afterAtLeastOneTrack)) print("afterMonoLepton=" + str(afterMonoLepton)) print("afterUniversalBdt=" + str(afterUniversalBdt)) print("afterMonoTrack=" + str(afterMonoTrack))
def main(): iFile = TFile(input_file) #hHt = iFile.Get('hHt') c = iFile.Get('tEvent') tree = c.CloneTree(0) tree.SetDirectory(0) var_univBDT = np.zeros(1, dtype=float) tree.Branch('univBDT', var_univBDT, 'univBDT/D') var_trackBDT = np.zeros(1, dtype=float) tree.Branch('trackBDT', var_trackBDT, 'trackBDT/D') var_secondTrackBDT = np.zeros(1, dtype=float) tree.Branch('secondTrackBDT', var_secondTrackBDT, 'secondTrackBDT/D') var_l1 = TLorentzVector() var_l2 = TLorentzVector() var_lepton = TLorentzVector() var_track = TLorentzVector() var_secondTrack = TLorentzVector() var_leptonFlavour = ROOT.std.string() tree.Branch('l1', 'TLorentzVector', var_l1) tree.Branch('l2', 'TLorentzVector', var_l2) tree.Branch('lepton', 'TLorentzVector', var_lepton) tree.Branch('track', 'TLorentzVector', var_track) tree.Branch('secondTrack', 'TLorentzVector', var_secondTrack) var_ti = np.zeros(1, dtype=int) tree.Branch('ti', var_ti, 'ti/I') var_sti = np.zeros(1, dtype=int) tree.Branch('sti', var_sti, 'sti/I') var_invMass = np.zeros(1, dtype=float) var_dileptonPt = np.zeros(1, dtype=float) var_deltaPhi = np.zeros(1, dtype=float) var_deltaEta = np.zeros(1, dtype=float) var_deltaR = np.zeros(1, dtype=float) var_pt3 = np.zeros(1, dtype=float) var_mtautau = np.zeros(1, dtype=float) var_mt1 = np.zeros(1, dtype=float) var_mt2 = np.zeros(1, dtype=float) var_mtt = np.zeros(1, dtype=float) var_mtl = np.zeros(1, dtype=float) var_DeltaEtaLeadingJetDilepton = np.zeros(1, dtype=float) var_DeltaPhiLeadingJetDilepton = np.zeros(1, dtype=float) var_dilepHt = np.zeros(1, dtype=float) var_NTracks = np.zeros(1, dtype=int) var_leptonCharge = np.zeros(1, dtype=int) var_deltaRMetTrack = np.zeros(1, dtype=float) var_deltaRMetLepton = np.zeros(1, dtype=float) var_deltaPhiMetTrack = np.zeros(1, dtype=float) var_deltaPhiMetLepton = np.zeros(1, dtype=float) tree.Branch('leptonCharge', var_leptonCharge, 'leptonCharge/I') #tree.Branch('leptonFlavour', var_leptonFlavour,'leptonCharge/C') tree.Branch('leptonFlavour', 'std::string', var_leptonFlavour) tree.Branch('invMass', var_invMass, 'invMass/D') tree.Branch('dileptonPt', var_dileptonPt, 'dileptonPt/D') tree.Branch('deltaPhi', var_deltaPhi, 'deltaPhi/D') tree.Branch('deltaEta', var_deltaEta, 'deltaEta/D') tree.Branch('deltaR', var_deltaR, 'deltaR/D') tree.Branch('pt3', var_pt3, 'pt3/D') tree.Branch('mtautau', var_mtautau, 'mtautau/D') tree.Branch('mt1', var_mt1, 'mt1/D') tree.Branch('mt2', var_mt2, 'mt2/D') tree.Branch('mtt', var_mtt, 'mtt/D') tree.Branch('mtl', var_mtl, 'mtl/D') tree.Branch('DeltaEtaLeadingJetDilepton', var_DeltaEtaLeadingJetDilepton, 'DeltaEtaLeadingJetDilepton/D') tree.Branch('DeltaPhiLeadingJetDilepton', var_DeltaPhiLeadingJetDilepton, 'DeltaPhiLeadingJetDilepton/D') tree.Branch('dilepHt', var_dilepHt, 'dilepHt/D') tree.Branch('NTracks', var_NTracks, 'NTracks/I') tree.Branch('deltaRMetTrack', var_deltaRMetTrack, 'deltaRMetTrack/D') tree.Branch('deltaRMetLepton', var_deltaRMetLepton, 'deltaRMetLepton/D') tree.Branch('deltaPhiMetTrack', var_deltaPhiMetTrack, 'deltaPhiMetTrack/D') tree.Branch('deltaPhiMetLepton', var_deltaPhiMetLepton, 'deltaPhiMetLepton/D') nentries = c.GetEntries() print 'Analysing', nentries, "entries" # (univ_testBGHists, univ_trainBGHists, univ_testSignalHists, univ_trainSignalHists, univ_methods, univ_names) = cut_optimisation.get_bdt_hists([univ_bdt]) # univ_trainSignalHist, univ_trainBGHist, univ_testSignalHist, univ_testBGHist = univ_trainSignalHists[0], univ_trainBGHists[0], univ_testSignalHists[0], univ_testBGHists[0] # univ_highestZ, univ_highestS, univ_highestB, univ_highestMVA, univ_ST, univ_BT = cut_optimisation.getHighestZ(univ_trainSignalHist, univ_trainBGHist, univ_testSignalHist, univ_testBGHist) # # univ_bdt_weights = univ_bdt + "/dataset/weights/TMVAClassification_BDT.weights.xml" # univ_bdt_vars = cut_optimisation.getVariablesFromXMLWeightsFile(univ_bdt_weights) # univ_bdt_vars_map = cut_optimisation.getVariablesMemMap(univ_bdt_vars) # univ_bdt_reader = cut_optimisation.prepareReader(univ_bdt_weights, univ_bdt_vars, univ_bdt_vars_map) (track_testBGHists, track_trainBGHists, track_testSignalHists, track_trainSignalHists, track_methods, track_names) = cut_optimisation.get_bdt_hists([track_bdt]) track_trainSignalHist, track_trainBGHist, track_testSignalHist, track_testBGHist = track_trainSignalHists[ 0], track_trainBGHists[0], track_testSignalHists[0], track_testBGHists[ 0] track_highestZ, track_highestS, track_highestB, track_highestMVA, track_ST, track_BT = cut_optimisation.getHighestZ( track_trainSignalHist, track_trainBGHist, track_testSignalHist, track_testBGHist) track_bdt_weights = track_bdt + "/dataset/weights/TMVAClassification_BDT.weights.xml" track_bdt_vars = cut_optimisation.getVariablesFromXMLWeightsFile( track_bdt_weights) track_bdt_vars_map = cut_optimisation.getVariablesMemMap(track_bdt_vars) track_bdt_specs = cut_optimisation.getSpecSpectatorFromXMLWeightsFile( track_bdt_vars) track_bdt_specs_map = cut_optimisation.getSpectatorsMemMap(track_bdt_vars) track_bdt_reader = cut_optimisation.prepareReader(track_bdt_weights, track_bdt_vars, track_bdt_vars_map, track_bdt_specs, track_bdt_specs_map) print track_bdt_vars_map # print "-------------------" # # print "univ_highestZ=" + str(univ_highestZ) # print "univ_highestS=" + str(univ_highestS) # print "univ_highestB=" + str(univ_highestB) # print "univ_highestMVA=" + str(univ_highestMVA) # print "univ_ST=" + str(univ_ST) # print "univ_BT=" + str(univ_BT) print "-------------------" print "track_highestZ=" + str(track_highestZ) print "track_highestS=" + str(track_highestS) print "track_highestB=" + str(track_highestB) print "track_highestMVA=" + str(track_highestMVA) print "track_ST=" + str(track_ST) print "track_BT=" + str(track_BT) print "-------------------" afterMonoLepton = 0 afterUniversalBdt = 0 afterMonoTrack = 0 afterAtLeastOneTrack = 0 totalTracks = 0 totalSurvivedTracks = 0 eventsWithGreaterThanOneOppSignTracks = 0 noSurvivingTracks = 0 for ientry in range(nentries): if ientry % 1000 == 0: print "Processing " + str(ientry) c.GetEntry(ientry) if c.MaxCsv25 > 0.7: continue ll, leptonCharge, leptonFlavour = analysis_ntuples.getSingleLeptonAfterSelection( c, c.LeadingJet) if ll is None: continue if leptonCharge == 0: print "WHAT?! leptonCharge=0" var_leptonCharge[0] = leptonCharge var_leptonFlavour = ROOT.std.string(leptonFlavour) afterMonoLepton += 1 # for k, v in univ_bdt_vars_map.items(): # v[0] = eval("c." + k) univ_tmva_value = 0 #univ_bdt_reader.EvaluateMVA("BDT") var_univBDT[0] = univ_tmva_value #if univ_tmva_value < univ_highestMVA: # continue afterUniversalBdt += 1 var_secondTrackBDT[0] = -1 metvec = TLorentzVector() metvec.SetPtEtaPhiE(c.Met, 0, c.METPhi, c.Met) highestOppositeTrackScore = None secondTrackScore = None secondTrack = None oppositeChargeTrack = None ntracks = 0 for ti in range(c.tracks.size()): t = c.tracks[ti] tcharge = c.tracks_charge[ti] #Try lowering to 0!! if c.tracks_trkRelIso[ti] > 0.1: continue if c.tracks_dxyVtx[ti] > 0.02: continue if c.tracks_dzVtx[ti] > 0.05: continue if sc: if tcharge * leptonCharge < 0: continue else: if tcharge * leptonCharge > 0: continue totalTracks += 1 deltaRLL = abs(t.DeltaR(ll)) if deltaRLL < 0.01: continue ntracks += 1 track_bdt_vars_map["deltaEtaLJ"][0] = abs(t.Eta() - c.LeadingJet.Eta()) track_bdt_vars_map["deltaRLJ"][0] = abs(t.DeltaR(c.LeadingJet)) track_bdt_vars_map["track.Phi()"][0] = t.Phi() track_bdt_vars_map["track.Pt()"][0] = t.Pt() track_bdt_vars_map["track.Eta()"][0] = t.Eta() track_bdt_vars_map["deltaEtaLL"][0] = abs(t.Eta() - ll.Eta()) track_bdt_vars_map["deltaRLL"][0] = abs(t.DeltaR(ll)) track_bdt_vars_map["mtt"][0] = analysis_tools.MT2( c.Met, c.METPhi, t) #track_bdt_vars_map["deltaRMet"][0] = abs(t.DeltaR(metvec)) track_bdt_vars_map["deltaPhiMet"][0] = abs(t.DeltaPhi(metvec)) track_bdt_vars_map["lepton.Eta()"][0] = ll.Eta() track_bdt_vars_map["lepton.Phi()"][0] = ll.Phi() track_bdt_vars_map["lepton.Pt()"][0] = ll.Pt() track_bdt_vars_map["invMass"][0] = (t + ll).M() for trackVar in ['dxyVtx', 'dzVtx', 'trkMiniRelIso', 'trkRelIso']: #, 'trkMiniRelIso', 'trkRelIso']: track_bdt_vars_map[trackVar][0] = eval("c.tracks_" + trackVar + "[" + str(ti) + "]") track_tmva_value = track_bdt_reader.EvaluateMVA("BDT") if highestOppositeTrackScore is None or highestOppositeTrackScore < track_tmva_value: if highestOppositeTrackScore is not None: secondTrackScore = highestOppositeTrackScore var_secondTrackBDT[0] = var_trackBDT[0] secondTrack = oppositeChargeTrack highestOppositeTrackScore = track_tmva_value var_trackBDT[0] = track_tmva_value oppositeChargeTrack = ti #print "-------------" #print "Total Tracks=" + str(c.tracks.size()) #print "Passed Tracks=" + str(len(survivedTracks)) #print "survivedTracks=" + str(len(survivedTracks)) # if len(survivedTracks) == 0: # noSurvivingTracks += 1 # continue if highestOppositeTrackScore is None or highestOppositeTrackScore < 0: continue afterAtLeastOneTrack += 1 #numberOfOppositeChargeTracks = 0 #for i in survivedTracks: # if c.tracks_charge[i] * leptonCharge < 0: # numberOfOppositeChargeTracks +=1 # oppositeChargeTrack = i #if numberOfOppositeChargeTracks > 1: # eventsWithGreaterThanOneOppSignTracks += 1 #if numberOfOppositeChargeTracks != 1: # continue #print "Track charge=" + str(c.tracks_charge[survivedTracks[0]]) #print "Lepton charge=" + str(leptonCharge) #if c.tracks_charge[survivedTracks[0]] * leptonCharge > 0: # continue afterMonoTrack += 1 var_ti[0] = oppositeChargeTrack if secondTrack is not None: var_sti[0] = secondTrack else: var_sti[0] = -1 # tracksMem = {} # tracksMem["tracks"] = ROOT.std.vector(TLorentzVector)() # tracksMem["tracks"].push_back(c.tracks[oppositeChargeTrack]) # tree.SetBranchAddress('tracks', tracksMem["tracks"]) # for v in tracksVars: # tracksMem[v["name"]] = eval("ROOT.std.vector(" + v["type"] + ")()") # #print eval("c.tracks_" + v["name"] + "[survivedTracks[0]]") # tracksMem[v["name"]].push_back(eval(v["type"] + "(c.tracks_" + v["name"] + "[oppositeChargeTrack])")) # tree.SetBranchAddress('tracks_' + v["name"], tracksMem[v["name"]]) # l1 = None l2 = None if ll.Pt() > c.tracks[oppositeChargeTrack].Pt(): l1 = ll l2 = c.tracks[oppositeChargeTrack] else: l1 = c.tracks[oppositeChargeTrack] l2 = ll var_l1 = l1 var_l2 = l2 var_lepton = ll var_track = c.tracks[oppositeChargeTrack] if secondTrack is not None: var_secondTrack = c.tracks[secondTrack] else: var_secondTrack = TLorentzVector() tree.SetBranchAddress('l1', var_l1) tree.SetBranchAddress('l2', var_l2) tree.SetBranchAddress('lepton', var_lepton) tree.SetBranchAddress('track', var_track) tree.SetBranchAddress('secondTrack', var_secondTrack) tree.SetBranchAddress('leptonFlavour', var_leptonFlavour) var_invMass[0] = (l1 + l2).M() var_dileptonPt[0] = abs((l1 + l2).Pt()) var_deltaPhi[0] = abs(l1.DeltaPhi(l2)) var_deltaEta[0] = abs(l1.Eta() - l2.Eta()) var_deltaR[0] = abs(l1.DeltaR(l2)) var_NTracks[0] = ntracks var_pt3[0] = analysis_tools.pt3(l1.Pt(), l1.Phi(), l2.Pt(), l2.Phi(), c.Met, c.METPhi) pt = TLorentzVector() pt.SetPtEtaPhiE(c.Met, 0, c.METPhi, c.Met) var_mt1[0] = analysis_tools.MT2(c.Met, c.METPhi, l1) var_mt2[0] = analysis_tools.MT2(c.Met, c.METPhi, l2) var_mtt[0] = analysis_tools.MT2(c.Met, c.METPhi, c.tracks[oppositeChargeTrack]) var_mtl[0] = analysis_tools.MT2(c.Met, c.METPhi, ll) var_mtautau[0] = analysis_tools.Mtautau(pt, l1, l2) var_DeltaEtaLeadingJetDilepton[0] = abs((l1 + l2).Eta() - c.LeadingJet.Eta()) var_DeltaPhiLeadingJetDilepton[0] = abs( (l1 + l2).DeltaPhi(c.LeadingJet)) var_dilepHt[0] = analysis_ntuples.htJet25Leps(c.Jets, [l1, l2]) var_deltaRMetTrack[0] = abs(c.tracks[oppositeChargeTrack].DeltaR(pt)) var_deltaPhiMetTrack[0] = abs( c.tracks[oppositeChargeTrack].DeltaPhi(pt)) var_deltaRMetLepton[0] = abs(ll.DeltaR(pt)) var_deltaPhiMetLepton[0] = abs(ll.DeltaPhi(pt)) tree.Fill() if iFile.GetListOfKeys().Contains("lumiSecs") or tree.GetEntries() != 0: fnew = TFile(output_file, 'recreate') tree.Write() if iFile.GetListOfKeys().Contains("lumiSecs"): lumiSecs = iFile.Get("lumiSecs") lumiSecs.Write("lumiSecs") #hHt.Write() fnew.Close() else: print "*** RESULT EMPTY" iFile.Close() print "nentries=" + str(nentries) print "totalTracks=" + str(totalTracks) print "totalSurvivedTracks=" + str(totalSurvivedTracks) print "eventsWithGreaterThanOneOppSignTracks=" + str( eventsWithGreaterThanOneOppSignTracks) print "noSurvivingTracks=" + str(noSurvivingTracks) print "afterAtLeastOneTrack=" + str(afterAtLeastOneTrack) print "afterMonoLepton=" + str(afterMonoLepton) print "afterUniversalBdt=" + str(afterUniversalBdt) print "afterMonoTrack=" + str(afterMonoTrack)