Skip to content

Commit 30e844d

Browse files
authored
[PWGCF] Update femto framework (#14486)
1 parent ec8e117 commit 30e844d

15 files changed

+1991
-270
lines changed

PWGCF/Femto/Core/closePairRejection.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ struct ConfCpr : o2::framework::ConfigurableGroup {
6565
o2::framework::Configurable<float> dphistarMax{"dphistarMax", 0.01f, "Maximum dphistar"};
6666
o2::framework::Configurable<float> detaCenter{"detaCenter", 0.f, "Center of deta cut"};
6767
o2::framework::Configurable<float> dphistarCenter{"dphistarCenter", 0.f, "Center of dphistar cut"};
68-
o2::framework::Configurable<float> kstarMin{"kstarMin", -1.f, "Minimum kstar of pair for plotting (Set to negative value to turn off the cut)"};
69-
o2::framework::Configurable<float> kstarMax{"kstarMax", -1.f, "Maximum kstar of pair for plotting (Set to negative value to turn off the cut)"};
68+
o2::framework::Configurable<float> kinematicMin{"kinematicMin", -1.f, "Minimum kstar/Q3 of pair/triplet for plotting (Set to negative value to turn off the cut)"};
69+
o2::framework::Configurable<float> kinematicMax{"kinematicMax", -1.f, "Maximum kstar/Q3 of pair/triplet for plotting (Set to negative value to turn off the cut)"};
7070
o2::framework::ConfigurableAxis binningDeta{"binningDeta", {{250, -0.5, 0.5}}, "deta"};
7171
o2::framework::ConfigurableAxis binningDphistar{"binningDphistar", {{250, -0.5, 0.5}}, "dphi"};
7272
};
@@ -79,6 +79,7 @@ constexpr const char PrefixCprV0DaughterV0DaughterPos[] = "CprV0DaughterV0Daught
7979
constexpr const char PrefixCprV0DaughterV0DaughterNeg[] = "CprV0DaughterV0DaughterNeg";
8080
constexpr const char PrefixCprTrackCascadeBachelor[] = "CprTrackCascadeBachelor";
8181

82+
// pairs
8283
using ConfCprTrackTrack = ConfCpr<PrefixCprTrackTrack>;
8384
using ConfCprTrackV0Daughter = ConfCpr<PrefixCprTrackV0Daughter>;
8485
using ConfCprTrackResonanceDaughter = ConfCpr<PrefixCprTrackResonanceDaughter>;
@@ -168,8 +169,8 @@ class CloseTrackRejection
168169
mCutAverage = confCpr.cutAverage.value;
169170
mCutAnyRadius = confCpr.cutAnyRadius.value;
170171

171-
mKstarMin = confCpr.kstarMin.value;
172-
mKstarMax = confCpr.kstarMax.value;
172+
mKinematicMin = confCpr.kinematicMin.value;
173+
mKinematicMax = confCpr.kinematicMax.value;
173174

174175
mPlotAverage = confCpr.plotAverage.value;
175176
mPlotAllRadii = confCpr.plotAllRadii.value;
@@ -229,17 +230,17 @@ class CloseTrackRejection
229230
}
230231
}
231232

232-
void fill(float kstar)
233+
void fill(float kinematic)
233234
{
234235
if (!mIsActivated) {
235236
return;
236237
}
237238

238-
if (mKstarMin > 0.f && kstar < mKstarMin) {
239+
if (mKinematicMin > 0.f && kinematic < mKinematicMin) {
239240
return;
240241
}
241242

242-
if (mKstarMax > 0.f && kstar > mKstarMax) {
243+
if (mKinematicMax > 0.f && kinematic > mKinematicMax) {
243244
return;
244245
}
245246

@@ -312,8 +313,8 @@ class CloseTrackRejection
312313
bool mPlotAllRadii = false;
313314
bool mPlotAverage = false;
314315

315-
float mKstarMin = -1.f;
316-
float mKstarMax = -1.f;
316+
float mKinematicMin = -1.f;
317+
float mKinematicMax = -1.f;
317318

318319
bool mCutAverage = false;
319320
bool mCutAnyRadius = false;
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
// Copyright 2019-2022 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
/// \file closeTripletRejection.h
13+
/// \brief Definition of CloseTripletRejection class
14+
/// \author Anton Riedel, TU München, anton.riedel@tum.de
15+
16+
#ifndef PWGCF_FEMTO_CORE_CLOSETRIPLETREJECTION_H_
17+
#define PWGCF_FEMTO_CORE_CLOSETRIPLETREJECTION_H_
18+
19+
#include "PWGCF/Femto/Core/closePairRejection.h"
20+
21+
#include "Framework/HistogramRegistry.h"
22+
#include "Framework/HistogramSpec.h"
23+
24+
#include <cmath>
25+
#include <map>
26+
#include <vector>
27+
28+
namespace o2::analysis::femto
29+
{
30+
namespace closetripletrejection
31+
{
32+
33+
constexpr const char PrefixCtrTrackTrackTrack[] = "CtrTrackTrackTrack";
34+
using ConfCtrTrackTrackTrack = closepairrejection::ConfCpr<PrefixCtrTrackTrackTrack>;
35+
36+
// directory names
37+
constexpr char PrefixTrack1Track2Se[] = "CPR_Track1Track2/SE/";
38+
constexpr char PrefixTrack2Track3Se[] = "CPR_Track2Track3/SE/";
39+
constexpr char PrefixTrack1Track3Se[] = "CPR_Track1Track3/SE/";
40+
constexpr char PrefixTrack1Track2Me[] = "CPR_Track1Track2/ME/";
41+
constexpr char PrefixTrack2Track3Me[] = "CPR_Track2Track3/ME/";
42+
constexpr char PrefixTrack1Track3Me[] = "CPR_Track1Track3/ME/";
43+
44+
template <const char* prefixTrack1Track2,
45+
const char* prefixTrack2Track3,
46+
const char* prefixTrack1Track3>
47+
class CloseTripletRejectionTrackTrackTrack
48+
{
49+
public:
50+
template <typename T>
51+
void init(o2::framework::HistogramRegistry* registry,
52+
std::map<closepairrejection::CprHist, std::vector<o2::framework::AxisSpec>> const& specs,
53+
T const& confCpr,
54+
int absChargeTrack1,
55+
int absChargeTrack2,
56+
int absChargeTrack3)
57+
{
58+
mCtr1.init(registry, specs, confCpr, absChargeTrack1, absChargeTrack2);
59+
mCtr2.init(registry, specs, confCpr, absChargeTrack2, absChargeTrack3);
60+
mCtr3.init(registry, specs, confCpr, absChargeTrack1, absChargeTrack3);
61+
}
62+
63+
void setMagField(float magField)
64+
{
65+
mCtr1.setMagField(magField);
66+
mCtr2.setMagField(magField);
67+
mCtr3.setMagField(magField);
68+
}
69+
template <typename T1, typename T2, typename T3, typename T4>
70+
void setTriplet(T1 const& track1, T2 const& track2, T3 const& track3, T4 const& /*tracks*/)
71+
{
72+
mCtr1.compute(track1, track2);
73+
mCtr2.compute(track2, track3);
74+
mCtr3.compute(track1, track3);
75+
}
76+
bool isCloseTriplet() const
77+
{
78+
return mCtr1.isClosePair() || mCtr2.isClosePair() || mCtr3.isClosePair();
79+
}
80+
81+
void fill(float q3)
82+
{
83+
mCtr1.fill(q3);
84+
mCtr2.fill(q3);
85+
mCtr3.fill(q3);
86+
}
87+
88+
private:
89+
closepairrejection::CloseTrackRejection<prefixTrack1Track2> mCtr1;
90+
closepairrejection::CloseTrackRejection<prefixTrack2Track3> mCtr2;
91+
closepairrejection::CloseTrackRejection<prefixTrack1Track3> mCtr3;
92+
};
93+
94+
}; // namespace closetripletrejection
95+
}; // namespace o2::analysis::femto
96+
#endif // PWGCF_FEMTO_CORE_CLOSETRIPLETREJECTION_H_

PWGCF/Femto/Core/mcBuilder.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,12 +180,17 @@ class McBuilder
180180

181181
bool fillAnyTable() const { return mFillAnyTable; }
182182

183-
void reset()
183+
template <typename T1, typename T2>
184+
void reset(T1 const& mcCollisions, T2 const& mcParticles)
184185
{
185186
mCollisionMap.clear();
187+
mCollisionMap.reserve(mcCollisions.size());
186188
mMcParticleMap.clear();
189+
mMcParticleMap.reserve(mcParticles.size());
187190
mMcMotherMap.clear();
191+
mMcMotherMap.reserve(mcParticles.size());
188192
mMcPartonicMotherMap.clear();
193+
mMcPartonicMotherMap.reserve(mcParticles.size());
189194
}
190195

191196
private:

PWGCF/Femto/Core/pairBuilder.h

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,7 @@ namespace o2::analysis::femto
4545
namespace pairbuilder
4646
{
4747

48-
template <const char* prefixTrack1,
49-
const char* prefixTrack2,
50-
const char* prefixSe,
51-
const char* prefixMe,
52-
const char* prefixCprSe,
53-
const char* prefixCprMe>
48+
template <const char* prefixTrack1, const char* prefixTrack2, const char* prefixSe, const char* prefixMe, const char* prefixCprSe, const char* prefixCprMe>
5449
class PairTrackTrackBuilder
5550
{
5651
public:
@@ -128,6 +123,7 @@ class PairTrackTrackBuilder
128123
randomSeed = static_cast<uint64_t>(confMixing.seed.value);
129124
}
130125
mRng = std::mt19937(randomSeed);
126+
mDist = std::uniform_int_distribution(static_cast<int>(pairprocesshelpers::kOrder12), static_cast<int>(pairprocesshelpers::kOrder21));
131127
}
132128
}
133129

@@ -142,7 +138,11 @@ class PairTrackTrackBuilder
142138
}
143139
mColHistManager.template fill<mode>(col);
144140
mCprSe.setMagField(col.magField());
145-
pairprocesshelpers::processSameEvent<mode>(trackSlice1, trackTable, col, mTrackHistManager1, mPairHistManagerSe, mCprSe, mPc, mRng, mMixIdenticalParticles);
141+
pairprocesshelpers::PairOrder pairOrder = pairprocesshelpers::kOrder12;
142+
if (mMixIdenticalParticles) {
143+
pairOrder = static_cast<pairprocesshelpers::PairOrder>(mDist(mRng));
144+
}
145+
pairprocesshelpers::processSameEvent<mode>(trackSlice1, trackTable, col, mTrackHistManager1, mPairHistManagerSe, mCprSe, mPc, pairOrder);
146146
} else {
147147
auto trackSlice1 = partition1->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
148148
auto trackSlice2 = partition2->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
@@ -166,7 +166,11 @@ class PairTrackTrackBuilder
166166
}
167167
mColHistManager.template fill<mode>(col, mcCols);
168168
mCprSe.setMagField(col.magField());
169-
pairprocesshelpers::processSameEvent<mode>(trackSlice1, trackTable, mcParticles, mcMothers, mcPartonicMothers, col, mcCols, mTrackHistManager1, mPairHistManagerSe, mCprSe, mPc, mRng, mMixIdenticalParticles);
169+
pairprocesshelpers::PairOrder pairOrder = pairprocesshelpers::kOrder12;
170+
if (mMixIdenticalParticles) {
171+
pairOrder = static_cast<pairprocesshelpers::PairOrder>(mDist(mRng));
172+
}
173+
pairprocesshelpers::processSameEvent<mode>(trackSlice1, trackTable, mcParticles, mcMothers, mcPartonicMothers, col, mcCols, mTrackHistManager1, mPairHistManagerSe, mCprSe, mPc, pairOrder);
170174
} else {
171175
auto trackSlice1 = partition1->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
172176
auto trackSlice2 = partition2->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
@@ -186,13 +190,13 @@ class PairTrackTrackBuilder
186190
if (mSameSpecies) {
187191
switch (mMixingPolicy) {
188192
case static_cast<int>(pairhistmanager::kVtxMult):
189-
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, trackTable, cache, binsVtxMult, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
193+
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition1, trackTable, cache, binsVtxMult, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
190194
break;
191195
case static_cast<int>(pairhistmanager::kVtxCent):
192-
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, trackTable, cache, binsVtxCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
196+
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition1, trackTable, cache, binsVtxCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
193197
break;
194198
case static_cast<int>(pairhistmanager::kVtxMultCent):
195-
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, trackTable, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
199+
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition1, trackTable, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
196200
break;
197201
default:
198202
LOG(fatal) << "Invalid binning policiy specifed. Breaking...";
@@ -220,13 +224,13 @@ class PairTrackTrackBuilder
220224
if (mSameSpecies) {
221225
switch (mMixingPolicy) {
222226
case static_cast<int>(pairhistmanager::kVtxMult):
223-
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, trackTable, mcParticles, cache, binsVtxMult, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
227+
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, partition1, trackTable, mcParticles, cache, binsVtxMult, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
224228
break;
225229
case static_cast<int>(pairhistmanager::kVtxCent):
226-
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, trackTable, mcParticles, cache, binsVtxCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
230+
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, partition1, trackTable, mcParticles, cache, binsVtxCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
227231
break;
228232
case static_cast<int>(pairhistmanager::kVtxMultCent):
229-
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, trackTable, mcParticles, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
233+
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, partition1, trackTable, mcParticles, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
230234
break;
231235
default:
232236
LOG(fatal) << "Invalid binning policiy specifed. Breaking...";
@@ -257,11 +261,12 @@ class PairTrackTrackBuilder
257261
closepairrejection::ClosePairRejectionTrackTrack<prefixCprSe> mCprSe;
258262
closepairrejection::ClosePairRejectionTrackTrack<prefixCprMe> mCprMe;
259263
paircleaner::TrackTrackPairCleaner mPc;
260-
std::mt19937 mRng;
261264
pairhistmanager::MixingPolicy mMixingPolicy = pairhistmanager::MixingPolicy::kVtxMult;
262-
bool mSameSpecies = false;
263265
int mMixingDepth = 5;
266+
bool mSameSpecies = false;
264267
bool mMixIdenticalParticles = false;
268+
std::mt19937 mRng;
269+
std::uniform_int_distribution<> mDist;
265270
};
266271

267272
template <const char* prefixV01,
@@ -375,7 +380,11 @@ class PairV0V0Builder
375380
}
376381
mColHistManager.template fill<mode>(col);
377382
mCprSe.setMagField(col.magField());
378-
pairprocesshelpers::processSameEvent<mode>(v0Slice1, trackTable, col, mV0HistManager1, mPairHistManagerSe, mCprSe, mPc, mRng, mMixIdenticalParticles);
383+
pairprocesshelpers::PairOrder pairOrder = pairprocesshelpers::kOrder12;
384+
if (mMixIdenticalParticles) {
385+
pairOrder = static_cast<pairprocesshelpers::PairOrder>(mDist(mRng));
386+
}
387+
pairprocesshelpers::processSameEvent<mode>(v0Slice1, trackTable, col, mV0HistManager1, mPairHistManagerSe, mCprSe, mPc, pairOrder);
379388
} else {
380389
auto v0Slice1 = partition1->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
381390
auto v0Slice2 = partition2->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
@@ -395,13 +404,13 @@ class PairV0V0Builder
395404
if (mSameSpecies) {
396405
switch (mMixingPolicy) {
397406
case static_cast<int>(pairhistmanager::kVtxMult):
398-
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, trackTable, cache, binsVtxMult, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
407+
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition1, trackTable, cache, binsVtxMult, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
399408
break;
400409
case static_cast<int>(pairhistmanager::kVtxCent):
401-
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, trackTable, cache, binsVtxCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
410+
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition1, trackTable, cache, binsVtxCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
402411
break;
403412
case static_cast<int>(pairhistmanager::kVtxMultCent):
404-
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, trackTable, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
413+
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition1, trackTable, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
405414
break;
406415
default:
407416
LOG(fatal) << "Invalid binning policiy specifed. Breaking...";
@@ -432,11 +441,12 @@ class PairV0V0Builder
432441
closepairrejection::ClosePairRejectionV0V0<prefixCprPosSe, prefixCprNegSe> mCprSe;
433442
closepairrejection::ClosePairRejectionV0V0<prefixCprPosMe, prefixCprNegMe> mCprMe;
434443
paircleaner::V0V0PairCleaner mPc;
435-
std::mt19937 mRng;
436444
pairhistmanager::MixingPolicy mMixingPolicy = pairhistmanager::MixingPolicy::kVtxMult;
437445
bool mSameSpecies = false;
438446
int mMixingDepth = 5;
439447
bool mMixIdenticalParticles = false;
448+
std::mt19937 mRng;
449+
std::uniform_int_distribution<> mDist;
440450
};
441451

442452
template <const char* prefixTrack,

0 commit comments

Comments
 (0)