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
3 changes: 3 additions & 0 deletions PWGCF/Femto/Core/femtoUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,9 @@ inline float getMass(int pdgCode)
case kSigmaMinus:
mass = o2::constants::physics::MassSigmaMinus;
break;
case kSigmaPlus:
mass = o2::constants::physics::MassSigmaPlus;
break;
case kXiMinus:
mass = o2::constants::physics::MassXiMinus;
break;
Expand Down
232 changes: 186 additions & 46 deletions PWGCF/Femto/Core/kinkBuilder.h

Large diffs are not rendered by default.

16 changes: 15 additions & 1 deletion PWGCF/Femto/Core/kinkHistManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,19 @@ struct ConfSigmaBinning : o2::framework::ConfigurableGroup {
std::string prefix = Prefix;
KINK_DEFAULT_BINNING(1.1, 1.3)
};
template <const char* Prefix>
struct ConfSigmaPlusBinning : o2::framework::ConfigurableGroup {
std::string prefix = Prefix;
KINK_DEFAULT_BINNING(1.1, 1.3)
};
#undef KINK_DEFAULT_BINNING

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

constexpr const char PrefixSigmaPlusBinning1[] = "SigmaPlusBinning1";
using ConfSigmaPlusBinning1 = ConfSigmaPlusBinning<PrefixSigmaPlusBinning1>;

template <const char* Prefix>
struct ConfKinkQaBinning : o2::framework::ConfigurableGroup {
std::string prefix = Prefix;
Expand All @@ -93,6 +101,9 @@ struct ConfKinkQaBinning : o2::framework::ConfigurableGroup {
constexpr const char PrefixSigmaQaBinning1[] = "SigmaQaBinning1";
using ConfSigmaQaBinning1 = ConfKinkQaBinning<PrefixSigmaQaBinning1>;

constexpr const char PrefixSigmaPlusQaBinning1[] = "SigmaPlusQaBinning1";
using ConfSigmaPlusQaBinning1 = ConfKinkQaBinning<PrefixSigmaPlusQaBinning1>;

// must be in sync with enum KinkHist
// the enum gives the correct index in the array
constexpr std::array<histmanager::HistInfo<KinkHist>, kKinkHistLast> HistTable = {
Expand Down Expand Up @@ -153,6 +164,9 @@ std::map<KinkHist, std::vector<framework::AxisSpec>> makeKinkQaHistSpecMap(T1 co
constexpr char PrefixSigmaQa[] = "SigmaQA/";
constexpr char PrefixSigma1[] = "Sigma1/";
constexpr char PrefixSigma2[] = "Sigma2/";
constexpr char PrefixSigmaPlusQa[] = "SigmaPlusQA/";
constexpr char PrefixSigmaPlus1[] = "SigmaPlus1/";
constexpr char PrefixSigmaPlus2[] = "SigmaPlus2/";

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

if constexpr (isEqual(kink, modes::Kink::kSigma)) {
if constexpr (isEqual(kink, modes::Kink::kSigma) || isEqual(kink, modes::Kink::kSigmaPlus)) {
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(AnalysisDir) + HIST(getHistName(kSign, HistTable)), kinkcandidate.sign());
}
}
Expand Down
3 changes: 2 additions & 1 deletion PWGCF/Femto/Core/modes.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ enum class V0 : o2::aod::femtodatatypes::V0Type {
};

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

enum class Cascade : o2::aod::femtodatatypes::CascadeType {
Expand Down
13 changes: 13 additions & 0 deletions PWGCF/Femto/Core/partitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,4 +126,17 @@
(femtobase::stored::mass < selection.massMax) && \
ncheckbit(femtokinks::mask, selection.mask)

#define MAKE_SIGMAPLUS_PARTITION(selection) \
ifnode(selection.sign.node() != 0, \
ifnode(selection.sign.node() > 0, femtobase::stored::signedPt > 0.f, femtobase::stored::signedPt < 0.f), true) && \
(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_
35 changes: 34 additions & 1 deletion PWGCF/Femto/DataModel/FemtoTables.h
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,7 @@ DECLARE_SOA_COLUMN(TransRadius, transRadius, float); //! Transverse decay radius
DECLARE_SOA_INDEX_COLUMN_FULL(ChaDau, chaDau, int32_t, FTracks, "_ChaDau"); //!
} // namespace femtokinks

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

using FSigmaExtras = FSigmaExtras_001;

// table for basic sigma plus information
DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmaPlus_001, "FSIGMAPLUS", 1,
o2::soa::Index<>,
femtobase::stored::FColId, // 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::Phi>,
femtobase::dynamic::Py<femtobase::stored::SignedPt, femtobase::stored::Phi>,
femtobase::dynamic::Pz<femtobase::stored::SignedPt, femtobase::stored::Eta>,
femtobase::dynamic::Theta<femtobase::stored::Eta>);
using FSigmaPlus = FSigmaPlus_001;

DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigmaPlusMasks_001, "FSIGMAPLUSMASKS", 1,
femtokinks::Mask);
using FSigmaPlusMasks = FSigmaPlusMasks_001;

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

using FSigmaPlusExtras = FSigmaPlusExtras_001;

namespace femtocascades
{
// columns for cascade bit masks
Expand Down
6 changes: 5 additions & 1 deletion PWGCF/Femto/TableProducer/femtoProducer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,8 @@ struct FemtoProducer {
kinkbuilder::ConfKinkFilters confKinkFilters;
kinkbuilder::ConfSigmaBits confSigmaBits;
kinkbuilder::KinkBuilder<modes::Kink::kSigma> sigmaBuilder;
kinkbuilder::ConfSigmaPlusBits confSigmaPlusBits;
kinkbuilder::KinkBuilder<modes::Kink::kSigmaPlus> sigmaPlusBuilder;

// resonance daughter filters and partitions
twotrackresonancebuilder::ConfTwoTrackResonanceDaughterFilters confResonanceDaughterFilters;
Expand Down Expand Up @@ -182,6 +184,7 @@ struct FemtoProducer {

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

// cascade selections
xiBuilder.init(confXiBits, confCascadeFilters, confCascadeTables, context);
Expand All @@ -199,7 +202,7 @@ struct FemtoProducer {
if ((lambdaBuilder.fillAnyTable() || antilambdaBuilder.fillAnyTable() || k0shortBuilder.fillAnyTable()) && (!doprocessTracksV0sCascadesRun3pp && !doprocessTracksV0sRun3pp && !doprocessTracksV0sCascadesKinksRun3pp)) {
LOG(fatal) << "At least one v0 table is enabled, but wrong process function is enabled. Breaking...";
}
if (sigmaBuilder.fillAnyTable() && (!doprocessTracksKinksRun3pp && !doprocessTracksV0sCascadesKinksRun3pp)) {
if ((sigmaBuilder.fillAnyTable() || sigmaPlusBuilder.fillAnyTable()) && (!doprocessTracksKinksRun3pp && !doprocessTracksV0sCascadesKinksRun3pp)) {
LOG(fatal) << "At least one kink table is enabled, but wrong process function is enabled. Breaking...";
}
}
Expand Down Expand Up @@ -248,6 +251,7 @@ struct FemtoProducer {
void processKinks(T1 const& tracks, T2 const& kinks)
{
sigmaBuilder.fillKinks(collisionBuilderProducts, trackBuilderProducts, kinkBuilderProducts, kinks, tracks, trackBuilder, indexMapTracks);
sigmaPlusBuilder.fillKinks(collisionBuilderProducts, trackBuilderProducts, kinkBuilderProducts, kinks, tracks, trackBuilder, indexMapTracks);
}

// add cascades
Expand Down
49 changes: 44 additions & 5 deletions PWGCF/Femto/Tasks/femtoKinkQa.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ struct FemtoKinkQa {

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

SliceCache cache;
Expand All @@ -80,6 +81,21 @@ struct FemtoKinkQa {
modes::Kink::kSigma>
sigmaHistManager;

// setup for sigma plus
kinkbuilder::ConfSigmaPlusSelection1 confSigmaPlusSelection;

Partition<FemtoSigmaPlus> sigmaPlusPartition = MAKE_SIGMAPLUS_PARTITION(confSigmaPlusSelection);
Preslice<FemtoSigmaPlus> perColSigmaPlus = femtobase::stored::fColId;

kinkhistmanager::ConfSigmaPlusBinning1 confSigmaPlusBinning;
kinkhistmanager::ConfSigmaPlusQaBinning1 confSigmaPlusQaBinning;
kinkhistmanager::KinkHistManager<
kinkhistmanager::PrefixSigmaPlusQa,
trackhistmanager::PrefixKinkChaDaughterQa,
modes::Mode::kAnalysis_Qa,
modes::Kink::kSigmaPlus>
sigmaPlusHistManager;

// setup for daughters
trackhistmanager::ConfKinkChaDauBinning confKinkChaDaughterBinning;
trackhistmanager::ConfKinkChaDauQaBinning confKinkChaDaughterQaBinning;
Expand All @@ -88,16 +104,27 @@ struct FemtoKinkQa {

void init(InitContext&)
{
auto sigmaHistSpec = kinkhistmanager::makeKinkQaHistSpecMap(confSigmaBinning, confSigmaQaBinning);
// create a map for histogram specs
auto colHistSpec = colhistmanager::makeColQaHistSpecMap(confCollisionBinning, confCollisionQaBinning);
colHistManager.init(&hRegistry, colHistSpec, confCollisionQaBinning);

auto chaDauHistSpec = trackhistmanager::makeTrackQaHistSpecMap(confKinkChaDaughterBinning, confKinkChaDaughterQaBinning);

sigmaHistManager.init(&hRegistry, sigmaHistSpec, confSigmaQaBinning, chaDauHistSpec, confKinkChaDaughterQaBinning);
if ((doprocessSigma + doprocessSigmaPlus > 1)) {
LOG(fatal) << "Only one process can be activated";
}

if (doprocessSigma) {
auto sigmaHistSpec = kinkhistmanager::makeKinkQaHistSpecMap(confSigmaBinning, confSigmaQaBinning);
sigmaHistManager.init(&hRegistry, sigmaHistSpec, confSigmaQaBinning, chaDauHistSpec, confKinkChaDaughterQaBinning);
}

auto collisionHistSpec = colhistmanager::makeColQaHistSpecMap(confCollisionBinning, confCollisionQaBinning);
colHistManager.init(&hRegistry, collisionHistSpec, confCollisionQaBinning);
if (doprocessSigmaPlus) {
auto sigmaPlusHistSpec = kinkhistmanager::makeKinkQaHistSpecMap(confSigmaPlusBinning, confSigmaPlusQaBinning);
sigmaPlusHistManager.init(&hRegistry, sigmaPlusHistSpec, confSigmaPlusQaBinning, chaDauHistSpec, confKinkChaDaughterQaBinning);
}
};

// Process function for sigma particles from femto tables
void processSigma(FilteredFemtoCollision const& col, FemtoSigmas const& /*sigmas*/, FemtoTracks const& tracks)
{
colHistManager.fill(col);
Expand All @@ -107,6 +134,18 @@ struct FemtoKinkQa {
}
}
PROCESS_SWITCH(FemtoKinkQa, processSigma, "Process sigmas", true);

void processSigmaPlus(FilteredFemtoCollision const& col, FemtoSigmaPlus const& /*sigmaplus*/, FemtoTracks const& tracks)
{
colHistManager.fill(col);

auto sigmaplusSlice = sigmaPlusPartition->sliceByCached(femtobase::stored::fColId, col.globalIndex(), cache);

for (auto const& sp : sigmaplusSlice) {
sigmaPlusHistManager.fill(sp, tracks);
}
}
PROCESS_SWITCH(FemtoKinkQa, processSigmaPlus, "Process sigma plus", false);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
Expand Down
48 changes: 45 additions & 3 deletions PWGCF/Femto/Tasks/femtoPairTrackKink.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ struct FemtoPairTrackKink {

using Tracks = o2::soa::Join<FTracks, FTrackMasks>;
using Sigmas = o2::soa::Join<FSigmas, FSigmaMasks>;
using SigmaPlus = o2::soa::Join<FSigmaPlus, FSigmaPlusMasks>;

SliceCache cache;

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

// setup for sigma plus
kinkbuilder::ConfSigmaPlusSelection1 sigmaPlusSelection;
kinkhistmanager::ConfSigmaPlusBinning1 confSigmaPlusBinning;
Partition<SigmaPlus> sigmaPlusPartition = MAKE_SIGMAPLUS_PARTITION(sigmaPlusSelection);
Preslice<SigmaPlus> perColSigmaPlus = aod::femtobase::stored::fColId;

// setup pairs
pairhistmanager::ConfPairBinning confPairBinning;
pairhistmanager::ConfPairCuts confPairCuts;
Expand All @@ -98,6 +105,18 @@ struct FemtoPairTrackKink {
modes::Kink::kSigma>
pairTrackSigmaBuilder;

pairbuilder::PairTrackKinkBuilder<
trackhistmanager::PrefixTrack1,
kinkhistmanager::PrefixSigmaPlus1,
trackhistmanager::PrefixKinkChaDaughter,
pairhistmanager::PrefixTrackKinkSe,
pairhistmanager::PrefixTrackKinkMe,
closepairrejection::PrefixTrackKinkSe,
closepairrejection::PrefixTrackKinkMe,
modes::Mode::kAnalysis,
modes::Kink::kSigmaPlus>
pairTrackSigmaPlusBuilder;

// setup mixing
std::vector<double> defaultVtxBins{10, -10, 10};
std::vector<double> defaultMultBins{50, 0, 200};
Expand Down Expand Up @@ -129,10 +148,21 @@ struct FemtoPairTrackKink {
auto cprHistSpec = closepairrejection::makeCprHistSpecMap(confCpr);

// setup for sigma
// if (doprocessSigmaSameEvent || doprocessSigmaMixedEvent) {
if (doprocessSigmaSameEvent) {
if (doprocessSigmaSameEvent || doprocessSigmaMixedEvent) {
auto sigmaHistSpec = kinkhistmanager::makeKinkHistSpecMap(confSigmaBinning);
pairTrackSigmaBuilder.init(&hRegistry, trackSelection, sigmaSelection, confCpr, confMixing, confPairBinning, confPairCuts, colHistSpec, trackHistSpec, sigmaHistSpec, chaDauSpec, pairHistSpec, cprHistSpec);
auto pairTrackSigmaHistSpec = pairhistmanager::makePairHistSpecMap(confPairBinning);
pairTrackSigmaBuilder.init(&hRegistry, trackSelection, sigmaSelection, confCpr, confMixing, confPairBinning, confPairCuts, colHistSpec, trackHistSpec, sigmaHistSpec, chaDauSpec, pairTrackSigmaHistSpec, cprHistSpec);
}

// setup for sigma plus
if (doprocessSigmaPlusSameEvent || doprocessSigmaPlusMixedEvent) {
auto sigmaplusHistSpec = kinkhistmanager::makeKinkHistSpecMap(confSigmaPlusBinning);
auto pairTrackSigmaPlusHistSpec = pairhistmanager::makePairHistSpecMap(confPairBinning);
pairTrackSigmaPlusBuilder.init(&hRegistry, trackSelection, sigmaPlusSelection, confCpr, confMixing, confPairBinning, confPairCuts, colHistSpec, trackHistSpec, sigmaplusHistSpec, chaDauSpec, pairTrackSigmaPlusHistSpec, cprHistSpec);
}

if (((doprocessSigmaSameEvent || doprocessSigmaMixedEvent) + (doprocessSigmaPlusSameEvent || doprocessSigmaPlusMixedEvent)) > 1) {
LOG(fatal) << "Can only process sigma-tracks Or sigmaplus-tracks";
}
};

Expand All @@ -147,6 +177,18 @@ struct FemtoPairTrackKink {
pairTrackSigmaBuilder.processMixedEvent(cols, tracks, trackPartition, sigmaPartition, cache, mixBinsVtxMult, mixBinsVtxCent, mixBinsVtxMultCent);
}
PROCESS_SWITCH(FemtoPairTrackKink, processSigmaMixedEvent, "Enable processing mixed event processing for tracks and sigmas", true);
//
void processSigmaPlusSameEvent(FilteredCollision const& col, Tracks const& tracks, SigmaPlus const& sigmaplus)
{
pairTrackSigmaPlusBuilder.processSameEvent(col, tracks, trackPartition, sigmaplus, sigmaPlusPartition, cache);
}
PROCESS_SWITCH(FemtoPairTrackKink, processSigmaPlusSameEvent, "Enable processing same event processing for tracks and sigma plus", false);

void processSigmaPlusMixedEvent(FilteredCollisions const& cols, Tracks const& tracks, SigmaPlus const& /*sigmaplus*/)
{
pairTrackSigmaPlusBuilder.processMixedEvent(cols, tracks, trackPartition, sigmaPlusPartition, cache, mixBinsVtxMult, mixBinsVtxCent, mixBinsVtxMultCent);
}
PROCESS_SWITCH(FemtoPairTrackKink, processSigmaPlusMixedEvent, "Enable processing mixed event processing for tracks and sigma plus", false);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
Expand Down
Loading