diff --git a/PWGCF/FemtoDream/Core/femtoDreamCollisionSelection.h b/PWGCF/FemtoDream/Core/femtoDreamCollisionSelection.h index 15abe8452b5..8902551374e 100644 --- a/PWGCF/FemtoDream/Core/femtoDreamCollisionSelection.h +++ b/PWGCF/FemtoDream/Core/femtoDreamCollisionSelection.h @@ -131,15 +131,15 @@ class FemtoDreamCollisionSelection /// \tparam T type of the collision /// \param col Collision template - void fillQA(T const& col) + void fillQA(T const& col, float cent) { if (mHistogramRegistry) { mHistogramRegistry->fill(HIST("Event/Zvtx"), col.posZ()); mHistogramRegistry->fill(HIST("Event/MultNTracksPV"), col.multNTracksPV()); mHistogramRegistry->fill(HIST("Event/MultTPC"), col.multTPC()); if (mCheckIsRun3) { - mHistogramRegistry->fill(HIST("Event/MultPercentile"), col.centFT0M()); - mHistogramRegistry->fill(HIST("Event/MultPercentileVSMultNTracksPV"), col.centFT0M(), col.multNTracksPV()); + mHistogramRegistry->fill(HIST("Event/MultPercentile"), cent); + mHistogramRegistry->fill(HIST("Event/MultPercentileVSMultNTracksPV"), cent, col.multNTracksPV()); } else { mHistogramRegistry->fill(HIST("Event/MultNTracklets"), col.multTracklets()); } diff --git a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerReducedTask.cxx b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerReducedTask.cxx index 650548fe056..cb0cce833d2 100644 --- a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerReducedTask.cxx +++ b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerReducedTask.cxx @@ -47,6 +47,7 @@ namespace o2::aod using FemtoFullCollision = soa::Join::iterator; using FemtoFullCollisionMC = soa::Join::iterator; +using FemtoFullCollision_noCent_MC = soa::Join::iterator; using FemtoFullTracks = soa::Join + template void fillCollisionsAndTracks(CollisionType const& col, TrackType const& tracks) /// \todo with FilteredFullV0s { // get magnetic field for run @@ -224,7 +225,11 @@ struct femtoDreamProducerReducedTask { int mult = 0; int multNtr = 0; if (ConfIsRun3) { - mult = col.centFT0M(); + if constexpr (useCentrality) { + mult = col.centFT0M(); + } else { + mult = 0.; + } multNtr = col.multNTracksPV(); } else { mult = 1; // multiplicity percentile is known in Run 2 @@ -233,8 +238,7 @@ struct femtoDreamProducerReducedTask { if (ConfEvtUseTPCmult) { multNtr = col.multTPC(); } - - colCuts.fillQA(col); + colCuts.fillQA(col, mult); /// First thing to do is to check whether the basic event selection criteria are fulfilled /// That includes checking if there are any usable tracks in a collision @@ -307,7 +311,7 @@ struct femtoDreamProducerReducedTask { // get magnetic field for run getMagneticFieldTesla(col.bc_as()); // fill the tables - fillCollisionsAndTracks(col, tracks); + fillCollisionsAndTracks(col, tracks); } PROCESS_SWITCH(femtoDreamProducerReducedTask, processData, "Provide experimental data", true); @@ -319,9 +323,21 @@ struct femtoDreamProducerReducedTask { // get magnetic field for run getMagneticFieldTesla(col.bc_as()); // fill the tables - fillCollisionsAndTracks(col, tracks); + fillCollisionsAndTracks(col, tracks); } PROCESS_SWITCH(femtoDreamProducerReducedTask, processMC, "Provide MC data", false); + + void processMC_noCentrality(aod::FemtoFullCollision_noCent_MC const& col, + aod::BCsWithTimestamps const&, + soa::Join const& tracks, + aod::McCollisions const& mcCollisions, aod::McParticles const& mcParticles) + { + // get magnetic field for run + getMagneticFieldTesla(col.bc_as()); + // fill the tables + fillCollisionsAndTracks(col, tracks); + } + PROCESS_SWITCH(femtoDreamProducerReducedTask, processMC_noCentrality, "Provide MC data", false); }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) diff --git a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTask.cxx b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTask.cxx index 62e27759030..9f141fba39a 100644 --- a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTask.cxx +++ b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTask.cxx @@ -48,6 +48,7 @@ namespace o2::aod using FemtoFullCollision = soa::Join::iterator; using FemtoFullCollisionMC = soa::Join::iterator; +using FemtoFullCollision_noCent_MC = soa::Join::iterator; using FemtoFullTracks = soa::Join ConfIsDebug{"ConfIsDebug", true, "Enable Debug tables"}; Configurable ConfIsRun3{"ConfIsRun3", false, "Running on Run3 or pilot"}; - Configurable ConfIsUseMultiplicityPercentile{"ConfIsUseMultiplicityPercentile", true, "Use multiplicity percentile (ccdb object for MC may be missing)"}; Configurable ConfIsForceGRP{"ConfIsForceGRP", false, "Set true if the magnetic field configuration is not available in the usual CCDB directory (e.g. for Run 2 converted data or unanchorad Monte Carlo)"}; /// Event cuts @@ -153,12 +153,12 @@ struct femtoDreamProducerTask { void init(InitContext&) { - if (doprocessData == false && doprocessMC == false) { + if (doprocessData == false && doprocessMC == false && doprocessMC_noCentrality == false) { LOGF(fatal, "Neither processData nor processMC enabled. Please choose one."); } - if (doprocessData == true && doprocessMC == true) { + if ((doprocessData == true && doprocessMC == true) || (doprocessData == true && doprocessMC_noCentrality == true) || (doprocessMC == true && doprocessMC_noCentrality == true)) { LOGF(fatal, - "Cannot enable processData and processMC at the same time. " + "Cannot enable more than one process switch at the same time. " "Please choose one."); } @@ -343,7 +343,7 @@ struct femtoDreamProducerTask { } } - template + template void fillCollisionsAndTracksAndV0(CollisionType const& col, TrackType const& tracks, V0Type const& fullV0s) { const auto vtxZ = col.posZ(); @@ -351,7 +351,7 @@ struct femtoDreamProducerTask { float mult = 0; int multNtr = 0; if (ConfIsRun3) { - if (ConfIsUseMultiplicityPercentile) { + if constexpr (useCentrality) { mult = col.centFT0M(); } else { mult = 0; @@ -365,7 +365,7 @@ struct femtoDreamProducerTask { multNtr = col.multTPC(); } - colCuts.fillQA(col); + colCuts.fillQA(col, mult); // check whether the basic event selection criteria are fulfilled // that included checking if there is at least on usable track or V0 @@ -513,7 +513,7 @@ struct femtoDreamProducerTask { // get magnetic field for run getMagneticFieldTesla(col.bc_as()); // fill the tables - fillCollisionsAndTracksAndV0(col, tracks, fullV0s); + fillCollisionsAndTracksAndV0(col, tracks, fullV0s); } PROCESS_SWITCH(femtoDreamProducerTask, processData, "Provide experimental data", true); @@ -528,9 +528,23 @@ struct femtoDreamProducerTask { // get magnetic field for run getMagneticFieldTesla(col.bc_as()); // fill the tables - fillCollisionsAndTracksAndV0(col, tracks, fullV0s); + fillCollisionsAndTracksAndV0(col, tracks, fullV0s); } PROCESS_SWITCH(femtoDreamProducerTask, processMC, "Provide MC data", false); + + void processMC_noCentrality(aod::FemtoFullCollision_noCent_MC const& col, + aod::BCsWithTimestamps const&, + soa::Join const& tracks, + aod::McCollisions const& mcCollisions, + aod::McParticles const& mcParticles, + soa::Join const& fullV0s) /// \todo with FilteredFullV0s + { + // get magnetic field for run + getMagneticFieldTesla(col.bc_as()); + // fill the tables + fillCollisionsAndTracksAndV0(col, tracks, fullV0s); + } + PROCESS_SWITCH(femtoDreamProducerTask, processMC_noCentrality, "Provide MC data without requiring a centrality calibration", false); }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)