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
45 changes: 45 additions & 0 deletions PWGCF/Femto/Core/closeTripletRejection.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,13 @@ namespace o2::analysis::femto::closetripletrejection
constexpr const char PrefixCtrTrackTrackTrack[] = "CtrTrackTrackTrack";
constexpr const char PrefixCtrTrackTrackV0[] = "CtrTrackTrackV0";
constexpr const char PrefixCtrTrackTrackCascade[] = "CtrTrackTrackCascade";
constexpr const char PrefixCtrMcParticleMcParticleMcParticle[] = "CtrMcParticleMcParticleMcParticle";

using ConfCtrTrackTrackTrack = closepairrejection::ConfCpr<PrefixCtrTrackTrackTrack>;
using ConfCtrTrackTrackV0 = closepairrejection::ConfCpr<PrefixCtrTrackTrackV0>;
using ConfCtrTrackTrackCascade = closepairrejection::ConfCpr<PrefixCtrTrackTrackCascade>;
// generated particles, no cut by default (close triplet rejection corrects a detector effect)
using ConfCtrMcParticleMcParticleMcParticle = closepairrejection::ConfCpr<PrefixCtrMcParticleMcParticleMcParticle, false>;

// directory names
constexpr char PrefixTrack1Track2Se[] = "CPR_Track1Track2/SE/";
Expand All @@ -42,6 +45,13 @@ constexpr char PrefixTrack1Track2Me[] = "CPR_Track1Track2/ME/";
constexpr char PrefixTrack2Track3Me[] = "CPR_Track2Track3/ME/";
constexpr char PrefixTrack1Track3Me[] = "CPR_Track1Track3/ME/";

constexpr char PrefixMcParticle1McParticle2Se[] = "CPR_McParticle1McParticle2/SE/";
constexpr char PrefixMcParticle2McParticle3Se[] = "CPR_McParticle2McParticle3/SE/";
constexpr char PrefixMcParticle1McParticle3Se[] = "CPR_McParticle1McParticle3/SE/";
constexpr char PrefixMcParticle1McParticle2Me[] = "CPR_McParticle1McParticle2/ME/";
constexpr char PrefixMcParticle2McParticle3Me[] = "CPR_McParticle2McParticle3/ME/";
constexpr char PrefixMcParticle1McParticle3Me[] = "CPR_McParticle1McParticle3/ME/";

constexpr char PrefixTrack1V0Se[] = "CPR_Track1V0/SE/";
constexpr char PrefixTrack2V0Se[] = "CPR_Track2V0/SE/";
constexpr char PrefixTrack1V0Me[] = "CPR_Track1V0/ME/";
Expand Down Expand Up @@ -205,5 +215,40 @@ class CloseTripletRejectionTrackTrackCascade
closepairrejection::ClosePairRejectionTrackCascade<prefixTrack2Bachelor, prefixTrack2V0Daughter> mCtrTrack2Cascade;
};

// close triplet rejection for triplets of generated particles; checks all three constituent pairs
template <auto& prefixMcParticle1McParticle2,
auto& prefixMcParticle2McParticle3,
auto& prefixMcParticle1McParticle3>
class CloseTripletRejectionMcParticleMcParticleMcParticle
{
public:
CloseTripletRejectionMcParticleMcParticleMcParticle() = default;
~CloseTripletRejectionMcParticleMcParticleMcParticle() = default;

template <typename T>
void init(o2::framework::HistogramRegistry* registry,
std::map<closepairrejection::CprHist, std::vector<o2::framework::AxisSpec>> const& specs,
T const& confCpr)
{
mCtr12.init(registry, specs, confCpr);
mCtr23.init(registry, specs, confCpr);
mCtr13.init(registry, specs, confCpr);
}

template <typename T1, typename T2, typename T3, typename T4>
[[nodiscard]] bool isCloseTriplet(T1 const& particle1, T2 const& particle2, T3 const& particle3, T4 const& tripletHistManager)
{
bool isClose12 = mCtr12.isClosePair(particle1, particle2, tripletHistManager);
bool isClose23 = mCtr23.isClosePair(particle2, particle3, tripletHistManager);
bool isClose13 = mCtr13.isClosePair(particle1, particle3, tripletHistManager);
return isClose12 || isClose23 || isClose13;
}

private:
closepairrejection::ClosePairRejectionMcParticleMcParticle<prefixMcParticle1McParticle2> mCtr12;
closepairrejection::ClosePairRejectionMcParticleMcParticle<prefixMcParticle2McParticle3> mCtr23;
closepairrejection::ClosePairRejectionMcParticleMcParticle<prefixMcParticle1McParticle3> mCtr13;
};

} // namespace o2::analysis::femto::closetripletrejection
#endif // PWGCF_FEMTO_CORE_CLOSETRIPLETREJECTION_H_
2 changes: 2 additions & 0 deletions PWGCF/Femto/Core/mcBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,11 @@ struct ConfMcParticleSelection : o2::framework::ConfigurableGroup {

constexpr const char PrefixMcParticleSelection1[] = "McParticleSelection1";
constexpr const char PrefixMcParticleSelection2[] = "McParticleSelection2";
constexpr const char PrefixMcParticleSelection3[] = "McParticleSelection3";

using ConfMcParticleSelection1 = ConfMcParticleSelection<PrefixMcParticleSelection1>;
using ConfMcParticleSelection2 = ConfMcParticleSelection<PrefixMcParticleSelection2>;
using ConfMcParticleSelection3 = ConfMcParticleSelection<PrefixMcParticleSelection3>;

class McBuilder
{
Expand Down
3 changes: 3 additions & 0 deletions PWGCF/Femto/Core/mcParticleHistManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,11 @@ struct ConfMcParticleBinning : o2::framework::ConfigurableGroup {

constexpr const char PrefixMcParticleBinning1[] = "McParticleBinning1";
constexpr const char PrefixMcParticleBinning2[] = "McParticleBinning2";
constexpr const char PrefixMcParticleBinning3[] = "McParticleBinning3";

using ConfMcParticleBinning1 = ConfMcParticleBinning<PrefixMcParticleBinning1>;
using ConfMcParticleBinning2 = ConfMcParticleBinning<PrefixMcParticleBinning2>;
using ConfMcParticleBinning3 = ConfMcParticleBinning<PrefixMcParticleBinning3>;

// the enum gives the correct index in the array
constexpr std::array<histmanager::HistInfo<McParticleHist>, kMcParticleHistLast>
Expand Down Expand Up @@ -144,6 +146,7 @@ auto makeMcParticleHistSpecMap(const T& confBinning)

inline constexpr char PrefixMcParticle1[] = "McParticle1/";
inline constexpr char PrefixMcParticle2[] = "McParticle2/";
inline constexpr char PrefixMcParticle3[] = "McParticle3/";

constexpr std::string_view McDir = "MC/";

Expand Down
22 changes: 22 additions & 0 deletions PWGCF/Femto/Core/pairHistManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -760,6 +760,14 @@ class PairHistManager
mTrueMinv = getMinv(mTrueParticle1, mTrueParticle2);
mTrueKstar = getKstar(mTrueParticle1, mTrueParticle2);

// in the pure mc-truth path there is no reco counterpart, so the generated values are also
// stored in the reco members; they are used by getKinematic(), i.e. by the kinematic histograms
// of the pair cleaner and of the close pair rejection
mKt = mTrueKt;
mMt = mTrueMt;
mMassInv = mTrueMinv;
mKstar = mTrueKstar;

if (mPlotBertschPratt) {
std::tie(mTrueQout, mTrueQside, mTrueQlong) = computeBertschPrattLCMS(mTrueParticle1, mTrueParticle2);
}
Expand Down Expand Up @@ -787,6 +795,20 @@ class PairHistManager
mTrueCent = 0.5f * (col1.cent() + col2.cent());
}

/// pair cuts on the mc-truth values, for the pure mc-truth path (kMc without kReco),
/// where the reco values are never set
bool checkPairCutsMcTruth() const
{
return (!(mKstarMin > 0.f) || mTrueKstar > mKstarMin) &&
(!(mKstarMax > 0.f) || mTrueKstar < mKstarMax) &&
(!(mKtMin > 0.f) || mTrueKt > mKtMin) &&
(!(mKtMax > 0.f) || mTrueKt < mKtMax) &&
(!(mMtMin > 0.f) || mTrueMt > mMtMin) &&
(!(mMtMax > 0.f) || mTrueMt < mMtMax) &&
(!(mMassInvMin > 0.f) || mTrueMinv > mMassInvMin) &&
(!(mMassInvMax > 0.f) || mTrueMinv < mMassInvMax);
}

bool checkPairCuts() const
{
return (!(mKstarMin > 0.f) || mKstar > mKstarMin) &&
Expand Down
6 changes: 3 additions & 3 deletions PWGCF/Femto/Core/pairProcessHelpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ bool processSameEvent(T1 const& SliceParticle,
if (CprManager.isClosePair(p1, p2, PairHistManager)) {
continue;
}
if (PairHistManager.checkPairCuts()) {
if (PairHistManager.checkPairCutsMcTruth()) {
PairHistManager.template fill<mode>();
PairHistManager.trackParticlesPerEvent(p1, p2);
foundPair = true;
Expand Down Expand Up @@ -408,7 +408,7 @@ bool processSameEvent(T1 const& SliceParticle1,
if (CprManager.isClosePair(p1, p2, PairHistManager)) {
continue;
}
if (PairHistManager.checkPairCuts()) {
if (PairHistManager.checkPairCutsMcTruth()) {
PairHistManager.template fill<mode>();
PairHistManager.trackParticlesPerEvent(p1, p2);
foundPair = true;
Expand Down Expand Up @@ -714,7 +714,7 @@ void processMixedEvent(T1 const& Collisions,
continue;
}

if (PairHistManager.checkPairCuts()) {
if (PairHistManager.checkPairCutsMcTruth()) {
hasValidPair = true;
PairHistManager.trackParticlesPerEvent(p1, p2);
PairHistManager.template fill<mode>();
Expand Down
2 changes: 2 additions & 0 deletions PWGCF/Femto/Core/particleCleaner.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,10 @@ using ConfOmegaCleaner2 = ConfParticleCleaner<PrefixOmegaCleaner2>;

constexpr const char PrefixMcParticleCleaner1[] = "McParticleCleaner1";
constexpr const char PrefixMcParticleCleaner2[] = "McParticleCleaner2";
constexpr const char PrefixMcParticleCleaner3[] = "McParticleCleaner3";
using ConfMcParticleCleaner1 = ConfParticleCleaner<PrefixMcParticleCleaner1>;
using ConfMcParticleCleaner2 = ConfParticleCleaner<PrefixMcParticleCleaner2>;
using ConfMcParticleCleaner3 = ConfParticleCleaner<PrefixMcParticleCleaner3>;

class ParticleCleaner
{
Expand Down
Loading
Loading