Skip to content

Commit 06f56b2

Browse files
hfribertHenrik Fribert
andauthored
[PWGCF] Add sigma plus to femto (#13731)
Co-authored-by: Henrik Fribert <ge35huh@nidoqueen.ktas.ph.tum.de>
1 parent 8be8878 commit 06f56b2

File tree

9 files changed

+347
-58
lines changed

9 files changed

+347
-58
lines changed

PWGCF/Femto/Core/femtoUtils.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,9 @@ inline float getMass(int pdgCode)
153153
case kSigmaMinus:
154154
mass = o2::constants::physics::MassSigmaMinus;
155155
break;
156+
case kSigmaPlus:
157+
mass = o2::constants::physics::MassSigmaPlus;
158+
break;
156159
case kXiMinus:
157160
mass = o2::constants::physics::MassXiMinus;
158161
break;

PWGCF/Femto/Core/kinkBuilder.h

Lines changed: 186 additions & 46 deletions
Large diffs are not rendered by default.

PWGCF/Femto/Core/kinkHistManager.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,19 @@ struct ConfSigmaBinning : o2::framework::ConfigurableGroup {
7474
std::string prefix = Prefix;
7575
KINK_DEFAULT_BINNING(1.1, 1.3)
7676
};
77+
template <const char* Prefix>
78+
struct ConfSigmaPlusBinning : o2::framework::ConfigurableGroup {
79+
std::string prefix = Prefix;
80+
KINK_DEFAULT_BINNING(1.1, 1.3)
81+
};
7782
#undef KINK_DEFAULT_BINNING
7883

7984
constexpr const char PrefixSigmaBinning1[] = "SigmaBinning1";
8085
using ConfSigmaBinning1 = ConfSigmaBinning<PrefixSigmaBinning1>;
8186

87+
constexpr const char PrefixSigmaPlusBinning1[] = "SigmaPlusBinning1";
88+
using ConfSigmaPlusBinning1 = ConfSigmaPlusBinning<PrefixSigmaPlusBinning1>;
89+
8290
template <const char* Prefix>
8391
struct ConfKinkQaBinning : o2::framework::ConfigurableGroup {
8492
std::string prefix = Prefix;
@@ -93,6 +101,9 @@ struct ConfKinkQaBinning : o2::framework::ConfigurableGroup {
93101
constexpr const char PrefixSigmaQaBinning1[] = "SigmaQaBinning1";
94102
using ConfSigmaQaBinning1 = ConfKinkQaBinning<PrefixSigmaQaBinning1>;
95103

104+
constexpr const char PrefixSigmaPlusQaBinning1[] = "SigmaPlusQaBinning1";
105+
using ConfSigmaPlusQaBinning1 = ConfKinkQaBinning<PrefixSigmaPlusQaBinning1>;
106+
96107
// must be in sync with enum KinkHist
97108
// the enum gives the correct index in the array
98109
constexpr std::array<histmanager::HistInfo<KinkHist>, kKinkHistLast> HistTable = {
@@ -153,6 +164,9 @@ std::map<KinkHist, std::vector<framework::AxisSpec>> makeKinkQaHistSpecMap(T1 co
153164
constexpr char PrefixSigmaQa[] = "SigmaQA/";
154165
constexpr char PrefixSigma1[] = "Sigma1/";
155166
constexpr char PrefixSigma2[] = "Sigma2/";
167+
constexpr char PrefixSigmaPlusQa[] = "SigmaPlusQA/";
168+
constexpr char PrefixSigmaPlus1[] = "SigmaPlus1/";
169+
constexpr char PrefixSigmaPlus2[] = "SigmaPlus2/";
156170

157171
constexpr std::string_view AnalysisDir = "Kinematics/";
158172
constexpr std::string_view QaDir = "QA/";
@@ -259,7 +273,7 @@ class KinkHistManager
259273
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(AnalysisDir) + HIST(getHistName(kPhi, HistTable)), kinkcandidate.phi());
260274
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(AnalysisDir) + HIST(getHistName(kMass, HistTable)), kinkcandidate.mass());
261275

262-
if constexpr (isEqual(kink, modes::Kink::kSigma)) {
276+
if constexpr (isEqual(kink, modes::Kink::kSigma) || isEqual(kink, modes::Kink::kSigmaPlus)) {
263277
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(AnalysisDir) + HIST(getHistName(kSign, HistTable)), kinkcandidate.sign());
264278
}
265279
}

PWGCF/Femto/Core/modes.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ enum class V0 : o2::aod::femtodatatypes::V0Type {
113113
};
114114

115115
enum class Kink : o2::aod::femtodatatypes::KinkType {
116-
kSigma
116+
kSigma,
117+
kSigmaPlus
117118
};
118119

119120
enum class Cascade : o2::aod::femtodatatypes::CascadeType {

PWGCF/Femto/Core/partitions.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,17 @@
126126
(femtobase::stored::mass < selection.massMax) && \
127127
ncheckbit(femtokinks::mask, selection.mask)
128128

129+
#define MAKE_SIGMAPLUS_PARTITION(selection) \
130+
ifnode(selection.sign.node() != 0, \
131+
ifnode(selection.sign.node() > 0, femtobase::stored::signedPt > 0.f, femtobase::stored::signedPt < 0.f), true) && \
132+
(nabs(femtobase::stored::signedPt) > selection.ptMin) && \
133+
(nabs(femtobase::stored::signedPt) < selection.ptMax) && \
134+
(femtobase::stored::eta > selection.etaMin) && \
135+
(femtobase::stored::eta < selection.etaMax) && \
136+
(femtobase::stored::phi > selection.phiMin) && \
137+
(femtobase::stored::phi < selection.phiMax) && \
138+
(femtobase::stored::mass > selection.massMin) && \
139+
(femtobase::stored::mass < selection.massMax) && \
140+
ncheckbit(femtokinks::mask, selection.mask)
141+
129142
#endif // PWGCF_FEMTO_CORE_PARTITIONS_H_

PWGCF/Femto/DataModel/FemtoTables.h

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ DECLARE_SOA_COLUMN(TransRadius, transRadius, float); //! Transverse decay radius
513513
DECLARE_SOA_INDEX_COLUMN_FULL(ChaDau, chaDau, int32_t, FTracks, "_ChaDau"); //!
514514
} // namespace femtokinks
515515

516-
// table for basic sigma minus information
516+
// table for basic sigma information
517517
DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmas_001, "FSIGMA", 1,
518518
o2::soa::Index<>,
519519
femtobase::stored::FColId, // use sign to differentiate between sigma minus (-1) and anti sigma minus (+1)
@@ -546,6 +546,39 @@ DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmaExtras_001, "FSIGMAEXTRAS", 1,
546546

547547
using FSigmaExtras = FSigmaExtras_001;
548548

549+
// table for basic sigma plus information
550+
DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmaPlus_001, "FSIGMAPLUS", 1,
551+
o2::soa::Index<>,
552+
femtobase::stored::FColId, // use sign to differentiate between sigma minus (-1) and anti sigma minus (+1)
553+
femtobase::stored::SignedPt,
554+
femtobase::stored::Eta,
555+
femtobase::stored::Phi,
556+
femtobase::stored::Mass,
557+
femtokinks::ChaDauId,
558+
femtobase::dynamic::Sign<femtobase::stored::SignedPt>,
559+
femtobase::dynamic::Pt<femtobase::stored::SignedPt>,
560+
femtobase::dynamic::P<femtobase::stored::SignedPt, femtobase::stored::Eta>,
561+
femtobase::dynamic::Px<femtobase::stored::SignedPt, femtobase::stored::Phi>,
562+
femtobase::dynamic::Py<femtobase::stored::SignedPt, femtobase::stored::Phi>,
563+
femtobase::dynamic::Pz<femtobase::stored::SignedPt, femtobase::stored::Eta>,
564+
femtobase::dynamic::Theta<femtobase::stored::Eta>);
565+
using FSigmaPlus = FSigmaPlus_001;
566+
567+
DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmaPlusMasks_001, "FSIGMAPLUSMASKS", 1,
568+
femtokinks::Mask);
569+
using FSigmaPlusMasks = FSigmaPlusMasks_001;
570+
571+
DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmaPlusExtras_001, "FSIGMAPLUSEXTRAS", 1,
572+
femtokinks::KinkAngle,
573+
femtokinks::DcaDaugToPV,
574+
femtokinks::DcaMothToPV,
575+
femtokinks::DecayVtxX,
576+
femtokinks::DecayVtxY,
577+
femtokinks::DecayVtxZ,
578+
femtokinks::TransRadius);
579+
580+
using FSigmaPlusExtras = FSigmaPlusExtras_001;
581+
549582
namespace femtocascades
550583
{
551584
// columns for cascade bit masks

PWGCF/Femto/TableProducer/femtoProducer.cxx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ struct FemtoProducer {
121121
kinkbuilder::ConfKinkFilters confKinkFilters;
122122
kinkbuilder::ConfSigmaBits confSigmaBits;
123123
kinkbuilder::KinkBuilder<modes::Kink::kSigma> sigmaBuilder;
124+
kinkbuilder::ConfSigmaPlusBits confSigmaPlusBits;
125+
kinkbuilder::KinkBuilder<modes::Kink::kSigmaPlus> sigmaPlusBuilder;
124126

125127
// resonance daughter filters and partitions
126128
twotrackresonancebuilder::ConfTwoTrackResonanceDaughterFilters confResonanceDaughterFilters;
@@ -182,6 +184,7 @@ struct FemtoProducer {
182184

183185
// configure kink builder
184186
sigmaBuilder.init(confSigmaBits, confKinkFilters, confKinkTables, context);
187+
sigmaPlusBuilder.init(confSigmaPlusBits, confKinkFilters, confKinkTables, context);
185188

186189
// cascade selections
187190
xiBuilder.init(confXiBits, confCascadeFilters, confCascadeTables, context);
@@ -199,7 +202,7 @@ struct FemtoProducer {
199202
if ((lambdaBuilder.fillAnyTable() || antilambdaBuilder.fillAnyTable() || k0shortBuilder.fillAnyTable()) && (!doprocessTracksV0sCascadesRun3pp && !doprocessTracksV0sRun3pp && !doprocessTracksV0sCascadesKinksRun3pp)) {
200203
LOG(fatal) << "At least one v0 table is enabled, but wrong process function is enabled. Breaking...";
201204
}
202-
if (sigmaBuilder.fillAnyTable() && (!doprocessTracksKinksRun3pp && !doprocessTracksV0sCascadesKinksRun3pp)) {
205+
if ((sigmaBuilder.fillAnyTable() || sigmaPlusBuilder.fillAnyTable()) && (!doprocessTracksKinksRun3pp && !doprocessTracksV0sCascadesKinksRun3pp)) {
203206
LOG(fatal) << "At least one kink table is enabled, but wrong process function is enabled. Breaking...";
204207
}
205208
}
@@ -248,6 +251,7 @@ struct FemtoProducer {
248251
void processKinks(T1 const& tracks, T2 const& kinks)
249252
{
250253
sigmaBuilder.fillKinks(collisionBuilderProducts, trackBuilderProducts, kinkBuilderProducts, kinks, tracks, trackBuilder, indexMapTracks);
254+
sigmaPlusBuilder.fillKinks(collisionBuilderProducts, trackBuilderProducts, kinkBuilderProducts, kinks, tracks, trackBuilder, indexMapTracks);
251255
}
252256

253257
// add cascades

PWGCF/Femto/Tasks/femtoKinkQa.cxx

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ struct FemtoKinkQa {
6161

6262
// Define kink/sigma tables (joining tables for comprehensive information)
6363
using FemtoSigmas = o2::soa::Join<FSigmas, FSigmaMasks, FSigmaExtras>;
64+
using FemtoSigmaPlus = o2::soa::Join<FSigmaPlus, FSigmaPlusMasks, FSigmaPlusExtras>;
6465
using FemtoTracks = o2::soa::Join<FTracks, FTrackDcas, FTrackExtras, FTrackPids>;
6566

6667
SliceCache cache;
@@ -80,6 +81,21 @@ struct FemtoKinkQa {
8081
modes::Kink::kSigma>
8182
sigmaHistManager;
8283

84+
// setup for sigma plus
85+
kinkbuilder::ConfSigmaPlusSelection1 confSigmaPlusSelection;
86+
87+
Partition<FemtoSigmaPlus> sigmaPlusPartition = MAKE_SIGMAPLUS_PARTITION(confSigmaPlusSelection);
88+
Preslice<FemtoSigmaPlus> perColSigmaPlus = femtobase::stored::fColId;
89+
90+
kinkhistmanager::ConfSigmaPlusBinning1 confSigmaPlusBinning;
91+
kinkhistmanager::ConfSigmaPlusQaBinning1 confSigmaPlusQaBinning;
92+
kinkhistmanager::KinkHistManager<
93+
kinkhistmanager::PrefixSigmaPlusQa,
94+
trackhistmanager::PrefixKinkChaDaughterQa,
95+
modes::Mode::kAnalysis_Qa,
96+
modes::Kink::kSigmaPlus>
97+
sigmaPlusHistManager;
98+
8399
// setup for daughters
84100
trackhistmanager::ConfKinkChaDauBinning confKinkChaDaughterBinning;
85101
trackhistmanager::ConfKinkChaDauQaBinning confKinkChaDaughterQaBinning;
@@ -88,16 +104,27 @@ struct FemtoKinkQa {
88104

89105
void init(InitContext&)
90106
{
91-
auto sigmaHistSpec = kinkhistmanager::makeKinkQaHistSpecMap(confSigmaBinning, confSigmaQaBinning);
107+
// create a map for histogram specs
108+
auto colHistSpec = colhistmanager::makeColQaHistSpecMap(confCollisionBinning, confCollisionQaBinning);
109+
colHistManager.init(&hRegistry, colHistSpec, confCollisionQaBinning);
110+
92111
auto chaDauHistSpec = trackhistmanager::makeTrackQaHistSpecMap(confKinkChaDaughterBinning, confKinkChaDaughterQaBinning);
93112

94-
sigmaHistManager.init(&hRegistry, sigmaHistSpec, confSigmaQaBinning, chaDauHistSpec, confKinkChaDaughterQaBinning);
113+
if ((doprocessSigma + doprocessSigmaPlus > 1)) {
114+
LOG(fatal) << "Only one process can be activated";
115+
}
116+
117+
if (doprocessSigma) {
118+
auto sigmaHistSpec = kinkhistmanager::makeKinkQaHistSpecMap(confSigmaBinning, confSigmaQaBinning);
119+
sigmaHistManager.init(&hRegistry, sigmaHistSpec, confSigmaQaBinning, chaDauHistSpec, confKinkChaDaughterQaBinning);
120+
}
95121

96-
auto collisionHistSpec = colhistmanager::makeColQaHistSpecMap(confCollisionBinning, confCollisionQaBinning);
97-
colHistManager.init(&hRegistry, collisionHistSpec, confCollisionQaBinning);
122+
if (doprocessSigmaPlus) {
123+
auto sigmaPlusHistSpec = kinkhistmanager::makeKinkQaHistSpecMap(confSigmaPlusBinning, confSigmaPlusQaBinning);
124+
sigmaPlusHistManager.init(&hRegistry, sigmaPlusHistSpec, confSigmaPlusQaBinning, chaDauHistSpec, confKinkChaDaughterQaBinning);
125+
}
98126
};
99127

100-
// Process function for sigma particles from femto tables
101128
void processSigma(FilteredFemtoCollision const& col, FemtoSigmas const& /*sigmas*/, FemtoTracks const& tracks)
102129
{
103130
colHistManager.fill(col);
@@ -107,6 +134,18 @@ struct FemtoKinkQa {
107134
}
108135
}
109136
PROCESS_SWITCH(FemtoKinkQa, processSigma, "Process sigmas", true);
137+
138+
void processSigmaPlus(FilteredFemtoCollision const& col, FemtoSigmaPlus const& /*sigmaplus*/, FemtoTracks const& tracks)
139+
{
140+
colHistManager.fill(col);
141+
142+
auto sigmaplusSlice = sigmaPlusPartition->sliceByCached(femtobase::stored::fColId, col.globalIndex(), cache);
143+
144+
for (auto const& sp : sigmaplusSlice) {
145+
sigmaPlusHistManager.fill(sp, tracks);
146+
}
147+
}
148+
PROCESS_SWITCH(FemtoKinkQa, processSigmaPlus, "Process sigma plus", false);
110149
};
111150

112151
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

PWGCF/Femto/Tasks/femtoPairTrackKink.cxx

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ struct FemtoPairTrackKink {
5959

6060
using Tracks = o2::soa::Join<FTracks, FTrackMasks>;
6161
using Sigmas = o2::soa::Join<FSigmas, FSigmaMasks>;
62+
using SigmaPlus = o2::soa::Join<FSigmaPlus, FSigmaPlusMasks>;
6263

6364
SliceCache cache;
6465

@@ -82,6 +83,12 @@ struct FemtoPairTrackKink {
8283
Partition<Sigmas> sigmaPartition = MAKE_SIGMA_PARTITION(sigmaSelection);
8384
Preslice<Sigmas> perColSigmas = aod::femtobase::stored::fColId;
8485

86+
// setup for sigma plus
87+
kinkbuilder::ConfSigmaPlusSelection1 sigmaPlusSelection;
88+
kinkhistmanager::ConfSigmaPlusBinning1 confSigmaPlusBinning;
89+
Partition<SigmaPlus> sigmaPlusPartition = MAKE_SIGMAPLUS_PARTITION(sigmaPlusSelection);
90+
Preslice<SigmaPlus> perColSigmaPlus = aod::femtobase::stored::fColId;
91+
8592
// setup pairs
8693
pairhistmanager::ConfPairBinning confPairBinning;
8794
pairhistmanager::ConfPairCuts confPairCuts;
@@ -98,6 +105,18 @@ struct FemtoPairTrackKink {
98105
modes::Kink::kSigma>
99106
pairTrackSigmaBuilder;
100107

108+
pairbuilder::PairTrackKinkBuilder<
109+
trackhistmanager::PrefixTrack1,
110+
kinkhistmanager::PrefixSigmaPlus1,
111+
trackhistmanager::PrefixKinkChaDaughter,
112+
pairhistmanager::PrefixTrackKinkSe,
113+
pairhistmanager::PrefixTrackKinkMe,
114+
closepairrejection::PrefixTrackKinkSe,
115+
closepairrejection::PrefixTrackKinkMe,
116+
modes::Mode::kAnalysis,
117+
modes::Kink::kSigmaPlus>
118+
pairTrackSigmaPlusBuilder;
119+
101120
// setup mixing
102121
std::vector<double> defaultVtxBins{10, -10, 10};
103122
std::vector<double> defaultMultBins{50, 0, 200};
@@ -129,10 +148,21 @@ struct FemtoPairTrackKink {
129148
auto cprHistSpec = closepairrejection::makeCprHistSpecMap(confCpr);
130149

131150
// setup for sigma
132-
// if (doprocessSigmaSameEvent || doprocessSigmaMixedEvent) {
133-
if (doprocessSigmaSameEvent) {
151+
if (doprocessSigmaSameEvent || doprocessSigmaMixedEvent) {
134152
auto sigmaHistSpec = kinkhistmanager::makeKinkHistSpecMap(confSigmaBinning);
135-
pairTrackSigmaBuilder.init(&hRegistry, trackSelection, sigmaSelection, confCpr, confMixing, confPairBinning, confPairCuts, colHistSpec, trackHistSpec, sigmaHistSpec, chaDauSpec, pairHistSpec, cprHistSpec);
153+
auto pairTrackSigmaHistSpec = pairhistmanager::makePairHistSpecMap(confPairBinning);
154+
pairTrackSigmaBuilder.init(&hRegistry, trackSelection, sigmaSelection, confCpr, confMixing, confPairBinning, confPairCuts, colHistSpec, trackHistSpec, sigmaHistSpec, chaDauSpec, pairTrackSigmaHistSpec, cprHistSpec);
155+
}
156+
157+
// setup for sigma plus
158+
if (doprocessSigmaPlusSameEvent || doprocessSigmaPlusMixedEvent) {
159+
auto sigmaplusHistSpec = kinkhistmanager::makeKinkHistSpecMap(confSigmaPlusBinning);
160+
auto pairTrackSigmaPlusHistSpec = pairhistmanager::makePairHistSpecMap(confPairBinning);
161+
pairTrackSigmaPlusBuilder.init(&hRegistry, trackSelection, sigmaPlusSelection, confCpr, confMixing, confPairBinning, confPairCuts, colHistSpec, trackHistSpec, sigmaplusHistSpec, chaDauSpec, pairTrackSigmaPlusHistSpec, cprHistSpec);
162+
}
163+
164+
if (((doprocessSigmaSameEvent || doprocessSigmaMixedEvent) + (doprocessSigmaPlusSameEvent || doprocessSigmaPlusMixedEvent)) > 1) {
165+
LOG(fatal) << "Can only process sigma-tracks Or sigmaplus-tracks";
136166
}
137167
};
138168

@@ -147,6 +177,18 @@ struct FemtoPairTrackKink {
147177
pairTrackSigmaBuilder.processMixedEvent(cols, tracks, trackPartition, sigmaPartition, cache, mixBinsVtxMult, mixBinsVtxCent, mixBinsVtxMultCent);
148178
}
149179
PROCESS_SWITCH(FemtoPairTrackKink, processSigmaMixedEvent, "Enable processing mixed event processing for tracks and sigmas", true);
180+
//
181+
void processSigmaPlusSameEvent(FilteredCollision const& col, Tracks const& tracks, SigmaPlus const& sigmaplus)
182+
{
183+
pairTrackSigmaPlusBuilder.processSameEvent(col, tracks, trackPartition, sigmaplus, sigmaPlusPartition, cache);
184+
}
185+
PROCESS_SWITCH(FemtoPairTrackKink, processSigmaPlusSameEvent, "Enable processing same event processing for tracks and sigma plus", false);
186+
187+
void processSigmaPlusMixedEvent(FilteredCollisions const& cols, Tracks const& tracks, SigmaPlus const& /*sigmaplus*/)
188+
{
189+
pairTrackSigmaPlusBuilder.processMixedEvent(cols, tracks, trackPartition, sigmaPlusPartition, cache, mixBinsVtxMult, mixBinsVtxCent, mixBinsVtxMultCent);
190+
}
191+
PROCESS_SWITCH(FemtoPairTrackKink, processSigmaPlusMixedEvent, "Enable processing mixed event processing for tracks and sigma plus", false);
150192
};
151193

152194
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)