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::vector<double> PerigeeIni( ParOld, ParOld+5 );
103 std::vector<double> CovPerigeeIni( 15, 0. );
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 if(trkID<0){
126 }else{
128 }
129
130 if( endPer == nullptr ) {
131 ParNew[0]=0.; ParNew[1]=0.;ParNew[2]=0.;ParNew[3]=0.;ParNew[4]=0.;
132 delete inpPer; return;
133 }
136 AmgVector(5) VectPerig; VectPerig.setZero();
139 VectPerig = mPer->parameters();
140 CovMtx = mPer->covariance();
141 }
143 VectPerig =
Line->parameters();
144 CovMtx =
Line->covariance();
145 }
146 if( (
Line==
nullptr && mPer==
nullptr) || CovMtx==
nullptr ){
147 ParNew[0]=0.; ParNew[1]=0.;ParNew[2]=0.;ParNew[3]=0.;ParNew[4]=0.;
148 delete inpPer; return;
149 }
150
151 if((*CovMtx)(0,0)<=0. || (*CovMtx)(1,1)<=0.){
152 ParNew[0]=0.; ParNew[1]=0.;ParNew[2]=0.;ParNew[3]=0.;ParNew[4]=0.;
153 delete inpPer; delete endPer;
154 return;
155 }
156 double CovVertTrk[15];
157 long int locCharge=
Charge;
158 CovVertTrk[ 0] =(*CovMtx)(0,0);
159 CovVertTrk[ 1] =(*CovMtx)(1,0);
160 CovVertTrk[ 2] =(*CovMtx)(1,1);
161 CovVertTrk[ 3] =(*CovMtx)(2,0);
162 CovVertTrk[ 4] =(*CovMtx)(2,1);
163 CovVertTrk[ 5] =(*CovMtx)(2,2);
164 CovVertTrk[ 6] =(*CovMtx)(3,0);
165 CovVertTrk[ 7] =(*CovMtx)(3,1);
166 CovVertTrk[ 8] =(*CovMtx)(3,2);
167 CovVertTrk[ 9] =(*CovMtx)(3,3);
168 CovVertTrk[10] =(*CovMtx)(4,0);
169 CovVertTrk[11] =(*CovMtx)(4,1);
170 CovVertTrk[12] =(*CovMtx)(4,2);
171 CovVertTrk[13] =(*CovMtx)(4,3);
172 CovVertTrk[14] =(*CovMtx)(4,4);
173
174
175
176
177 double effectiveBMAG=state.m_fitField.getEffField(fx, fy, fz, VectPerig[2], VectPerig[3]);
178 if(fabs(effectiveBMAG) < 0.01) effectiveBMAG=0.01;
179 if(CovNew != nullptr) {
180 m_vkalFitSvc->VKalTransform( effectiveBMAG, VectPerig(0), VectPerig(1),
181 VectPerig(2), VectPerig(3), VectPerig(4), CovVertTrk,
182 locCharge, &ParNew[0] , &CovNew[0]);
183 }else{
184 double CovVertTrkTmp[15];
185 m_vkalFitSvc->VKalTransform( effectiveBMAG, VectPerig(0), VectPerig(1),
186 VectPerig(2), VectPerig(3), VectPerig(4), CovVertTrk,
187 locCharge, &ParNew[0] , CovVertTrkTmp);
188 }
189 delete inpPer; delete endPer;
190 }
#define AmgSymMatrix(dim)
const TrackParameters * myExtrapWithMatUpdate(long int TrkID, const TrackParameters *inpPer, Amg::Vector3D *endPoint, const IVKalState &istate) const
ParametersT< TrackParametersDim, Charged, StraightLineSurface > AtaStraightLine