19 const std::vector<const Trk::SpacePoint*>& spacePoints)
const
28 if (spacePoints.size() < 3) {
34 if(!cl)
return nullptr;
38 if(!pla)
return nullptr;
41 double x0 = spacePoints[0]->globalPosition().x();
42 double y0 = spacePoints[0]->globalPosition().y();
43 double z0 = spacePoints[0]->globalPosition().z();
45 double x1 = spacePoints[1]->globalPosition().x() - x0;
46 double y1 = spacePoints[1]->globalPosition().y() - y0;
48 double x2 = spacePoints[2]->globalPosition().x() - x0;
49 double y2 = spacePoints[2]->globalPosition().y() - y0;
50 double z2 = spacePoints[2]->globalPosition().z() - z0;
54 double u1 = 1./std::sqrt(x1*x1+y1*y1);
56 double rn = x2*x2+y2*y2;
62 double u2 = (
a*x2+b*y2)*r2;
63 double v2 = (
a*y2-b*x2)*r2;
66 double A = v2/(u2-u1);
67 double T = z2*sqrt(r2);
72 double Ax[3] = {
Tp(0,0),
Tp(1,0),
Tp(2,0)};
74 double Ay[3] = {
Tp(0,1),
Tp(1,1),
Tp(2,1)};
76 double D [3] = {
Tp(0,3),
Tp(1,3),
Tp(2,3)};
78 double d[3] = {x0-D[0],y0-D[1],z0-D[2]};
80 double track_paras[5];
82 track_paras[0] = d[0]*Ax[0]+d[1]*Ax[1]+d[2]*Ax[2];
83 track_paras[1] = d[0]*Ay[0]+d[1]*Ay[1]+d[2]*Ay[2];
84 track_paras[2] = std::atan2(b+
a*
A,
a-b*
A);
85 track_paras[3] = std::atan2(1.,T) ;
86 track_paras[4] = 0.001/std::sqrt(1.+T*T);
89 "linearConformalMapping: \n" << \
90 "\nlocal x = " << track_paras[0] << \
91 "\nlocal y = " << track_paras[1] << \
92 "\nphi = " << track_paras[2] << \
93 "\ntheta = " << track_paras[3] << \
94 "\nqoverp = " << track_paras[4]);
97 for (
int i = 0; i < 5; i++) {
98 if (std::isnan(track_paras[i])) {
104 ATH_MSG_DEBUG(
"Seed parameters contain NaN elements - skipping this track ");
108 std::unique_ptr<const Trk::TrackParameters> trkParameters(
111 if (!trkParameters) {
116 return trkParameters;
virtual Surface::ChargedTrackParametersUniquePtr createUniqueTrackParameters(double l1, double l2, double phi, double theta, double qop, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const override final
Use the Surface as a ParametersBase constructor, from local parameters - charged.