ATLAS Offline Software
MuonLayerSegmentFinderTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
15 #include <typeinfo>
16 using namespace xAOD::P4Helpers;
17 namespace {
18  const float OneOverSqrt12 = 1. / std::sqrt(12);
19 }
20 namespace Muon {
21 
22  MuonLayerSegmentFinderTool::MuonLayerSegmentFinderTool(const std::string& type, const std::string& name, const IInterface* parent) :
24  declareInterface<IMuonLayerSegmentFinderTool>(this);
25  }
26 
28  ATH_CHECK(m_idHelperSvc.retrieve());
29  ATH_CHECK(m_printer.retrieve());
31  ATH_CHECK(m_segmentMaker.retrieve());
32  ATH_CHECK(m_csc2dSegmentFinder.retrieve(DisableTool{!m_idHelperSvc->hasCSC() || m_csc2dSegmentFinder.empty()}));
33  ATH_CHECK(m_csc4dSegmentFinder.retrieve(DisableTool{!m_idHelperSvc->hasCSC() || m_csc4dSegmentFinder.empty()}));
34  ATH_CHECK(m_patternSegs.initialize(!m_patternSegs.empty()));
35  ATH_CHECK(m_segmentMatchingTool.retrieve(DisableTool{m_patternSegs.empty()}));
37  ATH_CHECK(m_clusterSegMakerNSW.retrieve(DisableTool{m_clusterSegMakerNSW.empty()|| !m_patternSegs.empty()}));
38 
39  return StatusCode::SUCCESS;
40  }
41 
43  const MuonLayerPrepRawData& layerPrepRawData, std::vector<std::shared_ptr<const Muon::MuonSegment> >& segments) const {
45  " Running segment finding in sector "
46  << intersection.layerSurface.sector << " region " << MuonStationIndex::regionName(intersection.layerSurface.regionIndex)
47  << " layer " << MuonStationIndex::layerName(intersection.layerSurface.layerIndex) << " intersection position: r "
48  << intersection.trackParameters->position().perp() << " z " << intersection.trackParameters->position().z() << " locX "
49  << intersection.trackParameters->parameters()[Trk::locX] << " locY " << intersection.trackParameters->parameters()[Trk::locY]
50  << " phi " << intersection.trackParameters->position().phi());
51 
52  // run cluster hit based segment finding on PRDs
53  findClusterSegments(ctx, intersection, layerPrepRawData, segments);
54  ATH_MSG_VERBOSE(" findClusterSegments " << segments.size());
55 
56  // run standard MDT/Trigger hit segment finding either from Hough or hits
57  findMdtSegments(intersection, layerPrepRawData, segments);
58  }
59 
61  const MuonLayerPrepRawData& layerPrepRawData,
62  std::vector<std::shared_ptr<const Muon::MuonSegment>>& segments) const {
63  // calibrate what is already there
64  MuonLayerROTs layerROTs;
65  if (!m_muonPRDSelectionTool->calibrateAndSelect(intersection, layerPrepRawData, layerROTs)) {
66  ATH_MSG_WARNING("Failed to calibrate and select layer data");
67  return;
68  }
69 
70  // get hits
73  const std::vector<const MdtDriftCircleOnTrack*>& mdts = layerROTs.getMdts();
74  const std::vector<const MuonClusterOnTrack*>& clusters = layerROTs.getClusters(clusterTech);
75 
76  findMdtSegments(intersection, mdts, clusters, segments);
77  }
78 
79  void MuonLayerSegmentFinderTool::findMdtSegments(const MuonSystemExtension::Intersection& intersection,
80  const std::vector<const MdtDriftCircleOnTrack*>& mdts,
81  const std::vector<const MuonClusterOnTrack*>& clusters,
82  std::vector<std::shared_ptr<const Muon::MuonSegment>>& segments) const {
83  // require at least 2 MDT hits
84  if (mdts.size() <= 2) return;
85  // run segment finder
86  std::unique_ptr<Trk::SegmentCollection> segColl = std::make_unique<Trk::SegmentCollection>(SG::VIEW_ELEMENTS);
87  m_segmentMaker->find(intersection.trackParameters->position(), intersection.trackParameters->momentum(), mdts, clusters,
88  !clusters.empty(), segColl.get(), intersection.trackParameters->momentum().mag());
89 
90  for (Trk::Segment* tseg : *segColl) {
91  MuonSegment* mseg = dynamic_cast<MuonSegment*>(tseg);
92  ATH_MSG_DEBUG(" " << m_printer->print(*mseg));
93  segments.emplace_back(mseg);
94  }
95  }
96 
98  const MuonLayerPrepRawData& layerPrepRawData,
99  std::vector<std::shared_ptr<const Muon::MuonSegment>>& segments) const {
100  // if there are CSC hits run CSC segment finding
101  if (!layerPrepRawData.cscs.empty()) findCscSegments(ctx, layerPrepRawData, segments);
102 
103  // No need to call the NSW segment finding
104  if (layerPrepRawData.mms.empty() && layerPrepRawData.stgcs.empty()) return;
105 
106  // NSW segment finding
107  MuonLayerROTs layerROTs;
108  if (!m_muonPRDSelectionTool->calibrateAndSelect(intersection, layerPrepRawData, layerROTs)) {
109  ATH_MSG_WARNING("Failed to calibrate and select layer data");
110  return;
111  }
112 
113  ATH_MSG_DEBUG(" MM prds " << layerPrepRawData.mms.size() << " STGC prds " << layerPrepRawData.stgcs.size());
114 
115  // get STGC and MM clusters
116  const std::vector<const MuonClusterOnTrack*>& clustersSTGC = layerROTs.getClusters(MuonStationIndex::STGC);
117  const std::vector<const MuonClusterOnTrack*>& clustersMM = layerROTs.getClusters(MuonStationIndex::MM);
118 
120  NSWSegmentCache cache{};
121 
122 
123  if (!clustersSTGC.empty()) {
124  ATH_MSG_DEBUG(" STGC clusters " << clustersSTGC.size());
125  std::transform(clustersSTGC.begin(), clustersSTGC.end(), std::back_inserter(cache.inputClust),
126  [](const Muon::MuonClusterOnTrack* cl){ return std::unique_ptr<Muon::MuonClusterOnTrack>{cl->clone()};});
127 
128  }
129  if (!clustersMM.empty()) {
130  ATH_MSG_DEBUG(" MM clusters " << clustersMM.size());
131  std::transform(clustersMM.begin(), clustersMM.end(), std::back_inserter(cache.inputClust),
132  [](const Muon::MuonClusterOnTrack* cl){ return std::unique_ptr<Muon::MuonClusterOnTrack>{cl->clone()};});
133  }
134  if (cache.inputClust.empty()) return;
135 
136 
137  if (!m_patternSegs.empty()) {
138  std::set<Identifier> needed_rios{};
139  for (std::unique_ptr<const MuonClusterOnTrack>& clus : cache.inputClust) {
140  needed_rios.insert(clus->identify());
141  }
142  SG::ReadHandle<Trk::SegmentCollection> input_segs{m_patternSegs, ctx};
143  for (const Trk::Segment *trk_seg : *input_segs) {
144  const MuonSegment *seg = dynamic_cast<const Muon::MuonSegment *>(trk_seg);
145  // Initial check that the segments are on the same detector side
146  if (intersection.trackParameters->associatedSurface().center().z() * seg->globalPosition().z() < 0) continue;
147 
149  bool hasNSW{false};
150  for (size_t n = 0; !hasNSW && n < seg->numberOfContainedROTs(); ++n) {
151  const MuonClusterOnTrack *clus = dynamic_cast<const MuonClusterOnTrack *>(seg->rioOnTrack(n));
152  hasNSW |= (clus && needed_rios.count(clus->identify()));
153  }
155  if (!hasNSW) continue;
157  if (m_segmentMatchingTool->match(ctx, intersection, *seg)) segments.emplace_back(seg->clone());
158  }
161  return;
162  }
163 
164  m_clusterSegMakerNSW->find(ctx, cache);
165 
166  for (std::unique_ptr<MuonSegment>& seg : cache.constructedSegs) {
167  ATH_MSG_DEBUG(" NSW segment " << m_printer->print(*seg));
168  segments.emplace_back(std::move(seg));
169  }
170  }
171 
172  void MuonLayerSegmentFinderTool::findCscSegments(const EventContext& ctx, const MuonLayerPrepRawData& layerPrepRawData,
173  std::vector<std::shared_ptr<const Muon::MuonSegment>>& segments) const {
174  // run 2d segment finder
175  std::unique_ptr<MuonSegmentCombinationCollection> combi2D = m_csc2dSegmentFinder->find(layerPrepRawData.cscs, ctx);
176  if (!combi2D) return;
177 
178  // run 4d segment finder
179  std::unique_ptr<MuonSegmentCombinationCollection> combi4D = m_csc4dSegmentFinder->find(*combi2D, ctx);
180  if (!combi4D) return;
181 
182  // extract segments and clean-up memory
183  for (auto com : *combi4D) {
184  const Muon::MuonSegmentCombination& combi = *com;
185  unsigned int nstations = combi.numberOfStations();
186 
187  // loop over chambers in combi and extract segments
188  for (unsigned int i = 0; i < nstations; ++i) {
189  // loop over segments in station
191 
192  // check if not empty
193  if (!segs || segs->empty()) continue;
194  // loop over new segments, copy them into collection
195  for (std::unique_ptr<MuonSegment>& seg_it : *segs) {
196  ATH_MSG_DEBUG(" " << m_printer->print(*seg_it));
197  segments.emplace_back(std::move(seg_it));
198  }
199  }
200  }
201  }
202  void MuonLayerSegmentFinderTool::findMdtSegmentsFromHough(const EventContext& ctx,
204  std::vector<std::shared_ptr<const Muon::MuonSegment> >& segments) const {
205 
206  if(m_houghDataPerSectorVecKey.empty()) return;
207  unsigned int nprevSegments = segments.size(); // keep track of what is already there
208  int sector = intersection.layerSurface.sector;
209  MuonStationIndex::DetectorRegionIndex regionIndex = intersection.layerSurface.regionIndex;
210  MuonStationIndex::LayerIndex layerIndex = intersection.layerSurface.layerIndex;
211 
212  // get hough data
213  SG::ReadHandle<MuonLayerHoughTool::HoughDataPerSectorVec> houghDataPerSectorVec{m_houghDataPerSectorVecKey, ctx};
214  if (!houghDataPerSectorVec.isValid()) {
215  ATH_MSG_ERROR("Hough data per sector vector not found");
216  return;
217  }
218 
219  // sanity check
220  if (static_cast<int>(houghDataPerSectorVec->vec.size()) <= sector - 1) {
221  ATH_MSG_WARNING(" MuonLayerHoughTool::HoughDataPerSectorVec smaller than sector "
222  << houghDataPerSectorVec->vec.size() << " sector " << sector);
223  return;
224  }
225 
226  // get hough maxima in the layer
227  unsigned int sectorLayerHash = MuonStationIndex::sectorLayerHash(regionIndex, layerIndex);
228  const MuonLayerHoughTool::HoughDataPerSector& houghDataPerSector = houghDataPerSectorVec->vec[sector - 1];
229  ATH_MSG_DEBUG(" findMdtSegmentsFromHough: sector "
230  << sector << " " << MuonStationIndex::regionName(regionIndex) << " "
231  << MuonStationIndex::layerName(layerIndex) << " sector hash " << sectorLayerHash << " houghData "
232  << houghDataPerSectorVec->vec.size() << " " << houghDataPerSector.maxVec.size());
233 
234  // sanity check
235  if (houghDataPerSector.maxVec.size() <= sectorLayerHash) {
236  ATH_MSG_WARNING(" houghDataPerSector.maxVec.size() smaller than hash " << houghDataPerSector.maxVec.size()
237  << " hash " << sectorLayerHash);
238  return;
239  }
240  const MuonLayerHoughTool::MaximumVec& maxVec = houghDataPerSector.maxVec[sectorLayerHash];
241 
242  // get local coordinates in the layer frame
243  bool barrelLike = intersection.layerSurface.regionIndex == MuonStationIndex::Barrel;
244 
245  float phi = intersection.trackParameters->position().phi();
246 
247  // in the endcaps take the r in the sector frame from the local position of the extrapolation
248  float r = barrelLike ? m_muonSectorMapping.transformRToSector(intersection.trackParameters->position().perp(), phi,
249  intersection.layerSurface.sector, true)
250  : intersection.trackParameters->parameters()[Trk::locX];
251 
252  float z = intersection.trackParameters->position().z();
253  float errx = Amg::error(*intersection.trackParameters->covariance(), Trk::locX);
254  float x = barrelLike ? r : z;
255  float y = barrelLike ? z : r;
256  float theta = std::atan2(x, y);
257 
258  ATH_MSG_DEBUG(" Got Hough maxima " << maxVec.size() << " extrapolated position in Hough space (" << x << "," << y
259  << ") error " << errx << " "
260  << " angle " << theta);
261 
262  // lambda to handle calibration and selection of MDTs
263  std::vector<std::unique_ptr<const Trk::MeasurementBase>> garbage;
264  auto handleMdt = [this, intersection, &garbage](const MdtPrepData& prd, std::vector<const MdtDriftCircleOnTrack*>& mdts) {
265  const MdtDriftCircleOnTrack* mdt = m_muonPRDSelectionTool->calibrateAndSelect(intersection, prd);
266  if (!mdt) return;
267  mdts.push_back(mdt);
268  garbage.emplace_back(mdt);
269  };
270 
271 
272  // lambda to handle calibration and selection of clusters
273  auto handleCluster = [this, intersection,&garbage](const MuonCluster& prd,
274  std::vector<const MuonClusterOnTrack*>& clusters) {
275  const MuonClusterOnTrack* cluster = m_muonPRDSelectionTool->calibrateAndSelect(intersection, prd);
276  if (!cluster) return;
277  clusters.push_back(cluster);
278  garbage.emplace_back(cluster);
279  };
280 
281 
282  // loop over maxima and associate them to the extrapolation
283  MuonLayerHoughTool::MaximumVec::const_iterator mit = maxVec.begin();
284  MuonLayerHoughTool::MaximumVec::const_iterator mit_end = maxVec.end();
285  for (; mit != mit_end; ++mit) {
286  const MuonHough::MuonLayerHough::Maximum& maximum = **mit;
287  float residual = maximum.pos - y;
288  float residualTheta = maximum.theta - theta;
289  float refPos = (maximum.hough != nullptr) ? maximum.hough->m_descriptor.referencePosition : 0;
290  float maxwidth = (maximum.binposmax - maximum.binposmin);
291  if (maximum.hough) maxwidth *= maximum.hough->m_binsize;
292  float pull = residual / std::hypot(errx , maxwidth * OneOverSqrt12);
293 
294 
295  ATH_MSG_DEBUG(" Hough maximum " << maximum.max << " position (" << refPos << "," << maximum.pos
296  << ") residual " << residual << " pull " << pull << " angle " << maximum.theta
297  << " residual " << residualTheta);
298 
299  // select maximum
300  if (std::abs(pull) > 5) continue;
301 
302  // loop over hits in maximum and add them to the hit list
303  std::vector<const MdtDriftCircleOnTrack*> mdts;
304  std::vector<const MuonClusterOnTrack*> clusters;
305  for (const auto& hit : maximum.hits) {
306 
307  // treat the case that the hit is a composite TGC hit
308  if (hit->tgc) {
309  for (const auto& prd : hit->tgc->etaCluster) {
310  handleCluster(*prd, clusters);
311  }
312  } else if (hit->prd) {
313  Identifier id = hit->prd->identify();
314  if (m_idHelperSvc->isMdt(id))
315  handleMdt(static_cast<const MdtPrepData&>(*hit->prd), mdts);
316  else
317  handleCluster(static_cast<const MuonCluster&>(*hit->prd), clusters);
318  }
319  }
320 
321  // get phi hits
322  const MuonLayerHoughTool::PhiMaximumVec& phiMaxVec =
323  houghDataPerSector.phiMaxVec[intersection.layerSurface.regionIndex];
324  ATH_MSG_DEBUG(" Got Phi Hough maxima " << phiMaxVec.size() << " phi " << phi);
325 
326  // loop over maxima and associate them to the extrapolation
327  MuonLayerHoughTool::PhiMaximumVec::const_iterator pit = phiMaxVec.begin();
328  MuonLayerHoughTool::PhiMaximumVec::const_iterator pit_end = phiMaxVec.end();
329  for (; pit != pit_end; ++pit) {
330  const MuonHough::MuonPhiLayerHough::Maximum& maximum = **pit;
331  const float residual = deltaPhi( maximum.pos, phi);
332 
333  ATH_MSG_DEBUG(" Phi Hough maximum " << maximum.max << " phi " << maximum.pos << ") angle "
334  << maximum.pos << " residual " << residual);
335 
336  for (const auto& phi_hit : maximum.hits) {
337  // treat the case that the hit is a composite TGC hit
338  if (phi_hit->tgc) {
339  Identifier id = phi_hit->tgc->phiCluster.front()->identify();
340  if (m_idHelperSvc->layerIndex(id) != intersection.layerSurface.layerIndex) continue;
341  for (const auto& prd : phi_hit->tgc->phiCluster) handleCluster(*prd, clusters);
342  } else if (phi_hit->prd) {
343  Identifier id = phi_hit->prd->identify();
344  if (m_idHelperSvc->layerIndex(id) != intersection.layerSurface.layerIndex) continue;
345  handleCluster(static_cast<const MuonCluster&>(*phi_hit->prd), clusters);
346  }
347  }
348  }
349 
350  // call segment finder
351  ATH_MSG_DEBUG(" Got hits: mdts " << mdts.size() << " clusters " << clusters.size());
352  findMdtSegments(intersection, mdts, clusters, segments);
353 
354  // clean-up memory
355  garbage.clear();
356  ATH_MSG_DEBUG(" Done maximum: new segments " << segments.size() - nprevSegments);
357  }
358  ATH_MSG_DEBUG(" Done with layer: new segments " << segments.size() - nprevSegments);
359  }
360 
361 } // namespace Muon
beamspotman.r
def r
Definition: beamspotman.py:676
xAOD::name
name
Definition: TriggerMenuJson_v1.cxx:29
Muon::MuonSegmentCombination
Definition: MuonSegmentCombination.h:30
MuonHough::MuonPhiLayerHough::Maximum::pos
float pos
Definition: MuonPhiLayerHough.h:27
Muon::MuonLayerROTs::getClusters
const std::vector< const MuonClusterOnTrack * > & getClusters(MuonStationIndex::TechnologyIndex tech) const
access calibrated MuonClusters for a given technolgy
Definition: MuonLayerROTs.h:56
Muon::MuonLayerSegmentFinderTool::m_csc4dSegmentFinder
ToolHandle< ICscSegmentFinder > m_csc4dSegmentFinder
Definition: MuonLayerSegmentFinderTool.h:95
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
Muon::MuonLayerSegmentFinderTool::m_patternSegs
SG::ReadHandleKey< Trk::SegmentCollection > m_patternSegs
Do not rebuild the segments if the segment is already built upstream.
Definition: MuonLayerSegmentFinderTool.h:114
Trk::locX
@ locX
Definition: ParamDefs.h:43
Muon::HoughDataPerSec::phiMaxVec
RegionPhiMaximumVec phiMaxVec
Definition: HoughDataPerSec.h:52
Trk::locY
@ locY
local cartesian
Definition: ParamDefs.h:44
MuonHough::MuonLayerHough::m_binsize
float m_binsize
Definition: MuonLayerHough.h:168
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
ClusterSeg::residual
@ residual
Definition: ClusterNtuple.h:20
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
xAODP4Helpers.h
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
Muon::MuonLayerSegmentFinderTool::m_clusterSegMakerNSW
ToolHandle< IMuonNSWSegmentFinderTool > m_clusterSegMakerNSW
Definition: MuonLayerSegmentFinderTool.h:100
Muon::MuonLayerSegmentFinderTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonLayerSegmentFinderTool.h:69
MuonHough::MuonLayerHough::m_descriptor
RegionDescriptor m_descriptor
Definition: MuonLayerHough.h:179
Muon::MuonLayerSegmentFinderTool::m_segmentMaker
ToolHandle< IMuonSegmentMaker > m_segmentMaker
Definition: MuonLayerSegmentFinderTool.h:85
EventPrimitivesHelpers.h
Muon::MuonLayerSegmentFinderTool::findMdtSegments
void findMdtSegments(const MuonSystemExtension::Intersection &intersection, const MuonLayerPrepRawData &layerPrepRawData, std::vector< std::shared_ptr< const Muon::MuonSegment > > &segments) const
find mdt segments from hits in the layer
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:71
Muon::MuonStationIndex::LayerIndex
LayerIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:38
Muon::MuonSegmentCombination::stationSegments
SegmentVec * stationSegments(unsigned int index) const
Access to segments in a given station.
Definition: MuonSegmentCombination.h:114
Muon::MuonLayerROTs::getMdts
const std::vector< const MdtDriftCircleOnTrack * > & getMdts() const
access calibrated MDT's
Definition: MuonLayerROTs.h:54
Muon::MuonLayerPrepRawData
Struct to hold all PrepRawData collections in a given layer.
Definition: MuonLayerPrepRawData.h:22
MuonHough::RegionDescriptor::referencePosition
float referencePosition
Definition: MuonLayerHough.h:43
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
MdtDriftCircleOnTrack.h
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
Muon::MuonStationIndex::MM
@ MM
Definition: MuonStationIndex.h:56
x
#define x
intersection
std::vector< std::string > intersection(std::vector< std::string > &v1, std::vector< std::string > &v2)
Definition: compareFlatTrees.cxx:25
xAOD::MuonSegment
MuonSegment_v1 MuonSegment
Reference the current persistent version:
Definition: Event/xAOD/xAODMuon/xAODMuon/MuonSegment.h:13
DetType::Barrel
@ Barrel
Definition: DetType.h:14
Muon::MuonLayerPrepRawData::stgcs
std::vector< const sTgcPrepDataCollection * > stgcs
Definition: MuonLayerPrepRawData.h:27
MuonLayerHough.h
MuonHough::MuonLayerHough::Maximum::binposmin
int binposmin
Definition: MuonLayerHough.h:68
MuonHough::MuonLayerHough::Maximum
struct representing the maximum in the hough space
Definition: MuonLayerHough.h:56
Muon::MuonLayerHoughTool::MaximumVec
HoughDataPerSec::MaximumVec MaximumVec
Definition: MuonLayerHoughTool.h:64
Muon::MuonStationIndex::regionName
static const std::string & regionName(DetectorRegionIndex index)
convert DetectorRegionIndex into a string
Definition: MuonStationIndex.cxx:176
MuonHough::MuonLayerHough::Maximum::theta
float theta
Definition: MuonLayerHough.h:61
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Muon::MuonLayerSegmentFinderTool::findClusterSegments
void findClusterSegments(const EventContext &ctx, const MuonSystemExtension::Intersection &intersection, const MuonLayerPrepRawData &layerPrepRawData, std::vector< std::shared_ptr< const Muon::MuonSegment > > &segments) const
find segments from PRD clusters
Definition: MuonLayerSegmentFinderTool.cxx:97
MuonHough::MuonLayerHough::Maximum::max
float max
Definition: MuonLayerHough.h:59
Muon::MuonLayerSegmentFinderTool::m_muonPRDSelectionTool
ToolHandle< IMuonPRDSelectionTool > m_muonPRDSelectionTool
Definition: MuonLayerSegmentFinderTool.h:80
lumiFormat.i
int i
Definition: lumiFormat.py:92
z
#define z
beamspotman.n
n
Definition: beamspotman.py:731
Muon::MuonStationIndex::STGC
@ STGC
Definition: MuonStationIndex.h:56
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
MuonHough::MuonPhiLayerHough::Maximum
Definition: MuonPhiLayerHough.h:23
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Muon::MuonLayerSegmentFinderTool::m_houghDataPerSectorVecKey
SG::ReadHandleKey< Muon::HoughDataPerSectorVec > m_houghDataPerSectorVecKey
Use the hough data to find sectors in the speectrometer traversed by a muon.
Definition: MuonLayerSegmentFinderTool.h:110
Muon::MuonStationIndex::Barrel
@ Barrel
Definition: MuonStationIndex.h:49
MuonHough::MuonPhiLayerHough::Maximum::hits
PhiHitVec hits
Definition: MuonPhiLayerHough.h:35
Trk::Segment
Definition: TrkEvent/TrkSegment/TrkSegment/Segment.h:56
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
test_pyathena.parent
parent
Definition: test_pyathena.py:15
Muon::MuonLayerSegmentFinderTool::findCscSegments
void findCscSegments(const EventContext &ctx, const MuonLayerPrepRawData &layerPrepRawData, std::vector< std::shared_ptr< const Muon::MuonSegment > > &segments) const
find csc segments
Definition: MuonLayerSegmentFinderTool.cxx:172
python.StandardJetMods.pull
pull
Definition: StandardJetMods.py:264
Muon::MuonLayerHoughTool::PhiMaximumVec
HoughDataPerSec::PhiMaximumVec PhiMaximumVec
Definition: MuonLayerHoughTool.h:65
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Muon::MuonStationIndex::layerName
static const std::string & layerName(LayerIndex index)
convert LayerIndex into a string
Definition: MuonStationIndex.cxx:192
Muon::MuonLayerSegmentFinderTool::m_printer
PublicToolHandle< MuonEDMPrinterTool > m_printer
Definition: MuonLayerSegmentFinderTool.h:75
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
MuonHough::MuonLayerHough::Maximum::hough
const MuonLayerHough * hough
Definition: MuonLayerHough.h:75
MuonHough::MuonPhiLayerHough::Maximum::max
float max
Definition: MuonPhiLayerHough.h:26
Muon::MuonLayerROTs
struct holding RIO_OnTracks for a given layer
Definition: MuonLayerROTs.h:18
Muon::MuonStationIndex::DetectorRegionIndex
DetectorRegionIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:47
Amg::error
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Definition: EventPrimitivesHelpers.h:40
MuonLayerSegmentFinderTool.h
Muon::MdtDriftCircleOnTrack
This class represents the corrected MDT measurements, where the corrections include the effects of wi...
Definition: MdtDriftCircleOnTrack.h:37
MuonHough::MuonLayerHough::Maximum::pos
float pos
Definition: MuonLayerHough.h:60
Muon::MdtPrepData
Class to represent measurements from the Monitored Drift Tubes.
Definition: MdtPrepData.h:37
Muon::HoughDataPerSec
Definition: HoughDataPerSec.h:20
MuonHough::MuonLayerHough::Maximum::hits
HitVec hits
Definition: MuonLayerHough.h:73
Muon::MuonLayerPrepRawData::cscs
std::vector< const CscPrepDataCollection * > cscs
Definition: MuonLayerPrepRawData.h:26
y
#define y
Muon::MuonLayerSegmentFinderTool::find
void find(const EventContext &ctx, const MuonSystemExtension::Intersection &intersection, const MuonLayerPrepRawData &layerPrepRawData, std::vector< std::shared_ptr< const Muon::MuonSegment > > &segments) const override
IMuonLayerSegmentFinderTool interface: find.
Definition: MuonLayerSegmentFinderTool.cxx:42
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::P4Helpers
Definition: xAODP4Helpers.h:36
Muon::MuonSegmentCombination::SegmentVec
std::vector< std::unique_ptr< MuonSegment > > SegmentVec
Definition: MuonSegmentCombination.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
Muon::MuonStationIndex::TGC
@ TGC
Definition: MuonStationIndex.h:56
Muon::IMuonNSWSegmentFinderTool::SegmentMakingCache
Helper struct to parse the data around.
Definition: IMuonNSWSegmentFinderTool.h:31
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
Muon::MuonStationIndex::RPC
@ RPC
Definition: MuonStationIndex.h:56
Muon::MuonLayerPrepRawData::mms
std::vector< const MMPrepDataCollection * > mms
Definition: MuonLayerPrepRawData.h:28
Muon::MuonLayerSegmentFinderTool::initialize
StatusCode initialize() override
Definition: MuonLayerSegmentFinderTool.cxx:27
Muon::MuonLayerSegmentFinderTool::m_segmentMatchingTool
ToolHandle< Muon::IMuonLayerSegmentMatchingTool > m_segmentMatchingTool
Definition: MuonLayerSegmentFinderTool.h:106
MuonSegment.h
Muon::MuonCluster
Class representing clusters in the muon system.
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/MuonCluster.h:37
Muon::MuonSystemExtension::Intersection
data per intersection
Definition: MuonSystemExtension.h:21
MuonClusterOnTrack.h
Muon::MuonSegment
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonSegment/MuonSegment/MuonSegment.h:45
AthAlgTool
Definition: AthAlgTool.h:26
Muon::MuonLayerSegmentFinderTool::m_csc2dSegmentFinder
ToolHandle< ICscSegmentFinder > m_csc2dSegmentFinder
Definition: MuonLayerSegmentFinderTool.h:90
FitQuality.h
MuonHough::MuonLayerHough::Maximum::binposmax
int binposmax
Definition: MuonLayerHough.h:69
Muon::MuonStationIndex::TechnologyIndex
TechnologyIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:54
dq_make_web_display.cl
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
Definition: dq_make_web_display.py:26
Muon::MuonSegmentCombination::numberOfStations
unsigned int numberOfStations() const
Number of stations with segment.
Definition: MuonSegmentCombination.h:108
SegmentCollection.h
Muon::MuonClusterOnTrack
Base class for Muon cluster RIO_OnTracks.
Definition: MuonClusterOnTrack.h:34
Muon::HoughDataPerSec::maxVec
RegionMaximumVec maxVec
Definition: HoughDataPerSec.h:51