Skip to content

Commit 4d56aef

Browse files
fmazzascFrancesco Mazzaschi
andauthored
[PWGLF,Trigger] Nuclei trigger: fix wrong nested loop and V0 CosPA calculation (#11120)
Co-authored-by: Francesco Mazzaschi <fmazzasc@alipap1.cern.ch>
1 parent 78d7540 commit 4d56aef

File tree

1 file changed

+71
-58
lines changed

1 file changed

+71
-58
lines changed

EventFiltering/PWGLF/nucleiFilter.cxx

Lines changed: 71 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -431,73 +431,86 @@ struct nucleiFilter {
431431
h2TPCsignal[iN]->Fill(track.sign() * track.tpcInnerParam() * fixTPCrigidity, track.tpcSignal());
432432
}
433433
}
434+
//
435+
// fill QA histograms
436+
//
437+
qaHists.fill(HIST("fTPCsignal"), track.sign() * track.tpcInnerParam() * fixTPCrigidity, track.tpcSignal());
434438

435-
for (const auto& track : tracks) {
436-
if (track.itsNCls() < cfgCutNclusITS ||
437-
track.tpcNClsFound() < cfgCutNclusTPC ||
438-
std::abs(track.dcaXY()) > cfgCutDCAxy ||
439-
std::abs(track.dcaZ()) > cfgCutDCAz ||
440-
std::abs(track.eta()) > cfgCutEta) {
439+
} // end loop over tracks
440+
441+
for (const auto& track : tracks) {
442+
if (track.itsNCls() < cfgCutNclusITS ||
443+
track.tpcNClsFound() < cfgCutNclusTPC ||
444+
std::abs(track.dcaXY()) > cfgCutDCAxy ||
445+
std::abs(track.dcaZ()) > cfgCutDCAz ||
446+
std::abs(track.eta()) > cfgCutEta) {
447+
continue;
448+
}
449+
const ROOT::Math::PtEtaPhiMVector trackVector(track.pt(), track.eta(), track.phi(), constants::physics::MassPiMinus);
450+
for (size_t iH3{0}; iH3 < h3vectors.size(); ++iH3) {
451+
if (h3indices[iH3] == track.globalIndex()) {
441452
continue;
442453
}
443-
const ROOT::Math::PtEtaPhiMVector trackVector(track.pt(), track.eta(), track.phi(), constants::physics::MassPiMinus);
444-
for (size_t iH3{0}; iH3 < h3vectors.size(); ++iH3) {
445-
if (h3indices[iH3] == track.globalIndex()) {
446-
continue;
447-
}
448-
const auto& h3vector = h3vectors[iH3];
449-
auto pivector = trackVector;
450-
auto cm = h3vector + trackVector;
451-
const ROOT::Math::Boost boost(cm.BoostToCM());
452-
boost(pivector);
453-
if (pivector.P() < cfgCutKstar) {
454-
keepEvent[kTritonFemto] = true;
455-
break;
456-
}
454+
const auto& h3vector = h3vectors[iH3];
455+
auto pivector = trackVector;
456+
auto cm = h3vector + trackVector;
457+
const ROOT::Math::Boost boost(cm.BoostToCM());
458+
boost(pivector);
459+
if (pivector.P() < cfgCutKstar) {
460+
keepEvent[kTritonFemto] = true;
461+
break;
457462
}
458463
}
464+
}
459465

460-
for (const auto& v0 : v0s) {
461-
const auto& posTrack = v0.posTrack_as<TrackCandidates>();
462-
const auto& negTrack = v0.negTrack_as<TrackCandidates>();
463-
if ((posTrack.itsNCls() < cfgCutNclusITS || posTrack.tpcNClsFound() < cfgCutNclusTPC) &&
464-
(negTrack.itsNCls() < cfgCutNclusITS || negTrack.tpcNClsFound() < cfgCutNclusTPC)) {
465-
continue;
466-
}
467-
float nSigmas[2]{
468-
cfgBetheBlochParams->get(2, 5u) > 0.f ? getNsigma(posTrack, 2, 0) : posTrack.tpcNSigmaHe(),
469-
cfgBetheBlochParams->get(2, 5u) > 0.f ? getNsigma(negTrack, 2, 1) : negTrack.tpcNSigmaHe()};
470-
if ((nSigmas[0] < cfgCutsPID->get(2, 0u) || nSigmas[0] > cfgCutsPID->get(2, 1u)) &&
471-
(nSigmas[1] < cfgCutsPID->get(2, 0u) || nSigmas[1] > cfgCutsPID->get(2, 1u))) {
472-
continue;
473-
}
474-
int n2bodyVtx = fitter2body.process(getTrackParCov(posTrack), getTrackParCov(negTrack));
475-
if (n2bodyVtx == 0) {
476-
continue;
477-
}
478-
auto vtxXYZ = fitter2body.getPCACandidate();
479-
o2::gpu::gpustd::array<float, 3> mom = {0.};
480-
vtxXYZ[0] -= collision.posX();
481-
vtxXYZ[1] -= collision.posY();
482-
vtxXYZ[2] -= collision.posZ();
483-
auto momTrackParCov = fitter2body.createParentTrackPar();
484-
momTrackParCov.getPxPyPzGlo(mom);
485-
double cosPA = (vtxXYZ[0] * mom[0] + vtxXYZ[1] * mom[1] + vtxXYZ[2] * mom[2]) /
486-
std::sqrt((vtxXYZ[0] * vtxXYZ[0] + vtxXYZ[1] * vtxXYZ[1] + vtxXYZ[2] * vtxXYZ[2]) *
487-
(mom[0] * mom[0] + mom[1] * mom[1] + mom[2] * mom[2]));
488-
if (cosPA < cfgCutCosPAheV0) {
489-
continue;
490-
}
491-
keepEvent[kHeV0] = true;
492-
break;
466+
for (const auto& v0 : v0s) {
467+
const auto& posTrack = v0.posTrack_as<TrackCandidates>();
468+
const auto& negTrack = v0.negTrack_as<TrackCandidates>();
469+
if ((posTrack.itsNCls() < cfgCutNclusITS || posTrack.tpcNClsFound() < cfgCutNclusTPC) &&
470+
(negTrack.itsNCls() < cfgCutNclusITS || negTrack.tpcNClsFound() < cfgCutNclusTPC)) {
471+
continue;
493472
}
473+
float nSigmas[2]{
474+
cfgBetheBlochParams->get(2, 5u) > 0.f ? getNsigma(posTrack, 2, 0) : posTrack.tpcNSigmaHe(),
475+
cfgBetheBlochParams->get(2, 5u) > 0.f ? getNsigma(negTrack, 2, 1) : negTrack.tpcNSigmaHe()};
494476

495-
//
496-
// fill QA histograms
497-
//
498-
qaHists.fill(HIST("fTPCsignal"), track.sign() * track.tpcInnerParam() * fixTPCrigidity, track.tpcSignal());
477+
bool isHe3 = nSigmas[0] > cfgCutsPID->get(2, 0u) && nSigmas[0] < cfgCutsPID->get(2, 1u);
478+
bool isAntiHe3 = nSigmas[1] > cfgCutsPID->get(2, 0u) && nSigmas[1] < cfgCutsPID->get(2, 1u);
479+
if (!isHe3 && !isAntiHe3) {
480+
continue;
481+
}
482+
auto& he3Track = isHe3 ? posTrack : negTrack;
483+
auto& piTrack = isHe3 ? negTrack : posTrack;
499484

500-
} // end loop over tracks
485+
int n2bodyVtx = fitter2body.process(getTrackParCov(he3Track), getTrackParCov(piTrack));
486+
if (n2bodyVtx == 0) {
487+
continue;
488+
}
489+
auto vtxXYZ = fitter2body.getPCACandidate();
490+
vtxXYZ[0] -= collision.posX();
491+
vtxXYZ[1] -= collision.posY();
492+
vtxXYZ[2] -= collision.posZ();
493+
494+
o2::gpu::gpustd::array<float, 3> momHe3 = {0.};
495+
o2::gpu::gpustd::array<float, 3> momPi = {0.};
496+
o2::gpu::gpustd::array<float, 3> momTot = {0.};
497+
auto& hePropTrack = fitter2body.getTrack(0);
498+
auto& piPropTrack = fitter2body.getTrack(1);
499+
hePropTrack.getPxPyPzGlo(momHe3);
500+
piPropTrack.getPxPyPzGlo(momPi);
501+
for (int i = 0; i < 3; ++i) {
502+
momHe3[i] *= 2;
503+
momTot[i] = momHe3[i] + momPi[i];
504+
}
505+
double cosPA = (vtxXYZ[0] * momTot[0] + vtxXYZ[1] * momTot[1] + vtxXYZ[2] * momTot[2]) /
506+
std::sqrt((vtxXYZ[0] * vtxXYZ[0] + vtxXYZ[1] * vtxXYZ[1] + vtxXYZ[2] * vtxXYZ[2]) *
507+
(momTot[0] * momTot[0] + momTot[1] * momTot[1] + momTot[2] * momTot[2]));
508+
if (cosPA < cfgCutCosPAheV0) {
509+
continue;
510+
}
511+
keepEvent[kHeV0] = true;
512+
break;
513+
}
501514

502515
// fH3L3Body trigger
503516
auto bc = collision.bc_as<aod::BCsWithTimestamps>();

0 commit comments

Comments
 (0)