90 {
91 TrkVKalVrtFitter::State& state = static_cast<TrkVKalVrtFitter::State&> (istate);
92
93 int trkID_loc=trkID; if(trkID_loc<0)trkID_loc=0;
94
95
96 double vX=RefEnd[0]; double vY=RefEnd[1]; double vZ=RefEnd[2];
97
98 Amg::Vector3D endPointG( vX + state.m_refFrameX, vY + state.m_refFrameY, vZ + state.m_refFrameZ);
99
100
101
102 std::span<const double, 5> PerigeeIni( ParOld, 5 );
103 std::array<double, 15> CovPerigeeIni{};
104 if( CovOld != nullptr) {
105
106 std::copy(CovOld,CovOld+15,CovPerigeeIni.begin() );
107 }else{
108
109 CovPerigeeIni[0]=1.e6;CovPerigeeIni[2]=1.e6;CovPerigeeIni[5]=1.;CovPerigeeIni[9]=1.;CovPerigeeIni[14]=fabs(PerigeeIni[4]);
110 }
111
113 m_vkalFitSvc->CreatePerigee( RefStart[0], RefStart[1], RefStart[2], PerigeeIni, CovPerigeeIni, state).release();
115
116
117
118 double fx,fy,fz;
119 state.m_fitField.getMagFld(vX,vY,vZ,fx,fy,fz);
120
121
122
124
125 if( endPer == nullptr ) {
126 ParNew[0]=0.; ParNew[1]=0.;ParNew[2]=0.;ParNew[3]=0.;ParNew[4]=0.;
127 delete inpPer; return;
128 }
131 AmgVector(5) VectPerig; VectPerig.setZero();
134 VectPerig = mPer->parameters();
135 CovMtx = mPer->covariance();
136 }
138 VectPerig =
Line->parameters();
139 CovMtx =
Line->covariance();
140 }
141 if( (
Line==
nullptr && mPer==
nullptr) || CovMtx==
nullptr ){
142 ParNew[0]=0.; ParNew[1]=0.;ParNew[2]=0.;ParNew[3]=0.;ParNew[4]=0.;
143 delete endPer;
144 delete inpPer;
145 return;
146 }
147
148 if((*CovMtx)(0,0)<=0. || (*CovMtx)(1,1)<=0.){
149 ParNew[0]=0.; ParNew[1]=0.;ParNew[2]=0.;ParNew[3]=0.;ParNew[4]=0.;
150 delete inpPer;
151 delete endPer;
152 return;
153 }
154 double CovVertTrk[15];
155 long int locCharge=
Charge;
156 CovVertTrk[ 0] =(*CovMtx)(0,0);
157 CovVertTrk[ 1] =(*CovMtx)(1,0);
158 CovVertTrk[ 2] =(*CovMtx)(1,1);
159 CovVertTrk[ 3] =(*CovMtx)(2,0);
160 CovVertTrk[ 4] =(*CovMtx)(2,1);
161 CovVertTrk[ 5] =(*CovMtx)(2,2);
162 CovVertTrk[ 6] =(*CovMtx)(3,0);
163 CovVertTrk[ 7] =(*CovMtx)(3,1);
164 CovVertTrk[ 8] =(*CovMtx)(3,2);
165 CovVertTrk[ 9] =(*CovMtx)(3,3);
166 CovVertTrk[10] =(*CovMtx)(4,0);
167 CovVertTrk[11] =(*CovMtx)(4,1);
168 CovVertTrk[12] =(*CovMtx)(4,2);
169 CovVertTrk[13] =(*CovMtx)(4,3);
170 CovVertTrk[14] =(*CovMtx)(4,4);
171
172
173
174
175 double effectiveBMAG=state.m_fitField.getEffField(fx, fy, fz, VectPerig[2], VectPerig[3]);
176 if(fabs(effectiveBMAG) < 0.01) effectiveBMAG=0.01;
177 if(CovNew != nullptr) {
178 m_vkalFitSvc->VKalTransform( effectiveBMAG, VectPerig(0), VectPerig(1),
179 VectPerig(2), VectPerig(3), VectPerig(4), CovVertTrk,
180 locCharge, &ParNew[0] , &CovNew[0]);
181 }else{
182 double CovVertTrkTmp[15];
183 m_vkalFitSvc->VKalTransform( effectiveBMAG, VectPerig(0), VectPerig(1),
184 VectPerig(2), VectPerig(3), VectPerig(4), CovVertTrk,
185 locCharge, &ParNew[0] , CovVertTrkTmp);
186 }
187 delete inpPer; delete endPer;
188 }
#define AmgSymMatrix(dim)
const TrackParameters * myExtrapWithMatUpdate(long int TrkID, const TrackParameters *inpPer, Amg::Vector3D *endPoint, const IVKalState &istate) const
ParametersT< TrackParametersDim, Charged, StraightLineSurface > AtaStraightLine