@@ -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 ;
2836static constexpr int nParameters = 1 ;
2937static 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" };
3647static 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
3950struct 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