@@ -58,13 +58,17 @@ struct ConfCpr : o2::framework::ConfigurableGroup {
5858
5959// tpc radii for computing phistar
6060constexpr int kNradii = 9 ;
61- constexpr std::array<float , kNradii > kTpcRadius = {85 ., 105 ., 125 ., 145 ., 165 ., 185 ., 205 ., 225 ., 245 .};
61+ constexpr std::array<float , kNradii > kTpcRadius = {85 ., 105 ., 125 ., 145 ., 165 ., 185 ., 205 ., 225 ., 245 .}; // in cm
6262
6363// directory names
6464constexpr char PrefixTrackTrackSe[] = " CPR_TrackTrack/SE/" ;
6565constexpr char PrefixTrackTrackMe[] = " CPR_TrackTrack/ME/" ;
66- constexpr char PrefixTrackV0Se[] = " CPR_TrackV0/SE/" ;
67- constexpr char PrefixTrackV0Me[] = " CPR_TrackV0/ME/" ;
66+ constexpr char PrefixTrackV0Se[] = " CPR_TrackV0Daughter/SE/" ;
67+ constexpr char PrefixTrackV0Me[] = " CPR_TrackV0Daughter/ME/" ;
68+ constexpr char PrefixTrackTwoTrackResonanceSe[] = " CPR_TrackResonanceDaughter/SE/" ;
69+ constexpr char PrefixTrackTwoTrackResonnaceMe[] = " CPR_TrackResonanceDaughter/ME/" ;
70+ constexpr char PrefixTrackCascadeSe[] = " CPR_TrackCascadeBachelor/SE/" ;
71+ constexpr char PrefixTrackCascadeMe[] = " CPR_TrackCascadeBachelor/ME/" ;
6872constexpr char PrefixTrackKinkSe[] = " CPR_TrackKink/SE/" ;
6973constexpr char PrefixTrackKinkMe[] = " CPR_TrackKink/ME/" ;
7074
@@ -117,7 +121,7 @@ class CloseTrackRejection
117121 mChargeTrack2 = chargeTrack2;
118122
119123 if (utils::sign (mChargeTrack1 ) != utils::sign (mChargeTrack2 )) {
120- LOG (warn) << " CPR is truned on for tracks with opposite charge. Is this intended?" ;
124+ LOG (warn) << " CPR is turned on for tracks with opposite charge. Is this intended?" ;
121125 }
122126
123127 mHistogramRegistry = registry;
@@ -196,10 +200,12 @@ template <const char* prefix>
196200class ClosePairRejectionTrackTrack
197201{
198202 public:
199- void init (o2::framework::HistogramRegistry* registry, std::map<CprHist, std::vector<o2::framework::AxisSpec>>& specs, float detaMax, float dphistarMax, int signTrack1 , int absChargeTrack1, int signTrack2, int AbsChargeTrack2 , bool isActivated)
203+ void init (o2::framework::HistogramRegistry* registry, std::map<CprHist, std::vector<o2::framework::AxisSpec>>& specs, float detaMax, float dphistarMax, int chargeTrack1 , int chargeTrack2 , bool isActivated)
200204 {
201205 mIsActivated = isActivated;
202- mCtr .init (registry, specs, detaMax, dphistarMax, signTrack1 * absChargeTrack1, signTrack2 * AbsChargeTrack2);
206+ if (mIsActivated ) {
207+ mCtr .init (registry, specs, detaMax, dphistarMax, chargeTrack1, chargeTrack2);
208+ }
203209 }
204210
205211 void setMagField (float magField) { mCtr .setMagField (magField); }
@@ -221,14 +227,16 @@ template <const char* prefix>
221227class ClosePairRejectionTrackV0 // can also be used for any particle type that has pos/neg daughters, like resonances
222228{
223229 public:
224- void init (o2::framework::HistogramRegistry* registry, std::map<CprHist, std::vector<o2::framework::AxisSpec>>& specs, float detaMax, float dphistarMax, int signTrack, int absChargeTrack , bool isActivated)
230+ void init (o2::framework::HistogramRegistry* registry, std::map<CprHist, std::vector<o2::framework::AxisSpec>>& specs, float detaMax, float dphistarMax, int chargeTrack , bool isActivated)
225231 {
226232 mIsActivated = isActivated;
227- mSignTrack = signTrack ;
233+ mChargeTrack = chargeTrack ;
228234
229235 // initialize CPR with charge of the track and the same charge for the daughter particle
230- // absolute charge of the daughter track will be 1, so we can pass the sign directly
231- mCtr .init (registry, specs, detaMax, dphistarMax, signTrack * absChargeTrack, signTrack);
236+ // absolute charge of the daughter track will be 1, so we just pass the sign
237+ if (mIsActivated ) {
238+ mCtr .init (registry, specs, detaMax, dphistarMax, mChargeTrack , utils::sign (mChargeTrack ));
239+ }
232240 }
233241
234242 void setMagField (float magField)
@@ -238,14 +246,14 @@ class ClosePairRejectionTrackV0 // can also be used for any particle type that h
238246 template <typename T1, typename T2, typename T3>
239247 void setPair (const T1& track, const T2& v0, const T3 /* trackTable*/ )
240248 {
241- if (mSignTrack == 1 ) {
249+ if (mChargeTrack > 0 ) {
242250 auto daughter = v0.template posDau_as <T3>();
243251 mCtr .compute (track, daughter);
244- } else if (mSignTrack == - 1 ) {
252+ } else if (mChargeTrack < 0 ) {
245253 auto daughter = v0.template negDau_as <T3>();
246254 mCtr .compute (track, daughter);
247255 } else {
248- LOG (fatal) << " CPR Track-V0: Wrong track sign " ;
256+ LOG (fatal) << " CPR Track-V0: Sign of the track is 0! " ;
249257 }
250258 }
251259
@@ -258,23 +266,58 @@ class ClosePairRejectionTrackV0 // can also be used for any particle type that h
258266
259267 private:
260268 CloseTrackRejection<prefix> mCtr ;
261- int mSignTrack = 0 ;
269+ int mChargeTrack = 0 ;
262270 bool mIsActivated = true ;
263271};
264272
265273template <const char * prefix>
266- class ClosePairRejectionTrackKink
274+ class ClosePairRejectionTrackCascade // can also be used for any particle type that has pos/neg daughters, like resonances
267275{
268276 public:
269- void init (o2::framework::HistogramRegistry* registry, std::map<CprHist, std::vector<o2::framework::AxisSpec>>& specs, float detaMax, float dphistarMax, int signTrack , int absChargeTrack , bool isActivated)
277+ void init (o2::framework::HistogramRegistry* registry, std::map<CprHist, std::vector<o2::framework::AxisSpec>>& specs, float detaMax, float dphistarMax, int chargeTrack , int chargeCascade , bool isActivated)
270278 {
271279 mIsActivated = isActivated;
272- mSignTrack = signTrack;
280+ if (mIsActivated ) {
281+ mCtr .init (registry, specs, detaMax, dphistarMax, chargeTrack, chargeCascade);
282+ }
283+ }
284+
285+ void setMagField (float magField)
286+ {
287+ mCtr .setMagField (magField);
288+ }
289+ template <typename T1, typename T2, typename T3>
290+ void setPair (const T1& track, const T2& cascade, const T3 /* trackTable*/ )
291+ {
292+ auto bachelor = cascade.template posDau_as <T3>();
293+ mCtr .compute (track, bachelor);
294+ }
273295
296+ bool isClosePair () const { return mCtr .isClosePair (); }
297+ void fill ()
298+ {
299+ mCtr .fill ();
300+ }
301+ bool isActivated () const { return mIsActivated ; }
302+
303+ private:
304+ CloseTrackRejection<prefix> mCtr ;
305+ bool mIsActivated = true ;
306+ };
307+
308+ template <const char * prefix>
309+ class ClosePairRejectionTrackKink
310+ {
311+ public:
312+ void init (o2::framework::HistogramRegistry* registry, std::map<CprHist, std::vector<o2::framework::AxisSpec>>& specs, float detaMax, float dphistarMax, int chargeTrack, int signKinkCandidate, bool isActivated)
313+ {
314+ mIsActivated = isActivated;
274315 // initialize CPR with charge of the track and the charged daughter particle
275316 // For kinks, we compare the primary track with the charged daughter
276317 // The charged daughter has absolute charge of 1, so we can pass the sign directly
277- mCtr .init (registry, specs, detaMax, dphistarMax, signTrack * absChargeTrack, mSignTrack );
318+ if (mIsActivated ) {
319+ mCtr .init (registry, specs, detaMax, dphistarMax, chargeTrack, signKinkCandidate);
320+ }
278321 }
279322
280323 void setMagField (float magField)
@@ -285,12 +328,8 @@ class ClosePairRejectionTrackKink
285328 template <typename T1, typename T2, typename T3>
286329 void setPair (const T1& track, const T2& kink, const T3 /* trackTable*/ )
287330 {
288- if (mSignTrack == 1 || mSignTrack == -1 ) {
289- auto daughter = kink.template chaDau_as <T3>();
290- mCtr .compute (track, daughter);
291- } else {
292- LOG (warn) << " CPR Track-Kink: Wrong track sign" ;
293- }
331+ auto daughter = kink.template chaDau_as <T3>();
332+ mCtr .compute (track, daughter);
294333 }
295334
296335 bool isClosePair () const { return mCtr .isClosePair (); }
@@ -302,7 +341,6 @@ class ClosePairRejectionTrackKink
302341
303342 private:
304343 CloseTrackRejection<prefix> mCtr ;
305- int mSignTrack = 0 ;
306344 bool mIsActivated = true ;
307345};
308346
0 commit comments