42 {
43 MuonClusterOnTrack* MClT = nullptr;
44
45
47
49
50
52
55 } else {
57 locpar = Trk::LocalParameters(radiusPar);
59 }
60
62 double positionAlongStrip{0};
63 double positionAlongZ{0};
64
65 const Trk::Surface& rio_surface =
EL->surface(RIO.
identify());
68 ATH_MSG_WARNING(
"Extrapolated GlobalPosition not on detector surface! Distance " << lpos.z());
71 positionAlongZ = lpos.z();
72 }
73
75
81
82
83
86
92 mat(0, 0) = fixedError * fixedError;
94 }
95
96 const MuonGM::RpcReadoutElement*
re = MClus->detectorElement();
98
99
100 double timeAlongStrip = 0;
101 if (!measphi) {
102 timeAlongStrip =
re->distanceToEtaReadout(GP) / 1000. * SIG_VEL;
103 } else {
104 timeAlongStrip =
re->distanceToPhiReadout(GP) / 1000. * SIG_VEL;
105 }
106 if (positionAlongZ) timeAlongStrip = 0;
107
108
109 double assignedTimFromPrd = 0;
110 if (!measphi) {
111 assignedTimFromPrd =
re->distanceToEtaReadout(clusPos) / 1000. * SIG_VEL;
112 } else {
113 assignedTimFromPrd =
re->distanceToPhiReadout(clusPos) / 1000. * SIG_VEL;
114 }
115
116
117 double real_TOF_onRPCgap = GP.mag() / 1000. * C_VEL;
118 double nominal_TOF_onRPCgap = clusPos.mag() / 1000. * C_VEL;
119
120
121 double correct_time_tot = real_TOF_onRPCgap
122 - nominal_TOF_onRPCgap
123 + timeAlongStrip
124 - assignedTimFromPrd;
125
126 MClT = new RpcClusterOnTrack(MClus, std::move(locpar), std::move(loce),
127 positionAlongStrip, MClus->time() - correct_time_tot);
128
129 ATH_MSG_DEBUG(
" correct_time_along_strip " << timeAlongStrip <<
" assignedTimFromPrd "
130 << assignedTimFromPrd << " real_TOF_onRPCgap " << real_TOF_onRPCgap
131 << " nominal_TOF_onRPCgap " << nominal_TOF_onRPCgap << " MClus->time() "
132 << MClus->time() << " correct_time_tot " << correct_time_tot);
133 break;
134
136
137
138
139
140
143
144
148
149 const MuonGM::TgcReadoutElement* ele = MClus->detectorElement();
150
155
157
158 double phistereo = lStripDir.phi() - 90.*Gaudi::Units::deg;
159 double Sn = std::sin(phistereo);
160 double Sn2 = Sn * Sn;
161 double Cs2 = 1. - Sn2;
162
163 double V0 = stripWidth * stripWidth / 12;
165 double V1 = stripLength * stripLength / 12;
166 mat(0, 0) = (Cs2 *
V0 + Sn2 *
V1);
167 mat.fillSymmetric(1, 0, (Sn * std::sqrt(Cs2) * (V0 - V1)));
168 mat(1, 1) = (Sn2 *
V0 + Cs2 *
V1);
170 } else {
175 }
176 }
177
178 MClT = new TgcClusterOnTrack(MClus, std::move(locpar), std::move(loce),
179 positionAlongStrip);
180 break;
181
183
184
185
186
187
190
191
193 MClus->detectorElement()->isEtaZero(MClus->identify(), lp)) {
196 return nullptr;
197 }
198
203 return nullptr;
204 }
205 MClT = new sTgcClusterOnTrack(MClus, std::move(locpar),
206 std::move(loce), positionAlongStrip);
207 break;
208
210
211
212
214 MClT = new MMClusterOnTrack(mmPRD, std::move(locpar), std::move(loce),
215 positionAlongStrip, {}, {});
216 break;
217 } default:
220 }
221
222 return MClT;
223 }
const boost::regex re(r_e)
virtual const Amg::Transform3D & transform() const override
Return local to global transform.
Amg::Vector3D stripDir(int gasGap, int strip) const
Returns the direction of a strip.
double stripLength() const
Returns the length of each strip which is equal to the height of the chamber.
double stripPitch(int gasGap, int strip) const
Returns the pitch of the given strip in gasGap i.
Gaudi::Property< bool > m_doFixedErrorRpcEta
Gaudi::Property< bool > m_doFixedErrorTgcEta
Gaudi::Property< bool > m_doFixedErrorRpcPhi
Gaudi::Property< double > m_fixedErrorTgcEta
Gaudi::Property< double > m_fixedErrorRpcEta
Gaudi::Property< double > m_fixedErrorRpcPhi
Gaudi::Property< bool > m_doFixedErrorTgcPhi
Gaudi::Property< double > m_fixedErrorTgcPhi
int channel(const Identifier &id) const override
int gasGap(const Identifier &id) const override
get the hashes
bool measuresPhi(const Identifier &id) const override
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 insideBounds(const Amg::Vector2D &locpos, double tol1=0., double tol2=0.) const =0
virtual methods to be overwritten by the inherited surfaces
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.