Skip to content

Commit ecee2d9

Browse files
hfribertHenrik Fribert
andauthored
[PWGCF] Femto: Addition of SigmaPlus variables in output tables (#18496)
Co-authored-by: Henrik Fribert <ge35huh@nidoking.ktas.ph.tum.de>
1 parent e798c64 commit ecee2d9

3 files changed

Lines changed: 105 additions & 9 deletions

File tree

‎PWGCF/Femto/Core/kinkBuilder.h‎

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ class KinkBuilder
554554
mProduceSigmaPlus = utils::enableTable("FSigmaPlus_001", table.produceSigmaPlus.value, initContext);
555555
mProduceLiteSigmaPlus = utils::enableTable("FLiteSigmaPlus_001", table.produceLiteSigmaPlus.value, initContext);
556556
mProduceSigmaPlusMasks = utils::enableTable("FSigmaPlusMasks_001", table.produceSigmaPlusMasks.value, initContext);
557-
mProduceSigmaPlusExtras = utils::enableTable("FSigmaPlusExtras_001", table.produceSigmaPlusExtras.value, initContext);
557+
mProduceSigmaPlusExtras = utils::enableTable("FSigmaPlusExtras_002", table.produceSigmaPlusExtras.value, initContext);
558558

559559
if (mProduceSigmaPlus && mProduceLiteSigmaPlus) {
560560
LOG(fatal) << "FSigmaPlus and FLiteSigmaPlus are mutually exclusive -- enable only one. "
@@ -615,7 +615,8 @@ class KinkBuilder
615615
fillSigma(collisionBuilder, kinkProducts, kink, daughterIndex);
616616
}
617617
if constexpr (modes::isEqual(kinkType, modes::Kink::kSigmaPlus)) {
618-
fillSigmaPlus(collisionBuilder, kinkProducts, kink, daughterIndex);
618+
auto mother = kink.template trackMoth_as<T7>();
619+
fillSigmaPlus(collisionBuilder, kinkProducts, kink, daughter, mother, daughterIndex);
619620
}
620621
}
621622
}
@@ -651,7 +652,8 @@ class KinkBuilder
651652
mcBuilder.template fillMcSigmaWithLabel<system>(daughter, mcParticles, mcCols, mcProducts);
652653
}
653654
if constexpr (modes::isEqual(kinkType, modes::Kink::kSigmaPlus)) {
654-
fillSigmaPlus(collisionBuilder, kinkProducts, kink, daughterIndex);
655+
auto mother = kink.template trackMoth_as<T8>();
656+
fillSigmaPlus(collisionBuilder, kinkProducts, kink, daughter, mother, daughterIndex);
655657
mcBuilder.template fillMcSigmaPlusWithLabel<system>(daughter, mcParticles, mcCols, mcProducts);
656658
}
657659
}
@@ -695,8 +697,8 @@ class KinkBuilder
695697
}
696698
}
697699

698-
template <typename T1, typename T2, typename T3>
699-
void fillSigmaPlus(T1& collisionBuilder, T2& kinkProducts, T3 const& kink, int64_t daughterIndex)
700+
template <typename T1, typename T2, typename T3, typename T4, typename T5>
701+
void fillSigmaPlus(T1& collisionBuilder, T2& kinkProducts, T3 const& kink, T4 const& daughter, T5 const& mother, int64_t daughterIndex)
700702
{
701703
// Mass is calculated from original momentum components stored in kink table
702704
float mass = kink.mSigmaPlus();
@@ -728,7 +730,13 @@ class KinkBuilder
728730
kink.xDecVtx(),
729731
kink.yDecVtx(),
730732
kink.zDecVtx(),
731-
mKinkSelection.getKinkTransRadius());
733+
mKinkSelection.getKinkTransRadius(),
734+
kink.dcaKinkTopo(),
735+
daughter.tpcNSigmaPr(),
736+
daughter.tpcNSigmaPi(),
737+
daughter.tofNSigmaPr(),
738+
kink.ptMoth(),
739+
mother.itsClusterSizes());
732740
}
733741
}
734742

@@ -759,6 +767,7 @@ struct KinkBuilderDerivedToDerivedProducts : o2::framework::ProducesGroup {
759767
o2::framework::Produces<o2::aod::StoredFSigmaMasks> producedSigmaMasks;
760768
o2::framework::Produces<o2::aod::StoredFSigmaPlus> producedSigmaPluses;
761769
o2::framework::Produces<o2::aod::StoredFSigmaPlusMasks> producedSigmaPlusMasks;
770+
o2::framework::Produces<o2::aod::StoredFSigmaPlusExtras> producedSigmaPlusExtras;
762771
};
763772

764773
class KinkBuilderDerivedToDerived
@@ -843,6 +852,7 @@ class KinkBuilderDerivedToDerived
843852
sigmaPlus.mass(),
844853
chaDaughterIndex);
845854
newSigmaPlusTable.producedSigmaPlusMasks(sigmaPlus.mask());
855+
fillSigmaPlusExtensions(sigmaPlus, newSigmaPlusTable);
846856
}
847857
}
848858

@@ -894,11 +904,32 @@ class KinkBuilderDerivedToDerived
894904
sigmaPlus.mass(),
895905
chaDaughterIndex);
896906
newSigmaPlusTable.producedSigmaPlusMasks(sigmaPlus.mask());
907+
fillSigmaPlusExtensions(sigmaPlus, newSigmaPlusTable);
897908
mcBuilder.fillSigmaPlusWithLabel(sigmaPlus, mcCols, mcParticles, mcMothers, mcPartonicMothers, mcProducts);
898909
}
899910
}
900911

901912
private:
913+
template <typename T1, typename T2>
914+
void fillSigmaPlusExtensions(T1 const& sigmaPlus, T2& newSigmaPlusTable)
915+
{
916+
if constexpr (requires(T1 t) { t.transRadius(); }) {
917+
newSigmaPlusTable.producedSigmaPlusExtras(sigmaPlus.kinkAngle(),
918+
sigmaPlus.dcaDaugToPV(),
919+
sigmaPlus.dcaMothToPV(),
920+
sigmaPlus.decayVtxX(),
921+
sigmaPlus.decayVtxY(),
922+
sigmaPlus.decayVtxZ(),
923+
sigmaPlus.transRadius(),
924+
sigmaPlus.dcaKinkTopo(),
925+
sigmaPlus.dauTpcNSigmaPr(),
926+
sigmaPlus.dauTpcNSigmaPi(),
927+
sigmaPlus.dauTofNSigmaPr(),
928+
sigmaPlus.ptOriginal(),
929+
sigmaPlus.itsClusterSizes());
930+
}
931+
}
932+
902933
int mLimitSigma = 0;
903934
int mLimitSigmaPlus = 0;
904935
};

‎PWGCF/Femto/DataModel/FemtoTables.h‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1014,6 +1014,11 @@ DECLARE_SOA_COLUMN(DecayVtxX, decayVtxX, float); //! x coordinate of decay v
10141014
DECLARE_SOA_COLUMN(DecayVtxY, decayVtxY, float); //! y coordinate of decay vertex (relative to PV)
10151015
DECLARE_SOA_COLUMN(DecayVtxZ, decayVtxZ, float); //! z coordinate of decay vertex (relative to PV)
10161016
DECLARE_SOA_COLUMN(TransRadius, transRadius, float); //! Transverse decay radius from PV
1017+
DECLARE_SOA_COLUMN(DcaKinkTopo, dcaKinkTopo, float);
1018+
DECLARE_SOA_COLUMN(DauTpcNSigmaPr, dauTpcNSigmaPr, float);
1019+
DECLARE_SOA_COLUMN(DauTpcNSigmaPi, dauTpcNSigmaPi, float);
1020+
DECLARE_SOA_COLUMN(DauTofNSigmaPr, dauTofNSigmaPr, float);
1021+
DECLARE_SOA_COLUMN(PtOriginal, ptOriginal, float);
10171022

10181023
// id column for charged daughter track
10191024
DECLARE_SOA_INDEX_COLUMN_FULL(ChaDau, chaDau, int32_t, FTracks, "_ChaDau"); //!
@@ -1167,7 +1172,23 @@ DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmaPlusExtras_001, "FSIGMAPLUSEXTRAS", 1,
11671172
femtokinks::DecayVtxZ,
11681173
femtokinks::TransRadius);
11691174

1170-
using FSigmaPlusExtras = FSigmaPlusExtras_001;
1175+
DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmaPlusExtras_002, "FSIGMAPLUSEXTRAS", 2,
1176+
femtokinks::KinkAngle,
1177+
femtokinks::DcaDaugToPV,
1178+
femtokinks::DcaMothToPV,
1179+
femtokinks::DecayVtxX,
1180+
femtokinks::DecayVtxY,
1181+
femtokinks::DecayVtxZ,
1182+
femtokinks::TransRadius,
1183+
femtokinks::DcaKinkTopo,
1184+
femtokinks::DauTpcNSigmaPr,
1185+
femtokinks::DauTpcNSigmaPi,
1186+
femtokinks::DauTofNSigmaPr,
1187+
femtokinks::PtOriginal,
1188+
femtotracks::ItsClusterSizes);
1189+
1190+
using FSigmaPlusExtras = FSigmaPlusExtras_002;
1191+
using StoredFSigmaPlusExtras = StoredFSigmaPlusExtras_002;
11711192

11721193
namespace femtocascades
11731194
{

‎PWGCF/Femto/TableProducer/femtoProducerDerivedToDerived.cxx‎

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,12 @@ struct FemtoProducerDerivedToDerived {
5454
using FemtoOmegas = o2::soa::Join<o2::aod::FOmegas, o2::aod::FOmegaMasks>;
5555
using FemtoSigma = o2::soa::Join<o2::aod::FSigmas, o2::aod::FSigmaMasks>;
5656
using FemtoSigmaPlus = o2::soa::Join<o2::aod::FSigmaPlus, o2::aod::FSigmaPlusMasks>;
57+
using FemtoSigmaPlusExtended = o2::soa::Join<FemtoSigmaPlus, o2::aod::FSigmaPlusExtras>;
5758

5859
using FemtoMcTracks = o2::soa::Join<FemtoTracks, o2::aod::FTrackLabels>;
5960
using FemtoMcSigma = o2::soa::Join<FemtoSigma, o2::aod::FSigmaLabels>;
6061
using FemtoMcSigmaPlus = o2::soa::Join<FemtoSigmaPlus, o2::aod::FSigmaPlusLabels>;
62+
using FemtoMcSigmaPlusExtended = o2::soa::Join<FemtoSigmaPlusExtended, o2::aod::FSigmaPlusLabels>;
6163
using FemtoMcParticles = o2::soa::Join<o2::aod::FMcParticles, o2::aod::FMcMotherLabels>;
6264

6365
o2::framework::SliceCache cache;
@@ -121,6 +123,8 @@ struct FemtoProducerDerivedToDerived {
121123
kinkbuilder::ConfSigmaPlusSelection1 sigmaPlusSelection1;
122124
o2::framework::Partition<FemtoSigmaPlus> sigmaPlusPartition = MAKE_SIGMAPLUS_PARTITION(sigmaPlusSelection1);
123125
o2::framework::Preslice<FemtoSigmaPlus> perColSigmaPlus = o2::aod::femtobase::stored::fColId;
126+
o2::framework::Partition<FemtoSigmaPlusExtended> sigmaPlusExtendedPartition = MAKE_SIGMAPLUS_PARTITION(sigmaPlusSelection1);
127+
o2::framework::Preslice<FemtoSigmaPlusExtended> perColSigmaPlusExtended = o2::aod::femtobase::stored::fColId;
124128

125129
// cascade builder
126130
cascadebuilder::CascadeBuilderDerivedToDerived cascadeBuilder;
@@ -149,6 +153,8 @@ struct FemtoProducerDerivedToDerived {
149153

150154
o2::framework::Partition<FemtoMcSigmaPlus> mcSigmaPlusPartition = MAKE_SIGMAPLUS_PARTITION(sigmaPlusSelection1);
151155
o2::framework::Preslice<FemtoMcSigmaPlus> perColMcSigmaPlus = o2::aod::femtobase::stored::fColId;
156+
o2::framework::Partition<FemtoMcSigmaPlusExtended> mcSigmaPlusExtendedPartition = MAKE_SIGMAPLUS_PARTITION(sigmaPlusSelection1);
157+
o2::framework::Preslice<FemtoMcSigmaPlusExtended> perColMcSigmaPlusExtended = o2::aod::femtobase::stored::fColId;
152158

153159
void init(o2::framework::InitContext& /*context*/)
154160
{
@@ -158,10 +164,10 @@ struct FemtoProducerDerivedToDerived {
158164
static_cast<int>(doprocessLambdas) +
159165
static_cast<int>(doprocessTracksXis) + static_cast<int>(doprocessTracksOmegas) +
160166
static_cast<int>(doprocessTracksK0shorts) + static_cast<int>(doprocessTracksSigma) +
161-
static_cast<int>(doprocessTracksSigmaPlus) +
167+
static_cast<int>(doprocessTracksSigmaPlus) + static_cast<int>(doprocessTracksSigmaPlusExtended) +
162168
static_cast<int>(doprocessTracksRho0) + static_cast<int>(doprocessTracksPhi) +
163169
static_cast<int>(doprocessTracksMc) + static_cast<int>(doprocessTracksSigmaMc) +
164-
static_cast<int>(doprocessTracksSigmaPlusMc);
170+
static_cast<int>(doprocessTracksSigmaPlusMc) + static_cast<int>(doprocessTracksSigmaPlusExtendedMc);
165171
if (activeProcesses != 1) {
166172
LOG(fatal) << "Exactly one process function must be activated (got " << activeProcesses << ").";
167173
}
@@ -292,6 +298,18 @@ struct FemtoProducerDerivedToDerived {
292298
}
293299
PROCESS_SWITCH(FemtoProducerDerivedToDerived, processTracksSigmaPlus, "Process sigmaPlus and tracks", false);
294300

301+
void processTracksSigmaPlusExtended(FilteredFemtoCollision const& col, FemtoTracks const& tracks, FemtoSigmaPlusExtended const& sigmaplus)
302+
{
303+
if (trackBuilder.collisionHasTooFewTracks(col, tracks, trackPartition1, trackPartition2, cache) || kinkBuilder.collisionHasTooFewSigmaPlus(col, sigmaplus, sigmaPlusExtendedPartition, cache)) {
304+
return;
305+
}
306+
trackBuilder.reset(tracks);
307+
collisionBuilder.processCollision(col, collisionBuilderProducts);
308+
trackBuilder.processTracks(col, tracks, trackPartition1, trackPartition2, cache, trackBuilderProducts, collisionBuilderProducts);
309+
kinkBuilder.processSigmaPlus(col, sigmaplus, tracks, sigmaPlusExtendedPartition, trackBuilder, cache, kinkBuilderProducts, trackBuilderProducts, collisionBuilderProducts);
310+
}
311+
PROCESS_SWITCH(FemtoProducerDerivedToDerived, processTracksSigmaPlusExtended, "Process sigmaPlus (with SigmaPlusExtras) and tracks", false);
312+
295313
void processTracksRho0(FilteredFemtoCollision const& col, FemtoTracks const& tracks, FemtoRho0s const& rho0s)
296314
{
297315
if (trackBuilder.collisionHasTooFewTracks(col, tracks, trackPartition1, trackPartition2, cache) || resonanceBuilder.collisionHasTooFewRho0s(col, rho0s, rho0Partition, cache)) {
@@ -396,6 +414,32 @@ struct FemtoProducerDerivedToDerived {
396414
}
397415
}
398416
PROCESS_SWITCH(FemtoProducerDerivedToDerived, processTracksSigmaPlusMc, "Process sigmaPlus and tracks with MC information", false);
417+
418+
void processTracksSigmaPlusExtendedMc(FilteredFemtoMcCollisions const& cols,
419+
FemtoMcTracks const& tracks,
420+
FemtoMcSigmaPlusExtended const& sigmaplus,
421+
o2::aod::FMcCols const& mcCols,
422+
FemtoMcParticles const& mcParticles,
423+
o2::aod::FMcMothers const& mcMothers,
424+
o2::aod::FMcPartMoths const& mcPartonicMothers)
425+
{
426+
mcBuilder.reset(mcCols, mcParticles);
427+
428+
for (auto const& col : cols) {
429+
if (trackBuilder.collisionHasTooFewTracks(col, tracks, mcTrackPartition1, mcTrackPartition2, cache) || kinkBuilder.collisionHasTooFewSigmaPlus(col, sigmaplus, mcSigmaPlusExtendedPartition, cache)) {
430+
continue;
431+
}
432+
trackBuilder.reset(tracks);
433+
collisionBuilder.processCollision(col, collisionBuilderProducts);
434+
mcBuilder.fillCollisionWithLabel(col, mcCols, mcBuilderProducts);
435+
trackBuilder.processTracksWithMc(col, tracks, mcTrackPartition1, mcTrackPartition2, cache,
436+
trackBuilderProducts, collisionBuilderProducts,
437+
mcBuilder, mcCols, mcParticles, mcMothers, mcPartonicMothers, mcBuilderProducts);
438+
kinkBuilder.processSigmaPlusWithMc(col, sigmaplus, tracks, mcSigmaPlusExtendedPartition, trackBuilder, cache, kinkBuilderProducts, trackBuilderProducts, collisionBuilderProducts,
439+
mcBuilder, mcCols, mcParticles, mcMothers, mcPartonicMothers, mcBuilderProducts);
440+
}
441+
}
442+
PROCESS_SWITCH(FemtoProducerDerivedToDerived, processTracksSigmaPlusExtendedMc, "Process sigmaPlus (with SigmaPlusExtras) and tracks with MC information", false);
399443
};
400444

401445
o2::framework::WorkflowSpec defineDataProcessing(o2::framework::ConfigContext const& context)

0 commit comments

Comments
 (0)