22 std::array<std::string, Acts::Surface::SurfaceType::Other>
24 "Cone",
"Cylinder",
"Disc",
"Perigee",
"Plane",
"Straw",
"Curvilinear"};
36 m_surfaceMaterial(other.m_surfaceMaterial) {}
42 m_surfaceMaterial(other.m_surfaceMaterial) {}
51 auto lpResult = globalToLocal(gctx, position, direction);
53 return bcheck ?
bounds().inside(lpResult.value(), bcheck) :
true;
63 const auto alignToBoundWithoutCorrection =
64 alignmentToBoundDerivativeWithoutCorrection(gctx, parameters);
66 const auto alignToPath = alignmentToPathDerivative(gctx, parameters);
73 alignToBoundWithoutCorrection + jacToLocal * pathDerivative * alignToPath;
84 const auto pcRowVec = (
position - center(gctx)).transpose().eval();
86 const auto& rotation =
transform(gctx).rotation();
88 const auto& localXAxis = rotation.col(0);
89 const auto& localYAxis = rotation.col(1);
90 const auto& localZAxis = rotation.col(2);
92 const auto [rotToLocalXAxis, rotToLocalYAxis, rotToLocalZAxis] =
101 pcRowVec * rotToLocalXAxis;
103 pcRowVec * rotToLocalYAxis;
105 pcRowVec * rotToLocalZAxis;
108 localCartesianToBoundLocalDerivative(gctx,
position);
114 loc3DToBoundLoc * alignToLoc3D;
123 const auto direction = parameters.segment<3>(
eFreeDir0);
125 const auto pcRowVec = (
position - center(gctx)).transpose().eval();
127 const auto& rotation =
transform(gctx).rotation();
129 const auto& localZAxis = rotation.col(2);
131 const auto dz = localZAxis.dot(direction);
133 const auto [rotToLocalXAxis, rotToLocalYAxis, rotToLocalZAxis] =
140 -pcRowVec * rotToLocalZAxis /
dz;
146 return shared_from_this();
150 return shared_from_this();
154 if (&other !=
this) {
167 if (&other ==
this) {
197 std::ostream& sl)
const {
198 sl << std::setiosflags(std::ios::fixed);
199 sl << std::setprecision(4);
200 sl <<
name() << std::endl;
201 const Vector3& sfcenter = center(gctx);
202 sl <<
" Center position (x, y, z) = (" << sfcenter.x() <<
", "
203 << sfcenter.y() <<
", " << sfcenter.z() <<
")" << std::endl;
208 sl << std::setprecision(6);
209 sl <<
" Rotation: colX = (" << rotX(0) <<
", " << rotX(1)
210 <<
", " << rotX(2) <<
")" << std::endl;
211 sl <<
" colY = (" << rotY(0) <<
", " << rotY(1)
212 <<
", " << rotY(2) <<
")" << std::endl;
213 sl <<
" colZ = (" << rotZ(0) <<
", " << rotZ(1)
214 <<
", " << rotZ(2) <<
")" << std::endl;
215 sl <<
" Bounds : " <<
bounds();
216 sl << std::setprecision(-1);
221 std::stringstream ss;
233 return Vector3(tMatrix(0, 3), tMatrix(1, 3), tMatrix(2, 3));
238 return normal(gctx,
Vector2(Vector2::Zero()));
243 if (m_associatedDetElement !=
nullptr) {
244 return m_associatedDetElement->transform(gctx);
251 return bounds().inside(lposition, bcheck);
257 return transform(gctx).matrix().block<3, 3>(0, 0);
270 auto [cosPhi, sinPhi, cosTheta, sinTheta, invSinTheta] =
273 const auto rframe = referenceFrame(gctx, position, direction);
277 jacToGlobal.topLeftCorner<3, 2>() = rframe.topLeftCorner<3, 2>();
295 const auto direction = parameters.segment<3>(
eFreeDir0);
297 auto [cosPhi, sinPhi, cosTheta, sinTheta, invSinTheta] =
301 referenceFrame(gctx,
position, direction).transpose();
323 const auto direction = parameters.segment<3>(
eFreeDir0);
327 const Vector3 refZAxis = rframe.col(2);
332 freeToPath.segment<3>(
eFreePos0) = -1.0 * refZAxis.transpose() /
dz;
338 return m_associatedDetElement;
342 return m_associatedLayer;
346 return m_surfaceMaterial.get();
349 const std::shared_ptr<const Acts::ISurfaceMaterial>&
351 return m_surfaceMaterial;
356 m_associatedDetElement = &detelement;
363 std::shared_ptr<const Acts::ISurfaceMaterial>
material) {
368 m_associatedLayer = (&lay);