Skip to content

Commit f11e1e9

Browse files
authored
feat: Add new features to the NonPromptCascadeTask (#8881)
1 parent 88139f2 commit f11e1e9

File tree

2 files changed

+26
-14
lines changed

2 files changed

+26
-14
lines changed

PWGLF/DataModel/LFNonPromptCascadeTables.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ namespace o2::aod
2525
namespace NPCascadeTable
2626
{
2727
DECLARE_SOA_COLUMN(MatchingChi2, matchingChi2, float);
28+
DECLARE_SOA_COLUMN(DeltaPtITSCascade, deltaPtITSCascade, float);
2829
DECLARE_SOA_COLUMN(ITSClusSize, itsClusSize, float);
30+
DECLARE_SOA_COLUMN(HasReassociatedCluster, hasReassociatedCluster, bool);
2931
DECLARE_SOA_COLUMN(IsGoodMatch, isGoodMatch, bool);
3032
DECLARE_SOA_COLUMN(IsGoodCascade, isGoodCascade, bool);
3133
DECLARE_SOA_COLUMN(PdgCodeMom, pdgCodeMom, int);
@@ -108,7 +110,9 @@ DECLARE_SOA_COLUMN(MCcollisionMatch, mcCollisionMatch, bool);
108110
} // namespace NPCascadeTable
109111
DECLARE_SOA_TABLE(NPCascTable, "AOD", "NPCASCTABLE",
110112
NPCascadeTable::MatchingChi2,
113+
NPCascadeTable::DeltaPtITSCascade,
111114
NPCascadeTable::ITSClusSize,
115+
NPCascadeTable::HasReassociatedCluster,
112116
NPCascadeTable::PvX,
113117
NPCascadeTable::PvY,
114118
NPCascadeTable::PvZ,
@@ -162,7 +166,9 @@ DECLARE_SOA_TABLE(NPCascTable, "AOD", "NPCASCTABLE",
162166

163167
DECLARE_SOA_TABLE(NPCascTableMC, "AOD", "NPCASCTABLEMC",
164168
NPCascadeTable::MatchingChi2,
169+
NPCascadeTable::DeltaPtITSCascade,
165170
NPCascadeTable::ITSClusSize,
171+
NPCascadeTable::HasReassociatedCluster,
166172
NPCascadeTable::IsGoodMatch,
167173
NPCascadeTable::IsGoodCascade,
168174
NPCascadeTable::PdgCodeMom,

PWGLF/Tasks/Strangeness/nonPromptCascade.cxx

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
// granted to it by virtue of its status as an Intergovernmental Organization
1010
// or submit itself to any jurisdiction.
1111

12+
#include <cmath>
1213
#include <memory>
1314
#include <string>
1415
#include <vector>
@@ -47,7 +48,9 @@ struct NPCascCandidate {
4748
int64_t trackITSID;
4849
int64_t collisionID;
4950
float matchingChi2;
51+
float deltaPt;
5052
float itsClusSize;
53+
bool hasReassociatedCluster;
5154
bool isGoodMatch;
5255
bool isGoodCascade;
5356
int pdgCodeMom;
@@ -292,7 +295,7 @@ struct NonPromptCascadeTask {
292295
if (o2::base::Propagator::Instance()->propagateToDCA(primaryVertex, trackCovTrk, bz, 2.f, matCorr, &impactParameterTrk)) {
293296
if (protonTrack.hasTPC() && pionTrack.hasTPC()) {
294297
if (isOmega) {
295-
registry.fill(HIST("h_dca_Omega"), TMath::Sqrt(impactParameterTrk.getR2()));
298+
registry.fill(HIST("h_dca_Omega"), std::sqrt(impactParameterTrk.getR2()));
296299
registry.fill(HIST("h_dcaxy_Omega"), impactParameterTrk.getY());
297300
registry.fill(HIST("h_dcaz_Omega"), impactParameterTrk.getZ());
298301
registry.fill(HIST("h_dcavspt_Omega"), impactParameterTrk.getY(), track.pt());
@@ -301,7 +304,7 @@ struct NonPromptCascadeTask {
301304
}
302305

303306
if (protonTrack.hasTPC() && pionTrack.hasTPC()) {
304-
registry.fill(HIST("h_dca_Xi"), TMath::Sqrt(impactParameterTrk.getR2()));
307+
registry.fill(HIST("h_dca_Xi"), std::sqrt(impactParameterTrk.getR2()));
305308
registry.fill(HIST("h_dcaxy_Xi"), impactParameterTrk.getY());
306309
registry.fill(HIST("h_dcaz_Xi"), impactParameterTrk.getZ());
307310
registry.fill(HIST("h_dcavspt_Xi"), impactParameterTrk.getY(), track.pt());
@@ -432,6 +435,7 @@ struct NonPromptCascadeTask {
432435
o2::track::TrackParCov trackParCovV0;
433436
o2::track::TrackPar trackParV0;
434437
o2::track::TrackPar trackParBachelor;
438+
std::array<float, 3> cascadeMomentum;
435439

436440
float cascCpa = -1;
437441
float v0Cpa = -1;
@@ -446,10 +450,9 @@ struct NonPromptCascadeTask {
446450
trackParBachelor = df2.getTrackParamAtPCA(1);
447451
trackParV0.getPxPyPzGlo(momenta[0]); // getting the V0 momentum
448452
trackParBachelor.getPxPyPzGlo(momenta[1]); // getting the bachelor momentum
449-
std::array<float, 3> pVec;
450-
df2.createParentTrackParCov().getPxPyPzGlo(pVec);
453+
df2.createParentTrackParCov().getPxPyPzGlo(cascadeMomentum);
451454
std::array<float, 3> pvPos = {primaryVertex.getX(), primaryVertex.getY(), primaryVertex.getZ()};
452-
cascCpa = RecoDecay::cpa(pvPos, df2.getPCACandidate(), pVec);
455+
cascCpa = RecoDecay::cpa(pvPos, df2.getPCACandidate(), cascadeMomentum);
453456
v0Cpa = RecoDecay::cpa(pvPos, df2.getPCACandidate(), momenta[0]);
454457
} else {
455458
continue;
@@ -599,8 +602,9 @@ struct NonPromptCascadeTask {
599602
pdgCodeMom = track.mcParticle().has_mothers() ? track.mcParticle().mothers_as<aod::McParticles>()[0].pdgCode() : 0;
600603
}
601604
int itsTrackPDG = ITStrack.has_mcParticle() ? ITStrack.mcParticle().pdgCode() : 0;
602-
603-
candidates.emplace_back(NPCascCandidate{track.globalIndex(), ITStrack.globalIndex(), trackedCascade.collisionId(), trackedCascade.matchingChi2(), trackedCascade.itsClsSize(), isGoodMatch, isGoodCascade, pdgCodeMom, itsTrackPDG, std::get<0>(fromHF), std::get<1>(fromHF),
605+
float deltaPtITSCascade = std::hypot(cascadeMomentum[0], cascadeMomentum[1]) - ITStrack.pt();
606+
bool hasReassociatedClusters = (track.itsNCls() != ITStrack.itsNCls());
607+
candidates.emplace_back(NPCascCandidate{track.globalIndex(), ITStrack.globalIndex(), trackedCascade.collisionId(), trackedCascade.matchingChi2(), deltaPtITSCascade, trackedCascade.itsClsSize(), hasReassociatedClusters, isGoodMatch, isGoodCascade, pdgCodeMom, itsTrackPDG, std::get<0>(fromHF), std::get<1>(fromHF),
604608
primaryVertex.getX(), primaryVertex.getY(), primaryVertex.getZ(),
605609
track.pt(), track.eta(), track.phi(),
606610
protonTrack.pt(), protonTrack.eta(), pionTrack.pt(), pionTrack.eta(), bachelor.pt(), bachelor.eta(),
@@ -629,7 +633,7 @@ struct NonPromptCascadeTask {
629633
auto mcCollision = particle.mcCollision_as<aod::McCollisions>();
630634
auto label = collisions.iteratorAt(c.collisionID);
631635

632-
NPCTableMC(c.matchingChi2, c.itsClusSize, c.isGoodMatch, c.isGoodCascade, c.pdgCodeMom, c.pdgCodeITStrack, c.isFromBeauty, c.isFromCharm,
636+
NPCTableMC(c.matchingChi2, c.deltaPt, c.itsClusSize, c.hasReassociatedCluster, c.isGoodMatch, c.isGoodCascade, c.pdgCodeMom, c.pdgCodeITStrack, c.isFromBeauty, c.isFromCharm,
633637
c.pvX, c.pvY, c.pvZ,
634638
c.cascPt, c.cascEta, c.cascPhi,
635639
c.protonPt, c.protonEta, c.pionPt, c.pionEta, c.bachPt, c.bachEta,
@@ -691,6 +695,7 @@ struct NonPromptCascadeTask {
691695
const auto& ntrack = v0.negTrack_as<TracksExtData>();
692696
const auto& protonTrack = bachelor.sign() > 0 ? ntrack : ptrack;
693697
const auto& pionTrack = bachelor.sign() > 0 ? ptrack : ntrack;
698+
bool hasReassociatedClusters = (track.itsNCls() != ITStrack.itsNCls());
694699

695700
std::array<std::array<float, 3>, 2> momenta;
696701
std::array<double, 2> masses;
@@ -699,6 +704,7 @@ struct NonPromptCascadeTask {
699704
o2::track::TrackParCov trackParCovV0;
700705
o2::track::TrackPar trackParV0;
701706
o2::track::TrackPar trackParBachelor;
707+
std::array<float, 3> cascadeMomentum;
702708

703709
float cascCpa = -1;
704710
float v0Cpa = -1;
@@ -713,17 +719,17 @@ struct NonPromptCascadeTask {
713719
trackParBachelor = df2.getTrackParamAtPCA(1);
714720
trackParV0.getPxPyPzGlo(momenta[0]); // getting the V0 momentum
715721
trackParBachelor.getPxPyPzGlo(momenta[1]); // getting the bachelor momentum
716-
std::array<float, 3> pVec;
717-
df2.createParentTrackParCov().getPxPyPzGlo(pVec);
722+
df2.createParentTrackParCov().getPxPyPzGlo(cascadeMomentum);
718723
std::array<float, 3> pvPos = {primaryVertex.getX(), primaryVertex.getY(), primaryVertex.getZ()};
719-
cascCpa = RecoDecay::cpa(pvPos, df2.getPCACandidate(), pVec);
724+
cascCpa = RecoDecay::cpa(pvPos, df2.getPCACandidate(), cascadeMomentum);
720725
v0Cpa = RecoDecay::cpa(pvPos, df2.getPCACandidate(), momenta[0]);
721726
} else {
722727
continue;
723728
}
724729
} else {
725730
continue;
726731
}
732+
float deltaPtITSCascade = std::hypot(cascadeMomentum[0], cascadeMomentum[1]) - ITStrack.pt();
727733

728734
// PV
729735
registry.fill(HIST("h_PV_x"), primaryVertex.getX());
@@ -745,7 +751,7 @@ struct NonPromptCascadeTask {
745751
const auto v0mass = RecoDecay::m(momenta, masses);
746752

747753
////Omega hypohesis -> rejecting Xi
748-
if (TMath::Abs(massXi - constants::physics::MassXiMinus) > 0.005) {
754+
if (std::abs(massXi - constants::physics::MassXiMinus) > 0.005) {
749755
isOmega = true;
750756
invMassBCOmega->Fill(massOmega);
751757
}
@@ -849,7 +855,7 @@ struct NonPromptCascadeTask {
849855
daughtersDCA dDCA;
850856
fillDauDCA(trackedCascade, bachelor, protonTrack, pionTrack, primaryVertex, isOmega, dDCA);
851857

852-
candidates.emplace_back(NPCascCandidate{track.globalIndex(), ITStrack.globalIndex(), trackedCascade.collisionId(), trackedCascade.matchingChi2(), trackedCascade.itsClsSize(), 0, 0, 0, 0, 0, 0,
858+
candidates.emplace_back(NPCascCandidate{track.globalIndex(), ITStrack.globalIndex(), trackedCascade.collisionId(), trackedCascade.matchingChi2(), deltaPtITSCascade, trackedCascade.itsClsSize(), hasReassociatedClusters, 0, 0, 0, 0, 0, 0,
853859
primaryVertex.getX(), primaryVertex.getY(), primaryVertex.getZ(),
854860
track.pt(), track.eta(), track.phi(),
855861
protonTrack.pt(), protonTrack.eta(), pionTrack.pt(), pionTrack.eta(), bachelor.pt(), bachelor.eta(),
@@ -865,7 +871,7 @@ struct NonPromptCascadeTask {
865871

866872
for (auto& c : candidates) {
867873

868-
NPCTable(c.matchingChi2, c.itsClusSize,
874+
NPCTable(c.matchingChi2, c.deltaPt, c.itsClusSize, c.hasReassociatedCluster,
869875
c.pvX, c.pvY, c.pvZ,
870876
c.cascPt, c.cascEta, c.cascPhi,
871877
c.protonPt, c.protonEta, c.pionPt, c.pionEta, c.bachPt, c.bachEta,

0 commit comments

Comments
 (0)