Skip to content

Commit 37eba1d

Browse files
fgrosaalibuild
andauthored
[PWGHF,Trigger] Build V0s and cascades in HF triggers (#9175)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent f392842 commit 37eba1d

File tree

2 files changed

+499
-148
lines changed

2 files changed

+499
-148
lines changed

EventFiltering/PWGHF/HFFilter.cxx

Lines changed: 60 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)