Skip to content

Commit 5b9b354

Browse files
committed
Feat: implement event shape processing in track-track task
1 parent b4b18a1 commit 5b9b354

4 files changed

Lines changed: 186 additions & 86 deletions

File tree

PWGCF/Femto/Core/femtoUtils.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <cstdint>
3131
#include <limits>
3232
#include <optional>
33+
#include <type_traits>
3334
#include <unordered_map>
3435

3536
namespace o2::analysis::femto
@@ -154,11 +155,15 @@ concept HasQvectors = requires(T col) {
154155
};
155156

156157
template <typename T>
157-
concept HasEventShape = requires(T col) {
158-
col.qvec();
159-
col.eventPlaneAngle();
158+
concept HasEventShapeRow = requires(T row) {
159+
row.qvec();
160+
row.eventPlaneAngle();
160161
};
161162

163+
/// accepts either a row/iterator or a table (Filtered<Join<...>> etc.)
164+
template <typename T>
165+
concept HasEventShape = HasEventShapeRow<std::decay_t<T>> || (requires { typename std::decay_t<T>::iterator; } && HasEventShapeRow<typename std::decay_t<T>::iterator>);
166+
162167
/// Recalculate pT for Kinks (Sigmas) using kinematic constraints
163168
inline float calcPtnew(float pxMother, float pyMother, float pzMother, float pxDaughter, float pyDaughter, float pzDaughter)
164169
{

PWGCF/Femto/Core/pairBuilder.h

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ class PairTrackTrackBuilder
202202
}
203203
}
204204

205-
template <modes::Mode mode, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
206-
void processMixedEvent(T1 const& cols, T2& trackTable, T3& partition1, T4& partition2, T5& cache, T6& binsVtxMult, T7& binsVtxCent, T8& binsVtxMultCent)
205+
template <modes::Mode mode, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
206+
void processMixedEvent(T1 const& cols, T2& trackTable, T3& partition1, T4& partition2, T5& cache, T6& binsVtxMult, T7& binsVtxCent, T8& binsVtxMultCent, T9& binsVtxCentEventPlaneAngle)
207207
{
208208

209209
if (mSameSpecies) {
@@ -217,6 +217,13 @@ class PairTrackTrackBuilder
217217
case static_cast<int>(pairhistmanager::kVtxMultCent):
218218
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition1, trackTable, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPcMe);
219219
break;
220+
case static_cast<int>(pairhistmanager::kVtxCentEventPlaneAngle):
221+
if constexpr (utils::HasEventShape<T1>) {
222+
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition1, trackTable, cache, binsVtxCentEventPlaneAngle, mMixingDepth, mPairHistManagerMe, mCprMe, mPcMe);
223+
} else {
224+
LOG(fatal) << "Mixing policy kVtxCentEventPlaneAngle requires a collision table with event-shape columns. Breaking...";
225+
}
226+
break;
220227
default:
221228
LOG(fatal) << "Invalid binning policiy specifed. Breaking...";
222229
}
@@ -231,14 +238,21 @@ class PairTrackTrackBuilder
231238
case static_cast<int>(pairhistmanager::kVtxMultCent):
232239
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition2, trackTable, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPcMe);
233240
break;
241+
case static_cast<int>(pairhistmanager::kVtxCentEventPlaneAngle):
242+
if constexpr (utils::HasEventShape<T1>) {
243+
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition2, trackTable, cache, binsVtxCentEventPlaneAngle, mMixingDepth, mPairHistManagerMe, mCprMe, mPcMe);
244+
} else {
245+
LOG(fatal) << "Mixing policy kVtxCentEventPlaneAngle requires a collision table with event-shape columns. Breaking...";
246+
}
247+
break;
234248
default:
235249
LOG(fatal) << "Invalid binning policiy specifed. Breaking...";
236250
}
237251
}
238252
}
239253

240-
template <modes::Mode mode, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
241-
void processMixedEvent(T1 const& cols, T2 const& mcCols, T3& trackTable, T4& partition1, T5& partition2, T6 const& mcParticles, T7 const& mcMothers, T8 const& mcPartonicMothers, T9& cache, T10& binsVtxMult, T11& binsVtxCent, T12& binsVtxMultCent)
254+
template <modes::Mode mode, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
255+
void processMixedEvent(T1 const& cols, T2 const& mcCols, T3& trackTable, T4& partition1, T5& partition2, T6 const& mcParticles, T7 const& mcMothers, T8 const& mcPartonicMothers, T9& cache, T10& binsVtxMult, T11& binsVtxCent, T12& binsVtxMultCent, T13& binsVtxCentEventPlaneAngle)
242256
{
243257
if (mSameSpecies) {
244258
switch (mMixingPolicy) {
@@ -251,6 +265,13 @@ class PairTrackTrackBuilder
251265
case static_cast<int>(pairhistmanager::kVtxMultCent):
252266
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, partition1, trackTable, mcParticles, mcMothers, mcPartonicMothers, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mTrackCleaner1, mTrackCleaner1, mCprMe, mPcMe);
253267
break;
268+
case static_cast<int>(pairhistmanager::kVtxCentEventPlaneAngle):
269+
if constexpr (utils::HasEventShape<T1>) {
270+
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, partition1, trackTable, mcParticles, mcMothers, mcPartonicMothers, cache, binsVtxCentEventPlaneAngle, mMixingDepth, mPairHistManagerMe, mTrackCleaner1, mTrackCleaner1, mCprMe, mPcMe);
271+
} else {
272+
LOG(fatal) << "Mixing policy kVtxCentEventPlaneAngle requires a collision table with event-shape columns. Breaking...";
273+
}
274+
break;
254275
default:
255276
LOG(fatal) << "Invalid binning policiy specifed. Breaking...";
256277
}
@@ -265,6 +286,13 @@ class PairTrackTrackBuilder
265286
case static_cast<int>(pairhistmanager::kVtxMultCent):
266287
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, partition2, trackTable, mcParticles, mcMothers, mcPartonicMothers, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mTrackCleaner1, mTrackCleaner2, mCprMe, mPcMe);
267288
break;
289+
case static_cast<int>(pairhistmanager::kVtxCentEventPlaneAngle):
290+
if constexpr (utils::HasEventShape<T1>) {
291+
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, partition2, trackTable, mcParticles, mcMothers, mcPartonicMothers, cache, binsVtxCentEventPlaneAngle, mMixingDepth, mPairHistManagerMe, mTrackCleaner1, mTrackCleaner2, mCprMe, mPcMe);
292+
} else {
293+
LOG(fatal) << "Mixing policy kVtxCentEventPlaneAngle requires a collision table with event-shape columns. Breaking...";
294+
}
295+
break;
268296
default:
269297
LOG(fatal) << "Invalid binning policiy specifed. Breaking...";
270298
}

0 commit comments

Comments
 (0)