2727#include " Common/Core/RecoDecay.h"
2828
2929#include " CommonConstants/MathConstants.h"
30- #include " CommonConstants/PhysicsConstants.h"
3130#include " Framework/AnalysisHelpers.h"
3231#include " Framework/Configurable.h"
3332
@@ -435,7 +434,6 @@ class KinkBuilder
435434 int64_t daughterIndex = 0 ;
436435
437436 for (const auto & kink : kinks) {
438-
439437 // compute mother kinematics before checking filters
440438 mKinkSelection .computeKinkMotherKinematics (kink);
441439 if (!mKinkSelection .checkFilters (kink)) {
@@ -444,15 +442,15 @@ class KinkBuilder
444442 // compute qa variables before applying selections
445443 mKinkSelection .computeQaVariables (kink, tracks);
446444 mKinkSelection .applySelections (kink, tracks);
447-
448445 if (!mKinkSelection .passesAllRequiredSelections ()) {
449446 continue ;
450447 }
451448
452449 collisionBuilder.template fillCollision <system>(collisionProducts, col);
453450 // cleaner, but without ITS pid: auto daughter = kink.template trackDaug_as<T7>();
454451 int64_t idx = kink.trackDaugId () - tracksWithItsPid.offset ();
455- if (idx < 0 || idx > static_cast <int64_t >(tracksWithItsPid.size ())) {
452+ // check for valid index
453+ if (idx < 0 || idx >= static_cast <int64_t >(tracksWithItsPid.size ())) {
456454 return ;
457455 }
458456 auto daughter = tracksWithItsPid.iteratorAt (idx);
@@ -466,6 +464,49 @@ class KinkBuilder
466464 }
467465 }
468466
467+ template <modes::System system, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
468+ void fillMcKinks (T1 const & col, T2& collisionBuilder, T3& collisionProducts, T4 const & mcCols, T5& trackProducts, T6& kinkProducts, T7 const & kinks, T8 const & tracks, T9 const & tracksWithItsPid, T10& trackBuilder, T11 const & mcParticles, T12& mcBuilder, T13& mcProducts)
469+ {
470+
471+ if (!mFillAnyTable ) {
472+ return ;
473+ }
474+ int64_t daughterIndex = 0 ;
475+ for (const auto & kink : kinks) {
476+ // compute mother kinematics before checking filters
477+ mKinkSelection .computeKinkMotherKinematics (kink);
478+ if (!mKinkSelection .checkFilters (kink)) {
479+ continue ;
480+ }
481+ // compute qa variables before applying selections
482+ mKinkSelection .computeQaVariables (kink, tracks);
483+ mKinkSelection .applySelections (kink, tracks);
484+ if (!mKinkSelection .passesAllRequiredSelections ()) {
485+ continue ;
486+ }
487+
488+ collisionBuilder.template fillMcCollision <system>(collisionProducts, col, mcCols, mcProducts, mcBuilder);
489+
490+ int64_t idx = kink.trackDaugId () - tracks.offset ();
491+ // check for valid index
492+ if (idx < 0 || idx >= static_cast <int64_t >(tracks.size ())) {
493+ return ;
494+ }
495+ auto daughter = tracks.iteratorAt (idx);
496+ auto daughterWithItsPid = tracksWithItsPid.iteratorAt (idx);
497+ daughterIndex = trackBuilder.template getDaughterIndex <system, modes::Track::kKinkDaughter >(col, collisionProducts, mcCols, daughter, daughterWithItsPid, trackProducts, mcParticles, mcBuilder, mcProducts);
498+
499+ if constexpr (modes::isEqual (kinkType, modes::Kink::kSigma )) {
500+ fillSigma (collisionProducts, kinkProducts, kink, daughterIndex);
501+ mcBuilder.template fillMcSigmaWithLabel <system>(col, mcCols, kink, daughter, mcParticles, mcProducts);
502+ }
503+ if constexpr (modes::isEqual (kinkType, modes::Kink::kSigmaPlus )) {
504+ fillSigmaPlus (collisionProducts, kinkProducts, kink, daughterIndex);
505+ mcBuilder.template fillMcSigmaPlusWithLabel <system>(col, mcCols, kink, daughter, mcParticles, mcProducts);
506+ }
507+ }
508+ }
509+
469510 template <typename T1, typename T2, typename T3>
470511 void fillSigma (T1& collisionProducts, T2& kinkProducts, T3 const & kink, int64_t daughterIndex)
471512 {
0 commit comments