87 const double *CovOld,
const double *RefStart,
const double *RefEnd,
88 double *ParNew,
double *CovNew,
93 int trkID_loc=trkID;
if(trkID_loc<0)trkID_loc=0;
96 double vX=RefEnd[0];
double vY=RefEnd[1];
double vZ=RefEnd[2];
102 std::span<const double, 5> PerigeeIni( ParOld, 5 );
103 std::array<double, 15> CovPerigeeIni{};
104 if( CovOld !=
nullptr) {
106 std::copy(CovOld,CovOld+15,CovPerigeeIni.begin() );
109 CovPerigeeIni[0]=1.e6;CovPerigeeIni[2]=1.e6;CovPerigeeIni[5]=1.;CovPerigeeIni[9]=1.;CovPerigeeIni[14]=fabs(PerigeeIni[4]);
113 m_vkalFitSvc->CreatePerigee( RefStart[0], RefStart[1], RefStart[2], PerigeeIni, CovPerigeeIni, state).release();
125 if( endPer ==
nullptr ) {
126 ParNew[0]=0.; ParNew[1]=0.;ParNew[2]=0.;ParNew[3]=0.;ParNew[4]=0.;
127 delete inpPer;
return;
131 AmgVector(5) VectPerig; VectPerig.setZero();
134 VectPerig = mPer->parameters();
135 CovMtx = mPer->covariance();
138 VectPerig =
Line->parameters();
139 CovMtx =
Line->covariance();
141 if( (
Line==
nullptr && mPer==
nullptr) || CovMtx==
nullptr ){
142 ParNew[0]=0.; ParNew[1]=0.;ParNew[2]=0.;ParNew[3]=0.;ParNew[4]=0.;
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.;
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);
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]);
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);
187 delete inpPer;
delete endPer;
210 : Gaudi::Hive::currentContext();
222 if(TrkID>=0)refPoint = state.
m_trkControl.at(TrkID).trkRefGlobPos;
226 int Strategy = 0;
if(TrkID>=0) Strategy = state.
m_trkControl[TrkID].extrapolationType;
233 if (pmom.dot(step) > 0.) {
244 if (pntOnTrk ==
nullptr){
250 step = (*endPoint) - iniPoint;
258 if (pmom.dot(step) < 0) {
262 ctx, *pntOnTrk, surfEnd, dir,
true, prtType,
addNoise).release();
271 if (pmom.dot(step) < 0) {
276 ctx, *pntOnTrk, surfEnd, dir,
true, prtType, mmode).release();
284 bool dirPositive =
true;
285 if (pmom.dot(step) < 0.)
287 if ((*endPoint).perp() > Border && iniPoint.perp() > Border) {
302 if ((*endPoint).perp() < Border && iniPoint.perp() < Border) {
325 if (iniPoint.perp() < Border) {
333 if (tmpPer ==
nullptr) {
364 : Gaudi::Hive::currentContext();
373 int Strategy = 0;
if(TrkID>=0) Strategy = state.
m_trkControl[TrkID].extrapolationType;
382 if(!pntOnTrk)
return endPer;
392 step = (*endPoint) - iniPoint;
402 endPer =
m_extrapolator->extrapolateDirectly(ctx, *pntOnTrk, lineTarget, dir,
true, prtType).release();
408 if( Strategy == 1 || Strategy == 2) {
411 endPer =
m_extrapolator->extrapolate(ctx, *pntOnTrk, lineTarget, dir,
true, prtType, mmode).release();
const Trk::Perigee & perigeeParameters() const
Returns the Trk::MeasuredPerigee track parameters.
float radiusOfFirstHit() const
Returns the radius of the first hit.