Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 12 additions & 7 deletions PWGCF/Femto/Core/femtoUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include <cstdint>
#include <limits>
#include <optional>
#include <type_traits>
#include <unordered_map>

namespace o2::analysis::femto
Expand Down Expand Up @@ -83,7 +84,7 @@ inline double getPdgMass(int pdgCode)
{
// use this function instead of TDatabasePDG to return masses defined in the PhysicsConstants.h header
// this approach saves a lot of memory and important partilces like deuteron are missing in TDatabasePDG anyway
double mass = 0.f;
double mass = 0.;
// add new particles if necessary here
switch (std::abs(pdgCode)) {
case kPiPlus:
Expand All @@ -102,10 +103,10 @@ inline double getPdgMass(int pdgCode)
mass = o2::constants::physics::MassPhi;
break;
case kRho770_0:
mass = 775.26; // not defined in O2?
mass = 0.77526; // not defined in O2?
break;
case kRho770Plus:
mass = 775.11; // not defined in O2?
mass = 0.77511; // not defined in O2?
break;
case o2::constants::physics::Pdg::kK0Star892:
mass = o2::constants::physics::MassK0Star892;
Expand Down Expand Up @@ -138,7 +139,7 @@ inline double getPdgMass(int pdgCode)
mass = o2::constants::physics::MassOmegaMinus;
break;
default:
LOG(warn) << "PDG code is not suppored. Return 0...";
LOG(warn) << "PDG code " << pdgCode << " is not suppored. Return 0... ";
}
return mass;
}
Expand All @@ -154,11 +155,15 @@ concept HasQvectors = requires(T col) {
};

template <typename T>
concept HasEventShape = requires(T col) {
col.qvec();
col.eventPlaneAngle();
concept HasEventShapeRow = requires(T row) {
row.qvec();
row.eventPlaneAngle();
};

/// accepts either a row/iterator or a table (Filtered<Join<...>> etc.)
template <typename T>
concept HasEventShape = HasEventShapeRow<std::decay_t<T>> || (requires { typename std::decay_t<T>::iterator; } && HasEventShapeRow<typename std::decay_t<T>::iterator>);

/// Recalculate pT for Kinks (Sigmas) using kinematic constraints
inline float calcPtnew(float pxMother, float pyMother, float pzMother, float pxDaughter, float pyDaughter, float pzDaughter)
{
Expand Down
36 changes: 32 additions & 4 deletions PWGCF/Femto/Core/pairBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -202,8 +202,8 @@ class PairTrackTrackBuilder
}
}

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

if (mSameSpecies) {
Expand All @@ -217,6 +217,13 @@ class PairTrackTrackBuilder
case static_cast<int>(pairhistmanager::kVtxMultCent):
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition1, trackTable, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPcMe);
break;
case static_cast<int>(pairhistmanager::kVtxCentEventPlaneAngle):
if constexpr (utils::HasEventShape<T1>) {
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition1, trackTable, cache, binsVtxCentEventPlaneAngle, mMixingDepth, mPairHistManagerMe, mCprMe, mPcMe);
} else {
LOG(fatal) << "Mixing policy kVtxCentEventPlaneAngle requires a collision table with event-shape columns. Breaking...";
}
break;
default:
LOG(fatal) << "Invalid binning policiy specifed. Breaking...";
}
Expand All @@ -231,14 +238,21 @@ class PairTrackTrackBuilder
case static_cast<int>(pairhistmanager::kVtxMultCent):
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition2, trackTable, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPcMe);
break;
case static_cast<int>(pairhistmanager::kVtxCentEventPlaneAngle):
if constexpr (utils::HasEventShape<T1>) {
pairprocesshelpers::processMixedEvent<mode>(cols, partition1, partition2, trackTable, cache, binsVtxCentEventPlaneAngle, mMixingDepth, mPairHistManagerMe, mCprMe, mPcMe);
} else {
LOG(fatal) << "Mixing policy kVtxCentEventPlaneAngle requires a collision table with event-shape columns. Breaking...";
}
break;
default:
LOG(fatal) << "Invalid binning policiy specifed. Breaking...";
}
}
}

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>
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)
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>
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)
{
if (mSameSpecies) {
switch (mMixingPolicy) {
Expand All @@ -251,6 +265,13 @@ class PairTrackTrackBuilder
case static_cast<int>(pairhistmanager::kVtxMultCent):
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, partition1, trackTable, mcParticles, mcMothers, mcPartonicMothers, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mTrackCleaner1, mTrackCleaner1, mCprMe, mPcMe);
break;
case static_cast<int>(pairhistmanager::kVtxCentEventPlaneAngle):
if constexpr (utils::HasEventShape<T1>) {
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, partition1, trackTable, mcParticles, mcMothers, mcPartonicMothers, cache, binsVtxCentEventPlaneAngle, mMixingDepth, mPairHistManagerMe, mTrackCleaner1, mTrackCleaner1, mCprMe, mPcMe);
} else {
LOG(fatal) << "Mixing policy kVtxCentEventPlaneAngle requires a collision table with event-shape columns. Breaking...";
}
break;
default:
LOG(fatal) << "Invalid binning policiy specifed. Breaking...";
}
Expand All @@ -265,6 +286,13 @@ class PairTrackTrackBuilder
case static_cast<int>(pairhistmanager::kVtxMultCent):
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, partition2, trackTable, mcParticles, mcMothers, mcPartonicMothers, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mTrackCleaner1, mTrackCleaner2, mCprMe, mPcMe);
break;
case static_cast<int>(pairhistmanager::kVtxCentEventPlaneAngle):
if constexpr (utils::HasEventShape<T1>) {
pairprocesshelpers::processMixedEvent<mode>(cols, mcCols, partition1, partition2, trackTable, mcParticles, mcMothers, mcPartonicMothers, cache, binsVtxCentEventPlaneAngle, mMixingDepth, mPairHistManagerMe, mTrackCleaner1, mTrackCleaner2, mCprMe, mPcMe);
} else {
LOG(fatal) << "Mixing policy kVtxCentEventPlaneAngle requires a collision table with event-shape columns. Breaking...";
}
break;
default:
LOG(fatal) << "Invalid binning policiy specifed. Breaking...";
}
Expand Down
Loading
Loading