Skip to content

Commit 3dd04aa

Browse files
authored
[PWGLF] Switch to KFParticle for decay3body daughter DCA computation (#13024)
1 parent e6a1d6e commit 3dd04aa

File tree

3 files changed

+93
-36
lines changed

3 files changed

+93
-36
lines changed

PWGLF/DataModel/Vtx3BodyTables.h

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,18 @@ DECLARE_SOA_COLUMN(PyTrackDe, pyTrackDe, float); //! track2 py at min
5959
DECLARE_SOA_COLUMN(PzTrackDe, pzTrackDe, float); //! track2 pz at min
6060

6161
// DCAs to PV
62-
DECLARE_SOA_COLUMN(DCAXYTrackPrToPV, dcaXYtrackPrToPv, float); //! DCAXY of proton to PV
63-
DECLARE_SOA_COLUMN(DCAXYTrackPiToPV, dcaXYtrackPiToPv, float); //! DCAXY of pion to PV
64-
DECLARE_SOA_COLUMN(DCAXYTrackDeToPV, dcaXYtrackDeToPv, float); //! DCAXY of deuteron to PV
65-
DECLARE_SOA_COLUMN(DCAZTrackPrToPV, dcaZtrackPrToPv, float); //! DCAZ of proton to PV
66-
DECLARE_SOA_COLUMN(DCAZTrackPiToPV, dcaZtrackPiToPv, float); //! DCAZ of pion to PV
67-
DECLARE_SOA_COLUMN(DCAZTrackDeToPV, dcaZtrackDeToPv, float); //! DCAZ of deuteron to PV
62+
DECLARE_SOA_COLUMN(DCAXYTrackPrToPV, dcaXYtrackPrToPv, float); //! DCAXY of proton to PV (computed with KFParticle)
63+
DECLARE_SOA_COLUMN(DCAXYTrackPiToPV, dcaXYtrackPiToPv, float); //! DCAXY of pion to PV (computed with KFParticle)
64+
DECLARE_SOA_COLUMN(DCAXYTrackDeToPV, dcaXYtrackDeToPv, float); //! DCAXY of deuteron to PV (computed with KFParticle)
65+
DECLARE_SOA_COLUMN(DCATrackPrToPV, dcaTrackPrToPv, float); //! DCA of proton to PV (computed with KFParticle)
66+
DECLARE_SOA_COLUMN(DCATrackPiToPV, dcaTrackPiToPv, float); //! DCA of pion to PV (computed with KFParticle)
67+
DECLARE_SOA_COLUMN(DCATrackDeToPV, dcaTrackDeToPv, float); //! DCA of deuteron to PV (computed with KFParticle)
68+
DECLARE_SOA_COLUMN(DCAXYTrackPrToPVProp, dcaXYtrackPrToPvProp, float); //! DCAXY of proton to PV (propagated with O2 Propagator)
69+
DECLARE_SOA_COLUMN(DCAXYTrackPiToPVProp, dcaXYtrackPiToPvProp, float); //! DCAXY of pion to PV (propagated with O2 Propagator)
70+
DECLARE_SOA_COLUMN(DCAXYTrackDeToPVProp, dcaXYtrackDeToPvProp, float); //! DCAXY of deuteron to PV (propagated with O2 Propagator)
71+
DECLARE_SOA_COLUMN(DCATrackPrToPVProp, dcaTrackPrToPvProp, float); //! DCA of proton to PV (propagated with O2 Propagator)
72+
DECLARE_SOA_COLUMN(DCATrackPiToPVProp, dcaTrackPiToPvProp, float); //! DCA of pion to PV (propagated with O2 Propagator)
73+
DECLARE_SOA_COLUMN(DCATrackDeToPVProp, dcaTrackDeToPvProp, float); //! DCA of deuteron to PV (propagated with O2 Propagator)
6874

6975
// DCAs to SV
7076
DECLARE_SOA_COLUMN(DCATrackPrToSV, dcaTrackPrToSv, float); //! DCA of proton to SV
@@ -209,7 +215,9 @@ DECLARE_SOA_TABLE(Vtx3BodyDatas, "AOD", "VTX3BODYDATA", //!
209215
vtx3body::PxTrackPi, vtx3body::PyTrackPi, vtx3body::PzTrackPi,
210216
vtx3body::PxTrackDe, vtx3body::PyTrackDe, vtx3body::PzTrackDe,
211217
vtx3body::DCAXYTrackPrToPV, vtx3body::DCAXYTrackPiToPV, vtx3body::DCAXYTrackDeToPV,
212-
vtx3body::DCAZTrackPrToPV, vtx3body::DCAZTrackPiToPV, vtx3body::DCAZTrackDeToPV,
218+
vtx3body::DCATrackPrToPV, vtx3body::DCATrackPiToPV, vtx3body::DCATrackDeToPV,
219+
vtx3body::DCAXYTrackPrToPVProp, vtx3body::DCAXYTrackPiToPVProp, vtx3body::DCAXYTrackDeToPVProp,
220+
vtx3body::DCATrackPrToPVProp, vtx3body::DCATrackPiToPVProp, vtx3body::DCATrackDeToPVProp,
213221
vtx3body::DCATrackPrToSV, vtx3body::DCATrackPiToSV, vtx3body::DCATrackDeToSV,
214222
vtx3body::DCAVtxToDaughtersAv,
215223
vtx3body::CosPA, vtx3body::Ct,
@@ -258,7 +266,9 @@ DECLARE_SOA_TABLE(McVtx3BodyDatas, "AOD", "MC3BODYDATA", //!
258266
vtx3body::PxTrackPi, vtx3body::PyTrackPi, vtx3body::PzTrackPi,
259267
vtx3body::PxTrackDe, vtx3body::PyTrackDe, vtx3body::PzTrackDe,
260268
vtx3body::DCAXYTrackPrToPV, vtx3body::DCAXYTrackPiToPV, vtx3body::DCAXYTrackDeToPV,
261-
vtx3body::DCAZTrackPrToPV, vtx3body::DCAZTrackPiToPV, vtx3body::DCAZTrackDeToPV,
269+
vtx3body::DCATrackPrToPV, vtx3body::DCATrackPiToPV, vtx3body::DCATrackDeToPV,
270+
vtx3body::DCAXYTrackPrToPVProp, vtx3body::DCAXYTrackPiToPVProp, vtx3body::DCAXYTrackDeToPVProp,
271+
vtx3body::DCATrackPrToPVProp, vtx3body::DCATrackPiToPVProp, vtx3body::DCATrackDeToPVProp,
262272
vtx3body::DCATrackPrToSV, vtx3body::DCATrackPiToSV, vtx3body::DCATrackDeToSV,
263273
vtx3body::DCAVtxToDaughtersAv,
264274
vtx3body::CosPA, vtx3body::Ct,

PWGLF/TableProducer/Nuspex/decay3bodybuilder.cxx

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,9 @@ struct decay3bodyBuilder {
907907
-1., -1., -1., // momPion
908908
-1., -1., -1., // momDeuteron
909909
-1., -1., -1., // trackDCAxyToPV: 0 - proton, 1 - pion, 2 - deuteron
910-
-1., -1., -1., // trackDCAzToPV: 0 - proton, 1 - pion, 2 - deuteron
910+
-1., -1., -1., // trackDCAToPV: 0 - proton, 1 - pion, 2 - deuteron
911+
-1., -1., -1., // trackDCAxyToPVprop: 0 - proton, 1 - pion, 2 - deuteron
912+
-1., -1., -1., // trackDCAToPVprop: 0 - proton, 1 - pion, 2 - deuteron
911913
-1., -1., -1., // daughterDCAtoSV: 0 - proton, 1 - pion, 2 - deuteron
912914
-1., // daughterDCAtoSVaverage
913915
-1., -1., // cosPA, ctau
@@ -1065,9 +1067,11 @@ struct decay3bodyBuilder {
10651067
helper.decay3body.momProton[0], helper.decay3body.momProton[1], helper.decay3body.momProton[2],
10661068
helper.decay3body.momPion[0], helper.decay3body.momPion[1], helper.decay3body.momPion[2],
10671069
helper.decay3body.momDeuteron[0], helper.decay3body.momDeuteron[1], helper.decay3body.momDeuteron[2],
1068-
helper.decay3body.trackDCAxyToPV[0], helper.decay3body.trackDCAxyToPV[1], helper.decay3body.trackDCAxyToPV[2], // 0 - proton, 1 - pion, 2 - deuteron
1069-
helper.decay3body.trackDCAzToPV[0], helper.decay3body.trackDCAzToPV[1], helper.decay3body.trackDCAzToPV[2], // 0 - proton, 1 - pion, 2 - deuteron
1070-
helper.decay3body.daughterDCAtoSV[0], helper.decay3body.daughterDCAtoSV[1], helper.decay3body.daughterDCAtoSV[2], // 0 - proton, 1 - pion, 2 - deuteron
1070+
helper.decay3body.trackDCAxyToPV[0], helper.decay3body.trackDCAxyToPV[1], helper.decay3body.trackDCAxyToPV[2], // 0 - proton, 1 - pion, 2 - deuteron
1071+
helper.decay3body.trackDCAToPV[0], helper.decay3body.trackDCAToPV[1], helper.decay3body.trackDCAToPV[2], // 0 - proton, 1 - pion, 2 - deuteron
1072+
helper.decay3body.trackDCAxyToPVprop[0], helper.decay3body.trackDCAxyToPVprop[1], helper.decay3body.trackDCAxyToPVprop[2], // 0 - proton, 1 - pion, 2 - deuteron
1073+
helper.decay3body.trackDCAToPVprop[0], helper.decay3body.trackDCAToPVprop[1], helper.decay3body.trackDCAToPVprop[2], // 0 - proton, 1 - pion, 2 - deuteron
1074+
helper.decay3body.daughterDCAtoSV[0], helper.decay3body.daughterDCAtoSV[1], helper.decay3body.daughterDCAtoSV[2], // 0 - proton, 1 - pion, 2 - deuteron
10711075
helper.decay3body.daughterDCAtoSVaverage,
10721076
helper.decay3body.cosPA, helper.decay3body.ctau,
10731077
helper.decay3body.tpcNsigma[0], helper.decay3body.tpcNsigma[1], helper.decay3body.tpcNsigma[2], helper.decay3body.tpcNsigma[2], // 0 - proton, 1 - pion, 2 - deuteron, 3 - bach with pion hyp
@@ -1094,9 +1098,11 @@ struct decay3bodyBuilder {
10941098
helper.decay3body.momProton[0], helper.decay3body.momProton[1], helper.decay3body.momProton[2],
10951099
helper.decay3body.momPion[0], helper.decay3body.momPion[1], helper.decay3body.momPion[2],
10961100
helper.decay3body.momDeuteron[0], helper.decay3body.momDeuteron[1], helper.decay3body.momDeuteron[2],
1097-
helper.decay3body.trackDCAxyToPV[0], helper.decay3body.trackDCAxyToPV[1], helper.decay3body.trackDCAxyToPV[2], // 0 - proton, 1 - pion, 2 - deuteron
1098-
helper.decay3body.trackDCAzToPV[0], helper.decay3body.trackDCAzToPV[1], helper.decay3body.trackDCAzToPV[2], // 0 - proton, 1 - pion, 2 - deuteron
1099-
helper.decay3body.daughterDCAtoSV[0], helper.decay3body.daughterDCAtoSV[1], helper.decay3body.daughterDCAtoSV[2], // 0 - proton, 1 - pion, 2 - deuteron
1101+
helper.decay3body.trackDCAxyToPV[0], helper.decay3body.trackDCAxyToPV[1], helper.decay3body.trackDCAxyToPV[2], // 0 - proton, 1 - pion, 2 - deuteron
1102+
helper.decay3body.trackDCAToPV[0], helper.decay3body.trackDCAToPV[1], helper.decay3body.trackDCAToPV[2], // 0 - proton, 1 - pion, 2 - deuteron
1103+
helper.decay3body.trackDCAxyToPVprop[0], helper.decay3body.trackDCAxyToPVprop[1], helper.decay3body.trackDCAxyToPVprop[2], // 0 - proton, 1 - pion, 2 - deuteron
1104+
helper.decay3body.trackDCAToPVprop[0], helper.decay3body.trackDCAToPVprop[1], helper.decay3body.trackDCAToPVprop[2], // 0 - proton, 1 - pion, 2 - deuteron
1105+
helper.decay3body.daughterDCAtoSV[0], helper.decay3body.daughterDCAtoSV[1], helper.decay3body.daughterDCAtoSV[2], // 0 - proton, 1 - pion, 2 - deuteron
11001106
helper.decay3body.daughterDCAtoSVaverage,
11011107
helper.decay3body.cosPA, helper.decay3body.ctau,
11021108
helper.decay3body.tpcNsigma[0], helper.decay3body.tpcNsigma[1], helper.decay3body.tpcNsigma[2], helper.decay3body.tpcNsigma[2], // 0 - proton, 1 - pion, 2 - deuteron, 3 - bach with pion hyp

PWGLF/Utils/decay3bodyBuilderHelper.h

Lines changed: 62 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,11 @@ struct decay3bodyCandidate {
6060
std::array<float, 3> posProton = {0.0f, 0.0f, 0.0f};
6161
std::array<float, 3> posPion = {0.0f, 0.0f, 0.0f};
6262
std::array<float, 3> posDeuteron = {0.0f, 0.0f, 0.0f};
63-
std::array<float, 3> trackDCAxyToPV = {0.0f, 0.0f, 0.0f}; // 0 - proton, 1 - pion, 2 - deuteron
64-
std::array<float, 3> trackDCAzToPV = {0.0f, 0.0f, 0.0f}; // 0 - proton, 1 - pion, 2 - deuteron
65-
std::array<float, 4> tpcNsigma = {0.0f, 0.0f, 0.0f, 0.0f}; // 0 - proton, 1 - pion, 2 - deuteron, 3 - bach with pion hyp
63+
std::array<float, 3> trackDCAxyToPV = {0.0f, 0.0f, 0.0f}; // 0 - proton, 1 - pion, 2 - deuteron
64+
std::array<float, 3> trackDCAToPV = {0.0f, 0.0f, 0.0f}; // 0 - proton, 1 - pion, 2 - deuteron
65+
std::array<float, 3> trackDCAxyToPVprop = {0.0f, 0.0f, 0.0f}; // 0 - proton, 1 - pion, 2 - deuteron
66+
std::array<float, 3> trackDCAToPVprop = {0.0f, 0.0f, 0.0f}; // 0 - proton, 1 - pion, 2 - deuteron
67+
std::array<float, 4> tpcNsigma = {0.0f, 0.0f, 0.0f, 0.0f}; // 0 - proton, 1 - pion, 2 - deuteron, 3 - bach with pion hyp
6668
double tofNsigmaDeuteron = 0.0f;
6769
std::array<float, 3> averageITSClSize = {0.0f, 0.0f, 0.0f}; // 0 - proton, 1 - pion, 2 - deuteron
6870
std::array<float, 3> tpcNCl = {0.0f, 0.0f, 0.0f}; // 0 - proton, 1 - pion, 2 - deuteron
@@ -134,6 +136,9 @@ class decay3bodyBuilderHelper
134136
float minDCAProtonToPV;
135137
float minDCAPionToPV;
136138
float minDCADeuteronToPV;
139+
float minDCAProtonToPVprop;
140+
float minDCAPionToPVprop;
141+
float minDCADeuteronToPVprop;
137142
float minPtProton;
138143
float minPtPion;
139144
float minPtDeuteron;
@@ -281,44 +286,80 @@ class decay3bodyBuilderHelper
281286
} // end of selections
282287

283288
//_______________________________________________________________________
284-
// daughter track DCA to PV associated with decay3body
285-
o2::dataformats::VertexBase mPV;
286-
o2::dataformats::DCA mDcaInfoCov;
289+
// daughter track DCA to PV associated with decay3body --> computed with KFParticle
290+
float pvXY[2] = {pvX, pvY};
291+
float pv[3] = {pvX, pvY, pvZ};
287292
auto trackParCovProtonCopy = trackParCovProton;
288293
auto trackParCovPionCopy = trackParCovPion;
289294
auto trackParCovDeuteronCopy = trackParCovDeuteron;
295+
KFParticle kfproton = createKFParticleFromTrackParCov(trackParCovProtonCopy, trackProton.sign(), constants::physics::MassProton);
296+
KFParticle kfpion = createKFParticleFromTrackParCov(trackParCovPionCopy, trackPion.sign(), constants::physics::MassPionCharged);
297+
KFParticle kfdeuteron = createKFParticleFromTrackParCov(trackParCovDeuteronCopy, trackDeuteron.sign(), constants::physics::MassDeuteron);
298+
299+
// proton DCA to PV
300+
decay3body.trackDCAxyToPV[0] = kfproton.GetDistanceFromVertexXY(pvXY);
301+
decay3body.trackDCAToPV[0] = kfproton.GetDistanceFromVertex(pv);
302+
// pion DCA to PV
303+
decay3body.trackDCAxyToPV[1] = kfpion.GetDistanceFromVertexXY(pvXY);
304+
decay3body.trackDCAToPV[1] = kfpion.GetDistanceFromVertex(pv);
305+
// deuteron DCA to PV
306+
decay3body.trackDCAxyToPV[2] = kfdeuteron.GetDistanceFromVertexXY(pvXY);
307+
decay3body.trackDCAToPV[2] = kfdeuteron.GetDistanceFromVertex(pv);
308+
// selection
309+
if (useSelections) {
310+
if (decay3body.trackDCAToPV[0] < decay3bodyselections.minDCAProtonToPV) {
311+
decay3body = {};
312+
return false;
313+
}
314+
if (decay3body.trackDCAToPV[1] < decay3bodyselections.minDCAPionToPV) {
315+
decay3body = {};
316+
return false;
317+
}
318+
if (decay3body.trackDCAToPV[2] < decay3bodyselections.minDCADeuteronToPV) {
319+
decay3body = {};
320+
return false;
321+
}
322+
}
323+
324+
//_______________________________________________________________________
325+
// daughter track DCA to PV associated with decay3body --> with O2 Propagator
326+
o2::dataformats::VertexBase mPV;
327+
o2::dataformats::DCA mDcaInfoCov;
328+
auto trackParCovProtonCopyProp = trackParCovProton;
329+
auto trackParCovPionCopyProp = trackParCovPion;
330+
auto trackParCovDeuteronCopyProp = trackParCovDeuteron;
290331
mPV.setPos({pvX, pvY, pvZ});
291332
mPV.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
292333

293334
// proton track
294-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mPV, trackParCovProtonCopy, 2.f, fitter3body.getMatCorrType(), &mDcaInfoCov);
295-
decay3body.trackDCAxyToPV[0] = mDcaInfoCov.getY();
296-
decay3body.trackDCAzToPV[0] = mDcaInfoCov.getZ();
297-
auto trackProtonDCAToPV = std::sqrt(decay3body.trackDCAxyToPV[0] * decay3body.trackDCAxyToPV[0] + decay3body.trackDCAzToPV[0] * decay3body.trackDCAzToPV[0]);
335+
o2::base::Propagator::Instance()->propagateToDCABxByBz(mPV, trackParCovProtonCopyProp, 2.f, fitter3body.getMatCorrType(), &mDcaInfoCov);
336+
decay3body.trackDCAxyToPVprop[0] = mDcaInfoCov.getY();
337+
auto trackProtonDCAzToPVprop = mDcaInfoCov.getZ();
338+
decay3body.trackDCAToPVprop[0] = std::sqrt(decay3body.trackDCAxyToPVprop[0] * decay3body.trackDCAxyToPVprop[0] + trackProtonDCAzToPVprop * trackProtonDCAzToPVprop);
298339
if (useSelections) {
299-
if (trackProtonDCAToPV < decay3bodyselections.minDCAProtonToPV) {
340+
if (decay3body.trackDCAToPVprop[0] < decay3bodyselections.minDCAProtonToPVprop) {
300341
decay3body = {};
301342
return false;
302343
}
303344
}
304345
// pion track
305-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mPV, trackParCovPionCopy, 2.f, fitter3body.getMatCorrType(), &mDcaInfoCov);
306-
decay3body.trackDCAxyToPV[1] = mDcaInfoCov.getY();
307-
decay3body.trackDCAzToPV[1] = mDcaInfoCov.getZ();
308-
auto trackPionDCAToPV = std::sqrt(decay3body.trackDCAxyToPV[1] * decay3body.trackDCAxyToPV[1] + decay3body.trackDCAzToPV[1] * decay3body.trackDCAzToPV[1]);
346+
o2::base::Propagator::Instance()->propagateToDCABxByBz(mPV, trackParCovPionCopyProp, 2.f, fitter3body.getMatCorrType(), &mDcaInfoCov);
347+
decay3body.trackDCAxyToPVprop[1] = mDcaInfoCov.getY();
348+
auto trackPionDCAzToPVprop = mDcaInfoCov.getZ();
349+
decay3body.trackDCAToPVprop[1] = std::sqrt(decay3body.trackDCAxyToPVprop[1] * decay3body.trackDCAxyToPVprop[1] + trackPionDCAzToPVprop * trackPionDCAzToPVprop);
309350
if (useSelections) {
310-
if (trackPionDCAToPV < decay3bodyselections.minDCAPionToPV) {
351+
if (decay3body.trackDCAToPVprop[1] < decay3bodyselections.minDCAPionToPVprop) {
311352
decay3body = {};
312353
return false;
313354
}
314355
}
315356
// deuteron track
316-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mPV, trackParCovDeuteronCopy, 2.f, fitter3body.getMatCorrType(), &mDcaInfoCov);
317-
decay3body.trackDCAxyToPV[2] = mDcaInfoCov.getY();
318-
decay3body.trackDCAzToPV[2] = mDcaInfoCov.getZ();
319-
auto trackDeuteronDCAToPV = std::sqrt(decay3body.trackDCAxyToPV[2] * decay3body.trackDCAxyToPV[2] + decay3body.trackDCAzToPV[2] * decay3body.trackDCAzToPV[2]);
357+
o2::base::Propagator::Instance()->propagateToDCABxByBz(mPV, trackParCovDeuteronCopyProp, 2.f, fitter3body.getMatCorrType(), &mDcaInfoCov);
358+
decay3body.trackDCAxyToPVprop[2] = mDcaInfoCov.getY();
359+
auto trackDeuteronDCAzToPVprop = mDcaInfoCov.getZ();
360+
decay3body.trackDCAToPVprop[2] = std::sqrt(decay3body.trackDCAxyToPVprop[2] * decay3body.trackDCAxyToPVprop[2] + trackDeuteronDCAzToPVprop * trackDeuteronDCAzToPVprop);
320361
if (useSelections) {
321-
if (trackDeuteronDCAToPV < decay3bodyselections.minDCADeuteronToPV) {
362+
if (decay3body.trackDCAToPVprop[2] < decay3bodyselections.minDCADeuteronToPVprop) {
322363
decay3body = {};
323364
return false;
324365
}

0 commit comments

Comments
 (0)