@@ -29,10 +29,13 @@ namespace o2::analysis::femto::closetripletrejection
2929constexpr const char PrefixCtrTrackTrackTrack[] = " CtrTrackTrackTrack" ;
3030constexpr const char PrefixCtrTrackTrackV0[] = " CtrTrackTrackV0" ;
3131constexpr const char PrefixCtrTrackTrackCascade[] = " CtrTrackTrackCascade" ;
32+ constexpr const char PrefixCtrMcParticleMcParticleMcParticle[] = " CtrMcParticleMcParticleMcParticle" ;
3233
3334using ConfCtrTrackTrackTrack = closepairrejection::ConfCpr<PrefixCtrTrackTrackTrack>;
3435using ConfCtrTrackTrackV0 = closepairrejection::ConfCpr<PrefixCtrTrackTrackV0>;
3536using ConfCtrTrackTrackCascade = closepairrejection::ConfCpr<PrefixCtrTrackTrackCascade>;
37+ // generated particles, no cut by default (close triplet rejection corrects a detector effect)
38+ using ConfCtrMcParticleMcParticleMcParticle = closepairrejection::ConfCpr<PrefixCtrMcParticleMcParticleMcParticle, false >;
3639
3740// directory names
3841constexpr char PrefixTrack1Track2Se[] = " CPR_Track1Track2/SE/" ;
@@ -42,6 +45,13 @@ constexpr char PrefixTrack1Track2Me[] = "CPR_Track1Track2/ME/";
4245constexpr char PrefixTrack2Track3Me[] = " CPR_Track2Track3/ME/" ;
4346constexpr char PrefixTrack1Track3Me[] = " CPR_Track1Track3/ME/" ;
4447
48+ constexpr char PrefixMcParticle1McParticle2Se[] = " CPR_McParticle1McParticle2/SE/" ;
49+ constexpr char PrefixMcParticle2McParticle3Se[] = " CPR_McParticle2McParticle3/SE/" ;
50+ constexpr char PrefixMcParticle1McParticle3Se[] = " CPR_McParticle1McParticle3/SE/" ;
51+ constexpr char PrefixMcParticle1McParticle2Me[] = " CPR_McParticle1McParticle2/ME/" ;
52+ constexpr char PrefixMcParticle2McParticle3Me[] = " CPR_McParticle2McParticle3/ME/" ;
53+ constexpr char PrefixMcParticle1McParticle3Me[] = " CPR_McParticle1McParticle3/ME/" ;
54+
4555constexpr char PrefixTrack1V0Se[] = " CPR_Track1V0/SE/" ;
4656constexpr char PrefixTrack2V0Se[] = " CPR_Track2V0/SE/" ;
4757constexpr char PrefixTrack1V0Me[] = " CPR_Track1V0/ME/" ;
@@ -205,5 +215,40 @@ class CloseTripletRejectionTrackTrackCascade
205215 closepairrejection::ClosePairRejectionTrackCascade<prefixTrack2Bachelor, prefixTrack2V0Daughter> mCtrTrack2Cascade ;
206216};
207217
218+ // close triplet rejection for triplets of generated particles; checks all three constituent pairs
219+ template <auto & prefixMcParticle1McParticle2,
220+ auto & prefixMcParticle2McParticle3,
221+ auto & prefixMcParticle1McParticle3>
222+ class CloseTripletRejectionMcParticleMcParticleMcParticle
223+ {
224+ public:
225+ CloseTripletRejectionMcParticleMcParticleMcParticle () = default ;
226+ ~CloseTripletRejectionMcParticleMcParticleMcParticle () = default ;
227+
228+ template <typename T>
229+ void init (o2::framework::HistogramRegistry* registry,
230+ std::map<closepairrejection::CprHist, std::vector<o2::framework::AxisSpec>> const & specs,
231+ T const & confCpr)
232+ {
233+ mCtr12 .init (registry, specs, confCpr);
234+ mCtr23 .init (registry, specs, confCpr);
235+ mCtr13 .init (registry, specs, confCpr);
236+ }
237+
238+ template <typename T1 , typename T2 , typename T3 , typename T4 >
239+ [[nodiscard]] bool isCloseTriplet (T1 const & particle1, T2 const & particle2, T3 const & particle3, T4 const & tripletHistManager)
240+ {
241+ bool isClose12 = mCtr12 .isClosePair (particle1, particle2, tripletHistManager);
242+ bool isClose23 = mCtr23 .isClosePair (particle2, particle3, tripletHistManager);
243+ bool isClose13 = mCtr13 .isClosePair (particle1, particle3, tripletHistManager);
244+ return isClose12 || isClose23 || isClose13;
245+ }
246+
247+ private:
248+ closepairrejection::ClosePairRejectionMcParticleMcParticle<prefixMcParticle1McParticle2> mCtr12 ;
249+ closepairrejection::ClosePairRejectionMcParticleMcParticle<prefixMcParticle2McParticle3> mCtr23 ;
250+ closepairrejection::ClosePairRejectionMcParticleMcParticle<prefixMcParticle1McParticle3> mCtr13 ;
251+ };
252+
208253} // namespace o2::analysis::femto::closetripletrejection
209254#endif // PWGCF_FEMTO_CORE_CLOSETRIPLETREJECTION_H_
0 commit comments