diff --git a/DetectorDescription/ReadoutGeometryBase/src/DetectorDesign.cxx b/DetectorDescription/ReadoutGeometryBase/src/DetectorDesign.cxx index fdc8b1a9845eca0c7d83b2aa41edab3ed700383a..e08509ff91f737787d08821907771d49386cf1a9 100644 --- a/DetectorDescription/ReadoutGeometryBase/src/DetectorDesign.cxx +++ b/DetectorDescription/ReadoutGeometryBase/src/DetectorDesign.cxx @@ -125,7 +125,7 @@ SiIntersect DetectorDesign::inDetector(const SiLocalPosition &localPosition, } const Amg::Transform3D DetectorDesign::SiHitToGeoModel() const { - return Amg::Transform3D(); + return Amg::Transform3D::Identity(); } } // namespace InDetDD diff --git a/DetectorDescription/ReadoutGeometryBase/src/SolidStateDetectorElementBase.cxx b/DetectorDescription/ReadoutGeometryBase/src/SolidStateDetectorElementBase.cxx index 12a66908fe430dad6cb702d024fe34801efdcbfc..631d20410f94dbe6a366768ccd17607c35f5b319 100644 --- a/DetectorDescription/ReadoutGeometryBase/src/SolidStateDetectorElementBase.cxx +++ b/DetectorDescription/ReadoutGeometryBase/src/SolidStateDetectorElementBase.cxx @@ -58,12 +58,12 @@ using Trk::distDepth; const GeoTrf::Transform3D& SolidStateDetectorElementBase::transformHit() const { - if (!m_cacheValid) { + if (!m_cacheValid) { std::lock_guard<std::mutex> lock(m_mutex); if (!m_cacheValid) updateCache(); } - - return m_transformHit; + + return m_transformHit; } const HepGeom::Transform3D& @@ -365,18 +365,27 @@ using Trk::distDepth; void SolidStateDetectorElementBase::updateCache() const { - //Need to check if this is the same as - const GeoTrf::Transform3D &geoTransform = getMaterialGeom()->getAbsoluteTransform(); - //const GeoTrf::Transform3D& geoTransform = transformHit(); + + // use aligned transform if available + const GeoTrf::Transform3D* ptrXf; + + if (m_geoAlignStore){ + ptrXf = m_geoAlignStore->getAbsPosition(getMaterialGeom()); + if (ptrXf) { + m_transformHit = (*ptrXf) * m_design->SiHitToGeoModel(); + } + } + else{ + m_transformHit = (getMaterialGeom()->getAbsoluteTransform() * m_design->SiHitToGeoModel()); + } + + const GeoTrf::Transform3D& geoTransform = m_transformHit; m_baseCacheValid = true; bool firstTimeBaseTmp = m_firstTimeBase; m_firstTimeBase = false; - //Previous (21.9) had... - // m_centerCLHEP = geoTransform * m_design->sensorCenter(); - //m_center = Amg::Vector3D(m_centerCLHEP[0],m_centerCLHEP[1],m_centerCLHEP[2]); m_center = geoTransform * m_design->sensorCenter(); Amg::Vector3D centerGeoModel(0., 0., 0.); @@ -392,9 +401,9 @@ using Trk::distDepth; // depthAxis, phiAxis, and etaAxis are defined to be x,y,z respectively for all detectors for hit local frame. // depthAxis, phiAxis, and etaAxis are defined to be z,x,y respectively for all detectors for reco local frame. static const Amg::Vector3D localAxes[3] = { - Amg::Vector3D(1,0,0), - Amg::Vector3D(0,1,0), - Amg::Vector3D(0,0,1) + Amg::Vector3D(1.,0.,0.), + Amg::Vector3D(0.,1.,0.), + Amg::Vector3D(0.,0.,1.) }; static const Amg::Vector3D & localRecoPhiAxis = localAxes[distPhi]; // Defined to be same as x axis @@ -410,33 +419,36 @@ using Trk::distDepth; const Amg::Vector3D &geoModelEtaAxis = localAxes[m_hitEta]; const Amg::Vector3D &geoModelDepthAxis = localAxes[m_hitDepth]; - Amg::Vector3D globalDepthAxis(geoTransform * geoModelDepthAxis); - Amg::Vector3D globalPhiAxis(geoTransform * geoModelPhiAxis); - Amg::Vector3D globalEtaAxis(geoTransform * geoModelEtaAxis); + Amg::Vector3D globalDepthAxis(geoTransform.linear() * geoModelDepthAxis); + Amg::Vector3D globalPhiAxis(geoTransform.linear() * geoModelPhiAxis); + Amg::Vector3D globalEtaAxis(geoTransform.linear() * geoModelEtaAxis); // unit radial vector Amg::Vector3D unitR(m_center.x(), m_center.y(), 0.); unitR.normalize(); - Amg::Vector3D nominalEta; - Amg::Vector3D nominalNormal; - Amg::Vector3D nominalPhi(-unitR.y(), unitR.x(), 0); + Amg::Vector3D nominalEta(0.0,0.0,1.0); + Amg::Vector3D nominalNormal(0.0,0.0,0.0); + Amg::Vector3D nominalPhi(-unitR.y(), unitR.x(), 0.0); // In Barrel like geometry, the etaAxis is along increasing z, and normal is in increasing radial direction. // In Endcap like geometry, the etaAxis is along increasing r, and normal is in decreasing z direction, // We base whether it is barrel like or endcap like by the orientation of the local z axis of the // the element. This allows the use of endcap identifiers in a TB setup. - nominalEta(2) = 1; + + nominalEta(2) = 1.0; + m_barrelLike = true; + if (std::abs(globalEtaAxis.dot(nominalEta)) < 0.5) { // Check that it is in roughly the right direction. Allowed not to be for ITK inclined/barrel ring modules m_barrelLike = false; } if (m_barrelLike) { - nominalEta(2) = 1; + nominalEta(2) = 1.0; nominalNormal = unitR; } else { // endcap like - nominalNormal(2) = 1; + nominalNormal(2) = -1.0; nominalEta = unitR; } @@ -495,12 +507,6 @@ using Trk::distDepth; } } // end if (firstTimeBaseTemp) - - // use aligned transform if available - const GeoTrf::Transform3D* ptrXf; - if (m_geoAlignStore) ptrXf = m_geoAlignStore->getAbsPosition(getMaterialGeom()); - if (ptrXf) m_transformHit = (*ptrXf) * m_design->SiHitToGeoModel(); - else m_transformHit = (getMaterialGeom()->getAbsoluteTransform() * m_design->SiHitToGeoModel()); m_transformCLHEP = Amg::EigenTransformToCLHEP(geoTransform) * recoToHitTransformImpl(); m_transform = Amg::CLHEPTransformToEigen(m_transformCLHEP); @@ -525,10 +531,6 @@ using Trk::distDepth; // Initialize various cached members, needs to be done here otherwise the necessary transforms are not yet initialized // The unit vectors m_normal = m_transform * localRecoDepthAxis; - - //m_normalCLHEP - are these actually neeeded anymore? - //m_phiAxisCLHEP = m_transformCLHEP * localRecoPhiAxis; - //m_etaAxisCLHEP = m_transformCLHEP * localRecoEtaAxis; m_phiAxis = m_transform * localRecoPhiAxis; m_etaAxis = m_transform * localRecoEtaAxis;