Skip to content

Commit b3bc209

Browse files
fgrosaalibuild
andauthored
PWGHF: adapt MC validation task to remove dependence on trackIndexSkimCreator (#6971)
* PWGHF: adapt MC validation task to remove dependence on trackIndexSkimCreator * Please consider the following formatting changes --------- Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent cd05b3b commit b3bc209

2 files changed

Lines changed: 104 additions & 17 deletions

File tree

PWGHF/Tasks/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ o2physics_add_dpl_workflow(task-mc-gen-pt-rap-shapes
3636

3737
o2physics_add_dpl_workflow(task-mc-validation
3838
SOURCES taskMcValidation.cxx
39-
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
39+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2Physics::EventFilteringUtils
4040
COMPONENT_NAME Analysis)
4141

4242
# o2physics_add_dpl_workflow(task-sel-optimisation

PWGHF/Tasks/taskMcValidation.cxx

Lines changed: 103 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,19 @@
2424
#include "Framework/runDataProcessing.h"
2525
#include "Framework/StaticFor.h"
2626

27+
#include "CCDB/BasicCCDBManager.h"
2728
#include "Common/DataModel/CollisionAssociationTables.h"
2829

2930
#include "PWGHF/DataModel/CandidateReconstructionTables.h"
3031
#include "PWGHF/DataModel/CandidateSelectionTables.h"
32+
#include "PWGHF/Utils/utilsEvSelHf.h"
3133

3234
using namespace o2;
3335
using namespace o2::analysis;
3436
using namespace o2::aod;
3537
using namespace o2::framework;
3638
using namespace o2::framework::expressions;
39+
using namespace o2::hf_evsel;
3740

3841
namespace
3942
{
@@ -393,12 +396,15 @@ struct HfTaskMcValidationRec {
393396

394397
using HfCand2ProngWithMCRec = soa::Join<aod::HfCand2Prong, aod::HfCand2ProngMcRec>;
395398
using HfCand3ProngWithMCRec = soa::Join<aod::HfCand3Prong, aod::HfCand3ProngMcRec>;
396-
using CollisionsWithMCLabels = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::HfSelCollision>;
399+
using CollisionsWithMCLabels = soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels>;
397400
using TracksWithSel = soa::Join<aod::TracksWMc, aod::TracksExtra, aod::TrackSelection, aod::TrackCompColls>;
398401

399402
Partition<TracksWithSel> tracksFilteredGlobalTrackWoDCA = requireGlobalTrackWoDCAInFilter();
400403
Partition<TracksWithSel> tracksInAcc = requireTrackCutInFilter(TrackSelectionFlags::kInAcceptanceTracks);
401404

405+
Service<o2::ccdb::BasicCCDBManager> ccdb;
406+
HfEventSelection hfEvSel; // event selection and monitoring
407+
402408
AxisSpec axisDeltaMom{2000, -1., 1.};
403409
AxisSpec axisOrigin{4, -1.5, 2.5};
404410
AxisSpec axisEta{40, -1., 1.};
@@ -478,6 +484,16 @@ struct HfTaskMcValidationRec {
478484

479485
void init(InitContext&)
480486
{
487+
std::array<bool, 3> procCollisions = {doprocessColl, doprocessCollWithCentFTOC, doprocessCollWithCentFTOM};
488+
if (std::accumulate(procCollisions.begin(), procCollisions.end(), 0) > 1) {
489+
LOGP(fatal, "At most one process function for collision study can be enabled at a time.");
490+
}
491+
492+
std::array<bool, 3> procCollAccoc = {doprocessCollAssoc, doprocessCollAssocWithCentFTOC, doprocessCollAssocWithCentFTOM};
493+
if (std::accumulate(procCollAccoc.begin(), procCollAccoc.end(), 0) > 1) {
494+
LOGP(fatal, "At most one process for collision association study function can be enabled at a time.");
495+
}
496+
481497
histOriginTracks[0] = registry.add<THnSparse>("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
482498
histOriginTracks[1] = registry.add<THnSparse>("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
483499
histOriginTracks[2] = registry.add<THnSparse>("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 {
519535
histContributors = registry.add<TH1>("TrackToCollChecks/histContributors", "PV contributors from correct/wrong MC collision;;entries", HistType::kTH1F, {axisDecision});
520536
histContributors->GetXaxis()->SetBinLabel(1, "correct MC collision");
521537
histContributors->GetXaxis()->SetBinLabel(2, "wrong MC collision");
538+
hfEvSel.addHistograms(registry); // collision monitoring
539+
540+
ccdb->setURL("http://alice-ccdb.cern.ch");
541+
ccdb->setCaching(true);
542+
ccdb->setLocalObjectValidityChecking();
522543
}
523544

524-
void process(CollisionsWithMCLabels::iterator const& collision,
525-
aod::McCollisions const&)
545+
template <o2::hf_centrality::CentralityEstimator centEstimator, typename Coll>
546+
void checkCollisions(Coll const& collision,
547+
aod::McCollisions const&,
548+
aod::BCsWithTimestamps const&)
526549
{
527-
// check that collision is selected by hf-track-index-skim-creator-tag-sel-collisions
528-
if (collision.whyRejectColl() != 0) {
550+
// apply event selection
551+
if (!collision.has_mcCollision()) {
529552
return;
530553
}
531-
if (!collision.has_mcCollision()) {
554+
555+
float centrality{-1.f};
556+
const auto rejectionMask = hfEvSel.getHfCollisionRejectionMask<true, centEstimator, aod::BCsWithTimestamps>(collision, centrality, ccdb);
557+
if (rejectionMask != 0) {
558+
/// at least one event selection not satisfied --> reject the candidate
532559
return;
533560
}
534-
auto mcCollision = collision.mcCollision_as<aod::McCollisions>();
561+
562+
auto mcCollision = collision.template mcCollision_as<aod::McCollisions>();
535563
if (eventGeneratorType >= 0 && mcCollision.getSubGeneratorId() != eventGeneratorType) {
536564
return;
537565
}
@@ -540,24 +568,30 @@ struct HfTaskMcValidationRec {
540568
registry.fill(HIST("histYvtxReco"), collision.posY());
541569
registry.fill(HIST("histZvtxReco"), collision.posZ());
542570
registry.fill(HIST("histDeltaZvtx"), collision.numContrib(), collision.posZ() - mcCollision.posZ());
543-
} // end process
571+
}
544572

545-
void processCollAssoc(CollisionsWithMCLabels const& collisions,
546-
TracksWithSel const&,
547-
aod::McParticles const& mcParticles,
548-
aod::McCollisions const&,
549-
aod::BCs const&)
573+
template <o2::hf_centrality::CentralityEstimator centEstimator, typename Colls>
574+
void checkCollisionAssociation(Colls const& collisions,
575+
TracksWithSel const&,
576+
aod::McParticles const& mcParticles,
577+
aod::McCollisions const&,
578+
aod::BCsWithTimestamps const&)
550579
{
551580
// loop over collisions
552-
for (auto collision = collisions.begin(); collision != collisions.end(); ++collision) {
581+
for (const auto& collision : collisions) {
553582
// check that collision is selected by hf-track-index-skim-creator-tag-sel-collisions
554-
if (collision.whyRejectColl() != 0) {
583+
584+
float centrality{-1.f};
585+
const auto rejectionMask = hfEvSel.getHfCollisionRejectionMask<true, centEstimator, aod::BCsWithTimestamps>(collision, centrality, ccdb);
586+
if (rejectionMask != 0) {
587+
/// at least one event selection not satisfied --> reject the candidate
555588
continue;
556589
}
590+
557591
if (!collision.has_mcCollision()) {
558592
continue;
559593
}
560-
auto mcCollision = collision.mcCollision_as<aod::McCollisions>();
594+
auto mcCollision = collision.template mcCollision_as<aod::McCollisions>();
561595
if (eventGeneratorType >= 0 && mcCollision.getSubGeneratorId() != eventGeneratorType) {
562596
continue;
563597
}
@@ -678,8 +712,61 @@ struct HfTaskMcValidationRec {
678712
}
679713
}
680714
}
715+
716+
void processColl(CollisionsWithMCLabels::iterator const& collision,
717+
aod::McCollisions const& mcCollisions,
718+
aod::BCsWithTimestamps const& bcs)
719+
{
720+
checkCollisions<o2::hf_centrality::CentralityEstimator::None>(collision, mcCollisions, bcs);
721+
} // end process
722+
PROCESS_SWITCH(HfTaskMcValidationRec, processColl, "Process collision information without centrality selection", true);
723+
724+
void processCollWithCentFTOC(soa::Join<CollisionsWithMCLabels, aod::CentFT0Cs>::iterator const& collision,
725+
aod::McCollisions const& mcCollisions,
726+
aod::BCsWithTimestamps const& bcs)
727+
{
728+
checkCollisions<o2::hf_centrality::CentralityEstimator::FT0C>(collision, mcCollisions, bcs);
729+
} // end process
730+
PROCESS_SWITCH(HfTaskMcValidationRec, processCollWithCentFTOC, "Process collision information with centrality selection with FT0C", false);
731+
732+
void processCollWithCentFTOM(soa::Join<CollisionsWithMCLabels, aod::CentFT0Ms>::iterator const& collision,
733+
aod::McCollisions const& mcCollisions,
734+
aod::BCsWithTimestamps const& bcs)
735+
{
736+
checkCollisions<o2::hf_centrality::CentralityEstimator::FT0M>(collision, mcCollisions, bcs);
737+
} // end process
738+
PROCESS_SWITCH(HfTaskMcValidationRec, processCollWithCentFTOM, "Process collision information with centrality selection with FT0M", false);
739+
740+
void processCollAssoc(CollisionsWithMCLabels const& collisions,
741+
TracksWithSel const& tracks,
742+
aod::McParticles const& mcParticles,
743+
aod::McCollisions const& mcCollisions,
744+
aod::BCsWithTimestamps const& bcs)
745+
{
746+
checkCollisionAssociation<o2::hf_centrality::CentralityEstimator::None>(collisions, tracks, mcParticles, mcCollisions, bcs);
747+
}
681748
PROCESS_SWITCH(HfTaskMcValidationRec, processCollAssoc, "Process collision-association information, requires extra table from TrackToCollisionAssociation task (fillTableOfCollIdsPerTrack=true)", false);
682749

750+
void processCollAssocWithCentFTOC(soa::Join<CollisionsWithMCLabels, aod::CentFT0Cs> const& collisions,
751+
TracksWithSel const& tracks,
752+
aod::McParticles const& mcParticles,
753+
aod::McCollisions const& mcCollisions,
754+
aod::BCsWithTimestamps const& bcs)
755+
{
756+
checkCollisionAssociation<o2::hf_centrality::CentralityEstimator::FT0C>(collisions, tracks, mcParticles, mcCollisions, bcs);
757+
}
758+
PROCESS_SWITCH(HfTaskMcValidationRec, processCollAssocWithCentFTOC, "Process collision-association information with centrality selection with FT0C, requires extra table from TrackToCollisionAssociation task (fillTableOfCollIdsPerTrack=true)", false);
759+
760+
void processCollAssocWithCentFTOM(soa::Join<CollisionsWithMCLabels, aod::CentFT0Ms> const& collisions,
761+
TracksWithSel const& tracks,
762+
aod::McParticles const& mcParticles,
763+
aod::McCollisions const& mcCollisions,
764+
aod::BCsWithTimestamps const& bcs)
765+
{
766+
checkCollisionAssociation<o2::hf_centrality::CentralityEstimator::FT0M>(collisions, tracks, mcParticles, mcCollisions, bcs);
767+
}
768+
PROCESS_SWITCH(HfTaskMcValidationRec, processCollAssocWithCentFTOM, "Process collision-association information with centrality selection with FT0M, requires extra table from TrackToCollisionAssociation task (fillTableOfCollIdsPerTrack=true)", false);
769+
683770
void processEff(HfCand2ProngWithMCRec const& cand2Prongs,
684771
HfCand3ProngWithMCRec const& cand3Prongs,
685772
aod::TracksWMc const&,

0 commit comments

Comments
 (0)