Skip to content

Commit e854784

Browse files
authored
PWGLF: Updates for 3body decay analysis (#7629)
1 parent 568ec0c commit e854784

6 files changed

Lines changed: 65 additions & 10 deletions

File tree

PWGLF/DataModel/Vtx3BodyTables.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ DECLARE_SOA_COLUMN(Z, z, float); //! decay position Z
4343

4444
// Saved from finding: DCAs
4545
DECLARE_SOA_COLUMN(DCAVtxDaughters, dcaVtxdaughters, float); //! DCA among daughters
46+
DECLARE_SOA_COLUMN(DCAXYTrack0ToPV, dcaXYtrack0topv, float); //! DCAXY of prong0 to PV
47+
DECLARE_SOA_COLUMN(DCAXYTrack1ToPV, dcaXYtrack1topv, float); //! DCAXY of prong1 to PV
48+
DECLARE_SOA_COLUMN(DCAXYTrack2ToPV, dcaXYtrack2topv, float); //! DCAXY of prong2 to PV
4649
DECLARE_SOA_COLUMN(DCATrack0ToPV, dcatrack0topv, float); //! DCA of prong0 to PV
4750
DECLARE_SOA_COLUMN(DCATrack1ToPV, dcatrack1topv, float); //! DCA of prong1 to PV
4851
DECLARE_SOA_COLUMN(DCATrack2ToPV, dcatrack2topv, float); //! DCA of prong2 to PV
@@ -132,6 +135,7 @@ DECLARE_SOA_TABLE_FULL(StoredVtx3BodyDatas, "Vtx3BodyDatas", "AOD", "Vtx3BodyDAT
132135
vtx3body::PxTrack1, vtx3body::PyTrack1, vtx3body::PzTrack1,
133136
vtx3body::PxTrack2, vtx3body::PyTrack2, vtx3body::PzTrack2,
134137
vtx3body::DCAVtxDaughters,
138+
vtx3body::DCAXYTrack0ToPV, vtx3body::DCAXYTrack1ToPV, vtx3body::DCAXYTrack2ToPV,
135139
vtx3body::DCATrack0ToPV, vtx3body::DCATrack1ToPV, vtx3body::DCATrack2ToPV,
136140
vtx3body::TOFNSigmaBachDe,
137141

@@ -246,15 +250,19 @@ DECLARE_SOA_COLUMN(TPCNSigmaPion, tpcNSigmaPion, float); //! nsigma of T
246250
DECLARE_SOA_COLUMN(TPCNSigmaBachelor, tpcNSigmaBachelor, float); //! nsigma of TPC PID of the bachelor daughter
247251
DECLARE_SOA_COLUMN(TOFNSigmaBachelor, tofNSigmaBachelor, float); //! nsigma of TOF PID of the bachelor daughter
248252
// DCA to PV
249-
DECLARE_SOA_COLUMN(DCAProtonToPV, dcaProtontoPV, float); //! DCA of the proton daughter to pv
250-
DECLARE_SOA_COLUMN(DCAPionToPV, dcaPiontoPV, float); //! DCA of the pion daughter to pv
251-
DECLARE_SOA_COLUMN(DCABachelorToPV, dcaBachelortoPV, float); //! DCA of the bachelor daughter to pv
253+
DECLARE_SOA_COLUMN(DCAXYProtonToPV, dcaxyProtontoPV, float); //! DCAXY of the proton daughter to pv
254+
DECLARE_SOA_COLUMN(DCAXYPionToPV, dcaxyPiontoPV, float); //! DCAXY of the pion daughter to pv
255+
DECLARE_SOA_COLUMN(DCAXYBachelorToPV, dcaxyBachelortoPV, float); //! DCAXY of the bachelor daughter to pv
256+
DECLARE_SOA_COLUMN(DCAProtonToPV, dcaProtontoPV, float); //! DCA of the proton daughter to pv
257+
DECLARE_SOA_COLUMN(DCAPionToPV, dcaPiontoPV, float); //! DCA of the pion daughter to pv
258+
DECLARE_SOA_COLUMN(DCABachelorToPV, dcaBachelortoPV, float); //! DCA of the bachelor daughter to pv
252259
// for MC
253260
DECLARE_SOA_COLUMN(GenP, genP, float); // P of the hypertriton
254261
DECLARE_SOA_COLUMN(GenPt, genPt, float); // pT of the hypertriton
255262
DECLARE_SOA_COLUMN(GenCt, genCt, float); // ct of the hypertriton
256263
DECLARE_SOA_COLUMN(GenPhi, genPhi, float); // Phi of the hypertriton
257264
DECLARE_SOA_COLUMN(GenEta, genEta, float); // Eta of the hypertriton
265+
DECLARE_SOA_COLUMN(GenRapidity, genRapidity, float); // Rapidity of the hypertriton
258266
DECLARE_SOA_COLUMN(IsReco, isReco, bool); // bool: true for reco
259267
DECLARE_SOA_COLUMN(IsSignal, isSignal, bool); // bool: true for signal
260268
DECLARE_SOA_COLUMN(PdgCode, pdgCode, int); // pdgCode of the mcparticle, -1 for fake pair
@@ -284,6 +292,7 @@ DECLARE_SOA_TABLE(Hyp3BodyCands, "AOD", "HYP3BODYCANDS",
284292
hyp3body::ITSNclusSizeProton, hyp3body::ITSNclusSizePion, hyp3body::ITSNclusSizeBachelor,
285293
hyp3body::TPCNSigmaProton, hyp3body::TPCNSigmaPion, hyp3body::TPCNSigmaBachelor,
286294
hyp3body::TOFNSigmaBachelor,
295+
hyp3body::DCAXYProtonToPV, hyp3body::DCAXYPionToPV, hyp3body::DCAXYBachelorToPV,
287296
hyp3body::DCAProtonToPV, hyp3body::DCAPionToPV, hyp3body::DCABachelorToPV);
288297

289298
// output table for MC
@@ -309,13 +318,15 @@ DECLARE_SOA_TABLE(MCHyp3BodyCands, "AOD", "MCHYP3BODYCANDS",
309318
hyp3body::ITSNclusSizeProton, hyp3body::ITSNclusSizePion, hyp3body::ITSNclusSizeBachelor,
310319
hyp3body::TPCNSigmaProton, hyp3body::TPCNSigmaPion, hyp3body::TPCNSigmaBachelor,
311320
hyp3body::TOFNSigmaBachelor,
321+
hyp3body::DCAXYProtonToPV, hyp3body::DCAXYPionToPV, hyp3body::DCAXYBachelorToPV,
312322
hyp3body::DCAProtonToPV, hyp3body::DCAPionToPV, hyp3body::DCABachelorToPV,
313323
// MC information
314324
hyp3body::GenP,
315325
hyp3body::GenPt,
316326
hyp3body::GenCt,
317327
hyp3body::GenPhi,
318328
hyp3body::GenEta,
329+
hyp3body::GenRapidity,
319330
hyp3body::IsSignal,
320331
hyp3body::IsReco,
321332
hyp3body::PdgCode,

PWGLF/DataModel/pidTOFGeneric.h

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

12-
#ifndef PIDTOFGENERIC_H_
13-
#define PIDTOFGENERIC_H_
12+
#ifndef PWGLF_DATAMODEL_PIDTOFGENERIC_H_
13+
#define PWGLF_DATAMODEL_PIDTOFGENERIC_H_
1414
#include "CommonDataFormat/InteractionRecord.h"
1515
#include "Common/Core/PID/PIDTOF.h"
1616

@@ -155,4 +155,4 @@ class TofPidNewCollision
155155
} // namespace pidtofgeneric
156156
} // namespace o2::aod
157157

158-
#endif
158+
#endif // PWGLF_DATAMODEL_PIDTOFGENERIC_H_

PWGLF/TableProducer/Nuspex/decay3bodybuilder.cxx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,14 +454,17 @@ struct decay3bodyBuilder {
454454
auto Track0Par = getTrackPar(t0);
455455
o2::base::Propagator::Instance()->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, Track0Par, 2.f, fitter3body.getMatCorrType(), &dcaInfo);
456456
auto Track0dcaXY = dcaInfo[0];
457+
auto Track0dca = std::sqrt(Track0dcaXY * Track0dcaXY + dcaInfo[1] * dcaInfo[1]);
457458

458459
auto Track1Par = getTrackPar(t1);
459460
o2::base::Propagator::Instance()->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, Track1Par, 2.f, fitter3body.getMatCorrType(), &dcaInfo);
460461
auto Track1dcaXY = dcaInfo[0];
462+
auto Track1dca = std::sqrt(Track1dcaXY * Track1dcaXY + dcaInfo[1] * dcaInfo[1]);
461463

462464
auto Track2Par = getTrackPar(t2);
463465
o2::base::Propagator::Instance()->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, Track2Par, 2.f, fitter3body.getMatCorrType(), &dcaInfo);
464466
auto Track2dcaXY = dcaInfo[0];
467+
auto Track2dca = std::sqrt(Track2dcaXY * Track2dcaXY + dcaInfo[1] * dcaInfo[1]);
465468

466469
auto Track0 = getTrackParCov(t0);
467470
auto Track1 = getTrackParCov(t1);
@@ -517,6 +520,7 @@ struct decay3bodyBuilder {
517520
p0[0], p0[1], p0[2], p1[0], p1[1], p1[2], p2[0], p2[1], p2[2],
518521
fitter3body.getChi2AtPCACandidate(),
519522
Track0dcaXY, Track1dcaXY, Track2dcaXY,
523+
Track0dca, Track1dca, Track2dca,
520524
tofNsigmaDe);
521525
}
522526
}

PWGLF/TableProducer/Nuspex/hypertriton3bodyfinder.cxx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -687,14 +687,17 @@ struct hypertriton3bodyFinder {
687687
auto Track0Par = getTrackPar(dPtrack);
688688
o2::base::Propagator::Instance()->propagateToDCABxByBz({dCollision.posX(), dCollision.posY(), dCollision.posZ()}, Track0Par, 2.f, fitter3body.getMatCorrType(), &dcaInfo);
689689
auto Track0dcaXY = dcaInfo[0];
690+
auto Track0dca = std::sqrt(Track0dcaXY * Track0dcaXY + dcaInfo[1] * dcaInfo[1]);
690691

691692
auto Track1Par = getTrackPar(dNtrack);
692693
o2::base::Propagator::Instance()->propagateToDCABxByBz({dCollision.posX(), dCollision.posY(), dCollision.posZ()}, Track1Par, 2.f, fitter3body.getMatCorrType(), &dcaInfo);
693694
auto Track1dcaXY = dcaInfo[0];
695+
auto Track1dca = std::sqrt(Track1dcaXY * Track1dcaXY + dcaInfo[1] * dcaInfo[1]);
694696

695697
auto Track2Par = getTrackPar(dBachtrack);
696698
o2::base::Propagator::Instance()->propagateToDCABxByBz({dCollision.posX(), dCollision.posY(), dCollision.posZ()}, Track2Par, 2.f, fitter3body.getMatCorrType(), &dcaInfo);
697699
auto Track2dcaXY = dcaInfo[0];
700+
auto Track2dca = std::sqrt(Track2dcaXY * Track2dcaXY + dcaInfo[1] * dcaInfo[1]);
698701

699702
// H3L DCA Check
700703
// auto track3B = o2::track::TrackParCov(vertexXYZ, p3B, fitter3body.calcPCACovMatrixFlat(), t2.sign());
@@ -712,6 +715,7 @@ struct hypertriton3bodyFinder {
712715
p0[0], p0[1], p0[2], p1[0], p1[1], p1[2], p2[0], p2[1], p2[2],
713716
fitter3body.getChi2AtPCACandidate(),
714717
Track0dcaXY, Track1dcaXY, Track2dcaXY,
718+
Track0dca, Track1dca, Track2dca,
715719
0); // To be fixed
716720
}
717721
//------------------------------------------------------------------

PWGLF/TableProducer/Nuspex/threebodyRecoTask.cxx

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ struct Candidate3body {
5454
// 0 - proton, 1 - pion, 2 - bachelor
5555
uint8_t dautpcNclusters[3];
5656
uint8_t dauitsclussize[3];
57+
uint8_t daudcaxytopv[3];
5758
uint8_t daudcatopv[3];
5859
float dautpcNsigma[3];
5960
bool isMatter;
@@ -65,6 +66,7 @@ struct Candidate3body {
6566
float bachelortofNsigma;
6667
TLorentzVector lgencand = {0, 0, 0, 0};
6768
float genct = -1;
69+
float genrapidity = -999;
6870
bool isSignal = false;
6971
bool isReco = false;
7072
int pdgCode = -1;
@@ -112,6 +114,7 @@ struct threebodyRecoTask {
112114
"registry",
113115
{
114116
{"hEventCounter", "hEventCounter", {HistType::kTH1F, {{4, 0.0f, 4.0f}}}},
117+
{"hCentFT0C", "hCentFT0C", {HistType::kTH1F, {{100, 0.0f, 100.0f, "FT0C Centrality"}}}},
115118
{"hCandidatesCounter", "hCandidatesCounter", {HistType::kTH1F, {{12, 0.0f, 12.0f}}}},
116119
{"hMassHypertriton", "hMassHypertriton", {HistType::kTH1F, {{80, 2.96f, 3.04f}}}},
117120
{"hMassAntiHypertriton", "hMassAntiHypertriton", {HistType::kTH1F, {{80, 2.96f, 3.04f}}}},
@@ -122,6 +125,9 @@ struct threebodyRecoTask {
122125
{"hPtAntiProton", "hPtAntiProton", {HistType::kTH1F, {{200, 0.0f, 10.0f}}}},
123126
{"hPtPionPlus", "hPtPionPlus", {HistType::kTH1F, {{200, 0.0f, 10.0f}}}},
124127
{"hPtAntiDeuteron", "hPtAntiDeuteron", {HistType::kTH1F, {{200, 0.0f, 10.0f}}}},
128+
{"hDCAXYProtonToPV", "hDCAXYProtonToPV", {HistType::kTH1F, {{1000, -10.0f, 10.0f, "cm"}}}},
129+
{"hDCAXYPionToPV", "hDCAXYPionToPV", {HistType::kTH1F, {{1000, -10.0f, 10.0f, "cm"}}}},
130+
{"hDCAXYDeuteronToPV", "hDCAXYDeuteronToPV", {HistType::kTH1F, {{1000, -10.0f, 10.0f, "cm"}}}},
125131
{"hDCAProtonToPV", "hDCAProtonToPV", {HistType::kTH1F, {{1000, -10.0f, 10.0f, "cm"}}}},
126132
{"hDCAPionToPV", "hDCAPionToPV", {HistType::kTH1F, {{1000, -10.0f, 10.0f, "cm"}}}},
127133
{"hDCADeuteronToPV", "hDCADeuteronToPV", {HistType::kTH1F, {{1000, -10.0f, 10.0f, "cm"}}}},
@@ -351,6 +357,8 @@ struct threebodyRecoTask {
351357
registry.fill(HIST("hPtProton"), trackProton.pt());
352358
registry.fill(HIST("hPtPionMinus"), trackPion.pt());
353359
registry.fill(HIST("hPtDeuteron"), trackDeuteron.pt());
360+
registry.fill(HIST("hDCAXYProtonToPV"), candData.dcaXYtrack0topv());
361+
registry.fill(HIST("hDCAXYPionToPV"), candData.dcaXYtrack1topv());
354362
registry.fill(HIST("hDCAProtonToPV"), candData.dcatrack0topv());
355363
registry.fill(HIST("hDCAPionToPV"), candData.dcatrack1topv());
356364

@@ -379,6 +387,8 @@ struct threebodyRecoTask {
379387
registry.fill(HIST("hPtAntiProton"), trackProton.pt());
380388
registry.fill(HIST("hPtPionPlus"), trackPion.pt());
381389
registry.fill(HIST("hPtAntiDeuteron"), trackDeuteron.pt());
390+
registry.fill(HIST("hDCAXYProtonToPV"), candData.dcaXYtrack1topv());
391+
registry.fill(HIST("hDCAXYPionToPV"), candData.dcaXYtrack0topv());
382392
registry.fill(HIST("hDCAProtonToPV"), candData.dcatrack1topv());
383393
registry.fill(HIST("hDCAPionToPV"), candData.dcatrack0topv());
384394

@@ -409,10 +419,15 @@ struct threebodyRecoTask {
409419
cand3body.dautpcNclusters[0] = trackProton.tpcNClsFound();
410420
cand3body.dautpcNclusters[1] = trackPion.tpcNClsFound();
411421
cand3body.dautpcNclusters[2] = trackDeuteron.tpcNClsFound();
412-
cand3body.dauitsclussize[0] = trackPion.itsClusterSizes();
422+
cand3body.dauitsclussize[0] = trackProton.itsClusterSizes();
423+
cand3body.dauitsclussize[1] = trackPion.itsClusterSizes();
424+
cand3body.dauitsclussize[2] = trackDeuteron.itsClusterSizes();
413425
cand3body.dautpcNsigma[0] = trackProton.tpcNSigmaPr();
414426
cand3body.dautpcNsigma[1] = trackPion.tpcNSigmaPi();
415427
cand3body.dautpcNsigma[2] = trackDeuteron.tpcNSigmaDe();
428+
cand3body.daudcaxytopv[0] = cand3body.isMatter ? candData.dcaXYtrack0topv() : candData.dcaXYtrack1topv();
429+
cand3body.daudcaxytopv[1] = cand3body.isMatter ? candData.dcaXYtrack1topv() : candData.dcaXYtrack0topv();
430+
cand3body.daudcaxytopv[2] = candData.dcaXYtrack2topv();
416431
cand3body.daudcatopv[0] = cand3body.isMatter ? candData.dcatrack0topv() : candData.dcatrack1topv();
417432
cand3body.daudcatopv[1] = cand3body.isMatter ? candData.dcatrack1topv() : candData.dcatrack0topv();
418433
cand3body.daudcatopv[2] = candData.dcatrack2topv();
@@ -426,6 +441,7 @@ struct threebodyRecoTask {
426441
cand3body.mcmotherId = lLabel;
427442
cand3body.lgencand = lmother;
428443
cand3body.genct = MClifetime;
444+
cand3body.genrapidity = lmother.Rapidity();
429445
cand3body.isSignal = true;
430446
cand3body.isReco = true;
431447
cand3body.pdgCode = cand3body.isMatter ? motherPdgCode : -motherPdgCode;
@@ -514,6 +530,7 @@ struct threebodyRecoTask {
514530
return;
515531
}
516532
registry.fill(HIST("hEventCounter"), 2.5);
533+
registry.fill(HIST("hCentFT0C"), collision.centFT0C());
517534

518535
bool if_hasvtx = false;
519536

@@ -537,6 +554,7 @@ struct threebodyRecoTask {
537554
cand3body.dautpcNclusters[0], cand3body.dautpcNclusters[1], cand3body.dautpcNclusters[2],
538555
cand3body.dauitsclussize[0], cand3body.dauitsclussize[1], cand3body.dauitsclussize[2],
539556
cand3body.dautpcNsigma[0], cand3body.dautpcNsigma[1], cand3body.dautpcNsigma[2], cand3body.bachelortofNsigma,
557+
cand3body.daudcaxytopv[0], cand3body.daudcaxytopv[1], cand3body.daudcaxytopv[2],
540558
cand3body.daudcatopv[0], cand3body.daudcatopv[1], cand3body.daudcatopv[2]);
541559
}
542560
}
@@ -587,7 +605,7 @@ struct threebodyRecoTask {
587605
for (auto& lMother2 : lMCTrack2.mothers_as<aod::McParticles>()) {
588606
if (lMother0.globalIndex() == lMother1.globalIndex() && lMother0.globalIndex() == lMother2.globalIndex()) {
589607
lLabel = lMother0.globalIndex();
590-
lPDG = lMother1.pdgCode();
608+
lPDG = lMother0.pdgCode();
591609
if ((lPDG == motherPdgCode && lMCTrack0.pdgCode() == 2212 && lMCTrack1.pdgCode() == -211 && lMCTrack2.pdgCode() == bachelorPdgCode) ||
592610
(lPDG == -motherPdgCode && lMCTrack0.pdgCode() == 211 && lMCTrack1.pdgCode() == -2212 && lMCTrack2.pdgCode() == -bachelorPdgCode)) {
593611
isTrueCand = true;
@@ -620,8 +638,9 @@ struct threebodyRecoTask {
620638
cand3body.dautpcNclusters[0], cand3body.dautpcNclusters[1], cand3body.dautpcNclusters[2],
621639
cand3body.dauitsclussize[0], cand3body.dauitsclussize[1], cand3body.dauitsclussize[2],
622640
cand3body.dautpcNsigma[0], cand3body.dautpcNsigma[1], cand3body.dautpcNsigma[2], cand3body.bachelortofNsigma,
641+
cand3body.daudcaxytopv[0], cand3body.daudcaxytopv[1], cand3body.daudcaxytopv[2],
623642
cand3body.daudcatopv[0], cand3body.daudcatopv[1], cand3body.daudcatopv[2],
624-
cand3body.lgencand.P(), cand3body.lgencand.Pt(), cand3body.genct, cand3body.lgencand.Phi(), cand3body.lgencand.Eta(),
643+
cand3body.lgencand.P(), cand3body.lgencand.Pt(), cand3body.genct, cand3body.lgencand.Phi(), cand3body.lgencand.Eta(), cand3body.lgencand.Rapidity(),
625644
cand3body.isSignal, cand3body.isReco, cand3body.pdgCode, cand3body.SurvivedEventSelection);
626645
}
627646
}
@@ -653,7 +672,8 @@ struct threebodyRecoTask {
653672
-1, -1, -1,
654673
-1, -1, -1, -1,
655674
-1, -1, -1,
656-
mcparticle.p(), mcparticle.pt(), MClifetime, mcparticle.phi(), mcparticle.eta(),
675+
-1, -1, -1,
676+
mcparticle.p(), mcparticle.pt(), MClifetime, mcparticle.phi(), mcparticle.eta(), mcparticle.y(),
657677
true, false, mcparticle.pdgCode(), isSurEvSelection);
658678
}
659679
}

0 commit comments

Comments
 (0)