Skip to content

Commit 76f3ade

Browse files
authored
Split even more multiplicities (#3891)
- Split table for barrel multiplicity - Add proto MC multiplicities - Add fatal in case mult is misconfigured and Zeq is requested
1 parent d246a52 commit 76f3ade

File tree

4 files changed

+146
-65
lines changed

4 files changed

+146
-65
lines changed

Common/Core/TableHelper.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@
2323
#include "Framework/InitContext.h"
2424
#include "Framework/RunningWorkflowInfo.h"
2525

26+
/// Function to print the table required in the full workflow
27+
/// @param initContext initContext of the init function
28+
void printTablesInWorkflow(o2::framework::InitContext& initContext)
29+
{
30+
auto& workflows = initContext.services().get<o2::framework::RunningWorkflowInfo const>();
31+
for (auto const& device : workflows.devices) {
32+
for (auto const& input : device.inputs) {
33+
LOG(info) << "Table: " << input.matcher.binding << " in device: " << device.name;
34+
}
35+
}
36+
}
37+
2638
/// Function to check if a table is required in a workflow
2739
/// @param initContext initContext of the init function
2840
/// @param table name of the table to check for

Common/DataModel/Multiplicity.h

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ DECLARE_SOA_DYNAMIC_COLUMN(IsInelGt0, isInelGt0, //! is INEL > 0
4040
[](int multPveta1) -> bool { return multPveta1 > 0; });
4141
DECLARE_SOA_DYNAMIC_COLUMN(IsInelGt1, isInelGt1, //! is INEL > 1
4242
[](int multPveta1) -> bool { return multPveta1 > 1; });
43+
// MC
44+
DECLARE_SOA_COLUMN(MultMCFT0A, multMCFT0A, float); //!
45+
DECLARE_SOA_COLUMN(MultMCFT0C, multMCFT0C, float); //!
46+
DECLARE_SOA_COLUMN(MultMCNTracksPVeta1, multMCNTracksPVeta1, float); //!
4347

4448
// complementary / MultsExtra table
4549
DECLARE_SOA_COLUMN(MultPVTotalContributors, multPVTotalContributors, float); //!
@@ -73,14 +77,17 @@ DECLARE_SOA_TABLE(FDDMults, "AOD", "FDDMULT", //! Multiplicity with the FDD dete
7377
mult::MultFDDM<mult::MultFDDA, mult::MultFDDC>);
7478
DECLARE_SOA_TABLE(ZDCMults, "AOD", "ZDCMULT", //! Multiplicity with the ZDC detector
7579
mult::MultZNA, mult::MultZNC);
76-
DECLARE_SOA_TABLE(BarrelMults, "AOD", "BARRELMULT", //! Multiplicity in the barrel
77-
mult::MultTracklets,
78-
mult::MultTPC,
80+
DECLARE_SOA_TABLE(TrackletMults, "AOD", "TRKLTMULT", //! Multiplicity with tracklets (only Run2)
81+
mult::MultTracklets);
82+
DECLARE_SOA_TABLE(TPCMults, "AOD", "TPCMULT", //! Multiplicity with TPC
83+
mult::MultTPC);
84+
DECLARE_SOA_TABLE(PVMults, "AOD", "PVMULT", //! Multiplicity from the PV contributors
7985
mult::MultNTracksPV,
8086
mult::MultNTracksPVeta1,
8187
mult::MultNTracksPVetaHalf,
8288
mult::IsInelGt0<mult::MultNTracksPVeta1>,
8389
mult::IsInelGt1<mult::MultNTracksPVeta1>);
90+
using BarrelMults = soa::Join<TrackletMults, TPCMults, PVMults>;
8491
using Mults = soa::Join<BarrelMults, FV0Mults, FT0Mults, FDDMults, ZDCMults>;
8592
using Mult = Mults::iterator;
8693

@@ -90,6 +97,9 @@ DECLARE_SOA_TABLE(MultsExtra, "AOD", "MULTEXTRA", //!
9097
mult::MultNTracksHasITS, mult::MultNTracksHasTPC, mult::MultNTracksHasTOF, mult::MultNTracksHasTRD,
9198
mult::MultNTracksITSOnly, mult::MultNTracksTPCOnly, mult::MultNTracksITSTPC, mult::BCNumber);
9299
using MultExtra = MultsExtra::iterator;
100+
DECLARE_SOA_TABLE(MultsExtraMC, "AOD", "MULTEXTRAMC", //! Table for the MC information
101+
mult::MultMCFT0A, mult::MultMCFT0C, mult::MultMCNTracksPVeta1);
102+
using MultExtraMC = MultsExtraMC::iterator;
93103

94104
namespace multZeq
95105
{
@@ -109,15 +119,15 @@ using MultZeq = MultZeqs::iterator;
109119

110120
namespace multBC
111121
{
112-
DECLARE_SOA_COLUMN(MultBCFT0A, multBCFT0A, float); //!
113-
DECLARE_SOA_COLUMN(MultBCFT0C, multBCFT0C, float); //!
114-
DECLARE_SOA_COLUMN(MultBCFV0A, multBCFV0A, float); //!
115-
DECLARE_SOA_COLUMN(MultBCTVX, multBCTVX, bool); //!
116-
DECLARE_SOA_COLUMN(MultBCFV0OrA, multBCFV0OrA, bool); //!
122+
DECLARE_SOA_COLUMN(MultBCFT0A, multBCFT0A, float); //!
123+
DECLARE_SOA_COLUMN(MultBCFT0C, multBCFT0C, float); //!
124+
DECLARE_SOA_COLUMN(MultBCFV0A, multBCFV0A, float); //!
125+
DECLARE_SOA_COLUMN(MultBCTVX, multBCTVX, bool); //!
126+
DECLARE_SOA_COLUMN(MultBCFV0OrA, multBCFV0OrA, bool); //!
117127
DECLARE_SOA_COLUMN(MultBCV0triggerBits, multBCV0triggerBits, uint8_t); //!
118128
DECLARE_SOA_COLUMN(MultBCTriggerMask, multBCTriggerMask, uint64_t); //! CTP trigger mask
119129
DECLARE_SOA_COLUMN(MultBCColliding, multBCColliding, bool); //! CTP trigger mask
120-
} // namespace multDebug
130+
} // namespace multBC
121131
DECLARE_SOA_TABLE(MultsBC, "AOD", "MULTBC", //!
122132
multBC::MultBCFT0A,
123133
multBC::MultBCFT0C,

Common/TableProducer/PID/pidTPCBase.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ namespace o2::aod
2525
{
2626

2727
DECLARE_SOA_TABLE(PIDMults, "AOD", "PIDMults", //! TPC auxiliary table for the PID
28+
o2::soa::Marker<1>,
2829
mult::MultTPC);
2930
using PIDMult = PIDMults::iterator;
3031

Common/TableProducer/multiplicityTable.cxx

Lines changed: 114 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -22,29 +22,43 @@ using namespace o2::framework;
2222
#include "TableHelper.h"
2323
#include "iostream"
2424

25-
#define bitcheck(var, nbit) ((var) & (1 << (nbit)))
26-
27-
static constexpr int nTables = 7;
25+
static constexpr int kFV0Mults = 0;
26+
static constexpr int kFT0Mults = 1;
27+
static constexpr int kFDDMults = 2;
28+
static constexpr int kZDCMults = 3;
29+
static constexpr int kTrackletMults = 4;
30+
static constexpr int kTPCMults = 5;
31+
static constexpr int kPVMults = 6;
32+
static constexpr int kMultsExtra = 7;
33+
static constexpr int kMultZeqs = 8;
34+
static constexpr int kMultsExtraMC = 9;
35+
static constexpr int nTables = 10;
2836
static constexpr int nParameters = 1;
2937
static const std::vector<std::string> tableNames{"FV0Mults",
3038
"FT0Mults",
3139
"FDDMults",
3240
"ZDCMults",
33-
"BarrelMults",
41+
"TrackletMults",
42+
"TPCMults",
43+
"PVMults",
3444
"MultsExtra",
35-
"MultZeqs"};
45+
"MultZeqs",
46+
"MultsExtraMC"};
3647
static const std::vector<std::string> parameterNames{"Enable"};
37-
static const int defaultParameters[nTables][nParameters]{{-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}};
48+
static const int defaultParameters[nTables][nParameters]{{-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}};
3849

3950
struct MultiplicityTableTaskIndexed {
4051
SliceCache cache;
41-
Produces<aod::FV0Mults> multFV0;
42-
Produces<aod::FT0Mults> multFT0;
43-
Produces<aod::FDDMults> multFDD;
44-
Produces<aod::ZDCMults> multZDC;
45-
Produces<aod::BarrelMults> multBarrel;
46-
Produces<aod::MultsExtra> multExtra;
47-
Produces<aod::MultZeqs> multzeq;
52+
Produces<aod::FV0Mults> tableFV0;
53+
Produces<aod::FT0Mults> tableFT0;
54+
Produces<aod::FDDMults> tableFDD;
55+
Produces<aod::ZDCMults> tableZDC;
56+
Produces<aod::TrackletMults> tableTracklet;
57+
Produces<aod::TPCMults> tableTpc;
58+
Produces<aod::PVMults> tablePv;
59+
Produces<aod::MultsExtra> tableExtra;
60+
Produces<aod::MultZeqs> tableMultZeq;
61+
Produces<aod::MultsExtraMC> tableExtraMc;
4862

4963
// For vertex-Z corrections in calibration
5064
Service<o2::ccdb::BasicCCDBManager> ccdb;
@@ -86,16 +100,33 @@ struct MultiplicityTableTaskIndexed {
86100
if (doprocessRun2 == true && doprocessRun3 == true) {
87101
LOGF(fatal, "Cannot enable processRun2 and processRun3 at the same time. Please choose one.");
88102
}
103+
bool tEnabled[nTables] = {false};
89104
for (int i = 0; i < nTables; i++) {
90105
int f = enabledTables->get(tableNames[i].c_str(), "Enable");
91106
enableFlagIfTableRequired(context, tableNames[i], f);
92107
if (f == 1) {
108+
tEnabled[i] = true;
93109
mEnabledTables.push_back(i);
94110
if (fractionOfEvents <= 1.f && (tableNames[i] != "MultsExtra")) {
95111
LOG(fatal) << "Cannot have a fraction of events <= 1 and multiplicity table consumed.";
96112
}
97113
}
98114
}
115+
// Check that the tables are enabled consistenly
116+
if (tEnabled[kMultZeqs]) {
117+
if (!tEnabled[kFV0Mults]) {
118+
LOG(fatal) << "Cannot have the extra table enabled and not the one on FV0";
119+
}
120+
if (!tEnabled[kFT0Mults]) {
121+
LOG(fatal) << "Cannot have the extra table enabled and not the one on FT0";
122+
}
123+
if (!tEnabled[kFDDMults]) {
124+
LOG(fatal) << "Cannot have the extra table enabled and not the one on FDD";
125+
}
126+
if (!tEnabled[kPVMults]) {
127+
LOG(fatal) << "Cannot have the extra table enabled and not the one on PV";
128+
}
129+
}
99130

100131
mRunNumber = 0;
101132
lCalibLoaded = false;
@@ -164,11 +195,13 @@ struct MultiplicityTableTaskIndexed {
164195
}
165196

166197
LOGF(debug, "multFV0A=%5.0f multFV0C=%5.0f multFT0A=%5.0f multFT0C=%5.0f multFDDA=%5.0f multFDDC=%5.0f multZNA=%6.0f multZNC=%6.0f multTracklets=%i multTPC=%i", multFV0A, multFV0C, multFT0A, multFT0C, multFDDA, multFDDC, multZNA, multZNC, multTracklets, multTPC);
167-
multFV0(multFV0A, multFV0C);
168-
multFT0(multFT0A, multFT0C);
169-
multFDD(multFDDA, multFDDC);
170-
multZDC(multZNA, multZNC);
171-
multBarrel(multTracklets, multTPC, multNContribs, multNContribsEta1, multNContribsEtaHalf);
198+
tableFV0(multFV0A, multFV0C);
199+
tableFT0(multFT0A, multFT0C);
200+
tableFDD(multFDDA, multFDDC);
201+
tableZDC(multZNA, multZNC);
202+
tableTracklet(multTracklets);
203+
tableTpc(multTPC);
204+
tablePv(multNContribs, multNContribsEta1, multNContribsEtaHalf);
172205
}
173206
PROCESS_SWITCH(MultiplicityTableTaskIndexed, processRun2, "Produce Run 2 multiplicity tables", false);
174207

@@ -189,26 +222,34 @@ struct MultiplicityTableTaskIndexed {
189222
// reserve memory
190223
for (auto i : mEnabledTables) {
191224
switch (i) {
192-
case 0: // FV0
193-
multFV0.reserve(collisions.size());
225+
case kFV0Mults: // FV0
226+
tableFV0.reserve(collisions.size());
227+
break;
228+
case kFT0Mults: // FT0
229+
tableFT0.reserve(collisions.size());
230+
break;
231+
case kFDDMults: // FDD
232+
tableFDD.reserve(collisions.size());
194233
break;
195-
case 1: // FT0
196-
multFT0.reserve(collisions.size());
234+
case kZDCMults: // ZDC
235+
tableZDC.reserve(collisions.size());
197236
break;
198-
case 2: // FDD
199-
multFDD.reserve(collisions.size());
237+
case kTrackletMults: // Tracklets (Run 2 only, nothing to do) (to be removed!)
238+
tableTracklet.reserve(collisions.size());
200239
break;
201-
case 3: // ZDC
202-
multZDC.reserve(collisions.size());
240+
case kTPCMults: // TPC
241+
tableTpc.reserve(collisions.size());
203242
break;
204-
case 4: // Barrel
205-
multBarrel.reserve(collisions.size());
243+
case kPVMults: // PV multiplicity
244+
tablePv.reserve(collisions.size());
206245
break;
207-
case 5: // Extra
208-
multExtra.reserve(collisions.size());
246+
case kMultsExtra: // Extra information
247+
tableExtra.reserve(collisions.size());
209248
break;
210-
case 6: // Z equalized
211-
multzeq.reserve(collisions.size());
249+
case kMultZeqs: // Equalized multiplicity
250+
tableMultZeq.reserve(collisions.size());
251+
break;
252+
case kMultsExtraMC: // MC extra information (nothing to do, this is data)
212253
break;
213254
default:
214255
LOG(fatal) << "Unknown table requested: " << i;
@@ -225,7 +266,6 @@ struct MultiplicityTableTaskIndexed {
225266
float multFDDC = 0.f;
226267
float multZNA = -1.f;
227268
float multZNC = -1.f;
228-
const int multTracklets = 0; // Undefined in Run 3
229269
int multNContribs = 0;
230270

231271
float multZeqFV0A = 0.f;
@@ -267,7 +307,8 @@ struct MultiplicityTableTaskIndexed {
267307

268308
for (auto i : mEnabledTables) {
269309
switch (i) {
270-
case 0: // FV0
310+
case kFV0Mults: // FV0
311+
{
271312
multFV0A = 0.f;
272313
multFV0C = 0.f;
273314
// using FV0 row index from event selection task
@@ -280,10 +321,11 @@ struct MultiplicityTableTaskIndexed {
280321
multFV0A = -999.f;
281322
multFV0C = -999.f;
282323
}
283-
multFV0(multFV0A, multFV0C);
324+
tableFV0(multFV0A, multFV0C);
284325
LOGF(debug, "multFV0A=%5.0f multFV0C=%5.0f", multFV0A, multFV0C);
285-
break;
286-
case 1: // FT0
326+
} break;
327+
case kFT0Mults: // FT0
328+
{
287329
multFT0A = 0.f;
288330
multFT0C = 0.f;
289331
// using FT0 row index from event selection task
@@ -299,10 +341,11 @@ struct MultiplicityTableTaskIndexed {
299341
multFT0A = -999.f;
300342
multFT0C = -999.f;
301343
}
302-
multFT0(multFT0A, multFT0C);
344+
tableFT0(multFT0A, multFT0C);
303345
LOGF(debug, "multFT0A=%5.0f multFT0C=%5.0f", multFV0A, multFV0C);
304-
break;
305-
case 2: // FDD
346+
} break;
347+
case kFDDMults: // FDD
348+
{
306349
multFDDA = 0.f;
307350
multFDDC = 0.f;
308351
// using FDD row index from event selection task
@@ -318,10 +361,11 @@ struct MultiplicityTableTaskIndexed {
318361
multFDDA = -999.f;
319362
multFDDC = -999.f;
320363
}
321-
multFDD(multFDDA, multFDDC);
364+
tableFDD(multFDDA, multFDDC);
322365
LOGF(debug, "multFDDA=%5.0f multFDDC=%5.0f", multFDDA, multFDDC);
323-
break;
324-
case 3: // ZDC
366+
} break;
367+
case kZDCMults: // ZDC
368+
{
325369
multZNA = -1.f;
326370
multZNC = -1.f;
327371
if (bc.has_zdc()) {
@@ -331,23 +375,32 @@ struct MultiplicityTableTaskIndexed {
331375
multZNA = -999.f;
332376
multZNC = -999.f;
333377
}
334-
multZDC(multZNA, multZNC);
378+
tableZDC(multZNA, multZNC);
335379
LOGF(debug, "multZNA=%6.0f multZNC=%6.0f", multZNA, multZNC);
336-
break;
337-
case 4: // Barrel
380+
} break;
381+
case kTrackletMults: // Tracklets (only Run2) nothing to do (to be removed!)
382+
{
383+
tableTracklet(0);
384+
} break;
385+
case kTPCMults: // TPC
338386
{
339387
const auto& tracksGrouped = tracksIUWithTPC->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
388+
const int multTPC = tracksGrouped.size();
389+
tableTpc(multTPC);
390+
LOGF(debug, "multTPC=%i", multTPC);
391+
} break;
392+
case kPVMults: // PV multiplicity
393+
{
340394
const auto& pvContribsGrouped = pvContribTracksIU->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
341395
const auto& pvContribsEta1Grouped = pvContribTracksIUEta1->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
342396
const auto& pvContribsEtaHalfGrouped = pvContribTracksIUEtaHalf->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
343-
const int multTPC = tracksGrouped.size();
344397
multNContribs = pvContribsGrouped.size();
345398
const int multNContribsEta1 = pvContribsEta1Grouped.size();
346399
const int multNContribsEtaHalf = pvContribsEtaHalfGrouped.size();
347-
multBarrel(multTracklets, multTPC, multNContribs, multNContribsEta1, multNContribsEtaHalf);
348-
LOGF(debug, "multTracklets=%i multTPC=%i", multTracklets, multTPC);
400+
tablePv(multNContribs, multNContribsEta1, multNContribsEtaHalf);
401+
LOGF(debug, "multNContribs=%i, multNContribsEta1=%i, multNContribsEtaHalf=%i", multNContribs, multNContribsEta1, multNContribsEtaHalf);
349402
} break;
350-
case 5: // Extra
403+
case kMultsExtra: // Extra
351404
{
352405
int nHasITS = 0, nHasTPC = 0, nHasTOF = 0, nHasTRD = 0;
353406
int nITSonly = 0, nTPConly = 0, nITSTPC = 0;
@@ -374,9 +427,10 @@ struct MultiplicityTableTaskIndexed {
374427

375428
int bcNumber = bc.globalBC() % 3564;
376429

377-
multExtra(static_cast<float>(collision.numContrib()), collision.chi2(), collision.collisionTimeRes(), mRunNumber, collision.posZ(), collision.sel8(), nHasITS, nHasTPC, nHasTOF, nHasTRD, nITSonly, nTPConly, nITSTPC, bcNumber);
430+
tableExtra(static_cast<float>(collision.numContrib()), collision.chi2(), collision.collisionTimeRes(), mRunNumber, collision.posZ(), collision.sel8(), nHasITS, nHasTPC, nHasTOF, nHasTRD, nITSonly, nTPConly, nITSTPC, bcNumber);
378431
} break;
379-
case 6: // Z equalized
432+
case kMultZeqs: // Z equalized
433+
{
380434
if (fabs(collision.posZ()) < 15.0f && lCalibLoaded) {
381435
multZeqFV0A = hVtxZFV0A->Interpolate(0.0) * multFV0A / hVtxZFV0A->Interpolate(collision.posZ());
382436
multZeqFT0A = hVtxZFT0A->Interpolate(0.0) * multFT0A / hVtxZFT0A->Interpolate(collision.posZ());
@@ -385,11 +439,15 @@ struct MultiplicityTableTaskIndexed {
385439
multZeqFDDC = hVtxZFDDC->Interpolate(0.0) * multFDDC / hVtxZFDDC->Interpolate(collision.posZ());
386440
multZeqNContribs = hVtxZNTracks->Interpolate(0.0) * multNContribs / hVtxZNTracks->Interpolate(collision.posZ());
387441
}
388-
multzeq(multZeqFV0A, multZeqFT0A, multZeqFT0C, multZeqFDDA, multZeqFDDC, multZeqNContribs);
389-
break;
390-
default:
442+
tableMultZeq(multZeqFV0A, multZeqFT0A, multZeqFT0C, multZeqFDDA, multZeqFDDC, multZeqNContribs);
443+
} break;
444+
case kMultsExtraMC: // MC only (nothing to do)
445+
{
446+
} break;
447+
default: // Default
448+
{
391449
LOG(fatal) << "Unknown table requested: " << i;
392-
break;
450+
} break;
393451
}
394452
}
395453
}

0 commit comments

Comments
 (0)