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
27 changes: 20 additions & 7 deletions PWGLF/DataModel/LFNonPromptCascadeTables.h
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/DataModel/LFNonPromptCascadeTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[doc/file]

Provide mandatory file documentation.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
Expand All @@ -12,7 +12,7 @@
///
/// \file LFNonPromptCascadeTable.h
/// \brief Non prompt cascade tables
///

Check failure on line 15 in PWGLF/DataModel/LFNonPromptCascadeTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[doc/file]

Documentation for \author is missing, incorrect or misplaced.

Check failure on line 15 in PWGLF/DataModel/LFNonPromptCascadeTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[doc/file]

Documentation for \file is missing, incorrect or misplaced.

#include "Framework/AnalysisDataModel.h"
#include "Framework/ASoAHelpers.h"
Expand All @@ -26,7 +26,8 @@
{
DECLARE_SOA_COLUMN(MatchingChi2, matchingChi2, float);
DECLARE_SOA_COLUMN(DeltaPtITSCascade, deltaPtITSCascade, float);
DECLARE_SOA_COLUMN(DeltaPtCascade, deltaPtCascade, float);
DECLARE_SOA_COLUMN(ITSClusSize, itsClusSize, float);

Check failure on line 30 in PWGLF/DataModel/LFNonPromptCascadeTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(HasReassociatedCluster, hasReassociatedCluster, bool);
DECLARE_SOA_COLUMN(IsGoodMatch, isGoodMatch, bool);
DECLARE_SOA_COLUMN(IsGoodCascade, isGoodCascade, bool);
Expand All @@ -38,6 +39,7 @@
DECLARE_SOA_COLUMN(PvX, pvX, float);
DECLARE_SOA_COLUMN(PvY, pvY, float);
DECLARE_SOA_COLUMN(PvZ, pvZ, float);

DECLARE_SOA_COLUMN(CascPVContribs, cascPVContribs, uint8_t);

DECLARE_SOA_COLUMN(CascPt, cascPt, float);
Expand All @@ -60,8 +62,8 @@
DECLARE_SOA_COLUMN(BachDCAxy, bachDCAxy, float);
DECLARE_SOA_COLUMN(BachDCAz, bachDCAz, float);

DECLARE_SOA_COLUMN(CascCosPA, casccosPA, float);

Check failure on line 65 in PWGLF/DataModel/LFNonPromptCascadeTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(V0CosPA, v0cosPA, float);

Check failure on line 66 in PWGLF/DataModel/LFNonPromptCascadeTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.

DECLARE_SOA_COLUMN(MassXi, massXi, double);
DECLARE_SOA_COLUMN(MassOmega, massOmega, double);
Expand Down Expand Up @@ -96,14 +98,16 @@
DECLARE_SOA_COLUMN(BachKaonTOFNSigma, bachKaonTOFNSigma, float);
DECLARE_SOA_COLUMN(BachPionTOFNSigma, bachPionTOFNSigma, float);

DECLARE_SOA_COLUMN(gPt, genPt, float);

Check failure on line 101 in PWGLF/DataModel/LFNonPromptCascadeTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(gEta, genEta, float);

Check failure on line 102 in PWGLF/DataModel/LFNonPromptCascadeTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(gPhi, genPhi, float);

Check failure on line 103 in PWGLF/DataModel/LFNonPromptCascadeTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(PDGcode, pdgCode, int);

Check failure on line 104 in PWGLF/DataModel/LFNonPromptCascadeTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(DCAxMC, dcaXmc, float);
DECLARE_SOA_COLUMN(DCAyMC, dcaYmc, float);
DECLARE_SOA_COLUMN(DCAzMC, dcaZmc, float);
DECLARE_SOA_COLUMN(MCcollisionMatch, mcCollisionMatch, bool);
DECLARE_SOA_COLUMN(HasFakeReassociation, hasFakeReassociation, bool);
DECLARE_SOA_COLUMN(MotherDecayDaughters, motherDecayDaughters, int8_t);

DECLARE_SOA_COLUMN(Sel8, sel8, bool);
DECLARE_SOA_COLUMN(MultFT0C, multFT0C, float);
Expand All @@ -113,6 +117,7 @@
DECLARE_SOA_TABLE(NPCascTable, "AOD", "NPCASCTABLE",
NPCascadeTable::MatchingChi2,
NPCascadeTable::DeltaPtITSCascade,
NPCascadeTable::DeltaPtCascade,
NPCascadeTable::ITSClusSize,
NPCascadeTable::HasReassociatedCluster,
aod::collision::NumContrib,
Expand Down Expand Up @@ -172,6 +177,7 @@
DECLARE_SOA_TABLE(NPCascTableNT, "AOD", "NPCASCTABLENT",
NPCascadeTable::MatchingChi2,
NPCascadeTable::DeltaPtITSCascade,
NPCascadeTable::DeltaPtCascade,
NPCascadeTable::ITSClusSize,
NPCascadeTable::HasReassociatedCluster,
aod::collision::NumContrib,
Expand Down Expand Up @@ -231,6 +237,7 @@
DECLARE_SOA_TABLE(NPCascTableMC, "AOD", "NPCASCTABLEMC",
NPCascadeTable::MatchingChi2,
NPCascadeTable::DeltaPtITSCascade,
NPCascadeTable::DeltaPtCascade,
NPCascadeTable::ITSClusSize,
NPCascadeTable::HasReassociatedCluster,
NPCascadeTable::IsGoodMatch,
Expand Down Expand Up @@ -289,6 +296,9 @@
NPCascadeTable::PionTOFNSigma,
NPCascadeTable::BachKaonTOFNSigma,
NPCascadeTable::BachPionTOFNSigma,
NPCascadeTable::Sel8,
NPCascadeTable::MultFT0C,
NPCascadeTable::MultFT0A,
NPCascadeTable::gPt,
NPCascadeTable::gEta,
NPCascadeTable::gPhi,
Expand All @@ -297,13 +307,13 @@
NPCascadeTable::DCAyMC,
NPCascadeTable::DCAzMC,
NPCascadeTable::MCcollisionMatch,
NPCascadeTable::Sel8,
NPCascadeTable::MultFT0C,
NPCascadeTable::MultFT0A)
NPCascadeTable::HasFakeReassociation,
NPCascadeTable::MotherDecayDaughters)

DECLARE_SOA_TABLE(NPCascTableMCNT, "AOD", "NPCASCTABLEMCNT",
NPCascadeTable::MatchingChi2,
NPCascadeTable::DeltaPtITSCascade,
NPCascadeTable::DeltaPtCascade,
NPCascadeTable::ITSClusSize,
NPCascadeTable::HasReassociatedCluster,
NPCascadeTable::IsGoodMatch,
Expand Down Expand Up @@ -362,6 +372,9 @@
NPCascadeTable::PionTOFNSigma,
NPCascadeTable::BachKaonTOFNSigma,
NPCascadeTable::BachPionTOFNSigma,
NPCascadeTable::Sel8,
NPCascadeTable::MultFT0C,
NPCascadeTable::MultFT0A,
NPCascadeTable::gPt,
NPCascadeTable::gEta,
NPCascadeTable::gPhi,
Expand All @@ -370,9 +383,8 @@
NPCascadeTable::DCAyMC,
NPCascadeTable::DCAzMC,
NPCascadeTable::MCcollisionMatch,
NPCascadeTable::Sel8,
NPCascadeTable::MultFT0C,
NPCascadeTable::MultFT0A)
NPCascadeTable::HasFakeReassociation,
NPCascadeTable::MotherDecayDaughters)

DECLARE_SOA_TABLE(NPCascTableGen, "AOD", "NPCASCTABLEGen",
NPCascadeTable::gPt,
Expand All @@ -384,7 +396,8 @@
NPCascadeTable::DCAyMC,
NPCascadeTable::DCAzMC,
NPCascadeTable::IsFromBeauty,
NPCascadeTable::IsFromCharm)
NPCascadeTable::IsFromCharm,
NPCascadeTable::MotherDecayDaughters)

} // namespace o2::aod

Expand Down
63 changes: 48 additions & 15 deletions PWGLF/Tasks/Strangeness/nonPromptCascade.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,11 @@ struct NPCascCandidate {
int64_t trackITSID;
int64_t collisionID;
float matchingChi2;
float deltaPtITS;
float deltaPt;
float itsClusSize;
bool hasReassociatedCluster;
bool hasFakeReassociation;
bool isGoodMatch;
bool isGoodCascade;
int pdgCodeMom;
Expand Down Expand Up @@ -346,13 +348,15 @@ struct NonPromptCascadeTask {
o2::math_utils::SVector<double, 3> cascadePos, v0Pos;

float cascCpa = -1, v0Cpa = -1;
o2::track::TrackParCov ntCascadeTrack;
if (mDCAFitter.process(pionTrkParCov, protonTrkParCov)) {
auto trackParCovV0 = mDCAFitter.createParentTrackParCov(0); // V0 track retrieved from p and pi daughters
v0Pos = mDCAFitter.getPCACandidate();
if (mDCAFitter.process(trackParCovV0, bachTrkParCov)) {
mDCAFitter.getTrackParamAtPCA(0).getPxPyPzGlo(momenta[0]);
mDCAFitter.getTrackParamAtPCA(1).getPxPyPzGlo(momenta[1]);
mDCAFitter.createParentTrackParCov().getPxPyPzGlo(cascadeMomentum);
ntCascadeTrack = mDCAFitter.createParentTrackParCov();
ntCascadeTrack.getPxPyPzGlo(cascadeMomentum);
std::array<float, 3> pvPos = {primaryVertex.getX(), primaryVertex.getY(), primaryVertex.getZ()};
cascadePos = mDCAFitter.getPCACandidate();
cascCpa = RecoDecay::cpa(pvPos, mDCAFitter.getPCACandidate(), cascadeMomentum);
Expand Down Expand Up @@ -400,6 +404,7 @@ struct NonPromptCascadeTask {
if (v0part.mothersIds()[0] == bachelor.mcParticle().mothersIds()[0]) {
if (std::abs(motherV0.pdgCode()) == 3312 || std::abs(motherV0.pdgCode()) == 3334) {
isGoodCascade = true;

isOmega = (std::abs(motherV0.pdgCode()) == 3334);
fromHF = isFromHF(motherV0);
mcParticleID = v0part.mothersIds()[0];
Expand All @@ -424,18 +429,19 @@ struct NonPromptCascadeTask {
o2::base::Propagator::Instance()->propagateToDCA(primaryVertex, pionTrkParCov, mBz, 2.f, matCorr, &pionDCA);
o2::base::Propagator::Instance()->propagateToDCA(primaryVertex, bachTrkParCov, mBz, 2.f, matCorr, &bachDCA);

float deltaPtITSCascade{-1.e10f}, cascITSclsSize{-1.e10f}, matchingChi2{-1.e10f};
bool hasReassociatedClusters{false};
float deltaPtITSCascade{-1.e10f}, deltaPtCascade{-1.e10f}, cascITSclsSize{-1.e10f}, matchingChi2{-1.e10f};
bool hasReassociatedClusters{false}, hasFakeReassociation{false};
int trackedCascGlobalIndex{-1}, itsTrackGlobalIndex{-1}, cascITSclusters{-1};
if constexpr (requires { candidate.track(); }) {
const auto& track = candidate.template track_as<TrackType>();
cascPVContribs |= track.isPVContributor() << 0;
const auto& ITStrack = candidate.template itsTrack_as<TrackType>();
cascPVContribs |= ITStrack.isPVContributor() << 0;
auto trackTrkParCov = getTrackParCov(track);
o2::base::Propagator::Instance()->propagateToDCA(primaryVertex, trackTrkParCov, mBz, 2.f, matCorr, &motherDCA);
hasReassociatedClusters = (track.itsNCls() != ITStrack.itsNCls());
cascadeLvector.SetCoordinates(track.pt(), track.eta(), track.phi(), 0);
deltaPtITSCascade = std::hypot(cascadeMomentum[0], cascadeMomentum[1]) - ITStrack.pt();
deltaPtCascade = std::hypot(cascadeMomentum[0], cascadeMomentum[1]) - track.pt();
trackedCascGlobalIndex = track.globalIndex();
itsTrackGlobalIndex = ITStrack.globalIndex();
cascITSclusters = track.itsNCls();
Expand All @@ -447,14 +453,14 @@ struct NonPromptCascadeTask {

if (isGoodMatch) {
pdgCodeMom = track.mcParticle().has_mothers() ? track.mcParticle().template mothers_as<aod::McParticles>()[0].pdgCode() : 0;
hasFakeReassociation = track.mcMask() & (1 << 15);
}
itsTrackPDG = ITStrack.has_mcParticle() ? ITStrack.mcParticle().pdgCode() : 0;
}
} else {
o2::base::Propagator::Instance()->propagateToDCA(primaryVertex, ntCascadeTrack, mBz, 2.f, matCorr, &motherDCA);
}
// bool mysel8 = collision.sel8();
float mc = collision.multFT0C();
float ma = collision.multFT0A();
candidates.emplace_back(NPCascCandidate{mcParticleID, trackedCascGlobalIndex, itsTrackGlobalIndex, candidate.collisionId(), matchingChi2, deltaPtITSCascade, cascITSclsSize, hasReassociatedClusters, isGoodMatch, isGoodCascade, pdgCodeMom, itsTrackPDG, fromHF[0], fromHF[1],
candidates.emplace_back(NPCascCandidate{mcParticleID, trackedCascGlobalIndex, itsTrackGlobalIndex, candidate.collisionId(), matchingChi2, deltaPtITSCascade, deltaPtCascade, cascITSclsSize, hasReassociatedClusters, hasFakeReassociation, isGoodMatch, isGoodCascade, pdgCodeMom, itsTrackPDG, fromHF[0], fromHF[1],
collision.numContrib(), cascPVContribs, collision.collisionTimeRes(), primaryVertex.getX(), primaryVertex.getY(), primaryVertex.getZ(),
cascadeLvector.pt(), cascadeLvector.eta(), cascadeLvector.phi(),
protonTrack.pt(), protonTrack.eta(), pionTrack.pt(), pionTrack.eta(), bachelor.pt(), bachelor.eta(),
Expand All @@ -464,15 +470,15 @@ struct NonPromptCascadeTask {
cascITSclusters, protonTrack.itsNCls(), pionTrack.itsNCls(), bachelor.itsNCls(), protonTrack.tpcNClsFound(), pionTrack.tpcNClsFound(), bachelor.tpcNClsFound(),
protonTrack.tpcNSigmaPr(), pionTrack.tpcNSigmaPi(), bachelor.tpcNSigmaKa(), bachelor.tpcNSigmaPi(),
protonTrack.hasTOF(), pionTrack.hasTOF(), bachelor.hasTOF(),
protonTrack.tofNSigmaPr(), pionTrack.tofNSigmaPi(), bachelor.tofNSigmaKa(), bachelor.tofNSigmaPi(), collision.sel8(), mc, ma});
protonTrack.tofNSigmaPr(), pionTrack.tofNSigmaPi(), bachelor.tofNSigmaKa(), bachelor.tofNSigmaPi(), collision.sel8(), collision.multFT0C(), collision.multFT0A()});
}
}

template <typename CascadeType>
void fillDataTable(auto const& candidates)
{
for (const auto& c : candidates) {
getDataTable<CascadeType>()(c.matchingChi2, c.deltaPt, c.itsClusSize, c.hasReassociatedCluster,
getDataTable<CascadeType>()(c.matchingChi2, c.deltaPtITS, c.deltaPt, c.itsClusSize, c.hasReassociatedCluster,
c.pvContributors, c.cascPVContribs, c.pvTimeResolution, c.pvX, c.pvY, c.pvZ,
c.cascPt, c.cascEta, c.cascPhi,
c.protonPt, c.protonEta, c.pionPt, c.pionEta, c.bachPt, c.bachEta,
Expand All @@ -483,7 +489,8 @@ struct NonPromptCascadeTask {
c.cascNClusITS, c.protonNClusITS, c.pionNClusITS, c.bachNClusITS, c.protonNClusTPC, c.pionNClusTPC, c.bachNClusTPC,
c.protonTPCNSigma, c.pionTPCNSigma, c.bachKaonTPCNSigma, c.bachPionTPCNSigma,
c.protonHasTOF, c.pionHasTOF, c.bachHasTOF,
c.protonTOFNSigma, c.pionTOFNSigma, c.bachKaonTOFNSigma, c.bachPionTOFNSigma, c.sel8, c.multFT0C, c.multFT0A);
c.protonTOFNSigma, c.pionTOFNSigma, c.bachKaonTOFNSigma, c.bachPionTOFNSigma,
c.sel8, c.multFT0C, c.multFT0A);
}
}

Expand All @@ -496,19 +503,32 @@ struct NonPromptCascadeTask {
continue;
}
auto particle = mcParticles.iteratorAt(c.mcParticleId);
int motherDecayDaughters{0};
if (c.isFromBeauty || c.isFromCharm) {
auto mom = particle.template mothers_as<aod::McParticles>()[0];
auto daughters = mom.template daughters_as<aod::McParticles>();
motherDecayDaughters = daughters.size();
for (const auto& d : daughters) {
if (std::abs(d.pdgCode()) == 11 || std::abs(d.pdgCode()) == 13) {
motherDecayDaughters *= -1;
break;
}
}
}
auto mcCollision = particle.template mcCollision_as<aod::McCollisions>();
auto recCollision = collisions.iteratorAt(c.collisionID);

getMCtable<CascadeType>()(c.matchingChi2, c.deltaPt, c.itsClusSize, c.hasReassociatedCluster, c.isGoodMatch, c.isGoodCascade, c.pdgCodeMom, c.pdgCodeITStrack, c.isFromBeauty, c.isFromCharm,
getMCtable<CascadeType>()(c.matchingChi2, c.deltaPtITS, c.deltaPt, c.itsClusSize, c.hasReassociatedCluster, c.isGoodMatch, c.isGoodCascade, c.pdgCodeMom, c.pdgCodeITStrack, c.isFromBeauty, c.isFromCharm,
c.pvContributors, c.cascPVContribs, c.pvTimeResolution, c.pvX, c.pvY, c.pvZ, c.cascPt, c.cascEta, c.cascPhi,
c.protonPt, c.protonEta, c.pionPt, c.pionEta, c.bachPt, c.bachEta,
c.cascDCAxy, c.cascDCAz, c.protonDCAxy, c.protonDCAz, c.pionDCAxy, c.pionDCAz, c.bachDCAxy, c.bachDCAz,
c.casccosPA, c.v0cosPA, c.massXi, c.massOmega, c.massV0, c.cascRadius, c.v0radius, c.cascLength, c.v0length,
c.cascNClusITS, c.protonNClusITS, c.pionNClusITS, c.bachNClusITS, c.protonNClusTPC, c.pionNClusTPC, c.bachNClusTPC, c.protonTPCNSigma,
c.pionTPCNSigma, c.bachKaonTPCNSigma, c.bachPionTPCNSigma, c.protonHasTOF, c.pionHasTOF, c.bachHasTOF,
c.protonTOFNSigma, c.pionTOFNSigma, c.bachKaonTOFNSigma, c.bachPionTOFNSigma, c.sel8, c.multFT0C, c.multFT0A,
c.protonTOFNSigma, c.pionTOFNSigma, c.bachKaonTOFNSigma, c.bachPionTOFNSigma,
c.sel8, c.multFT0C, c.multFT0A,
particle.pt(), particle.eta(), particle.phi(), particle.pdgCode(), mcCollision.posX() - particle.vx(), mcCollision.posY() - particle.vy(),
mcCollision.posZ() - particle.vz(), mcCollision.globalIndex() == recCollision.mcCollisionId());
mcCollision.posZ() - particle.vz(), mcCollision.globalIndex() == recCollision.mcCollisionId(), c.hasFakeReassociation, motherDecayDaughters);
}
}

Expand Down Expand Up @@ -562,7 +582,20 @@ struct NonPromptCascadeTask {
int pdgCodeMom = p.has_mothers() ? p.template mothers_as<aod::McParticles>()[0].pdgCode() : 0;
auto mcCollision = p.template mcCollision_as<aod::McCollisions>();

NPCTableGen(p.pt(), p.eta(), p.phi(), p.pdgCode(), pdgCodeMom, mcCollision.posX() - p.vx(), mcCollision.posY() - p.vy(), mcCollision.posZ() - p.vz(), fromHF[0], fromHF[1]);
int motherDecayDaughters{0};
if (fromHF[0] || fromHF[1]) {
auto mom = p.template mothers_as<aod::McParticles>()[0];
auto daughters = mom.template daughters_as<aod::McParticles>();
motherDecayDaughters = daughters.size();
for (const auto& d : daughters) {
if (std::abs(d.pdgCode()) == 11 || std::abs(d.pdgCode()) == 13) {
motherDecayDaughters *= -1;
break;
}
}
}

NPCTableGen(p.pt(), p.eta(), p.phi(), p.pdgCode(), pdgCodeMom, mcCollision.posX() - p.vx(), mcCollision.posY() - p.vy(), mcCollision.posZ() - p.vz(), fromHF[0], fromHF[1], motherDecayDaughters);
}
}
PROCESS_SWITCH(NonPromptCascadeTask, processGenParticles, "process gen cascades: MC analysis", false);
Expand Down
Loading