Skip to content

Commit f26d142

Browse files
authored
[PWGEM/Dilepton] reduce number of calling propagateMuon (#12137)
1 parent cb6c7c2 commit f26d142

File tree

2 files changed

+31
-11
lines changed

2 files changed

+31
-11
lines changed

PWGEM/Dilepton/Core/DimuonCut.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ class DimuonCut : public TNamed
194194
return track.nClusters() >= mMinNClustersMCHMID;
195195

196196
case DimuonCuts::kChi2:
197-
return track.chi2() / (2.f * (track.nClusters() + track.nClustersMFT()) - 5.f) < mMaxChi2;
197+
return (track.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) ? track.chi2() / (2.f * (track.nClusters() + track.nClustersMFT()) - 5.f) : track.chi2()) < mMaxChi2;
198198

199199
case DimuonCuts::kMatchingChi2MCHMFT:
200200
return track.chi2MatchMCHMFT() < mMaxMatchingChi2MCHMFT;

PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ struct skimmerPrimaryMuon {
183183
if (maxDCAxy < dcaXY) {
184184
return false;
185185
}
186-
if (chi2_per_ndf < 0.f || maxChi2GL < chi2_per_ndf) {
186+
if (maxChi2GL < chi2_per_ndf) {
187187
return false;
188188
}
189189
if (rAtAbsorberEnd < minRabsGL || maxRabs < rAtAbsorberEnd) {
@@ -193,7 +193,7 @@ struct skimmerPrimaryMuon {
193193
if (eta < minEtaSA || maxEtaSA < eta) {
194194
return false;
195195
}
196-
if (chi2_per_ndf < 0.f || maxChi2SA < chi2_per_ndf) {
196+
if (maxChi2SA < chi2_per_ndf) {
197197
return false;
198198
}
199199
} else {
@@ -214,14 +214,17 @@ struct skimmerPrimaryMuon {
214214
return;
215215
}
216216

217-
o2::dataformats::GlobalFwdTrack propmuonAtPV = propagateMuon(fwdtrack, collision, propagationPoint::kToVertex);
218-
o2::dataformats::GlobalFwdTrack propmuonAtDCA = propagateMuon(fwdtrack, collision, propagationPoint::kToDCA);
217+
if (fwdtrack.chi2() < 0.f) { // this should never happen. only for protection.
218+
return;
219+
}
219220

221+
o2::dataformats::GlobalFwdTrack propmuonAtPV = propagateMuon(fwdtrack, collision, propagationPoint::kToVertex);
220222
float pt = propmuonAtPV.getPt();
221223
float eta = propmuonAtPV.getEta();
222224
float phi = propmuonAtPV.getPhi();
223225
o2::math_utils::bringTo02Pi(phi);
224226

227+
o2::dataformats::GlobalFwdTrack propmuonAtDCA = propagateMuon(fwdtrack, collision, propagationPoint::kToDCA);
225228
float cXXatDCA = propmuonAtDCA.getSigma2X();
226229
float cYYatDCA = propmuonAtDCA.getSigma2Y();
227230
float cXYatDCA = propmuonAtDCA.getSigmaXY();
@@ -255,24 +258,41 @@ struct skimmerPrimaryMuon {
255258
int ndf_mchmft = 1;
256259

257260
if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
261+
// apply r-absorber cut here to minimize the number of calling propagateMuon.
262+
if (fwdtrack.rAtAbsorberEnd() < minRabsGL || maxRabs < fwdtrack.rAtAbsorberEnd()) {
263+
return;
264+
}
265+
266+
// apply dca cut here to minimize the number of calling propagateMuon.
267+
if (maxDCAxy < dcaXY) {
268+
return;
269+
}
270+
258271
const auto& mchtrack = fwdtrack.template matchMCHTrack_as<TFwdTracks>(); // MCH-MID
272+
const auto& mfttrack = fwdtrack.template matchMFTTrack_as<TMFTTracks>(); // MFTsa
273+
nClustersMFT = mfttrack.nClusters();
274+
mftClusterSizesAndTrackFlags = mfttrack.mftClusterSizesAndTrackFlags();
275+
ndf_mchmft = 2.f * (mchtrack.nClusters() + nClustersMFT) - 5.f;
276+
chi2mft = mfttrack.chi2();
277+
// chi2mft = mfttrack.chi2() / (2.f * nClustersMFT - 5.f);
278+
279+
// apply chi2/ndf cut here to minimize the number of calling propagateMuon.
280+
if (maxChi2GL < fwdtrack.chi2() / ndf_mchmft) {
281+
return;
282+
}
283+
259284
o2::dataformats::GlobalFwdTrack propmuonAtPV_Matched = propagateMuon(mchtrack, collision, propagationPoint::kToVertex);
260285
ptMatchedMCHMID = propmuonAtPV_Matched.getPt();
261286
etaMatchedMCHMID = propmuonAtPV_Matched.getEta();
262287
phiMatchedMCHMID = propmuonAtPV_Matched.getPhi();
263288
o2::math_utils::bringTo02Pi(phiMatchedMCHMID);
289+
264290
o2::dataformats::GlobalFwdTrack propmuonAtDCA_Matched = propagateMuon(mchtrack, collision, propagationPoint::kToDCA);
265291
float dcaX_Matched = propmuonAtDCA_Matched.getX() - collision.posX();
266292
float dcaY_Matched = propmuonAtDCA_Matched.getY() - collision.posY();
267293
float dcaXY_Matched = std::sqrt(dcaX_Matched * dcaX_Matched + dcaY_Matched * dcaY_Matched);
268294
pDCA = mchtrack.p() * dcaXY_Matched;
269295

270-
const auto& mfttrack = fwdtrack.template matchMFTTrack_as<TMFTTracks>();
271-
nClustersMFT = mfttrack.nClusters();
272-
mftClusterSizesAndTrackFlags = mfttrack.mftClusterSizesAndTrackFlags();
273-
chi2mft = mfttrack.chi2() / (2.f * nClustersMFT - 5.f);
274-
ndf_mchmft = 2.f * (mchtrack.nClusters() + nClustersMFT) - 5.f;
275-
276296
if (refitGlobalMuon) {
277297
eta = mfttrack.eta();
278298
phi = mfttrack.phi();

0 commit comments

Comments
 (0)