Skip to content

Commit e80f47d

Browse files
authored
[Common] update fwdtrackPropagation.cxx (AliceO2Group#10773)
1 parent defbab4 commit e80f47d

File tree

1 file changed

+8
-84
lines changed

1 file changed

+8
-84
lines changed

Common/TableProducer/fwdtrackPropagation.cxx

Lines changed: 8 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,8 @@ struct FwdTrackPropagation {
7070
Configurable<float> maxPDCAforSmallR{"maxPDCAforSmallR", 594.f, "max. pDCA for small R at absorber end"};
7171
Configurable<float> maxMatchingChi2MCHMFT{"maxMatchingChi2MCHMFT", 50.f, "max. chi2 for MCH-MFT matching"};
7272
Configurable<float> maxChi2SA{"maxChi2SA", 1e+6, "max. chi2 for standalone muon"};
73-
Configurable<float> maxChi2GL{"maxChi2GL", 1e+6, "max. chi2 for global muon"};
73+
Configurable<float> maxChi2GL{"maxChi2GL", 50.f, "max. chi2 for global muon"};
7474
Configurable<bool> refitGlobalMuon{"refitGlobalMuon", true, "flag to refit global muon"};
75-
Configurable<bool> applyDEtaDPhi{"cfgApplyDEtaDPhi", false, "flag to apply deta-dphi elliptic cut"};
76-
Configurable<float> minDEta{"minDEta", 0.1, "min deta between MFT-MCH-MID and its attached MID-MCH at PV"};
77-
Configurable<float> minDPhi{"minDPhi", 0.1, "min dphi between MFT-MCH-MID and its attached MID-MCH at PV"};
7875

7976
HistogramRegistry fRegistry{"fRegistry"};
8077
static constexpr std::string_view muon_types[5] = {"MFTMCHMID/", "MFTMCHMIDOtherMatch/", "MFTMCH/", "MCHMID/", "MCH/"};
@@ -193,89 +190,16 @@ struct FwdTrackPropagation {
193190
return true;
194191
}
195192

196-
template <typename TFwdTracks, typename TMFTTracks, typename TCollision, typename TTarget, typename TCandidates>
197-
bool isBestMatch(TCollision const& collision, TTarget const& target, TCandidates const& candidates)
193+
template <typename TCollision, typename TFwdTrack, typename TFwdTracks, typename TMFTTracks>
194+
void fillFwdTrackTable(TCollision const& collision, TFwdTrack fwdtrack, TFwdTracks const&, TMFTTracks const&, const bool isAmbiguous)
198195
{
199-
std::map<int64_t, float> map_chi2MFTMCH;
200-
for (const auto& matchedtrack : candidates) { // MFT-MCH-MID or MFT-MCH
201-
if (matchedtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
202-
continue;
203-
}
204-
o2::dataformats::GlobalFwdTrack propmuonAtPV = propagateMuon(matchedtrack, collision, propagationPoint::kToVertex);
205-
float eta = propmuonAtPV.getEta();
206-
float phi = propmuonAtPV.getPhi();
207-
if (refitGlobalMuon) {
208-
const auto& mfttrack = matchedtrack.template matchMFTTrack_as<TMFTTracks>();
209-
eta = mfttrack.eta();
210-
phi = mfttrack.phi();
211-
}
212-
o2::math_utils::bringTo02Pi(phi);
213-
if (eta < minEtaGL || maxEtaGL < eta) {
214-
continue;
215-
}
216-
217-
const auto& mchtrack = matchedtrack.template matchMCHTrack_as<TFwdTracks>(); // MCH-MID
218-
o2::dataformats::GlobalFwdTrack propmuonAtPV_Matched = propagateMuon(mchtrack, collision, propagationPoint::kToVertex);
219-
float etaMatchedMCHMID = propmuonAtPV_Matched.getEta();
220-
float phiMatchedMCHMID = propmuonAtPV_Matched.getPhi();
221-
o2::math_utils::bringTo02Pi(phiMatchedMCHMID);
222-
223-
float deta = etaMatchedMCHMID - eta;
224-
float dphi = phiMatchedMCHMID - phi;
225-
o2::math_utils::bringToPMPi(dphi);
226-
if (applyDEtaDPhi && std::sqrt(std::pow(deta / minDEta, 2) + std::pow(dphi / minDPhi, 2)) > 1.f) {
227-
continue;
228-
}
229-
230-
if (matchedtrack.chi2() < 0.f || maxChi2GL < matchedtrack.chi2()) {
231-
continue;
232-
}
233-
234-
float rAtAbsorberEnd = matchedtrack.rAtAbsorberEnd(); // this works only for GlobalMuonTrack
235-
if (rAtAbsorberEnd < minRabsGL || maxRabs < rAtAbsorberEnd) {
236-
continue;
237-
}
238-
o2::dataformats::GlobalFwdTrack propmuonAtDCA = propagateMuon(matchedtrack, collision, propagationPoint::kToDCA);
239-
float dcaX = propmuonAtDCA.getX() - collision.posX();
240-
float dcaY = propmuonAtDCA.getY() - collision.posY();
241-
float dcaXY = std::sqrt(dcaX * dcaX + dcaY * dcaY);
242-
if (maxDCAxy < dcaXY) {
243-
continue;
244-
}
245-
246-
o2::dataformats::GlobalFwdTrack propmuonAtDCA_Matched = propagateMuon(mchtrack, collision, propagationPoint::kToDCA);
247-
float dcaX_Matched = propmuonAtDCA_Matched.getX() - collision.posX();
248-
float dcaY_Matched = propmuonAtDCA_Matched.getY() - collision.posY();
249-
float dcaXY_Matched = std::sqrt(dcaX_Matched * dcaX_Matched + dcaY_Matched * dcaY_Matched);
250-
float pDCA = mchtrack.p() * dcaXY_Matched;
251-
252-
if (rAtAbsorberEnd < midRabs ? pDCA > maxPDCAforSmallR : pDCA > maxPDCAforLargeR) {
253-
continue;
254-
}
255-
256-
map_chi2MFTMCH[matchedtrack.globalIndex()] = matchedtrack.chi2MatchMCHMFT();
257-
}
258-
if (map_chi2MFTMCH.begin()->first != target.globalIndex()) { // search for minimum matching chi2
259-
map_chi2MFTMCH.clear();
260-
return false;
261-
}
262-
map_chi2MFTMCH.clear();
196+
if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && (fwdtrack.chi2MatchMCHMFT() > maxMatchingChi2MCHMFT || fwdtrack.chi2() > maxChi2GL)) {
197+
return;
198+
} // Users have to decide the best match between MFT and MCH-MID at analysis level. The same global muon is repeatedly stored.
263199

264-
if (target.chi2MatchMCHMFT() > maxMatchingChi2MCHMFT) {
265-
return false;
200+
if (fwdtrack.chi2MatchMCHMID() < 0.f) { // this should never happen. only for protection.
201+
return;
266202
}
267-
return true;
268-
}
269-
270-
template <typename TCollision, typename TFwdTrack, typename TFwdTracks, typename TMFTTracks>
271-
void fillFwdTrackTable(TCollision const& collision, TFwdTrack fwdtrack, TFwdTracks const& fwdtracks, TMFTTracks const&, const bool isAmbiguous)
272-
{
273-
if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
274-
const auto& matchedGlobalTracks = fwdtracks.sliceBy(perMFTTrack, fwdtrack.matchMFTTrackId()); // MFT-MCH-MID or MFT-MCH
275-
if (!isBestMatch<TFwdTracks, TMFTTracks>(collision, fwdtrack, matchedGlobalTracks)) {
276-
return;
277-
}
278-
} // find the best match between MFT and MCH-MID
279203

280204
o2::dataformats::GlobalFwdTrack propmuonAtPV = propagateMuon(fwdtrack, collision, propagationPoint::kToVertex);
281205
o2::dataformats::GlobalFwdTrack propmuonAtDCA = propagateMuon(fwdtrack, collision, propagationPoint::kToDCA);

0 commit comments

Comments
 (0)