@@ -82,6 +82,10 @@ DECLARE_SOA_COLUMN(EvSelCtpTriggerMask, evSelCtpTriggerMask, uint64_t);
8282DECLARE_SOA_COLUMN (EvSelCtpInputMask, evSelCtpInputMask, uint64_t );
8383DECLARE_SOA_COLUMN (EvSelTimestamp, evSelTimestamp, uint64_t );
8484
85+ // MC
86+ DECLARE_SOA_COLUMN (McGlobalBc, mcGlobalBc, uint64_t );
87+ DECLARE_SOA_COLUMN (McAmbiguousColl, mcAmbiguousColl, bool );
88+
8589// Mults
8690DECLARE_SOA_COLUMN (MultFt0A, multFt0A, float );
8791DECLARE_SOA_COLUMN (MultFt0C, multFt0C, float );
@@ -157,6 +161,7 @@ DECLARE_SOA_TABLE(FITsAll, "AOD", "FITALL", ///< Standalone derived data used fo
157161 fit::CollRunNumber, fit::CollGlobalBc, fit::CollCtpTriggerMask, fit::CollCtpInputMask, fit::CollTimestamp,
158162 fit::TriggerAlias, fit::SelectionFlags, fit::RctFlags, fit::Sel8, fit::HasFoundBc, fit::HasFoundFt0, fit::HasFoundFv0, fit::HasFoundFdd, fit::HasFoundZdc,
159163 fit::EvSelRunNumber, fit::EvSelGlobalBc, fit::EvSelCtpTriggerMask, fit::EvSelCtpInputMask, fit::EvSelTimestamp,
164+ fit::McGlobalBc, fit::McAmbiguousColl,
160165 fit::MultFt0A, fit::MultFt0C, fit::MultFv0A, fit::MultFddA, fit::MultFddC, fit::MultZnA, fit::MultZnC, fit::MultZem1, fit::MultZem2, fit::MultZpA, fit::MultZpC,
161166 fit::Ft0GlobalBc, fit::Ft0AmplitudeA, fit::Ft0ChannelA, fit::Ft0AmplitudeC, fit::Ft0ChannelC,
162167 fit::Ft0TimeA, fit::Ft0TimeC, fit::Ft0TriggerMask, fit::Ft0PosZ, fit::Ft0CollTime, fit::Ft0SumAmpA, fit::Ft0SumAmpC,
@@ -225,9 +230,8 @@ struct FitAll {
225230 }
226231 }
227232
228- void process (soa::Join<aod::Collisions, aod::EvSels, aod::MultsRun3, aod::FT0sCorrected> const & collisions,
229- aod::BCsWithTimestamps const &,
230- aod::FT0s const &, aod::FV0As const &, aod::FDDs const &, aod::Zdcs const &)
233+ template <typename TCollision>
234+ void fillTable (TCollision const & collisions)
231235 {
232236 table.reserve (collisions.size ());
233237
@@ -246,7 +250,7 @@ struct FitAll {
246250 float collisionTimeRes = collision.collisionTimeRes ();
247251
248252 // Collision BC with timestamp
249- auto collBc = collision.bc_as <aod::BCsWithTimestamps>();
253+ auto collBc = collision.template bc_as <aod::BCsWithTimestamps>();
250254 int collRunNumber = collBc.runNumber ();
251255 uint64_t collGlobalBc = collBc.globalBC ();
252256 uint64_t collCtpTriggerMask = collBc.triggerMask ();
@@ -271,7 +275,7 @@ struct FitAll {
271275 uint64_t evSelCtpInputMask = 0 ;
272276 uint64_t evSelTimestamp = 0 ;
273277 if (hasFoundBc) {
274- auto evSelBc = collision.foundBC_as <aod::BCsWithTimestamps>();
278+ auto evSelBc = collision.template foundBC_as <aod::BCsWithTimestamps>();
275279 evSelRunNumber = evSelBc.runNumber ();
276280 evSelGlobalBc = evSelBc.globalBC ();
277281 evSelCtpTriggerMask = evSelBc.triggerMask ();
@@ -288,6 +292,14 @@ struct FitAll {
288292 }
289293 }
290294
295+ // MC
296+ uint64_t mcGlobalBc = 0 ;
297+ if constexpr (requires { collision.mcCollision (); }) {
298+ mcGlobalBc = collision.mcCollision ().template bc_as <aod::BCsWithTimestamps>().globalBC ();
299+ }
300+
301+ bool mcAmbiguousColl = false ;
302+
291303 // Multiplicities
292304 float multFT0A = collision.multFT0A ();
293305 float multFT0C = collision.multFT0C ();
@@ -327,9 +339,8 @@ struct FitAll {
327339 float ft0TotAmplC = 0 ;
328340
329341 if (hasFoundFt0) {
330- // FT0
331342 auto ft0 = collision.foundFT0 ();
332- auto ft0bc = ft0.bc_as <aod::BCsWithTimestamps>();
343+ auto ft0bc = ft0.template bc_as <aod::BCsWithTimestamps>();
333344 ft0GlobalBc = ft0bc.globalBC ();
334345 ft0TimeA = ft0.timeA ();
335346 ft0TimeC = ft0.timeC ();
@@ -387,9 +398,8 @@ struct FitAll {
387398 float fv0TotAmpl = 0 ;
388399
389400 if (hasFoundFv0) {
390- // FV0A
391401 auto fv0 = collision.foundFV0 ();
392- auto fv0bc = fv0.bc_as <aod::BCsWithTimestamps>();
402+ auto fv0bc = fv0.template bc_as <aod::BCsWithTimestamps>();
393403 fv0GlobalBc = fv0bc.globalBC ();
394404 fv0Time = fv0.time ();
395405 fv0TriggerMask = fv0.triggerMask ();
@@ -430,9 +440,8 @@ struct FitAll {
430440 float fddTotAmplC = 0 ;
431441
432442 if (hasFoundFdd) {
433- // FDD
434443 auto fdd = collision.foundFDD ();
435- auto fddbc = fdd.bc_as <aod::BCsWithTimestamps>();
444+ auto fddbc = fdd.template bc_as <aod::BCsWithTimestamps>();
436445 fddGlobalBc = fddbc.globalBC ();
437446 fddTimeA = fdd.timeA ();
438447 fddTimeC = fdd.timeC ();
@@ -469,7 +478,6 @@ struct FitAll {
469478 float timeZEM2 = -std::numeric_limits<float >::infinity ();
470479
471480 if (hasFoundZdc) {
472- // ZDC
473481 auto zdc = collision.foundZDC ();
474482 energyCommonZNA = zdc.energyCommonZNA ();
475483 energyCommonZNC = zdc.energyCommonZNC ();
@@ -481,6 +489,7 @@ struct FitAll {
481489 collRunNumber, collGlobalBc, collCtpTriggerMask, collCtpInputMask, collTimestamp,
482490 triggerAlias, selectionFlags, rctFlags, sel8, hasFoundBc, hasFoundFt0, hasFoundFv0, hasFoundFdd, hasFoundZdc,
483491 evSelRunNumber, evSelGlobalBc, evSelCtpTriggerMask, evSelCtpInputMask, evSelTimestamp,
492+ mcGlobalBc, mcAmbiguousColl,
484493 multFT0A, multFT0C, multFV0A, multFDDA, multFDDC, multZNA, multZNC, multZEM1, multZEM2, multZPA, multZPC,
485494 ft0GlobalBc, ft0AmplitudeA, ft0ChannelA, ft0AmplitudeC, ft0ChannelC,
486495 ft0TimeA, ft0TimeC, ft0TriggerMask, ft0PosZ, ft0CollTime, ft0SumAmpA, ft0SumAmpC,
@@ -493,6 +502,20 @@ struct FitAll {
493502 energyCommonZNA, energyCommonZNC, timeZEM1, timeZEM2);
494503 }
495504 }
505+
506+ void processData (soa::Join<aod::Collisions, aod::EvSels, aod::MultsRun3, aod::FT0sCorrected> const & collisions,
507+ aod::BCsWithTimestamps const &, aod::FT0s const &, aod::FV0As const &, aod::FDDs const &, aod::Zdcs const &)
508+ {
509+ fillTable (collisions);
510+ }
511+ PROCESS_SWITCH (FitAll, processData, " Process data" , true );
512+
513+ void processMc (soa::Join<aod::Collisions, aod::EvSels, aod::MultsRun3, aod::FT0sCorrected, aod::McCollisionLabels> const & collisions,
514+ aod::BCsWithTimestamps const &, aod::FT0s const &, aod::FV0As const &, aod::FDDs const &, aod::Zdcs const &, aod::McCollisions const & mcCols)
515+ {
516+ fillTable (collisions);
517+ }
518+ PROCESS_SWITCH (FitAll, processMc, " Process Mc" , false );
496519};
497520
498521WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments