Skip to content

Commit 50639d1

Browse files
author
Henrik Fribert
committed
Feat: add Sigma particles to femto framework
1 parent e6a1d6e commit 50639d1

File tree

10 files changed

+994
-8
lines changed

10 files changed

+994
-8
lines changed

PWGCF/Femto/Core/dataTypes.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ using TrackType = uint16_t;
3535
using V0MaskType = uint16_t;
3636
using V0Type = uint8_t;
3737

38+
// datatypes for kinks
39+
using KinkMaskType = uint32_t;
40+
using KinkType = uint8_t;
41+
3842
// datatypes for two track resonances
3943
using TwoTrackResonanceMaskType = uint32_t;
4044
// two track resonance types

PWGCF/Femto/Core/kinkBuilder.h

Lines changed: 425 additions & 0 deletions
Large diffs are not rendered by default.

PWGCF/Femto/Core/kinkHistManager.h

Lines changed: 289 additions & 0 deletions
Large diffs are not rendered by default.

PWGCF/Femto/Core/modes.h

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ enum class Track : o2::aod::femtodatatypes::TrackType {
6969
kPrimaryTrack,
7070
kV0Daughter,
7171
kCascadeBachelor,
72-
kResonanceDaughter
72+
kResonanceDaughter,
73+
kKinkDaughter
7374
};
7475

7576
enum class V0 : o2::aod::femtodatatypes::V0Type {
@@ -78,6 +79,10 @@ enum class V0 : o2::aod::femtodatatypes::V0Type {
7879
kK0short
7980
};
8081

82+
enum class Kink : o2::aod::femtodatatypes::KinkType {
83+
kSigma
84+
};
85+
8186
enum class Cascade : o2::aod::femtodatatypes::CascadeType {
8287
kXi,
8388
kOmega
@@ -95,14 +100,16 @@ enum class Pairs : o2::aod::femtodatatypes::PairType {
95100
kTrackTrack,
96101
kTrackV0,
97102
kTrackResonance,
98-
kTrackCascade
103+
kTrackCascade,
104+
kTrackKink
99105
};
100106

101107
enum class TrackPairs : o2::aod::femtodatatypes::PairType {
102108
kTrackTrack,
103109
kTrackPosDaughter,
104110
kTrackNegDaughter,
105-
kTrackBachelor
111+
kTrackBachelor,
112+
kTrackChaDaughter
106113
};
107114

108115
}; // namespace modes

PWGCF/Femto/Core/partitions.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,16 @@
110110
(femtobase::stored::mass < selection.massMax) && \
111111
ncheckbit(femtocascades::mask, selection.mask)
112112

113+
#define MAKE_SIGMA_PARTITION(selection) \
114+
ifnode(selection.sign.node() > 0, femtobase::stored::signedPt > 0.f, femtobase::stored::signedPt < 0.f) && \
115+
(nabs(femtobase::stored::signedPt) > selection.ptMin) && \
116+
(nabs(femtobase::stored::signedPt) < selection.ptMax) && \
117+
(femtobase::stored::eta > selection.etaMin) && \
118+
(femtobase::stored::eta < selection.etaMax) && \
119+
(femtobase::stored::phi > selection.phiMin) && \
120+
(femtobase::stored::phi < selection.phiMax) && \
121+
(femtobase::stored::mass > selection.massMin) && \
122+
(femtobase::stored::mass < selection.massMax) && \
123+
ncheckbit(femtokinks::mask, selection.mask)
124+
113125
#endif // PWGCF_FEMTO_CORE_PARTITIONS_H_

PWGCF/Femto/Core/trackHistManager.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,16 +129,19 @@ constexpr const char PrefixV0NegDauBinning[] = "V0NegDauBinning";
129129
constexpr const char PrefixCascadePosDauBinning[] = "CascadePosDauBinning";
130130
constexpr const char PrefixCascadeNegDauBinning[] = "CascadeNegDauBinning";
131131
constexpr const char PrefixCascadeBachelorBinning[] = "CascadeBachelorBinning";
132+
constexpr const char PrefixKinkChaDauBinning[] = "KinkChaDauBinning";
132133

133134
using ConfTrackBinning1 = ConfTrackBinning<PrefixTrackBinning1>;
134135
using ConfTrackBinning2 = ConfTrackBinning<PrefixTrackBinning2>;
135136
using ConfResonancePosDauBinning = ConfTrackBinning<PrefixResonancePosDauBinning>;
136137
using ConfResonanceNegDauBinning = ConfTrackBinning<PrefixResonanceNegDauBinning>;
137138
using ConfV0PosDauBinning = ConfTrackBinning<PrefixV0PosDauBinning>;
138139
using ConfV0NegDauBinning = ConfTrackBinning<PrefixV0NegDauBinning>;
140+
using ConfKinkChaDauBinning = ConfTrackBinning<PrefixKinkChaDauBinning>;
139141
using ConfCascadePosDauBinning = ConfTrackBinning<PrefixCascadePosDauBinning>;
140142
using ConfCascadeNegDauBinning = ConfTrackBinning<PrefixCascadeNegDauBinning>;
141143
using ConfCascadeBachelorBinning = ConfTrackBinning<PrefixCascadeBachelorBinning>;
144+
using ConfKinkChaDauBinning = ConfTrackBinning<PrefixKinkChaDauBinning>;
142145

143146
template <const char* Prefix>
144147
struct ConfTrackQaBinning : o2::framework::ConfigurableGroup {
@@ -203,6 +206,7 @@ constexpr const char PrefixV0NegDauQaBinning[] = "V0NegDauQaBinning";
203206
constexpr const char PrefixCascadePosDauQaBinning[] = "CascadePosDauQaBinning";
204207
constexpr const char PrefixCascadeNegDauQaBinning[] = "CascadeNegDauQaBinning";
205208
constexpr const char PrefixCascadeBachelorQaBinning[] = "CascadeBachelorQaBinning";
209+
constexpr const char PrefixKinkChaDauQaBinning[] = "KinkChaDauQaBinning";
206210

207211
using ConfTrackQaBinning1 = ConfTrackQaBinning<PrefixTrackQaBinning1>;
208212
using ConfTrackQaBinning2 = ConfTrackQaBinning<PrefixTrackQaBinning2>;
@@ -213,6 +217,7 @@ using ConfV0NegDauQaBinning = ConfTrackQaBinning<PrefixV0NegDauQaBinning>;
213217
using ConfCascadePosDauQaBinning = ConfTrackQaBinning<PrefixCascadePosDauQaBinning>;
214218
using ConfCascadeNegDauQaBinning = ConfTrackQaBinning<PrefixCascadeNegDauQaBinning>;
215219
using ConfCascadeBachelorQaBinning = ConfTrackQaBinning<PrefixCascadeBachelorQaBinning>;
220+
using ConfKinkChaDauQaBinning = ConfTrackQaBinning<PrefixKinkChaDauQaBinning>;
216221

217222
// must be in sync with enum TrackVariables
218223
// the enum gives the correct index in the array
@@ -374,6 +379,9 @@ constexpr char PrefixCascadePosDaughterQa[] = "CascadePosDauQa/";
374379
constexpr char PrefixCascadeNegDaughterQa[] = "CascadeNegDauQa/";
375380
constexpr char PrefixCascadeBachelorQa[] = "CascadeBachelorQa/";
376381

382+
constexpr char PrefixKinkChaDaughter[] = "KinkChaDau/";
383+
constexpr char PrefixKinkChaDaughterQa[] = "KinkChaDauQa/";
384+
377385
constexpr std::string_view AnalysisDir = "Kinematics/";
378386
constexpr std::string_view QaDir = "QA/";
379387
constexpr std::string_view PidDir = "PID/";

PWGCF/Femto/DataModel/FemtoTables.h

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,57 @@ DECLARE_SOA_TABLE_STAGED_VERSIONED(FK0shortExtras_001, "FK0SHORTEXTRA", 1, //! k
488488

489489
using FK0shortExtras = FK0shortExtras_001;
490490

491+
namespace femtokinks
492+
{
493+
// columns for bit masks
494+
DECLARE_SOA_COLUMN(Mask, mask, femtodatatypes::KinkMaskType); //! Bitmask for kink selections
495+
496+
// columns for debug information
497+
DECLARE_SOA_COLUMN(KinkAngle, kinkAngle, float); //! Kink angle between mother and charged daughter at decay vertex
498+
DECLARE_SOA_COLUMN(DcaMothToPV, dcaMothToPV, float); //! DCA of the mother track to the primary vertex
499+
DECLARE_SOA_COLUMN(DcaDaugToPV, dcaDaugToPV, float); //! DCA of the charged daughter track to the primary vertex
500+
DECLARE_SOA_COLUMN(DecayVtxX, decayVtxX, float); //! x coordinate of decay vertex (relative to PV)
501+
DECLARE_SOA_COLUMN(DecayVtxY, decayVtxY, float); //! y coordinate of decay vertex (relative to PV)
502+
DECLARE_SOA_COLUMN(DecayVtxZ, decayVtxZ, float); //! z coordinate of decay vertex (relative to PV)
503+
DECLARE_SOA_COLUMN(TransRadius, transRadius, float); //! Transverse decay radius from PV
504+
505+
// id column for charged daughter track
506+
DECLARE_SOA_INDEX_COLUMN_FULL(ChaDau, chaDau, int32_t, FTracks, "_ChaDau"); //!
507+
} // namespace femtokinks
508+
509+
// table for basic sigma minus information
510+
DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmas_001, "FSIGMA", 1,
511+
o2::soa::Index<>,
512+
femtobase::stored::CollisionId, // use sign to differentiate between sigma minus (-1) and anti sigma minus (+1)
513+
femtobase::stored::SignedPt,
514+
femtobase::stored::Eta,
515+
femtobase::stored::Phi,
516+
femtobase::stored::Mass,
517+
femtokinks::ChaDauId,
518+
femtobase::dynamic::Sign<femtobase::stored::SignedPt>,
519+
femtobase::dynamic::Pt<femtobase::stored::SignedPt>,
520+
femtobase::dynamic::P<femtobase::stored::SignedPt, femtobase::stored::Eta>,
521+
femtobase::dynamic::Px<femtobase::stored::SignedPt, femtobase::stored::Eta>,
522+
femtobase::dynamic::Py<femtobase::stored::SignedPt, femtobase::stored::Eta>,
523+
femtobase::dynamic::Pz<femtobase::stored::SignedPt, femtobase::stored::Eta>,
524+
femtobase::dynamic::Theta<femtobase::stored::Eta>);
525+
using FSigmas = FSigmas_001;
526+
527+
DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmaMasks_001, "FSIGMAMASKS", 1,
528+
femtokinks::Mask);
529+
using FSigmaMasks = FSigmaMasks_001;
530+
531+
DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmaExtras_001, "FSIGMAEXTRAS", 1,
532+
femtokinks::KinkAngle,
533+
femtokinks::DcaDaugToPV,
534+
femtokinks::DcaMothToPV,
535+
femtokinks::DecayVtxX,
536+
femtokinks::DecayVtxY,
537+
femtokinks::DecayVtxZ,
538+
femtokinks::TransRadius);
539+
540+
using FSigmaExtras = FSigmaExtras_001;
541+
491542
namespace femtocascades
492543
{
493544
// columns for cascade bit masks

PWGCF/Femto/TableProducer/femtoProducer.cxx

Lines changed: 70 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
#include "PWGCF/Femto/Core/trackBuilder.h"
2020
#include "PWGCF/Femto/Core/twoTrackResonanceBuilder.h"
2121
#include "PWGCF/Femto/Core/v0Builder.h"
22+
#include "PWGCF/Femto/Core/kinkBuilder.h"
2223
#include "PWGLF/DataModel/LFStrangenessTables.h"
24+
#include "PWGLF/DataModel/LFKinkDecayTables.h"
2325

2426
#include "Common/DataModel/Centrality.h"
2527
#include "Common/DataModel/EventSelection.h"
@@ -70,6 +72,8 @@ using Run3PpVzeros = V0Datas;
7072

7173
using Run3PpCascades = CascDatas;
7274

75+
using Run3PpKinks = KinkCands;
76+
7377
} // namespace consumeddata
7478
} // namespace o2::analysis::femto
7579

@@ -116,6 +120,13 @@ struct FemtoProducer {
116120
cascadebuilder::ConfOmegaBits confOmegaBits;
117121
cascadebuilder::CascadeBuilder<modes::Cascade::kOmega> omegaBuilder;
118122

123+
// kink builder
124+
kinkbuilder::KinkBuilderProducts kinkBuilderProducts;
125+
kinkbuilder::ConfKinkTables confKinkTables;
126+
kinkbuilder::ConfKinkFilters confKinkFilters;
127+
kinkbuilder::ConfSigmaBits confSigmaBits;
128+
kinkbuilder::KinkBuilder<modes::Kink::kSigma> sigmaBuilder;
129+
119130
// resonance daughter filters and partitions
120131
twotrackresonancebuilder::ConfTwoTrackResonanceDaughterFilters confResonanceDaughterFilters;
121132
// caching and preslicing
@@ -191,6 +202,9 @@ struct FemtoProducer {
191202
lambdaBuilder.init(confLambdaBits, confV0Filters, confV0Tables, context);
192203
antilambdaBuilder.init(confLambdaBits, confV0Filters, confV0Tables, context);
193204

205+
// configure kink builder
206+
sigmaBuilder.init(confSigmaBits, confKinkFilters, confKinkTables, context);
207+
194208
// cascade selections
195209
xiBuilder.init(confXiBits, confCascadeFilters, confCascadeTables, context);
196210
omegaBuilder.init(confOmegaBits, confCascadeFilters, confCascadeTables, context);
@@ -201,11 +215,14 @@ struct FemtoProducer {
201215
kstar0Builder.init(confKstar0Bits, confKstarFilters, confResonanceDaughterFilters, confTwoTrackResonanceTables, context);
202216
kstar0barBuilder.init(confKstar0Bits, confKstarFilters, confResonanceDaughterFilters, confTwoTrackResonanceTables, context);
203217

204-
if ((xiBuilder.fillAnyTable() || omegaBuilder.fillAnyTable()) && !doprocessTracksV0sCascadesRun3pp) {
205-
LOG(fatal) << "At least one cascade tabel is enabled, but wrong process function is enabled. Breaking...";
218+
if ((xiBuilder.fillAnyTable() || omegaBuilder.fillAnyTable()) && (!doprocessTracksV0sCascadesRun3pp && !doprocessTracksV0sCascadesKinksRun3pp)) {
219+
LOG(fatal) << "At least one cascade table is enabled, but wrong process function is enabled. Breaking...";
220+
}
221+
if ((lambdaBuilder.fillAnyTable() || antilambdaBuilder.fillAnyTable() || k0shortBuilder.fillAnyTable()) && (!doprocessTracksV0sCascadesRun3pp && !doprocessTracksV0sRun3pp && !doprocessTracksV0sCascadesKinksRun3pp)) {
222+
LOG(info) << "At least one v0 table is enabled, but wrong process function is enabled. Breaking...";
206223
}
207-
if ((lambdaBuilder.fillAnyTable() || antilambdaBuilder.fillAnyTable() || k0shortBuilder.fillAnyTable()) && (!doprocessTracksV0sCascadesRun3pp && !doprocessTracksV0sRun3pp)) {
208-
LOG(info) << "At least one v0 tabel is enbaled, but wrong process function is enabled. Breaking...";
224+
if (sigmaBuilder.fillAnyTable() && !doprocessTracksKinksRun3pp && !doprocessTracksV0sCascadesKinksRun3pp) {
225+
LOG(fatal) << "At least one kink table is enabled, but wrong process function is enabled. Breaking...";
209226
}
210227
}
211228

@@ -244,6 +261,14 @@ struct FemtoProducer {
244261
k0shortBuilder.fillV0s(collisionBuilderProducts, trackBuilderProducts, v0builderProducts, v0s, tracks, trackBuilder, indexMapTracks);
245262
}
246263

264+
// add kinks
265+
template <modes::System system, typename T1, typename T2, typename T3, typename T4, typename T5>
266+
void processTracksKinks(T1 const& col, T2 const& bcs, T3 const& tracks, T4 const& tracksWithItsPid, T5 const& kinks)
267+
{
268+
processTracks<system>(col, bcs, tracks, tracksWithItsPid);
269+
sigmaBuilder.fillKinks(collisionBuilderProducts, trackBuilderProducts, kinkBuilderProducts, kinks, tracks, trackBuilder, indexMapTracks);
270+
}
271+
247272
// add cascades
248273
template <modes::System system, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
249274
void processTracksV0sCascades(T1 const& col, T2 const& bcs, T3 const& tracks, T4 const& tracksWithItsPid, T5 const& v0s, T6 const& cascades)
@@ -255,6 +280,18 @@ struct FemtoProducer {
255280
cascades, tracks, col, trackBuilder, indexMapTracks);
256281
}
257282

283+
// add kinks
284+
template <modes::System system, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
285+
void processTracksV0sCascadesKinks(T1 const& col, T2 const& bcs, T3 const& tracks, T4 const& tracksWithItsPid, T5 const& v0s, T6 const& cascades, T7 const& kinks)
286+
{
287+
processTracksV0s<system>(col, bcs, tracks, tracksWithItsPid, v0s);
288+
sigmaBuilder.fillKinks(collisionBuilderProducts, trackBuilderProducts, kinkBuilderProducts, kinks, tracks, trackBuilder, indexMapTracks);
289+
xiBuilder.fillCascades(collisionBuilderProducts, trackBuilderProducts, cascadeBuilderProducts,
290+
cascades, tracks, col, trackBuilder, indexMapTracks);
291+
omegaBuilder.fillCascades(collisionBuilderProducts, trackBuilderProducts, cascadeBuilderProducts,
292+
cascades, tracks, col, trackBuilder, indexMapTracks);
293+
}
294+
258295
// proccess functions
259296
void processTracksRun3pp(consumeddata::Run3PpCollisions::iterator const& col,
260297
BCsWithTimestamps const& bcs,
@@ -280,7 +317,20 @@ struct FemtoProducer {
280317
};
281318
PROCESS_SWITCH(FemtoProducer, processTracksV0sRun3pp, "Process tracks and v0s", false);
282319

283-
// process tracks, v0s and casacades
320+
// process tracks and kinks
321+
void processTracksKinksRun3pp(consumeddata::Run3PpCollisions::iterator const& col,
322+
BCsWithTimestamps const& bcs,
323+
consumeddata::Run3FullPidTracks const& tracks,
324+
consumeddata::Run3PpKinks const& kinks)
325+
{
326+
// its pid information is generated dynamically, so we need to add it here
327+
auto tracksWithItsPid = o2::soa::Attach<consumeddata::Run3FullPidTracks, pidits::ITSNSigmaEl, pidits::ITSNSigmaPi,
328+
pidits::ITSNSigmaKa, pidits::ITSNSigmaPr, pidits::ITSNSigmaDe, pidits::ITSNSigmaTr, pidits::ITSNSigmaHe>(tracks);
329+
processTracksKinks<modes::System::kPP_Run3>(col, bcs, tracks, tracksWithItsPid, kinks);
330+
}
331+
PROCESS_SWITCH(FemtoProducer, processTracksKinksRun3pp, "Process tracks and kinks", false);
332+
333+
// process tracks, v0s and cascades
284334
void processTracksV0sCascadesRun3pp(consumeddata::Run3PpCollisions::iterator const& col,
285335
BCsWithTimestamps const& bcs,
286336
consumeddata::Run3FullPidTracks const& tracks,
@@ -293,6 +343,21 @@ struct FemtoProducer {
293343
processTracksV0sCascades<modes::System::kPP_Run3>(col, bcs, tracks, tracksWithItsPid, v0s, cascades);
294344
}
295345
PROCESS_SWITCH(FemtoProducer, processTracksV0sCascadesRun3pp, "Provide Tracks, V0s and Cascades for Run3", false);
346+
347+
// process tracks, v0s, cascades and kinks
348+
void processTracksV0sCascadesKinksRun3pp(consumeddata::Run3PpCollisions::iterator const& col,
349+
BCsWithTimestamps const& bcs,
350+
consumeddata::Run3FullPidTracks const& tracks,
351+
consumeddata::Run3PpVzeros const& v0s,
352+
consumeddata::Run3PpCascades const& cascades,
353+
consumeddata::Run3PpKinks const& kinks)
354+
{
355+
// its pid information is generated dynamically, so we need to add it here
356+
auto tracksWithItsPid = o2::soa::Attach<consumeddata::Run3FullPidTracks, pidits::ITSNSigmaEl, pidits::ITSNSigmaPi,
357+
pidits::ITSNSigmaKa, pidits::ITSNSigmaPr, pidits::ITSNSigmaDe, pidits::ITSNSigmaTr, pidits::ITSNSigmaHe>(tracks);
358+
processTracksV0sCascadesKinks<modes::System::kPP_Run3>(col, bcs, tracks, tracksWithItsPid, v0s, cascades, kinks);
359+
}
360+
PROCESS_SWITCH(FemtoProducer, processTracksV0sCascadesKinksRun3pp, "Provide Tracks, V0s and Cascades for Run3", false);
296361
};
297362

298363
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

PWGCF/Femto/Tasks/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ o2physics_add_dpl_workflow(femto-v0-qa
2424
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
2525
COMPONENT_NAME Analysis)
2626

27+
o2physics_add_dpl_workflow(femto-kink-qa
28+
SOURCES femtoKinkQa.cxx
29+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
30+
COMPONENT_NAME Analysis)
31+
2732
o2physics_add_dpl_workflow(femto-cascade-qa
2833
SOURCES femtoCascadeQa.cxx
2934
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore

0 commit comments

Comments
 (0)