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
40 changes: 37 additions & 3 deletions PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
#include <optional>
#include <string>

using namespace o2::framework; // o2-linter: disable=using-directive

Check failure on line 31 in PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.h

View workflow job for this annotation

GitHub Actions / O2 linter

[using-directive]

Do not put using directives at global scope in headers.

namespace o2::analysis::femto_universe // o2-linter: disable=name/namespace
{
Expand Down Expand Up @@ -70,7 +70,7 @@

// comment
template <o2::aod::femtouniverse_mc_particle::MCType mc, typename T>
void init_debug(std::string folderName, T& tempFitVarMomAxis) // o2-linter: disable=name/function-variable
void init_debug(std::string folderName, T& tempFitVarMomAxis, bool isFillITSNsigma) // o2-linter: disable=name/function-variable
{
std::string folderSuffix = static_cast<std::string>(o2::aod::femtouniverse_mc_particle::MCTypeName[mc]).c_str();
if constexpr (mParticleType == o2::aod::femtouniverseparticle::ParticleType::kTrack || mParticleType == o2::aod::femtouniverseparticle::ParticleType::kV0Child || mParticleType == o2::aod::femtouniverseparticle::ParticleType::kCascadeBachelor || mParticleType == o2::aod::femtouniverseparticle::ParticleType::kMCTruthTrack) {
Expand Down Expand Up @@ -102,6 +102,18 @@
mHistogramRegistry->add((folderName + folderSuffix + "/nSigmaComb_K").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{comb}^{K}", kTH2F, {{tempFitVarMomAxis}, {100, 0, 5}});
mHistogramRegistry->add((folderName + folderSuffix + "/nSigmaComb_p").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{comb}^{p}", kTH2F, {{tempFitVarMomAxis}, {100, 0, 5}});
mHistogramRegistry->add((folderName + folderSuffix + "/nSigmaComb_d").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{comb}^{d}", kTH2F, {{tempFitVarMomAxis}, {100, 0, 5}});
if (isFillITSNsigma) {
mHistogramRegistry->add((folderName + folderSuffix + "/nSigmaITS_el").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITS}^{e}", kTH2F, {{tempFitVarMomAxis}, {100, 0, 5}});
mHistogramRegistry->add((folderName + folderSuffix + "/nSigmaITS_pi").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITS}^{#pi}", kTH2F, {{tempFitVarMomAxis}, {100, 0, 5}});
mHistogramRegistry->add((folderName + folderSuffix + "/nSigmaITS_K").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITS}^{K}", kTH2F, {{tempFitVarMomAxis}, {100, 0, 5}});
mHistogramRegistry->add((folderName + folderSuffix + "/nSigmaITS_p").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITS}^{p}", kTH2F, {{tempFitVarMomAxis}, {100, 0, 5}});
mHistogramRegistry->add((folderName + folderSuffix + "/nSigmaITS_d").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITS}^{d}", kTH2F, {{tempFitVarMomAxis}, {100, 0, 5}});
mHistogramRegistry->add((folderName + folderSuffix + "/nSigmaCombITSTPC_el").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITSTPC}^{e}", kTH2F, {{tempFitVarMomAxis}, {100, 0, 5}});
mHistogramRegistry->add((folderName + folderSuffix + "/nSigmaCombITSTPC_pi").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITSTPC}^{#pi}", kTH2F, {{tempFitVarMomAxis}, {100, 0, 5}});
mHistogramRegistry->add((folderName + folderSuffix + "/nSigmaCombITSTPC_K").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITSTPC}^{K}", kTH2F, {{tempFitVarMomAxis}, {100, 0, 5}});
mHistogramRegistry->add((folderName + folderSuffix + "/nSigmaCombITSTPC_p").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITSTPC}^{p}", kTH2F, {{tempFitVarMomAxis}, {100, 0, 5}});
mHistogramRegistry->add((folderName + folderSuffix + "/nSigmaCombITSTPC_d").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITSTPC}^{d}", kTH2F, {{tempFitVarMomAxis}, {100, 0, 5}});
}
} else if constexpr (mParticleType == o2::aod::femtouniverseparticle::ParticleType::kV0) {
mHistogramRegistry->add((folderName + folderSuffix + "/hDaughDCA").c_str(), "; DCA^{daugh} (cm); Entries", kTH1F, {{1000, 0, 10}});
mHistogramRegistry->add((folderName + folderSuffix + "/hTransRadius").c_str(), "; #it{r}_{xy} (cm); Entries", kTH1F, {{1500, 0, 150}});
Expand Down Expand Up @@ -208,7 +220,7 @@
/// \param tempFitVarBins binning of the tempFitVar (DCA_xy in case of tracks, CPA in case of V0s, etc.)
/// \param isMC add Monte Carlo truth histograms to the output file
template <typename T>
void init(HistogramRegistry* registry, T& tempFitVarpTBins, T& tempFitVarBins, bool isMC, int pdgCode, bool isDebug = false, std::optional<std::string> flexibleFolder = std::nullopt)
void init(HistogramRegistry* registry, T& tempFitVarpTBins, T& tempFitVarBins, bool isMC, int pdgCode, bool isDebug = false, std::optional<std::string> flexibleFolder = std::nullopt, bool isFillITSNsigma = false)
{
mPDG = pdgCode;
if (registry) {
Expand Down Expand Up @@ -247,7 +259,7 @@
// Fill here the actual histogramms by calling init_base and init_MC
init_base<o2::aod::femtouniverse_mc_particle::MCType::kRecon>(folderName, tempFitVarAxisTitle, tempFitVarpTAxis, tempFitVarAxis);
if (isDebug) {
init_debug<o2::aod::femtouniverse_mc_particle::MCType::kRecon>(folderName, tempFitVarMomAxis);
init_debug<o2::aod::femtouniverse_mc_particle::MCType::kRecon>(folderName, tempFitVarMomAxis, isFillITSNsigma);
}
if (isMC) {
init_base<o2::aod::femtouniverse_mc_particle::MCType::kTruth>(folderName, tempFitVarAxisTitle, tempFitVarpTAxis, tempFitVarAxis);
Expand Down Expand Up @@ -457,17 +469,17 @@
} else if (confPDG == mConfPDGCodePart[1]) {
binPDG = 1;
} else if (confPDG == mConfPDGCodePart[2]) {
binPDG = 2; // o2-linter: disable=pdg/explicit-code

Check failure on line 472 in PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.h

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
} else {
binPDG = 3; // o2-linter: disable=pdg/explicit-code

Check failure on line 474 in PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.h

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
}
if (std::abs(pdgcode) == 211) {

Check failure on line 476 in PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.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.

Check failure on line 476 in PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.h

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
mHistogramRegistry->fill(histFolder + HIST("_MC/hMisidentification"),
binPDG, 0, part.pt());
} else if (std::abs(pdgcode) == 321) {

Check failure on line 479 in PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.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.

Check failure on line 479 in PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.h

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
mHistogramRegistry->fill(histFolder + HIST("_MC/hMisidentification"),
binPDG, 1, part.pt());
} else if (std::abs(pdgcode) == 2212) {

Check failure on line 482 in PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.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.

Check failure on line 482 in PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.h

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
mHistogramRegistry->fill(histFolder + HIST("_MC/hMisidentification"),
binPDG, 2, part.pt());
} else {
Expand Down Expand Up @@ -512,6 +524,28 @@
}
}

template <typename T>
void fillQAITSPID(T const& part)
{
fillQABaseITSPID<T>(part, HIST(o2::aod::femtouniverseparticle::ParticleTypeName[mParticleType]) + HIST(mFolderSuffix[mFolderSuffixType]));
}

template <typename T, typename H>
void fillQABaseITSPID(T const& part, H const& histFolder)
{
// std::string tempFitVarName;
mHistogramRegistry->fill(histFolder + HIST(o2::aod::femtouniverse_mc_particle::MCTypeName[o2::aod::femtouniverse_mc_particle::MCType::kRecon]) + HIST("/nSigmaITS_el"), part.p(), part.itsNSigmaEl());
mHistogramRegistry->fill(histFolder + HIST(o2::aod::femtouniverse_mc_particle::MCTypeName[o2::aod::femtouniverse_mc_particle::MCType::kRecon]) + HIST("/nSigmaITS_pi"), part.p(), part.itsNSigmaPi());
mHistogramRegistry->fill(histFolder + HIST(o2::aod::femtouniverse_mc_particle::MCTypeName[o2::aod::femtouniverse_mc_particle::MCType::kRecon]) + HIST("/nSigmaITS_K"), part.p(), part.itsNSigmaKa());
mHistogramRegistry->fill(histFolder + HIST(o2::aod::femtouniverse_mc_particle::MCTypeName[o2::aod::femtouniverse_mc_particle::MCType::kRecon]) + HIST("/nSigmaITS_p"), part.p(), part.itsNSigmaPr());
mHistogramRegistry->fill(histFolder + HIST(o2::aod::femtouniverse_mc_particle::MCTypeName[o2::aod::femtouniverse_mc_particle::MCType::kRecon]) + HIST("/nSigmaITS_d"), part.p(), part.itsNSigmaDe());
mHistogramRegistry->fill(histFolder + HIST(o2::aod::femtouniverse_mc_particle::MCTypeName[o2::aod::femtouniverse_mc_particle::MCType::kRecon]) + HIST("/nSigmaCombITSTPC_el"), part.p(), std::sqrt(part.tpcNSigmaEl() * part.tpcNSigmaEl() + part.itsNSigmaEl() * part.itsNSigmaEl()));
mHistogramRegistry->fill(histFolder + HIST(o2::aod::femtouniverse_mc_particle::MCTypeName[o2::aod::femtouniverse_mc_particle::MCType::kRecon]) + HIST("/nSigmaCombITSTPC_pi"), part.p(), std::sqrt(part.tpcNSigmaPi() * part.tpcNSigmaPi() + part.itsNSigmaPi() * part.itsNSigmaPi()));
mHistogramRegistry->fill(histFolder + HIST(o2::aod::femtouniverse_mc_particle::MCTypeName[o2::aod::femtouniverse_mc_particle::MCType::kRecon]) + HIST("/nSigmaCombITSTPC_K"), part.p(), std::sqrt(part.tpcNSigmaKa() * part.tpcNSigmaKa() + part.itsNSigmaKa() * part.itsNSigmaKa()));
mHistogramRegistry->fill(histFolder + HIST(o2::aod::femtouniverse_mc_particle::MCTypeName[o2::aod::femtouniverse_mc_particle::MCType::kRecon]) + HIST("/nSigmaCombITSTPC_p"), part.p(), std::sqrt(part.tpcNSigmaPr() * part.tpcNSigmaPr() + part.itsNSigmaPr() * part.itsNSigmaPr()));
mHistogramRegistry->fill(histFolder + HIST(o2::aod::femtouniverse_mc_particle::MCTypeName[o2::aod::femtouniverse_mc_particle::MCType::kRecon]) + HIST("/nSigmaCombITSTPC_d"), part.p(), std::sqrt(part.tpcNSigmaDe() * part.tpcNSigmaDe() + part.itsNSigmaDe() * part.itsNSigmaDe()));
}

/// Templated function to fill particle histograms for data/ Monte Carlo reconstructed and Monte Carlo truth
/// Always calls fillQA_base fill histogramms with data/ Monte Carlo reconstructed
/// In case of Monte Carlo, calls fillQA_base with Monte Carlo truth info and specialized function fillQA_MC for additional histogramms
Expand Down
139 changes: 139 additions & 0 deletions PWGCF/FemtoUniverse/Core/FemtoUniverseTrackSelection.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

#include "Common/Core/TrackSelection.h"
#include "Common/Core/TrackSelectionDefaults.h"
#include "Common/DataModel/PIDResponseITS.h"
#include "Common/DataModel/PIDResponseTOF.h"
#include "Common/DataModel/PIDResponseTPC.h"
#include "Common/DataModel/TrackSelectionTables.h"
Expand Down Expand Up @@ -114,7 +115,7 @@
void setPIDSpecies(T& pids)
{
std::vector<int> tmpPids = pids; /// necessary due to some features of the configurable
for (const o2::track::PID pid : tmpPids) {

Check failure on line 118 in PWGCF/FemtoUniverse/Core/FemtoUniverseTrackSelection.h

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
kPIDspecies.push_back(pid);
}
}
Expand All @@ -135,6 +136,14 @@
template <typename T>
auto getNsigmaTOF(T const& track, o2::track::PID pid);

/// Computes the n_sigma for a track and a particle-type hypothesis in the TOF
/// \tparam T Data type of the track
/// \param track Track for which PID is evaluated
/// \param pid Particle species for which PID is evaluated
/// \return Value of n_{sigma, TOF}
template <typename T>
auto getNsigmaITS(T const& track, o2::track::PID pid);

/// Checks whether the most open combination of all selection criteria is fulfilled
/// \tparam T Data type of the track
/// \param track Track
Expand All @@ -151,6 +160,18 @@
template <typename CutContainerType, typename T>
std::array<CutContainerType, 2> getCutContainer(T const& track);

/// Obtain the bit-wise container for the selections
/// \todo For the moment, PID is separated from the other selections, hence
/// instead of a single value an std::array of size two is returned
/// \tparam CutContainerType Data type of the bit-wise container for the
/// selections
/// \tparam T Data type of the track
/// \param track Track
/// \return The bit-wise container for the selections, separately with all
/// selection criteria, and the PID
template <typename CutContainerType, typename T>
std::array<CutContainerType, 2> getCutContainerWithITS(T const& track);

/// Some basic QA histograms
/// \tparam part Type of the particle for proper naming of the folders for QA
/// \tparam tracktype Type of track (track, positive child, negative child) for proper naming of the folders for QA
Expand Down Expand Up @@ -329,6 +350,11 @@
mHistogramRegistry->add((folderName + "/hDCAz").c_str(), "; #it{p}_{T} (GeV/#it{c}); DCA_{z} (cm)", kTH2F, {{100, 0, 10}, {500, -5, 5}});
mHistogramRegistry->add((folderName + "/hDCA").c_str(), "; #it{p}_{T} (GeV/#it{c}); DCA (cm)", kTH2F, {{100, 0, 10}, {301, 0., 1.5}});
mHistogramRegistry->add((folderName + "/hTPCdEdX").c_str(), "; #it{p} (GeV/#it{c}); TPC Signal", kTH2F, {{100, 0, 10}, {1000, 0, 1000}});
mHistogramRegistry->add((folderName + "/nSigmaITS_el").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITS}^{e}", kTH2F, {{100, 0, 10}, {200, -4.975, 5.025}});
mHistogramRegistry->add((folderName + "/nSigmaITS_pi").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITS}^{#pi}", kTH2F, {{100, 0, 10}, {200, -4.975, 5.025}});
mHistogramRegistry->add((folderName + "/nSigmaITS_K").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITS}^{K}", kTH2F, {{100, 0, 10}, {200, -4.975, 5.025}});
mHistogramRegistry->add((folderName + "/nSigmaITS_p").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITS}^{p}", kTH2F, {{100, 0, 10}, {200, -4.975, 5.025}});
mHistogramRegistry->add((folderName + "/nSigmaITS_d").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{ITS}^{d}", kTH2F, {{100, 0, 10}, {200, -4.975, 5.025}});
mHistogramRegistry->add((folderName + "/nSigmaTPC_el").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{TPC}^{e}", kTH2F, {{100, 0, 10}, {200, -4.975, 5.025}});
mHistogramRegistry->add((folderName + "/nSigmaTPC_pi").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{TPC}^{#pi}", kTH2F, {{100, 0, 10}, {200, -4.975, 5.025}});
mHistogramRegistry->add((folderName + "/nSigmaTPC_K").c_str(), "; #it{p} (GeV/#it{c}); n#sigma_{TPC}^{K}", kTH2F, {{100, 0, 10}, {200, -4.975, 5.025}});
Expand Down Expand Up @@ -394,6 +420,24 @@
return o2::aod::pidutils::tofNSigma(pid, track);
}

template <typename T>
auto FemtoUniverseTrackSelection::getNsigmaITS(T const& track, o2::track::PID pid)
{
if (pid == o2::track::PID::Electron) {
return track.itsNSigmaEl();
} else if (pid == o2::track::PID::Pion) {
return track.itsNSigmaPi();
} else if (pid == o2::track::PID::Kaon) {
return track.itsNSigmaKa();
} else if (pid == o2::track::PID::Proton) {
return track.itsNSigmaPr();
} else if (pid == o2::track::PID::Deuteron) {
return track.itsNSigmaDe();
}
// if nothing matched, return default value
return -999.f;
}

template <typename T>
bool FemtoUniverseTrackSelection::isSelectedMinimal(T const& track)
{
Expand Down Expand Up @@ -565,6 +609,101 @@
return {output, outputPID};
}

template <typename CutContainerType, typename T>
std::array<CutContainerType, 2>
FemtoUniverseTrackSelection::getCutContainerWithITS(T const& track)
{
CutContainerType output = 0;
size_t counter = 0;
CutContainerType outputPID = 0;
const auto sign = track.sign();
const auto pT = track.pt();
const auto eta = track.eta();
const auto tpcNClsF = track.tpcNClsFound();
const auto tpcRClsC = track.tpcCrossedRowsOverFindableCls();
const auto tpcNClsC = track.tpcNClsCrossedRows();
const auto tpcNClsS = track.tpcNClsShared();
const auto tpcNClsFracS = track.tpcFractionSharedCls();
const auto itsNCls = track.itsNCls();
const auto itsNClsIB = track.itsNClsInnerBarrel();
const auto dcaXY = track.dcaXY();
const auto dcaZ = track.dcaZ();
const auto dca = std::sqrt(std::pow(dcaXY, 2.) + std::pow(dcaZ, 2.));

std::vector<float> pidTPC, pidTOF, pidITS;
for (auto it : kPIDspecies) {
pidTPC.push_back(getNsigmaTPC(track, it));
pidTOF.push_back(getNsigmaTOF(track, it));
pidITS.push_back(getNsigmaITS(track, it));
}

float observable = 0.;
for (auto& sel : mSelections) {
const auto selVariable = sel.getSelectionVariable();
if (selVariable == femto_universe_track_selection::kPIDnSigmaMax) {
/// PID needs to be handled a bit differently since we may need more than
/// one species
for (size_t i = 0; i < kPIDspecies.size(); ++i) {
auto pidITSVal = pidITS.at(i);
auto pidTPCVal = pidTPC.at(i) - nSigmaPIDOffsetTPC;
auto pidTOFVal = pidTOF.at(i) - nSigmaPIDOffsetTOF;
auto pidComb = std::sqrt(pidTPCVal * pidTPCVal + pidTOFVal * pidTOFVal);
sel.checkSelectionSetBitPID(pidTPCVal, outputPID);
sel.checkSelectionSetBitPID(pidComb, outputPID);
sel.checkSelectionSetBitPID(pidITSVal, outputPID);
}
} else {
/// for the rest it's all the same
switch (selVariable) {
case (femto_universe_track_selection::kSign):
observable = sign;
break;
case (femto_universe_track_selection::kpTMin):
case (femto_universe_track_selection::kpTMax):
observable = pT;
break;
case (femto_universe_track_selection::kEtaMax):
observable = eta;
break;
case (femto_universe_track_selection::kTPCnClsMin):
observable = tpcNClsF;
break;
case (femto_universe_track_selection::kTPCfClsMin):
observable = tpcRClsC;
break;
case (femto_universe_track_selection::kTPCcRowsMin):
observable = tpcNClsC;
break;
case (femto_universe_track_selection::kTPCsClsMax):
observable = tpcNClsS;
break;
case (femto_universe_track_selection::kTPCfracsClsMax):
observable = tpcNClsFracS;
break;
case (femto_universe_track_selection::kITSnClsMin):
observable = itsNCls;
break;
case (femto_universe_track_selection::kITSnClsIbMin):
observable = itsNClsIB;
break;
case (femto_universe_track_selection::kDCAxyMax):
observable = dcaXY;
break;
case (femto_universe_track_selection::kDCAzMax):
observable = dcaZ;
break;
case (femto_universe_track_selection::kDCAMin):
observable = dca;
break;
case (femto_universe_track_selection::kPIDnSigmaMax):
break;
}
sel.checkSelectionSetBit(observable, output, counter);
}
}
return {output, outputPID};
}

template <o2::aod::femtouniverseparticle::ParticleType part, o2::aod::femtouniverseparticle::TrackType tracktype, typename T>
void FemtoUniverseTrackSelection::fillQA(T const& track)
{
Expand Down
17 changes: 17 additions & 0 deletions PWGCF/FemtoUniverse/DataModel/FemtoDerived.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,15 @@ DECLARE_SOA_DYNAMIC_COLUMN(P, p, //! Compute the overall momentum in GeV/c
[](float pt, float eta) -> float {
return pt * std::cosh(eta);
});

DECLARE_SOA_COLUMN(ITSNSigmaEl, itsNSigmaEl, float); //! Nsigma separation with the Its detector for electron
DECLARE_SOA_COLUMN(ITSNSigmaPi, itsNSigmaPi, float); //! Nsigma separation with the Its detector for pion
DECLARE_SOA_COLUMN(ITSNSigmaKa, itsNSigmaKa, float); //! Nsigma separation with the Its detector for kaon
DECLARE_SOA_COLUMN(ITSNSigmaPr, itsNSigmaPr, float); //! Nsigma separation with the Its detector for proton
DECLARE_SOA_COLUMN(ITSNSigmaDe, itsNSigmaDe, float); //! Nsigma separation with the Its detector for deuteron
DECLARE_SOA_COLUMN(ITSNSigmaTr, itsNSigmaTr, float); //! Nsigma separation with the Its detector for triton
DECLARE_SOA_COLUMN(ITSNSigmaHe, itsNSigmaHe, float); //! Nsigma separation with the Its detector for helium3

// debug variables
DECLARE_SOA_COLUMN(Sign, sign, int8_t); //! Sign of the track charge
DECLARE_SOA_COLUMN(TpcNClsFound, tpcNClsFound, uint8_t); //! Number of TPC clusters
Expand Down Expand Up @@ -222,6 +231,14 @@ DECLARE_SOA_TABLE(FDExtParticles, "AOD", "FDEXTPARTICLE",
pidtof_tiny::TOFNSigmaDe<pidtof_tiny::TOFNSigmaStoreDe>);
using FDFullParticle = FDExtParticles::iterator;

DECLARE_SOA_TABLE(FDItsParticles, "AOD", "FDITSPARTICLE",
femtouniverseparticle::ITSNSigmaEl,
femtouniverseparticle::ITSNSigmaPi,
femtouniverseparticle::ITSNSigmaKa,
femtouniverseparticle::ITSNSigmaPr,
femtouniverseparticle::ITSNSigmaDe);
using FDItsParticle = FDItsParticles::iterator;

DECLARE_SOA_TABLE(FDCascParticles, "AOD", "FDCASCPARTICLE",
o2::soa::Index<>,
femtouniverseparticle::FdCollisionId,
Expand Down
Loading
Loading