158 surfacePhi *= (
m_flatDist->shoot() > 0.5 ) ? -1. : 1.;
159 double startX = startR*cos(surfacePhi);
160 double startY = startR*sin(surfacePhi);
165 alphaZ *= (
m_flatDist->shoot() > 0.5 ) ? -1. : 1.;
198 ATH_MSG_VERBOSE(
"Cylinder to be intersected : " << estimationCylinder );
200 auto estimationParameters =
m_propagator->propagateParameters(ctx,
206 if (!estimationParameters) {
207 ATH_MSG_VERBOSE(
"Estimation of intersection did not work - skip event !" );
208 return StatusCode::SUCCESS;
213 const Amg::Vector3D& estimatedPosition = estimationParameters->position();
215 double estimationX = estimatedPosition.x();
216 double estimationY = estimatedPosition.y();
217 double estimationZ = estimatedPosition.z();
219 double estimationPhi = estimatedPosition.phi();
220 double estimationTheta = estimatedPosition.theta();
225 rotateTrans *= (
m_flatDist->shoot() > 0.5 ) ? -1. : 1.;
231 Amg::Vector3D radialVector(estimatedPosition.x(), estimatedPosition.y(), 0.);
235 Amg::Vector3D surfaceXdirection(surfaceYdirection.cross(surfaceZdirection));
238 surfaceRotation.col(0) = surfaceXdirection;
239 surfaceRotation.col(1) = surfaceYdirection;
240 surfaceRotation.col(2) = surfaceZdirection;
257 std::optional<Trk::TransportJacobian> optTransportJacobian{};
258 AmgMatrix(5,5) testMatrix; testMatrix.setZero();
260 double pathLimit = -1.;
268 optTransportJacobian,
272 if (trackParameters && optTransportJacobian){
274 unsigned int recStep = 0;
275 const auto& transportJacobian = (*optTransportJacobian);
281 m_loc1loc1[recStep] = (transportJacobian)(0,0);
282 m_loc1loc2[recStep] = (transportJacobian)(0,1);
283 m_loc1phi[recStep] = (transportJacobian)(0,2);
285 m_loc1qop[recStep] = (transportJacobian)(0,4);
288 m_loc2loc1[recStep] = (transportJacobian)(1,0);
289 m_loc2loc2[recStep] = (transportJacobian)(1,1);
290 m_loc2phi[recStep] = (transportJacobian)(1,2);
292 m_loc2qop[recStep] = (transportJacobian)(1,4);
295 m_philoc1[recStep] = (transportJacobian)(2,0);
296 m_philoc2[recStep] = (transportJacobian)(2,1);
297 m_phiphi[recStep] = (transportJacobian)(2,2);
298 m_phitheta[recStep] = (transportJacobian)(2,3);
299 m_phiqop[recStep] = (transportJacobian)(2,4);
304 m_thetaphi[recStep] = (transportJacobian)(3,2);
306 m_thetaqop[recStep] = (transportJacobian)(3,4);
309 m_qoploc1[recStep] = (transportJacobian)(4,0);
310 m_qoploc2[recStep] = (transportJacobian)(4,1);
311 m_qopphi[recStep] = (transportJacobian)(4,2);
312 m_qoptheta[recStep] = (transportJacobian)(4,3);
313 m_qopqop[recStep] = (transportJacobian)(4,4);
341 auto endLoc1Minus =
m_propagator->propagateParameters(ctx,
349 auto endLoc1Plus =
m_propagator->propagateParameters(ctx,
356 auto endLoc2Minus =
m_propagator->propagateParameters(ctx,
363 auto endLoc2Plus =
m_propagator->propagateParameters(ctx,
370 auto endPhiMinus =
m_propagator->propagateParameters(ctx,
377 auto endPhiPlus =
m_propagator->propagateParameters(ctx,
384 auto endThetaMinus =
m_propagator->propagateParameters(ctx,
391 auto endThetaPlus =
m_propagator->propagateParameters(ctx,
398 auto endQopMinus =
m_propagator->propagateParameters(ctx,
405 auto endQopPlus =
m_propagator->propagateParameters(ctx,
423 const Amg::VectorX& endLoc1MinusPar = endLoc1Minus->parameters();
424 const Amg::VectorX& endLoc1PlusPar = endLoc1Plus->parameters();
426 const Amg::VectorX& endLoc2MinusPar = endLoc2Minus->parameters();
427 const Amg::VectorX& endLoc2PlusPar = endLoc2Plus->parameters();
429 const Amg::VectorX& endPhiMinusPar = endPhiMinus->parameters();
430 const Amg::VectorX& endPhiPlusPar = endPhiPlus->parameters();
432 const Amg::VectorX& endThetaMinusPar = endThetaMinus->parameters();
433 const Amg::VectorX& endThetaPlusPar = endThetaPlus->parameters();
435 const Amg::VectorX& endQopMinusPar = endQopMinus->parameters();
436 const Amg::VectorX& endQopPlusPar = endQopPlus->parameters();
439 Amg::VectorX endLoc1Diff(endLoc1PlusPar-endLoc1MinusPar);
440 Amg::VectorX endLoc2Diff(endLoc2PlusPar-endLoc2MinusPar);
442 Amg::VectorX endThetaDiff(endThetaPlusPar-endThetaMinusPar);
451 m_loc1loc1[recStep] = currentStepJacobian(0,0);
452 m_loc1loc2[recStep] = currentStepJacobian(0,1);
453 m_loc1phi[recStep] = currentStepJacobian(0,2);
455 m_loc1qop[recStep] = currentStepJacobian(0,4);
464 m_loc2loc1[recStep] = currentStepJacobian(1,0);
465 m_loc2loc2[recStep] = currentStepJacobian(1,1);
466 m_loc2phi[recStep] = currentStepJacobian(1,2);
468 m_loc2qop[recStep] = currentStepJacobian(1,4);
477 m_philoc1[recStep] = currentStepJacobian(2,0);
478 m_philoc2[recStep] = currentStepJacobian(2,1);
479 m_phiphi[recStep] = currentStepJacobian(2,2);
480 m_phitheta[recStep] = currentStepJacobian(2,3);
481 m_phiqop[recStep] = currentStepJacobian(2,4);
492 m_thetaphi[recStep] = currentStepJacobian(3,2);
494 m_thetaqop[recStep] = currentStepJacobian(3,4);
503 m_qoploc1[recStep] = currentStepJacobian(4,0);
504 m_qoploc2[recStep] = currentStepJacobian(4,1);
505 m_qopphi[recStep] = currentStepJacobian(4,2);
506 m_qoptheta[recStep] = currentStepJacobian(4,3);
507 m_qopqop[recStep] = currentStepJacobian(4,4);
510 ATH_MSG_DEBUG(
"Current TransportJacobian : " << currentStepJacobian );
580 currentStepJacobian(0,0)=
m_loc1loc1[recStep];
581 currentStepJacobian(0,1)=
m_loc1loc2[recStep];
582 currentStepJacobian(0,2)=
m_loc1phi[recStep];
584 currentStepJacobian(0,4)=
m_loc1qop[recStep];
586 currentStepJacobian(1,0)=
m_loc2loc1[recStep];
587 currentStepJacobian(1,1)=
m_loc2loc2[recStep];
588 currentStepJacobian(1,2)=
m_loc2phi[recStep];
590 currentStepJacobian(1,4)=
m_loc2qop[recStep];
592 currentStepJacobian(2,0)=
m_philoc1[recStep];
593 currentStepJacobian(2,1)=
m_philoc2[recStep];
594 currentStepJacobian(2,2)=
m_phiphi[recStep];
595 currentStepJacobian(2,3)=
m_phitheta[recStep];
596 currentStepJacobian(2,4)=
m_phiqop[recStep];
600 currentStepJacobian(3,2)=
m_thetaphi[recStep];
602 currentStepJacobian(3,4)=
m_thetaqop[recStep];
604 currentStepJacobian(4,0)=
m_qoploc1[recStep];
605 currentStepJacobian(4,1)=
m_qoploc2[recStep];
606 currentStepJacobian(4,2)=
m_qopphi[recStep];
607 currentStepJacobian(4,3)=
m_qoptheta[recStep];
608 currentStepJacobian(4,4)=
m_qopqop[recStep];
612 ATH_MSG_DEBUG(
"Interpolated TransportJacobian : " << currentStepJacobian );
619 ATH_MSG_VERBOSE(
"Absolute Differences of the TransportJacobian : " << diffMatrix );
640 m_phiphi[recStep] = diffMatrix(2,2);
642 m_phiqop[recStep] = diffMatrix(2,4);
654 m_qopphi[recStep] = diffMatrix(4,2);
656 m_qopqop[recStep] = diffMatrix(4,4);
704 m_loc1loc1[recStep] = std::abs((transportJacobian)(0,0)) > 1e-50 ? diffMatrix(0,0)/((transportJacobian)(0,0)) : 0.;
705 m_loc1loc2[recStep] = std::abs((transportJacobian)(0,1)) > 1e-50 ? diffMatrix(0,1)/((transportJacobian)(0,1)) : 0.;
706 m_loc1phi[recStep] = std::abs((transportJacobian)(0,2)) > 1e-50 ? diffMatrix(0,2)/((transportJacobian)(0,2)) : 0.;
707 m_loc1theta[recStep] = std::abs((transportJacobian)(0,3)) > 1e-50 ? diffMatrix(0,3)/((transportJacobian)(0,3)) : 0.;
708 m_loc1qop[recStep] = std::abs((transportJacobian)(0,4)) > 1e-50 ? diffMatrix(0,4)/((transportJacobian)(0,4)) : 0.;
711 m_loc2loc1[recStep] = std::abs((transportJacobian)(1,0)) > 1e-50 ? diffMatrix(1,0)/((transportJacobian)(1,0)) : 0.;
712 m_loc2loc2[recStep] = std::abs((transportJacobian)(1,1)) > 1e-50 ? diffMatrix(1,1)/((transportJacobian)(1,1)) : 0.;
713 m_loc2phi[recStep] = std::abs((transportJacobian)(1,2)) > 1e-50 ? diffMatrix(1,2)/((transportJacobian)(1,2)) : 0.;
714 m_loc2theta[recStep] = std::abs((transportJacobian)(1,3)) > 1e-50 ? diffMatrix(1,3)/((transportJacobian)(1,3)) : 0.;
715 m_loc2qop[recStep] = std::abs((transportJacobian)(1,4)) > 1e-50 ? diffMatrix(1,4)/((transportJacobian)(1,4)) : 0.;
718 m_philoc1[recStep] = std::abs((transportJacobian)(2,0)) > 1e-50 ? diffMatrix(2,0)/((transportJacobian)(2,0)) : 0.;
719 m_philoc2[recStep] = std::abs((transportJacobian)(2,1)) > 1e-50 ? diffMatrix(2,1)/((transportJacobian)(2,1)) : 0.;
720 m_phiphi[recStep] = std::abs((transportJacobian)(2,2)) > 1e-50 ? diffMatrix(2,2)/((transportJacobian)(2,2)) : 0.;
721 m_phitheta[recStep] = std::abs((transportJacobian)(2,3)) > 1e-50 ? diffMatrix(2,3)/((transportJacobian)(2,3)) : 0.;
722 m_phiqop[recStep] = std::abs((transportJacobian)(2,4)) > 1e-50 ? diffMatrix(2,4)/((transportJacobian)(2,4)) : 0.;
725 m_thetaloc1[recStep] = std::abs((transportJacobian)(3,0)) > 1e-50 ? diffMatrix(3,0)/((transportJacobian)(3,0)) : 0.;
726 m_thetaloc2[recStep] = std::abs((transportJacobian)(3,1)) > 1e-50 ? diffMatrix(3,1)/((transportJacobian)(3,1)) : 0.;
727 m_thetaphi[recStep] = std::abs((transportJacobian)(3,2)) > 1e-50 ? diffMatrix(3,2)/((transportJacobian)(3,2)) : 0.;
728 m_thetatheta[recStep] = std::abs((transportJacobian)(3,3)) > 1e-50 ? diffMatrix(3,3)/((transportJacobian)(3,3)) : 0.;
729 m_thetaqop[recStep] = std::abs((transportJacobian)(3,4)) > 1e-50 ? diffMatrix(3,4)/((transportJacobian)(3,4)) : 0.;
732 m_qoploc1[recStep] = std::abs((transportJacobian)(4,0)) > 1e-50 ? diffMatrix(4,0)/((transportJacobian)(4,0)) : 0.;
733 m_qoploc2[recStep] = std::abs((transportJacobian)(4,1)) > 1e-50 ? diffMatrix(4,1)/((transportJacobian)(4,1)) : 0.;
734 m_qopphi[recStep] = std::abs((transportJacobian)(4,2)) > 1e-50 ? diffMatrix(4,2)/((transportJacobian)(4,2)) : 0.;
735 m_qoptheta[recStep] = std::abs((transportJacobian)(4,3)) > 1e-50 ? diffMatrix(4,3)/((transportJacobian)(4,3)) : 0.;
736 m_qopqop[recStep] = std::abs((transportJacobian)(4,4)) > 1e-50 ? diffMatrix(4,4)/((transportJacobian)(4,4)) : 0.;
783 return StatusCode::SUCCESS;