From e99af81b6743a6c9a4e6e5f37df7154576a12628 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 24 Jul 2024 14:15:59 +0200 Subject: [PATCH 1/2] PWGHF: adapt MC validation task to remove dependence on trackIndexSkimCreator --- PWGHF/Tasks/CMakeLists.txt | 2 +- PWGHF/Tasks/taskMcValidation.cxx | 119 ++++++++++++++++++++++++++----- 2 files changed, 104 insertions(+), 17 deletions(-) diff --git a/PWGHF/Tasks/CMakeLists.txt b/PWGHF/Tasks/CMakeLists.txt index 60edb086f1e..00878e48a2c 100644 --- a/PWGHF/Tasks/CMakeLists.txt +++ b/PWGHF/Tasks/CMakeLists.txt @@ -36,7 +36,7 @@ o2physics_add_dpl_workflow(task-mc-gen-pt-rap-shapes o2physics_add_dpl_workflow(task-mc-validation SOURCES taskMcValidation.cxx - PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore + PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2Physics::EventFilteringUtils COMPONENT_NAME Analysis) # o2physics_add_dpl_workflow(task-sel-optimisation diff --git a/PWGHF/Tasks/taskMcValidation.cxx b/PWGHF/Tasks/taskMcValidation.cxx index f8e18855dff..4e680441cec 100644 --- a/PWGHF/Tasks/taskMcValidation.cxx +++ b/PWGHF/Tasks/taskMcValidation.cxx @@ -24,16 +24,19 @@ #include "Framework/runDataProcessing.h" #include "Framework/StaticFor.h" +#include "CCDB/BasicCCDBManager.h" #include "Common/DataModel/CollisionAssociationTables.h" #include "PWGHF/DataModel/CandidateReconstructionTables.h" #include "PWGHF/DataModel/CandidateSelectionTables.h" +#include "PWGHF/Utils/utilsEvSelHf.h" using namespace o2; using namespace o2::analysis; using namespace o2::aod; using namespace o2::framework; using namespace o2::framework::expressions; +using namespace o2::hf_evsel; namespace { @@ -393,12 +396,15 @@ struct HfTaskMcValidationRec { using HfCand2ProngWithMCRec = soa::Join; using HfCand3ProngWithMCRec = soa::Join; - using CollisionsWithMCLabels = soa::Join; + using CollisionsWithMCLabels = soa::Join; using TracksWithSel = soa::Join; Partition tracksFilteredGlobalTrackWoDCA = requireGlobalTrackWoDCAInFilter(); Partition tracksInAcc = requireTrackCutInFilter(TrackSelectionFlags::kInAcceptanceTracks); + Service ccdb; + HfEventSelection hfEvSel; // event selection and monitoring + AxisSpec axisDeltaMom{2000, -1., 1.}; AxisSpec axisOrigin{4, -1.5, 2.5}; AxisSpec axisEta{40, -1., 1.}; @@ -478,6 +484,16 @@ struct HfTaskMcValidationRec { void init(InitContext&) { + std::array procCollisions = {doprocessColl, doprocessCollWithCentFTOC, doprocessCollWithCentFTOM}; + if (std::accumulate(procCollisions.begin(), procCollisions.end(), 0) > 1) { + LOGP(fatal, "At most one process function for collision study can be enabled at a time."); + } + + std::array procCollAccoc = {doprocessCollAssoc, doprocessCollAssocWithCentFTOC, doprocessCollAssocWithCentFTOM}; + if (std::accumulate(procCollAccoc.begin(), procCollAccoc.end(), 0) > 1) { + LOGP(fatal, "At most one process for collision association study function can be enabled at a time."); + } + histOriginTracks[0] = registry.add("TrackToCollChecks/histOriginNonAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{#eta}^{reco};#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm); is PV contributor; has TOF; number of ITS hits", HistType::kTHnSparseF, {axisOrigin, axisPt, axisEta, axisDeltaVtx, axisDecision, axisDecision, axisITShits}); // tracks not associated to any collision histOriginTracks[1] = registry.add("TrackToCollChecks/histOriginAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{#eta}^{reco};#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm); is PV contributor; has TOF; number of ITS hits", HistType::kTHnSparseF, {axisOrigin, axisPt, axisEta, axisDeltaVtx, axisDecision, axisDecision, axisITShits}); // tracks associasted to a collision histOriginTracks[2] = registry.add("TrackToCollChecks/histOriginGoodAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{#eta}^{reco};#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm); is PV contributor; has TOF; number of ITS hits", HistType::kTHnSparseF, {axisOrigin, axisPt, axisEta, axisDeltaVtx, axisDecision, axisDecision, axisITShits}); // tracks associated to the correct collision considering only first reco collision (based on the MC collision index) @@ -519,19 +535,31 @@ struct HfTaskMcValidationRec { histContributors = registry.add("TrackToCollChecks/histContributors", "PV contributors from correct/wrong MC collision;;entries", HistType::kTH1F, {axisDecision}); histContributors->GetXaxis()->SetBinLabel(1, "correct MC collision"); histContributors->GetXaxis()->SetBinLabel(2, "wrong MC collision"); + hfEvSel.addHistograms(registry); // collision monitoring + + ccdb->setURL("http://alice-ccdb.cern.ch"); + ccdb->setCaching(true); + ccdb->setLocalObjectValidityChecking(); } - void process(CollisionsWithMCLabels::iterator const& collision, - aod::McCollisions const&) + template + void checkCollisions(Coll const& collision, + aod::McCollisions const&, + aod::BCsWithTimestamps const&) { - // check that collision is selected by hf-track-index-skim-creator-tag-sel-collisions - if (collision.whyRejectColl() != 0) { + // apply event selection + if (!collision.has_mcCollision()) { return; } - if (!collision.has_mcCollision()) { + + float centrality{-1.f}; + const auto rejectionMask = hfEvSel.getHfCollisionRejectionMask(collision, centrality, ccdb); + if (rejectionMask != 0) { + /// at least one event selection not satisfied --> reject the candidate return; } - auto mcCollision = collision.mcCollision_as(); + + auto mcCollision = collision.template mcCollision_as(); if (eventGeneratorType >= 0 && mcCollision.getSubGeneratorId() != eventGeneratorType) { return; } @@ -540,24 +568,30 @@ struct HfTaskMcValidationRec { registry.fill(HIST("histYvtxReco"), collision.posY()); registry.fill(HIST("histZvtxReco"), collision.posZ()); registry.fill(HIST("histDeltaZvtx"), collision.numContrib(), collision.posZ() - mcCollision.posZ()); - } // end process + } - void processCollAssoc(CollisionsWithMCLabels const& collisions, - TracksWithSel const&, - aod::McParticles const& mcParticles, - aod::McCollisions const&, - aod::BCs const&) + template + void checkCollisionAssociation(Colls const& collisions, + TracksWithSel const&, + aod::McParticles const& mcParticles, + aod::McCollisions const&, + aod::BCsWithTimestamps const&) { // loop over collisions - for (auto collision = collisions.begin(); collision != collisions.end(); ++collision) { + for (const auto& collision : collisions) { // check that collision is selected by hf-track-index-skim-creator-tag-sel-collisions - if (collision.whyRejectColl() != 0) { + + float centrality{-1.f}; + const auto rejectionMask = hfEvSel.getHfCollisionRejectionMask(collision, centrality, ccdb); + if (rejectionMask != 0) { + /// at least one event selection not satisfied --> reject the candidate continue; } + if (!collision.has_mcCollision()) { continue; } - auto mcCollision = collision.mcCollision_as(); + auto mcCollision = collision.template mcCollision_as(); if (eventGeneratorType >= 0 && mcCollision.getSubGeneratorId() != eventGeneratorType) { continue; } @@ -678,8 +712,61 @@ struct HfTaskMcValidationRec { } } } + + void processColl(CollisionsWithMCLabels::iterator const& collision, + aod::McCollisions const& mcCollisions, + aod::BCsWithTimestamps const& bcs) + { + checkCollisions(collision, mcCollisions, bcs); + } // end process + PROCESS_SWITCH(HfTaskMcValidationRec, processColl, "Process collision information without centrality selection", true); + + void processCollWithCentFTOC(soa::Join::iterator const& collision, + aod::McCollisions const& mcCollisions, + aod::BCsWithTimestamps const& bcs) + { + checkCollisions(collision, mcCollisions, bcs); + } // end process + PROCESS_SWITCH(HfTaskMcValidationRec, processCollWithCentFTOC, "Process collision information with centrality selection with FT0C", false); + + void processCollWithCentFTOM(soa::Join::iterator const& collision, + aod::McCollisions const& mcCollisions, + aod::BCsWithTimestamps const& bcs) + { + checkCollisions(collision, mcCollisions, bcs); + } // end process + PROCESS_SWITCH(HfTaskMcValidationRec, processCollWithCentFTOM, "Process collision information with centrality selection with FT0M", false); + + void processCollAssoc(CollisionsWithMCLabels const& collisions, + TracksWithSel const& tracks, + aod::McParticles const& mcParticles, + aod::McCollisions const& mcCollisions, + aod::BCsWithTimestamps const& bcs) + { + checkCollisionAssociation(collisions, tracks, mcParticles, mcCollisions, bcs); + } PROCESS_SWITCH(HfTaskMcValidationRec, processCollAssoc, "Process collision-association information, requires extra table from TrackToCollisionAssociation task (fillTableOfCollIdsPerTrack=true)", false); + void processCollAssocWithCentFTOC(soa::Join const& collisions, + TracksWithSel const& tracks, + aod::McParticles const& mcParticles, + aod::McCollisions const& mcCollisions, + aod::BCsWithTimestamps const& bcs) + { + checkCollisionAssociation(collisions, tracks, mcParticles, mcCollisions, bcs); + } + PROCESS_SWITCH(HfTaskMcValidationRec, processCollAssocWithCentFTOC, "Process collision-association information with centrality selection with FT0C, requires extra table from TrackToCollisionAssociation task (fillTableOfCollIdsPerTrack=true)", false); + + void processCollAssocWithCentFTOM(soa::Join const& collisions, + TracksWithSel const& tracks, + aod::McParticles const& mcParticles, + aod::McCollisions const& mcCollisions, + aod::BCsWithTimestamps const& bcs) + { + checkCollisionAssociation(collisions, tracks, mcParticles, mcCollisions, bcs); + } + PROCESS_SWITCH(HfTaskMcValidationRec, processCollAssocWithCentFTOM, "Process collision-association information with centrality selection with FT0M, requires extra table from TrackToCollisionAssociation task (fillTableOfCollIdsPerTrack=true)", false); + void processEff(HfCand2ProngWithMCRec const& cand2Prongs, HfCand3ProngWithMCRec const& cand3Prongs, aod::TracksWMc const&, From 98c8eb2e6067a85a49ad8c88ee57551e00b4c7a1 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 24 Jul 2024 12:17:48 +0000 Subject: [PATCH 2/2] Please consider the following formatting changes --- PWGHF/Tasks/taskMcValidation.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PWGHF/Tasks/taskMcValidation.cxx b/PWGHF/Tasks/taskMcValidation.cxx index 4e680441cec..378d8431ac5 100644 --- a/PWGHF/Tasks/taskMcValidation.cxx +++ b/PWGHF/Tasks/taskMcValidation.cxx @@ -403,7 +403,7 @@ struct HfTaskMcValidationRec { Partition tracksInAcc = requireTrackCutInFilter(TrackSelectionFlags::kInAcceptanceTracks); Service ccdb; - HfEventSelection hfEvSel; // event selection and monitoring + HfEventSelection hfEvSel; // event selection and monitoring AxisSpec axisDeltaMom{2000, -1., 1.}; AxisSpec axisOrigin{4, -1.5, 2.5}; @@ -542,7 +542,7 @@ struct HfTaskMcValidationRec { ccdb->setLocalObjectValidityChecking(); } - template + template void checkCollisions(Coll const& collision, aod::McCollisions const&, aod::BCsWithTimestamps const&) @@ -570,7 +570,7 @@ struct HfTaskMcValidationRec { registry.fill(HIST("histDeltaZvtx"), collision.numContrib(), collision.posZ() - mcCollision.posZ()); } - template + template void checkCollisionAssociation(Colls const& collisions, TracksWithSel const&, aod::McParticles const& mcParticles,