|
ATLAS Offline Software
|
Go to the documentation of this file.
24 #include "GaudiKernel/PhysicalConstants.h"
27 constexpr
double SIG_VEL = 4.80000;
36 declareInterface<IMuonClusterOnTrackCreator>(
this);
37 declareInterface<IRIO_OnTrackCreator>(
this);
47 return StatusCode::SUCCESS;
59 ATH_MSG_WARNING(
"RIO does not have associated detectorElement!, cannot produce ROT");
82 double positionAlongStrip{0};
83 double positionAlongZ{0};
88 ATH_MSG_WARNING(
"Extrapolated GlobalPosition not on detector surface! Distance " << lpos.z());
91 positionAlongZ = lpos.z();
108 double fixedError = 1.;
120 mat(0, 0) = fixedError * fixedError;
128 double correct_time_along_strip = 0;
134 if (positionAlongZ) correct_time_along_strip = 0;
137 double av_correct_time_along_strip = 0;
139 av_correct_time_along_strip = rpc_readout_element->
distanceToEtaReadout(posi) / 1000. * SIG_VEL;
141 av_correct_time_along_strip = rpc_readout_element->
distanceToPhiReadout(posi) / 1000. * SIG_VEL;
145 double real_TOF_onRPCgap = GP.mag() / 1000. * C_VEL;
146 double nominal_TOF_onRPCgap = posi.mag() / 1000. * C_VEL;
149 double correct_time_tot = real_TOF_onRPCgap - nominal_TOF_onRPCgap + correct_time_along_strip - av_correct_time_along_strip;
151 MClT =
new RpcClusterOnTrack(MClus, std::move(locpar), std::move(loce), positionAlongStrip, MClus->
time() - correct_time_tot);
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);
168 if (idHelper.measuresPhi(RIO.
identify())) {
169 const int stripNo = idHelper.channel(RIO.
identify());
183 double Sn2 = Sn * Sn;
184 double Cs2 = 1. - Sn2;
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);
201 MClT =
new TgcClusterOnTrack(MClus, std::move(locpar), std::move(loce), positionAlongStrip);
225 MClT =
new sTgcClusterOnTrack(MClus, std::move(locpar), std::move(loce), positionAlongStrip);
234 MClT =
new MMClusterOnTrack(mmPRD, std::move(locpar), std::move(loce), positionAlongStrip, {}, {});
271 const EventContext& ctx{Gaudi::Hive::currentContext()};
275 ATH_MSG_WARNING(
"RIO does not have associated detectorElement! Skipping cluster calibration");
289 ATH_MSG_WARNING(
"Extrapolated GlobalPosition not on detector surface! Distance " << lpos.z());
300 std::vector<NSWCalib::CalibratedStrip> calibratedStrips;
302 if (
sc != StatusCode::SUCCESS) {
303 ATH_MSG_WARNING(
"Could not calibrate the MM Cluster in the RIO on track creator");
313 if (rotAuthor == IMMClusterBuilderTool::RIO_Author::unKnownAuthor) {
314 ATH_MSG_WARNING(
"Could not calibrate the MM Cluster in the RIO on track creator");
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();
351 ATH_MSG_WARNING(
"RIO does not have associated detectorElement! Skipping cluster calibration");
367 ATH_MSG_WARNING(
"Extrapolated GlobalPosition not on detector surface! Distance " << lpos.z());
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();
392 ATH_MSG_VERBOSE(
"generating sTgcClusterOnTrack in MuonClusterBuilder");
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...
virtual const Amg::Transform3D & transform() const override
Return local to global transform.
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.
Class to represent MM measurements.
virtual StatusCode initialize() override
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Gaudi::Property< bool > m_doFixedErrorRpcPhi
ToolHandle< Muon::IMMClusterBuilderTool > m_clusterBuilderToolMM
Gaudi::Property< double > m_fixedErrorRpcPhi
const Amg::Vector3D & position() const
Access method for the position.
Eigen::Matrix< double, 2, 1 > Vector2D
const Amg::MatrixX & localCovariance() const
return const ref to the error matrix
Class to represent calibrated clusters formed from TGC strips.
double stripLength() const
Returns the length of each strip which is equal to the height of the chamber.
An RpcReadoutElement corresponds to a single RPC module; therefore typicaly a barrel muon station con...
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 ...
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,...
Class to represent calibrated clusters formed from RPC strips.
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...
#define ATH_MSG_VERBOSE(x)
This class provides conversion from CSC RDO data to CSC Digits.
Amg::Vector3D stripDir(int gasGap, int strip) const
Returns the direction of a strip.
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
virtual const Trk::PlaneSurface & surface() const override
access to chamber surface (phi orientation), uses the first gas gap
MuonClusterOnTrackCreator(const std::string &, const std::string &, const IInterface *)
std::pair< double, ParamDefs > DefinedParameter
float time() const
Returns the time.
Gaudi::Property< bool > m_doFixedErrorRpcEta
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
double distanceToPhiReadout(const Amg::Vector3D &P) const
Class to represent RPC measurements.
virtual const MuonGM::RpcReadoutElement * detectorElement() const override final
Returns the detector element corresponding to this PRD.
::StatusCode StatusCode
StatusCode definition for legacy code.
An sTgcReadoutElement corresponds to a single STGC module; therefore typicaly a barrel muon station c...
Gaudi::Property< double > m_fixedErrorTgcEta
A TgcReadoutElement corresponds to a single TGC chamber; therefore typically a TGC station contains s...
This module defines the arguments passed from the BATCH driver to the BATCH worker.
void globalToLocalDirection(const Amg::Vector3D &glodir, Trk::LocalDirection &locdir) const
This method transforms the global direction to a local direction wrt the plane.
represents the three-dimensional global direction with respect to a planar surface frame.
Class to represent calibrated clusters formed from TGC strips.
Class to represent calibrated clusters formed from TGC strips.
Identifier identify() const
return the identifier
Gaudi::Property< bool > m_doFixedErrorTgcPhi
Amg::Vector3D stripPos(const Identifier &id) const
const Amg::Vector2D & localPosition() const
return the local position reference
virtual bool insideBounds(const Amg::Vector2D &locpos, double tol1=0., double tol2=0.) const =0
virtual methods to be overwritten by the inherited surfaces
Eigen::Matrix< double, 3, 1 > Vector3D
double stripPitch(int gasGap, int strip) const
Returns the pitch of the given strip in gasGap i.
const Amg::Vector3D & momentum() const
Access method for the momentum.
virtual const MuonGM::sTgcReadoutElement * detectorElement() const override final
Returns the detector element corresponding to this PRD.
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...
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...
#define ATH_MSG_WARNING(x)
ToolHandle< Muon::INSWCalibTool > m_calibToolNSW
Gaudi::Property< double > m_fixedErrorTgcPhi
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...
Class to represent TGC measurements.
An MMReadoutElement corresponds to a single STGC module; therefore typicaly a barrel muon station con...
MuonClusterOnTrack * calibratedClusterSTG(const Trk::PrepRawData &RIO, const Amg::Vector3D &GP, const Amg::Vector3D &GD) const
Gaudi::Property< bool > m_doFixedErrorTgcEta
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 ...
double distanceToEtaReadout(const Amg::Vector3D &P) const
MuonClusterOnTrack * calibratedClusterMMG(const Trk::PrepRawData &RIO, const Amg::Vector3D &GP, const Amg::Vector3D &GD) const
Class to represent sTgc measurements.
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
Gaudi::Property< double > m_fixedErrorRpcEta
Base class for Muon cluster RIO_OnTracks.
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...