Skip to content

Commit 2f72bc4

Browse files
authored
[PWGCF] Update femto framework (#13615)
1 parent 49d8ffe commit 2f72bc4

11 files changed

+272
-363
lines changed

PWGCF/Femto/Core/closePairRejection.h

Lines changed: 159 additions & 237 deletions
Large diffs are not rendered by default.

PWGCF/Femto/Core/femtoUtils.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616
#ifndef PWGCF_FEMTO_CORE_FEMTOUTILS_H_
1717
#define PWGCF_FEMTO_CORE_FEMTOUTILS_H_
1818

19+
#include "RecoDecay.h"
20+
1921
#include "Common/Core/TableHelper.h"
2022

23+
#include "CommonConstants/MathConstants.h"
2124
#include "CommonConstants/PhysicsConstants.h"
2225
#include "Framework/InitContext.h"
2326

@@ -172,8 +175,8 @@ float qn(T const& col)
172175
inline std::optional<float> dphistar(float magfield, float radius, float signedPt, float phi)
173176
{
174177
float arg = 0.3f * (0.1f * magfield) * (0.01 * radius) / (2.f * signedPt);
175-
if (std::fabs(arg) < 1.f) {
176-
return phi - std::asin(arg);
178+
if (std::fabs(arg) <= 1.f) {
179+
return RecoDecay::constrainAngle(phi - std::asin(arg));
177180
}
178181
return std::nullopt;
179182
}

PWGCF/Femto/Core/pairBuilder.h

Lines changed: 52 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -239,21 +239,25 @@ class PairV0V0Builder
239239
typename T10,
240240
typename T11,
241241
typename T12,
242-
typename T13>
242+
typename T13,
243+
typename T14,
244+
typename T15>
243245
void init(o2::framework::HistogramRegistry* registry,
244246
T1 const& confV0Selection1,
245247
T2 const& confV0Selection2,
246-
T3 const& confCpr,
247-
T4 const& confMixing,
248-
T5 const& confPairBinning,
249-
T6 const& confPairCuts,
250-
std::map<T7, std::vector<framework::AxisSpec>>& colHistSpec,
251-
std::map<T8, std::vector<framework::AxisSpec>>& V0HistSpec1,
252-
std::map<T9, std::vector<framework::AxisSpec>>& V0HistSpec2,
253-
std::map<T10, std::vector<framework::AxisSpec>>& PosDauHistSpec,
254-
std::map<T11, std::vector<framework::AxisSpec>>& NegDauHistSpec,
255-
std::map<T12, std::vector<framework::AxisSpec>>& pairHistSpec,
256-
std::map<T13, std::vector<framework::AxisSpec>>& cprHistSpec)
248+
T3 const& confCprPos,
249+
T4 const& confCprNeg,
250+
T5 const& confMixing,
251+
T6 const& confPairBinning,
252+
T7 const& confPairCuts,
253+
std::map<T8, std::vector<framework::AxisSpec>> const& colHistSpec,
254+
std::map<T9, std::vector<framework::AxisSpec>> const& V0HistSpec1,
255+
std::map<T10, std::vector<framework::AxisSpec>> const& V0HistSpec2,
256+
std::map<T11, std::vector<framework::AxisSpec>> const& PosDauHistSpec,
257+
std::map<T12, std::vector<framework::AxisSpec>> const& NegDauHistSpec,
258+
std::map<T13, std::vector<framework::AxisSpec>> const& pairHistSpec,
259+
std::map<T14, std::vector<framework::AxisSpec>> const& cprHistSpecPos,
260+
std::map<T15, std::vector<framework::AxisSpec>> const& cprHistSpecNeg)
257261
{
258262

259263
// check if correlate the same tracks or not
@@ -268,22 +272,22 @@ class PairV0V0Builder
268272

269273
mPairHistManagerSe.setMass(confV0Selection1.pdgCode.value, confV0Selection1.pdgCode.value);
270274
mPairHistManagerSe.setCharge(1, 1);
271-
mCprSe.init(registry, cprHistSpec, confCpr);
275+
mCprSe.init(registry, cprHistSpecPos, cprHistSpecNeg, confCprPos, confCprPos);
272276

273277
mPairHistManagerMe.setMass(confV0Selection1.pdgCode.value, confV0Selection1.pdgCode.value);
274278
mPairHistManagerMe.setCharge(1, 1);
275-
mCprMe.init(registry, cprHistSpec, confCpr);
279+
mCprMe.init(registry, cprHistSpecPos, cprHistSpecNeg, confCprPos, confCprNeg);
276280
} else {
277281
mV0HistManager1.init(registry, V0HistSpec1, PosDauHistSpec, NegDauHistSpec);
278282
mV0HistManager2.init(registry, V0HistSpec2, PosDauHistSpec, NegDauHistSpec);
279283

280284
mPairHistManagerSe.setMass(confV0Selection1.pdgCode.value, confV0Selection2.pdgCode.value);
281285
mPairHistManagerSe.setCharge(1, 1);
282-
mCprSe.init(registry, cprHistSpec, confCpr);
286+
mCprSe.init(registry, cprHistSpecPos, cprHistSpecNeg, confCprPos, confCprNeg);
283287

284288
mPairHistManagerMe.setMass(confV0Selection1.pdgCode.value, confV0Selection2.pdgCode.value);
285289
mPairHistManagerMe.setCharge(1, 1);
286-
mCprMe.init(registry, cprHistSpec, confCpr);
290+
mCprMe.init(registry, cprHistSpecPos, cprHistSpecNeg, confCprPos, confCprNeg);
287291
}
288292

289293
// setup mixing
@@ -384,10 +388,8 @@ template <
384388
const char* prefixNegDau,
385389
const char* prefixSe,
386390
const char* prefixMe,
387-
const char* prefixCprSameChargeSe,
388-
const char* prefixCprSameChargeMe,
389-
const char* prefixCprOppositeChargeSe,
390-
const char* prefixCprOppositeChargeMe,
391+
const char* prefixCprSe,
392+
const char* prefixCprMe,
391393
modes::Mode mode,
392394
modes::V0 v0Type>
393395
class PairTrackV0Builder
@@ -481,8 +483,8 @@ class PairTrackV0Builder
481483
v0histmanager::V0HistManager<prefixV0, prefixPosDau, prefixNegDau, mode, v0Type> mV0HistManager;
482484
pairhistmanager::PairHistManager<prefixSe, modes::Particle::kTrack, modes::Particle::kV0, mode> mPairHistManagerSe;
483485
pairhistmanager::PairHistManager<prefixMe, modes::Particle::kTrack, modes::Particle::kV0, mode> mPairHistManagerMe;
484-
closepairrejection::ClosePairRejectionTrackV0<prefixCprSameChargeSe, prefixCprOppositeChargeSe> mCprSe;
485-
closepairrejection::ClosePairRejectionTrackV0<prefixCprSameChargeMe, prefixCprOppositeChargeMe> mCprMe;
486+
closepairrejection::ClosePairRejectionTrackV0<prefixCprSe> mCprSe;
487+
closepairrejection::ClosePairRejectionTrackV0<prefixCprMe> mCprMe;
486488
paircleaner::TrackV0PairCleaner mPc;
487489
pairhistmanager::MixingPolicy mMixingPolicy = pairhistmanager::MixingPolicy::kVtxMult;
488490
int mMixingDepth = 5;
@@ -495,10 +497,8 @@ template <
495497
const char* prefixNegDau,
496498
const char* prefixSe,
497499
const char* prefixMe,
498-
const char* prefixCprSameChargeSe,
499-
const char* prefixCprSameChargeMe,
500-
const char* prefixCprOppositeChargeSe,
501-
const char* prefixCprOppositeChargeMe,
500+
const char* prefixCprSe,
501+
const char* prefixCprMe,
502502
modes::Mode mode,
503503
modes::TwoTrackResonance resonanceType>
504504
class PairTrackTwoTrackResonanceBuilder
@@ -592,9 +592,9 @@ class PairTrackTwoTrackResonanceBuilder
592592
twotrackresonancehistmanager::TwoTrackResonanceHistManager<prefixResonance, prefixPosDau, prefixNegDau, mode, resonanceType> mResonanceHistManager;
593593
pairhistmanager::PairHistManager<prefixSe, modes::Particle::kTrack, modes::Particle::kTwoTrackResonance, mode> mPairHistManagerSe;
594594
pairhistmanager::PairHistManager<prefixMe, modes::Particle::kTrack, modes::Particle::kTwoTrackResonance, mode> mPairHistManagerMe;
595-
closepairrejection::ClosePairRejectionTrackV0<prefixCprSameChargeSe, prefixCprOppositeChargeSe> mCprSe; // cpr for twotrackresonances and v0 work the same way
596-
closepairrejection::ClosePairRejectionTrackV0<prefixCprSameChargeMe, prefixCprOppositeChargeMe> mCprMe; // cpr for twotrackresonances and v0 work the same way
597-
paircleaner::TrackV0PairCleaner mPc; // pc for twotrackresonances and v0 work the same way
595+
closepairrejection::ClosePairRejectionTrackV0<prefixCprSe> mCprSe; // cpr for twotrackresonances and v0 work the same way
596+
closepairrejection::ClosePairRejectionTrackV0<prefixCprMe> mCprMe; // cpr for twotrackresonances and v0 work the same way
597+
paircleaner::TrackV0PairCleaner mPc; // pc for twotrackresonances and v0 work the same way
598598
pairhistmanager::MixingPolicy mMixingPolicy = pairhistmanager::MixingPolicy::kVtxMult;
599599
int mMixingDepth = 5;
600600
};
@@ -714,11 +714,9 @@ template <
714714
const char* prefixSe,
715715
const char* prefixMe,
716716
const char* prefixCprBachelorSe,
717-
const char* prefixCprSameChargeSe,
718-
const char* prefixCprOppositeChargeSe,
717+
const char* prefixCprV0DaughterSe,
719718
const char* prefixCprBachelorMe,
720-
const char* prefixCprSameChargeMe,
721-
const char* prefixCprOppositeChargeMe,
719+
const char* prefixCprV0DaughterMe,
722720
modes::Mode mode,
723721
modes::Cascade cascadeType>
724722
class PairTrackCascadeBuilder
@@ -740,22 +738,26 @@ class PairTrackCascadeBuilder
740738
typename T11,
741739
typename T12,
742740
typename T13,
743-
typename T14>
741+
typename T14,
742+
typename T15,
743+
typename T16>
744744
void init(o2::framework::HistogramRegistry* registry,
745745
T1 const& confTrackSelection,
746746
T2 const& confCascadeSelection,
747-
T3 const& confCpr,
748-
T4 const& confMixing,
749-
T5 const& confPairBinning,
750-
T6 const& confPairCuts,
751-
std::map<T7, std::vector<framework::AxisSpec>> const& colHistSpec,
752-
std::map<T8, std::vector<framework::AxisSpec>> const& trackHistSpec,
753-
std::map<T9, std::vector<framework::AxisSpec>> const& cascadeHistSpec,
754-
std::map<T10, std::vector<framework::AxisSpec>> const& bachelorHistSpec,
755-
std::map<T11, std::vector<framework::AxisSpec>> const& posDauHistSpec,
756-
std::map<T12, std::vector<framework::AxisSpec>> const& negDauHistSpec,
757-
std::map<T13, std::vector<framework::AxisSpec>> const& pairHistSpec,
758-
std::map<T14, std::vector<framework::AxisSpec>> const& cprHistSpec)
747+
T3 const& confCprBachelor,
748+
T4 const& confCprV0Daughter,
749+
T5 const& confMixing,
750+
T6 const& confPairBinning,
751+
T7 const& confPairCuts,
752+
std::map<T8, std::vector<framework::AxisSpec>> const& colHistSpec,
753+
std::map<T9, std::vector<framework::AxisSpec>> const& trackHistSpec,
754+
std::map<T10, std::vector<framework::AxisSpec>> const& cascadeHistSpec,
755+
std::map<T11, std::vector<framework::AxisSpec>> const& bachelorHistSpec,
756+
std::map<T12, std::vector<framework::AxisSpec>> const& posDauHistSpec,
757+
std::map<T13, std::vector<framework::AxisSpec>> const& negDauHistSpec,
758+
std::map<T14, std::vector<framework::AxisSpec>> const& pairHistSpec,
759+
std::map<T15, std::vector<framework::AxisSpec>> const& cprHistSpecBachelor,
760+
std::map<T16, std::vector<framework::AxisSpec>> const& cprHistSpecV0Daughter)
759761
{
760762
mColHistManager.init(registry, colHistSpec);
761763

@@ -765,12 +767,12 @@ class PairTrackCascadeBuilder
765767
mPairHistManagerSe.init(registry, pairHistSpec, confPairBinning, confPairCuts);
766768
mPairHistManagerSe.setMass(confTrackSelection.pdgCode.value, confCascadeSelection.pdgCode.value);
767769
mPairHistManagerSe.setCharge(confTrackSelection.chargeAbs.value, 1);
768-
mCprSe.init(registry, cprHistSpec, confCpr, confTrackSelection.chargeAbs.value);
770+
mCprSe.init(registry, cprHistSpecBachelor, cprHistSpecV0Daughter, confCprBachelor, confCprV0Daughter, confTrackSelection.chargeAbs.value);
769771

770772
mPairHistManagerMe.init(registry, pairHistSpec, confPairBinning, confPairCuts);
771773
mPairHistManagerMe.setMass(confTrackSelection.pdgCode.value, confCascadeSelection.pdgCode.value);
772774
mPairHistManagerMe.setCharge(confTrackSelection.chargeAbs.value, 1);
773-
mCprMe.init(registry, cprHistSpec, confCpr, confTrackSelection.chargeAbs.value);
775+
mCprMe.init(registry, cprHistSpecBachelor, cprHistSpecV0Daughter, confCprBachelor, confCprV0Daughter, confTrackSelection.chargeAbs.value);
774776

775777
// setup mixing
776778
mMixingPolicy = static_cast<pairhistmanager::MixingPolicy>(confMixing.policy.value);
@@ -814,8 +816,8 @@ class PairTrackCascadeBuilder
814816
cascadehistmanager::CascadeHistManager<prefixCascade, prefixBachelor, prefixPosDau, prefixNegDau, mode, cascadeType> mCascadeHistManager;
815817
pairhistmanager::PairHistManager<prefixSe, modes::Particle::kTrack, modes::Particle::kCascade, mode> mPairHistManagerSe;
816818
pairhistmanager::PairHistManager<prefixMe, modes::Particle::kTrack, modes::Particle::kCascade, mode> mPairHistManagerMe;
817-
closepairrejection::ClosePairRejectionTrackCascade<prefixCprBachelorSe, prefixCprSameChargeSe, prefixCprOppositeChargeSe> mCprSe;
818-
closepairrejection::ClosePairRejectionTrackCascade<prefixCprBachelorMe, prefixCprSameChargeMe, prefixCprOppositeChargeMe> mCprMe;
819+
closepairrejection::ClosePairRejectionTrackCascade<prefixCprBachelorSe, prefixCprV0DaughterSe> mCprSe;
820+
closepairrejection::ClosePairRejectionTrackCascade<prefixCprBachelorMe, prefixCprV0DaughterMe> mCprMe;
819821
paircleaner::TrackCascadePairCleaner mPc;
820822
pairhistmanager::MixingPolicy mMixingPolicy = pairhistmanager::MixingPolicy::kVtxMult;
821823
int mMixingDepth = 5;

PWGCF/Femto/Core/pairCleaner.h

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,12 @@ class V0V0PairCleaner : public BasePairCleaner
5151
public:
5252
V0V0PairCleaner() = default;
5353
template <typename T1, typename T2, typename T3>
54-
bool isCleanPair(const T1& v01, const T2& v02, const T3& /*tracks*/) const
54+
bool isCleanPair(const T1& v01, const T2& v02, const T3& trackTable) const
5555
{
56-
auto posDaughter1 = v01.template posDau_as<T3>();
57-
auto negDaughter1 = v01.template negDau_as<T3>();
58-
auto posDaughter2 = v02.template posDau_as<T3>();
59-
auto negDaughter2 = v02.template negDau_as<T3>();
56+
auto posDaughter1 = trackTable.rawIteratorAt(v01.posDauId() - trackTable.offset());
57+
auto negDaughter1 = trackTable.rawIteratorAt(v01.negDauId() - trackTable.offset());
58+
auto posDaughter2 = trackTable.rawIteratorAt(v02.posDauId() - trackTable.offset());
59+
auto negDaughter2 = trackTable.rawIteratorAt(v02.negDauId() - trackTable.offset());
6060
return this->isCleanTrackPair(posDaughter1, posDaughter2) && this->isCleanTrackPair(negDaughter1, negDaughter2);
6161
}
6262
};
@@ -66,10 +66,10 @@ class TrackV0PairCleaner : public BasePairCleaner // also works for particles de
6666
public:
6767
TrackV0PairCleaner() = default;
6868
template <typename T1, typename T2, typename T3>
69-
bool isCleanPair(const T1& track, const T2& v0, const T3& /*trackTable*/) const
69+
bool isCleanPair(const T1& track, const T2& v0, const T3& trackTable) const
7070
{
71-
auto posDaughter = v0.template posDau_as<T3>();
72-
auto negDaughter = v0.template negDau_as<T3>();
71+
auto posDaughter = trackTable.rawIteratorAt(v0.posDauId() - trackTable.offset());
72+
auto negDaughter = trackTable.rawIteratorAt(v0.negDauId() - trackTable.offset());
7373
return (this->isCleanTrackPair(posDaughter, track) && this->isCleanTrackPair(negDaughter, track));
7474
}
7575
};
@@ -79,9 +79,9 @@ class TrackKinkPairCleaner : public BasePairCleaner
7979
public:
8080
TrackKinkPairCleaner() = default;
8181
template <typename T1, typename T2, typename T3>
82-
bool isCleanPair(const T1& track, const T2& kink, const T3& /*trackTable*/) const
82+
bool isCleanPair(const T1& track, const T2& kink, const T3& trackTable) const
8383
{
84-
auto chaDaughter = kink.template chaDau_as<T3>();
84+
auto chaDaughter = trackTable.rawIteratorAt(kink.chaDauId() - trackTable.offset());
8585
return this->isCleanTrackPair(chaDaughter, track);
8686
}
8787
};
@@ -91,11 +91,11 @@ class TrackCascadePairCleaner : public BasePairCleaner
9191
public:
9292
TrackCascadePairCleaner() = default;
9393
template <typename T1, typename T2, typename T3>
94-
bool isCleanPair(const T1& track, const T2& cascade, const T3& /*trackTable*/) const
94+
bool isCleanPair(const T1& track, const T2& cascade, const T3& trackTable) const
9595
{
96-
auto bachelor = cascade.template bachelor_as<T3>();
97-
auto posDaughter = cascade.template posDau_as<T3>();
98-
auto negDaughter = cascade.template negDau_as<T3>();
96+
auto bachelor = trackTable.rawIteratorAt(cascade.bachelorId() - trackTable.offset());
97+
auto posDaughter = trackTable.rawIteratorAt(cascade.posDauId() - trackTable.offset());
98+
auto negDaughter = trackTable.rawIteratorAt(cascade.posDauId() - trackTable.offset());
9999
return (this->isCleanTrackPair(bachelor, track) && this->isCleanTrackPair(posDaughter, track) && this->isCleanTrackPair(negDaughter, track));
100100
}
101101
};

PWGCF/Femto/Core/pairProcessHelpers.h

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,9 @@ void processSameEvent(T1 const& SliceParticle,
5050
}
5151
std::uniform_real_distribution<float> dist(0.f, 1.f);
5252
for (auto const& [p1, p2] : o2::soa::combinations(o2::soa::CombinationsStrictlyUpperIndexPolicy(SliceParticle, SliceParticle))) {
53-
if (CprManager.isActivated()) {
54-
CprManager.setPair(p1, p2, TrackTable);
55-
if (CprManager.isClosePair()) {
56-
continue;
57-
}
53+
CprManager.setPair(p1, p2, TrackTable);
54+
if (CprManager.isClosePair()) {
55+
continue;
5856
}
5957
// Randomize pair order if enabled
6058
float threshold = 0.5f;
@@ -104,11 +102,9 @@ void processSameEvent(T1 const& SliceParticle1,
104102
continue;
105103
}
106104
// Close pair rejection
107-
if (CprManager.isActivated()) {
108-
CprManager.setPair(p1, p2, TrackTable);
109-
if (CprManager.isClosePair()) {
110-
continue;
111-
}
105+
CprManager.setPair(p1, p2, TrackTable);
106+
if (CprManager.isClosePair()) {
107+
continue;
112108
}
113109
PairHistManager.setPair(p1, p2, Collision);
114110
if (PairHistManager.checkPairCuts()) {
@@ -154,11 +150,9 @@ void processMixedEvent(T1& Collisions,
154150
continue;
155151
}
156152
// Close pair rejection
157-
if (CprManager.isActivated()) {
158-
CprManager.setPair(p1, p2, TrackTable);
159-
if (CprManager.isClosePair()) {
160-
continue;
161-
}
153+
CprManager.setPair(p1, p2, TrackTable);
154+
if (CprManager.isClosePair()) {
155+
continue;
162156
}
163157
PairHistManager.setPair(p1, p2, collision1, collision2);
164158
if (PairHistManager.checkPairCuts()) {
@@ -207,11 +201,9 @@ void processMixedEvent(T1& Collisions,
207201
continue;
208202
}
209203
// Close pair rejection
210-
if (CprManager.isActivated()) {
211-
CprManager.setPair(p1, p2, TrackTable);
212-
if (CprManager.isClosePair()) {
213-
continue;
214-
}
204+
CprManager.setPair(p1, p2, TrackTable);
205+
if (CprManager.isClosePair()) {
206+
continue;
215207
}
216208
PairHistManager.setPair(p1, p2, collision1, collision2);
217209
if (PairHistManager.checkPairCuts()) {

0 commit comments

Comments
 (0)