ATLAS Offline Software
Loading...
Searching...
No Matches
MuonDressingTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "MuonDressingTool.h"
6
7#include "TrkTrack/Track.h"
10
11using namespace Muon::MuonStationIndex;
12
13namespace MuonCombined {
15 ATH_CHECK(m_hitSummaryTool.retrieve());
16 ATH_CHECK(m_idHelperSvc.retrieve());
17 return StatusCode::SUCCESS;
18 }
19
20 void MuonDressingTool::addMuonHitSummary(xAOD::Muon& muon, const Trk::TrackSummary* trackSummary) const {
21
22
23 if (!trackSummary && (muon.muonType() != xAOD::Muon::MuonType::SegmentTagged &&
24 muon.muonType() != xAOD::Muon::MuonType::CaloTagged ) ) {
25 // get link to track particle
26 const xAOD::TrackParticle* primTrk = muon.primaryTrackParticle();
27 if (primTrk->track()) {
28 trackSummary = primTrk->track()->trackSummary();
29 }
30 }
31
32 uint8_t innerSmallHits{0}, innerLargeHits{0}, middleSmallHits{0}, middleLargeHits{0},
33 outerSmallHits{0}, outerLargeHits{0}, extendedSmallHits{0}, extendedLargeHits{0};
34
35 uint8_t innerSmallHoles{0}, innerLargeHoles{0}, middleSmallHoles{0}, middleLargeHoles{0},
36 outerSmallHoles{0}, outerLargeHoles{0}, extendedSmallHoles{0}, extendedLargeHoles{0};
37
38 auto incrementPrecSummary = [&](const Identifier chId, const uint8_t hits, const uint8_t holes) {
39 const ChIndex chIdx = m_idHelperSvc->chamberIndex(chId);
40 switch (toLayerIndex(chIdx)) {
42 (isSmall(chIdx) ? innerSmallHits : innerLargeHits) += hits;
43 (isSmall(chIdx) ? innerSmallHoles : innerLargeHoles) += holes;
44 break;
46 (isSmall(chIdx) ? middleSmallHits : middleLargeHits) += hits;
47 (isSmall(chIdx) ? middleSmallHoles : middleLargeHoles) += holes;
48 break;
50 (isSmall(chIdx) ? outerSmallHits : outerLargeHits) += hits;
51 (isSmall(chIdx) ? outerSmallHoles : outerLargeHoles) += holes;
52 break;
54 (isSmall(chIdx) ? extendedSmallHits : extendedLargeHits) += hits;
55 (isSmall(chIdx) ? extendedSmallHoles : extendedLargeHoles) += holes;
56 break;
58 extendedSmallHits += hits;
59 extendedSmallHoles += holes;
60 break;
63 ATH_MSG_WARNING("Unknown ChamberIndex " << chName(chIdx));
64 break;
65 }
66 };
67
68
69
70 uint8_t phiLayer1Hits{0}, phiLayer2Hits{0}, phiLayer3Hits{0}, phiLayer4Hits{0};
71 uint8_t etaLayer1Hits{0}, etaLayer2Hits{0}, etaLayer3Hits{0}, etaLayer4Hits{0};
72
73 uint8_t phiLayer1Holes{0}, phiLayer2Holes{0}, phiLayer3Holes{0}, phiLayer4Holes{0};
74 uint8_t etaLayer1Holes{0}, etaLayer2Holes{0}, etaLayer3Holes{0}, etaLayer4Holes{0};
75
76 uint8_t phiLayer1RPCHits{0}, phiLayer2RPCHits{0}, phiLayer3RPCHits{0}, phiLayer4RPCHits{0};
77 uint8_t etaLayer1RPCHits{0}, etaLayer2RPCHits{0}, etaLayer3RPCHits{0}, etaLayer4RPCHits{0};
78
79 uint8_t phiLayer1RPCHoles{0}, phiLayer2RPCHoles{0}, phiLayer3RPCHoles{0}, phiLayer4RPCHoles{0};
80 uint8_t etaLayer1RPCHoles{0}, etaLayer2RPCHoles{0}, etaLayer3RPCHoles{0}, etaLayer4RPCHoles{0};
81
82 uint8_t phiLayer1TGCHits{0}, phiLayer2TGCHits{0}, phiLayer3TGCHits{0}, phiLayer4TGCHits{0};
83 uint8_t etaLayer1TGCHits{0}, etaLayer2TGCHits{0}, etaLayer3TGCHits{0}, etaLayer4TGCHits{0};
84
85 uint8_t phiLayer1TGCHoles{0}, phiLayer2TGCHoles{0}, phiLayer3TGCHoles{0}, phiLayer4TGCHoles{0};
86 uint8_t etaLayer1TGCHoles{0}, etaLayer2TGCHoles{0}, etaLayer3TGCHoles{0}, etaLayer4TGCHoles{0};
87
88 uint8_t phiLayer1STGCHits{0}, phiLayer2STGCHits{0};
89 uint8_t etaLayer1STGCHits{0}, etaLayer2STGCHits{0};
90
91 uint8_t phiLayer1STGCHoles{0}, phiLayer2STGCHoles{0};
92 uint8_t etaLayer1STGCHoles{0}, etaLayer2STGCHoles{0};
93
94 auto incrementTrigSummary = [&](const Identifier& chId,
95 const uint8_t etaHits, const uint8_t etaHoles,
96 const uint8_t phiHits, const uint8_t phiHoles) {
97 const PhiIndex phiIndex = m_idHelperSvc->phiIndex(chId);
98 switch (phiIndex) {
99 case PhiIndex::BI1:
100 case PhiIndex::BM1:
101 case PhiIndex::T4:
102 case PhiIndex::CSC:
103 case PhiIndex::STGC1:
104 phiLayer1Hits += phiHits; phiLayer1Holes += phiHoles;
105 etaLayer1Hits += etaHits; etaLayer1Holes += etaHoles;
106 break;
107 case PhiIndex::BI2:
108 case PhiIndex::BM2:
109 case PhiIndex::T1:
110 case PhiIndex::STGC2:
111 phiLayer2Hits += phiHits; phiLayer2Holes += phiHoles;
112 etaLayer2Hits += etaHits; etaLayer2Holes += etaHoles;
113 break;
114 case PhiIndex::BO1:
115 case PhiIndex::T2:
116 phiLayer3Hits += phiHits; phiLayer3Holes += phiHoles;
117 etaLayer3Hits += etaHits; etaLayer3Holes += etaHoles;
118 break;
119 case PhiIndex::BO2:
120 case PhiIndex::T3:
121 phiLayer4Hits += phiHits; phiLayer4Holes += phiHoles;
122 etaLayer4Hits += etaHits; etaLayer4Holes += etaHoles;
123 break;
124
127 ATH_MSG_WARNING("Unknown ChamberIndex" << Muon::MuonStationIndex::phiName(phiIndex));
128 break;
129 }
131 switch (phiIndex) {
134 case PhiIndex::CSC:
135 ATH_MSG_WARNING("Unknown ChamberIndex" << Muon::MuonStationIndex::phiName(phiIndex));
136 break;
137 case PhiIndex::BI1:
138 case PhiIndex::BI2:
139 ATH_MSG_VERBOSE("BI chambers "<<m_idHelperSvc->toString(chId)<<" are not part of the summary");
140 break;
141 case PhiIndex::BM1:
142 phiLayer1RPCHits += phiHits; etaLayer1RPCHits += etaHits;
143 phiLayer1RPCHoles += phiHoles; etaLayer1RPCHoles += etaHoles;
144 break;
145 case PhiIndex::BM2:
146 phiLayer2RPCHits += phiHits; etaLayer2RPCHits += etaHits;
147 phiLayer2RPCHoles += phiHoles; etaLayer2RPCHoles += etaHoles;
148 break;
149 case PhiIndex::BO1:
150 phiLayer3RPCHits += phiHits; etaLayer3RPCHits += etaHits;
151 phiLayer3RPCHoles += phiHoles; etaLayer3RPCHoles += etaHoles;
152 break;
153 case PhiIndex::BO2:
154 phiLayer4RPCHits += phiHits; etaLayer4RPCHits += etaHits;
155 phiLayer4RPCHoles += phiHoles; etaLayer4RPCHoles += etaHoles;
156 break;
157 case PhiIndex::T4:
158 phiLayer1TGCHits += phiHits; etaLayer1TGCHits += etaHits;
159 phiLayer1TGCHoles += phiHoles; etaLayer1TGCHoles += etaHoles;
160 break;
161 case PhiIndex::T1:
162 phiLayer2TGCHits += phiHits; etaLayer2TGCHits += etaHits;
163 phiLayer2TGCHoles += phiHoles; etaLayer2TGCHoles += etaHoles;
164 break;
165 case PhiIndex::T2:
166 phiLayer3TGCHits += phiHits; etaLayer3TGCHits += etaHits;
167 phiLayer3TGCHoles += phiHoles; etaLayer3TGCHoles += etaHoles;
168 break;
169 case PhiIndex::T3:
170 phiLayer4TGCHits += phiHits; etaLayer4TGCHits += etaHits;
171 phiLayer4TGCHoles += phiHoles; etaLayer4TGCHoles += etaHoles;
172 break;
173 case PhiIndex::STGC1:
174 phiLayer1STGCHits += phiHits; etaLayer1STGCHits += etaHits;
175 phiLayer1STGCHoles += phiHoles; etaLayer1STGCHoles += etaHoles;
176 break;
177 case PhiIndex::STGC2:
178 phiLayer2STGCHits += phiHits; etaLayer2STGCHits += etaHits;
179 phiLayer2STGCHoles += phiHoles; etaLayer2STGCHoles += etaHoles;
180 break;
181 }
182 };
183
184 uint8_t innerCloseHits{0}, middleCloseHits{0}, outerCloseHits{0}, extendedCloseHits{0};
185 uint8_t innerOutBoundsHits{0}, middleOutBoundsHits{0}, outerOutBoundsHits{0}, extendedOutBoundsHits{0};
186
187 uint8_t combinedTrackOutBoundsHits{0};
188
189 uint8_t numberOfPrecisionLayers{0}, numberOfPrecisionHoleLayers{0}, numberOfGoodPrecisionLayers{0};
190 uint8_t numberOfPhiLayers{0}, numberOfPhiHoleLayers{0};
191
192 uint8_t numberOfTriggerEtaLayers{0}, numberOfTriggerEtaHoleLayers{0};
193
194
195 uint8_t mainSector{0}, secondSector{0}, isEndcap{0}, isSmall{0};
196
197 uint8_t cscEtaHits{0}, cscUnspoiledEtaHits{0}, MMHits{0}, MMHoles{0};
198
199
200
201 if (trackSummary) {
202 Muon::IMuonHitSummaryTool::CompactSummary summary = m_hitSummaryTool->summary(*trackSummary);
203 mainSector = secondSector = summary.mainSector;
204
205 for (auto sec : summary.sectors) {
206 if (sec != summary.mainSector) {
207 secondSector = sec;
208 }
209 }
210
211 numberOfPrecisionLayers = summary.nprecisionLayers;
212 numberOfPrecisionHoleLayers = summary.nprecisionHoleLayers;
213 numberOfPhiLayers = summary.nphiLayers;
214 numberOfPhiHoleLayers = summary.nphiHoleLayers;
215 numberOfTriggerEtaLayers = summary.ntrigEtaLayers;
216 numberOfTriggerEtaHoleLayers = summary.ntrigEtaHoleLayers;
217 numberOfGoodPrecisionLayers = summary.nprecisionGoodLayers;
218
219 isEndcap = (summary.isEndcap);
220 isSmall = (summary.isSmall);
221
222 for (auto layer : summary.stationLayers) {
223 combinedTrackOutBoundsHits += layer.second.noutBoundsHits;
224 switch (layer.first) {
225 case StIndex::BI:
226 case StIndex::EI:
227 innerCloseHits += layer.second.nprecisionCloseHits;
228 break;
229 case StIndex::BM:
230 case StIndex::EM:
231 middleCloseHits += layer.second.nprecisionCloseHits;
232 break;
233 case StIndex::BO:
234 case StIndex::EO:
235 outerCloseHits += layer.second.nprecisionCloseHits;
236 break;
237 case StIndex::BE:
238 case StIndex::EE:
239 extendedCloseHits += layer.second.nprecisionCloseHits;
240 break;
241 case StIndex::StUnknown:
242 case StIndex::StIndexMax:
243 ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" Unexpected st index");
244 break;
245 }
246 }
247
248 // get out-of-bounds from ME track, shouldn't be any on combined track anyway
249 const xAOD::TrackParticle* MStrk = muon.trackParticle(xAOD::Muon::TrackParticleType::MuonSpectrometerTrackParticle);
250 if (MStrk && MStrk->track() && MStrk->track()->trackSummary()) {
251 for (const auto& layer : m_hitSummaryTool->summary(*MStrk->track()->trackSummary()).stationLayers) {
252 switch (layer.first) {
253 case StIndex::BI:
254 case StIndex::EI:
255 innerOutBoundsHits += layer.second.noutBoundsHits;
256 break;
257 case StIndex::EM:
258 case StIndex::BM:
259 middleOutBoundsHits += layer.second.noutBoundsHits;
260 break;
261 case StIndex::EO:
262 case StIndex::BO:
263 outerOutBoundsHits += layer.second.noutBoundsHits;
264 break;
265 case StIndex::BE:
266 case StIndex::EE:
267 extendedOutBoundsHits += layer.second.noutBoundsHits;
268 break;
269 case StIndex::StUnknown:
270 case StIndex::StIndexMax:
271 ATH_MSG_WARNING("Station index should not be unknown or max");
272 break;
273 }
274 }
275 }
276
277 if (trackSummary->muonTrackSummary()) {
278 const Trk::MuonTrackSummary& mts = *trackSummary->muonTrackSummary();
279 // loop over chambers
281 switch (m_idHelperSvc->technologyIndex(summary.chamberId())) {
284 ATH_MSG_WARNING("Unkown technology");
285 break;
287 incrementPrecSummary(summary.chamberId(), summary.nhits(), summary.nholes());
288 break;
289 } case TechnologyIndex::CSC:{
290 incrementPrecSummary(summary.chamberId(), summary.netaHits(), summary.etaProjection().nholes);
291 cscEtaHits += summary.etaProjection().nhits;
292 cscUnspoiledEtaHits += summary.etaProjection().ngoodHits;
293 break;
294 } case TechnologyIndex::MM:{
295 incrementPrecSummary(summary.chamberId(), summary.nhits(), summary.nholes());
296 MMHits += summary.nhits();
297 MMHoles += summary.nholes();
298 break;
299 } case TechnologyIndex::STGC:{
300 incrementPrecSummary(summary.chamberId(), summary.netaHits(), summary.etaProjection().nholes);
301 incrementTrigSummary(summary.chamberId(),
302 summary.netaHits(), summary.etaProjection().nholes,
303 summary.nphiHits(), summary.phiProjection().nholes);
304 break;
307 incrementTrigSummary(summary.chamberId(),
308 summary.netaHits(), summary.etaProjection().nholes,
309 summary.nphiHits(), summary.phiProjection().nholes);
310 break;
311 }
312 }
313 }
314 }
315 }
316
317 muon.setSummaryValue(numberOfPrecisionLayers, xAOD::numberOfPrecisionLayers);
318 muon.setSummaryValue(numberOfPrecisionHoleLayers, xAOD::numberOfPrecisionHoleLayers);
319 muon.setSummaryValue(numberOfPhiLayers, xAOD::numberOfPhiLayers);
320 muon.setSummaryValue(numberOfPhiHoleLayers, xAOD::numberOfPhiHoleLayers);
321 muon.setSummaryValue(numberOfTriggerEtaLayers, xAOD::numberOfTriggerEtaLayers);
322 muon.setSummaryValue(numberOfTriggerEtaHoleLayers, xAOD::numberOfTriggerEtaHoleLayers);
323 muon.setSummaryValue(numberOfGoodPrecisionLayers, xAOD::numberOfGoodPrecisionLayers);
324
325 muon.setSummaryValue(mainSector, xAOD::primarySector);
326 muon.setSummaryValue(secondSector, xAOD::secondarySector);
327 muon.setSummaryValue(innerSmallHits, xAOD::innerSmallHits);
328 muon.setSummaryValue(innerLargeHits, xAOD::innerLargeHits);
329 muon.setSummaryValue(middleSmallHits, xAOD::middleSmallHits);
330 muon.setSummaryValue(middleLargeHits, xAOD::middleLargeHits);
331 muon.setSummaryValue(outerSmallHits, xAOD::outerSmallHits);
332 muon.setSummaryValue(outerLargeHits, xAOD::outerLargeHits);
333 muon.setSummaryValue(extendedSmallHits, xAOD::extendedSmallHits);
334 muon.setSummaryValue(extendedLargeHits, xAOD::extendedLargeHits);
335
336 muon.setSummaryValue(innerSmallHoles, xAOD::innerSmallHoles);
337 muon.setSummaryValue(innerLargeHoles, xAOD::innerLargeHoles);
338 muon.setSummaryValue(middleSmallHoles, xAOD::middleSmallHoles);
339 muon.setSummaryValue(middleLargeHoles, xAOD::middleLargeHoles);
340 muon.setSummaryValue(outerSmallHoles, xAOD::outerSmallHoles);
341 muon.setSummaryValue(outerLargeHoles, xAOD::outerLargeHoles);
342 muon.setSummaryValue(extendedSmallHoles, xAOD::extendedSmallHoles);
343 muon.setSummaryValue(extendedLargeHoles, xAOD::extendedLargeHoles);
344
345 muon.setSummaryValue(phiLayer1Hits, xAOD::phiLayer1Hits);
346 muon.setSummaryValue(phiLayer2Hits, xAOD::phiLayer2Hits);
347 muon.setSummaryValue(phiLayer3Hits, xAOD::phiLayer3Hits);
348 muon.setSummaryValue(phiLayer4Hits, xAOD::phiLayer4Hits);
349
350 muon.setSummaryValue(etaLayer1Hits, xAOD::etaLayer1Hits);
351 muon.setSummaryValue(etaLayer2Hits, xAOD::etaLayer2Hits);
352 muon.setSummaryValue(etaLayer3Hits, xAOD::etaLayer3Hits);
353 muon.setSummaryValue(etaLayer4Hits, xAOD::etaLayer4Hits);
354
355 muon.setSummaryValue(phiLayer1Holes, xAOD::phiLayer1Holes);
356 muon.setSummaryValue(phiLayer2Holes, xAOD::phiLayer2Holes);
357 muon.setSummaryValue(phiLayer3Holes, xAOD::phiLayer3Holes);
358 muon.setSummaryValue(phiLayer4Holes, xAOD::phiLayer4Holes);
359
360 muon.setSummaryValue(etaLayer1Holes, xAOD::etaLayer1Holes);
361 muon.setSummaryValue(etaLayer2Holes, xAOD::etaLayer2Holes);
362 muon.setSummaryValue(etaLayer3Holes, xAOD::etaLayer3Holes);
363 muon.setSummaryValue(etaLayer4Holes, xAOD::etaLayer4Holes);
364
365 muon.setSummaryValue(phiLayer1RPCHits, xAOD::phiLayer1RPCHits);
366 muon.setSummaryValue(phiLayer2RPCHits, xAOD::phiLayer2RPCHits);
367 muon.setSummaryValue(phiLayer3RPCHits, xAOD::phiLayer3RPCHits);
368 muon.setSummaryValue(phiLayer4RPCHits, xAOD::phiLayer4RPCHits);
369
370 muon.setSummaryValue(etaLayer1RPCHits, xAOD::etaLayer1RPCHits);
371 muon.setSummaryValue(etaLayer2RPCHits, xAOD::etaLayer2RPCHits);
372 muon.setSummaryValue(etaLayer3RPCHits, xAOD::etaLayer3RPCHits);
373 muon.setSummaryValue(etaLayer4RPCHits, xAOD::etaLayer4RPCHits);
374
375 muon.setSummaryValue(phiLayer1RPCHoles, xAOD::phiLayer1RPCHoles);
376 muon.setSummaryValue(phiLayer2RPCHoles, xAOD::phiLayer2RPCHoles);
377 muon.setSummaryValue(phiLayer3RPCHoles, xAOD::phiLayer3RPCHoles);
378 muon.setSummaryValue(phiLayer4RPCHoles, xAOD::phiLayer4RPCHoles);
379
380 muon.setSummaryValue(etaLayer1RPCHoles, xAOD::etaLayer1RPCHoles);
381 muon.setSummaryValue(etaLayer2RPCHoles, xAOD::etaLayer2RPCHoles);
382 muon.setSummaryValue(etaLayer3RPCHoles, xAOD::etaLayer3RPCHoles);
383 muon.setSummaryValue(etaLayer4RPCHoles, xAOD::etaLayer4RPCHoles);
384
385 muon.setSummaryValue(phiLayer1TGCHits, xAOD::phiLayer1TGCHits);
386 muon.setSummaryValue(phiLayer2TGCHits, xAOD::phiLayer2TGCHits);
387 muon.setSummaryValue(phiLayer3TGCHits, xAOD::phiLayer3TGCHits);
388 muon.setSummaryValue(phiLayer4TGCHits, xAOD::phiLayer4TGCHits);
389
390 muon.setSummaryValue(etaLayer1TGCHits, xAOD::etaLayer1TGCHits);
391 muon.setSummaryValue(etaLayer2TGCHits, xAOD::etaLayer2TGCHits);
392 muon.setSummaryValue(etaLayer3TGCHits, xAOD::etaLayer3TGCHits);
393 muon.setSummaryValue(etaLayer4TGCHits, xAOD::etaLayer4TGCHits);
394
395 muon.setSummaryValue(phiLayer1TGCHoles, xAOD::phiLayer1TGCHoles);
396 muon.setSummaryValue(phiLayer2TGCHoles, xAOD::phiLayer2TGCHoles);
397 muon.setSummaryValue(phiLayer3TGCHoles, xAOD::phiLayer3TGCHoles);
398 muon.setSummaryValue(phiLayer4TGCHoles, xAOD::phiLayer4TGCHoles);
399
400 muon.setSummaryValue(etaLayer1TGCHoles, xAOD::etaLayer1TGCHoles);
401 muon.setSummaryValue(etaLayer2TGCHoles, xAOD::etaLayer2TGCHoles);
402 muon.setSummaryValue(etaLayer3TGCHoles, xAOD::etaLayer3TGCHoles);
403 muon.setSummaryValue(etaLayer4TGCHoles, xAOD::etaLayer4TGCHoles);
404
405 // New Small Wheel
406 // STGC
407 muon.setSummaryValue(phiLayer1STGCHits, xAOD::phiLayer1STGCHits);
408 muon.setSummaryValue(phiLayer2STGCHits, xAOD::phiLayer2STGCHits);
409
410 muon.setSummaryValue(etaLayer1STGCHits, xAOD::etaLayer1STGCHits);
411 muon.setSummaryValue(etaLayer2STGCHits, xAOD::etaLayer2STGCHits);
412
413 muon.setSummaryValue(phiLayer1STGCHoles, xAOD::phiLayer1STGCHoles);
414 muon.setSummaryValue(phiLayer2STGCHoles, xAOD::phiLayer2STGCHoles);
415
416 muon.setSummaryValue(etaLayer1STGCHoles, xAOD::etaLayer1STGCHoles);
417 muon.setSummaryValue(etaLayer2STGCHoles, xAOD::etaLayer2STGCHoles);
418
419 // MM
420 muon.setSummaryValue(MMHits, xAOD::MMHits);
421 muon.setSummaryValue(MMHoles, xAOD::MMHoles);
422
423 muon.setSummaryValue(innerCloseHits, xAOD::innerClosePrecisionHits);
424 muon.setSummaryValue(middleCloseHits, xAOD::middleClosePrecisionHits);
425 muon.setSummaryValue(outerCloseHits, xAOD::outerClosePrecisionHits);
426 muon.setSummaryValue(extendedCloseHits, xAOD::extendedClosePrecisionHits);
427
428 muon.setSummaryValue(innerOutBoundsHits, xAOD::innerOutBoundsPrecisionHits);
429 muon.setSummaryValue(middleOutBoundsHits, xAOD::middleOutBoundsPrecisionHits);
430 muon.setSummaryValue(outerOutBoundsHits, xAOD::outerOutBoundsPrecisionHits);
431 muon.setSummaryValue(extendedOutBoundsHits, xAOD::extendedOutBoundsPrecisionHits);
432
433 muon.setSummaryValue(combinedTrackOutBoundsHits, xAOD::combinedTrackOutBoundsPrecisionHits);
434
435 muon.setSummaryValue(isEndcap, xAOD::isEndcapGoodLayers);
436 muon.setSummaryValue(isSmall, xAOD::isSmallGoodSectors);
437
438 muon.setSummaryValue(cscEtaHits, xAOD::cscEtaHits);
439 muon.setSummaryValue(cscUnspoiledEtaHits, xAOD::cscUnspoiledEtaHits);
440 }
441
442} // namespace MuonCombined
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
void addMuonHitSummary(xAOD::Muon &muon, const Trk::TrackSummary *summary=0) const override
ToolHandle< Muon::IMuonHitSummaryTool > m_hitSummaryTool
Detailed track summary for the muon system Give access to hit counts per chamber.
const std::vector< ChamberHitSummary > & chamberHitSummary() const
access to the vector of chamber hit summaries on the track
A summary of the information contained by a track.
const MuonTrackSummary * muonTrackSummary() const
returns a pointer to the MuonTrackSummary if available
const Trk::TrackSummary * trackSummary() const
Returns a pointer to the const Trk::TrackSummary owned by this const track (could be nullptr).
const Trk::Track * track() const
Returns a pointer (which can be NULL) to the Trk::Track which was used to make this TrackParticle.
The MuonTagToSegMap is an auxillary construct that links the MuonSegments associated with a combined ...
PhiIndex
enum to classify the different phi layers in the muon spectrometer
bool isSmall(const ChIndex index)
Returns true if the chamber index is in a small sector.
const std::string & chName(ChIndex index)
convert ChIndex into a string
const std::string & phiName(PhiIndex index)
convert PhiIndex into a string
LayerIndex toLayerIndex(ChIndex index)
convert ChIndex into LayerIndex
ChIndex
enum to classify the different chamber layers in the muon spectrometer
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Muon_v1 Muon
Reference the current persistent version:
@ numberOfPrecisionLayers
layers with at least 3 hits [unit8_t].
@ numberOfTriggerEtaHoleLayers
layers with trigger eta holes but no hits [unit8_t].
@ numberOfPhiHoleLayers
layers with trigger phi holes but no hits [unit8_t].
@ numberOfTriggerEtaLayers
layers with trigger eta hits [unit8_t].
@ numberOfPhiLayers
layers with a trigger phi hit [unit8_t].
@ numberOfPrecisionHoleLayers
layers with holes AND no hits [unit8_t].
@ numberOfGoodPrecisionLayers
layers with at least 3 hits that are not deweighted [uint8_t]
@ phiLayer3TGCHoles
number of phi holes in the third TGC trigger layer (T2)
@ phiLayer3Hits
number of phi hits in the third trigger layer (BOL1 ot T2)
@ middleSmallHoles
number of precision holes in the middle small layer
@ cscEtaHits
number of CSC eta clusters on the track
@ etaLayer4RPCHits
number of eta hits in the fourth RPC trigger layer (BOL2)
@ phiLayer2TGCHits
number of phi hits in the second TGC trigger layer (T1)
@ outerSmallHits
number of precision hits in the outer small layer
@ etaLayer2TGCHoles
number of eta holes in the second TGC trigger layer (T1)
@ phiLayer1RPCHoles
number of phi holes in the first RPC trigger layer (BML1)
@ phiLayer2Hits
number of phi hits in the second trigger layer (BML2 ot T1)
@ phiLayer1TGCHits
number of phi hits in the first TGC trigger layer (T4)
@ middleSmallHits
number of precision hits in the middle small layer
@ etaLayer1RPCHits
number of eta hits in the first RPC trigger layer (BML1)
@ phiLayer2TGCHoles
number of phi holes in the second TGC trigger layer (T1)
@ phiLayer1RPCHits
number of phi hits in the first RPC trigger layer (BML1)
@ phiLayer4Holes
number of phi holes in the fourth trigger layer (T3)
@ middleClosePrecisionHits
number of close precision hits in the middle layer
@ etaLayer4RPCHoles
number of eta holes in the fourth RPC trigger layer (BOL2)
@ innerClosePrecisionHits
number of close precision hits in the inner layer
@ phiLayer4RPCHits
number of phi hits in the fourth RPC trigger layer (BOL2)
@ phiLayer2RPCHoles
number of phi holes in the second RPC trigger layer (BML2)
@ etaLayer3RPCHoles
number of eta holes in the third RPC trigger layer (BOL1)
@ etaLayer1TGCHits
number of eta hits in the first TGC trigger layer (T4)
@ phiLayer1Holes
number of phi holes in the first trigger layer (BML1 ot T4)
@ etaLayer2STGCHoles
number of eta holes in the second STGC trigger layer (STGC2)
@ outerLargeHits
number of precision hits in the outer large layer
@ phiLayer4RPCHoles
number of phi holes in the fourth RPC trigger layer (BOL2)
@ etaLayer2RPCHoles
number of eta holes in the second RPC trigger layer (BML2)
@ etaLayer4TGCHoles
number of eta holes in the fourth TGC trigger layer (T3)
@ phiLayer3RPCHoles
number of phi holes in the third RPC trigger layer (BOL1)
@ etaLayer1STGCHoles
number of eta holes in the first STGC trigger layer (STGC1)
@ primarySector
primary sector crossed by the muon
@ etaLayer3Hits
number of eta hits in the third trigger layer (BOL1 ot T2)
@ phiLayer1STGCHoles
number of phi holes in the first STGC trigger layer (STGC1)
@ etaLayer3Holes
number of eta holes in the third trigger layer (BOL1 ot T2)
@ secondarySector
secondary sector crossed by the muon (set to the primary if the muon only passed one sector)
@ middleLargeHits
number of precision hits in the middle large layer
@ outerClosePrecisionHits
number of close precision hits in the outer layer
@ etaLayer4TGCHits
number of eta hits in the fourth TGC trigger layer (T3)
@ etaLayer1RPCHoles
number of eta holes in the first RPC trigger layer (BML1)
@ phiLayer4TGCHoles
number of phi holes in the fourth TGC trigger layer (T3)
@ innerOutBoundsPrecisionHits
number of out-of-bounds hits in the inner layer
@ etaLayer1Hits
number of eta hits in the first trigger layer (BML1 ot T4)
@ phiLayer2Holes
number of phi holes in the second trigger layer (BML2 ot T1)
@ etaLayer3RPCHits
number of eta hits in the third RPC trigger layer (BOL1)
@ phiLayer1Hits
number of phi hits in the first trigger layer (BML1 ot T4)
@ isSmallGoodSectors
if non-deweighted track chambers are small
@ phiLayer3Holes
number of phi holes in the third trigger layer (BOL1 ot T2)
@ etaLayer4Holes
number of eta holes in the fourth trigger layer (T3)
@ extendedSmallHits
number of precision hits in the extended small layer
@ etaLayer1TGCHoles
number of eta holes in the first TGC trigger layer (T4)
@ phiLayer1TGCHoles
number of phi holes in the first TGC trigger layer (T4)
@ extendedLargeHits
number of precision hits in the extended large layer
@ etaLayer3TGCHits
number of eta hits in the third TGC trigger layer (T2)
@ phiLayer1STGCHits
number of phi hits in the first STGC trigger layer (STGC1)
@ phiLayer4Hits
number of phi hits in the fourth trigger layer (T3)
@ outerLargeHoles
number of precision holes in the outer large layer
@ extendedSmallHoles
number of precision holes in the extended small layer
@ innerLargeHits
number of precision hits in the inner large layer
@ middleLargeHoles
number of precision holes in the middle large layer
@ middleOutBoundsPrecisionHits
number of out-of-bounds hits in the middle layer
@ etaLayer2STGCHits
number of eta hits in the second STGC trigger layer (STGC2)
@ innerLargeHoles
number of precision holes in the inner large layer
@ phiLayer2RPCHits
number of phi hits in the second RPC trigger layer (BML2)
@ extendedClosePrecisionHits
number of close precision hits in the extended layer
@ etaLayer2RPCHits
number of eta hits in the second RPC trigger layer (BML2)
@ etaLayer4Hits
number of eta hits in the fourth trigger layer (T3)
@ etaLayer3TGCHoles
number of eta holes in the third TGC trigger layer (T2)
@ etaLayer1STGCHits
number of eta hits in the first STGC trigger layer (STGC1)
@ etaLayer2TGCHits
number of eta hits in the second TGC trigger layer (T1)
@ etaLayer2Holes
number of eta holes in the second trigger layer (BML2 ot T1)
@ phiLayer2STGCHits
number of phi hits in the second STGC trigger layer (STGC2)
@ phiLayer3RPCHits
number of phi hits in the third RPC trigger layer (BOL1)
@ etaLayer2Hits
number of eta hits in the second trigger layer (BML2 ot T1)
@ innerSmallHoles
number of precision holes in the inner small layer
@ phiLayer4TGCHits
number of phi hits in the fourth TGC trigger layer (T3)
@ etaLayer1Holes
number of eta holes in the first trigger layer (BML1 ot T4)
@ extendedLargeHoles
number of precision holes in the extended large layer
@ phiLayer3TGCHits
number of phi hits in the third TGC trigger layer (T2)
@ combinedTrackOutBoundsPrecisionHits
total out-of-bounds hits on the combined track
@ cscUnspoiledEtaHits
number of unspoiled CSC eta clusters on track
@ extendedOutBoundsPrecisionHits
number of out-of-bounds hits in the extended layer
@ outerOutBoundsPrecisionHits
number of out-of-bounds hits in the outer layer
@ phiLayer2STGCHoles
number of phi holes in the second STGC trigger layer (STGC2)
@ isEndcapGoodLayers
if non-deweighted track chambers are in endcap
@ outerSmallHoles
number of precision holes in the outer small layer
@ innerSmallHits
number of precision hits in the inner small layer
structure to hold information per chamber in the muon system