Skip to content

Commit 4135536

Browse files
committed
PWGEM/Dilepton: implement protection against failed track propagation
1 parent 1841bff commit 4135536

File tree

2 files changed

+60
-16
lines changed

2 files changed

+60
-16
lines changed

PWGEM/Dilepton/TableProducer/skimmerPrimaryElectron.cxx

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,10 @@ struct skimmerPrimaryElectron {
325325
trackParCov.setPID(o2::track::PID::Electron);
326326
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
327327
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
328-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
328+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
329+
if (!isPropOK) {
330+
return false;
331+
}
329332
float dcaXY = mDcaInfoCov.getY();
330333
float dcaZ = mDcaInfoCov.getZ();
331334

@@ -387,8 +390,10 @@ struct skimmerPrimaryElectron {
387390
trackParCov.setPID(o2::track::PID::Electron);
388391
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
389392
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
390-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
391-
393+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
394+
if (!isPropOK) {
395+
return false;
396+
}
392397
std::vector<float> inputFeatures = mlResponseSingleTrack.getInputFeatures(track, trackParCov, collision);
393398
float binningFeature = mlResponseSingleTrack.getBinningFeature(track, trackParCov, collision);
394399

@@ -465,7 +470,10 @@ struct skimmerPrimaryElectron {
465470
trackParCov.setPID(o2::track::PID::Electron);
466471
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
467472
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
468-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
473+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
474+
if (!isPropOK) {
475+
return;
476+
}
469477
float dcaXY = mDcaInfoCov.getY();
470478
float dcaZ = mDcaInfoCov.getZ();
471479

@@ -983,7 +991,10 @@ struct prefilterPrimaryElectron {
983991
trackParCov.setPID(o2::track::PID::Electron);
984992
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
985993
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
986-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
994+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
995+
if (!isPropOK) {
996+
return false;
997+
}
987998
float dcaXY = mDcaInfoCov.getY();
988999
float dcaZ = mDcaInfoCov.getZ();
9891000

@@ -1024,7 +1035,10 @@ struct prefilterPrimaryElectron {
10241035
if constexpr (loose_track_sign > 0) { // positive track is loose track
10251036
auto trackParCov = getTrackParCov(pos);
10261037
trackParCov.setPID(o2::track::PID::Electron);
1027-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1038+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1039+
if (!isPropOK) {
1040+
return false;
1041+
}
10281042
getPxPyPz(trackParCov, pVec_recalc);
10291043

10301044
ROOT::Math::PtEtaPhiMVector v1(ele.pt(), ele.eta(), ele.phi(), o2::constants::physics::MassElectron);
@@ -1035,7 +1049,10 @@ struct prefilterPrimaryElectron {
10351049
} else {
10361050
auto trackParCov = getTrackParCov(ele);
10371051
trackParCov.setPID(o2::track::PID::Electron);
1038-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1052+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1053+
if (!isPropOK) {
1054+
return false;
1055+
}
10391056
getPxPyPz(trackParCov, pVec_recalc);
10401057

10411058
ROOT::Math::PtEtaPhiMVector v1(trackParCov.getPt(), trackParCov.getEta(), trackParCov.getPhi(), o2::constants::physics::MassElectron);
@@ -1109,7 +1126,10 @@ struct prefilterPrimaryElectron {
11091126
trackParCov.setPID(o2::track::PID::Electron);
11101127
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
11111128
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
1112-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1129+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1130+
if (!isPropOK) {
1131+
continue;
1132+
}
11131133
getPxPyPz(trackParCov, pVec_recalc);
11141134

11151135
for (const auto& empos : positrons_per_coll) {
@@ -1154,7 +1174,10 @@ struct prefilterPrimaryElectron {
11541174
trackParCov.setPID(o2::track::PID::Electron);
11551175
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
11561176
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
1157-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1177+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1178+
if (!isPropOK) {
1179+
continue;
1180+
}
11581181
getPxPyPz(trackParCov, pVec_recalc);
11591182
for (const auto& emele : electrons_per_coll) {
11601183
if (emele.trackId() == pos.globalIndex()) {
@@ -1197,7 +1220,10 @@ struct prefilterPrimaryElectron {
11971220
trackParCov.setPID(o2::track::PID::Electron);
11981221
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
11991222
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
1200-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1223+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1224+
if (!isPropOK) {
1225+
continue;
1226+
}
12011227
getPxPyPz(trackParCov, pVec_recalc);
12021228
for (const auto& empos : positrons_per_coll) {
12031229
if (empos.trackId() == pos.globalIndex()) {
@@ -1226,7 +1252,10 @@ struct prefilterPrimaryElectron {
12261252
trackParCov.setPID(o2::track::PID::Electron);
12271253
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
12281254
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
1229-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1255+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1256+
if (!isPropOK) {
1257+
continue;
1258+
}
12301259
getPxPyPz(trackParCov, pVec_recalc);
12311260

12321261
for (const auto& emele : electrons_per_coll) {

PWGEM/Dilepton/TableProducer/skimmerPrimaryElectronQC.cxx

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,10 @@ struct skimmerPrimaryElectronQC {
336336
trackParCov.setPID(o2::track::PID::Electron);
337337
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
338338
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
339-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
339+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
340+
if (!isPropOK) {
341+
return false;
342+
}
340343
float dcaXY = mDcaInfoCov.getY();
341344
float dcaZ = mDcaInfoCov.getZ();
342345

@@ -409,7 +412,10 @@ struct skimmerPrimaryElectronQC {
409412
trackParCov.setPID(o2::track::PID::Electron);
410413
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
411414
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
412-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
415+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
416+
if (!isPropOK) {
417+
return false;
418+
}
413419
float dcaXY = mDcaInfoCov.getY();
414420
float dcaZ = mDcaInfoCov.getZ();
415421

@@ -455,7 +461,10 @@ struct skimmerPrimaryElectronQC {
455461
trackParCov.setPID(o2::track::PID::Electron);
456462
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
457463
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
458-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
464+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
465+
if (!isPropOK) {
466+
return;
467+
}
459468
float dcaXY = mDcaInfoCov.getY();
460469
float dcaZ = mDcaInfoCov.getZ();
461470

@@ -596,12 +605,18 @@ struct skimmerPrimaryElectronQC {
596605

597606
auto t1ParCov = getTrackParCov(t1);
598607
t1ParCov.setPID(o2::track::PID::Electron);
599-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, t1ParCov, 2.f, matCorr, &mDcaInfoCov);
608+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, t1ParCov, 2.f, matCorr, &mDcaInfoCov);
609+
if (!isPropOK) {
610+
return false;
611+
}
600612
getPxPyPz(t1ParCov, pVec1);
601613

602614
auto t2ParCov = getTrackParCov(t2);
603615
t2ParCov.setPID(o2::track::PID::Electron);
604-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, t2ParCov, 2.f, matCorr, &mDcaInfoCov);
616+
isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, t2ParCov, 2.f, matCorr, &mDcaInfoCov);
617+
if (!isPropOK) {
618+
return false;
619+
}
605620
getPxPyPz(t2ParCov, pVec2);
606621

607622
ROOT::Math::PtEtaPhiMVector v1(t1ParCov.getPt(), t1ParCov.getEta(), t1ParCov.getPhi(), o2::constants::physics::MassElectron);

0 commit comments

Comments
 (0)