File indexing completed on 2024-04-06 12:28:46
0001 #include "GlobalDetRodRangeZPhi.h"
0002 #include "DataFormats/GeometrySurface/interface/Plane.h"
0003 #include "DataFormats/GeometrySurface/interface/Bounds.h"
0004 #include "DataFormats/GeometryVector/interface/VectorUtil.h"
0005
0006 #include <array>
0007
0008 GlobalDetRodRangeZPhi::GlobalDetRodRangeZPhi(const Plane& plane) {
0009 float dx = plane.bounds().width() / 2.;
0010 float dy = plane.bounds().length() / 2.;
0011 float dz = plane.bounds().thickness() / 2.;
0012
0013
0014
0015 float deltaZ =
0016 (plane.toGlobal(LocalPoint(0, 0, -dz)).perp() < plane.toGlobal(LocalPoint(0, 0, dz)).perp()) ? -dz : dz;
0017
0018 const std::array<Surface::GlobalPoint, 4> corners{{plane.toGlobal(LocalPoint(-dx, -dy, deltaZ)),
0019 plane.toGlobal(LocalPoint(-dx, dy, deltaZ)),
0020 plane.toGlobal(LocalPoint(dx, -dy, deltaZ)),
0021 plane.toGlobal(LocalPoint(dx, dy, deltaZ))}};
0022
0023 float phimin = corners[0].phi();
0024 float phimax = phimin;
0025
0026 float zmin = corners[0].z();
0027 float zmax = zmin;
0028
0029 for (const auto& corner : corners) {
0030 float phi = corner.phi();
0031 if (Geom::phiLess(phi, phimin))
0032 phimin = phi;
0033 if (Geom::phiLess(phimax, phi))
0034 phimax = phi;
0035
0036 float z = corner.z();
0037 zmin = std::min(zmin, z);
0038 zmax = std::max(zmax, z);
0039 }
0040
0041 theZRange.first = zmin;
0042 theZRange.second = zmax;
0043 thePhiRange.first = phimin;
0044 thePhiRange.second = phimax;
0045 }