79 MuonDetMgr = DetectorManagerHandle.
cptr();
80 if (MuonDetMgr ==
nullptr) {
81 ATH_MSG_ERROR(
"Null pointer to the read MuonDetectorManager conditions object");
91 if (!lay || !parm || !
id.get_identifier32().get_compact())
return projPar;
99 unsigned int hitType = 0;
105 unsigned int layType = 0;
111 if (layType != hitType)
return projPar;
120 ATH_MSG_DEBUG(
"extrapolated covariance:" << parm->covariance());
131 if (fabs(lay->
getRef()) > 10e6) {
133 int dec = int(lay->
getRef() / 1.e5);
134 double ref0 = dec / 1.e5;
135 double ref1 = lay->
getRef() - dec * 1e5 - 0.5 * (
sign + 1) * 1e5;
140 if (tube > 6 &&
tubeMax - tube > 5) locWire[0] = 0.;
142 if (sqrt(locWire[0] * locWire[0] + locWire[1] * locWire[1]) > 2000.) {
145 <<
": abandon projection");
154 double DL = locDir.dot(wireDir);
155 double A = sqrt(1. - DL * DL);
157 mdtProj.setIdentity();
162 mdtProj(0, 1) = ND /
A;
164 mdtProj(1, 1) = DL /
A * sqrt(
A *
A - ND * ND) /
A;
174 locPar[0] -= locWire[0];
175 locPar[1] -= locWire[1];
179 if (parm->covariance()) {
180 std::optional<
AmgMatrix(5, 5)> projEM = parm->covariance()->similarity(mdtProj);
181 ATH_MSG_DEBUG(
"projected covariance(layer->MDT):" << (*projEM));
182 projPar =
new Trk::AtaStraightLine(pPar[0], pPar[1], pPar[2], pPar[3], pPar[4], *tubeSurf, projEM);
192 if (!rpcROE)
return projPar;
194 if (!stripSurf)
return projPar;
206 double zswap = (lay->
getRef() > 10000.) ? -1. : 1.;
221 if (parm->covariance()) {
222 projEM = parm->covariance()->similarity(*pMx);
223 projPar =
new Trk::AtaPlane(pPar[0], pPar[1], pPar[2], pPar[3], pPar[4], *stripSurf, projEM);
226 projPar =
new Trk::AtaPlane(pPar[0], pPar[1], pPar[2], pPar[3], pPar[4], *stripSurf);
227 projEM = std::nullopt;
231 ATH_MSG_DEBUG(
"geometrical RPC projection (layerToDetEl) for hit : "
238 bool onSurface = stripSurf->
globalToLocal(globPos, globPos, locPos);
244 projPar = projEM ?
new Trk::AtaPlane(pPar[0], pPar[1], pPar[2], pPar[3], pPar[4], *stripSurf, projEM)
245 :
new Trk::AtaPlane(pPar[0], pPar[1], pPar[2], pPar[3], pPar[4], *stripSurf);
262 if (!stripSurf)
return projPar;
267 double DN = parm->
momentum().dot(layNormal);
268 double t =
diff / DN;
284 parProj[2] = parm->parameters()[
Trk::phi];
296 if (parm->covariance()) {
297 std::optional<
AmgMatrix(5, 5)> projEM = parm->covariance()->similarity(*pMx);
299 ATH_MSG_DEBUG(
"projected covariance (layer->CSC):" << *projEM);
301 projPar =
new Trk::AtaPlane(locPar[0], locPar[1], locPar[2], locPar[3], locPar[4], *stripSurf, projEM);
304 projPar =
new Trk::AtaPlane(locPar[0], locPar[1], locPar[2], locPar[3], locPar[4], *stripSurf);
317 if (!stripSurf)
return projPar;
328 std::optional<
AmgMatrix(5, 5)> projEM = std::nullopt;
331 if (parm->covariance()) {
332 projEM = parm->covariance()->similarity(*pMx);
334 ATH_MSG_DEBUG(
"projected covariance (layer->TGC):" << (*projEM));
335 projPar =
new Trk::AtaPlane(locPar[0], locPar[1], locPar[2], locPar[3], locPar[4], *stripSurf, projEM);
338 projPar =
new Trk::AtaPlane(locPar[0], locPar[1], locPar[2], locPar[3], locPar[4], *stripSurf);
348 bool onSurface = stripSurf->
globalToLocal(globPos, globPos, locPos);
350 locPar[0] = locPos[0];
351 locPar[1] = locPos[1];
354 projPar = bcov ?
new Trk::AtaPlane(locPar[0], locPar[1], locPar[2], locPar[3], locPar[4], *stripSurf, projEM)
355 :
new Trk::AtaPlane(locPar[0], locPar[1], locPar[2], locPar[3], locPar[4], *stripSurf);
373 if (!lay || !parm || !(
id.get_identifier32().get_compact() > 0))
return projPar;
381 unsigned int hitType = 0;
387 unsigned int layType = 0;
393 if (layType != hitType)
return projPar;
404 if (fabs(lay->
getRef()) > 10e6) {
406 int dec = int(lay->
getRef() / 1.e5);
407 double ref0 = dec / 1.e5;
408 double ref1 = lay->
getRef() - dec * 1e5 - 0.5 * (
sign + 1) * 1e5;
413 if (tube > 6 &&
tubeMax - tube > 5) locWire[0] = 0.;
415 if (sqrt(locWire[0] * locWire[0] + locWire[1] * locWire[1]) > 2000.) {
418 <<
": abandon projection");
429 if (!laySurf)
return projPar;
431 double ND = dir.dot(normal);
432 double DL = locDir.dot(wireDir);
433 double A = sqrt(1. - DL * DL);
435 mdtProj.setIdentity();
439 mdtProj(0, 1) = ND /
A;
441 mdtProj(1, 1) = DL /
A * sqrt(
A *
A - ND * ND) /
A;
450 AmgMatrix(5, 5) mdtProjInv = mdtProj.inverse();
452 pPar[0] += locWire[0];
453 pPar[1] += locWire[1];
454 ATH_MSG_DEBUG(
"back projected parameters(MDT->layer):" << pPar);
456 std::optional<
AmgMatrix(5, 5)> projEM = parm->covariance()->similarity(mdtProjInv);
458 ATH_MSG_DEBUG(
"back projected covariance(MDT->layer):" << (*projEM));
459 projPar =
new Trk::AtaPlane(pPar[0], pPar[1], pPar[2], pPar[3], pPar[4], *laySurf, projEM);
467 if (!laySurf)
return projPar;
480 double zswap = (lay->
getRef() > 10000.) ? -1. : 1.;
497 std::optional<
AmgMatrix(5, 5)> projEM = parm->covariance()->similarityT(*pMx);
499 ATH_MSG_DEBUG(
"back projected covariance(RPC->layer):" << (*projEM));
500 projPar =
new Trk::AtaPlane(pPar[0], pPar[1], pPar[2], pPar[3], pPar[4], *laySurf, projEM);
504 ATH_MSG_DEBUG(
"geometrical RPC projection (detElToLayer) for hit : "
511 bool onSurface = laySurf->
globalToLocal(globPos, globPos, locPos);
516 projPar =
new Trk::AtaPlane(pPar[0], pPar[1], pPar[2], pPar[3], pPar[4], *laySurf, projEM);
529 if (!laySurf)
return projPar;
534 double DN = parm->
momentum().dot(layNormal);
535 double t =
diff / DN;
549 if (onSurface && locCorrLay.size() > 0) {
554 std::optional<
AmgMatrix(5, 5)> projEM = parm->covariance()->similarity(pMxInv);
556 ATH_MSG_DEBUG(
"back projected covariance(CSC->layer):" << (*projEM));
557 projPar =
new Trk::AtaPlane(parProj[0], parProj[1], parProj[2], parProj[3], parProj[4], *laySurf, projEM);
564 if (!laySurf) {
return projPar; }
575 std::optional<
AmgMatrix(5, 5)> projEM = parm->covariance()->similarity(pMxInv);
577 ATH_MSG_DEBUG(
"back projected covariance(TGC->layer):" << (*projEM));
578 projPar =
new Trk::AtaPlane(locPar[0], locPar[1], locPar[2], locPar[3], locPar[4], *laySurf, projEM);
587 bool onSurface = laySurf->
globalToLocal(globPos, globPos, locPos);
589 locPar[0] = locPos[0];
590 locPar[1] = locPos[1];
593 projPar =
new Trk::AtaPlane(locPar[0], locPar[1], locPar[2], locPar[3], locPar[4], *laySurf, projEM);
794 double& pitch)
const {
798 MuonDetMgr = DetectorManagerHandle.
cptr();
799 if (MuonDetMgr ==
nullptr) {
ATH_MSG_ERROR(
"Null pointer to the read MuonDetectorManager conditions object"); }
805 if (!lay || !parm || !lay->
layerType())
return nid;
810 unsigned int hitType = 0;
823 if (!mdtROE)
return nid;
829 if (!onSurface || measPhi) {
return nid; }
831 double refL = lay->
getRef();
832 if (fabs(refL) > 10e6) {
834 int dec = int(lay->
getRef() / 1.e5);
835 refL = lay->
getRef() - dec * 1e5 - 0.5 * (
sign + 1) * 1e5;
837 double dloc = locLay[
Trk::locY] - refL + 15.0175;
838 int itube = int(dloc / 30.035) + 1;
839 if (itube < 1 || itube > tMax || dloc < 0.) {
return nid; }
861 bool foundDoubletPhi =
false;
863 while (!foundDoubletPhi && doubletPhi < 3) {
869 if (!rpcROE)
return nid;
870 if (!
m_idHelperSvc->rpcIdHelper().valid(refPhi1))
return nid;
871 int nStripPhi = rpcROE->
Nstrips(1);
889 if (onSurface1 && onSurfaceN && onSurface) {
892 strip = dstrip >= 0. ? int(dstrip) + 1 : 0;
900 foundDoubletPhi =
true;
909 if (!foundDoubletPhi)
return nid;
914 while (doubletZ < 4) {
920 if (!rpcROE)
return nid;
921 if (!
m_idHelperSvc->rpcIdHelper().valid(refEta1))
return nid;
922 int nStrips = rpcROE->
Nstrips(0);
941 if (onSurface && onSurface1 && onSurfaceN) {
945 strip = dstrip >= 0. ? int(dstrip) + 1 : 0;
973 if (!refPar)
return nid;
990 m_idHelperSvc->cscIdHelper().wireLayer(refId), measPhi, nStrips);
996 pitch = (locN[0] - loc1[0]) / fmax(1, nStrips - 1);
1007 if (fabs(
residual(parm, nearId)) > 0.5 * pitch)
1025 if (!refPar)
return nid;
1032 int nStrips =
m_idHelperSvc->tgcIdHelper().channelMax(refId);
1051 if (onSurface1 && onSurfaceN) {
1055 ATH_MSG_DEBUG(
"local position of boundary elements not retrieved, return 0 ");
1077 while (fabs(stripposition[0] - localhit[0]) > 0.5 * pitch) {
1078 if (stripposition[0] < localhit[0]) {