From c24c2b4bb8cc55f0446f9dd1dc604dd15f777b3f Mon Sep 17 00:00:00 2001 From: kk829 Date: Tue, 25 Nov 2025 15:33:13 -0500 Subject: [PATCH 1/5] Adding GenJets to trackingNtuple.root and LST --- .../standalone/analysis/jets/reformat_jets.py | 6 +- .../analysis/jets/reformat_jets2.py | 99 +++++++ .../standalone/code/core/write_lst_ntuple.cc | 18 +- .../efficiency/python/lst_plot_performance.py | 16 +- .../standalone/efficiency/src/performance.cc | 260 +++++++++--------- .../standalone/efficiency/src/performance.h | 6 +- .../RecoTrack/plugins/TrackingNtuple.cc | 52 +++- 7 files changed, 299 insertions(+), 158 deletions(-) create mode 100644 RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py diff --git a/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets.py b/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets.py index e3876fc6ecb33..b55f19d7620cf 100644 --- a/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets.py +++ b/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets.py @@ -13,12 +13,12 @@ import numpy as np # Load existing tree -file = TFile("/data2/segmentlinking/CMSSW_12_2_0_pre2/trackingNtuple_ttbar_PU200.root") -# file = TFile("trackingNtuple100.root") +# file = TFile("/data2/segmentlinking/CMSSW_12_2_0_pre2/trackingNtuple_ttbar_PU200.root") +file = TFile("trackingNtuple_100_GenJet.root") old_tree = file["trackingNtuple"]["tree"] # Create a new ROOT file to store the new TTree -new_file = ROOT.TFile("new_tree_temp.root", "RECREATE") +new_file = ROOT.TFile("new_tree_100_temp.root", "RECREATE") # Create a new subdirectory in the new file new_directory = new_file.mkdir("trackingNtuple") diff --git a/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py b/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py new file mode 100644 index 0000000000000..59e07fb55c546 --- /dev/null +++ b/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py @@ -0,0 +1,99 @@ +########################################################## +# +# The file trackingNtuple.root has the data I need. +# I can section it off into jets. +# I then put these jets into a new n-tuple, +# +########################################################## + +import matplotlib.pyplot as plt +import ROOT +from ROOT import TFile +from myjets import getLists, createJets, matchArr +import numpy as np + +# Load existing tree +# file = TFile("/data2/segmentlinking/CMSSW_12_2_0_pre2/trackingNtuple_ttbar_PU200.root") +file = TFile("trackingNtuple_100_GenJet.root") +old_tree = file["trackingNtuple"]["tree"] + +# Create a new ROOT file to store the new TTree +new_file = ROOT.TFile("new_tree_100_GenJet.root", "RECREATE") + +# Create a new subdirectory in the new file +new_directory = new_file.mkdir("trackingNtuple") + +# Change the current directory to the new subdirectory +new_directory.cd() + +# Create a new TTree with the same structure as the old one but empty +new_tree = old_tree.CloneTree(0) + +# Account for bug in 12_2_X branch +new_tree.SetBranchStatus("ph2_bbxi", False) + +# Create a variable to hold the new leaves' data (a list of floats) +new_leaf_deltaEta = ROOT.std.vector('float')() +new_leaf_deltaPhi = ROOT.std.vector('float')() +new_leaf_deltaR = ROOT.std.vector('float')() + +# Create a new branch in the tree +new_tree.Branch("sim_deltaEta", new_leaf_deltaEta) +new_tree.Branch("sim_deltaPhi", new_leaf_deltaPhi) +new_tree.Branch("sim_deltaR", new_leaf_deltaR) + +# Loop over entries in the old tree +for ind in range(old_tree.GetEntries()): + old_tree.GetEntry(ind) + + # Clear the vector to start fresh for this entry + new_leaf_deltaEta.clear() + new_leaf_deltaPhi.clear() + new_leaf_deltaR.clear() + + # Creates the lists that will fill the leaves + pTList, etaList, phiList, massList = getLists(old_tree, hardSc=True, pTcut=True) + simLen = len(pTList) + + genJetsPt = old_tree.genJetPt + genJetsEta = old_tree.genJetEta + genJetsPhi = old_tree.genJetPhi + genJetLen = len(genJetsPt) + + deltaEtas = np.ones(simLen)*-999 + deltaPhis = np.ones(simLen)*-999 + deltaRs = np.ones(simLen)*-999 + + for i in range(len(pTList)): + dRTemp = 999 + dPhiTemp = 999 + dEtaTemp = 999 + for j in range(genJetLen): + dEtaj = etaList[i] - genJetsEta[j] + dPhij = np.arccos(np.cos(phiList[i] - genJetsPhi[j])) + dRj = np.sqrt(dEtaj**2 + dPhij**2) + if(dRj < dRTemp): # Selects smallest dR, corresponding to closest jet + dRTemp = dRj + dPhiTemp = dPhij + dEtaTemp = dEtaj + deltaRs[i] = dRTemp + deltaPhis[i] = dPhiTemp + deltaEtas[i] = dEtaTemp + + + # Add the list elements to the vector + for value in deltaEtas: + new_leaf_deltaEta.push_back(value) + for value in deltaPhis: + new_leaf_deltaPhi.push_back(value) + for value in deltaRs: + new_leaf_deltaR.push_back(value) + + # Fill the tree with the new values + new_tree.Fill() + +# Write the tree back to the file +new_tree.Write() +new_file.Close() +file.Close() + diff --git a/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.cc b/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.cc index 2e8a137a8c8d6..314ac0f455575 100644 --- a/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.cc +++ b/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.cc @@ -150,9 +150,9 @@ void createJetBranches() { ana.tx->createBranch>("sim_deltaEta"); ana.tx->createBranch>("sim_deltaPhi"); ana.tx->createBranch>("sim_deltaR"); - ana.tx->createBranch>("sim_jet_eta"); - ana.tx->createBranch>("sim_jet_phi"); - ana.tx->createBranch>("sim_jet_pt"); + ana.tx->createBranch>("genJetEta"); + ana.tx->createBranch>("genJetPhi"); + ana.tx->createBranch>("genJetPt"); } //________________________________________________________________________________________________________________________________ @@ -577,16 +577,16 @@ unsigned int setSimTrackContainerBranches(LSTEvent* event) { auto const& trk_sim_deltaEta = trk.getVF("sim_deltaEta"); auto const& trk_sim_deltaPhi = trk.getVF("sim_deltaPhi"); auto const& trk_sim_deltaR = trk.getVF("sim_deltaR"); - auto const& trk_sim_jet_eta = trk.getVF("sim_jet_eta"); - auto const& trk_sim_jet_phi = trk.getVF("sim_jet_phi"); - auto const& trk_sim_jet_pt = trk.getVF("sim_jet_pt"); + auto const& trk_genJetEta = trk.getVF("genJetEta"); + auto const& trk_genJetPhi = trk.getVF("genJetPhi"); + auto const& trk_genJetPt = trk.getVF("genJetPt"); ana.tx->pushbackToBranch("sim_deltaEta", trk_sim_deltaEta[isimtrk]); ana.tx->pushbackToBranch("sim_deltaPhi", trk_sim_deltaPhi[isimtrk]); ana.tx->pushbackToBranch("sim_deltaR", trk_sim_deltaR[isimtrk]); - ana.tx->pushbackToBranch("sim_jet_eta", trk_sim_jet_eta[isimtrk]); - ana.tx->pushbackToBranch("sim_jet_phi", trk_sim_jet_phi[isimtrk]); - ana.tx->pushbackToBranch("sim_jet_pt", trk_sim_jet_pt[isimtrk]); + ana.tx->pushbackToBranch("genJetEta", trk_genJetEta[isimtrk]); + ana.tx->pushbackToBranch("genJetPhi", trk_genJetPhi[isimtrk]); + ana.tx->pushbackToBranch("genJetPt", trk_genJetPt[isimtrk]); } // Fill the branch with simulated tracks. diff --git a/RecoTracker/LSTCore/standalone/efficiency/python/lst_plot_performance.py b/RecoTracker/LSTCore/standalone/efficiency/python/lst_plot_performance.py index 1b1bc3f81276f..eb932eae53448 100755 --- a/RecoTracker/LSTCore/standalone/efficiency/python/lst_plot_performance.py +++ b/RecoTracker/LSTCore/standalone/efficiency/python/lst_plot_performance.py @@ -9,7 +9,7 @@ sel_choices = ["base", "loweta", "xtr", "vtr", "none"] metric_choices = ["eff", "fakerate", "duplrate", "fakeorduplrate"] -variable_choices = ["pt", "ptmtv", "ptlow", "eta", "phi", "dxy", "dz", "vxy", "deltaEta", "deltaPhi", "deltaR", "jet_eta", "jet_phi", "jet_pt"] +variable_choices = ["pt", "ptmtv", "ptlow", "eta", "phi", "dxy", "dz", "vxy", "deltaEta", "deltaPhi", "deltaR", "genJetEta", "genJetPhi", "genJetPt"] objecttype_choices = ["TC", "pT5", "T5", "pT3", "pLS", "pT5_lower", "pT3_lower", "T5_lower", "pLS_lower"] #lowerObjectType = ["pT5_lower", "pT3_lower", "T5_lower"] @@ -429,11 +429,11 @@ def set_label(eff, output_name, raw_number): title = "#phi diffs" elif "_deltaR" in output_name: title = "#Delta R" - elif "_jet_eta" in output_name: + elif "_genJetEta" in output_name: title = "jet #eta" - elif "_jet_phi" in output_name: + elif "_genJetPhi" in output_name: title = "jet #phi" - elif "_jet_pt" in output_name: + elif "_genJetPt" in output_name: title = "jet pT" elif "_dz" in output_name: title = "z [cm]" @@ -675,7 +675,7 @@ def plot_standard_performance_plots(args): "duplrate": ["pt", "ptlow", "ptmtv", "eta", "phi"], "fakeorduplrate": ["pt", "ptlow", "ptmtv", "eta", "phi"], } - if (args.jet_branches): variables["eff"] = ["pt", "ptlow", "ptmtv", "eta", "phi", "dxy", "dz", "vxy", "deltaEta", "deltaPhi", "deltaR", "jet_eta", "jet_phi", "jet_pt"] + if (args.jet_branches): variables["eff"] = ["pt", "ptlow", "ptmtv", "eta", "phi", "dxy", "dz", "vxy", "deltaEta", "deltaPhi", "deltaR", "genJetEta", "genJetPhi", "genJetPt"] sels = { "eff": ["base", "loweta"], "fakerate": ["none"], @@ -696,9 +696,9 @@ def plot_standard_performance_plots(args): xcoarses["deltaEta"] = [False, True] xcoarses["deltaPhi"] = [False, True] xcoarses["deltaR"] = [False, True] - xcoarses["jet_eta"] = [False, True] - xcoarses["jet_phi"] = [False, True] - xcoarses["jet_pt"] = [False, True] + xcoarses["genJetEta"] = [False, True] + xcoarses["genJetPhi"] = [False, True] + xcoarses["genJetPt"] = [False, True] types = objecttype_choices breakdowns = { diff --git a/RecoTracker/LSTCore/standalone/efficiency/src/performance.cc b/RecoTracker/LSTCore/standalone/efficiency/src/performance.cc index c3585bae77223..8e8df8ff9d5e9 100644 --- a/RecoTracker/LSTCore/standalone/efficiency/src/performance.cc +++ b/RecoTracker/LSTCore/standalone/efficiency/src/performance.cc @@ -595,52 +595,52 @@ void bookEfficiencySet(SimTrackSetDefinition& effset) { return ana.tx.getBranchLazy>(category_name + "_ie_numer_deltaR"); }); - // Lines for jet_eta - ana.tx.createBranch>(category_name + "_ef_denom_jet_eta"); - ana.histograms.addVecHistogram(category_name + "_ef_denom_jet_eta", 180, -4.5, 4.5, [&, category_name]() { - return ana.tx.getBranchLazy>(category_name + "_ef_denom_jet_eta"); + // Lines for genJetEta + ana.tx.createBranch>(category_name + "_ef_denom_genJetEta"); + ana.histograms.addVecHistogram(category_name + "_ef_denom_genJetEta", 180, -4.5, 4.5, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_ef_denom_genJetEta"); }); - ana.tx.createBranch>(category_name + "_ef_numer_jet_eta"); - ana.histograms.addVecHistogram(category_name + "_ef_numer_jet_eta", 180, -4.5, 4.5, [&, category_name]() { - return ana.tx.getBranchLazy>(category_name + "_ef_numer_jet_eta"); + ana.tx.createBranch>(category_name + "_ef_numer_genJetEta"); + ana.histograms.addVecHistogram(category_name + "_ef_numer_genJetEta", 180, -4.5, 4.5, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_ef_numer_genJetEta"); }); - ana.tx.createBranch>(category_name + "_ie_numer_jet_eta"); - ana.histograms.addVecHistogram(category_name + "_ie_numer_jet_eta", 180, -4.5, 4.5, [&, category_name]() { - return ana.tx.getBranchLazy>(category_name + "_ie_numer_jet_eta"); + ana.tx.createBranch>(category_name + "_ie_numer_genJetEta"); + ana.histograms.addVecHistogram(category_name + "_ie_numer_genJetEta", 180, -4.5, 4.5, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_ie_numer_genJetEta"); }); - // Lines for jet_phi - ana.tx.createBranch>(category_name + "_ef_denom_jet_phi"); - ana.histograms.addVecHistogram(category_name + "_ef_denom_jet_phi", 180, -4.5, 4.5, [&, category_name]() { - return ana.tx.getBranchLazy>(category_name + "_ef_denom_jet_phi"); + // Lines for genJetPhi + ana.tx.createBranch>(category_name + "_ef_denom_genJetPhi"); + ana.histograms.addVecHistogram(category_name + "_ef_denom_genJetPhi", 180, -4.5, 4.5, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_ef_denom_genJetPhi"); }); - ana.tx.createBranch>(category_name + "_ef_numer_jet_phi"); - ana.histograms.addVecHistogram(category_name + "_ef_numer_jet_phi", 180, -4.5, 4.5, [&, category_name]() { - return ana.tx.getBranchLazy>(category_name + "_ef_numer_jet_phi"); + ana.tx.createBranch>(category_name + "_ef_numer_genJetPhi"); + ana.histograms.addVecHistogram(category_name + "_ef_numer_genJetPhi", 180, -4.5, 4.5, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_ef_numer_genJetPhi"); }); - ana.tx.createBranch>(category_name + "_ie_numer_jet_phi"); - ana.histograms.addVecHistogram(category_name + "_ie_numer_jet_phi", 180, -4.5, 4.5, [&, category_name]() { - return ana.tx.getBranchLazy>(category_name + "_ie_numer_jet_phi"); + ana.tx.createBranch>(category_name + "_ie_numer_genJetPhi"); + ana.histograms.addVecHistogram(category_name + "_ie_numer_genJetPhi", 180, -4.5, 4.5, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_ie_numer_genJetPhi"); }); - // Lines for jet_pt - ana.tx.createBranch>(category_name + "_ef_denom_jet_pt"); - ana.histograms.addVecHistogram(category_name + "_ef_denom_jet_pt", 50, 50, 1000, [&, category_name]() { - return ana.tx.getBranchLazy>(category_name + "_ef_denom_jet_pt"); + // Lines for genJetPt + ana.tx.createBranch>(category_name + "_ef_denom_genJetPt"); + ana.histograms.addVecHistogram(category_name + "_ef_denom_genJetPt", 50, 50, 1000, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_ef_denom_genJetPt"); }); - ana.tx.createBranch>(category_name + "_ef_numer_jet_pt"); - ana.histograms.addVecHistogram(category_name + "_ef_numer_jet_pt", 50, 50, 1000, [&, category_name]() { - return ana.tx.getBranchLazy>(category_name + "_ef_numer_jet_pt"); + ana.tx.createBranch>(category_name + "_ef_numer_genJetPt"); + ana.histograms.addVecHistogram(category_name + "_ef_numer_genJetPt", 50, 50, 1000, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_ef_numer_genJetPt"); }); - ana.tx.createBranch>(category_name + "_ie_numer_jet_pt"); - ana.histograms.addVecHistogram(category_name + "_ie_numer_jet_pt", 50, 50, 1000, [&, category_name]() { - return ana.tx.getBranchLazy>(category_name + "_ie_numer_jet_pt"); + ana.tx.createBranch>(category_name + "_ie_numer_genJetPt"); + ana.histograms.addVecHistogram(category_name + "_ie_numer_genJetPt", 50, 50, 1000, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_ie_numer_genJetPt"); }); // Moving the standard pT code up here for convenience @@ -941,9 +941,9 @@ void fillEfficiencySets(std::vector& effsets) { std::vector const& deltaEta = lstEff.getVF("sim_deltaEta"); std::vector const& deltaPhi = lstEff.getVF("sim_deltaPhi"); std::vector const& deltaR = lstEff.getVF("sim_deltaR"); - std::vector const& jet_eta = lstEff.getVF("sim_jet_eta"); - std::vector const& jet_phi = lstEff.getVF("sim_jet_phi"); - std::vector const& jet_pt = lstEff.getVF("sim_jet_pt"); + std::vector const& genJetEta = lstEff.getVF("genJetEta"); + std::vector const& genJetPhi = lstEff.getVF("genJetPhi"); + std::vector const& genJetPt = lstEff.getVF("genJetPt"); for (auto& effset : effsets) { for (unsigned int isimtrk = 0; isimtrk < lstEff.getVF("sim_pt").size(); ++isimtrk) { @@ -962,9 +962,9 @@ void fillEfficiencySets(std::vector& effsets) { deltaEta.at(isimtrk), deltaPhi.at(isimtrk), deltaR.at(isimtrk), - jet_eta.at(isimtrk), - jet_phi.at(isimtrk), - jet_pt.at(isimtrk)); + genJetEta.at(isimtrk), + genJetPhi.at(isimtrk), + genJetPt.at(isimtrk)); } } } else { @@ -1003,9 +1003,9 @@ void fillEfficiencySet(int isimtrk, float deltaEta, float deltaPhi, float deltaR, - float jet_eta, - float jet_phi, - float jet_pt) { + float genJetEta, + float genJetPhi, + float genJetPt) { //========================================================= // NOTE: The following is not applied as the LSTNtuple no longer writes this. // const int &bunch = lstEff.getVI("sim_bunchCrossing")[isimtrk]; @@ -1043,103 +1043,101 @@ void fillEfficiencySet(int isimtrk, const float vtx_z_thresh = 30; const float vtx_perp_thresh = 2.5; - if (pt > 0 && jet_eta < 140 && jet_eta > -140 && (jet_eta > -999 && deltaEta > -999)) { - // N minus eta cut - if (pt > ana.pt_cut and std::abs(vtx_z) < vtx_z_thresh and std::abs(vtx_perp) < vtx_perp_thresh) { - // vs. eta plot - ana.tx.pushbackToBranch(category_name + "_ef_denom_eta", eta); - if (pass) - ana.tx.pushbackToBranch(category_name + "_ef_numer_eta", eta); - else - ana.tx.pushbackToBranch(category_name + "_ie_numer_eta", eta); - } + // N minus eta cut + if (pt > ana.pt_cut and std::abs(vtx_z) < vtx_z_thresh and std::abs(vtx_perp) < vtx_perp_thresh) { + // vs. eta plot + ana.tx.pushbackToBranch(category_name + "_ef_denom_eta", eta); + if (pass) + ana.tx.pushbackToBranch(category_name + "_ef_numer_eta", eta); + else + ana.tx.pushbackToBranch(category_name + "_ie_numer_eta", eta); + } - // N minus pt cut - if (std::abs(eta) < ana.eta_cut and std::abs(vtx_z) < vtx_z_thresh and std::abs(vtx_perp) < vtx_perp_thresh) { - // vs. pt plot - ana.tx.pushbackToBranch(category_name + "_ef_denom_pt", pt); - if (pass) - ana.tx.pushbackToBranch(category_name + "_ef_numer_pt", pt); - else - ana.tx.pushbackToBranch(category_name + "_ie_numer_pt", pt); - } + // N minus pt cut + if (std::abs(eta) < ana.eta_cut and std::abs(vtx_z) < vtx_z_thresh and std::abs(vtx_perp) < vtx_perp_thresh) { + // vs. pt plot + ana.tx.pushbackToBranch(category_name + "_ef_denom_pt", pt); + if (pass) + ana.tx.pushbackToBranch(category_name + "_ef_numer_pt", pt); + else + ana.tx.pushbackToBranch(category_name + "_ie_numer_pt", pt); + } - // N minus dxy cut - if (std::abs(eta) < ana.eta_cut and pt > ana.pt_cut and std::abs(vtx_z) < vtx_z_thresh) { - // vs. dxy plot - ana.tx.pushbackToBranch(category_name + "_ef_denom_dxy", dxy); - ana.tx.pushbackToBranch(category_name + "_ef_denom_vxy", vtx_perp); - if (pass) { - ana.tx.pushbackToBranch(category_name + "_ef_numer_dxy", dxy); - ana.tx.pushbackToBranch(category_name + "_ef_numer_vxy", vtx_perp); - } else { - ana.tx.pushbackToBranch(category_name + "_ie_numer_dxy", dxy); - ana.tx.pushbackToBranch(category_name + "_ie_numer_vxy", vtx_perp); - } + // N minus dxy cut + if (std::abs(eta) < ana.eta_cut and pt > ana.pt_cut and std::abs(vtx_z) < vtx_z_thresh) { + // vs. dxy plot + ana.tx.pushbackToBranch(category_name + "_ef_denom_dxy", dxy); + ana.tx.pushbackToBranch(category_name + "_ef_denom_vxy", vtx_perp); + if (pass) { + ana.tx.pushbackToBranch(category_name + "_ef_numer_dxy", dxy); + ana.tx.pushbackToBranch(category_name + "_ef_numer_vxy", vtx_perp); + } else { + ana.tx.pushbackToBranch(category_name + "_ie_numer_dxy", dxy); + ana.tx.pushbackToBranch(category_name + "_ie_numer_vxy", vtx_perp); } + } - // N minus dz cut - if (std::abs(eta) < ana.eta_cut and pt > ana.pt_cut and std::abs(vtx_perp) < vtx_perp_thresh) { - // vs. dz plot - ana.tx.pushbackToBranch(category_name + "_ef_denom_dz", dz); - if (pass) - ana.tx.pushbackToBranch(category_name + "_ef_numer_dz", dz); - else - ana.tx.pushbackToBranch(category_name + "_ie_numer_dz", dz); - } + // N minus dz cut + if (std::abs(eta) < ana.eta_cut and pt > ana.pt_cut and std::abs(vtx_perp) < vtx_perp_thresh) { + // vs. dz plot + ana.tx.pushbackToBranch(category_name + "_ef_denom_dz", dz); + if (pass) + ana.tx.pushbackToBranch(category_name + "_ef_numer_dz", dz); + else + ana.tx.pushbackToBranch(category_name + "_ie_numer_dz", dz); + } - // All phase-space cuts - if (std::abs(eta) < ana.eta_cut and pt > ana.pt_cut and std::abs(vtx_z) < vtx_z_thresh and - std::abs(vtx_perp) < vtx_perp_thresh) { - // vs. Phi plot - ana.tx.pushbackToBranch(category_name + "_ef_denom_phi", phi); - if (pass) - ana.tx.pushbackToBranch(category_name + "_ef_numer_phi", phi); - else - ana.tx.pushbackToBranch(category_name + "_ie_numer_phi", phi); - - // vs. deltaEta plot - ana.tx.pushbackToBranch(category_name + "_ef_denom_deltaEta", deltaEta); - if (pass) - ana.tx.pushbackToBranch(category_name + "_ef_numer_deltaEta", deltaEta); - else - ana.tx.pushbackToBranch(category_name + "_ie_numer_deltaEta", deltaEta); - - // vs. deltaPhi plot - ana.tx.pushbackToBranch(category_name + "_ef_denom_deltaPhi", deltaPhi); - if (pass) - ana.tx.pushbackToBranch(category_name + "_ef_numer_deltaPhi", deltaPhi); - else - ana.tx.pushbackToBranch(category_name + "_ie_numer_deltaPhi", deltaPhi); - - // vs. deltaR plot - ana.tx.pushbackToBranch(category_name + "_ef_denom_deltaR", deltaR); - if (pass) - ana.tx.pushbackToBranch(category_name + "_ef_numer_deltaR", deltaR); - else - ana.tx.pushbackToBranch(category_name + "_ie_numer_deltaR", deltaR); - - // vs. jet_eta plot - ana.tx.pushbackToBranch(category_name + "_ef_denom_jet_eta", jet_eta); - if (pass) - ana.tx.pushbackToBranch(category_name + "_ef_numer_jet_eta", jet_eta); - else - ana.tx.pushbackToBranch(category_name + "_ie_numer_jet_eta", jet_eta); - - // vs. jet_phi plot - ana.tx.pushbackToBranch(category_name + "_ef_denom_jet_phi", jet_phi); - if (pass) - ana.tx.pushbackToBranch(category_name + "_ef_numer_jet_phi", jet_phi); - else - ana.tx.pushbackToBranch(category_name + "_ie_numer_jet_phi", jet_phi); - - // vs. jet_pt plot - ana.tx.pushbackToBranch(category_name + "_ef_denom_jet_pt", jet_pt); - if (pass) - ana.tx.pushbackToBranch(category_name + "_ef_numer_jet_pt", jet_pt); - else - ana.tx.pushbackToBranch(category_name + "_ie_numer_jet_pt", jet_pt); - } + // All phase-space cuts + if (std::abs(eta) < ana.eta_cut and pt > ana.pt_cut and std::abs(vtx_z) < vtx_z_thresh and + std::abs(vtx_perp) < vtx_perp_thresh) { + // vs. Phi plot + ana.tx.pushbackToBranch(category_name + "_ef_denom_phi", phi); + if (pass) + ana.tx.pushbackToBranch(category_name + "_ef_numer_phi", phi); + else + ana.tx.pushbackToBranch(category_name + "_ie_numer_phi", phi); + + // vs. deltaEta plot + ana.tx.pushbackToBranch(category_name + "_ef_denom_deltaEta", deltaEta); + if (pass) + ana.tx.pushbackToBranch(category_name + "_ef_numer_deltaEta", deltaEta); + else + ana.tx.pushbackToBranch(category_name + "_ie_numer_deltaEta", deltaEta); + + // vs. deltaPhi plot + ana.tx.pushbackToBranch(category_name + "_ef_denom_deltaPhi", deltaPhi); + if (pass) + ana.tx.pushbackToBranch(category_name + "_ef_numer_deltaPhi", deltaPhi); + else + ana.tx.pushbackToBranch(category_name + "_ie_numer_deltaPhi", deltaPhi); + + // vs. deltaR plot + ana.tx.pushbackToBranch(category_name + "_ef_denom_deltaR", deltaR); + if (pass) + ana.tx.pushbackToBranch(category_name + "_ef_numer_deltaR", deltaR); + else + ana.tx.pushbackToBranch(category_name + "_ie_numer_deltaR", deltaR); + + // vs. genJetEta plot + ana.tx.pushbackToBranch(category_name + "_ef_denom_genJetEta", genJetEta); + if (pass) + ana.tx.pushbackToBranch(category_name + "_ef_numer_genJetEta", genJetEta); + else + ana.tx.pushbackToBranch(category_name + "_ie_numer_genJetEta", genJetEta); + + // vs. genJetPhi plot + ana.tx.pushbackToBranch(category_name + "_ef_denom_genJetPhi", genJetPhi); + if (pass) + ana.tx.pushbackToBranch(category_name + "_ef_numer_genJetPhi", genJetPhi); + else + ana.tx.pushbackToBranch(category_name + "_ie_numer_genJetPhi", genJetPhi); + + // vs. genJetPt plot + ana.tx.pushbackToBranch(category_name + "_ef_denom_genJetPt", genJetPt); + if (pass) + ana.tx.pushbackToBranch(category_name + "_ef_numer_genJetPt", genJetPt); + else + ana.tx.pushbackToBranch(category_name + "_ie_numer_genJetPt", genJetPt); } } diff --git a/RecoTracker/LSTCore/standalone/efficiency/src/performance.h b/RecoTracker/LSTCore/standalone/efficiency/src/performance.h index a46686014fb83..081822b506525 100644 --- a/RecoTracker/LSTCore/standalone/efficiency/src/performance.h +++ b/RecoTracker/LSTCore/standalone/efficiency/src/performance.h @@ -32,9 +32,9 @@ void fillEfficiencySet(int isimtrk, float deltaEta, float deltaPhi, float deltaR, - float jet_eta, - float jet_phi, - float jet_pt); + float genJetEta, + float genJetPhi, + float genJetPt); void fillEfficiencySet(int isimtrk, SimTrackSetDefinition& effset, float pt, diff --git a/Validation/RecoTrack/plugins/TrackingNtuple.cc b/Validation/RecoTrack/plugins/TrackingNtuple.cc index 9440b9d47ad88..fa6e24fd16b1b 100644 --- a/Validation/RecoTrack/plugins/TrackingNtuple.cc +++ b/Validation/RecoTrack/plugins/TrackingNtuple.cc @@ -93,6 +93,12 @@ #include "RecoTracker/FinalTrackSelectors/interface/getBestVertex.h" +// GenJet headers +#include "DataFormats/HepMCCandidate/interface/GenParticle.h" +#include "DataFormats/JetReco/interface/GenJet.h" +#include "DataFormats/JetReco/interface/GenJetCollection.h" +#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" + #include #include #include @@ -627,6 +633,8 @@ class TrackingNtuple : public edm::one::EDAnalyzer { void fillTrackingVertices(const TrackingVertexRefVector& trackingVertices, const TrackingParticleRefKeyToIndex& tpKeyToIndex); + + void fillGenJets(const edm::Event& iEvent); struct SimHitData { std::vector matchingSimHit; @@ -705,6 +713,8 @@ class TrackingNtuple : public edm::one::EDAnalyzer { HistoryBase tracer_; ParametersDefinerForTP parametersDefiner_; + const edm::EDGetTokenT tok_jets_; + TTree* t; // DetId branches @@ -1295,7 +1305,7 @@ class TrackingNtuple : public edm::one::EDAnalyzer { ph2_radL; //http://cmslxr.fnal.gov/lxr/source/DataFormats/GeometrySurface/interface/MediumProperties.h std::vector ph2_bbxi; std::vector ph2_usedMask; - std::vector ph2_clustSize; + std::vector ph2_clustSize; //////////////////// // invalid (missing/inactive/etc) hits @@ -1415,6 +1425,12 @@ class TrackingNtuple : public edm::one::EDAnalyzer { std::vector> simvtx_sourceSimIdx; // second index runs through source TrackingParticles std::vector> simvtx_daughterSimIdx; // second index runs through daughter TrackingParticles std::vector simpv_idx; + + //////////////////// + // GenJets + std::vector genJetPt; + std::vector genJetEta; + std::vector genJetPhi; }; // @@ -1473,7 +1489,8 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig) keepEleSimHits_(iConfig.getUntrackedParameter("keepEleSimHits")), saveSimHitsP3_(iConfig.getUntrackedParameter("saveSimHitsP3")), simHitBySignificance_(iConfig.getUntrackedParameter("simHitBySignificance")), - parametersDefiner_(iConfig.getUntrackedParameter("beamSpot"), consumesCollector()) { + parametersDefiner_(iConfig.getUntrackedParameter("beamSpot"), consumesCollector()), + tok_jets_(consumes(iConfig.getParameter("JetSource"))) { if (includeSeeds_) { seedTokens_ = edm::vector_transform(iConfig.getUntrackedParameter>("seedTracks"), @@ -1550,7 +1567,7 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig) index, consumes(mask.getUntrackedParameter("src"))); } } - + const bool tpRef = iConfig.getUntrackedParameter("trackingParticlesRef"); const auto tpTag = iConfig.getUntrackedParameter("trackingParticles"); if (tpRef) { @@ -2053,6 +2070,11 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig) t->Branch("simpv_idx", &simpv_idx); + // GenJets + t->Branch("genJetPt", &genJetPt); + t->Branch("genJetEta", &genJetEta); + t->Branch("genJetPhi", &genJetPhi); + //t->Branch("" , &); } @@ -2462,6 +2484,11 @@ void TrackingNtuple::clearVariables() { simvtx_sourceSimIdx.clear(); simvtx_daughterSimIdx.clear(); simpv_idx.clear(); + + // GenJets + genJetPt.clear(); + genJetEta.clear(); + genJetPhi.clear(); } // ------------ method called for each event ------------ @@ -2735,9 +2762,25 @@ void TrackingNtuple::analyze(const edm::Event& iEvent, const edm::EventSetup& iS // tracking vertices fillTrackingVertices(tvRefs, tpKeyToIndex); + // GenJets + fillGenJets(iEvent); + t->Fill(); } +void TrackingNtuple::fillGenJets(const edm::Event& iEvent) { + edm::Handle genJets; + iEvent.getByToken(tok_jets_, genJets); + if (genJets.isValid()) { + for (unsigned iGenJet = 0; iGenJet < genJets->size(); ++iGenJet) { + const reco::GenJet& genJet = (*genJets)[iGenJet]; + genJetPt.push_back(genJet.pt()); + genJetEta.push_back(genJet.eta()); + genJetPhi.push_back(genJet.phi()); + } + } +} + void TrackingNtuple::fillBeamSpot(const reco::BeamSpot& bs) { bsp_x = bs.x0(); bsp_y = bs.y0(); @@ -4721,8 +4764,9 @@ void TrackingNtuple::fillDescriptions(edm::ConfigurationDescriptions& descriptio desc.addUntracked("keepEleSimHits", false); desc.addUntracked("saveSimHitsP3", false); desc.addUntracked("simHitBySignificance", false); + desc.add("JetSource", edm::InputTag("ak4GenJets")); descriptions.add("trackingNtuple", desc); } //define this as a plug-in -DEFINE_FWK_MODULE(TrackingNtuple); +DEFINE_FWK_MODULE(TrackingNtuple); \ No newline at end of file From a1cd7ddb31f17ca11af71befc3e960fdbd6eb4be Mon Sep 17 00:00:00 2001 From: kk829 Date: Tue, 25 Nov 2025 15:45:47 -0500 Subject: [PATCH 2/5] Added comments --- .../LSTCore/standalone/analysis/jets/reformat_jets2.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py b/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py index 59e07fb55c546..c1d998bbd672d 100644 --- a/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py +++ b/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py @@ -1,8 +1,7 @@ ########################################################## # -# The file trackingNtuple.root has the data I need. -# I can section it off into jets. -# I then put these jets into a new n-tuple, +# Adds deltaR branches to the trackingNtuple.root file +# using GenJets. # ########################################################## @@ -60,6 +59,7 @@ genJetsPhi = old_tree.genJetPhi genJetLen = len(genJetsPt) + # Declare arrays (all entries will be filled with non-dummy values) deltaEtas = np.ones(simLen)*-999 deltaPhis = np.ones(simLen)*-999 deltaRs = np.ones(simLen)*-999 @@ -72,7 +72,9 @@ dEtaj = etaList[i] - genJetsEta[j] dPhij = np.arccos(np.cos(phiList[i] - genJetsPhi[j])) dRj = np.sqrt(dEtaj**2 + dPhij**2) - if(dRj < dRTemp): # Selects smallest dR, corresponding to closest jet + + # Selects smallest dR, corresponding to closest jet + if(dRj < dRTemp): dRTemp = dRj dPhiTemp = dPhij dEtaTemp = dEtaj From 0168fd95ed6e78d7586e7a57901145131315e8f6 Mon Sep 17 00:00:00 2001 From: kk829 Date: Mon, 8 Dec 2025 15:51:28 -0500 Subject: [PATCH 3/5] Plots DR and FR for GenJet deltaR --- .../analysis/jets/reformat_jets2.py | 16 ++-- .../efficiency/python/lst_plot_performance.py | 6 +- .../standalone/efficiency/src/performance.cc | 91 ++++++++++++++++++- 3 files changed, 104 insertions(+), 9 deletions(-) diff --git a/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py b/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py index c1d998bbd672d..fdba8c43abe43 100644 --- a/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py +++ b/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py @@ -17,7 +17,7 @@ old_tree = file["trackingNtuple"]["tree"] # Create a new ROOT file to store the new TTree -new_file = ROOT.TFile("new_tree_100_GenJet.root", "RECREATE") +new_file = ROOT.TFile("new_tree_100_GenJet2.root", "RECREATE") # Create a new subdirectory in the new file new_directory = new_file.mkdir("trackingNtuple") @@ -51,8 +51,12 @@ new_leaf_deltaR.clear() # Creates the lists that will fill the leaves - pTList, etaList, phiList, massList = getLists(old_tree, hardSc=True, pTcut=True) - simLen = len(pTList) + simPt = old_tree.sim_pt + simEta = old_tree.sim_eta + simPhi = old_tree.sim_phi + simLen = len(simPt) + + print(old_tree.Print()) genJetsPt = old_tree.genJetPt genJetsEta = old_tree.genJetEta @@ -64,13 +68,13 @@ deltaPhis = np.ones(simLen)*-999 deltaRs = np.ones(simLen)*-999 - for i in range(len(pTList)): + for i in range(len(simPt)): dRTemp = 999 dPhiTemp = 999 dEtaTemp = 999 for j in range(genJetLen): - dEtaj = etaList[i] - genJetsEta[j] - dPhij = np.arccos(np.cos(phiList[i] - genJetsPhi[j])) + dEtaj = simEta[i] - genJetsEta[j] + dPhij = np.arccos(np.cos(simPhi[i] - genJetsPhi[j])) dRj = np.sqrt(dEtaj**2 + dPhij**2) # Selects smallest dR, corresponding to closest jet diff --git a/RecoTracker/LSTCore/standalone/efficiency/python/lst_plot_performance.py b/RecoTracker/LSTCore/standalone/efficiency/python/lst_plot_performance.py index eb932eae53448..bb96ca458dcbd 100755 --- a/RecoTracker/LSTCore/standalone/efficiency/python/lst_plot_performance.py +++ b/RecoTracker/LSTCore/standalone/efficiency/python/lst_plot_performance.py @@ -675,7 +675,11 @@ def plot_standard_performance_plots(args): "duplrate": ["pt", "ptlow", "ptmtv", "eta", "phi"], "fakeorduplrate": ["pt", "ptlow", "ptmtv", "eta", "phi"], } - if (args.jet_branches): variables["eff"] = ["pt", "ptlow", "ptmtv", "eta", "phi", "dxy", "dz", "vxy", "deltaEta", "deltaPhi", "deltaR", "genJetEta", "genJetPhi", "genJetPt"] + if (args.jet_branches): + variables["eff"] = ["pt", "ptlow", "ptmtv", "eta", "phi", "dxy", "dz", "vxy", "deltaEta", "deltaPhi", "deltaR", "genJetEta", "genJetPhi", "genJetPt"] + variables["duplrate"] = ["pt", "ptlow", "ptmtv", "eta", "phi", "deltaR"] + variables["fakerate"] = ["pt", "ptlow", "ptmtv", "eta", "phi", "deltaR"] + variables["fakeorduplrate"] = ["pt", "ptlow", "ptmtv", "eta", "phi", "deltaR"] sels = { "eff": ["base", "loweta"], "fakerate": ["none"], diff --git a/RecoTracker/LSTCore/standalone/efficiency/src/performance.cc b/RecoTracker/LSTCore/standalone/efficiency/src/performance.cc index 8e8df8ff9d5e9..56b1f271ec1e8 100644 --- a/RecoTracker/LSTCore/standalone/efficiency/src/performance.cc +++ b/RecoTracker/LSTCore/standalone/efficiency/src/performance.cc @@ -771,11 +771,13 @@ void bookDuplicateRateSet(RecoTrackSetDefinition& DRset) { ana.tx.createBranch>(category_name + "_dr_denom_pt"); ana.tx.createBranch>(category_name + "_dr_denom_eta"); ana.tx.createBranch>(category_name + "_dr_denom_phi"); + ana.tx.createBranch>(category_name + "_dr_denom_deltaR"); // Numerator tracks' quantities ana.tx.createBranch>(category_name + "_dr_numer_pt"); ana.tx.createBranch>(category_name + "_dr_numer_eta"); ana.tx.createBranch>(category_name + "_dr_numer_phi"); + ana.tx.createBranch>(category_name + "_dr_numer_deltaR"); // Histogram utility object that is used to define the histograms ana.histograms.addVecHistogram(category_name + "_dr_denom_pt", getPtBounds(0), [&, category_name]() { @@ -793,6 +795,9 @@ void bookDuplicateRateSet(RecoTrackSetDefinition& DRset) { ana.histograms.addVecHistogram(category_name + "_dr_denom_phi", 180, -M_PI, M_PI, [&, category_name]() { return ana.tx.getBranchLazy>(category_name + "_dr_denom_phi"); }); + ana.histograms.addVecHistogram(category_name + "_dr_denom_deltaR", 50, 0, 0.1, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_dr_denom_deltaR"); + }); ana.histograms.addVecHistogram(category_name + "_dr_numer_pt", getPtBounds(0), [&, category_name]() { return ana.tx.getBranchLazy>(category_name + "_dr_numer_pt"); }); @@ -808,6 +813,9 @@ void bookDuplicateRateSet(RecoTrackSetDefinition& DRset) { ana.histograms.addVecHistogram(category_name + "_dr_numer_phi", 180, -M_PI, M_PI, [&, category_name]() { return ana.tx.getBranchLazy>(category_name + "_dr_numer_phi"); }); + ana.histograms.addVecHistogram(category_name + "_dr_numer_deltaR", 50, 0, 0.1, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_dr_numer_deltaR"); + }); } //__________________________________________________________________________________________________________________________________________________________________________ @@ -825,11 +833,14 @@ void bookFakeOrDuplicateRateSet(RecoTrackSetDefinition& FDRset) { ana.tx.createBranch>(category_name + "_fdr_denom_pt"); ana.tx.createBranch>(category_name + "_fdr_denom_eta"); ana.tx.createBranch>(category_name + "_fdr_denom_phi"); + ana.tx.createBranch>(category_name + "_fdr_denom_deltaR"); + // Numerator tracks' quantities ana.tx.createBranch>(category_name + "_fdr_numer_pt"); ana.tx.createBranch>(category_name + "_fdr_numer_eta"); ana.tx.createBranch>(category_name + "_fdr_numer_phi"); + ana.tx.createBranch>(category_name + "_fdr_numer_deltaR"); // Histogram utility object that is used to define the histograms ana.histograms.addVecHistogram(category_name + "_fdr_denom_pt", getPtBounds(0), [&, category_name]() { @@ -847,6 +858,9 @@ void bookFakeOrDuplicateRateSet(RecoTrackSetDefinition& FDRset) { ana.histograms.addVecHistogram(category_name + "_fdr_denom_phi", 180, -M_PI, M_PI, [&, category_name]() { return ana.tx.getBranchLazy>(category_name + "_fdr_denom_phi"); }); + ana.histograms.addVecHistogram(category_name + "_fdr_denom_deltaR", 50, 0, 0.1, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_fdr_denom_deltaR"); + }); ana.histograms.addVecHistogram(category_name + "_fdr_numer_pt", getPtBounds(0), [&, category_name]() { return ana.tx.getBranchLazy>(category_name + "_fdr_numer_pt"); }); @@ -862,6 +876,9 @@ void bookFakeOrDuplicateRateSet(RecoTrackSetDefinition& FDRset) { ana.histograms.addVecHistogram(category_name + "_fdr_numer_phi", 180, -M_PI, M_PI, [&, category_name]() { return ana.tx.getBranchLazy>(category_name + "_fdr_numer_phi"); }); + ana.histograms.addVecHistogram(category_name + "_fdr_numer_deltaR", 50, 0, 0.1, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_fdr_numer_deltaR"); + }); } //__________________________________________________________________________________________________________________________________________________________________________ @@ -879,11 +896,13 @@ void bookFakeRateSet(RecoTrackSetDefinition& FRset) { ana.tx.createBranch>(category_name + "_fr_denom_pt"); ana.tx.createBranch>(category_name + "_fr_denom_eta"); ana.tx.createBranch>(category_name + "_fr_denom_phi"); + ana.tx.createBranch>(category_name + "_fr_denom_deltaR"); // Numerator tracks' quantities ana.tx.createBranch>(category_name + "_fr_numer_pt"); ana.tx.createBranch>(category_name + "_fr_numer_eta"); ana.tx.createBranch>(category_name + "_fr_numer_phi"); + ana.tx.createBranch>(category_name + "_fr_numer_deltaR"); // Histogram utility object that is used to define the histograms ana.histograms.addVecHistogram(category_name + "_fr_denom_pt", getPtBounds(0), [&, category_name]() { @@ -898,6 +917,12 @@ void bookFakeRateSet(RecoTrackSetDefinition& FRset) { ana.histograms.addVecHistogram(category_name + "_fr_denom_eta", 180, -4.5, 4.5, [&, category_name]() { return ana.tx.getBranchLazy>(category_name + "_fr_denom_eta"); }); + ana.histograms.addVecHistogram(category_name + "_fr_denom_phi", 180, -M_PI, M_PI, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_fr_denom_phi"); + }); + ana.histograms.addVecHistogram(category_name + "_fr_denom_deltaR", 50, 0, 0.1, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_fr_denom_deltaR"); + }); ana.histograms.addVecHistogram(category_name + "_fr_numer_phi", 180, -M_PI, M_PI, [&, category_name]() { return ana.tx.getBranchLazy>(category_name + "_fr_numer_phi"); }); @@ -913,8 +938,8 @@ void bookFakeRateSet(RecoTrackSetDefinition& FRset) { ana.histograms.addVecHistogram(category_name + "_fr_numer_eta", 180, -4.5, 4.5, [&, category_name]() { return ana.tx.getBranchLazy>(category_name + "_fr_numer_eta"); }); - ana.histograms.addVecHistogram(category_name + "_fr_denom_phi", 180, -M_PI, M_PI, [&, category_name]() { - return ana.tx.getBranchLazy>(category_name + "_fr_denom_phi"); + ana.histograms.addVecHistogram(category_name + "_fr_numer_deltaR", 50, 0, 0.1, [&, category_name]() { + return ana.tx.getBranchLazy>(category_name + "_fr_numer_deltaR"); }); } @@ -1282,6 +1307,26 @@ void fillFakeRateSet(int itc, RecoTrackSetDefinition& FRset, float pt, float eta if (pass) ana.tx.pushbackToBranch(category_name + "_fr_numer_phi", phi); } + if (ana.jet_branches) { + std::vector genJetEta = lstEff.getVF("genJetEta"); + std::vector genJetPhi = lstEff.getVF("genJetPhi"); + float dEtaj = 999; + float dPhij = 999; + float dRj = 999; + float dRTemp = 999; + for (unsigned int ijet; ijet < genJetPhi.size(); ++ijet) { + dEtaj = eta - genJetEta[ijet]; + dPhij = std::acos(std::cos(phi - genJetPhi[ijet])); + dRj = std::sqrt(std::pow(dEtaj,2) + std::pow(dPhij,2)); + if(dRj < dRTemp) { + dRTemp = dRj; + } + } + ana.tx.pushbackToBranch(category_name + "_fr_denom_deltaR", dRTemp); + if (pass) { + ana.tx.pushbackToBranch(category_name + "_fr_numer_deltaR", dRTemp); + } + } } //__________________________________________________________________________________________________________________________________________________________________________ @@ -1320,6 +1365,28 @@ void fillDuplicateRateSet(int itc, RecoTrackSetDefinition& DRset, float pt, floa if (pass) ana.tx.pushbackToBranch(category_name + "_dr_numer_phi", phi); } + + if (ana.jet_branches) { + std::vector genJetEta = lstEff.getVF("genJetEta"); + std::vector genJetPhi = lstEff.getVF("genJetPhi"); + float dEtaj = 999; + float dPhij = 999; + float dRj = 999; + float dRTemp = 999; + for (unsigned int ijet; ijet < genJetPhi.size(); ++ijet) { + dEtaj = eta - genJetEta[ijet]; + dPhij = std::acos(std::cos(phi - genJetPhi[ijet])); + dRj = std::sqrt(std::pow(dEtaj,2) + std::pow(dPhij,2)); + if(dRj < dRTemp) { + dRTemp = dRj; + } + } + ana.tx.pushbackToBranch(category_name + "_dr_denom_deltaR", dRTemp); + if (pass) { + ana.tx.pushbackToBranch(category_name + "_dr_numer_deltaR", dRTemp); + } + } + } //__________________________________________________________________________________________________________________________________________________________________________ @@ -1358,4 +1425,24 @@ void fillFakeOrDuplicateRateSet(int itc, RecoTrackSetDefinition& FDRset, float p if (pass) ana.tx.pushbackToBranch(category_name + "_fdr_numer_phi", phi); } + if (ana.jet_branches) { + std::vector genJetEta = lstEff.getVF("genJetEta"); + std::vector genJetPhi = lstEff.getVF("genJetPhi"); + float dEtaj = 999; + float dPhij = 999; + float dRj = 999; + float dRTemp = 999; + for (unsigned int ijet; ijet < genJetPhi.size(); ++ijet) { + dEtaj = eta - genJetEta[ijet]; + dPhij = std::acos(std::cos(phi - genJetPhi[ijet])); + dRj = std::sqrt(std::pow(dEtaj,2) + std::pow(dPhij,2)); + if(dRj < dRTemp) { + dRTemp = dRj; + } + } + ana.tx.pushbackToBranch(category_name + "_fdr_denom_deltaR", dRTemp); + if (pass) { + ana.tx.pushbackToBranch(category_name + "_fdr_numer_deltaR", dRTemp); + } + } } From 0bd1e2add79b5414754174c3ad3414379d8778e4 Mon Sep 17 00:00:00 2001 From: kk829 Date: Tue, 16 Dec 2025 13:01:10 -0500 Subject: [PATCH 4/5] Added sim_deltaR, etc., to TrackingNtuple.cc --- .../analysis/jets/reformat_jets2.py | 1 - .../standalone/efficiency/src/performance.cc | 13 +-- .../RecoTrack/plugins/TrackingNtuple.cc | 87 ++++++++++++++----- 3 files changed, 71 insertions(+), 30 deletions(-) diff --git a/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py b/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py index fdba8c43abe43..9ac4f747033f4 100644 --- a/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py +++ b/RecoTracker/LSTCore/standalone/analysis/jets/reformat_jets2.py @@ -8,7 +8,6 @@ import matplotlib.pyplot as plt import ROOT from ROOT import TFile -from myjets import getLists, createJets, matchArr import numpy as np # Load existing tree diff --git a/RecoTracker/LSTCore/standalone/efficiency/src/performance.cc b/RecoTracker/LSTCore/standalone/efficiency/src/performance.cc index 56b1f271ec1e8..8bb48020b6909 100644 --- a/RecoTracker/LSTCore/standalone/efficiency/src/performance.cc +++ b/RecoTracker/LSTCore/standalone/efficiency/src/performance.cc @@ -1136,7 +1136,7 @@ void fillEfficiencySet(int isimtrk, else ana.tx.pushbackToBranch(category_name + "_ie_numer_deltaPhi", deltaPhi); - // vs. deltaR plot + // vs. deltaR plot ana.tx.pushbackToBranch(category_name + "_ef_denom_deltaR", deltaR); if (pass) ana.tx.pushbackToBranch(category_name + "_ef_numer_deltaR", deltaR); @@ -1308,6 +1308,7 @@ void fillFakeRateSet(int itc, RecoTrackSetDefinition& FRset, float pt, float eta ana.tx.pushbackToBranch(category_name + "_fr_numer_phi", phi); } if (ana.jet_branches) { + std::vector genJetPt = lstEff.getVF("genJetPt"); std::vector genJetEta = lstEff.getVF("genJetEta"); std::vector genJetPhi = lstEff.getVF("genJetPhi"); float dEtaj = 999; @@ -1322,9 +1323,9 @@ void fillFakeRateSet(int itc, RecoTrackSetDefinition& FRset, float pt, float eta dRTemp = dRj; } } - ana.tx.pushbackToBranch(category_name + "_fr_denom_deltaR", dRTemp); + ana.tx.pushbackToBranch(category_name + "_dr_denom_deltaR", dRTemp); if (pass) { - ana.tx.pushbackToBranch(category_name + "_fr_numer_deltaR", dRTemp); + ana.tx.pushbackToBranch(category_name + "_dr_numer_deltaR", dRTemp); } } } @@ -1367,6 +1368,7 @@ void fillDuplicateRateSet(int itc, RecoTrackSetDefinition& DRset, float pt, floa } if (ana.jet_branches) { + std::vector genJetPt = lstEff.getVF("genJetPt"); std::vector genJetEta = lstEff.getVF("genJetEta"); std::vector genJetPhi = lstEff.getVF("genJetPhi"); float dEtaj = 999; @@ -1426,6 +1428,7 @@ void fillFakeOrDuplicateRateSet(int itc, RecoTrackSetDefinition& FDRset, float p ana.tx.pushbackToBranch(category_name + "_fdr_numer_phi", phi); } if (ana.jet_branches) { + std::vector genJetPt = lstEff.getVF("genJetPt"); std::vector genJetEta = lstEff.getVF("genJetEta"); std::vector genJetPhi = lstEff.getVF("genJetPhi"); float dEtaj = 999; @@ -1440,9 +1443,9 @@ void fillFakeOrDuplicateRateSet(int itc, RecoTrackSetDefinition& FDRset, float p dRTemp = dRj; } } - ana.tx.pushbackToBranch(category_name + "_fdr_denom_deltaR", dRTemp); + ana.tx.pushbackToBranch(category_name + "_dr_denom_deltaR", dRTemp); if (pass) { - ana.tx.pushbackToBranch(category_name + "_fdr_numer_deltaR", dRTemp); + ana.tx.pushbackToBranch(category_name + "_dr_numer_deltaR", dRTemp); } } } diff --git a/Validation/RecoTrack/plugins/TrackingNtuple.cc b/Validation/RecoTrack/plugins/TrackingNtuple.cc index fa6e24fd16b1b..4b69d355c8b6c 100644 --- a/Validation/RecoTrack/plugins/TrackingNtuple.cc +++ b/Validation/RecoTrack/plugins/TrackingNtuple.cc @@ -95,9 +95,10 @@ // GenJet headers #include "DataFormats/HepMCCandidate/interface/GenParticle.h" +#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" #include "DataFormats/JetReco/interface/GenJet.h" #include "DataFormats/JetReco/interface/GenJetCollection.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" + #include #include @@ -634,7 +635,8 @@ class TrackingNtuple : public edm::one::EDAnalyzer { void fillTrackingVertices(const TrackingVertexRefVector& trackingVertices, const TrackingParticleRefKeyToIndex& tpKeyToIndex); - void fillGenJets(const edm::Event& iEvent); + void fillGenJets(const edm::Event& iEvent, + const TrackingParticleRefVector& tpCollection); struct SimHitData { std::vector matchingSimHit; @@ -1305,7 +1307,7 @@ class TrackingNtuple : public edm::one::EDAnalyzer { ph2_radL; //http://cmslxr.fnal.gov/lxr/source/DataFormats/GeometrySurface/interface/MediumProperties.h std::vector ph2_bbxi; std::vector ph2_usedMask; - std::vector ph2_clustSize; + std::vector ph2_clustSize; //////////////////// // invalid (missing/inactive/etc) hits @@ -1428,9 +1430,14 @@ class TrackingNtuple : public edm::one::EDAnalyzer { //////////////////// // GenJets - std::vector genJetPt; - std::vector genJetEta; - std::vector genJetPhi; + std::vector genjet_pt; + std::vector genjet_eta; + std::vector genjet_phi; + std::vector genjet_invisible_energy; + std::vector genjet_auxiliary_energy; + std::vector sim_deltaEta; + std::vector sim_deltaPhi; + std::vector sim_deltaR; }; // @@ -1490,7 +1497,7 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig) saveSimHitsP3_(iConfig.getUntrackedParameter("saveSimHitsP3")), simHitBySignificance_(iConfig.getUntrackedParameter("simHitBySignificance")), parametersDefiner_(iConfig.getUntrackedParameter("beamSpot"), consumesCollector()), - tok_jets_(consumes(iConfig.getParameter("JetSource"))) { + tok_jets_(consumes(iConfig.getParameter("jetSource"))) { if (includeSeeds_) { seedTokens_ = edm::vector_transform(iConfig.getUntrackedParameter>("seedTracks"), @@ -2071,9 +2078,14 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig) t->Branch("simpv_idx", &simpv_idx); // GenJets - t->Branch("genJetPt", &genJetPt); - t->Branch("genJetEta", &genJetEta); - t->Branch("genJetPhi", &genJetPhi); + t->Branch("genjet_pt", &genjet_pt); + t->Branch("genjet_eta", &genjet_eta); + t->Branch("genjet_phi", &genjet_phi); + t->Branch("genjet_invisible_energy", &genjet_invisible_energy); + t->Branch("genjet_auxiliary_energy", &genjet_auxiliary_energy); + t->Branch("sim_deltaEta", &sim_deltaEta); + t->Branch("sim_deltaPhi", &sim_deltaPhi); + t->Branch("sim_deltaR", &sim_deltaR); //t->Branch("" , &); } @@ -2486,9 +2498,14 @@ void TrackingNtuple::clearVariables() { simpv_idx.clear(); // GenJets - genJetPt.clear(); - genJetEta.clear(); - genJetPhi.clear(); + genjet_pt.clear(); + genjet_eta.clear(); + genjet_phi.clear(); + genjet_invisible_energy.clear(); + genjet_auxiliary_energy.clear(); + sim_deltaEta.clear(); + sim_deltaPhi.clear(); + sim_deltaR.clear(); } // ------------ method called for each event ------------ @@ -2763,21 +2780,43 @@ void TrackingNtuple::analyze(const edm::Event& iEvent, const edm::EventSetup& iS fillTrackingVertices(tvRefs, tpKeyToIndex); // GenJets - fillGenJets(iEvent); + fillGenJets(iEvent, tpCollection); t->Fill(); } -void TrackingNtuple::fillGenJets(const edm::Event& iEvent) { - edm::Handle genJets; - iEvent.getByToken(tok_jets_, genJets); - if (genJets.isValid()) { - for (unsigned iGenJet = 0; iGenJet < genJets->size(); ++iGenJet) { - const reco::GenJet& genJet = (*genJets)[iGenJet]; - genJetPt.push_back(genJet.pt()); - genJetEta.push_back(genJet.eta()); - genJetPhi.push_back(genJet.phi()); +void TrackingNtuple::fillGenJets(const edm::Event& iEvent, + const TrackingParticleRefVector& tpCollection) { + auto const& genJets = iEvent.get(tok_jets_); + for (auto const& jet : genJets) { + genjet_pt.push_back(jet.pt()); + genjet_eta.push_back(jet.eta()); + genjet_phi.push_back(jet.phi()); + genjet_invisible_energy.push_back(jet.invisibleEnergy()); + genjet_auxiliary_energy.push_back(jet.auxiliaryEnergy()); + } + for (const TrackingParticleRef& tp : tpCollection) { + float sim_eta = tp->eta(); + float sim_phi = tp->phi(); + float dEtaj = 999; + float dPhij = 999; + float dRj = 999; + float dEtaTemp = 999; + float dPhiTemp = 999; + float dRTemp = 999; + for (auto const& jet : genJets) { + dEtaj = sim_eta - jet.eta(); + dPhij = std::acos(std::cos(sim_phi - jet.phi())); + dRj = std::sqrt(std::pow(dEtaj,2) + std::pow(dPhij,2)); + if(dRj < dRTemp) { + dEtaTemp = dEtaj; + dPhiTemp = dPhij; + dRTemp = dRj; + } } + sim_deltaEta.push_back(dEtaTemp); + sim_deltaPhi.push_back(dPhiTemp); + sim_deltaR.push_back(dRTemp); } } @@ -4764,7 +4803,7 @@ void TrackingNtuple::fillDescriptions(edm::ConfigurationDescriptions& descriptio desc.addUntracked("keepEleSimHits", false); desc.addUntracked("saveSimHitsP3", false); desc.addUntracked("simHitBySignificance", false); - desc.add("JetSource", edm::InputTag("ak4GenJets")); + desc.add("jetSource", edm::InputTag("ak4GenJets")); descriptions.add("trackingNtuple", desc); } From 50e325e25c8bed2d417ded738d7932f6ab340258 Mon Sep 17 00:00:00 2001 From: kk829 Date: Tue, 16 Dec 2025 13:08:56 -0500 Subject: [PATCH 5/5] Fixing minor merge conflict --- .../standalone/efficiency/python/lst_plot_performance.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RecoTracker/LSTCore/standalone/efficiency/python/lst_plot_performance.py b/RecoTracker/LSTCore/standalone/efficiency/python/lst_plot_performance.py index 53aab6318f5c9..1d35f00af05f0 100755 --- a/RecoTracker/LSTCore/standalone/efficiency/python/lst_plot_performance.py +++ b/RecoTracker/LSTCore/standalone/efficiency/python/lst_plot_performance.py @@ -9,7 +9,7 @@ sel_choices = ["base", "loweta", "xtr", "vtr", "none"] metric_choices = ["eff", "fakerate", "duplrate", "fakeorduplrate", "avgOTlen"] -variable_choices = ["pt", "ptmtv", "ptlow", "eta", "phi", "dxy", "dz", "vxy", "deltaEta", "deltaPhi", "deltaR", "jet_eta", "jet_phi", "jet_pt"] +variable_choices = ["pt", "ptmtv", "ptlow", "eta", "phi", "dxy", "dz", "vxy", "deltaEta", "deltaPhi", "deltaR", "genJetEta", "genJetPhi", "genJetPt"] objecttype_choices = ["TC", "pT5", "T5", "pT3", "pLS", "T4", "pT5_lower", "pT3_lower", "T5_lower", "pLS_lower"] #lowerObjectType = ["pT5_lower", "pT3_lower", "T5_lower"]