ATLAS Offline Software
TriggerChamberClusterOnTrackCreator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
16 
17 #include <functional>
18 
19 namespace Muon
20 {
21 
22 TriggerChamberClusterOnTrackCreator::TriggerChamberClusterOnTrackCreator(const std::string& type, const std::string& name, const IInterface* parent) :
24  m_chooseBroadestCluster(true)
25 {
26  declareInterface<Muon::IMuonCompetingClustersOnTrackCreator>(this);
27  declareProperty("ChooseBroadestCluster", m_chooseBroadestCluster);
28 }
29 
32 {
33  ATH_CHECK(m_idHelperSvc.retrieve());
34  ATH_CHECK(m_clusterCreator.retrieve());
35  return StatusCode::SUCCESS;
36 }
37 
38 std::unique_ptr<CompetingMuonClustersOnTrack>
39 TriggerChamberClusterOnTrackCreator::createBroadCluster(const std::list<const Trk::PrepRawData*>& prds, const double) const {
40  ATH_MSG_VERBOSE("enter createBroadCluster: number of prds " << prds.size() );
41 
42  // make some PRD consistency checks
43  if (prds.empty()) {
44  ATH_MSG_WARNING("fails: empty PRD list ");
45  return nullptr;
46  }
47  if (!(*prds.begin())) {
48  ATH_MSG_WARNING("fails: first element of RPD list is nullptr");
49  return nullptr;
50  }
51  const Trk::TrkDetElementBase* detectorElement = (**prds.begin()).detectorElement();
52  Identifier channelId = (**prds.begin()).identify();
53  bool isRpc = m_idHelperSvc->isRpc(channelId);
54  if (!isRpc) {
55  if (!m_idHelperSvc->isTgc(channelId)) {
56  ATH_MSG_WARNING("fails: PRD must be from rpc or tgc ");
57  return nullptr;
58  }
59  }
60 
61  bool measuresPhi = isRpc && m_idHelperSvc->rpcIdHelper().measuresPhi(channelId);
62  if (!isRpc) measuresPhi = m_idHelperSvc->tgcIdHelper().isStrip(channelId);
63  for (std::list<const Trk::PrepRawData*>::const_iterator p = prds.begin(); p != prds.end(); ++p) {
64  if (!(*p)) {
65  ATH_MSG_WARNING("fails: current PrepRawData is nullptr, continuing");
66  continue;
67  }
68  channelId = (**p).identify();
69  if ((isRpc && m_idHelperSvc->rpcIdHelper().measuresPhi(channelId) != measuresPhi) || (!isRpc && m_idHelperSvc->tgcIdHelper().isStrip(channelId) != measuresPhi)) {
70  ATH_MSG_WARNING("fails: PRDs must measure same coordinate ");
71  return nullptr;
72  }
73  if ((**p).detectorElement() != detectorElement) {
74  ATH_MSG_WARNING("fails: PRDs must be from same detectorElement ");
75  return nullptr;
76  }
77  }
78 
79  // create a rot for each prd (which gets weight zero)
80  std::vector<const Muon::MuonClusterOnTrack*> rots = createPrdRots(prds);
81  auto assocProbs = std::vector<double>(rots.size(), 0.);
82 
83 
84  // for each surface, find the first and last rot forming the cluster
85  std::list<int> limitingChannels;
86  std::list<const Muon::MuonClusterOnTrack*> limitingRots;
87  makeClustersBySurface(limitingChannels,limitingRots,prds,rots);
88 
89  // cluster consistency - discard any surfaces not contributing to the final cluster
90  applyClusterConsistency(limitingChannels,limitingRots);
91 
92  // overall localPosition, error matrix and surface
94  Amg::MatrixX errorMatrix{};
95  Trk::Surface* surface = nullptr;
96  makeOverallParameters(parameters,errorMatrix,surface,limitingChannels,limitingRots);
97 
98  // clear lists
99  limitingChannels.clear();
100 
101  // return the competingMuonClusterOnTrack object containing the final parameters,
102  // error matrix, surface, list of rots and weights
103  return std::make_unique<CompetingMuonClustersOnTrack>(
104  std::move(parameters), std::move(errorMatrix), surface, std::move(rots), std::move(assocProbs));
105 }
106 
107 void
109  std::list<int>& limitingChannels,
110  std::list<const Muon::MuonClusterOnTrack*>& limitingRots) const
111 {
112  // remove any clusters that will NOT contribute to the final cluster
113  int numClusters = limitingChannels.size()/2;
114  int sizeMax = 0;
115  int sizeMin = 999;
116  for (std::list<int>::iterator l = limitingChannels.begin();
117  l != limitingChannels.end() && l != std::prev(limitingChannels.end());
118  ++l)
119  {
120  int size = abs(*l - *(++l));
121  if (size > sizeMax) sizeMax = size;
122  if (size < sizeMin) sizeMin = size;
123  }
124 
125  std::list<int>::iterator discard = limitingChannels.end();
126  for (std::list<int>::iterator l = limitingChannels.begin();
127  l != limitingChannels.end() && l != std::prev(limitingChannels.end());
128  ++l)
129  {
131  int size = abs(*l - *(++l));
132  if (m_chooseBroadestCluster && size < sizeMax) discard = first;
133  if (! m_chooseBroadestCluster && size > sizeMin) discard = first;
134  }
135  if (discard == limitingChannels.begin())
136  {
137  ATH_MSG_VERBOSE(" discard cluster #" << 1 );
138  limitingRots.pop_front();
139  limitingRots.pop_front();
140  limitingChannels.pop_front();
141  limitingChannels.pop_front();
142  }
143  else if (discard != limitingChannels.end())
144  {
145  ATH_MSG_VERBOSE(" discard cluster #" << numClusters );
146  limitingRots.pop_back();
147  limitingRots.pop_back();
148  limitingChannels.pop_back();
149  limitingChannels.pop_back();
150  }
151 }
152 
153 std::vector<const Muon::MuonClusterOnTrack*> TriggerChamberClusterOnTrackCreator::createPrdRots(const std::list<const Trk::PrepRawData*>& prds) const {
154  // create clusterRot for each PRD
155  auto rots = std::vector<const Muon::MuonClusterOnTrack*>();
156  if (prds.empty()) {
157  ATH_MSG_WARNING("empty PRD list ");
158  return rots;
159  }
160  if (!(*prds.begin())) {
161  ATH_MSG_WARNING("first element of RPD list is nullptr");
162  return rots;
163  }
164  for (std::list<const Trk::PrepRawData*>::const_iterator p = prds.begin(); p != prds.end(); ++p) {
165  if (!(*p)) {
166  ATH_MSG_WARNING("current PrepRawData is nullptr, continuing");
167  continue;
168  }
169  Identifier id = (**p).identify();
170  const Trk::TrkDetElementBase* detectorElement = (**p).detectorElement();
171  const Amg::Vector3D globalPosition = detectorElement->center(id);
172  const Muon::MuonClusterOnTrack* cluster = m_clusterCreator->createRIO_OnTrack(**p,globalPosition);
173  rots.push_back(cluster);
174  }
175  return rots;
176 }
177 
178 void
179 TriggerChamberClusterOnTrackCreator::makeClustersBySurface(std::list<int>& limitingChannels, std::list<const Muon::MuonClusterOnTrack*>& limitingRots, const std::list<const Trk::PrepRawData*>& prds, const std::vector<const Muon::MuonClusterOnTrack*>& rots) const {
180  if (prds.empty()) {
181  ATH_MSG_WARNING("makeClustersBySurface- empty PRD list ");
182  return;
183  }
184  if (!(*prds.begin())) {
185  ATH_MSG_WARNING("makeClustersBySurface - first element of RPD list is nullptr");
186  return;
187  }
188  std::vector<const Trk::PrepRawData*> usedPrd;
189  std::vector<const Muon::MuonClusterOnTrack*>::const_iterator r = rots.begin();
190  for (std::list<const Trk::PrepRawData*>::const_iterator p = prds.begin(); p != prds.end(); ++p, ++r) {
191  if (!(*p)) {
192  ATH_MSG_WARNING("makeClustersBySurface - current PrepRawData is nullptr, continuing");
193  continue;
194  }
195  if (std::find(usedPrd.begin(),usedPrd.end(),*p) != usedPrd.end()) continue;
196  usedPrd.push_back(*p);
197  int channel = 0;
198  int gasGap = 0;
199  Identifier channelId = (**p).identify();
200  bool isRpc = m_idHelperSvc->isRpc(channelId);
201  if (isRpc)
202  {
203  gasGap = m_idHelperSvc->rpcIdHelper().gasGap(channelId);
204  channel = m_idHelperSvc->rpcIdHelper().strip(channelId);
205  }
206  else
207  {
208  gasGap = m_idHelperSvc->tgcIdHelper().gasGap(channelId);
209  channel = m_idHelperSvc->tgcIdHelper().channel(channelId);
210  }
211  int channelMax = channel;
212  int channelMin = channel;
213  const Muon::MuonClusterOnTrack* rotMax = *r;
214  const Muon::MuonClusterOnTrack* rotMin = *r;
215 
216  std::list<const Trk::PrepRawData*>::const_iterator q = p;
217  std::vector<const Muon::MuonClusterOnTrack*>::const_iterator s = r;
218  for (++q, ++s; q != prds.end(); ++q, ++s) {
219  if (!(*q)) {
220  ATH_MSG_WARNING("makeClustersBySurface - current PrepRawData is nullptr, continuing");
221  continue;
222  }
223  channelId = (**q).identify();
224  if (( isRpc && m_idHelperSvc->rpcIdHelper().gasGap(channelId) != gasGap)
225  || (! isRpc && m_idHelperSvc->tgcIdHelper().gasGap(channelId) != gasGap)) continue;
226  usedPrd.push_back(*q);
227  if (isRpc)
228  {
229  channel = m_idHelperSvc->rpcIdHelper().strip(channelId);
230  }
231  else
232  {
233  channel = m_idHelperSvc->tgcIdHelper().channel(channelId);
234  }
235  if (channel > channelMax)
236  {
237  channelMax = channel;
238  rotMax = *s;
239  }
240  if (channel < channelMin)
241  {
242  channelMin = channel;
243  rotMin = *s;
244  }
245 
246  }
247  limitingChannels.push_back(channelMin);
248  limitingChannels.push_back(channelMax);
249  limitingRots.push_back(rotMin);
250  limitingRots.push_back(rotMax);
251  }
252 
253  // debug
254  if ( msgLvl(MSG::VERBOSE) )
255  {
256  std::list<int>::const_iterator l = limitingChannels.begin();
257  std::list<int>::const_iterator m = limitingChannels.begin();
258  int number = 0;
259  int size = abs(*l - *(++m));
260  for (std::vector<const Trk::PrepRawData*>::const_iterator q = usedPrd.begin();
261  q != usedPrd.end();
262  ++q, --size)
263  {
264  Identifier channelId = (**q).identify();
265  bool isRpc = m_idHelperSvc->isRpc(channelId);
266  if (isRpc)
267  {
268  int stationIndex = m_idHelperSvc->rpcIdHelper().stationName(channelId);
269  ATH_MSG_VERBOSE(" rpc "
270  << std::setiosflags(std::ios::fixed)
271  << " localPosition "
272  << std::setw(8) << std::setprecision(1) << (**q).localPosition()[Trk::locX]
273  << std::setw(8) << std::setprecision(1) << (**q).localPosition()[Trk::locY]
274  << " doublet z/phi"
275  << std::setw(2) << m_idHelperSvc->rpcIdHelper().doubletZ(channelId)
276  << std::setw(2) << m_idHelperSvc->rpcIdHelper().doubletPhi(channelId)
277  << " gasGap" << std::setw(2) << m_idHelperSvc->rpcIdHelper().gasGap(channelId)
278  << " strip" << std::setw(3) << m_idHelperSvc->rpcIdHelper().strip(channelId)
279  << " station " << m_idHelperSvc->rpcIdHelper().stationNameString(stationIndex)
280  << " " << m_idHelperSvc->rpcIdHelper().show_to_string(channelId) );
281  }
282  else
283  {
284  int stationIndex = m_idHelperSvc->tgcIdHelper().stationName(channelId);
285  ATH_MSG_VERBOSE(" tgc "
286  << std::setiosflags(std::ios::fixed)
287  << " localPosition "
288  << std::setw(8) << std::setprecision(1) << (**q).localPosition()[Trk::locX]
289  << std::setw(8) << std::setprecision(1) << (**q).localPosition()[Trk::locY]
290  << " gasGap" << std::setw(2) << m_idHelperSvc->tgcIdHelper().gasGap(channelId)
291  << " channel" << std::setw(3) << m_idHelperSvc->tgcIdHelper().channel(channelId)
292  << " station " << m_idHelperSvc->tgcIdHelper().stationNameString(stationIndex)
293  << " " << m_idHelperSvc->tgcIdHelper().show_to_string(channelId) );
294  }
295  if (size == 0)
296  {
297  ATH_MSG_VERBOSE(" cluster " << ++number
298  << " between channels " << *l << " and " << *m );
299  if (++m != limitingChannels.end())
300  {
301  ++l;
302  size = 1 + abs(*(++l) - *(++m));
303  }
304  }
305  }
306  }
307 }
308 
309 void
312  Amg::MatrixX& errorMatrix,
313  Trk::Surface*& surface,
314  std::list<int>& limitingChannels,
315  std::list<const Muon::MuonClusterOnTrack*>& limitingRots) const
316 {
317  // surfaces, overall localPosition and error matrix
318  //std::list<const Trk::Surface*> surfaces;
319  std::list<const Muon::MuonClusterOnTrack*>::const_iterator r = limitingRots.begin();
320  Amg::Vector3D centre = (**r).associatedSurface().center();
321  Amg::MatrixX covariance = (**r).localCovariance();
322  parameters = Trk::LocalParameters((**r).localParameters());
323  Identifier channelId = (**r).identify();
324  bool isRpc = m_idHelperSvc->isRpc(channelId);
325 
326  int pair = 1;
327  for (++r;
328  r != limitingRots.end();
329  ++r, ++pair)
330  {
331  centre += (**r).associatedSurface().center();
332  covariance += (**r).localCovariance();
333  parameters += (**r).localParameters();
334  }
335  double norm = 1.;
336  norm /= static_cast<double>(limitingRots.size());
337  std::list<int>::iterator l = limitingChannels.begin();
338  int firstChannel = *l;
339  double width = static_cast<double>(1 + abs(*(++l) - firstChannel));
340  if (limitingRots.size() > 2)
341  {
342  int offset = abs(*(++l) - firstChannel);
343  if (!isRpc && offset < 2) {
344  width *= 0.5;
345  } else {
346  width += static_cast<double>(offset);
347  }
348  }
349 
350  // get parameter means
351  centre *= norm;
352  covariance *= width*width*norm;
353  parameters *= norm;
354 
355  // finally create the mean ErrorMatrix and the average Surface
356  // note the cluster surfaces are assumed to have identical orientation and bounds
357  errorMatrix = Amg::MatrixX(covariance);
358  const Trk::Surface& surf = (**limitingRots.begin()).associatedSurface();
360  std::string shape = "";
361 
362  const Trk::RectangleBounds* rectbds = dynamic_cast<const Trk::RectangleBounds*>(&surf.bounds());
363  const Trk::TrapezoidBounds* trapbds = dynamic_cast<const Trk::TrapezoidBounds*>(&surf.bounds());
364  const Trk::RotatedTrapezoidBounds* rottrapbds = dynamic_cast<const Trk::RotatedTrapezoidBounds*>(&surf.bounds());
365 
366  if (rectbds)
367  {
368  shape = " RPC rectangle ";
369  surface = new Trk::PlaneSurface(Amg::Transform3D(rotation),rectbds->clone());
370  }
371  else if (trapbds)
372  {
373  shape = " TGC trapezoid ";
374  surface = new Trk::PlaneSurface(
376  trapbds->clone());
377  }
378  else if (rottrapbds)
379  {
380  shape = " TGC rotatedTrapezoid ";
381  surface = new Trk::PlaneSurface(
383  rottrapbds->clone());
384  }
385 
386  // debug
387  if ( msgLvl(MSG::DEBUG) )
388  {
389  ATH_MSG_DEBUG(shape << " width " << width << " localParameters " << (parameters)[Trk::locX]);
390  if (covariance.cols() > 1) ATH_MSG_DEBUG(" " << (parameters)[Trk::locY]);
391  ATH_MSG_DEBUG(" covariance " << std::sqrt(covariance(Trk::locX,Trk::locX)));
392  if (covariance.cols() > 1) ATH_MSG_DEBUG(" " << std::sqrt(covariance(Trk::locY,Trk::locY)));
393  ATH_MSG_DEBUG(" channel range (cluster) ");
394  pair = 2;
395  for (std::list<int>::iterator i = limitingChannels.begin();
396  i != limitingChannels.end();
397  ++i, ++pair)
398  {
399  ATH_MSG_DEBUG( *i << " ");
400  if (pair%2) ATH_MSG_DEBUG("(" << pair/2 << ") ");
401  }
402  }
403 }
404 
405 } // end of namespace
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
TrapezoidBounds.h
beamspotman.r
def r
Definition: beamspotman.py:676
Trk::LocalParameters
Definition: LocalParameters.h:98
Trk::RectangleBounds
Definition: RectangleBounds.h:38
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
PlotCalibFromCool.norm
norm
Definition: PlotCalibFromCool.py:100
Muon::TriggerChamberClusterOnTrackCreator::m_chooseBroadestCluster
bool m_chooseBroadestCluster
Definition: TriggerChamberClusterOnTrackCreator.h:53
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:29
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
Muon::TriggerChamberClusterOnTrackCreator::TriggerChamberClusterOnTrackCreator
TriggerChamberClusterOnTrackCreator(const std::string &type, const std::string &name, const IInterface *parent)
Definition: TriggerChamberClusterOnTrackCreator.cxx:22
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
RectangleBounds.h
Trk::locX
@ locX
Definition: ParamDefs.h:43
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
Trk::locY
@ locY
local cartesian
Definition: ParamDefs.h:44
Muon::TriggerChamberClusterOnTrackCreator::m_clusterCreator
ToolHandle< Muon::IMuonClusterOnTrackCreator > m_clusterCreator
Definition: TriggerChamberClusterOnTrackCreator.h:50
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Trk::RotatedTrapezoidBounds
Definition: RotatedTrapezoidBounds.h:45
CompetingMuonClustersOnTrack.h
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:158
Trk::TrkDetElementBase
Definition: TrkDetElementBase.h:52
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
PrepRawData.h
Trk::RotatedTrapezoidBounds::clone
virtual RotatedTrapezoidBounds * clone() const override
Virtual constructor.
Muon::TriggerChamberClusterOnTrackCreator::createBroadCluster
std::unique_ptr< CompetingMuonClustersOnTrack > createBroadCluster(const std::list< const Trk::PrepRawData * > &, const double) const
method to create a CompetingMuonClustersOnTrack using the PrepRawData hits and a scaled factor for th...
Definition: TriggerChamberClusterOnTrackCreator.cxx:39
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
Trk::TrapezoidBounds::clone
virtual TrapezoidBounds * clone() const override
Virtual constructor.
lumiFormat.i
int i
Definition: lumiFormat.py:92
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
Muon::TriggerChamberClusterOnTrackCreator::makeOverallParameters
void makeOverallParameters(Trk::LocalParameters &parameters, Amg::MatrixX &errorMatrix, Trk::Surface *&surface, std::list< int > &limitingChannels, std::list< const Muon::MuonClusterOnTrack * > &limitingRots) const
Definition: TriggerChamberClusterOnTrackCreator.cxx:310
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
xAOD::rotation
rotation
Definition: TrackSurface_v1.cxx:15
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Muon::TriggerChamberClusterOnTrackCreator::createPrdRots
std::vector< const Muon::MuonClusterOnTrack * > createPrdRots(const std::list< const Trk::PrepRawData * > &prds) const
Definition: TriggerChamberClusterOnTrackCreator.cxx:153
CaloCondBlobAlgs_fillNoiseFromASCII.channelId
channelId
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:122
Muon::TriggerChamberClusterOnTrackCreator::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: TriggerChamberClusterOnTrackCreator.h:48
Muon::TriggerChamberClusterOnTrackCreator::initialize
StatusCode initialize()
Definition: TriggerChamberClusterOnTrackCreator.cxx:31
python.selection.number
number
Definition: selection.py:20
Trk::Surface::bounds
virtual const SurfaceBounds & bounds() const =0
Surface Bounds method.
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
Muon::TriggerChamberClusterOnTrackCreator::applyClusterConsistency
void applyClusterConsistency(std::list< int > &limitingChannels, std::list< const Muon::MuonClusterOnTrack * > &limitingRots) const
Definition: TriggerChamberClusterOnTrackCreator.cxx:108
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
LocalParameters.h
MuonDetectorManager.h
Trk::TrapezoidBounds
Definition: TrapezoidBounds.h:43
Base_Fragment.width
width
Definition: Sherpa_i/share/common/Base_Fragment.py:59
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Trk::RectangleBounds::clone
virtual RectangleBounds * clone() const override
Virtual constructor.
Trk::PlaneSurface
Definition: PlaneSurface.h:64
PlaneSurface.h
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DeMoScan.first
bool first
Definition: DeMoScan.py:534
DEBUG
#define DEBUG
Definition: page_access.h:11
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
Muon::TriggerChamberClusterOnTrackCreator::makeClustersBySurface
void makeClustersBySurface(std::list< int > &limitingChannels, std::list< const Muon::MuonClusterOnTrack * > &limitingRots, const std::list< const Trk::PrepRawData * > &prds, const std::vector< const Muon::MuonClusterOnTrack * > &rots) const
Definition: TriggerChamberClusterOnTrackCreator.cxx:179
extractSporadic.q
list q
Definition: extractSporadic.py:98
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
MuonClusterOnTrack.h
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
AthAlgTool
Definition: AthAlgTool.h:26
RotatedTrapezoidBounds.h
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
Trk::Surface::transform
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
Trk::TrkDetElementBase::center
virtual const Amg::Vector3D & center() const =0
Return the center of the element.
TriggerChamberClusterOnTrackCreator.h
Muon::MuonClusterOnTrack
Base class for Muon cluster RIO_OnTracks.
Definition: MuonClusterOnTrack.h:34