Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions PWGCF/Femto/Core/dataTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ using TrackType = uint16_t;
using V0MaskType = uint16_t;
using V0Type = uint8_t;

// datatypes for kinks
using KinkMaskType = uint32_t;
using KinkType = uint8_t;

// datatypes for two track resonances
using TwoTrackResonanceMaskType = uint32_t;
// two track resonance types
Expand Down
421 changes: 421 additions & 0 deletions PWGCF/Femto/Core/kinkBuilder.h

Large diffs are not rendered by default.

289 changes: 289 additions & 0 deletions PWGCF/Femto/Core/kinkHistManager.h

Large diffs are not rendered by default.

13 changes: 10 additions & 3 deletions PWGCF/Femto/Core/modes.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ enum class Track : o2::aod::femtodatatypes::TrackType {
kPrimaryTrack,
kV0Daughter,
kCascadeBachelor,
kResonanceDaughter
kResonanceDaughter,
kKinkDaughter
};

enum class V0 : o2::aod::femtodatatypes::V0Type {
Expand All @@ -78,6 +79,10 @@ enum class V0 : o2::aod::femtodatatypes::V0Type {
kK0short
};

enum class Kink : o2::aod::femtodatatypes::KinkType {
kSigma
};

enum class Cascade : o2::aod::femtodatatypes::CascadeType {
kXi,
kOmega
Expand All @@ -95,14 +100,16 @@ enum class Pairs : o2::aod::femtodatatypes::PairType {
kTrackTrack,
kTrackV0,
kTrackResonance,
kTrackCascade
kTrackCascade,
kTrackKink
};

enum class TrackPairs : o2::aod::femtodatatypes::PairType {
kTrackTrack,
kTrackPosDaughter,
kTrackNegDaughter,
kTrackBachelor
kTrackBachelor,
kTrackChaDaughter
};

}; // namespace modes
Expand Down
12 changes: 12 additions & 0 deletions PWGCF/Femto/Core/partitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
(femtobase::stored::eta < selection.etaMax) && \
(femtobase::stored::phi > selection.phiMin) && \
(femtobase::stored::phi < selection.phiMax) && \
ifnode(nabs(femtobase::stored::signedPt) * (nexp(femtobase::stored::eta) + nexp(-1.f * femtobase::stored::eta)) / 2.f <= selection.pidThres, \

Check failure on line 36 in PWGCF/Femto/Core/partitions.h

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
ncheckbit(femtotracks::trackMask, selection.maskLowMomentum), \
ncheckbit(femtotracks::trackMask, selection.maskHighMomentum))

Expand Down Expand Up @@ -110,4 +110,16 @@
(femtobase::stored::mass < selection.massMax) && \
ncheckbit(femtocascades::mask, selection.mask)

#define MAKE_SIGMA_PARTITION(selection) \
ifnode(selection.sign.node() > 0, femtobase::stored::signedPt > 0.f, femtobase::stored::signedPt < 0.f) && \
(nabs(femtobase::stored::signedPt) > selection.ptMin) && \
(nabs(femtobase::stored::signedPt) < selection.ptMax) && \
(femtobase::stored::eta > selection.etaMin) && \
(femtobase::stored::eta < selection.etaMax) && \
(femtobase::stored::phi > selection.phiMin) && \
(femtobase::stored::phi < selection.phiMax) && \
(femtobase::stored::mass > selection.massMin) && \
(femtobase::stored::mass < selection.massMax) && \
ncheckbit(femtokinks::mask, selection.mask)

#endif // PWGCF_FEMTO_CORE_PARTITIONS_H_
8 changes: 8 additions & 0 deletions PWGCF/Femto/Core/trackHistManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,16 +129,19 @@ constexpr const char PrefixV0NegDauBinning[] = "V0NegDauBinning";
constexpr const char PrefixCascadePosDauBinning[] = "CascadePosDauBinning";
constexpr const char PrefixCascadeNegDauBinning[] = "CascadeNegDauBinning";
constexpr const char PrefixCascadeBachelorBinning[] = "CascadeBachelorBinning";
constexpr const char PrefixKinkChaDauBinning[] = "KinkChaDauBinning";

using ConfTrackBinning1 = ConfTrackBinning<PrefixTrackBinning1>;
using ConfTrackBinning2 = ConfTrackBinning<PrefixTrackBinning2>;
using ConfResonancePosDauBinning = ConfTrackBinning<PrefixResonancePosDauBinning>;
using ConfResonanceNegDauBinning = ConfTrackBinning<PrefixResonanceNegDauBinning>;
using ConfV0PosDauBinning = ConfTrackBinning<PrefixV0PosDauBinning>;
using ConfV0NegDauBinning = ConfTrackBinning<PrefixV0NegDauBinning>;
using ConfKinkChaDauBinning = ConfTrackBinning<PrefixKinkChaDauBinning>;
using ConfCascadePosDauBinning = ConfTrackBinning<PrefixCascadePosDauBinning>;
using ConfCascadeNegDauBinning = ConfTrackBinning<PrefixCascadeNegDauBinning>;
using ConfCascadeBachelorBinning = ConfTrackBinning<PrefixCascadeBachelorBinning>;
using ConfKinkChaDauBinning = ConfTrackBinning<PrefixKinkChaDauBinning>;

template <const char* Prefix>
struct ConfTrackQaBinning : o2::framework::ConfigurableGroup {
Expand Down Expand Up @@ -203,6 +206,7 @@ constexpr const char PrefixV0NegDauQaBinning[] = "V0NegDauQaBinning";
constexpr const char PrefixCascadePosDauQaBinning[] = "CascadePosDauQaBinning";
constexpr const char PrefixCascadeNegDauQaBinning[] = "CascadeNegDauQaBinning";
constexpr const char PrefixCascadeBachelorQaBinning[] = "CascadeBachelorQaBinning";
constexpr const char PrefixKinkChaDauQaBinning[] = "KinkChaDauQaBinning";

using ConfTrackQaBinning1 = ConfTrackQaBinning<PrefixTrackQaBinning1>;
using ConfTrackQaBinning2 = ConfTrackQaBinning<PrefixTrackQaBinning2>;
Expand All @@ -213,6 +217,7 @@ using ConfV0NegDauQaBinning = ConfTrackQaBinning<PrefixV0NegDauQaBinning>;
using ConfCascadePosDauQaBinning = ConfTrackQaBinning<PrefixCascadePosDauQaBinning>;
using ConfCascadeNegDauQaBinning = ConfTrackQaBinning<PrefixCascadeNegDauQaBinning>;
using ConfCascadeBachelorQaBinning = ConfTrackQaBinning<PrefixCascadeBachelorQaBinning>;
using ConfKinkChaDauQaBinning = ConfTrackQaBinning<PrefixKinkChaDauQaBinning>;

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

constexpr char PrefixKinkChaDaughter[] = "KinkChaDau/";
constexpr char PrefixKinkChaDaughterQa[] = "KinkChaDauQa/";

constexpr std::string_view AnalysisDir = "Kinematics/";
constexpr std::string_view QaDir = "QA/";
constexpr std::string_view PidDir = "PID/";
Expand Down
51 changes: 51 additions & 0 deletions PWGCF/Femto/DataModel/FemtoTables.h
Original file line number Diff line number Diff line change
Expand Up @@ -488,6 +488,57 @@ DECLARE_SOA_TABLE_STAGED_VERSIONED(FK0shortExtras_001, "FK0SHORTEXTRA", 1, //! k

using FK0shortExtras = FK0shortExtras_001;

namespace femtokinks
{
// columns for bit masks
DECLARE_SOA_COLUMN(Mask, mask, femtodatatypes::KinkMaskType); //! Bitmask for kink selections

// columns for debug information
DECLARE_SOA_COLUMN(KinkAngle, kinkAngle, float); //! Kink angle between mother and charged daughter at decay vertex
DECLARE_SOA_COLUMN(DcaMothToPV, dcaMothToPV, float); //! DCA of the mother track to the primary vertex
DECLARE_SOA_COLUMN(DcaDaugToPV, dcaDaugToPV, float); //! DCA of the charged daughter track to the primary vertex
DECLARE_SOA_COLUMN(DecayVtxX, decayVtxX, float); //! x coordinate of decay vertex (relative to PV)
DECLARE_SOA_COLUMN(DecayVtxY, decayVtxY, float); //! y coordinate of decay vertex (relative to PV)
DECLARE_SOA_COLUMN(DecayVtxZ, decayVtxZ, float); //! z coordinate of decay vertex (relative to PV)
DECLARE_SOA_COLUMN(TransRadius, transRadius, float); //! Transverse decay radius from PV

// id column for charged daughter track
DECLARE_SOA_INDEX_COLUMN_FULL(ChaDau, chaDau, int32_t, FTracks, "_ChaDau"); //!
} // namespace femtokinks

// table for basic sigma minus information
DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmas_001, "FSIGMA", 1,
o2::soa::Index<>,
femtobase::stored::CollisionId, // use sign to differentiate between sigma minus (-1) and anti sigma minus (+1)
femtobase::stored::SignedPt,
femtobase::stored::Eta,
femtobase::stored::Phi,
femtobase::stored::Mass,
femtokinks::ChaDauId,
femtobase::dynamic::Sign<femtobase::stored::SignedPt>,
femtobase::dynamic::Pt<femtobase::stored::SignedPt>,
femtobase::dynamic::P<femtobase::stored::SignedPt, femtobase::stored::Eta>,
femtobase::dynamic::Px<femtobase::stored::SignedPt, femtobase::stored::Eta>,
femtobase::dynamic::Py<femtobase::stored::SignedPt, femtobase::stored::Eta>,
femtobase::dynamic::Pz<femtobase::stored::SignedPt, femtobase::stored::Eta>,
femtobase::dynamic::Theta<femtobase::stored::Eta>);
using FSigmas = FSigmas_001;

DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmaMasks_001, "FSIGMAMASKS", 1,
femtokinks::Mask);
using FSigmaMasks = FSigmaMasks_001;

DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmaExtras_001, "FSIGMAEXTRAS", 1,
femtokinks::KinkAngle,
femtokinks::DcaDaugToPV,
femtokinks::DcaMothToPV,
femtokinks::DecayVtxX,
femtokinks::DecayVtxY,
femtokinks::DecayVtxZ,
femtokinks::TransRadius);

using FSigmaExtras = FSigmaExtras_001;

namespace femtocascades
{
// columns for cascade bit masks
Expand Down
75 changes: 70 additions & 5 deletions PWGCF/Femto/TableProducer/femtoProducer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@

#include "PWGCF/Femto/Core/cascadeBuilder.h"
#include "PWGCF/Femto/Core/collisionBuilder.h"
#include "PWGCF/Femto/Core/kinkBuilder.h"
#include "PWGCF/Femto/Core/modes.h"
#include "PWGCF/Femto/Core/trackBuilder.h"
#include "PWGCF/Femto/Core/twoTrackResonanceBuilder.h"
#include "PWGCF/Femto/Core/v0Builder.h"
#include "PWGLF/DataModel/LFKinkDecayTables.h"
#include "PWGLF/DataModel/LFStrangenessTables.h"

#include "Common/DataModel/Centrality.h"
Expand Down Expand Up @@ -70,6 +72,8 @@ using Run3PpVzeros = V0Datas;

using Run3PpCascades = CascDatas;

using Run3PpKinks = KinkCands;

} // namespace consumeddata
} // namespace o2::analysis::femto

Expand Down Expand Up @@ -116,6 +120,13 @@ struct FemtoProducer {
cascadebuilder::ConfOmegaBits confOmegaBits;
cascadebuilder::CascadeBuilder<modes::Cascade::kOmega> omegaBuilder;

// kink builder
kinkbuilder::KinkBuilderProducts kinkBuilderProducts;
kinkbuilder::ConfKinkTables confKinkTables;
kinkbuilder::ConfKinkFilters confKinkFilters;
kinkbuilder::ConfSigmaBits confSigmaBits;
kinkbuilder::KinkBuilder<modes::Kink::kSigma> sigmaBuilder;

// resonance daughter filters and partitions
twotrackresonancebuilder::ConfTwoTrackResonanceDaughterFilters confResonanceDaughterFilters;
// caching and preslicing
Expand Down Expand Up @@ -191,6 +202,9 @@ struct FemtoProducer {
lambdaBuilder.init(confLambdaBits, confV0Filters, confV0Tables, context);
antilambdaBuilder.init(confLambdaBits, confV0Filters, confV0Tables, context);

// configure kink builder
sigmaBuilder.init(confSigmaBits, confKinkFilters, confKinkTables, context);

// cascade selections
xiBuilder.init(confXiBits, confCascadeFilters, confCascadeTables, context);
omegaBuilder.init(confOmegaBits, confCascadeFilters, confCascadeTables, context);
Expand All @@ -201,11 +215,14 @@ struct FemtoProducer {
kstar0Builder.init(confKstar0Bits, confKstarFilters, confResonanceDaughterFilters, confTwoTrackResonanceTables, context);
kstar0barBuilder.init(confKstar0Bits, confKstarFilters, confResonanceDaughterFilters, confTwoTrackResonanceTables, context);

if ((xiBuilder.fillAnyTable() || omegaBuilder.fillAnyTable()) && !doprocessTracksV0sCascadesRun3pp) {
LOG(fatal) << "At least one cascade tabel is enabled, but wrong process function is enabled. Breaking...";
if ((xiBuilder.fillAnyTable() || omegaBuilder.fillAnyTable()) && (!doprocessTracksV0sCascadesRun3pp && !doprocessTracksV0sCascadesKinksRun3pp)) {
LOG(fatal) << "At least one cascade table is enabled, but wrong process function is enabled. Breaking...";
}
if ((lambdaBuilder.fillAnyTable() || antilambdaBuilder.fillAnyTable() || k0shortBuilder.fillAnyTable()) && (!doprocessTracksV0sCascadesRun3pp && !doprocessTracksV0sRun3pp && !doprocessTracksV0sCascadesKinksRun3pp)) {
LOG(info) << "At least one v0 table is enabled, but wrong process function is enabled. Breaking...";
}
if ((lambdaBuilder.fillAnyTable() || antilambdaBuilder.fillAnyTable() || k0shortBuilder.fillAnyTable()) && (!doprocessTracksV0sCascadesRun3pp && !doprocessTracksV0sRun3pp)) {
LOG(info) << "At least one v0 tabel is enbaled, but wrong process function is enabled. Breaking...";
if (sigmaBuilder.fillAnyTable() && !doprocessTracksKinksRun3pp && !doprocessTracksV0sCascadesKinksRun3pp) {
LOG(fatal) << "At least one kink table is enabled, but wrong process function is enabled. Breaking...";
}
}

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

// add kinks
template <modes::System system, typename T1, typename T2, typename T3, typename T4, typename T5>
void processTracksKinks(T1 const& col, T2 const& bcs, T3 const& tracks, T4 const& tracksWithItsPid, T5 const& kinks)
{
processTracks<system>(col, bcs, tracks, tracksWithItsPid);
sigmaBuilder.fillKinks(collisionBuilderProducts, trackBuilderProducts, kinkBuilderProducts, kinks, tracks, trackBuilder, indexMapTracks);
}

// add cascades
template <modes::System system, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
void processTracksV0sCascades(T1 const& col, T2 const& bcs, T3 const& tracks, T4 const& tracksWithItsPid, T5 const& v0s, T6 const& cascades)
Expand All @@ -255,6 +280,18 @@ struct FemtoProducer {
cascades, tracks, col, trackBuilder, indexMapTracks);
}

// add kinks
template <modes::System system, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
void processTracksV0sCascadesKinks(T1 const& col, T2 const& bcs, T3 const& tracks, T4 const& tracksWithItsPid, T5 const& v0s, T6 const& cascades, T7 const& kinks)
{
processTracksV0s<system>(col, bcs, tracks, tracksWithItsPid, v0s);
sigmaBuilder.fillKinks(collisionBuilderProducts, trackBuilderProducts, kinkBuilderProducts, kinks, tracks, trackBuilder, indexMapTracks);
xiBuilder.fillCascades(collisionBuilderProducts, trackBuilderProducts, cascadeBuilderProducts,
cascades, tracks, col, trackBuilder, indexMapTracks);
omegaBuilder.fillCascades(collisionBuilderProducts, trackBuilderProducts, cascadeBuilderProducts,
cascades, tracks, col, trackBuilder, indexMapTracks);
}

// proccess functions
void processTracksRun3pp(consumeddata::Run3PpCollisions::iterator const& col,
BCsWithTimestamps const& bcs,
Expand All @@ -280,7 +317,20 @@ struct FemtoProducer {
};
PROCESS_SWITCH(FemtoProducer, processTracksV0sRun3pp, "Process tracks and v0s", false);

// process tracks, v0s and casacades
// process tracks and kinks
void processTracksKinksRun3pp(consumeddata::Run3PpCollisions::iterator const& col,
BCsWithTimestamps const& bcs,
consumeddata::Run3FullPidTracks const& tracks,
consumeddata::Run3PpKinks const& kinks)
{
// its pid information is generated dynamically, so we need to add it here
auto tracksWithItsPid = o2::soa::Attach<consumeddata::Run3FullPidTracks, pidits::ITSNSigmaEl, pidits::ITSNSigmaPi,
pidits::ITSNSigmaKa, pidits::ITSNSigmaPr, pidits::ITSNSigmaDe, pidits::ITSNSigmaTr, pidits::ITSNSigmaHe>(tracks);
processTracksKinks<modes::System::kPP_Run3>(col, bcs, tracks, tracksWithItsPid, kinks);
}
PROCESS_SWITCH(FemtoProducer, processTracksKinksRun3pp, "Process tracks and kinks", false);

// process tracks, v0s and cascades
void processTracksV0sCascadesRun3pp(consumeddata::Run3PpCollisions::iterator const& col,
BCsWithTimestamps const& bcs,
consumeddata::Run3FullPidTracks const& tracks,
Expand All @@ -293,6 +343,21 @@ struct FemtoProducer {
processTracksV0sCascades<modes::System::kPP_Run3>(col, bcs, tracks, tracksWithItsPid, v0s, cascades);
}
PROCESS_SWITCH(FemtoProducer, processTracksV0sCascadesRun3pp, "Provide Tracks, V0s and Cascades for Run3", false);

// process tracks, v0s, cascades and kinks
void processTracksV0sCascadesKinksRun3pp(consumeddata::Run3PpCollisions::iterator const& col,
BCsWithTimestamps const& bcs,
consumeddata::Run3FullPidTracks const& tracks,
consumeddata::Run3PpVzeros const& v0s,
consumeddata::Run3PpCascades const& cascades,
consumeddata::Run3PpKinks const& kinks)
{
// its pid information is generated dynamically, so we need to add it here
auto tracksWithItsPid = o2::soa::Attach<consumeddata::Run3FullPidTracks, pidits::ITSNSigmaEl, pidits::ITSNSigmaPi,
pidits::ITSNSigmaKa, pidits::ITSNSigmaPr, pidits::ITSNSigmaDe, pidits::ITSNSigmaTr, pidits::ITSNSigmaHe>(tracks);
processTracksV0sCascadesKinks<modes::System::kPP_Run3>(col, bcs, tracks, tracksWithItsPid, v0s, cascades, kinks);
}
PROCESS_SWITCH(FemtoProducer, processTracksV0sCascadesKinksRun3pp, "Provide Tracks, V0s and Cascades for Run3", false);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
Expand Down
5 changes: 5 additions & 0 deletions PWGCF/Femto/Tasks/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ o2physics_add_dpl_workflow(femto-v0-qa
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(femto-kink-qa
SOURCES femtoKinkQa.cxx
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(femto-cascade-qa
SOURCES femtoCascadeQa.cxx
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
Expand Down
Loading
Loading