@@ -155,6 +155,7 @@ struct HfFilter { // Main struct for HF triggers
155155 o2::vertexing::DCAFitterN<3 > df3; // fitter for Charm Hadron vertex (3-prong vertex fitter)
156156 o2::vertexing::DCAFitterN<2 > dfB; // fitter for Beauty Hadron vertex (2-prong vertex fitter)
157157 o2::vertexing::DCAFitterN<3 > dfBtoDstar; // fitter for Beauty Hadron to D* vertex (3-prong vertex fitter)
158+ o2::vertexing::DCAFitterN<2 > dfStrangeness; // fitter for V0s and cascades (2-prong vertex fitter)
158159
159160 HistogramRegistry registry{" registry" };
160161 std::shared_ptr<TH1> hProcessedEvents;
@@ -215,6 +216,8 @@ struct HfFilter { // Main struct for HF triggers
215216 helper.setPtRangeSoftPiSigmaC (ptCuts->get (0u , 4u ), ptCuts->get (1u , 4u ));
216217 helper.setPtDeltaMassRangeSigmaC (cutsPtDeltaMassCharmReso->get (0u , 6u ), cutsPtDeltaMassCharmReso->get (1u , 6u ), cutsPtDeltaMassCharmReso->get (0u , 7u ), cutsPtDeltaMassCharmReso->get (1u , 7u ), cutsPtDeltaMassCharmReso->get (0u , 8u ), cutsPtDeltaMassCharmReso->get (1u , 8u ), cutsPtDeltaMassCharmReso->get (0u , 9u ), cutsPtDeltaMassCharmReso->get (1u , 9u ), cutsPtDeltaMassCharmReso->get (2u , 6u ), cutsPtDeltaMassCharmReso->get (2u , 7u ), cutsPtDeltaMassCharmReso->get (2u , 8u ), cutsPtDeltaMassCharmReso->get (2u , 9u ));
217218 helper.setPtRangeSoftKaonXicResoToSigmaC (ptCuts->get (0u , 5u ), ptCuts->get (1u , 5u ));
219+ helper.setVtxConfiguration (dfStrangeness, true ); // (DCAFitterN, useAbsDCA)
220+ dfStrangeness.setMatCorrType (matCorr);
218221 if (activateSecVtxForB) {
219222 helper.setVtxConfiguration (df2, false ); // (DCAFitterN, useAbsDCA)
220223 helper.setVtxConfiguration (df3, false );
@@ -327,26 +330,28 @@ struct HfFilter { // Main struct for HF triggers
327330
328331 using BigTracksMCPID = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullKa, aod::pidTOFFullKa, aod::pidTPCFullPr, aod::pidTOFFullPr, aod::pidTPCFullDe, aod::pidTOFFullDe, aod::McTrackLabels>;
329332 using BigTracksPID = soa::Join<aod::Tracks, aod::TracksWCovDcaExtra, aod::TracksDCA, aod::TrackSelection, aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullKa, aod::pidTOFFullKa, aod::pidTPCFullPr, aod::pidTOFFullPr, aod::pidTPCFullDe, aod::pidTOFFullDe>;
333+ using TracksIUPID = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::pidTPCFullPr, aod::pidTOFFullPr, aod::pidTPCFullPi, aod::pidTOFFullPi>;
330334 using CollsWithEvSel = soa::Join<aod::Collisions, aod::EvSels>;
331335
332336 using Hf2ProngsWithMl = soa::Join<aod::Hf2Prongs, aod::Hf2ProngMlProbs>;
333337 using Hf3ProngsWithMl = soa::Join<aod::Hf3Prongs, aod::Hf3ProngMlProbs>;
334338
335339 Preslice<aod::TrackAssoc> trackIndicesPerCollision = aod::track_association::collisionId;
336- Preslice<aod::V0Datas > v0sPerCollision = aod::v0data::collisionId;
340+ Preslice<aod::V0s > v0sPerCollision = aod::v0data::collisionId;
337341 Preslice<Hf2ProngsWithMl> hf2ProngPerCollision = aod::track_association::collisionId;
338342 Preslice<Hf3ProngsWithMl> hf3ProngPerCollision = aod::track_association::collisionId;
339- Preslice<aod::CascDatas > cascPerCollision = aod::cascdata::collisionId;
343+ Preslice<aod::Cascades > cascPerCollision = aod::cascdata::collisionId;
340344 Preslice<aod::V0PhotonsKF> photonsPerCollision = aod::v0photonkf::collisionId;
341345
342346 void process (CollsWithEvSel const & collisions,
343347 aod::BCsWithTimestamps const &,
344- aod::V0Datas const & v0s,
345- aod::CascDatas const & cascades,
348+ aod::V0s const & v0s,
349+ aod::Cascades const & cascades,
346350 Hf2ProngsWithMl const & cand2Prongs,
347351 Hf3ProngsWithMl const & cand3Prongs,
348352 aod::TrackAssoc const & trackIndices,
349353 BigTracksPID const &,
354+ TracksIUPID const & tracksIU,
350355 aod::V0PhotonsKF const & photons,
351356 aod::V0Legs const &)
352357 {
@@ -380,6 +385,15 @@ struct HfFilter { // Main struct for HF triggers
380385 helper.setValuesBB (ccdbApi, bc, std::array{ccdbBBPion.value , ccdbBBAntiPion.value , ccdbBBKaon.value , ccdbBBAntiKaon.value , ccdbBBProton.value , ccdbBBAntiProton.value , ccdbBBProton.value , ccdbBBAntiProton.value }); // dummy for deuteron
381386 }
382387
388+ auto bz = o2::base::Propagator::Instance ()->getNominalBz ();
389+ dfStrangeness.setBz (bz);
390+ if (activateSecVtxForB) {
391+ df2.setBz (bz);
392+ df3.setBz (bz);
393+ dfB.setBz (bz);
394+ dfBtoDstar.setBz (bz);
395+ }
396+
383397 currentRun = bc.runNumber ();
384398 }
385399
@@ -702,30 +716,21 @@ struct HfFilter { // Main struct for HF triggers
702716 if (!keepEvent[kV0Charm2P ] && isSignalTagged && (TESTBIT (selD0, 0 ) || TESTBIT (selD0, 1 ))) {
703717 auto v0sThisCollision = v0s.sliceBy (v0sPerCollision, thisCollId);
704718 for (const auto & v0 : v0sThisCollision) {
705- auto posTrack = v0.posTrack_as <BigTracksPID>();
706- auto negTrack = v0.negTrack_as <BigTracksPID>();
707- auto selV0 = helper.isSelectedV0 (v0, std::array{posTrack, negTrack}, collision, activateQA, hV0Selected, hArmPod);
719+ V0Cand v0Cand;
720+ if (!helper.buildV0 (v0, tracksIU, collision, dfStrangeness, std::vector{cand2Prong.prong0Id (), cand2Prong.prong1Id ()}, v0Cand)) {
721+ continue ;
722+ }
723+ auto selV0 = helper.isSelectedV0 (v0Cand, activateQA, hV0Selected, hArmPod);
708724 if (!selV0) {
709725 continue ;
710726 }
711727
712- // propagate to PV
713- gpu::gpustd::array<float , 2 > dcaInfo;
714- std::array<float , 3 > pVecV0 = {v0.px (), v0.py (), v0.pz ()};
715- std::array<float , 3 > pVecV0Orig = {v0.px (), v0.py (), v0.pz ()};
716- std::array<float , 3 > posVecV0 = {v0.x (), v0.y (), v0.z ()};
717728 if (!keepEvent[kV0Charm2P ] && TESTBIT (selV0, kK0S )) {
718729
719- auto trackParK0 = o2::track::TrackPar (posVecV0, pVecV0Orig, 0 , true );
720- trackParK0.setPID (o2::track::PID::K0);
721- trackParK0.setAbsCharge (0 );
722- o2::base::Propagator::Instance ()->propagateToDCABxByBz ({collision.posX (), collision.posY (), collision.posZ ()}, trackParK0, 2 .f , matCorr, &dcaInfo);
723- getPxPyPz (trackParK0, pVecV0);
724-
725730 // we first look for a D*+
726731 for (const auto & trackBachelorId : trackIdsThisCollision) { // start loop over tracks
727732 auto trackBachelor = trackBachelorId.track_as <BigTracksPID>();
728- if (trackBachelor.globalIndex () == trackPos.globalIndex () || trackBachelor.globalIndex () == trackNeg.globalIndex ()) {
733+ if (trackBachelor.globalIndex () == trackPos.globalIndex () || trackBachelor.globalIndex () == trackNeg.globalIndex () || trackBachelor. globalIndex () == v0. posTrackId () || trackBachelor. globalIndex () == v0. negTrackId () ) {
729734 continue ;
730735 }
731736
@@ -756,10 +761,10 @@ struct HfFilter { // Main struct for HF triggers
756761 if (activateQA) {
757762 hMassVsPtC[kNCharmParticles ]->Fill (ptDStarCand, massDiffDstar);
758763 }
759- auto pVecReso2Prong = RecoDecay::pVec (pVecDStarCand, pVecV0 );
764+ auto pVecReso2Prong = RecoDecay::pVec (pVecDStarCand, v0Cand. mom );
760765 auto ptCand = RecoDecay::pt (pVecReso2Prong);
761766 if (ptCand > cutsPtDeltaMassCharmReso->get (2u , 3u )) {
762- auto massDStarK0S = RecoDecay::m (std::array{pVecPos, pVecNeg, pVecBachelor, pVecV0 }, std::array{massDausD0[0 ], massDausD0[1 ], massPi, massK0S});
767+ auto massDStarK0S = RecoDecay::m (std::array{pVecPos, pVecNeg, pVecBachelor, v0Cand. mom }, std::array{massDausD0[0 ], massDausD0[1 ], massPi, massK0S});
763768 auto massDiffDsReso = massDStarK0S - massDStarCand;
764769 if (cutsPtDeltaMassCharmReso->get (0u , 3u ) < massDiffDsReso && massDiffDsReso < cutsPtDeltaMassCharmReso->get (1u , 3u )) {
765770 if (activateQA) {
@@ -775,24 +780,19 @@ struct HfFilter { // Main struct for HF triggers
775780 }
776781 }
777782 if (!keepEvent[kV0Charm2P ] && (TESTBIT (selV0, kLambda ) || TESTBIT (selV0, kAntiLambda ))) { // Xic(3055) and Xic(3080) --> since it occupies only a small bandwidth, we might want to keep also wrong sign pairs
778- auto trackParLambda = o2::track::TrackPar (posVecV0, pVecV0Orig, 0 , true );
779- trackParLambda.setAbsCharge (0 );
780- trackParLambda.setPID (o2::track::PID::Lambda);
781- o2::base::Propagator::Instance ()->propagateToDCABxByBz ({collision.posX (), collision.posY (), collision.posZ ()}, trackParLambda, 2 .f , matCorr, &dcaInfo);
782- getPxPyPz (trackParLambda, pVecV0);
783783 float massXicStarCand{-999 .}, massXicStarBarCand{-999 .};
784784 float massDiffXicStarCand{-999 .}, massDiffXicStarBarCand{-999 .};
785785 bool isRightSignXicStar{false }, isRightSignXicStarBar{false };
786- auto pVecReso2Prong = RecoDecay::pVec (pVec2Prong, pVecV0 );
786+ auto pVecReso2Prong = RecoDecay::pVec (pVec2Prong, v0Cand. mom );
787787 auto ptCand = RecoDecay::pt (pVecReso2Prong);
788788 if (ptCand > cutsPtDeltaMassCharmReso->get (2u , 5u )) {
789789 if (TESTBIT (selD0, 0 )) {
790- massXicStarCand = RecoDecay::m (std::array{pVecPos, pVecNeg, pVecV0 }, std::array{massPi, massKa, massLambda});
790+ massXicStarCand = RecoDecay::m (std::array{pVecPos, pVecNeg, v0Cand. mom }, std::array{massPi, massKa, massLambda});
791791 massDiffXicStarCand = massXicStarCand - massD0Cand;
792792 isRightSignXicStar = TESTBIT (selV0, kLambda ); // right sign if Lambda
793793 }
794794 if (TESTBIT (selD0, 1 )) {
795- massXicStarBarCand = RecoDecay::m (std::array{pVecPos, pVecNeg, pVecV0 }, std::array{massKa, massPi, massLambda});
795+ massXicStarBarCand = RecoDecay::m (std::array{pVecPos, pVecNeg, v0Cand. mom }, std::array{massKa, massPi, massLambda});
796796 massDiffXicStarBarCand = massXicStarBarCand - massD0BarCand;
797797 isRightSignXicStarBar = TESTBIT (selV0, kAntiLambda ); // right sign if AntiLambda
798798 }
@@ -1249,28 +1249,21 @@ struct HfFilter { // Main struct for HF triggers
12491249
12501250 if ((!keepEvent[kV0Charm3P ] && isGoodDPlus) || (!keepEvent[kSigmaC0K0 ] && (isGoodLcToPKPi || isGoodLcToPiKP))) {
12511251 for (const auto & v0 : v0sThisCollision) {
1252- auto posTrack = v0.posTrack_as <BigTracksPID>();
1253- auto negTrack = v0.negTrack_as <BigTracksPID>();
1254- auto selV0 = helper.isSelectedV0 (v0, std::array{posTrack, negTrack}, collision, activateQA, hV0Selected, hArmPod);
1252+ V0Cand v0Cand;
1253+ if (!helper.buildV0 (v0, tracksIU, collision, dfStrangeness, std::vector{cand3Prong.prong0Id (), cand3Prong.prong1Id (), cand3Prong.prong2Id ()}, v0Cand)) {
1254+ continue ;
1255+ }
1256+ auto selV0 = helper.isSelectedV0 (v0Cand, activateQA, hV0Selected, hArmPod);
12551257 if (!selV0) {
12561258 continue ;
12571259 }
1258- gpu::gpustd::array<float , 2 > dcaInfo;
1259- std::array<float , 3 > pVecV0Orig = {v0.px (), v0.py (), v0.pz ()};
1260- std::array<float , 3 > pVecV0 = {v0.px (), v0.py (), v0.pz ()};
1261- std::array<float , 3 > posVecV0 = {v0.x (), v0.y (), v0.z ()};
12621260
12631261 // we pair D+ with V0
12641262 if (!keepEvent[kV0Charm3P ] && isGoodDPlus) {
12651263 if (!keepEvent[kV0Charm3P ] && TESTBIT (selV0, kK0S )) { // Ds2*
1266- auto trackParK0S = o2::track::TrackPar (posVecV0, pVecV0Orig, 0 , true );
1267- trackParK0S.setAbsCharge (0 );
1268- trackParK0S.setPID (o2::track::PID::K0);
1269- o2::base::Propagator::Instance ()->propagateToDCABxByBz ({collision.posX (), collision.posY (), collision.posZ ()}, trackParK0S, 2 .f , matCorr, &dcaInfo);
1270- getPxPyPz (trackParK0S, pVecV0);
1271- auto massDsStarCand = RecoDecay::m (std::array{pVecFirst, pVecSecond, pVecThird, pVecV0}, std::array{massPi, massKa, massPi, massK0S});
1264+ auto massDsStarCand = RecoDecay::m (std::array{pVecFirst, pVecSecond, pVecThird, v0Cand.mom }, std::array{massPi, massKa, massPi, massK0S});
12721265 auto massDiffDsStar = massDsStarCand - massDPlusCand;
1273- auto pVecReso3Prong = RecoDecay::pVec (pVec3Prong, pVecV0 );
1266+ auto pVecReso3Prong = RecoDecay::pVec (pVec3Prong, v0Cand. mom );
12741267 auto ptCand = RecoDecay::pt (pVecReso3Prong);
12751268 if (ptCand > cutsPtDeltaMassCharmReso->get (2u , 4u )) {
12761269 if (cutsPtDeltaMassCharmReso->get (0u , 4u ) < massDiffDsStar && massDiffDsStar < cutsPtDeltaMassCharmReso->get (1u , 4u )) {
@@ -1282,15 +1275,10 @@ struct HfFilter { // Main struct for HF triggers
12821275 }
12831276 }
12841277 if (!keepEvent[kV0Charm3P ] && (TESTBIT (selV0, kLambda ) || TESTBIT (selV0, kAntiLambda ))) { // Xic(3055) and Xic(3080) --> since it occupies only a small bandwidth, we might want to keep also wrong sign pairs
1285- auto trackParLambda = o2::track::TrackPar (posVecV0, pVecV0Orig, 0 , true );
1286- trackParLambda.setAbsCharge (0 );
1287- trackParLambda.setPID (o2::track::PID::Lambda);
1288- o2::base::Propagator::Instance ()->propagateToDCABxByBz ({collision.posX (), collision.posY (), collision.posZ ()}, trackParLambda, 2 .f , matCorr, &dcaInfo);
1289- getPxPyPz (trackParLambda, pVecV0);
1290- auto pVecReso3Prong = RecoDecay::pVec (pVec3Prong, pVecV0);
1278+ auto pVecReso3Prong = RecoDecay::pVec (pVec3Prong, v0Cand.mom );
12911279 auto ptCand = RecoDecay::pt (pVecReso3Prong);
12921280 if (ptCand > cutsPtDeltaMassCharmReso->get (2u , 5u )) {
1293- auto massXicStarCand = RecoDecay::m (std::array{pVecFirst, pVecSecond, pVecThird, pVecV0 }, std::array{massPi, massKa, massPi, massLambda});
1281+ auto massXicStarCand = RecoDecay::m (std::array{pVecFirst, pVecSecond, pVecThird, v0Cand. mom }, std::array{massPi, massKa, massPi, massLambda});
12941282 auto massDiffXicStar = massXicStarCand - massDPlusCand;
12951283 bool isRightSign = ((TESTBIT (selV0, kLambda ) && sign3Prong > 0 ) || (TESTBIT (selV0, kAntiLambda ) && sign3Prong < 0 ));
12961284 if (cutsPtDeltaMassCharmReso->get (0u , 5u ) < massDiffXicStar && massDiffXicStar < cutsPtDeltaMassCharmReso->get (1u , 5u )) {
@@ -1319,8 +1307,8 @@ struct HfFilter { // Main struct for HF triggers
13191307 auto globalIndexSoftPi = trackSoftPi.globalIndex ();
13201308
13211309 // exclude tracks already used to build the 3-prong candidate
1322- if (globalIndexSoftPi == trackFirst.globalIndex () || globalIndexSoftPi == trackSecond.globalIndex () || globalIndexSoftPi == trackThird.globalIndex ()) {
1323- // do not consider as candidate soft pion a track already used to build the current 3-prong candidate
1310+ if (globalIndexSoftPi == trackFirst.globalIndex () || globalIndexSoftPi == trackSecond.globalIndex () || globalIndexSoftPi == trackThird.globalIndex () || globalIndexSoftPi == v0. posTrackId () || globalIndexSoftPi == v0. negTrackId () ) {
1311+ // do not consider as candidate soft pion a track already used to build the current 3-prong candidate / V0 candidate
13241312 continue ;
13251313 }
13261314
@@ -1353,17 +1341,15 @@ struct HfFilter { // Main struct for HF triggers
13531341 // / and keep it only if it is in the correct mass range
13541342
13551343 float massSigmaCPKPi{-999 .}, massSigmaCPiKP{-999 .}, deltaMassXicResoPKPi{-999 .}, deltaMassXicResoPiKP{-999 .};
1356- std::array<float , 3 > pVecPiPosK0s = posTrack.pVector ();
1357- std::array<float , 3 > pVecPiNegK0s = negTrack.pVector ();
1358- float ptSigmaCKaon = RecoDecay::pt (pVecSigmaC, pVecPiPosK0s, pVecPiNegK0s);
1344+ float ptSigmaCKaon = RecoDecay::pt (pVecSigmaC, v0Cand.mom );
13591345 if (ptSigmaCKaon > cutsPtDeltaMassCharmReso->get (2u , 10u )) {
13601346 if (TESTBIT (whichSigmaC, 0 )) {
13611347 massSigmaCPKPi = RecoDecay::m (std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi}, std::array{massProton, massKa, massPi, massPi});
1362- deltaMassXicResoPKPi = RecoDecay::m (std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi, pVecPiPosK0s, pVecPiNegK0s }, std::array{massProton, massKa, massPi, massPi, massPi, massPi }) - massSigmaCPKPi;
1348+ deltaMassXicResoPKPi = RecoDecay::m (std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi, v0Cand. mom }, std::array{massProton, massKa, massPi, massPi, massK0S }) - massSigmaCPKPi;
13631349 }
13641350 if (TESTBIT (whichSigmaC, 1 )) {
13651351 massSigmaCPiKP = RecoDecay::m (std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi}, std::array{massPi, massKa, massProton, massPi});
1366- deltaMassXicResoPiKP = RecoDecay::m (std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi, pVecPiPosK0s, pVecPiNegK0s }, std::array{massPi, massKa, massProton, massPi, massPi, massPi }) - massSigmaCPiKP;
1352+ deltaMassXicResoPiKP = RecoDecay::m (std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi, v0Cand. mom }, std::array{massPi, massKa, massProton, massPi, massK0S }) - massSigmaCPiKP;
13671353 }
13681354
13691355 bool isPKPiOk = (cutsPtDeltaMassCharmReso->get (0u , 10u ) < deltaMassXicResoPKPi && deltaMassXicResoPKPi < cutsPtDeltaMassCharmReso->get (1u , 10u ));
@@ -1404,35 +1390,43 @@ struct HfFilter { // Main struct for HF triggers
14041390 if (!keepEvent[kCharmBarToXiBach ]) {
14051391 auto cascThisColl = cascades.sliceBy (cascPerCollision, thisCollId);
14061392 for (const auto & casc : cascThisColl) {
1407- auto bachelorCasc = casc.bachelor_as <BigTracksPID>();
1408- auto v0DauPos = casc.posTrack_as <BigTracksPID>();
1409- auto v0DauNeg = casc.negTrack_as <BigTracksPID>();
14101393
1411- if (!helper.isSelectedCascade (casc, std::array{bachelorCasc, v0DauPos, v0DauNeg}, collision)) {
1394+ CascCand cascCand;
1395+ if (!helper.buildCascade (casc, v0s, tracksIU, collision, dfStrangeness, {}, cascCand)) {
14121396 continue ;
14131397 }
1398+
1399+ if (!helper.isSelectedCascade (cascCand)) {
1400+ continue ;
1401+ }
1402+
14141403 if (activateQA) {
1415- hMassXi->Fill (casc .mXi () );
1404+ hMassXi->Fill (cascCand .mXi );
14161405 }
14171406
1407+ auto bachelorCascId = casc.bachelorId ();
1408+ auto v0 = v0s.rawIteratorAt (casc.v0Id ());
1409+ auto v0DauPosId = v0.posTrackId ();
1410+ auto v0DauNegId = v0.negTrackId ();
1411+
14181412 auto trackIdsThisCollision = trackIndices.sliceBy (trackIndicesPerCollision, thisCollId);
14191413 for (const auto & trackId : trackIdsThisCollision) { // start loop over tracks
14201414 auto track = trackId.track_as <BigTracksPID>();
14211415
14221416 // ask for opposite sign daughters (omegac daughters)
1423- if (track.sign () * bachelorCasc .sign () >= 0 ) {
1417+ if (track.sign () * cascCand .sign > 0 ) {
14241418 continue ;
14251419 }
14261420
14271421 // check if track is one of the Xi daughters
1428- if (track.globalIndex () == bachelorCasc. globalIndex () || track.globalIndex () == v0DauPos. globalIndex () || track.globalIndex () == v0DauNeg. globalIndex () ) {
1422+ if (track.globalIndex () == bachelorCascId || track.globalIndex () == v0DauPosId || track.globalIndex () == v0DauNegId ) {
14291423 continue ;
14301424 }
14311425
14321426 // propagate to PV
14331427 gpu::gpustd::array<float , 2 > dcaInfo;
1434- std::array<float , 3 > pVecCascade = {casc. px (), casc. py (), casc. pz ()} ;
1435- auto trackParCasc = o2::track::TrackPar (std::array{casc. x (), casc. y (), casc. z ()}, pVecCascade, bachelorCasc. sign () , true );
1428+ std::array<float , 3 > pVecCascade = cascCand. mom ;
1429+ auto trackParCasc = o2::track::TrackPar (cascCand. vtx , cascCand. mom , cascCand. sign , true );
14361430 trackParCasc.setPID (o2::track::PID::XiMinus);
14371431 o2::base::Propagator::Instance ()->propagateToDCABxByBz ({collision.posX (), collision.posY (), collision.posZ ()}, trackParCasc, 2 .f , matCorr, &dcaInfo);
14381432 getPxPyPz (trackParCasc, pVecCascade);
0 commit comments