Skip to content

Commit 605567c

Browse files
committed
move multiplicity-corrected multiplicity to dedicated CFCollisionsExtra table
1 parent d33f68c commit 605567c

2 files changed

Lines changed: 23 additions & 11 deletions

File tree

PWGCF/DataModel/CorrelationsDerived.h

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,30 @@ using CFMultiplicity = CFMultiplicities::iterator;
6565

6666
namespace cfcollision
6767
{
68-
DECLARE_SOA_INDEX_COLUMN(CFMcCollision, cfMcCollision); //! Index to reduced MC collision
69-
DECLARE_SOA_COLUMN(Multiplicity, multiplicity, float); //! Centrality/multiplicity value
70-
DECLARE_SOA_COLUMN(MultiplicityCorrected, multiplicityCorrected, float); //! Efficiency-corrected track count; original multiplicity when correction is disabled
68+
DECLARE_SOA_INDEX_COLUMN(CFMcCollision, cfMcCollision); //! Index to reduced MC collision
69+
DECLARE_SOA_COLUMN(Multiplicity, multiplicity, float); //! Centrality/multiplicity value
7170
} // namespace cfcollision
7271
DECLARE_SOA_TABLE(CFCollisions, "AOD", "CFCOLLISION", //! Reduced collision table
7372
o2::soa::Index<>,
7473
bc::RunNumber, collision::PosZ,
75-
cfcollision::Multiplicity, timestamp::Timestamp, cfcollision::MultiplicityCorrected);
74+
cfcollision::Multiplicity, timestamp::Timestamp);
7675
DECLARE_SOA_TABLE(CFCollLabels, "AOD", "CFCOLLLABEL", //! Labels for reduced collision table
7776
cfcollision::CFMcCollisionId);
7877
using CFCollision = CFCollisions::iterator;
7978
using CFCollLabel = CFCollLabels::iterator;
8079
using CFCollisionsWithLabel = soa::Join<CFCollisions, CFCollLabels>;
8180
using CFCollisionWithLabel = CFCollisionsWithLabel::iterator;
8281

82+
namespace cfcollisionextra
83+
{
84+
DECLARE_SOA_COLUMN(MultiplicityCorrected, multiplicityCorrected, float); //! Efficiency-corrected track count
85+
} // namespace cfcollisionextra
86+
DECLARE_SOA_TABLE(CFCollisionsExtra, "AOD", "CFCOLLSEXTRA", //! Row-aligned extension of CFCollisions; filled only when multiplicity efficiency is configured
87+
cfcollisionextra::MultiplicityCorrected);
88+
using CFCollisionExtra = CFCollisionsExtra::iterator;
89+
using CFCollisionsWithExtra = soa::Join<CFCollisions, CFCollisionsExtra>;
90+
using CFCollisionWithExtra = CFCollisionsWithExtra::iterator;
91+
8392
namespace cftrack
8493
{
8594
DECLARE_SOA_INDEX_COLUMN(CFCollision, cfCollision); //! Index to collision

PWGCF/TableProducer/filterCorrelations.cxx

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ struct FilterCF {
112112
O2_DEFINE_CONFIGURABLE(chi2peritscluster, float, 36, "maximum Chi2 / cluster for the ITS track segment")
113113
O2_DEFINE_CONFIGURABLE(cfgEstimatorBitMask, uint16_t, 0, "BitMask for multiplicity estimators to be included in the CFMultSet tables.");
114114

115-
O2_DEFINE_CONFIGURABLE(cfgEfficiencyMultiplicity, std::string, "", "Multiplicity efficiency (RecoAll / MC): CCDB path or local ROOT file with a 4D ccdb_object (eta, pT, multiplicity, z-vtx); empty copies the original multiplicity")
115+
O2_DEFINE_CONFIGURABLE(cfgEfficiencyMultiplicity, std::string, "", "Multiplicity efficiency (RecoAll / MC): CCDB path or local ROOT file with a 4D ccdb_object (eta, pT, multiplicity, z-vtx); empty disables CFCollisionsExtra output")
116116
O2_DEFINE_CONFIGURABLE(cfgLocalEfficiency, int, 0, "0 = CCDB efficiency, 1 = local ROOT efficiency")
117117
O2_DEFINE_CONFIGURABLE(cfgMultiplicityTrackBitMask, uint16_t, 0, "Required track-type bits for corrected multiplicity; match cfgTrackBitMask used to produce the efficiency (0 = all stored tracks)")
118118

@@ -132,6 +132,7 @@ struct FilterCF {
132132
HistogramRegistry registrytrackQA{"TrackQA", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
133133

134134
Produces<aod::CFCollisions> outputCollisions;
135+
Produces<aod::CFCollisionsExtra> outputCollisionsExtra;
135136
Produces<aod::CFTracks> outputTracks;
136137

137138
Produces<aod::CFCollLabels> outputMcCollisionLabels;
@@ -338,10 +339,6 @@ struct FilterCF {
338339
template <bool applyDCA, typename TCollision, typename TTracks>
339340
float getCorrectedMultiplicity(const TCollision& collision, const TTracks& tracks, uint64_t timestamp)
340341
{
341-
if (cfgEfficiencyMultiplicity.value.empty()) {
342-
return collision.multiplicity();
343-
}
344-
345342
auto* efficiency = loadMultiplicityEfficiency(timestamp);
346343
double correctedMultiplicity = 0.;
347344
for (const auto& track : tracks) {
@@ -397,7 +394,10 @@ struct FilterCF {
397394
}
398395

399396
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
400-
outputCollisions(bc.runNumber(), collision.posZ(), collision.multiplicity(), bc.timestamp(), getCorrectedMultiplicity<true>(collision, tracks, bc.timestamp()));
397+
outputCollisions(bc.runNumber(), collision.posZ(), collision.multiplicity(), bc.timestamp());
398+
if (!cfgEfficiencyMultiplicity.value.empty()) {
399+
outputCollisionsExtra(getCorrectedMultiplicity<true>(collision, tracks, bc.timestamp()));
400+
}
401401

402402
if constexpr (std::experimental::is_detected<HasMultTables, C1>::value) {
403403
multiplicities.clear();
@@ -575,7 +575,10 @@ struct FilterCF {
575575

576576
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
577577
// NOTE works only when we store all MC collisions (as we do here)
578-
outputCollisions(bc.runNumber(), collision.posZ(), collision.multiplicity(), bc.timestamp(), getCorrectedMultiplicity<false>(collision, groupedTracks, bc.timestamp()));
578+
outputCollisions(bc.runNumber(), collision.posZ(), collision.multiplicity(), bc.timestamp());
579+
if (!cfgEfficiencyMultiplicity.value.empty()) {
580+
outputCollisionsExtra(getCorrectedMultiplicity<false>(collision, groupedTracks, bc.timestamp()));
581+
}
579582
outputMcCollisionLabels(collision.mcCollisionId());
580583

581584
if constexpr (std::experimental::is_detected<HasMultTables, C1>::value) {

0 commit comments

Comments
 (0)