Skip to content

Commit 5e178a5

Browse files
committed
[PWGCF] Femto: Add D0-hadron pair builder
1 parent ae1a197 commit 5e178a5

1 file changed

Lines changed: 135 additions & 0 deletions

File tree

PWGCF/Femto/Core/pairBuilder.h

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#define PWGCF_FEMTO_CORE_PAIRBUILDER_H_
1818

1919
#include "PWGCF/Femto/Core/cascadeHistManager.h"
20+
#include "PWGCF/Femto/Core/charmHadronHistManager.h"
2021
#include "PWGCF/Femto/Core/closePairRejection.h"
2122
#include "PWGCF/Femto/Core/collisionHistManager.h"
2223
#include "PWGCF/Femto/Core/kinkHistManager.h"
@@ -562,6 +563,140 @@ class PairV0V0Builder
562563
static_cast<int>(pairprocesshelpers::kOrder21)};
563564
};
564565

566+
template <auto& prefixTrack,
567+
auto& prefixD0,
568+
auto& prefixPosDau,
569+
auto& prefixNegDau,
570+
auto& prefixSe,
571+
auto& prefixMe,
572+
auto& prefixCprSe,
573+
auto& prefixCprMe,
574+
modes::CharmHadron charmHadronType>
575+
class PairTrackD0Builder
576+
{
577+
public:
578+
PairTrackD0Builder() = default;
579+
~PairTrackD0Builder() = default;
580+
581+
template <modes::Mode modeSe,
582+
modes::Mode modeMe,
583+
typename T1,
584+
typename T2,
585+
typename T3,
586+
typename T4,
587+
typename T5,
588+
typename T6,
589+
typename T7,
590+
typename T8,
591+
typename T9,
592+
typename T10,
593+
typename T11,
594+
typename T12,
595+
typename T13,
596+
typename T14,
597+
typename T15,
598+
typename T16>
599+
void init(o2::framework::HistogramRegistry* registry,
600+
T1 const& confCollisionBinning,
601+
T2 const& confTrackSelection,
602+
T3 const& confTrackCleaner,
603+
T4 const& confD0Selection,
604+
T5 const& confD0Cleaner,
605+
T6 const& confCpr,
606+
T7 const& confMixing,
607+
T8 const& confPairBinning,
608+
T9 const& confPairCuts,
609+
std::map<T10, std::vector<o2::framework::AxisSpec>>& colHistSpec,
610+
std::map<T11, std::vector<o2::framework::AxisSpec>>& trackHistSpec,
611+
std::map<T12, std::vector<o2::framework::AxisSpec>>& d0HistSpec,
612+
std::map<T13, std::vector<o2::framework::AxisSpec>>& posDauHistSpec,
613+
std::map<T14, std::vector<o2::framework::AxisSpec>>& negDauHistSpec,
614+
std::map<T15, std::vector<o2::framework::AxisSpec>>& pairHistSpec,
615+
std::map<T16, std::vector<o2::framework::AxisSpec>>& cprHistSpec)
616+
{
617+
mColHistManager.template init<modeSe>(registry, colHistSpec, confCollisionBinning);
618+
619+
mTrackHistManager.template init<modeSe>(registry, trackHistSpec, confTrackSelection);
620+
mD0HistManager.template init<modeSe>(registry, d0HistSpec, confD0Selection, posDauHistSpec, negDauHistSpec);
621+
622+
mTrackCleaner.init(confTrackCleaner);
623+
mD0Cleaner.init(confD0Cleaner);
624+
625+
// PDG codes of the D0 prongs depend on the hypothesis (set via confD0Selection.sign):
626+
// D0 -> pi+ K- => PosDau = pion, NegDau = kaon
627+
// D0bar -> K+ pi- => PosDau = kaon, NegDau = pion
628+
int posDauPdg = 0;
629+
int negDauPdg = 0;
630+
if (confD0Selection.sign.value > 0) {
631+
posDauPdg = PDG_t::kPiPlus;
632+
negDauPdg = PDG_t::kKMinus;
633+
} else {
634+
posDauPdg = PDG_t::kKPlus;
635+
negDauPdg = PDG_t::kPiMinus;
636+
}
637+
638+
mPairHistManagerSe.template init<modeSe>(registry, pairHistSpec, confPairBinning, confPairCuts, confMixing);
639+
mPairHistManagerSe.setMass(confTrackSelection.pdgCodeAbs.value, 0, 0, confD0Selection.pdgCodeAbs.value, posDauPdg, negDauPdg);
640+
mPairHistManagerSe.setCharge(confTrackSelection.chargeAbs.value, 1);
641+
mCprSe.init(registry, cprHistSpec, confCpr, confTrackSelection.chargeAbs.value);
642+
643+
mPairHistManagerMe.template init<modeMe>(registry, pairHistSpec, confPairBinning, confPairCuts, confMixing);
644+
mPairHistManagerMe.setMass(confTrackSelection.pdgCodeAbs.value, 0, 0, confD0Selection.pdgCodeAbs.value, posDauPdg, negDauPdg);
645+
mPairHistManagerMe.setCharge(confTrackSelection.chargeAbs.value, 1);
646+
mCprMe.init(registry, cprHistSpec, confCpr, confTrackSelection.chargeAbs.value);
647+
mPc.template init<modeSe>(confPairCuts);
648+
649+
// setup mixing
650+
mMixingPolicy = static_cast<pairhistmanager::MixingPolicy>(confMixing.policy.value);
651+
mMixingDepth = confMixing.depth.value;
652+
}
653+
654+
template <modes::Mode mode, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
655+
void processSameEvent(T1 const& col, T2& trackTable, T3& trackPartition, T4& /*d0table*/, T5& d0Partition, T6& cache)
656+
{
657+
auto trackSlice = trackPartition->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
658+
auto d0Slice = d0Partition->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
659+
if (trackSlice.size() < nLimitPartitionParticles || d0Slice.size() < nLimitPartitionParticles) {
660+
return;
661+
}
662+
mColHistManager.template fill<mode>(col);
663+
mCprSe.setMagField(col.magField());
664+
pairprocesshelpers::processSameEvent<mode>(trackSlice, d0Slice, trackTable, col, mTrackHistManager, mD0HistManager, mPairHistManagerSe, mCprSe, mPc);
665+
}
666+
667+
template <modes::Mode mode, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
668+
void processMixedEvent(T1 const& cols, T2& trackTable, T3& trackPartition, T4& d0Partition, T5& cache, T6& binsVtxMult, T7& binsVtxCent, T8& binsVtxMultCent)
669+
{
670+
switch (mMixingPolicy) {
671+
case static_cast<int>(pairhistmanager::kVtxMult):
672+
pairprocesshelpers::processMixedEvent<mode>(cols, trackPartition, d0Partition, trackTable, cache, binsVtxMult, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
673+
break;
674+
case static_cast<int>(pairhistmanager::kVtxCent):
675+
pairprocesshelpers::processMixedEvent<mode>(cols, trackPartition, d0Partition, trackTable, cache, binsVtxCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
676+
break;
677+
case static_cast<int>(pairhistmanager::kVtxMultCent):
678+
pairprocesshelpers::processMixedEvent<mode>(cols, trackPartition, d0Partition, trackTable, cache, binsVtxMultCent, mMixingDepth, mPairHistManagerMe, mCprMe, mPc);
679+
break;
680+
default:
681+
LOG(fatal) << "Invalid binning policiy specifed. Breaking...";
682+
}
683+
}
684+
685+
private:
686+
colhistmanager::CollisionHistManager mColHistManager;
687+
trackhistmanager::TrackHistManager<prefixTrack> mTrackHistManager;
688+
charmhadronhistmanager::CharmHadronHistManager<prefixD0, prefixPosDau, prefixNegDau, charmHadronType> mD0HistManager;
689+
particlecleaner::ParticleCleaner mTrackCleaner;
690+
particlecleaner::ParticleCleaner mD0Cleaner;
691+
pairhistmanager::PairHistManager<prefixSe, modes::Particle::kTrack, modes::Particle::kV0> mPairHistManagerSe;
692+
pairhistmanager::PairHistManager<prefixMe, modes::Particle::kTrack, modes::Particle::kV0> mPairHistManagerMe;
693+
closepairrejection::ClosePairRejectionTrackV0<prefixCprSe> mCprSe;
694+
closepairrejection::ClosePairRejectionTrackV0<prefixCprMe> mCprMe;
695+
paircleaner::TrackV0PairCleaner mPc;
696+
pairhistmanager::MixingPolicy mMixingPolicy = pairhistmanager::MixingPolicy::kVtxMult;
697+
int mMixingDepth = 5;
698+
};
699+
565700
template <auto& prefixTrack,
566701
auto& prefixV0,
567702
auto& prefixPosDau,

0 commit comments

Comments
 (0)