144 ATH_MSG_WARNING(
"No highest TrackingVolume / no VolumeBounds ... pretty useless! ");
145 return StatusCode::SUCCESS;
198 surfacePhi *= (
m_flatDist->shoot() > 0.5) ? -1. : 1.;
205 alphaZ *= (
m_flatDist->shoot() > 0.5) ? -1. : 1.;
219 covariance.setZero();
242 std::move(covariance));
245 if (startParameters.covariance())
ATH_MSG_VERBOSE(
"Start Covariance : \n" << *startParameters.covariance());
253 CylTrf.setIdentity();
260 if (!estimationParameters) {
261 ATH_MSG_VERBOSE(
"Estimation of intersection did not work - skip event !");
262 return StatusCode::SUCCESS;
264 ATH_MSG_VERBOSE(
"Estimation of intersection is outside the known world - skip event !");
265 delete estimationParameters;
266 return StatusCode::SUCCESS;
280 if (estimationParameters->covariance()) {
305 delete estimationParameters;
306 estimationParameters =
nullptr;
316 ATH_MSG_VERBOSE(
"Extrapolation to Destination Surface: " << destinationSurface);
331 const std::vector<const Trk::TrackStateOnSurface*>*
340 if (collectedMaterial && !collectedMaterial->empty()) {
346 for (
const auto* tsos : *collectedMaterial) {
360 if (destParameters) {
371 if (destParameters->covariance()) {
406 const std::vector<const Trk::TrackStateOnSurface*>*
414 if (collectedBackMaterial && !collectedBackMaterial->empty()) {
421 for (
const auto* tsos : *collectedBackMaterial) {
435 if (backParameters) {
446 if (backParameters->covariance()) {
462 delete backParameters;
465 delete destParameters;
477 return StatusCode::SUCCESS;
493 Amg::Vector3D surfaceYdirection(zAxis.cross(surfaceZdirection));
495 Amg::Vector3D surfaceXdirection(surfaceYdirection.cross(surfaceZdirection));
497 double nx = 1. / sqrt(
498 surfaceXdirection[0] * surfaceXdirection[0] + surfaceXdirection[1] * surfaceXdirection[1] + surfaceXdirection[2] *
499 surfaceXdirection[2]);
500 double ny = 1. / sqrt(
501 surfaceYdirection[0] * surfaceYdirection[0] + surfaceYdirection[1] * surfaceYdirection[1] + surfaceYdirection[2] *
502 surfaceYdirection[2]);
503 surfaceXdirection[0] *= nx;
504 surfaceXdirection[1] *= nx;
505 surfaceXdirection[2] *= nx;
507 surfaceYdirection[0] *= ny;
508 surfaceYdirection[1] *= ny;
509 surfaceYdirection[2] *= ny;
512 surfaceRotation.col(0) = surfaceXdirection;
513 surfaceRotation.col(1) = surfaceYdirection;
514 surfaceRotation.col(2) = surfaceZdirection;
516 if (alphaZ == 0.)
return Amg::Transform3D(surfaceRotation, surfacePosition);