@@ -480,10 +480,37 @@ auto InvMassXicToPiKP(const T& candidate)
480480{
481481 return InvMassLcpiKp (candidate);
482482}
483+
484+ // Ξcc±± → p± K∓ π± π±
485+
486+ template <typename T>
487+ auto CtXicc (const T& candidate)
488+ {
489+ return candidate.ct (RecoDecay::getMassPDG (pdg::Code::kXiCCPlusPlus ));
490+ }
491+
492+ template <typename T>
493+ auto YXicc (const T& candidate)
494+ {
495+ return candidate.y (RecoDecay::getMassPDG (pdg::Code::kXiCCPlusPlus ));
496+ }
497+
498+ template <typename T>
499+ auto EXicc (const T& candidate)
500+ {
501+ return candidate.e (RecoDecay::getMassPDG (pdg::Code::kXiCCPlusPlus ));
502+ }
503+
504+ template <typename T>
505+ auto InvMassXiccToXicPi (const T& candidate)
506+ {
507+ return candidate.m (array{RecoDecay::getMassPDG (pdg::Code::kXiCPlus ), RecoDecay::getMassPDG (kPiPlus )});
508+ }
483509} // namespace hf_cand_prong3
484510
485511// 3-prong decay candidate table
486512DECLARE_SOA_TABLE (HfCandProng3Base, " AOD" , " HFCANDP3BASE" , // !
513+ o2::soa::Index<>,
487514 // general columns
488515 HFCAND_COLUMNS,
489516 // 3-prong specific columns
@@ -538,6 +565,70 @@ DECLARE_SOA_TABLE(HfCandProng3MCGen, "AOD", "HFCANDP3MCGEN", //!
538565 hf_cand_prong3::OriginMCGen,
539566 hf_cand_prong3::FlagMCDecayChanGen);
540567
568+ // specific Xicc candidate properties
569+ namespace hf_cand_xicc
570+ {
571+ DECLARE_SOA_INDEX_COLUMN_FULL (Index0, index0, int , HfCandProng3, " _0" ); // Xicc index
572+ // MC matching result:
573+ DECLARE_SOA_COLUMN (FlagMCMatchRec, flagMCMatchRec, int8_t ); // reconstruction level
574+ DECLARE_SOA_COLUMN (FlagMCMatchGen, flagMCMatchGen, int8_t ); // generator level
575+ DECLARE_SOA_COLUMN (OriginMCRec, originMCRec, int8_t ); // particle origin, reconstruction level
576+ DECLARE_SOA_COLUMN (OriginMCGen, originMCGen, int8_t ); // particle origin, generator level
577+ DECLARE_SOA_COLUMN (FlagMCDecayChanRec, flagMCDecayChanRec, int8_t ); // resonant decay channel flag, reconstruction level
578+ DECLARE_SOA_COLUMN (FlagMCDecayChanGen, flagMCDecayChanGen, int8_t ); // resonant decay channel flag, generator level
579+ // mapping of decay types
580+ enum DecayType { XiccToXicPi = 0 }; // move this to a dedicated cascade namespace in the future?
581+ } // namespace hf_cand_xicc
582+
583+ // declare dedicated Xicc candidate table
584+ DECLARE_SOA_TABLE (HfCandXiccBase, " AOD" , " HFCANDXICCBASE" ,
585+ // general columns
586+ HFCAND_COLUMNS,
587+ // 2-prong specific columns
588+ hf_cand::PxProng0, hf_cand::PyProng0, hf_cand::PzProng0,
589+ hf_cand::PxProng1, hf_cand::PyProng1, hf_cand::PzProng1,
590+ hf_cand::ImpactParameter0, hf_cand::ImpactParameter1,
591+ hf_cand::ErrorImpactParameter0, hf_cand::ErrorImpactParameter1,
592+ hf_cand_xicc::Index0Id, hf_track_index::Index1Id,
593+ hf_track_index::HFflag,
594+ /* dynamic columns */
595+ hf_cand_prong2::M<hf_cand::PxProng0, hf_cand::PyProng0, hf_cand::PzProng0, hf_cand::PxProng1, hf_cand::PyProng1, hf_cand::PzProng1>,
596+ hf_cand_prong2::M2<hf_cand::PxProng0, hf_cand::PyProng0, hf_cand::PzProng0, hf_cand::PxProng1, hf_cand::PyProng1, hf_cand::PzProng1>,
597+ /* dynamic columns that use candidate momentum components */
598+ hf_cand::Pt<hf_cand_prong2::Px, hf_cand_prong2::Py>,
599+ hf_cand::Pt2<hf_cand_prong2::Px, hf_cand_prong2::Py>,
600+ hf_cand::P<hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>,
601+ hf_cand::P2<hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>,
602+ hf_cand::PVector<hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>,
603+ hf_cand::CPA<collision::PosX, collision::PosY, collision::PosZ, hf_cand::XSecondaryVertex, hf_cand::YSecondaryVertex, hf_cand::ZSecondaryVertex, hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>,
604+ hf_cand::CPAXY<collision::PosX, collision::PosY, hf_cand::XSecondaryVertex, hf_cand::YSecondaryVertex, hf_cand_prong2::Px, hf_cand_prong2::Py>,
605+ hf_cand::Ct<collision::PosX, collision::PosY, collision::PosZ, hf_cand::XSecondaryVertex, hf_cand::YSecondaryVertex, hf_cand::ZSecondaryVertex, hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>,
606+ hf_cand::ImpactParameterXY<collision::PosX, collision::PosY, collision::PosZ, hf_cand::XSecondaryVertex, hf_cand::YSecondaryVertex, hf_cand::ZSecondaryVertex, hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>,
607+ hf_cand_prong2::MaxNormalisedDeltaIP<collision::PosX, collision::PosY, hf_cand::XSecondaryVertex, hf_cand::YSecondaryVertex, hf_cand::ErrorDecayLengthXY, hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand::ImpactParameter0, hf_cand::ErrorImpactParameter0, hf_cand::ImpactParameter1, hf_cand::ErrorImpactParameter1, hf_cand::PxProng0, hf_cand::PyProng0, hf_cand::PxProng1, hf_cand::PyProng1>,
608+ hf_cand::Eta<hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>,
609+ hf_cand::Phi<hf_cand_prong2::Px, hf_cand_prong2::Py>,
610+ hf_cand::Y<hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>,
611+ hf_cand::E<hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>,
612+ hf_cand::E2 <hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>);
613+
614+ // extended table with expression columns that can be used as arguments of dynamic columns
615+ DECLARE_SOA_EXTENDED_TABLE_USER (HfCandXiccExt, HfCandXiccBase, " HFCANDXICCEXT" ,
616+ hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz);
617+
618+ using HfCandXicc = HfCandXiccExt;
619+
620+ // table with results of reconstruction level MC matching
621+ DECLARE_SOA_TABLE (HfCandXiccMCRec, " AOD" , " HFCANDXICCMCREC" , // !
622+ hf_cand_xicc::FlagMCMatchRec,
623+ hf_cand_xicc::OriginMCRec,
624+ hf_cand_xicc::FlagMCDecayChanRec);
625+
626+ // table with results of generator level MC matching
627+ DECLARE_SOA_TABLE (HfCandXiccMCGen, " AOD" , " HFCANDXICCMCGEN" , // !
628+ hf_cand_xicc::FlagMCMatchGen,
629+ hf_cand_xicc::OriginMCGen,
630+ hf_cand_xicc::FlagMCDecayChanGen);
631+
541632} // namespace o2::aod
542633
543634#endif // O2_ANALYSIS_HFSECONDARYVERTEX_H_
0 commit comments