Skip to content

Commit 07b1fd7

Browse files
fmazzascFrancesco Mazzaschi
andauthored
[PWGLF] Fix table filling in the nonPromptCascade task (#11082)
Co-authored-by: Francesco Mazzaschi <fmazzasc@alipap1.cern.ch>
1 parent b86cd54 commit 07b1fd7

File tree

2 files changed

+68
-22
lines changed

2 files changed

+68
-22
lines changed

PWGLF/DataModel/LFNonPromptCascadeTables.h

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ namespace NPCascadeTable
2626
{
2727
DECLARE_SOA_COLUMN(MatchingChi2, matchingChi2, float);
2828
DECLARE_SOA_COLUMN(DeltaPtITSCascade, deltaPtITSCascade, float);
29+
DECLARE_SOA_COLUMN(DeltaPtCascade, deltaPtCascade, float);
2930
DECLARE_SOA_COLUMN(ITSClusSize, itsClusSize, float);
3031
DECLARE_SOA_COLUMN(HasReassociatedCluster, hasReassociatedCluster, bool);
3132
DECLARE_SOA_COLUMN(IsGoodMatch, isGoodMatch, bool);
@@ -38,6 +39,7 @@ DECLARE_SOA_COLUMN(IsFromCharm, isFromCharm, bool);
3839
DECLARE_SOA_COLUMN(PvX, pvX, float);
3940
DECLARE_SOA_COLUMN(PvY, pvY, float);
4041
DECLARE_SOA_COLUMN(PvZ, pvZ, float);
42+
4143
DECLARE_SOA_COLUMN(CascPVContribs, cascPVContribs, uint8_t);
4244

4345
DECLARE_SOA_COLUMN(CascPt, cascPt, float);
@@ -104,6 +106,8 @@ DECLARE_SOA_COLUMN(DCAxMC, dcaXmc, float);
104106
DECLARE_SOA_COLUMN(DCAyMC, dcaYmc, float);
105107
DECLARE_SOA_COLUMN(DCAzMC, dcaZmc, float);
106108
DECLARE_SOA_COLUMN(MCcollisionMatch, mcCollisionMatch, bool);
109+
DECLARE_SOA_COLUMN(HasFakeReassociation, hasFakeReassociation, bool);
110+
DECLARE_SOA_COLUMN(MotherDecayDaughters, motherDecayDaughters, int8_t);
107111

108112
DECLARE_SOA_COLUMN(Sel8, sel8, bool);
109113
DECLARE_SOA_COLUMN(MultFT0C, multFT0C, float);
@@ -113,6 +117,7 @@ DECLARE_SOA_COLUMN(MultFT0A, multFT0A, float);
113117
DECLARE_SOA_TABLE(NPCascTable, "AOD", "NPCASCTABLE",
114118
NPCascadeTable::MatchingChi2,
115119
NPCascadeTable::DeltaPtITSCascade,
120+
NPCascadeTable::DeltaPtCascade,
116121
NPCascadeTable::ITSClusSize,
117122
NPCascadeTable::HasReassociatedCluster,
118123
aod::collision::NumContrib,
@@ -172,6 +177,7 @@ DECLARE_SOA_TABLE(NPCascTable, "AOD", "NPCASCTABLE",
172177
DECLARE_SOA_TABLE(NPCascTableNT, "AOD", "NPCASCTABLENT",
173178
NPCascadeTable::MatchingChi2,
174179
NPCascadeTable::DeltaPtITSCascade,
180+
NPCascadeTable::DeltaPtCascade,
175181
NPCascadeTable::ITSClusSize,
176182
NPCascadeTable::HasReassociatedCluster,
177183
aod::collision::NumContrib,
@@ -231,6 +237,7 @@ DECLARE_SOA_TABLE(NPCascTableNT, "AOD", "NPCASCTABLENT",
231237
DECLARE_SOA_TABLE(NPCascTableMC, "AOD", "NPCASCTABLEMC",
232238
NPCascadeTable::MatchingChi2,
233239
NPCascadeTable::DeltaPtITSCascade,
240+
NPCascadeTable::DeltaPtCascade,
234241
NPCascadeTable::ITSClusSize,
235242
NPCascadeTable::HasReassociatedCluster,
236243
NPCascadeTable::IsGoodMatch,
@@ -289,6 +296,9 @@ DECLARE_SOA_TABLE(NPCascTableMC, "AOD", "NPCASCTABLEMC",
289296
NPCascadeTable::PionTOFNSigma,
290297
NPCascadeTable::BachKaonTOFNSigma,
291298
NPCascadeTable::BachPionTOFNSigma,
299+
NPCascadeTable::Sel8,
300+
NPCascadeTable::MultFT0C,
301+
NPCascadeTable::MultFT0A,
292302
NPCascadeTable::gPt,
293303
NPCascadeTable::gEta,
294304
NPCascadeTable::gPhi,
@@ -297,13 +307,13 @@ DECLARE_SOA_TABLE(NPCascTableMC, "AOD", "NPCASCTABLEMC",
297307
NPCascadeTable::DCAyMC,
298308
NPCascadeTable::DCAzMC,
299309
NPCascadeTable::MCcollisionMatch,
300-
NPCascadeTable::Sel8,
301-
NPCascadeTable::MultFT0C,
302-
NPCascadeTable::MultFT0A)
310+
NPCascadeTable::HasFakeReassociation,
311+
NPCascadeTable::MotherDecayDaughters)
303312

304313
DECLARE_SOA_TABLE(NPCascTableMCNT, "AOD", "NPCASCTABLEMCNT",
305314
NPCascadeTable::MatchingChi2,
306315
NPCascadeTable::DeltaPtITSCascade,
316+
NPCascadeTable::DeltaPtCascade,
307317
NPCascadeTable::ITSClusSize,
308318
NPCascadeTable::HasReassociatedCluster,
309319
NPCascadeTable::IsGoodMatch,
@@ -362,6 +372,9 @@ DECLARE_SOA_TABLE(NPCascTableMCNT, "AOD", "NPCASCTABLEMCNT",
362372
NPCascadeTable::PionTOFNSigma,
363373
NPCascadeTable::BachKaonTOFNSigma,
364374
NPCascadeTable::BachPionTOFNSigma,
375+
NPCascadeTable::Sel8,
376+
NPCascadeTable::MultFT0C,
377+
NPCascadeTable::MultFT0A,
365378
NPCascadeTable::gPt,
366379
NPCascadeTable::gEta,
367380
NPCascadeTable::gPhi,
@@ -370,9 +383,8 @@ DECLARE_SOA_TABLE(NPCascTableMCNT, "AOD", "NPCASCTABLEMCNT",
370383
NPCascadeTable::DCAyMC,
371384
NPCascadeTable::DCAzMC,
372385
NPCascadeTable::MCcollisionMatch,
373-
NPCascadeTable::Sel8,
374-
NPCascadeTable::MultFT0C,
375-
NPCascadeTable::MultFT0A)
386+
NPCascadeTable::HasFakeReassociation,
387+
NPCascadeTable::MotherDecayDaughters)
376388

377389
DECLARE_SOA_TABLE(NPCascTableGen, "AOD", "NPCASCTABLEGen",
378390
NPCascadeTable::gPt,
@@ -384,7 +396,8 @@ DECLARE_SOA_TABLE(NPCascTableGen, "AOD", "NPCASCTABLEGen",
384396
NPCascadeTable::DCAyMC,
385397
NPCascadeTable::DCAzMC,
386398
NPCascadeTable::IsFromBeauty,
387-
NPCascadeTable::IsFromCharm)
399+
NPCascadeTable::IsFromCharm,
400+
NPCascadeTable::MotherDecayDaughters)
388401

389402
} // namespace o2::aod
390403

PWGLF/Tasks/Strangeness/nonPromptCascade.cxx

Lines changed: 48 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,11 @@ struct NPCascCandidate {
5555
int64_t trackITSID;
5656
int64_t collisionID;
5757
float matchingChi2;
58+
float deltaPtITS;
5859
float deltaPt;
5960
float itsClusSize;
6061
bool hasReassociatedCluster;
62+
bool hasFakeReassociation;
6163
bool isGoodMatch;
6264
bool isGoodCascade;
6365
int pdgCodeMom;
@@ -346,13 +348,15 @@ struct NonPromptCascadeTask {
346348
o2::math_utils::SVector<double, 3> cascadePos, v0Pos;
347349

348350
float cascCpa = -1, v0Cpa = -1;
351+
o2::track::TrackParCov ntCascadeTrack;
349352
if (mDCAFitter.process(pionTrkParCov, protonTrkParCov)) {
350353
auto trackParCovV0 = mDCAFitter.createParentTrackParCov(0); // V0 track retrieved from p and pi daughters
351354
v0Pos = mDCAFitter.getPCACandidate();
352355
if (mDCAFitter.process(trackParCovV0, bachTrkParCov)) {
353356
mDCAFitter.getTrackParamAtPCA(0).getPxPyPzGlo(momenta[0]);
354357
mDCAFitter.getTrackParamAtPCA(1).getPxPyPzGlo(momenta[1]);
355-
mDCAFitter.createParentTrackParCov().getPxPyPzGlo(cascadeMomentum);
358+
ntCascadeTrack = mDCAFitter.createParentTrackParCov();
359+
ntCascadeTrack.getPxPyPzGlo(cascadeMomentum);
356360
std::array<float, 3> pvPos = {primaryVertex.getX(), primaryVertex.getY(), primaryVertex.getZ()};
357361
cascadePos = mDCAFitter.getPCACandidate();
358362
cascCpa = RecoDecay::cpa(pvPos, mDCAFitter.getPCACandidate(), cascadeMomentum);
@@ -400,6 +404,7 @@ struct NonPromptCascadeTask {
400404
if (v0part.mothersIds()[0] == bachelor.mcParticle().mothersIds()[0]) {
401405
if (std::abs(motherV0.pdgCode()) == 3312 || std::abs(motherV0.pdgCode()) == 3334) {
402406
isGoodCascade = true;
407+
403408
isOmega = (std::abs(motherV0.pdgCode()) == 3334);
404409
fromHF = isFromHF(motherV0);
405410
mcParticleID = v0part.mothersIds()[0];
@@ -424,18 +429,19 @@ struct NonPromptCascadeTask {
424429
o2::base::Propagator::Instance()->propagateToDCA(primaryVertex, pionTrkParCov, mBz, 2.f, matCorr, &pionDCA);
425430
o2::base::Propagator::Instance()->propagateToDCA(primaryVertex, bachTrkParCov, mBz, 2.f, matCorr, &bachDCA);
426431

427-
float deltaPtITSCascade{-1.e10f}, cascITSclsSize{-1.e10f}, matchingChi2{-1.e10f};
428-
bool hasReassociatedClusters{false};
432+
float deltaPtITSCascade{-1.e10f}, deltaPtCascade{-1.e10f}, cascITSclsSize{-1.e10f}, matchingChi2{-1.e10f};
433+
bool hasReassociatedClusters{false}, hasFakeReassociation{false};
429434
int trackedCascGlobalIndex{-1}, itsTrackGlobalIndex{-1}, cascITSclusters{-1};
430435
if constexpr (requires { candidate.track(); }) {
431436
const auto& track = candidate.template track_as<TrackType>();
432-
cascPVContribs |= track.isPVContributor() << 0;
433437
const auto& ITStrack = candidate.template itsTrack_as<TrackType>();
438+
cascPVContribs |= ITStrack.isPVContributor() << 0;
434439
auto trackTrkParCov = getTrackParCov(track);
435440
o2::base::Propagator::Instance()->propagateToDCA(primaryVertex, trackTrkParCov, mBz, 2.f, matCorr, &motherDCA);
436441
hasReassociatedClusters = (track.itsNCls() != ITStrack.itsNCls());
437442
cascadeLvector.SetCoordinates(track.pt(), track.eta(), track.phi(), 0);
438443
deltaPtITSCascade = std::hypot(cascadeMomentum[0], cascadeMomentum[1]) - ITStrack.pt();
444+
deltaPtCascade = std::hypot(cascadeMomentum[0], cascadeMomentum[1]) - track.pt();
439445
trackedCascGlobalIndex = track.globalIndex();
440446
itsTrackGlobalIndex = ITStrack.globalIndex();
441447
cascITSclusters = track.itsNCls();
@@ -447,14 +453,14 @@ struct NonPromptCascadeTask {
447453

448454
if (isGoodMatch) {
449455
pdgCodeMom = track.mcParticle().has_mothers() ? track.mcParticle().template mothers_as<aod::McParticles>()[0].pdgCode() : 0;
456+
hasFakeReassociation = track.mcMask() & (1 << 15);
450457
}
451458
itsTrackPDG = ITStrack.has_mcParticle() ? ITStrack.mcParticle().pdgCode() : 0;
452459
}
460+
} else {
461+
o2::base::Propagator::Instance()->propagateToDCA(primaryVertex, ntCascadeTrack, mBz, 2.f, matCorr, &motherDCA);
453462
}
454-
// bool mysel8 = collision.sel8();
455-
float mc = collision.multFT0C();
456-
float ma = collision.multFT0A();
457-
candidates.emplace_back(NPCascCandidate{mcParticleID, trackedCascGlobalIndex, itsTrackGlobalIndex, candidate.collisionId(), matchingChi2, deltaPtITSCascade, cascITSclsSize, hasReassociatedClusters, isGoodMatch, isGoodCascade, pdgCodeMom, itsTrackPDG, fromHF[0], fromHF[1],
463+
candidates.emplace_back(NPCascCandidate{mcParticleID, trackedCascGlobalIndex, itsTrackGlobalIndex, candidate.collisionId(), matchingChi2, deltaPtITSCascade, deltaPtCascade, cascITSclsSize, hasReassociatedClusters, hasFakeReassociation, isGoodMatch, isGoodCascade, pdgCodeMom, itsTrackPDG, fromHF[0], fromHF[1],
458464
collision.numContrib(), cascPVContribs, collision.collisionTimeRes(), primaryVertex.getX(), primaryVertex.getY(), primaryVertex.getZ(),
459465
cascadeLvector.pt(), cascadeLvector.eta(), cascadeLvector.phi(),
460466
protonTrack.pt(), protonTrack.eta(), pionTrack.pt(), pionTrack.eta(), bachelor.pt(), bachelor.eta(),
@@ -464,15 +470,15 @@ struct NonPromptCascadeTask {
464470
cascITSclusters, protonTrack.itsNCls(), pionTrack.itsNCls(), bachelor.itsNCls(), protonTrack.tpcNClsFound(), pionTrack.tpcNClsFound(), bachelor.tpcNClsFound(),
465471
protonTrack.tpcNSigmaPr(), pionTrack.tpcNSigmaPi(), bachelor.tpcNSigmaKa(), bachelor.tpcNSigmaPi(),
466472
protonTrack.hasTOF(), pionTrack.hasTOF(), bachelor.hasTOF(),
467-
protonTrack.tofNSigmaPr(), pionTrack.tofNSigmaPi(), bachelor.tofNSigmaKa(), bachelor.tofNSigmaPi(), collision.sel8(), mc, ma});
473+
protonTrack.tofNSigmaPr(), pionTrack.tofNSigmaPi(), bachelor.tofNSigmaKa(), bachelor.tofNSigmaPi(), collision.sel8(), collision.multFT0C(), collision.multFT0A()});
468474
}
469475
}
470476

471477
template <typename CascadeType>
472478
void fillDataTable(auto const& candidates)
473479
{
474480
for (const auto& c : candidates) {
475-
getDataTable<CascadeType>()(c.matchingChi2, c.deltaPt, c.itsClusSize, c.hasReassociatedCluster,
481+
getDataTable<CascadeType>()(c.matchingChi2, c.deltaPtITS, c.deltaPt, c.itsClusSize, c.hasReassociatedCluster,
476482
c.pvContributors, c.cascPVContribs, c.pvTimeResolution, c.pvX, c.pvY, c.pvZ,
477483
c.cascPt, c.cascEta, c.cascPhi,
478484
c.protonPt, c.protonEta, c.pionPt, c.pionEta, c.bachPt, c.bachEta,
@@ -483,7 +489,8 @@ struct NonPromptCascadeTask {
483489
c.cascNClusITS, c.protonNClusITS, c.pionNClusITS, c.bachNClusITS, c.protonNClusTPC, c.pionNClusTPC, c.bachNClusTPC,
484490
c.protonTPCNSigma, c.pionTPCNSigma, c.bachKaonTPCNSigma, c.bachPionTPCNSigma,
485491
c.protonHasTOF, c.pionHasTOF, c.bachHasTOF,
486-
c.protonTOFNSigma, c.pionTOFNSigma, c.bachKaonTOFNSigma, c.bachPionTOFNSigma, c.sel8, c.multFT0C, c.multFT0A);
492+
c.protonTOFNSigma, c.pionTOFNSigma, c.bachKaonTOFNSigma, c.bachPionTOFNSigma,
493+
c.sel8, c.multFT0C, c.multFT0A);
487494
}
488495
}
489496

@@ -496,19 +503,32 @@ struct NonPromptCascadeTask {
496503
continue;
497504
}
498505
auto particle = mcParticles.iteratorAt(c.mcParticleId);
506+
int motherDecayDaughters{0};
507+
if (c.isFromBeauty || c.isFromCharm) {
508+
auto mom = particle.template mothers_as<aod::McParticles>()[0];
509+
auto daughters = mom.template daughters_as<aod::McParticles>();
510+
motherDecayDaughters = daughters.size();
511+
for (const auto& d : daughters) {
512+
if (std::abs(d.pdgCode()) == 11 || std::abs(d.pdgCode()) == 13) {
513+
motherDecayDaughters *= -1;
514+
break;
515+
}
516+
}
517+
}
499518
auto mcCollision = particle.template mcCollision_as<aod::McCollisions>();
500519
auto recCollision = collisions.iteratorAt(c.collisionID);
501520

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

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

565-
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]);
585+
int motherDecayDaughters{0};
586+
if (fromHF[0] || fromHF[1]) {
587+
auto mom = p.template mothers_as<aod::McParticles>()[0];
588+
auto daughters = mom.template daughters_as<aod::McParticles>();
589+
motherDecayDaughters = daughters.size();
590+
for (const auto& d : daughters) {
591+
if (std::abs(d.pdgCode()) == 11 || std::abs(d.pdgCode()) == 13) {
592+
motherDecayDaughters *= -1;
593+
break;
594+
}
595+
}
596+
}
597+
598+
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);
566599
}
567600
}
568601
PROCESS_SWITCH(NonPromptCascadeTask, processGenParticles, "process gen cascades: MC analysis", false);

0 commit comments

Comments
 (0)