Skip to content
Merged
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
81 changes: 47 additions & 34 deletions PWGLF/TableProducer/Nuspex/he3HadronFemto.cxx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.

Check failure on line 1 in PWGLF/TableProducer/Nuspex/he3HadronFemto.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[name/workflow-file]

Name of a workflow file must match the name of the main struct in it (without the PWG prefix). (Class implementation files should be in "Core" directories.)
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
Expand Down Expand Up @@ -150,13 +150,13 @@
{-1.e32, -1.e32, -1.e32, -1.e32, -1.e32, -1.e32}, // He3
{-1.e32, -1.e32, -1.e32, -1.e32, -1.e32, -1.e32} // hadron
}};
static const std::vector<std::string> kItsParNames{"p0", "p1", "p2", "res0", "res1", "res2"};
const std::vector<std::string> kItsParNames{"p0", "p1", "p2", "res0", "res1", "res2"};

constexpr std::array<std::array<double, 6>, 1> kBetheBlochDefault = {{{-1.e32, -1.e32, -1.e32, -1.e32, -1.e32, -1.e32}}};
static const std::vector<std::string> kBetheBlochParNames{"p0", "p1", "p2", "p3", "p4", "resolution"};
const std::vector<std::string> kBetheBlochParNames{"p0", "p1", "p2", "p3", "p4", "resolution"};

constexpr std::array<std::array<double, 6>, 1> kBetheBlochCorrectionDefault = {{{0.0, -1.e32, -1.e32, 0.0, -1.e32, -1.e32}}};
static const std::vector<std::string> kBetheBlochCorrectionParNames{"p0", "p1", "p2", "p3", "p4", "p5"};
const std::vector<std::string> kBetheBlochCorrectionParNames{"p0", "p1", "p2", "p3", "p4", "p5"};

constexpr std::array<std::array<double, 4>, static_cast<int>(Species::kAllSpecies)> kDCAxyResDefault = {{
{1.09e-4, 0.0011, 0.0065, 1.0399}, // He3
Expand All @@ -166,7 +166,7 @@
{9.36e-5, 0.0019, 0.0080, 1.416}, // He3
{1.18e-4, 0.0020, 0.0025, 1.3460} // Pr
}};
static const std::vector<std::string> kDCAResParNames{"res0", "res1", "res2", "mean"};
const std::vector<std::string> kDCAResParNames{"res0", "res1", "res2", "mean"};

constexpr std::array<double, 3> kHePidTrkPtParamsHeDefault = {0.3101, -0.1759, 0.0262};
constexpr std::array<double, 3> kHePidTrkPParamsHeDefault = {0., 0., 0.};
Expand All @@ -175,12 +175,14 @@

struct He3HadCandidate {

float recoPtHe3() const { return signHe3 * std::hypot(momHe3[0], momHe3[1]); }
float recoPhiHe3() const { return std::atan2(momHe3[1], momHe3[0]); }
float recoEtaHe3() const { return std::asinh(momHe3[2] / std::abs(recoPtHe3())); }
float recoPtHad() const { return signHad * std::hypot(momHad[0], momHad[1]); }
float recoPhiHad() const { return std::atan2(momHad[1], momHad[0]); }
float recoEtaHad() const { return std::asinh(momHad[2] / std::abs(recoPtHad())); }
[[nodiscard]] float recoPtHe3() const { return signHe3 * std::hypot(momHe3[0], momHe3[1]); }
[[nodiscard]] float recoPhiHe3() const { return std::atan2(momHe3[1], momHe3[0]); }
[[nodiscard]] float recoEtaHe3() const { return std::asinh(momHe3[2] / std::abs(recoPtHe3())); }
[[nodiscard]] float recoPtHad() const { return signHad * std::hypot(momHad[0], momHad[1]); }
[[nodiscard]] float recoPhiHad() const { return std::atan2(momHad[1], momHad[0]); }
[[nodiscard]] float recoEtaHad() const { return std::asinh(momHad[2] / std::abs(recoPtHad())); }
[[nodiscard]] float recoKstar() const { return getkstar(recoPtHe3(), recoEtaHe3(), recoPhiHe3(), constants::physics::MassHelium3, 1.f,
recoPtHad(), recoEtaHad(), recoPhiHad(), constants::physics::MassProton, 1.f); }

std::array<float, 3> momHe3 = {99.f, 99.f, 99.f};
std::array<float, 3> momHad = {99.f, 99.f, 99.f};
Expand Down Expand Up @@ -335,13 +337,13 @@
SameKindPair<CollisionsFull, TrackCandidates, BinningType> mPair{binningPolicy, settingNoMixedEvents, -1, &cache};

struct He3HadronParams {
std::array<float, 6> betheBlochParams = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
std::array<float, 6> betheBlochCorrectionParams = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
std::array<std::array<float, 6>, static_cast<int>(Species::kAllSpecies)> itsParams;
std::array<std::array<float, 4>, static_cast<int>(Species::kAllSpecies)> dcaxyResParams;
std::array<std::array<float, 4>, static_cast<int>(Species::kAllSpecies)> dcazResParams;
std::array<float, 3> hePidTrkPtParams = {0.0f, 0.0f, 0.0f};
std::array<float, 3> hePidTrkPParams = {0.0f, 0.0f, 0.0f};
std::array<float, 6> betheBlochParams{};
std::array<float, 6> betheBlochCorrectionParams{};
std::array<std::array<float, 6>, static_cast<int>(Species::kAllSpecies)> itsParams{};
std::array<std::array<float, 4>, static_cast<int>(Species::kAllSpecies)> dcaxyResParams{};
std::array<std::array<float, 4>, static_cast<int>(Species::kAllSpecies)> dcazResParams{};
std::array<float, 3> hePidTrkPtParams{};
std::array<float, 3> hePidTrkPParams{};
} mHe3HadronParams;

o2::aod::ITSResponse mResponseITS;
Expand Down Expand Up @@ -449,16 +451,16 @@
for (int iSpecies = 0; iSpecies < static_cast<int>(Species::kAllSpecies); iSpecies++) {

for (int i = 0; i < nItsParameters; i++) {
mHe3HadronParams.itsParams[iSpecies][i] = i < 3 ? settingItsParams->get(Species(iSpecies), Form("p%i", i)) : settingItsParams->get(Species(iSpecies), Form("res%i", i - 3));

Check failure on line 454 in PWGLF/TableProducer/Nuspex/he3HadronFemto.cxx

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.
}

for (int i = 0; i < nDCAResParameters; i++) {
mHe3HadronParams.dcaxyResParams[iSpecies][i] = settingDCAxyResParams->get(Species(iSpecies), i < 3 ? Form("res%i", i) : "mean");

Check failure on line 458 in PWGLF/TableProducer/Nuspex/he3HadronFemto.cxx

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.
mHe3HadronParams.dcazResParams[iSpecies][i] = settingDCAzResParams->get(Species(iSpecies), i < 3 ? Form("res%i", i) : "mean");

Check failure on line 459 in PWGLF/TableProducer/Nuspex/he3HadronFemto.cxx

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.
}
}

if (mHe3HadronParams.itsParams[Species::kHe3][0] > -1e31) {

Check failure on line 463 in PWGLF/TableProducer/Nuspex/he3HadronFemto.cxx

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.
mResponseITS.setParameters(mHe3HadronParams.itsParams[Species::kHad][0], mHe3HadronParams.itsParams[Species::kHad][1], mHe3HadronParams.itsParams[Species::kHad][2],
mHe3HadronParams.itsParams[Species::kHe3][0], mHe3HadronParams.itsParams[Species::kHe3][1], mHe3HadronParams.itsParams[Species::kHe3][2],
mHe3HadronParams.itsParams[Species::kHad][3], mHe3HadronParams.itsParams[Species::kHad][4], mHe3HadronParams.itsParams[Species::kHad][5],
Expand Down Expand Up @@ -497,8 +499,8 @@
mRunNumber = bc.runNumber();
const float defaultBzValue = -999.0f;
auto run3GrpTimestamp = bc.timestamp();
o2::parameters::GRPObject* grpo = mCcdb->getForTimeStamp<o2::parameters::GRPObject>(settingGrpPath, run3GrpTimestamp);
o2::parameters::GRPMagField* grpmag = 0x0;
auto grpo = mCcdb->getForTimeStamp<o2::parameters::GRPObject>(settingGrpPath, run3GrpTimestamp);
o2::parameters::GRPMagField* grpmag = nullptr;
if (grpo) {
o2::base::Propagator::initFieldFromGRP(grpo);
if (settingDbz < defaultBzValue) {
Expand Down Expand Up @@ -575,8 +577,9 @@

float correctPtHe3TrackedAsTriton(const float pt, const uint32_t pidForTracking)
{
if (pt < 2.5 && pidForTracking == o2::track::PID::Triton)
if (pt < 2.5 && pidForTracking == o2::track::PID::Triton) {

Check failure on line 580 in PWGLF/TableProducer/Nuspex/he3HadronFemto.cxx

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.
return pt * (1. - mHe3HadronParams.hePidTrkPtParams[0] - mHe3HadronParams.hePidTrkPtParams[1] * pt - mHe3HadronParams.hePidTrkPtParams[2] * pt * pt);
}

return pt;
}
Expand All @@ -587,16 +590,17 @@
float correctedTPCinnerParam = (heliumPID && settingCompensatePIDinTracking) ? tpcInnerParam / 2.f : tpcInnerParam;

correctedTPCinnerParam *= 2.f; // rigidity to momentum
if (correctedTPCinnerParam < 2.5 && pidForTracking == o2::track::PID::Triton)
if (correctedTPCinnerParam < 2.5 && pidForTracking == o2::track::PID::Triton) {

Check failure on line 593 in PWGLF/TableProducer/Nuspex/he3HadronFemto.cxx

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.
return correctedTPCinnerParam * (1. - mHe3HadronParams.hePidTrkPParams[0] - mHe3HadronParams.hePidTrkPParams[1] * correctedTPCinnerParam - mHe3HadronParams.hePidTrkPParams[2] * correctedTPCinnerParam * correctedTPCinnerParam);
}

return correctedTPCinnerParam;
}

float computeNsigmaDCA(const float pt, const float dca, const int iSpecies, const char* dcaType = "xy")
{

std::array<float, 4> parameters;
std::array<float, 4> parameters{{0., 0., 0., 0.}};
if (std::strcmp(dcaType, "xy") == 0) {
parameters = mHe3HadronParams.dcaxyResParams[iSpecies];
} else if (std::strcmp(dcaType, "z") == 0) {
Expand All @@ -616,8 +620,9 @@
const float nsigmaDcaZ = computeNsigmaDCA(pt, dcaZ, ispecies, "z");

if (std::abs(nsigmaDcaXy) > cutSettings.settingCutNsigmaDcaXy ||
std::abs(nsigmaDcaZ) > cutSettings.settingCutNsigmaDcaZ)
std::abs(nsigmaDcaZ) > cutSettings.settingCutNsigmaDcaZ) {
return false;
}

return true;
}
Expand Down Expand Up @@ -765,7 +770,7 @@
std::array<float, 3> collisionVertex = getCollisionVertex(collisions, collIdx);
const auto& pca = mFitter.getPCACandidate();
float distance = defaultTodistance;
for (int i = 0; i < 3; i++) {

Check failure on line 773 in PWGLF/TableProducer/Nuspex/he3HadronFemto.cxx

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.
distance += (pca[i] - collisionVertex[i]) * (pca[i] - collisionVertex[i]);
}
if (distanceMin < 0 || distance < distanceMin) {
Expand All @@ -787,8 +792,9 @@
std::array<float, 3> collisionVertex = getCollisionVertex(collisions, he3Hadcand.collisionID);

he3Hadcand.momHe3 = std::array{trackHe3.px(), trackHe3.py(), trackHe3.pz()};
for (int i = 0; i < 3; i++)
for (int i = 0; i < 3; i++) {

Check failure on line 795 in PWGLF/TableProducer/Nuspex/he3HadronFemto.cxx

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.
he3Hadcand.momHe3[i] = he3Hadcand.momHe3[i] * 2;
}
he3Hadcand.momHad = std::array{trackHad.px(), trackHad.py(), trackHad.pz()};
float invMass = CommonInite;
if (settingHadPDGCode == PDG_t::kPiPlus) {
Expand Down Expand Up @@ -817,7 +823,7 @@
} else {
auto trackCovHe3 = getTrackParCov(trackHe3);
auto trackCovHad = getTrackParCov(trackHad);
std::array<float, 2> dcaInfo;
std::array<float, 2> dcaInfo{{-999., -999.}};
o2::base::Propagator::Instance()->propagateToDCABxByBz({collisionVertex[0], collisionVertex[1], collisionVertex[2]}, trackCovHe3, 2.f, mFitter.getMatCorrType(), &dcaInfo);
he3Hadcand.dcaxyHe3 = dcaInfo[0];
he3Hadcand.dcazHe3 = dcaInfo[1];
Expand Down Expand Up @@ -1009,6 +1015,7 @@
mQaRegistry.fill(HIST("He3/hHe3Pt"), he3Hadcand.recoPtHe3());
mQaRegistry.fill(HIST("Had/hHadronPt"), he3Hadcand.recoPtHad());
mQaRegistry.fill(HIST("hhe3HadtInvMass"), he3Hadcand.invMass);
mQaRegistry.fill(HIST("hhe3HadKstar"), he3Hadcand.recoKstar());
mQaRegistry.fill(HIST("He3/hDCAxyHe3"), he3Hadcand.dcaxyHe3);
mQaRegistry.fill(HIST("He3/hDCAzHe3"), he3Hadcand.dcazHe3);
mQaRegistry.fill(HIST("Had/hDCAxyHad"), he3Hadcand.dcaxyHad);
Expand Down Expand Up @@ -1167,7 +1174,7 @@

pairTracksSameEvent(trackTableThisCollision, collision);

if (mTrackPairs.size() == 0) {
if (mTrackPairs.empty()) {
continue;
}

Expand Down Expand Up @@ -1248,14 +1255,14 @@
he3Hadcand.flags |= Flags::kBothPrimaries;
isMixedPair = false;

} else if ((he3Hadcand.flagsHe3 & ParticleFlags::kFromLi4) && (he3Hadcand.flagsHad & ParticleFlags::kFromLi4)) {
} else if (static_cast<bool>(he3Hadcand.flagsHe3 & ParticleFlags::kFromLi4) && static_cast<bool>(he3Hadcand.flagsHad & ParticleFlags::kFromLi4)) {

searchForCommonMotherTrack(motherHe3Idxs, motherHadIdxs, mcParticles, motherParticle, he3Hadcand, isMixedPair, Li4PDG);
if (!isMixedPair) {
he3Hadcand.flags |= Flags::kBothFromLi4;
}

} else if ((he3Hadcand.flagsHe3 & ParticleFlags::kFromHypertriton) && (he3Hadcand.flagsHad & ParticleFlags::kFromHypertriton)) {
} else if (static_cast<bool>(he3Hadcand.flagsHe3 & ParticleFlags::kFromHypertriton) && static_cast<bool>(he3Hadcand.flagsHad & ParticleFlags::kFromHypertriton)) {

searchForCommonMotherTrack(motherHe3Idxs, motherHadIdxs, mcParticles, motherParticle, he3Hadcand, isMixedPair, H3LPDG);
if (!isMixedPair) {
Expand Down Expand Up @@ -1306,8 +1313,9 @@

for (const auto& track : tracks) {

if (!selectTrack(track, Species::kHad))
if (!selectTrack(track, Species::kHad)) {
continue;
}

const float itsNSigmaHad = settingHadPDGCode == PDG_t::kProton ? mResponseITS.nSigmaITS<o2::track::PID::Proton>(track.itsClusterSizes(), track.p(), track.eta()) : mResponseITS.nSigmaITS<o2::track::PID::Pion>(track.itsClusterSizes(), track.p(), track.eta());
mQaRegistry.fill(HIST("Had/h2NsigmaHadronITS_preselection"), track.sign() * track.pt(), itsNSigmaHad, collision.centFT0C());
Expand All @@ -1332,8 +1340,9 @@
const float itsNSigmaHe3 = mResponseITS.nSigmaITS<o2::track::PID::Helium3>(track.itsClusterSizes(), 2 * track.p(), track.eta());
mQaRegistry.fill(HIST("He3/h2NsigmaHe3ITS_preselection"), ptHe3Corrected, itsNSigmaHe3, collision.centFT0C());

if (!selectTrack(track, Species::kHe3) || !selectDcaNsigmaCut(ptHe3Corrected, track.dcaXY(), track.dcaZ(), Species::kHe3) || (itsNSigmaHe3 < cutSettings.settingCutNsigmaITSHe3))
if (!selectTrack(track, Species::kHe3) || !selectDcaNsigmaCut(ptHe3Corrected, track.dcaXY(), track.dcaZ(), Species::kHe3) || (itsNSigmaHe3 < cutSettings.settingCutNsigmaITSHe3)) {
continue;
}

mQaRegistry.fill(HIST("He3/hHe3Pt"), track.sign() * ptHe3Corrected);
mQaRegistry.fill(HIST("He3/hDCAxyHe3"), track.dcaXY());
Expand All @@ -1353,17 +1362,20 @@

void processPurityMc(const CollisionsFullMC::iterator& collision, const TrackCandidatesMC& tracks, const aod::BCsWithTimestamps& bcs, const aod::McParticles& /*mcParticles*/, const aod::McTrackLabels& /*mcTrackLabels*/)
{
if (!selectCollision</*isMC*/ false>(collision, bcs))
if (!selectCollision</*isMC*/ false>(collision, bcs)) {
return;
}

for (const auto& track : tracks) {

if (!track.has_mcParticle())
if (!track.has_mcParticle()) {
continue;
}
const auto& particle = track.mcParticle_as<aod::McParticles>();

if (!selectTrack(track, Species::kHad))
if (!selectTrack(track, Species::kHad)) {
continue;
}

if (selectDcaNsigmaCut(track.pt(), track.dcaXY(), track.dcaZ(), Species::kHad)) {
mQaRegistry.fill(HIST("Had/hHadronPt"), track.pt());
Expand All @@ -1390,8 +1402,9 @@
}

const float ptHe3Corrected = correctPtHe3TrackedAsTriton(track.pt(), track.pidForTracking());
if (!selectTrack(track, Species::kHe3) || !selectDcaNsigmaCut(ptHe3Corrected, track.dcaXY(), track.dcaZ(), Species::kHe3))
if (!selectTrack(track, Species::kHe3) || !selectDcaNsigmaCut(ptHe3Corrected, track.dcaXY(), track.dcaZ(), Species::kHe3)) {
continue;
}

mQaRegistry.fill(HIST("He3/hHe3Pt"), ptHe3Corrected);
mQaRegistry.fill(HIST("He3/hDCAxyHe3"), track.dcaXY());
Expand Down
Loading