From 88cd7f545e992b2b332cd723af97232627f0268d Mon Sep 17 00:00:00 2001 From: Adam Matyja Date: Mon, 31 Aug 2026 13:55:06 +0200 Subject: [PATCH 1/2] Remove true tau info from MC tree --- PWGUD/DataModel/TauThreeProngEventTables.h | 16 ++++---- .../tauThreeProngEventTableProducer.cxx | 41 ++++++++++++++----- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/PWGUD/DataModel/TauThreeProngEventTables.h b/PWGUD/DataModel/TauThreeProngEventTables.h index 7c059ca0aad..ca00bd0be6f 100644 --- a/PWGUD/DataModel/TauThreeProngEventTables.h +++ b/PWGUD/DataModel/TauThreeProngEventTables.h @@ -124,10 +124,10 @@ DECLARE_SOA_COLUMN(TrueChannel, trueChannel, int); // DECLARE_SOA_COLUMN(TruePosX, truePosX, float); // DECLARE_SOA_COLUMN(TruePosY, truePosY, float); DECLARE_SOA_COLUMN(TruePosZ, truePosZ, float); -// truth tau particles // index 0: tau+ // index 1: tau - -DECLARE_SOA_COLUMN(TrueTauPx, trueTauPx, float[2]); -DECLARE_SOA_COLUMN(TrueTauPy, trueTauPy, float[2]); -DECLARE_SOA_COLUMN(TrueTauPz, trueTauPz, float[2]); +// // truth tau particles // index 0: tau+ // index 1: tau - +// DECLARE_SOA_COLUMN(TrueTauPx, trueTauPx, float[2]); +// DECLARE_SOA_COLUMN(TrueTauPy, trueTauPy, float[2]); +// DECLARE_SOA_COLUMN(TrueTauPz, trueTauPz, float[2]); // truth tau daughter particles - 4 particles DECLARE_SOA_COLUMN(TrueDaugPx, trueDaugPx, float[4]); DECLARE_SOA_COLUMN(TrueDaugPy, trueDaugPy, float[4]); @@ -197,7 +197,7 @@ DECLARE_SOA_TABLE(TrueTauFourTracks, "AOD", "TRUETAU", tautree::TrueChannel, // tautree::TrueHasRecoColl, tautree::TruePosZ, - tautree::TrueTauPx, tautree::TrueTauPy, tautree::TrueTauPz, + // tautree::TrueTauPx, tautree::TrueTauPy, tautree::TrueTauPz, tautree::TrueDaugPx, tautree::TrueDaugPy, tautree::TrueDaugPz, tautree::TrueDaugPdgCode, tautree::Problem); @@ -205,7 +205,7 @@ DECLARE_SOA_TABLE(TrueTauFourTracks, "AOD", "TRUETAU", DECLARE_SOA_TABLE(GenTauFourTracks, "AOD", "GENTAU", tautree::TrueChannel, tautree::TruePosZ, - tautree::TrueTauPx, tautree::TrueTauPy, tautree::TrueTauPz, + // tautree::TrueTauPx, tautree::TrueTauPy, tautree::TrueTauPz, tautree::TrueDaugPx, tautree::TrueDaugPy, tautree::TrueDaugPz, tautree::TrueDaugPdgCode, tautree::Problem, @@ -266,7 +266,7 @@ DECLARE_SOA_TABLE(TrueTauSixTracks, "AOD", "TRUETAUSIX", tautree::TrueChannel, // tautree::TrueHasRecoColl, tautree::TruePosZ, - tautree::TrueTauPx, tautree::TrueTauPy, tautree::TrueTauPz, + // tautree::TrueTauPx, tautree::TrueTauPy, tautree::TrueTauPz, tautree::True6DaugPx, tautree::True6DaugPy, tautree::True6DaugPz, tautree::True6DaugPdgCode, tautree::Problem); @@ -274,7 +274,7 @@ DECLARE_SOA_TABLE(TrueTauSixTracks, "AOD", "TRUETAUSIX", DECLARE_SOA_TABLE(GenTauSixTracks, "AOD", "GENTAUSIX", tautree::TrueChannel, tautree::TruePosZ, - tautree::TrueTauPx, tautree::TrueTauPy, tautree::TrueTauPz, + // tautree::TrueTauPx, tautree::TrueTauPy, tautree::TrueTauPz, tautree::True6DaugPx, tautree::True6DaugPy, tautree::True6DaugPz, tautree::True6DaugPdgCode, tautree::Problem, diff --git a/PWGUD/TableProducer/tauThreeProngEventTableProducer.cxx b/PWGUD/TableProducer/tauThreeProngEventTableProducer.cxx index 503f816978f..b1c2af426a0 100644 --- a/PWGUD/TableProducer/tauThreeProngEventTableProducer.cxx +++ b/PWGUD/TableProducer/tauThreeProngEventTableProducer.cxx @@ -262,14 +262,17 @@ struct TauThreeProngEventTableProducer { registrySkim.add("skim/nTof", ";N_{TOFtrk};events", {HistType::kTH1F, {{10, -1., 9.}}}); } if (doprocessMonteCarlo) { - registrySkim.add("skim/efficiencyMC", ";efficeincy;events", {HistType::kTH1D, {{10, 0., 10.}}}); + registrySkim.add("skim/efficiencyMC", ";efficiency;events", {HistType::kTH1D, {{10, 0., 10.}}}); registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(1, "1: All"); registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(2, "2: N^{#tau}=2"); registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(3, "3: |y^{#tau}| <= 0.9"); registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(4, "4: |#eta^{ch}|<0.9"); registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(5, "5: 4 or 6 trk"); - registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(6, "6: 4 trk"); - registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(7, "7: 6 trk"); + registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(6, "e+3#pi"); + registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(7, "#mu+3#pi"); + registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(8, "#pi+3#pi"); + registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(9, "6#pi"); + registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(10, "rec"); registrySkim.add("skim/problemMC", ";problem;events", {HistType::kTH1D, {{10, 0., 10.}}}); @@ -280,13 +283,14 @@ struct TauThreeProngEventTableProducer { registrySkim.add("skim/tauPtMC", ";p_{T}^{#tau};events", {HistType::kTH1F, {{100, 0, 5.}}}); registrySkim.add("skim/tauDeltaEtaMC", ";#Delta#eta^{#tau};events ", {HistType::kTH1F, {{100, -5., 5.}}}); registrySkim.add("skim/tauDeltaPhiMC", ";#Delta#phi^{#tau}(deg.);events", {HistType::kTH1F, {{100, 131., 181}}}); + registrySkim.add("skim/ditauInvMassMC", ";M_{inv}^{#tau#tau}(GeV/#it{c}^{2});events", {HistType::kTH1F, {{100, 3.4, 13.4}}}); registrySkim.add("skim/nChPartMC", ";N^{ch. part};events", {HistType::kTH1F, {{10, 0, 10.}}}); registrySkim.add("skim/daughterPhiMC", ";#phi^{daughter};events", {HistType::kTH1F, {{100, 0, 6.4}}}); registrySkim.add("skim/daughterEtaMC", ";#eta^{daughter};events", {HistType::kTH1F, {{100, -4., 4.}}}); registrySkim.add("skim/daughterPtMC", ";p_{T}^{daughter};events", {HistType::kTH1F, {{100, 0, 5.0}}}); } if (doprocessGenerated) { - registrySkim.add("gen/efficiencyMC", ";efficeincy;events", {HistType::kTH1D, {{10, 0., 10.}}}); + registrySkim.add("gen/efficiencyMC", ";efficiency;events", {HistType::kTH1D, {{10, 0., 10.}}}); registrySkim.get(HIST("gen/efficiencyMC"))->GetXaxis()->SetBinLabel(1, "All"); registrySkim.get(HIST("gen/efficiencyMC"))->GetXaxis()->SetBinLabel(2, "N^{#tau}=2"); registrySkim.get(HIST("gen/efficiencyMC"))->GetXaxis()->SetBinLabel(3, "|y^{#tau}| <=0.9"); @@ -315,6 +319,7 @@ struct TauThreeProngEventTableProducer { registrySkim.add("gen/tauPtMC", ";p_{T}^{#tau};events", {HistType::kTH1F, {{100, 0, 5.}}}); registrySkim.add("gen/tauDeltaEtaMC", ";#Delta#eta^{#tau};events ", {HistType::kTH1F, {{100, -5., 5.}}}); registrySkim.add("gen/tauDeltaPhiMC", ";#Delta#phi^{#tau}(deg.);events", {HistType::kTH1F, {{100, 131., 181}}}); + registrySkim.add("gen/ditauInvMassMC", ";M_{inv}^{#tau#tau}(GeV/#it{c}^{2});events", {HistType::kTH1F, {{100, 3.4, 13.4}}}); registrySkim.add("gen/nChPartMC", ";N^{ch. part};events", {HistType::kTH1F, {{10, 0, 10.}}}); registrySkim.add("gen/daughterPhiMC", ";#phi^{daughter};events", {HistType::kTH1F, {{100, 0, 6.4}}}); registrySkim.add("gen/daughterEtaMC", ";#eta^{daughter};events", {HistType::kTH1F, {{100, -4., 4.}}}); @@ -1212,6 +1217,13 @@ struct TauThreeProngEventTableProducer { registrySkim.get(HIST("skim/tauDeltaEtaMC"))->Fill(trueTauEta[0] - trueTauEta[1]); registrySkim.get(HIST("skim/tauDeltaPhiMC"))->Fill(calculateDeltaPhi(trueTauPhi[0], trueTauPhi[1]) * 180. / o2::constants::math::PI); + // inv mass of two taus + ROOT::Math::LorentzVector> tau1; + ROOT::Math::LorentzVector> tau2; + tau1.SetXYZT(trueTauX[0], trueTauY[0], trueTauZ[0], RecoDecay::e(trueTauX[0], trueTauY[0], trueTauZ[0], MassTauPlus)); + tau2.SetXYZT(trueTauX[1], trueTauY[1], trueTauZ[1], RecoDecay::e(trueTauX[1], trueTauY[1], trueTauZ[1], MassTauPlus)); + registrySkim.get(HIST("skim/ditauInvMassMC"))->Fill((tau1 + tau2).M()); + registrySkim.get(HIST("skim/efficiencyMC"))->Fill(2., 1.); // |y_tau| <= 0.9 countMothers = 0; int nChargedDaughtersTau[2] = {0, 0}; @@ -1641,7 +1653,7 @@ struct TauThreeProngEventTableProducer { trueChannel, // trueHasRecoColl, mccoll.posZ(), - trueTauX, trueTauY, trueTauZ, + // trueTauX, trueTauY, trueTauZ, trueDaugX, trueDaugY, trueDaugZ, trueDaugPdgCode, problem); } else if (nChargedDaughtersTau[0] + nChargedDaughtersTau[1] == sixTracks) { // 6 @@ -1673,7 +1685,7 @@ struct TauThreeProngEventTableProducer { trueChannel, // trueHasRecoColl, mccoll.posZ(), - trueTauX, trueTauY, trueTauZ, + // trueTauX, trueTauY, trueTauZ, trueDaugX, trueDaugY, trueDaugZ, trueDaugPdgCode, problem); } // end of saving the output @@ -1795,6 +1807,13 @@ struct TauThreeProngEventTableProducer { registrySkim.get(HIST("gen/tauDeltaEtaMC"))->Fill(trueTauEta[0] - trueTauEta[1]); registrySkim.get(HIST("gen/tauDeltaPhiMC"))->Fill(calculateDeltaPhi(trueTauPhi[0], trueTauPhi[1]) * 180. / o2::constants::math::PI); + // inv mass of two taus + ROOT::Math::LorentzVector> tau1; + ROOT::Math::LorentzVector> tau2; + tau1.SetXYZT(trueTauX[0], trueTauY[0], trueTauZ[0], RecoDecay::e(trueTauX[0], trueTauY[0], trueTauZ[0], MassTauPlus)); + tau2.SetXYZT(trueTauX[1], trueTauY[1], trueTauZ[1], RecoDecay::e(trueTauX[1], trueTauY[1], trueTauZ[1], MassTauPlus)); + registrySkim.get(HIST("gen/ditauInvMassMC"))->Fill((tau1 + tau2).M()); + registrySkim.get(HIST("gen/efficiencyMC"))->Fill(2., 1.); // |y_tau| <= 0.9 countMothers = 0; int nChargedDaughtersTau[2] = {0, 0}; @@ -1965,17 +1984,19 @@ struct TauThreeProngEventTableProducer { genTauFourTracks( trueChannel, mccoll.posZ(), - trueTauX, trueTauY, trueTauZ, + // trueTauX, trueTauY, trueTauZ, trueDaugX, trueDaugY, trueDaugZ, - trueDaugPdgCode, problem, + trueDaugPdgCode, + problem, trueHasRecoColl); } else if (nChargedDaughtersTau[0] + nChargedDaughtersTau[1] == sixTracks) { // 6 genTauSixTracks( trueChannel, mccoll.posZ(), - trueTauX, trueTauY, trueTauZ, + // trueTauX, trueTauY, trueTauZ, trueDaugX, trueDaugY, trueDaugZ, - trueDaugPdgCode, problem, + trueDaugPdgCode, + problem, trueHasRecoColl); } // end of writing output From a77ced03c8b3252b52b0de62904b3132807e9ba3 Mon Sep 17 00:00:00 2001 From: Adam Matyja Date: Mon, 31 Aug 2026 14:10:46 +0200 Subject: [PATCH 2/2] Added reconstruction for a given channel --- .../tauThreeProngEventTableProducer.cxx | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/PWGUD/TableProducer/tauThreeProngEventTableProducer.cxx b/PWGUD/TableProducer/tauThreeProngEventTableProducer.cxx index b1c2af426a0..e0967520da8 100644 --- a/PWGUD/TableProducer/tauThreeProngEventTableProducer.cxx +++ b/PWGUD/TableProducer/tauThreeProngEventTableProducer.cxx @@ -262,7 +262,7 @@ struct TauThreeProngEventTableProducer { registrySkim.add("skim/nTof", ";N_{TOFtrk};events", {HistType::kTH1F, {{10, -1., 9.}}}); } if (doprocessMonteCarlo) { - registrySkim.add("skim/efficiencyMC", ";efficiency;events", {HistType::kTH1D, {{10, 0., 10.}}}); + registrySkim.add("skim/efficiencyMC", ";efficiency;events", {HistType::kTH1D, {{15, 0., 15.}}}); registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(1, "1: All"); registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(2, "2: N^{#tau}=2"); registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(3, "3: |y^{#tau}| <= 0.9"); @@ -273,6 +273,10 @@ struct TauThreeProngEventTableProducer { registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(8, "#pi+3#pi"); registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(9, "6#pi"); registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(10, "rec"); + registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(11, "rec e+3#pi"); + registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(12, "rec #mu+3#pi"); + registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(13, "rec #pi+3#pi"); + registrySkim.get(HIST("skim/efficiencyMC"))->GetXaxis()->SetBinLabel(14, "rec 6#pi"); registrySkim.add("skim/problemMC", ";problem;events", {HistType::kTH1D, {{10, 0., 10.}}}); @@ -290,7 +294,7 @@ struct TauThreeProngEventTableProducer { registrySkim.add("skim/daughterPtMC", ";p_{T}^{daughter};events", {HistType::kTH1F, {{100, 0, 5.0}}}); } if (doprocessGenerated) { - registrySkim.add("gen/efficiencyMC", ";efficiency;events", {HistType::kTH1D, {{10, 0., 10.}}}); + registrySkim.add("gen/efficiencyMC", ";efficiency;events", {HistType::kTH1D, {{15, 0., 15.}}}); registrySkim.get(HIST("gen/efficiencyMC"))->GetXaxis()->SetBinLabel(1, "All"); registrySkim.get(HIST("gen/efficiencyMC"))->GetXaxis()->SetBinLabel(2, "N^{#tau}=2"); registrySkim.get(HIST("gen/efficiencyMC"))->GetXaxis()->SetBinLabel(3, "|y^{#tau}| <=0.9"); @@ -303,6 +307,10 @@ struct TauThreeProngEventTableProducer { registrySkim.get(HIST("gen/efficiencyMC"))->GetXaxis()->SetBinLabel(8, "#pi+3#pi"); registrySkim.get(HIST("gen/efficiencyMC"))->GetXaxis()->SetBinLabel(9, "6#pi"); registrySkim.get(HIST("gen/efficiencyMC"))->GetXaxis()->SetBinLabel(10, "rec"); + registrySkim.get(HIST("gen/efficiencyMC"))->GetXaxis()->SetBinLabel(11, "rec e+3#pi"); + registrySkim.get(HIST("gen/efficiencyMC"))->GetXaxis()->SetBinLabel(12, "rec #mu+3#pi"); + registrySkim.get(HIST("gen/efficiencyMC"))->GetXaxis()->SetBinLabel(13, "rec #pi+3#pi"); + registrySkim.get(HIST("gen/efficiencyMC"))->GetXaxis()->SetBinLabel(14, "rec 6#pi"); registrySkim.add("gen/problemMC", ";problem;events", {HistType::kTH1D, {{10, 0., 10.}}}); registrySkim.get(HIST("gen/problemMC"))->GetXaxis()->SetBinLabel(1, "1: NoProblem"); @@ -1397,6 +1405,17 @@ struct TauThreeProngEventTableProducer { if (verbose) LOGF(info, "--- MC Collision has reconstructed collision!"); registrySkim.get(HIST("skim/efficiencyMC"))->Fill(9., 1.); + // reconstruction in a given channel + if (nElec == oneProng && nPi == threeProng) { // 1 + 3 + registrySkim.get(HIST("skim/efficiencyMC"))->Fill(10., 1.); + } else if (nMuon == oneProng && nPi == threeProng) { // 1 + 3 + registrySkim.get(HIST("skim/efficiencyMC"))->Fill(11., 1.); + } else if (nPi == fourTracks) { // 4 + registrySkim.get(HIST("skim/efficiencyMC"))->Fill(12., 1.); + } else if (nPi == sixTracks) { // 6 + registrySkim.get(HIST("skim/efficiencyMC"))->Fill(13., 1.); + } + // trueHasRecoColl = true; // check there is exactly one reco-level collision associated to generated collision if (collFromMcColls.size() > 1) { @@ -1973,6 +1992,18 @@ struct TauThreeProngEventTableProducer { registrySkim.get(HIST("gen/efficiencyMC"))->Fill(9., 1.); if (verbose) LOGF(info, "--- MC Collision has reconstructed collision!"); + + // reconstruction in a given channel + if (nElec == oneProng && nPi == threeProng) { // 1 + 3 + registrySkim.get(HIST("gen/efficiencyMC"))->Fill(10., 1.); + } else if (nMuon == oneProng && nPi == threeProng) { // 1 + 3 + registrySkim.get(HIST("gen/efficiencyMC"))->Fill(11., 1.); + } else if (nPi == fourTracks) { // 4 + registrySkim.get(HIST("gen/efficiencyMC"))->Fill(12., 1.); + } else if (nPi == sixTracks) { // 6 + registrySkim.get(HIST("gen/efficiencyMC"))->Fill(13., 1.); + } + } else { // get only the truth information. if (verbose) LOGF(info, "MC Collision has NO reconstructed collision!");