29 return StatusCode::SUCCESS;
48 <<
endmsg << std::setw(30) <<
" Chi2/Ndof Cut " << failedChi2NDofCutFraction <<
endmsg
49 << std::setw(30) <<
" RPC AveMin Time Cut " << failedRPCAveMinTimeCutFraction <<
endmsg << std::setw(30)
50 <<
" RPC AveMax Time Cut " << failedRPCAveMaxTimeCutFraction <<
endmsg << std::setw(30)
51 <<
" RPC Spread Time Cut " << failedRPCSpreadTimeCutFraction <<
endmsg << std::setw(30)
52 <<
" Single station Cut " << failedSingleStationsCutFraction <<
endmsg << std::setw(30)
53 <<
" Two station Cut " << failedTwoStationsCutFraction <<
endmsg << std::setw(30)
54 <<
" Two station Max MDT hole Cut " << failedTwoStationsMaxMDTHoleCutFraction <<
endmsg << std::setw(30)
55 <<
" Two station Max hole Cut " << failedTwoStationsMaxHoleCutFraction <<
endmsg << std::setw(30)
56 <<
" Two station good station Cut " << failedTwoStationsGoodStationCutFraction <<
endmsg << std::setw(30)
57 <<
" Trigger station cut " << failedTriggerStationCutFraction <<
endmsg << std::setw(30)
58 <<
" MDT hole Cut " << failedMaxMDTHoleCutFraction <<
endmsg << std::setw(30)
59 <<
" Max hole Cut " << failedMaxHoleCutFraction);
62 return StatusCode::SUCCESS;
82 if (!fq)
return false;
86 ATH_MSG_DEBUG(
" Track discarded: too large chi2 " << reducedChi2);
92 double aveRpcTime = 0.;
94 double maxTime = -1e9;
99 for (; tsit != tsit_end; ++tsit) {
115 if (time < minTime) minTime = time;
116 if (time > maxTime) maxTime = time;
122 double timeMinCut = -2.;
123 double timeMaxCut = 20.;
124 ATH_MSG_VERBOSE(
" ave RPC time " << aveRpcTime <<
" min " << minTime <<
" max " << maxTime);
125 if (aveRpcTime < timeMinCut) {
130 if (aveRpcTime > timeMaxCut) {
135 if (maxTime > timeMaxCut && minTime < timeMinCut) {
143 unsigned int mdtHoles = 0;
144 unsigned int mdtOutliers = 0;
145 unsigned int nholes = 0;
146 std::map<MuonStationIndex::StIndex, StationData> stations;
151 if (
summary->muonTrackSummary())
152 muonSummary = *
summary->muonTrackSummary();
155 if (
summary->muonTrackSummary()) muonSummary = *
summary->muonTrackSummary();
163 std::vector<Trk::MuonTrackSummary::ChamberHitSummary>::const_iterator chit = muonSummary.
chamberHitSummary().begin();
164 std::vector<Trk::MuonTrackSummary::ChamberHitSummary>::const_iterator chit_end = muonSummary.
chamberHitSummary().end();
165 for (; chit != chit_end; ++chit) {
176 bool useHoles =
false;
184 if (useHoles) stData.
netaHoles += chit->nholes();
189 mdtHoles += chit->nholes();
190 nholes += chit->nholes();
191 mdtOutliers += chit->noutliers();
196 }
else if (isCsc || issTgc || isMM) {
199 stData.
netaHits += chit->etaProjection().nhits;
201 stData.
netaHoles += chit->etaProjection().nholes;
202 stData.
nphiHoles += chit->phiProjection().nholes;
203 nholes += chit->nholes();
205 stData.
nphiHits += chit->phiProjection().nhits;
206 stData.
isCsc = isCsc;
207 stData.
isNSW = issTgc || isMM;
209 }
else if (isRpc || isTgc) {
212 stData.
netaTrigHits += chit->etaProjection().nhits > 0 ? 1 : 0;
213 stData.
nphiTrigHits += chit->phiProjection().nhits > 0 ? 1 : 0;
218 nholes += chit->etaProjection().nholes;
222 nholes += chit->phiProjection().nholes;
231 unsigned int nGoodStations = 0;
232 unsigned int nstations = 0;
233 unsigned int nTwoMlStations = 0;
234 unsigned int nGoodCscStations = 0;
235 unsigned int nGoodTriggerStations = 0;
239 for (; sit != sit_end; ++sit) {
254 <<
" ratio " << holeHitRatio <<
" cut "
278 ATH_MSG_DEBUG(
" good stations " << nGoodStations <<
" MDT stations with two ml " << nTwoMlStations <<
" MDT holes " << mdtHoles
279 <<
" outliers " << mdtOutliers <<
" good CSC stations " << nGoodCscStations <<
" trigger stations "
280 << nGoodTriggerStations);
283 ATH_MSG_DEBUG(
" Track discarded: too few stations " << stations.size());
289 if (stations.size() == 1) {
298 << nExpectedTriggerStations <<
" holes " << stData.
netaHoles <<
" cut "
303 if (nTwoMlStations == 0) ok =
false;
309 if (stData.
netaHoles > maxHolesSingle) ok =
false;
312 ATH_MSG_DEBUG(
" Track discarded: failed single track cuts ");
318 if (nGoodStations < 2) {
319 ATH_MSG_DEBUG(
" Track discarded: too few good stations " << nGoodStations);
328 ATH_MSG_DEBUG(
" Track discarded: good stations " << nGoodStations <<
" and " << mdtHoles <<
" mdt holes ");
333 ATH_MSG_DEBUG(
" Track discarded: good stations " << nGoodStations <<
" and " << nholes <<
" holes ");
337 if (nTwoMlStations == 0 && nGoodCscStations == 0) {
339 << nGoodStations <<
" but no MDT station with hits in two multilayers nor good CSC station ");
344 ATH_MSG_DEBUG(
" Track discarded: stations " << nstations <<
" but no trigger hits nor good CSC station ");
350 ATH_MSG_DEBUG(
" Track discarded: good stations " << nGoodStations <<
" and " << mdtHoles <<
" mdt holes ");
355 ATH_MSG_DEBUG(
" Track discarded: good stations " << nGoodStations <<
" and " << nholes <<
" holes ");