@@ -61,7 +61,7 @@ struct decay3bodyCandidate {
6161 std::array<float , 3 > posPion = {0 .0f , 0 .0f , 0 .0f };
6262 std::array<float , 3 > posDeuteron = {0 .0f , 0 .0f , 0 .0f };
6363 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
64+ std::array<float , 3 > trackDCAToPV = {0 .0f , 0 .0f , 0 .0f }; // 0 - proton, 1 - pion, 2 - deuteron
6565 std::array<float , 4 > tpcNsigma = {0 .0f , 0 .0f , 0 .0f , 0 .0f }; // 0 - proton, 1 - pion, 2 - deuteron, 3 - bach with pion hyp
6666 double tofNsigmaDeuteron = 0 .0f ;
6767 std::array<float , 3 > averageITSClSize = {0 .0f , 0 .0f , 0 .0f }; // 0 - proton, 1 - pion, 2 - deuteron
@@ -281,44 +281,36 @@ class decay3bodyBuilderHelper
281281 } // end of selections
282282
283283 // _______________________________________________________________________
284- // daughter track DCA to PV associated with decay3body
285- o2::dataformats::VertexBase mPV ;
286- o2::dataformats::DCA mDcaInfoCov ;
284+ // daughter track DCA to PV associated with decay3body --> computed with KFParticle in all cases
285+ float pvXY[ 2 ] = {pvX, pvY} ;
286+ float pv[ 3 ] = {pvX, pvY, pvZ} ;
287287 auto trackParCovProtonCopy = trackParCovProton;
288288 auto trackParCovPionCopy = trackParCovPion;
289289 auto trackParCovDeuteronCopy = trackParCovDeuteron;
290- mPV .setPos ({pvX, pvY, pvZ});
291- mPV .setCov (collision.covXX (), collision.covXY (), collision.covYY (), collision.covXZ (), collision.covYZ (), collision.covZZ ());
292-
293- // 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 ]);
290+ KFParticle kfproton = createKFParticleFromTrackParCov (trackParCovProtonCopy, trackProton.sign (), constants::physics::MassProton);
291+ KFParticle kfpion = createKFParticleFromTrackParCov (trackParCovPionCopy, trackPion.sign (), constants::physics::MassPionCharged);
292+ KFParticle kfdeuteron = createKFParticleFromTrackParCov (trackParCovDeuteronCopy, trackDeuteron.sign (), constants::physics::MassDeuteron);
293+
294+ // proton DCA to PV
295+ decay3body.trackDCAxyToPV [0 ] = kfproton.GetDistanceFromVertexXY (pvXY);
296+ decay3body.trackDCAToPV [0 ] = kfproton.GetDistanceFromVertex (pv);
297+ // pion DCA to PV
298+ decay3body.trackDCAxyToPV [1 ] = kfpion.GetDistanceFromVertexXY (pvXY);
299+ decay3body.trackDCAToPV [1 ] = kfpion.GetDistanceFromVertex (pv);
300+ // deuteron DCA to PV
301+ decay3body.trackDCAxyToPV [2 ] = kfdeuteron.GetDistanceFromVertexXY (pvXY);
302+ decay3body.trackDCAToPV [2 ] = kfdeuteron.GetDistanceFromVertex (pv);
303+ // selection
298304 if (useSelections) {
299- if (trackProtonDCAToPV < decay3bodyselections.minDCAProtonToPV ) {
305+ if (decay3body. trackDCAToPV [ 0 ] < decay3bodyselections.minDCAProtonToPV ) {
300306 decay3body = {};
301307 return false ;
302308 }
303- }
304- // 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 ]);
309- if (useSelections) {
310- if (trackPionDCAToPV < decay3bodyselections.minDCAPionToPV ) {
309+ if (decay3body.trackDCAToPV [1 ] < decay3bodyselections.minDCAPionToPV ) {
311310 decay3body = {};
312311 return false ;
313312 }
314- }
315- // 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 ]);
320- if (useSelections) {
321- if (trackDeuteronDCAToPV < decay3bodyselections.minDCADeuteronToPV ) {
313+ if (decay3body.trackDCAToPV [2 ] < decay3bodyselections.minDCADeuteronToPV ) {
322314 decay3body = {};
323315 return false ;
324316 }
0 commit comments