Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 63 additions & 9 deletions PWGUD/Tasks/upcRhoAnalysis.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -128,11 +128,45 @@ DECLARE_SOA_TABLE(McTree, "AOD", "MCTREE",
mc_tree::LeadingTrackPt, mc_tree::SubleadingTrackPt,
mc_tree::LeadingTrackEta, mc_tree::SubleadingTrackEta,
mc_tree::LeadingTrackPhi, mc_tree::SubleadingTrackPhi);

namespace resolution_tree
{
// vertex info
DECLARE_SOA_COLUMN(GenPosX, genPosX, float);
DECLARE_SOA_COLUMN(GenPosY, genPosY, float);
DECLARE_SOA_COLUMN(GenPosZ, genPosZ, float);
DECLARE_SOA_COLUMN(RecoPosX, recoPosX, float);
DECLARE_SOA_COLUMN(RecoPosY, recoPosY, float);
DECLARE_SOA_COLUMN(RecoPosZ, recoPosZ, float);
// track info
DECLARE_SOA_COLUMN(LeadingSign, leadingSign, int);
DECLARE_SOA_COLUMN(LeadingGenPt, leadingGenPt, float);
DECLARE_SOA_COLUMN(LeadingGenEta, leadingGenEta, float);
DECLARE_SOA_COLUMN(LeadingGenPhi, leadingGenPhi, float);
DECLARE_SOA_COLUMN(LeadingRecoPt, leadingRecoPt, float);
DECLARE_SOA_COLUMN(LeadingRecoEta, leadingRecoEta, float);
DECLARE_SOA_COLUMN(LeadingRecoPhi, leadingRecoPhi, float);
DECLARE_SOA_COLUMN(SubleadingSign, subleadingSign, int);
DECLARE_SOA_COLUMN(SubleadingGenPt, subleadingGenPt, float);
DECLARE_SOA_COLUMN(SubleadingGenEta, subleadingGenEta, float);
DECLARE_SOA_COLUMN(SubleadingGenPhi, subleadingGenPhi, float);
DECLARE_SOA_COLUMN(SubleadingRecoPt, subleadingRecoPt, float);
DECLARE_SOA_COLUMN(SubleadingRecoEta, subleadingRecoEta, float);
DECLARE_SOA_COLUMN(SubleadingRecoPhi, subleadingRecoPhi, float);
} // namespace resolution_tree
DECLARE_SOA_TABLE(ResolutionTree, "AOD", "RESOLUTIONTREE",
resolution_tree::GenPosX, resolution_tree::GenPosY, resolution_tree::GenPosZ,
resolution_tree::RecoPosX, resolution_tree::RecoPosY, resolution_tree::RecoPosZ,
resolution_tree::LeadingSign, resolution_tree::LeadingGenPt, resolution_tree::LeadingGenEta, resolution_tree::LeadingGenPhi,
resolution_tree::LeadingRecoPt, resolution_tree::LeadingRecoEta, resolution_tree::LeadingRecoPhi,
resolution_tree::SubleadingSign, resolution_tree::SubleadingGenPt, resolution_tree::SubleadingGenEta, resolution_tree::SubleadingGenPhi,
resolution_tree::SubleadingRecoPt, resolution_tree::SubleadingRecoEta, resolution_tree::SubleadingRecoPhi);
} // namespace o2::aod

struct UpcRhoAnalysis {
Produces<o2::aod::RecoTree> recoTree;
Produces<o2::aod::McTree> mcTree;
Produces<o2::aod::ResolutionTree> resolutionTree;

SGSelector sgSelector;

Expand Down Expand Up @@ -193,6 +227,7 @@ struct UpcRhoAnalysis {
ConfigurableAxis znCommonEnergyAxis{"znCommonEnergyAxis", {250, -5.0, 20.0}, "ZN common energy (TeV)"};
ConfigurableAxis znTimeAxis{"znTimeAxis", {200, -10.0, 10.0}, "ZN time (ns)"};
ConfigurableAxis nSigmaAxis{"nSigmaAxis", {600, -30.0, 30.0}, "TPC #it{n#sigma}"};
ConfigurableAxis resolutionAxis{"resolutionAxis", {2000, -1.0, 1.0}, "resolution"};

HistogramRegistry rQC{"rQC", {}, OutputObjHandlingPolicy::AnalysisObject};
HistogramRegistry rTracks{"rTracks", {}, OutputObjHandlingPolicy::AnalysisObject};
Expand Down Expand Up @@ -360,19 +395,22 @@ struct UpcRhoAnalysis {
if (context.mOptions.get<bool>("processResolution")) {
// collision matching
rResolution.add("MC/resolution/collisions/hMatch", ";matched;counts", kTH1D, {{2, -0.5, 1.5}});
rResolution.add("MC/resolution/collisions/hPosX", ";vertex #it{x}_{reco} - vertex #it{x}_{true} (cm);counts", kTH1D, {resolutionAxis});
rResolution.add("MC/resolution/collisions/hPosY", ";vertex #it{y}_{reco} - vertex #it{y}_{true} (cm);counts", kTH1D, {resolutionAxis});
rResolution.add("MC/resolution/collisions/hPosZ", ";vertex #it{z}_{reco} - vertex #it{z}_{true} (cm);counts", kTH1D, {resolutionAxis});
// track matching and resolutions
rResolution.add("MC/resolution/tracks/hMatch", ";matched;counts", kTH1D, {{2, -0.5, 1.5}});
rResolution.add("MC/resolution/tracks/hPt", ";#it{p}_{T, reco} - #it{p}_{T, true} (GeV/#it{c});counts", kTH1D, {{200, -1.0, 1.0}});
rResolution.add("MC/resolution/tracks/hEta", ";#it{#eta}_{reco} - #it{#eta}_{true};counts", kTH1D, {{200, -0.2, 0.2}});
rResolution.add("MC/resolution/tracks/hPhi", ";#it{#phi}_{reco} - #it{#phi}_{true} (rad);counts", kTH1D, {{200, -0.2, 0.2}});
rResolution.add("MC/resolution/tracks/hPt", ";#it{p}_{T, reco} - #it{p}_{T, true} (GeV/#it{c});counts", kTH1D, {resolutionAxis});
rResolution.add("MC/resolution/tracks/hEta", ";#it{#eta}_{reco} - #it{#eta}_{true};counts", kTH1D, {resolutionAxis});
rResolution.add("MC/resolution/tracks/hPhi", ";#it{#phi}_{reco} - #it{#phi}_{true} (rad);counts", kTH1D, {resolutionAxis});
// dipion system resolutions (1D and 2D)
rResolution.add("MC/resolution/system/1D/hM", ";#it{m}_{reco} - #it{m}_{true} (GeV/#it{c}^{2});counts", kTH1D, {{200, -1.0, 1.0}});
rResolution.add("MC/resolution/system/1D/hM", ";#it{m}_{reco} - #it{m}_{true} (GeV/#it{c}^{2});counts", kTH1D, {resolutionAxis});
rResolution.add("MC/resolution/system/2D/hMVsM", ";#it{m}_{true} (GeV/#it{c}^{2});#it{m}_{reco} (GeV/#it{c}^{2});counts", kTH2D, {mAxis, mAxis});
rResolution.add("MC/resolution/system/1D/hPt", ";#it{p}_{T, reco} - #it{p}_{T, true} (GeV/#it{c});counts", kTH1D, {{200, -1.0, 1.0}});
rResolution.add("MC/resolution/system/1D/hPt", ";#it{p}_{T, reco} - #it{p}_{T, true} (GeV/#it{c});counts", kTH1D, {resolutionAxis});
rResolution.add("MC/resolution/system/2D/hPtVsPt", ";#it{p}_{T, true} (GeV/#it{c});#it{p}_{T, reco} (GeV/#it{c});counts", kTH2D, {ptAxis, ptAxis});
rResolution.add("MC/resolution/system/1D/hY", ";#it{y}_{reco} - #it{y}_{true};counts", kTH1D, {{200, -0.2, 0.2}});
rResolution.add("MC/resolution/system/1D/hY", ";#it{y}_{reco} - #it{y}_{true};counts", kTH1D, {resolutionAxis});
rResolution.add("MC/resolution/system/2D/hYVsY", ";#it{y}_{true};#it{y}_{reco};counts", kTH2D, {yAxis, yAxis});
rResolution.add("MC/resolution/system/1D/hDeltaPhi", ";#Delta#it{#phi}_{reco} - #Delta#it{#phi}_{true} (rad);counts", kTH1D, {{2000, -1.0, 1.0}});
rResolution.add("MC/resolution/system/1D/hDeltaPhi", ";#Delta#it{#phi}_{reco} - #Delta#it{#phi}_{true} (rad);counts", kTH1D, {resolutionAxis});
rResolution.add("MC/resolution/system/2D/hDeltaPhiVsDeltaPhi", ";#Delta#it{#phi}_{true} (rad);#Delta#it{#phi}_{reco} (rad);counts", kTH2D, {deltaPhiAxis, deltaPhiAxis});
}
}
Expand Down Expand Up @@ -1090,6 +1128,10 @@ struct UpcRhoAnalysis {
if (!collision.has_udMcCollision())
return;
rResolution.fill(HIST("MC/resolution/collisions/hMatch"), 1);
auto mcCollision = collision.udMcCollision();
rResolution.fill(HIST("MC/resolution/collisions/hPosX"), collision.posX() - mcCollision.posX());
rResolution.fill(HIST("MC/resolution/collisions/hPosY"), collision.posY() - mcCollision.posY());
rResolution.fill(HIST("MC/resolution/collisions/hPosZ"), collision.posZ() - mcCollision.posZ());

std::vector<decltype(tracks.begin().udMcParticle())> trueTracks;
std::vector<decltype(tracks.begin())> recoTracks;
Expand All @@ -1101,11 +1143,11 @@ struct UpcRhoAnalysis {
continue;
rResolution.fill(HIST("MC/resolution/tracks/hMatch"), 1);
auto mcParticle = track.udMcParticle();
if (std::abs(mcParticle.pdgCode()) != kPiPlus && !mcParticle.isPhysicalPrimary())
continue;
rResolution.fill(HIST("MC/resolution/tracks/hPt"), pt(track.px(), track.py()) - pt(mcParticle.px(), mcParticle.py()));
rResolution.fill(HIST("MC/resolution/tracks/hEta"), eta(track.px(), track.py(), track.pz()) - eta(mcParticle.px(), mcParticle.py(), mcParticle.pz()));
rResolution.fill(HIST("MC/resolution/tracks/hPhi"), phi(track.px(), track.py()) - phi(mcParticle.px(), mcParticle.py()));
if (std::abs(mcParticle.pdgCode()) != kPiPlus && !mcParticle.isPhysicalPrimary())
continue;
truePionLVs.push_back(ROOT::Math::PxPyPzMVector(mcParticle.px(), mcParticle.py(), mcParticle.pz(), o2::constants::physics::MassPionCharged));
trueTracks.push_back(mcParticle);
recoPionLVs.push_back(ROOT::Math::PxPyPzMVector(track.px(), track.py(), track.pz(), o2::constants::physics::MassPionCharged));
Expand All @@ -1128,6 +1170,18 @@ struct UpcRhoAnalysis {
rResolution.fill(HIST("MC/resolution/system/2D/hYVsY"), trueSystem.Rapidity(), recoSystem.Rapidity());
rResolution.fill(HIST("MC/resolution/system/1D/hDeltaPhi"), recoDeltaPhi - trueDeltaPhi);
rResolution.fill(HIST("MC/resolution/system/2D/hDeltaPhiVsDeltaPhi"), trueDeltaPhi, recoDeltaPhi);

auto leadingTruePion = momentum(trueTracks[0].px(), trueTracks[0].py(), trueTracks[0].pz()) > momentum(trueTracks[1].px(), trueTracks[1].py(), trueTracks[1].pz()) ? trueTracks[0] : trueTracks[1];
auto subleadingTruePion = (leadingTruePion == trueTracks[0]) ? trueTracks[1] : trueTracks[0];
auto leadingRecoPion = momentum(recoTracks[0].px(), recoTracks[0].py(), recoTracks[0].pz()) > momentum(recoTracks[1].px(), recoTracks[1].py(), recoTracks[1].pz()) ? recoTracks[0] : recoTracks[1];
auto subleadingRecoPion = (leadingRecoPion == recoTracks[0]) ? recoTracks[1] : recoTracks[0];

resolutionTree(mcCollision.posX(), mcCollision.posY(), mcCollision.posZ(),
collision.posX(), collision.posY(), collision.posZ(),
leadingTruePion.pdgCode() / std::abs(leadingTruePion.pdgCode()), pt(leadingTruePion.px(), leadingTruePion.py()), eta(leadingTruePion.px(), leadingTruePion.py(), leadingTruePion.pz()), phi(leadingTruePion.px(), leadingTruePion.py()),
pt(leadingRecoPion.px(), leadingRecoPion.py()), eta(leadingRecoPion.px(), leadingRecoPion.py(), leadingRecoPion.pz()), phi(leadingRecoPion.px(), leadingRecoPion.py()),
subleadingTruePion.pdgCode() / std::abs(subleadingTruePion.pdgCode()), pt(subleadingTruePion.px(), subleadingTruePion.py()), eta(subleadingTruePion.px(), subleadingTruePion.py(), subleadingTruePion.pz()), phi(subleadingTruePion.px(), subleadingTruePion.py()),
pt(subleadingRecoPion.px(), subleadingRecoPion.py()), eta(subleadingRecoPion.px(), subleadingRecoPion.py(), subleadingRecoPion.pz()), phi(subleadingRecoPion.px(), subleadingRecoPion.py()));
}
PROCESS_SWITCH(UpcRhoAnalysis, processResolution, "check resolution of kinematic variables", false);

Expand Down
Loading