ATLAS Offline Software
MuonClusterOnTrackCreator.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 // AlgTool used for MuonClusterOnTrack object production
8 
10 
11 #include <cmath>
12 #include <sstream>
13 
23 #include "TrkSurfaces/Surface.h"
24 #include "GaudiKernel/PhysicalConstants.h"
25 
26 namespace {
27  constexpr double SIG_VEL = 4.80000; // ns/m
28  constexpr double C_VEL = 1./ Gaudi::Units::c_light; // ns/m
29 }
30 namespace Muon {
31 
32  //================================================================================
33  MuonClusterOnTrackCreator::MuonClusterOnTrackCreator(const std::string& ty, const std::string& na, const IInterface* pa) :
34  AthAlgTool(ty, na, pa) {
35  // algtool interface - necessary!
36  declareInterface<IMuonClusterOnTrackCreator>(this);
37  declareInterface<IRIO_OnTrackCreator>(this);
38 
39  }
40 
41  //================================================================================
43  ATH_CHECK(m_idHelperSvc.retrieve());
44 
45  ATH_CHECK(m_clusterBuilderToolMM.retrieve(DisableTool{m_calibToolNSW.empty()}));
46  ATH_CHECK(m_calibToolNSW.retrieve(DisableTool{m_calibToolNSW.empty()}));
47  return StatusCode::SUCCESS;
48  }
49 
50  //================================================================================
52 
53  {
54  MuonClusterOnTrack* MClT = nullptr;
55 
56  // check whether PrepRawData has detector element, if not there print warning
58  if (!EL) {
59  ATH_MSG_WARNING("RIO does not have associated detectorElement!, cannot produce ROT");
60  return nullptr;
61  }
62 
63  // in RIO_OnTrack the local param and cov should have the same dimension
64  Trk::LocalParameters locpar(RIO.localPosition());
65 
66  if (RIO.localCovariance().cols() != RIO.localCovariance().rows()) {
67  ATH_MSG_WARNING("Rows and colums not equal!");
68  if (m_idHelperSvc->isRpc(RIO.identify())) {
69  ATH_MSG_WARNING("RPC hit with (r,c)=" << RIO.localCovariance().rows() << "," << RIO.localCovariance().cols());
70  }
71  }
72 
73  if (RIO.localCovariance().cols() > 1 || (m_idHelperSvc->isTgc(RIO.identify()) && m_idHelperSvc->measuresPhi(RIO.identify()))) {
74  ATH_MSG_VERBOSE("Making 2-dim local parameters: " << m_idHelperSvc->toString(RIO.identify()));
75  } else {
76  Trk::DefinedParameter radiusPar(RIO.localPosition().x(), Trk::locX);
77  locpar = Trk::LocalParameters(radiusPar);
78  ATH_MSG_VERBOSE("Making 1-dim local parameters: " << m_idHelperSvc->toString(RIO.identify()));
79  }
80 
82  double positionAlongStrip{0};
83  double positionAlongZ{0};
84 
85  const Trk::Surface& rio_surface = EL->surface(RIO.identify());
86  if (!rio_surface.globalToLocal(GP, GP, lp)) {
87  Amg::Vector3D lpos = rio_surface.transform().inverse() * GP;
88  ATH_MSG_WARNING("Extrapolated GlobalPosition not on detector surface! Distance " << lpos.z());
89  lp[Trk::locX] = lpos.x();
90  lp[Trk::locY] = lpos.y();
91  positionAlongZ = lpos.z();
92  }
93 
94  positionAlongStrip = lp[Trk::locY];
95 
96  Amg::MatrixX loce = RIO.localCovariance();
97  ATH_MSG_DEBUG("All: new err matrix is " << loce);
98 
99  if (m_idHelperSvc->isRpc(RIO.identify())) {
100 
101  //***************************
102  // RPC: cast to RpcPrepData
103  //***************************
104 
105  const RpcPrepData* MClus = static_cast<const RpcPrepData*>(&RIO);
106  bool measphi = m_idHelperSvc->measuresPhi(RIO.identify());
107 
108  double fixedError = 1.;
109  bool scale = false;
110  // check whether to scale eta/phi hit
111  if (m_doFixedErrorRpcEta && !measphi) {
112  scale = true;
113  fixedError = m_fixedErrorRpcEta;
114  } else if (m_doFixedErrorRpcPhi && measphi) {
115  scale = true;
116  fixedError = m_fixedErrorRpcPhi;
117  }
118  if (scale) {
119  Amg::MatrixX mat(1, 1);
120  mat(0, 0) = fixedError * fixedError;
121  loce = mat;
122  }
123 
124  const MuonGM::RpcReadoutElement* rpc_readout_element = MClus->detectorElement();
125  Amg::Vector3D posi = rpc_readout_element->stripPos(RIO.identify());
126 
127  // let's correct rpc time subtracting delay due to the induced electric signal propagation along strip
128  double correct_time_along_strip = 0;
129  if (measphi == 0) {
130  correct_time_along_strip = rpc_readout_element->distanceToEtaReadout(GP) / 1000. * SIG_VEL;
131  } else {
132  correct_time_along_strip = rpc_readout_element->distanceToPhiReadout(GP) / 1000. * SIG_VEL;
133  }
134  if (positionAlongZ) correct_time_along_strip = 0; // no correction if extrapolated GlobalPosition not on detector surface!
135 
136  // let's evaluate the average delay due to the induced electric signal propagation along strip
137  double av_correct_time_along_strip = 0;
138  if (measphi == 0) {
139  av_correct_time_along_strip = rpc_readout_element->distanceToEtaReadout(posi) / 1000. * SIG_VEL;
140  } else {
141  av_correct_time_along_strip = rpc_readout_element->distanceToPhiReadout(posi) / 1000. * SIG_VEL;
142  }
143 
144  // let's evaluate [real TOF - nominal TOF]
145  double real_TOF_onRPCgap = GP.mag() / 1000. * C_VEL;
146  double nominal_TOF_onRPCgap = posi.mag() / 1000. * C_VEL;
147 
148  // let's evaluate the total time correction
149  double correct_time_tot = real_TOF_onRPCgap - nominal_TOF_onRPCgap + correct_time_along_strip - av_correct_time_along_strip;
150 
151  MClT = new RpcClusterOnTrack(MClus, std::move(locpar), std::move(loce), positionAlongStrip, MClus->time() - correct_time_tot);
152 
153  ATH_MSG_DEBUG(" correct_time_along_strip " << correct_time_along_strip << " av_correct_time_along_strip "
154  << av_correct_time_along_strip << " real_TOF_onRPCgap " << real_TOF_onRPCgap
155  << " nominal_TOF_onRPCgap " << nominal_TOF_onRPCgap << " MClus->time() "
156  << MClus->time() << " correct_time_tot " << correct_time_tot);
157 
158  } else if (m_idHelperSvc->isTgc(RIO.identify())) {
159 
160  //***************************
161  // TGC: cast to TgcPrepData
162  //***************************
163 
164  const TgcPrepData* MClus = static_cast<const TgcPrepData*>(&RIO);
165  const TgcIdHelper& idHelper{m_idHelperSvc->tgcIdHelper()};
166 
167  // calculation of 2D error matrix for TGC phi strips
168  if (idHelper.measuresPhi(RIO.identify())) {
169  const int stripNo = idHelper.channel(RIO.identify());
170  const int gasGap = idHelper.gasGap(RIO.identify());
171 
172  const MuonGM::TgcReadoutElement* ele = MClus->detectorElement();
173 
174  double stripLength = ele->stripLength();
175  double stripWidth = std::abs(ele->stripPitch(gasGap, stripNo, lp[Trk::locZ]));
176  const Amg::Vector3D lStripDir = ele->transform(RIO.identify()).inverse().linear()*
177  ele->stripDir(RIO.identify());
178 
179  Amg::MatrixX mat(2, 2);
180 
181  double phistereo = lStripDir.phi() - 90.*Gaudi::Units::deg;
182  double Sn = std::sin(phistereo);
183  double Sn2 = Sn * Sn;
184  double Cs2 = 1. - Sn2;
185 
186  double V0 = stripWidth * stripWidth / 12;
188  double V1 = stripLength * stripLength / 12;
189  mat(0, 0) = (Cs2 * V0 + Sn2 * V1);
190  mat.fillSymmetric(1, 0, (Sn * std::sqrt(Cs2) * (V0 - V1)));
191  mat(1, 1) = (Sn2 * V0 + Cs2 * V1);
192  loce = mat;
193  } else {
194  if (m_doFixedErrorTgcEta) {
195  Amg::MatrixX mat(1, 1);
197  loce = mat;
198  }
199  }
200 
201  MClT = new TgcClusterOnTrack(MClus, std::move(locpar), std::move(loce), positionAlongStrip);
202 
203  } else if (m_idHelperSvc->issTgc(RIO.identify())) {
204 
205  //***************************
206  // sTGC: cast to sTgcPrepData
207  //***************************
208 
209  const sTgcPrepData* MClus = static_cast<const sTgcPrepData*>(&RIO);
210  Amg::Vector2D localPos(lp[Trk::locX], lp[Trk::locY]);
211 
212  // Dont make RIO On tracks for sTGC wires in inner Q1
213  if (m_idHelperSvc->stgcIdHelper().channelType(MClus->identify()) == sTgcIdHelper::Wire &&
214  MClus->detectorElement()->isEtaZero(MClus->identify(), lp)) {
215  ATH_MSG_DEBUG("sTgcReadoutElement with isEtaZero() ?! "<<m_idHelperSvc->toString(MClus->identify()));
216  return nullptr;
217  }
218  // Wires are already considered in the above check. Dont remove them here
219  if (!rio_surface.insideBounds(localPos) &&
220  m_idHelperSvc->stgcIdHelper().channelType(MClus->identify()) != sTgcIdHelper::Wire) {
221  ATH_MSG_DEBUG("sTgc measurement "<<m_idHelperSvc->toString(MClus->identify())<<" out of bounds. "
222  <<Amg::toString(localPos));
223  return nullptr;
224  }
225  MClT = new sTgcClusterOnTrack(MClus, std::move(locpar), std::move(loce), positionAlongStrip);
226 
227  } else if (m_idHelperSvc->isMM(RIO.identify())) {
228 
229  //***************************
230  // MM: cast to MMPrepData
231  //***************************
232 
233  const MMPrepData* mmPRD = static_cast<const MMPrepData*>(&RIO);
234  MClT = new MMClusterOnTrack(mmPRD, std::move(locpar), std::move(loce), positionAlongStrip, {}, {});
235  }
236 
237  return MClT;
238  }
239 
240 
241  //================================================================================
243  return createRIO_OnTrack(RIO, GP);
244  }
245 
246  //================================================================================
247  MuonClusterOnTrack* MuonClusterOnTrackCreator::correct(const Trk::PrepRawData& RIO, const Trk::TrackParameters& TP, const EventContext& /*ctx*/ ) const {
248  return correct(RIO, TP.position(), TP.momentum().unit());
249  }
250 
251  //================================================================================
253 
254  if (m_idHelperSvc->isMM(RIO.identify())) {
255  // Micromegas
256  return calibratedClusterMMG(RIO, GP, GD);
257  }
258 
259  if (m_idHelperSvc->issTgc(RIO.identify()) && !m_idHelperSvc->measuresPhi(RIO.identify())) {
260  // sTGC: calibration is currently available for strips.
261  return calibratedClusterSTG(RIO, GP, GD);
262  }
263 
264  // Default case
265  return createRIO_OnTrack(RIO, GP, GD);
266  }
267 
268 
269  //================================================================================
271  const EventContext& ctx{Gaudi::Hive::currentContext()};
272  // Make sure RIO has a detector element
273  const MuonGM::MMReadoutElement* mmEL = static_cast<const MuonGM::MMReadoutElement*>(RIO.detectorElement());
274  if (!mmEL) {
275  ATH_MSG_WARNING("RIO does not have associated detectorElement! Skipping cluster calibration");
276  return nullptr;
277  }
278 
279  Amg::MatrixX loce = RIO.localCovariance();
281 
282  // * Local cluster coordinates to feed to the calibration tools
284 
285  // get localY from the seeded position
286  const Trk::PlaneSurface& rio_surface = mmEL->surface(RIO.identify());
287  if (!rio_surface.globalToLocal(GP, GP, lp)) {
288  Amg::Vector3D lpos = rio_surface.transform().inverse() * GP;
289  ATH_MSG_WARNING("Extrapolated GlobalPosition not on detector surface! Distance " << lpos.z());
290  lp[Trk::locX] = lpos.x();
291  lp[Trk::locY] = lpos.y();
292  }
293  // set localX from the cluster parameters
294  lp[Trk::locX] = locpar[Trk::locX];
295 
296  // * B-Field correction
297  // calibrate the input strips
298  const MMPrepData* mmPRD = static_cast<const MMPrepData*>(&RIO);
299 
300  std::vector<NSWCalib::CalibratedStrip> calibratedStrips;
301  StatusCode sc = m_calibToolNSW->calibrateClus(ctx, mmPRD, GP, calibratedStrips);
302  if (sc != StatusCode::SUCCESS) {
303  ATH_MSG_WARNING("Could not calibrate the MM Cluster in the RIO on track creator");
304  return nullptr;
305  }
306 
307  // calibrate the cluster position along the precision coordinate (updates lp.x())
308  IMMClusterBuilderTool::RIO_Author rotAuthor = m_clusterBuilderToolMM->getCalibratedClusterPosition(ctx,
309  calibratedStrips,
310  NswClustering::toLocal(*mmPRD, GD),
311  lp, loce);
312 
313  if (rotAuthor == IMMClusterBuilderTool::RIO_Author::unKnownAuthor) {
314  ATH_MSG_WARNING("Could not calibrate the MM Cluster in the RIO on track creator");
315  return nullptr;
316  }
317 
318  // * Correct the local cluster coordinates for as-built conditions and B-lines (returns a new 3D vector)
319  Amg::Vector3D localposition3D{Amg::Vector3D::Zero()};
320  if (!mmEL->spacePointPosition(RIO.identify(), lp, localposition3D)){
321  ATH_MSG_WARNING("Application of final as-built parameters failed for channel "<<m_idHelperSvc->toString(RIO.identify())<<" local pos = ("<<lp.x()<<"/"<<lp.y()<<").");
322  }
323 
324  // Get the direction of the track in the local coordinate system and use it to project
325  // the actual hit position onto the nominal surface (locZ = 0), where the intersection
326  // of the track is considered. This "effective" position provides a more accurate residual.
328  rio_surface.globalToLocalDirection(GD, ld);
329  double a_impact = ld.angleXZ() < 0 ? -M_PI_2 - ld.angleXZ() : M_PI_2 - ld.angleXZ();
330  double x_projected = localposition3D.x() - std::tan(a_impact) * localposition3D.z();
331 
332  // * Set the value of the local parameter (locX) after applying conditions
333  // The position along strip will be set from the seed (there is no better
334  // estimate than that; not used in the track fits anyway)
335  locpar[Trk::locX] = x_projected;
336 
337  ATH_MSG_VERBOSE("generating MMClusterOnTrack in MMClusterBuilder");
338  MMClusterOnTrack* cluster = new MMClusterOnTrack(mmPRD, std::move(locpar), std::move(loce), lp[Trk::locY], {}, {});
339  cluster->setAuthor(rotAuthor);
340 
341  return cluster;
342  }
343 
344 
345  //================================================================================
347 
348  // Make sure RIO has a detector element
349  const MuonGM::sTgcReadoutElement* stgEL = static_cast<const MuonGM::sTgcReadoutElement*>(RIO.detectorElement());
350  if (!stgEL) {
351  ATH_MSG_WARNING("RIO does not have associated detectorElement! Skipping cluster calibration");
352  return nullptr;
353  }
354 
355  Amg::MatrixX loce = RIO.localCovariance();
356  // > 1 in case we want to keep pads in the future ?
358 
359 
360  // * Local cluster coordinates to feed to the calibration tools
362 
363  // get local y from the seeded position
364  const Trk::PlaneSurface& rio_surface = stgEL->surface(RIO.identify());
365  if (!rio_surface.globalToLocal(GP, GP, lp)) {
366  Amg::Vector3D lpos = rio_surface.transform().inverse() * GP;
367  ATH_MSG_WARNING("Extrapolated GlobalPosition not on detector surface! Distance " << lpos.z());
368  lp[Trk::locX] = lpos.x();
369  lp[Trk::locY] = lpos.y();
370  }
371  // set local x from the cluster parameters
372  lp[Trk::locX] = locpar[Trk::locX];
373 
374  // * Correct the local coordinates for as-built conditions and b-lines
375  Amg::Vector3D localposition3D { Amg::Vector3D::Zero() };
376  stgEL->spacePointPosition(RIO.identify(), lp[Trk::locX], lp[Trk::locY], localposition3D);
377 
378  // Get the direction of the track in the local coordinate system and use it to project
379  // the actual hit position onto the nominal surface (locZ = 0), where the intersection
380  // of the track is considered. This "effective" position provides a more accurate residual.
382  rio_surface.globalToLocalDirection(GD, ld);
383  double a_impact = ld.angleXZ() < 0 ? -M_PI_2 - ld.angleXZ() : M_PI_2 - ld.angleXZ();
384  double x_projected = localposition3D.x() - std::tan(a_impact) * localposition3D.z();
385 
386  // * Set the value of the local parameter (locX) after applying conditions
387  // The position along strip will be set from the seed (there is no better
388  // estimate than that; not used in the track fits anyway)
389  locpar[Trk::locX] = x_projected;
390 
391  const sTgcPrepData* stgPRD = static_cast<const sTgcPrepData*>(&RIO);
392  ATH_MSG_VERBOSE("generating sTgcClusterOnTrack in MuonClusterBuilder");
393  MuonClusterOnTrack* cluster = new sTgcClusterOnTrack(stgPRD, std::move(locpar), std::move(loce), lp[Trk::locY]);
394 
395  return cluster;
396  }
397 } // namespace Muon
Trk::LocalParameters
Definition: LocalParameters.h:98
Trk::PlaneSurface::globalToLocal
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const override final
Specified for PlaneSurface: GlobalToLocal method without dynamic memory allocation - boolean checks i...
Definition: PlaneSurface.cxx:213
MuonGM::MuonClusterReadoutElement::transform
virtual const Amg::Transform3D & transform() const override
Return local to global transform.
Definition: MuonClusterReadoutElement.h:124
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
Muon::MuonClusterOnTrackCreator::createRIO_OnTrack
virtual MuonClusterOnTrack * createRIO_OnTrack(const Trk::PrepRawData &RIO, const Amg::Vector3D &GP) const override
Create new Muon::MuonClusterOnTrack from a Trk::PrepRawData and a predicted Trk::TrackParameter.
Definition: MuonClusterOnTrackCreator.cxx:51
Muon::MMPrepData
Class to represent MM measurements.
Definition: MMPrepData.h:22
Muon::MuonClusterOnTrackCreator::initialize
virtual StatusCode initialize() override
Definition: MuonClusterOnTrackCreator.cxx:42
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:27
sTgcClusterOnTrack.h
Trk::locX
@ locX
Definition: ParamDefs.h:37
Trk::locY
@ locY
local cartesian
Definition: ParamDefs.h:38
Surface.h
Muon::MuonClusterOnTrackCreator::m_doFixedErrorRpcPhi
Gaudi::Property< bool > m_doFixedErrorRpcPhi
Definition: MuonClusterOnTrackCreator.h:92
Muon::MuonClusterOnTrackCreator::m_clusterBuilderToolMM
ToolHandle< Muon::IMMClusterBuilderTool > m_clusterBuilderToolMM
Definition: MuonClusterOnTrackCreator.h:84
Muon::MuonClusterOnTrackCreator::m_fixedErrorRpcPhi
Gaudi::Property< double > m_fixedErrorRpcPhi
Definition: MuonClusterOnTrackCreator.h:96
TgcIdHelper
Definition: TgcIdHelper.h:50
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
mat
GeoMaterial * mat
Definition: LArDetectorConstructionTBEC.cxx:55
Trk::PrepRawData::localCovariance
const Amg::MatrixX & localCovariance() const
return const ref to the error matrix
Muon::TgcClusterOnTrack
Class to represent calibrated clusters formed from TGC strips.
Definition: TgcClusterOnTrack.h:46
deg
#define deg
Definition: SbPolyhedron.cxx:17
MuonGM::TgcReadoutElement::stripLength
double stripLength() const
Returns the length of each strip which is equal to the height of the chamber.
MuonGM::RpcReadoutElement
An RpcReadoutElement corresponds to a single RPC module; therefore typicaly a barrel muon station con...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/RpcReadoutElement.h:55
Muon::TgcPrepData::detectorElement
virtual const MuonGM::TgcReadoutElement * detectorElement() const override final
Returns the detector element corresponding to this PRD The pointer will be zero if the det el is not ...
Definition: TgcPrepData.h:120
MuonGM::sTgcReadoutElement::isEtaZero
bool isEtaZero(const Identifier &id, const Amg::Vector2D &localPosition) const
is eta=0 of QL1 or QS1? Support for Strip and Pad cathodes is valid when the Strip,...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:382
Trk::TrkDetElementBase
Definition: TrkDetElementBase.h:52
Muon::RpcClusterOnTrack
Class to represent calibrated clusters formed from RPC strips.
Definition: RpcClusterOnTrack.h:35
MuonGM::sTgcReadoutElement::spacePointPosition
virtual bool spacePointPosition(const Identifier &phiId, const Identifier &etaId, Amg::Vector2D &pos) const override final
space point position for a given pair of phi and eta identifiers The LocalPosition is expressed in th...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:436
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:45
MuonGM::TgcReadoutElement::stripDir
Amg::Vector3D stripDir(int gasGap, int strip) const
Returns the direction of a strip.
yodamerge_tmp.scale
scale
Definition: yodamerge_tmp.py:138
Muon::MuonClusterOnTrackCreator::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonClusterOnTrackCreator.h:81
TgcPrepData.h
MuonGM::MuonClusterReadoutElement::surface
virtual const Trk::PlaneSurface & surface() const override
access to chamber surface (phi orientation), uses the first gas gap
Definition: MuonClusterReadoutElement.h:123
Muon::MuonClusterOnTrackCreator::MuonClusterOnTrackCreator
MuonClusterOnTrackCreator(const std::string &, const std::string &, const IInterface *)
Definition: MuonClusterOnTrackCreator.cxx:33
MMClusterOnTrack.h
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Trk::DefinedParameter
std::pair< double, ParamDefs > DefinedParameter
Definition: DefinedParameter.h:27
TgcClusterOnTrack.h
Muon::RpcPrepData::time
float time() const
Returns the time.
Definition: RpcPrepData.h:197
sTgcPrepData.h
RpcClusterOnTrack.h
Muon::MuonClusterOnTrackCreator::m_doFixedErrorRpcEta
Gaudi::Property< bool > m_doFixedErrorRpcEta
Definition: MuonClusterOnTrackCreator.h:90
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
Trk::locZ
@ locZ
local cylindrical
Definition: ParamDefs.h:42
MuonGM::RpcReadoutElement::distanceToPhiReadout
double distanceToPhiReadout(const Amg::Vector3D &P) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/RpcReadoutElement.cxx:223
Muon::RpcPrepData
Class to represent RPC measurements.
Definition: RpcPrepData.h:35
Muon::RpcPrepData::detectorElement
virtual const MuonGM::RpcReadoutElement * detectorElement() const override final
Returns the detector element corresponding to this PRD.
Definition: RpcPrepData.h:202
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
sTgcIdHelper::Wire
@ Wire
Definition: sTgcIdHelper.h:190
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MuonGM::sTgcReadoutElement
An sTgcReadoutElement corresponds to a single STGC module; therefore typicaly a barrel muon station c...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:30
Muon::MuonClusterOnTrackCreator::m_fixedErrorTgcEta
Gaudi::Property< double > m_fixedErrorTgcEta
Definition: MuonClusterOnTrackCreator.h:93
MuonGM::TgcReadoutElement
A TgcReadoutElement corresponds to a single TGC chamber; therefore typically a TGC station contains s...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/TgcReadoutElement.h:42
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
EL
This module defines the arguments passed from the BATCH driver to the BATCH worker.
Definition: AlgorithmWorkerData.h:24
Trk::PlaneSurface::globalToLocalDirection
void globalToLocalDirection(const Amg::Vector3D &glodir, Trk::LocalDirection &locdir) const
This method transforms the global direction to a local direction wrt the plane.
Definition: PlaneSurface.cxx:260
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
Trk::ParametersBase
Definition: ParametersBase.h:55
Trk::LocalDirection
represents the three-dimensional global direction with respect to a planar surface frame.
Definition: LocalDirection.h:81
Muon::sTgcClusterOnTrack
Class to represent calibrated clusters formed from TGC strips.
Definition: sTgcClusterOnTrack.h:30
Trk::PrepRawData
Definition: PrepRawData.h:62
Muon::MMClusterOnTrack
Class to represent calibrated clusters formed from TGC strips.
Definition: MMClusterOnTrack.h:26
Trk::PrepRawData::identify
Identifier identify() const
return the identifier
Muon::MuonClusterOnTrackCreator::m_doFixedErrorTgcPhi
Gaudi::Property< bool > m_doFixedErrorTgcPhi
Definition: MuonClusterOnTrackCreator.h:91
MuonGM::RpcReadoutElement::stripPos
Amg::Vector3D stripPos(const Identifier &id) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/RpcReadoutElement.cxx:177
Trk::PrepRawData::localPosition
const Amg::Vector2D & localPosition() const
return the local position reference
python.PhysicalConstants.c_light
float c_light
Definition: PhysicalConstants.py:63
Trk::Surface::insideBounds
virtual bool insideBounds(const Amg::Vector2D &locpos, double tol1=0., double tol2=0.) const =0
virtual methods to be overwritten by the inherited surfaces
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
LocalParameters.h
MuonGM::TgcReadoutElement::stripPitch
double stripPitch(int gasGap, int strip) const
Returns the pitch of the given strip in gasGap i.
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:176
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
Muon::sTgcPrepData::detectorElement
virtual const MuonGM::sTgcReadoutElement * detectorElement() const override final
Returns the detector element corresponding to this PRD.
Definition: sTgcPrepData.h:139
MuonClusterOnTrackCreator.h
Trk::Surface::globalToLocal
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const =0
Specified by each surface type: GlobalToLocal method without dynamic memory allocation - boolean chec...
MuonGM::MMReadoutElement::spacePointPosition
virtual bool spacePointPosition(const Identifier &phiId, const Identifier &etaId, Amg::Vector2D &pos) const override final
space point position for a given pair of phi and eta identifiers The LocalPosition is expressed in th...
Definition: MMReadoutElement.h:310
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Trk::PlaneSurface
Definition: PlaneSurface.h:64
Muon::MuonClusterOnTrackCreator::m_calibToolNSW
ToolHandle< Muon::INSWCalibTool > m_calibToolNSW
Definition: MuonClusterOnTrackCreator.h:83
Muon::MuonClusterOnTrackCreator::m_fixedErrorTgcPhi
Gaudi::Property< double > m_fixedErrorTgcPhi
Definition: MuonClusterOnTrackCreator.h:95
Muon::NswClustering::toLocal
Amg::Vector3D toLocal(const Trk::Surface &surf, const Amg::Vector3D &dir)
Rotates a direction vector into a local frame: x-axis : Parallell to the radial direction of the dete...
Definition: NswClusteringUtils.h:21
Muon::TgcPrepData
Class to represent TGC measurements.
Definition: TgcPrepData.h:32
MuonGM::MMReadoutElement
An MMReadoutElement corresponds to a single STGC module; therefore typicaly a barrel muon station con...
Definition: MMReadoutElement.h:25
Muon::MuonClusterOnTrackCreator::calibratedClusterSTG
MuonClusterOnTrack * calibratedClusterSTG(const Trk::PrepRawData &RIO, const Amg::Vector3D &GP, const Amg::Vector3D &GD) const
Definition: MuonClusterOnTrackCreator.cxx:346
Muon::MuonClusterOnTrackCreator::m_doFixedErrorTgcEta
Gaudi::Property< bool > m_doFixedErrorTgcEta
Definition: MuonClusterOnTrackCreator.h:89
Muon::MuonClusterOnTrackCreator::correct
virtual MuonClusterOnTrack * correct(const Trk::PrepRawData &RIO, const Trk::TrackParameters &TP, const EventContext &) const override
Create new Muon::MuonClusterOnTrack from a Trk::PrepRawData and the predicted Trk::TrackParameter at ...
Definition: MuonClusterOnTrackCreator.cxx:247
LocalDirection.h
MuonGM::RpcReadoutElement::distanceToEtaReadout
double distanceToEtaReadout(const Amg::Vector3D &P) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/RpcReadoutElement.cxx:278
Muon::MuonClusterOnTrackCreator::calibratedClusterMMG
MuonClusterOnTrack * calibratedClusterMMG(const Trk::PrepRawData &RIO, const Amg::Vector3D &GP, const Amg::Vector3D &GD) const
Definition: MuonClusterOnTrackCreator.cxx:270
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
AthAlgTool
Definition: AthAlgTool.h:26
RpcPrepData.h
Muon::MMClusterOnTrack::Author
Author
Definition: MMClusterOnTrack.h:89
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
Muon::sTgcPrepData
Class to represent sTgc measurements.
Definition: sTgcPrepData.h:20
Trk::Surface::transform
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
Muon::MuonClusterOnTrackCreator::m_fixedErrorRpcEta
Gaudi::Property< double > m_fixedErrorRpcEta
Definition: MuonClusterOnTrackCreator.h:94
geometry_dat_to_json.ld
ld
Definition: geometry_dat_to_json.py:32
Muon::MMClusterOnTrack::setAuthor
void setAuthor(Author a)
Definition: MMClusterOnTrack.h:119
Muon::MuonClusterOnTrack
Base class for Muon cluster RIO_OnTracks.
Definition: MuonClusterOnTrack.h:34
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
Trk::PrepRawData::detectorElement
virtual const TrkDetElementBase * detectorElement() const =0
return the detector element corresponding to this PRD The pointer will be zero if the det el is not d...