Skip to content

Commit 4318160

Browse files
committed
Created sigma0 builder and table producer and wrote a ppSigma0 task
1 parent e8ac079 commit 4318160

17 files changed

Lines changed: 1812 additions & 0 deletions

‎PWGCF/Femto/Core/closePairRejection.h‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,44 @@ class ClosePairRejectionTrackKink
750750
CloseTrackRejection<prefix> mCtr;
751751
};
752752

753+
// photon legs are not in the Track table so Sigma0 pairs only need to cross-check aganist dau lambda
754+
template <auto& prefixV0Daughter>
755+
class ClosePairRejectionTrackSigma0
756+
{
757+
public:
758+
template <typename T1>
759+
void init(o2::framework::HistogramRegistry* registry,
760+
std::map<CprHist, std::vector<o2::framework::AxisSpec>> const& specsV0Daughter,
761+
T1 const& confCprV0Daughter,
762+
int absChargeTrack)
763+
{
764+
mCtrV0Daughter.init(registry, specsV0Daughter, confCprV0Daughter, absChargeTrack, 1);
765+
}
766+
767+
void setMagField(float magField)
768+
{
769+
mCtrV0Daughter.setMagField(magField);
770+
}
771+
772+
template <typename T1, typename T2, typename T3, typename T4>
773+
[[nodiscard]] bool isClosePair(T1 const& track, T2 const& sigma0, T3 const& trackTable, T4 const& pairHistManager)
774+
{
775+
bool isCloseV0Daughter = false;
776+
if (track.sign() > 0) {
777+
auto posDau = trackTable.rawIteratorAt(sigma0.posDauId() - trackTable.offset());
778+
isCloseV0Daughter = mCtrV0Daughter.isClosePair(track, posDau, pairHistManager);
779+
} else {
780+
auto negDau = trackTable.rawIteratorAt(sigma0.negDauId() - trackTable.offset());
781+
isCloseV0Daughter = mCtrV0Daughter.isClosePair(track, negDau, pairHistManager);
782+
}
783+
784+
return isCloseV0Daughter;
785+
}
786+
787+
private:
788+
CloseTrackRejection<prefixV0Daughter> mCtrV0Daughter;
789+
};
790+
753791
// PCM photon daughters are, for now, not indexed into the track table (see photonBuilder.h):
754792
// they are TPC-only tracks, so they cannot be confused for a global track the way two V0
755793
// daughters or a track and a V0 daughter can -- there is no detector-overlap effect to correct

‎PWGCF/Femto/Core/closeTripletRejection.h‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@ namespace o2::analysis::femto::closetripletrejection
3030
constexpr const char PrefixCtrTrackTrackTrack[] = "CtrTrackTrackTrack";
3131
constexpr const char PrefixCtrTrackTrackV0[] = "CtrTrackTrackV0";
3232
constexpr const char PrefixCtrTrackTrackCascade[] = "CtrTrackTrackCascade";
33+
constexpr const char PrefixCtrTrackTrackSigma0[] = "CtrTrackTrackSigma0";
3334
constexpr const char PrefixCtrMcParticleMcParticleMcParticle[] = "CtrMcParticleMcParticleMcParticle";
3435

3536
// Q3 (not kstar) is the natural kinematic variable for triplets, so it is the default here
3637
using ConfCtrTrackTrackTrack = closepairrejection::ConfCpr<PrefixCtrTrackTrackTrack, true, modes::KinematicVariable::kQ3>;
3738
using ConfCtrTrackTrackV0 = closepairrejection::ConfCpr<PrefixCtrTrackTrackV0, true, modes::KinematicVariable::kQ3>;
3839
using ConfCtrTrackTrackCascade = closepairrejection::ConfCpr<PrefixCtrTrackTrackCascade, true, modes::KinematicVariable::kQ3>;
40+
using ConfCtrTrackTrackSigma0 = closepairrejection::ConfCpr<PrefixCtrTrackTrackSigma0>;
3941
// generated particles, no cut by default (close triplet rejection corrects a detector effect)
4042
using ConfCtrMcParticleMcParticleMcParticle = closepairrejection::ConfCpr<PrefixCtrMcParticleMcParticleMcParticle, false, modes::KinematicVariable::kQ3>;
4143

@@ -74,6 +76,11 @@ constexpr char PrefixTrack2CascadeBachelorSe[] = "CPR_Track2CascadeBachelor/SE/"
7476
constexpr char PrefixTrack1CascadeBachelorMe[] = "CPR_Track1CascadeBachelor/ME/";
7577
constexpr char PrefixTrack2CascadeBachelorMe[] = "CPR_Track2CascadeBachelor/ME/";
7678

79+
constexpr char PrefixTrack1Sigma0Se[] = "CPR_Track1Sigma0/SE/";
80+
constexpr char PrefixTrack2Sigma0Se[] = "CPR_Track2Sigma0/SE/";
81+
constexpr char PrefixTrack1Sigma0Me[] = "CPR_Track1Sigma0/ME/";
82+
constexpr char PrefixTrack2Sigma0Me[] = "CPR_Track2Sigma0/ME/";
83+
7784
template <auto& prefixTrack1Track2,
7885
auto& prefixTrack2Track3,
7986
auto& prefixTrack1Track3>
@@ -217,6 +224,49 @@ class CloseTripletRejectionTrackTrackCascade
217224
closepairrejection::ClosePairRejectionTrackCascade<prefixTrack2Bachelor, prefixTrack2V0Daughter> mCtrTrack2Cascade;
218225
};
219226

227+
template <auto& prefixTrack1Track2, auto& prefixTrack1Sigma0, auto& prefixTrack2Sigma0>
228+
class CloseTripletRejectionTrackTrackSigma0
229+
{
230+
public:
231+
CloseTripletRejectionTrackTrackSigma0() = default;
232+
~CloseTripletRejectionTrackTrackSigma0() = default;
233+
234+
template <typename T1>
235+
void init(o2::framework::HistogramRegistry* registry,
236+
std::map<closepairrejection::CprHist, std::vector<o2::framework::AxisSpec>> const& specs,
237+
T1 const& confCpr,
238+
int absChargeTrack1,
239+
int absChargeTrack2)
240+
{
241+
mCtrTrack12.init(registry, specs, confCpr, absChargeTrack1, absChargeTrack2);
242+
mCtrTrack1Sigma0.init(registry, specs, confCpr, absChargeTrack1);
243+
mCtrTrack2Sigma0.init(registry, specs, confCpr, absChargeTrack2);
244+
}
245+
246+
void setMagField(float magField)
247+
{
248+
mCtrTrack12.setMagField(magField);
249+
mCtrTrack1Sigma0.setMagField(magField);
250+
mCtrTrack2Sigma0.setMagField(magField);
251+
}
252+
253+
// checks track1-track2, track1-v0 and track2-v0 (from sigma0); fills the deta-dphi/kinematic
254+
// histograms of each pair internally and returns whether the triplet is rejected.
255+
template <typename T1, typename T2, typename T3, typename T4, typename T5>
256+
[[nodiscard]] bool isCloseTriplet(T1 const& track1, T2 const& track2, T3 const& sigma0, T4 const& trackTable, T5 const& tripletHistManager)
257+
{
258+
bool isClose12 = mCtrTrack12.isClosePair(track1, track2, trackTable, tripletHistManager);
259+
bool isClose1Sigma0 = mCtrTrack1Sigma0.isClosePair(track1, sigma0, trackTable, tripletHistManager);
260+
bool isClose2Sigma0 = mCtrTrack2Sigma0.isClosePair(track2, sigma0, trackTable, tripletHistManager);
261+
return isClose12 || isClose1Sigma0|| isClose2Sigma0;
262+
}
263+
264+
private:
265+
closepairrejection::ClosePairRejectionTrackTrack<prefixTrack1Track2> mCtrTrack12;
266+
closepairrejection::ClosePairRejectionTrackSigma0<prefixTrack1Sigma0> mCtrTrack1Sigma0;
267+
closepairrejection::ClosePairRejectionTrackSigma0<prefixTrack2Sigma0> mCtrTrack2Sigma0;
268+
};
269+
220270
// close triplet rejection for triplets of generated particles; checks all three constituent pairs
221271
template <auto& prefixMcParticle1McParticle2,
222272
auto& prefixMcParticle2McParticle3,

‎PWGCF/Femto/Core/dataTypes.h‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ using CascadeMaskType = uint32_t;
5858
using CascadeMaskType001 = uint16_t; // old data type, was too narrow
5959
using CascadeType = uint16_t;
6060

61+
// datatypes for sigma0
62+
using Sigma0MaskType = uint32_t;
63+
using Sigma0Type = uint16_t;
64+
6165
// datatype for origin of mc particle
6266
using McOriginType = uint8_t;
6367

‎PWGCF/Femto/Core/femtoUtils.h‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ inline double getPdgMass(int pdgCode)
135135
case kSigmaPlus:
136136
mass = o2::constants::physics::MassSigmaPlus;
137137
break;
138+
case kSigma0:
139+
mass = o2::constants::physics::MassSigma0;
140+
break;
138141
case kXiMinus:
139142
mass = o2::constants::physics::MassXiMinus;
140143
break;

‎PWGCF/Femto/Core/modes.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ enum class Particle : o2::analysis::femto::datatypes::ParticleType {
121121
kCascade = 5,
122122
kCharmHadron = 6,
123123
kTwoPhotonResonance = 7,
124+
kSigma0 = 8
124125
};
125126

126127
enum class McOrigin : o2::analysis::femto::datatypes::McOriginType {

‎PWGCF/Femto/Core/particleCleaner.h‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ constexpr const char PrefixSigmaPlusPcmCleaner2[] = "SigmaPlusPcmCleaner2";
7878
using ConfSigmaPlusPcmCleaner1 = ConfParticleCleaner<PrefixSigmaPlusPcmCleaner1>;
7979
using ConfSigmaPlusPcmCleaner2 = ConfParticleCleaner<PrefixSigmaPlusPcmCleaner2>;
8080

81+
constexpr const char PrefixSigma0Cleaner[] = "Sigma0Cleaner";
82+
using ConfSigma0Cleaner = ConfParticleCleaner<PrefixSigma0Cleaner>;
83+
8184
constexpr const char PrefixXiCleaner1[] = "XiCleaner1";
8285
constexpr const char PrefixXiCleaner2[] = "XiCleaner2";
8386
using ConfXiCleaner1 = ConfParticleCleaner<PrefixXiCleaner1>;

‎PWGCF/Femto/Core/partitions.h‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,20 @@
259259
(o2::aod::femtokinks::mlScore >= (selection).mlScoreMin) && \
260260
ncheckbit(o2::aod::femtokinks::mask, (selection).mask)
261261

262+
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
263+
#define MAKE_SIGMA0_PARTITION(selection) \
264+
ifnode((selection).sign.node() != 0, \
265+
ifnode((selection).sign.node() > 0, o2::aod::femtobase::stored::signedPt > 0.f, o2::aod::femtobase::stored::signedPt < 0.f), true) && \
266+
(nabs(o2::aod::femtobase::stored::signedPt) > (selection).ptMin) && \
267+
(nabs(o2::aod::femtobase::stored::signedPt) < (selection).ptMax) && \
268+
(o2::aod::femtobase::stored::eta > (selection).etaMin) && \
269+
(o2::aod::femtobase::stored::eta < (selection).etaMax) && \
270+
(o2::aod::femtobase::stored::phi > (selection).phiMin) && \
271+
(o2::aod::femtobase::stored::phi < (selection).phiMax) && \
272+
(o2::aod::femtobase::stored::mass > (selection).massMin) && \
273+
(o2::aod::femtobase::stored::mass < (selection).massMax) && \
274+
ncheckbit(o2::aod::femtosigma0s::mask, (selection).mask)
275+
262276
// partition for D0
263277
// sign of signedPt encodes the hypothesis: D0 (+) / D0bar (-)
264278
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)

0 commit comments

Comments
 (0)