@@ -820,6 +820,130 @@ class PairTrackTwoTrackResonanceBuilder
820820 int mMixingDepth = 5 ;
821821};
822822
823+ template <const char * prefixV0,
824+ const char * prefixV0PosDau,
825+ const char * prefixV0NegDau,
826+ const char * prefixResonance,
827+ const char * prefixResonancePosDau,
828+ const char * prefixResonanceNegDau,
829+ const char * prefixSe,
830+ const char * prefixMe,
831+ const char * prefixCprPosSe,
832+ const char * prefixCprNegSe,
833+ const char * prefixCprPosMe,
834+ const char * prefixCprNegMe,
835+ modes::V0 v0Type,
836+ modes::TwoTrackResonance resonanceType>
837+ class PairV0TwoTrackResonanceBuilder
838+ {
839+ public:
840+ PairV0TwoTrackResonanceBuilder () = default ;
841+ ~PairV0TwoTrackResonanceBuilder () = default ;
842+
843+ template <modes::Mode modeSe,
844+ modes::Mode modeMe,
845+ typename T1 ,
846+ typename T2 ,
847+ typename T3 ,
848+ typename T4 ,
849+ typename T5 ,
850+ typename T6 ,
851+ typename T7 ,
852+ typename T8 ,
853+ typename T9 ,
854+ typename T10 ,
855+ typename T11 ,
856+ typename T12 ,
857+ typename T13 ,
858+ typename T14 ,
859+ typename T15 ,
860+ typename T16 ,
861+ typename T17 ,
862+ typename T18 >
863+ void init (o2::framework::HistogramRegistry* registry,
864+ T1 const & confCollisionBinning,
865+ T2 const & confV0Selection,
866+ T3 const & confResonanceSelection,
867+ T4 const & confCprPos,
868+ T5 const & confCprNeg,
869+ T6 const & confMixing,
870+ T7 const & confPairBinning,
871+ T8 const & confPairCuts,
872+ std::map<T9 , std::vector<o2::framework::AxisSpec>> const & colHistSpec,
873+ std::map<T10 , std::vector<o2::framework::AxisSpec>> const & v0HistSpec,
874+ std::map<T11 , std::vector<o2::framework::AxisSpec>> const & V0posDauHistSpec,
875+ std::map<T12 , std::vector<o2::framework::AxisSpec>> const & V0negDauHistSpec,
876+ std::map<T13 , std::vector<o2::framework::AxisSpec>> const & resonanceHistSpec,
877+ std::map<T14 , std::vector<o2::framework::AxisSpec>> const & ResonancePosDauHistSpec,
878+ std::map<T15 , std::vector<o2::framework::AxisSpec>> const & ResonanceNegDauHistSpec,
879+ std::map<T16 , std::vector<o2::framework::AxisSpec>> const & pairHistSpec,
880+ std::map<T17 , std::vector<o2::framework::AxisSpec>> const & cprHistSpecPos,
881+ std::map<T18 , std::vector<o2::framework::AxisSpec>> const & cprHistSpecNeg)
882+ {
883+ mColHistManager .template init <modeSe>(registry, colHistSpec, confCollisionBinning);
884+
885+ mV0HistManager .template init <modeSe>(registry, v0HistSpec, confV0Selection, V0posDauHistSpec, V0negDauHistSpec);
886+ mResonanceHistManager .template init <modeSe>(registry, resonanceHistSpec, confResonanceSelection, ResonancePosDauHistSpec, ResonanceNegDauHistSpec);
887+
888+ mPairHistManagerSe .template init <modeSe>(registry, pairHistSpec, confPairBinning, confPairCuts, confMixing);
889+ mPairHistManagerSe .setMass (confV0Selection.pdgCodeAbs .value , confResonanceSelection.pdgCodeAbs .value );
890+ mPairHistManagerSe .setCharge (1 , 1 ); // set charge to 1
891+ mCprSe .init (registry, cprHistSpecPos, cprHistSpecNeg, confCprPos, confCprNeg);
892+
893+ mPairHistManagerMe .template init <modeMe>(registry, pairHistSpec, confPairBinning, confPairCuts, confMixing);
894+ mPairHistManagerMe .setMass (confV0Selection.pdgCodeAbs .value , confResonanceSelection.pdgCodeAbs .value );
895+ mPairHistManagerMe .setCharge (1 , 1 ); // set charge to 1
896+ mCprMe .init (registry, cprHistSpecPos, cprHistSpecNeg, confCprPos, confCprNeg);
897+
898+ // setup mixing
899+ mMixingPolicy = static_cast <pairhistmanager::MixingPolicy>(confMixing.policy .value );
900+ mMixingDepth = confMixing.depth .value ;
901+ }
902+
903+ template <modes::Mode mode, typename T1 , typename T2 , typename T3 , typename T4 , typename T5 >
904+ void processSameEvent (T1 const & col, T2 & trackTable, T3 & v0Partition, T4 & resonancePartition, T5 & cache)
905+ {
906+ auto v0Slice = v0Partition->sliceByCached (o2::aod::femtobase::stored::fColId , col.globalIndex (), cache);
907+ auto resonanaceSlice = resonancePartition->sliceByCached (o2::aod::femtobase::stored::fColId , col.globalIndex (), cache);
908+ if (v0Slice.size () < nLimitPartitionParticles || resonanaceSlice.size () < nLimitPartitionParticles) {
909+ return ;
910+ }
911+ mColHistManager .template fill <mode>(col);
912+ mCprSe .setMagField (col.magField ());
913+ pairprocesshelpers::processSameEvent<mode>(v0Slice, resonanaceSlice, trackTable, col, mV0HistManager , mResonanceHistManager , mPairHistManagerSe , mCprSe , mPc );
914+ }
915+
916+ template <modes::Mode mode, typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
917+ void processMixedEvent (T1 const & cols, T2 & trackTable, T3 & v0Partition, T4 & resonancePartition, T5 & cache, T6 & binsVtxMult, T7 & binsVtxCent, T8 & binsVtxMultCent)
918+ {
919+ switch (mMixingPolicy ) {
920+ case static_cast <int >(pairhistmanager::kVtxMult ):
921+ pairprocesshelpers::processMixedEvent<mode>(cols, v0Partition, resonancePartition, trackTable, cache, binsVtxMult, mMixingDepth , mPairHistManagerMe , mCprMe , mPc );
922+ break ;
923+ case static_cast <int >(pairhistmanager::kVtxCent ):
924+ pairprocesshelpers::processMixedEvent<mode>(cols, v0Partition, resonancePartition, trackTable, cache, binsVtxCent, mMixingDepth , mPairHistManagerMe , mCprMe , mPc );
925+ break ;
926+ case static_cast <int >(pairhistmanager::kVtxMultCent ):
927+ pairprocesshelpers::processMixedEvent<mode>(cols, v0Partition, resonancePartition, trackTable, cache, binsVtxMultCent, mMixingDepth , mPairHistManagerMe , mCprMe , mPc );
928+ break ;
929+ default :
930+ LOG (fatal) << " Invalid binning policiy specifed. Breaking..." ;
931+ }
932+ }
933+
934+ private:
935+ colhistmanager::CollisionHistManager mColHistManager ;
936+ v0histmanager::V0HistManager<prefixV0, prefixV0PosDau, prefixV0NegDau, v0Type> mV0HistManager ;
937+ twotrackresonancehistmanager::TwoTrackResonanceHistManager<prefixResonance, prefixResonancePosDau, prefixResonanceNegDau, resonanceType> mResonanceHistManager ;
938+ pairhistmanager::PairHistManager<prefixSe, modes::Particle::kV0 , modes::Particle::kTwoTrackResonance > mPairHistManagerSe ;
939+ pairhistmanager::PairHistManager<prefixMe, modes::Particle::kV0 , modes::Particle::kTwoTrackResonance > mPairHistManagerMe ;
940+ closepairrejection::ClosePairRejectionV0V0<prefixCprPosSe, prefixCprNegSe> mCprSe ; // cpr for twotrackresonances and v0 work the same way
941+ closepairrejection::ClosePairRejectionV0V0<prefixCprPosMe, prefixCprNegMe> mCprMe ; // cpr for twotrackresonances and v0 work the same way
942+ paircleaner::V0V0PairCleaner mPc ; // pc for twotrackresonances and v0 work the same way
943+ pairhistmanager::MixingPolicy mMixingPolicy = pairhistmanager::MixingPolicy::kVtxMult ;
944+ int mMixingDepth = 5 ;
945+ };
946+
823947template <const char * prefixTrack,
824948 const char * prefixKink,
825949 const char * prefixChaDau,
0 commit comments