ATLAS Offline Software
VKalExtPropagator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 //
5 // The VKalExtPropagator object is created if ATHENA propagator exists
6 // and is supplied via jobOptions. A pointer to it is supplied to VKalVrtCore
7 // for every vertex fit via VKalVrtControlBase object.
8 // VKalVrtCore uses it to extrapolate tracks for a vertex fit.
9 //
10 // If ATHENA propagator doesn't exist, the VKalVrtCore uses its internal
11 // propagator without material.
12 //
13 //-------------------------------------------------------------------------
14 
15 
16 // Header include
18 
23 //-------------------------------------------------
24 #include <iostream>
25 
26 
27 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
28 // External propagator access for VKalVrt
29 
30 namespace Trk {
31 
32  // Constructor
34  {
35  m_extrapolator = nullptr;
36  m_vkalFitSvc = pnt;
37  }
39 
40 
42  {
43  m_extrapolator = Pnt;
44  }
45 
46 //Protection against exit outside ID volume (unless explicitly requested in configuration for LLP scenarios -- then uses MS volume)
47 //
48  double VKalExtPropagator::Protection(const double *RefEnd,
49  const IVKalState& istate) const
50  {
51  const TrkVKalVrtFitter::State& state = static_cast<const TrkVKalVrtFitter::State&> (istate);
52 
53  double Xend=RefEnd[0] + state.m_refFrameX;
54  double Yend=RefEnd[1] + state.m_refFrameY;
55  double Zend=RefEnd[2] + state.m_refFrameZ;
56 
59  double Rlim=std::hypot(Xend, Yend) / sizeR;
60  double Zlim=std::abs(Zend) / sizeZ;
61 
62  double Scale = Rlim; if(Zlim>Rlim) Scale=Zlim;
63 //std::cout<<"relative TARG="<<RefEnd[0]<<","<<RefEnd[1]<<","<<RefEnd[2]
64 //<<" global ref.="<<m_vkalFitSvc->state.m_refFrameX<<","<<m_vkalFitSvc->state.m_refFrameY<<","<<m_vkalFitSvc->state.m_refFrameZ
65 //<<" Limits="<<m_vkalFitSvc->m_IDsizeR<<","<<m_vkalFitSvc->m_IDsizeZ<<" scale="<<Scale<<'\n';
66  return Scale;
67  }
68 
69  bool VKalExtPropagator::checkTarget( double *RefEnd,
70  const IVKalState& istate) const
71  {
72  //double targV[3]={ RefEnd[0], RefEnd[1], RefEnd[2]};
73  return Protection(RefEnd, istate) <= 1.;
74  }
75 /*----------------------------------------------------------------------------------*/
76 // Addres of this fuction is supplied to TrkVKalVrtCore for ATLAS InDet extrapolation
77 // with material. Each time VKalVrt needs propagation - it calls it.
78 //
79 // In case of usage with first measured point
80 // it always use this point as starting point,
81 // so ParOld,CovOld,RefStart are irrelevant
82 //
83 // VKalVrtCore works in relative coordinates wrt (state.m_refFrameX,state.m_refFrameY,state.m_refFrameZ)
84 // For ATLAS propagator the Core coordinates must be moved back to global ref.frame
85 /*------------------------------------------------------------------------------------*/
86  void VKalExtPropagator::Propagate( long int trkID, long int Charge,
87  double *ParOld, double *CovOld, double *RefStart,
88  double *RefEnd, double *ParNew, double *CovNew,
89  IVKalState& istate) const
90  {
91  TrkVKalVrtFitter::State& state = static_cast<TrkVKalVrtFitter::State&> (istate);
92 
93  int trkID_loc=trkID; if(trkID_loc<0)trkID_loc=0;
94 //std::cout<<__func__<<" Ext.Propagator TrkID="<<trkID<<"to (local!!!)="<<RefEnd[0]<<", "<<RefEnd[1]<<", "<<RefEnd[2]<<'\n';
95 //-----------
96  double vX=RefEnd[0]; double vY=RefEnd[1]; double vZ=RefEnd[2]; //relative coords
97  // Propagation target in GLOBAL frame
98  Amg::Vector3D endPointG( vX + state.m_refFrameX, vY + state.m_refFrameY, vZ + state.m_refFrameZ);
99 //
100 // ---- Make MeasuredPerigee from input. Mag.field at start point is used here
101 //
102  std::vector<double> PerigeeIni( ParOld, ParOld+5 );
103  std::vector<double> CovPerigeeIni( 15, 0. );
104  if( CovOld != nullptr) {
105 // for(int i=0; i<15;i++) CovPerigeeIni.push_back( CovOld[i] );
106  std::copy(CovOld,CovOld+15,CovPerigeeIni.begin() );
107  }else{
108 // for(int i=0; i<15;i++) CovPerigeeIni.push_back(0.);
109  CovPerigeeIni[0]=1.e6;CovPerigeeIni[2]=1.e6;CovPerigeeIni[5]=1.;CovPerigeeIni[9]=1.;CovPerigeeIni[14]=fabs(PerigeeIni[4]);
110  }
111  //--- This creates Perigee in GLOBAL frame from input in realtive coordinates
112  const Perigee* inpPer =
113  m_vkalFitSvc->CreatePerigee( RefStart[0], RefStart[1], RefStart[2], PerigeeIni, CovPerigeeIni, state).release();
114  const TrackParameters * inpPar= inpPer;
115 //
116 // ----- Magnetic field is taken at target point (GLOBAL calculated from relative frame input)
117 //
118  double fx,fy,BMAG_FIXED;
119  state.m_fitField.getMagFld(vX,vY,vZ,fx,fy,BMAG_FIXED);
120 //
121 //-------------------- Extrapolation itself
122 //
123  const Trk::TrackParameters* endPer = nullptr;
124  if(trkID<0){
125  endPer = myExtrapWithMatUpdate( trkID, inpPar, &endPointG, state);
126  }else{
127  endPer = myExtrapWithMatUpdate( trkID, inpPar, &endPointG, state);
128  }
129 //-----------------------------------
130  if( endPer == nullptr ) { // No extrapolation done!!!
131  ParNew[0]=0.; ParNew[1]=0.;ParNew[2]=0.;ParNew[3]=0.;ParNew[4]=0.;
132  delete inpPer; return;
133  }
134  const Perigee* mPer = dynamic_cast<const Perigee*>(endPer);
135  const AtaStraightLine* Line = dynamic_cast<const AtaStraightLine*>(endPer);
136  AmgVector(5) VectPerig; VectPerig.setZero();
137  const AmgSymMatrix(5) *CovMtx=nullptr;
138  if( mPer ){
139  VectPerig = mPer->parameters();
140  CovMtx = mPer->covariance();
141  }
142  if( Line ){
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.){ //protection against bad error matrix
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 //std::cout<<" extrapPoint="<<endPer->position().x()<<", "<<endPer->position().y()<<", "<<endPer->position().y()<<'\n';
174 //std::cout<<" extrapCov="<<(*CovMtx)(0,0)<<", "<<(*CovMtx)(1,1)<<", "<<(*CovMtx)(2,2)<<
175 // ", "<<(*CovMtx)(3,3)<<", "<<(*CovMtx)(4,4)<<'\n';
176 
177  if(CovNew != nullptr) {
178  m_vkalFitSvc->VKalTransform( BMAG_FIXED, 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( BMAG_FIXED, VectPerig(0), VectPerig(1),
184  VectPerig(2), VectPerig(3), VectPerig(4), CovVertTrk,
185  locCharge, &ParNew[0] , CovVertTrkTmp);
186  }
187  delete inpPer; delete endPer;
188  }
189 
190 
191 /*--------------------------------------------------------------------------------------*/
192 /* Logic of material subtruction or addition to track error matrix is implemented here. */
193 /* What to do depends on direction of extrapolation and relative position of initial, */
194 /* final and track reference points */
195 /* */
196 /* All points are in GLOBAL Atlas frame here! */
197 /* */
198 /* Real track (TrkID>=0) extrapolation always starts from INITIAL track object */
199 /* and NOT from parameters provided by VKalVrtCore. More CPU time but better precision*/
200 /* Only combined (TrkID<0) tracks use VKalVrtCore parameters for start */
201 /*--------------------------------------------------------------------------------------*/
203  const TrackParameters *inpPer,
204  Amg::Vector3D * endPoint,
205  const IVKalState& istate) const
206  {
207  const TrkVKalVrtFitter::State& state = static_cast<const TrkVKalVrtFitter::State&> (istate);
208  const EventContext& ctx = (state.m_eventContext)
209  ? *(state.m_eventContext)
210  : Gaudi::Hive::currentContext();
211 
212  const Trk::TrackParameters* endPer=nullptr;
213  const Trk::TrackParameters* tmpPer=nullptr;
214  ParticleHypothesis prtType = pion;
215  //End surface
216  PerigeeSurface surfEnd( *endPoint );
217  //Initial point (global frame)
218  Amg::Vector3D iniPoint = inpPer->position();
219  Amg::Vector3D pmom=inpPer->momentum();
220  //Track reference point ( some point on track provided initially, global frame )
221  Amg::Vector3D refPoint(0.,0.,0.);
222  if(TrkID>=0)refPoint = state.m_trkControl.at(TrkID).trkRefGlobPos;
223  //
224  Amg::Vector3D step = (*endPoint) - iniPoint;
225  //
226  int Strategy = 0; if(TrkID>=0) Strategy = state.m_trkControl[TrkID].extrapolationType;
227  //
228  // Extrapolation for new track - no material at all
229  //
230  const TrackParameters *pntOnTrk=nullptr;
231  if (TrkID < 0) {
232  prtType = undefined;
233  if (pmom.dot(step) > 0.) {
234  endPer = m_extrapolator->extrapolateDirectly(ctx,
235  *inpPer, surfEnd, alongMomentum, true, pion).release();
236  } else {
237  endPer = m_extrapolator->extrapolateDirectly(ctx,
238  *inpPer, surfEnd, oppositeMomentum, true, pion).release();
239  }
240  return endPer;
241  }
242  pntOnTrk = dynamic_cast<const TrackParameters*>(
243  state.m_trkControl.at(TrkID).TrkPnt);
244  if (pntOnTrk == nullptr){
245  return endPer;
246  }
247  prtType = pion; // Pion hypothesis is always used for extrapolation
248  // Redefinition of starting point for extrapolation
249  iniPoint = pntOnTrk->position();
250  step = (*endPoint) - iniPoint;
251 
252  //
253  // Extrapolation for first measured point strategy. Start from it and
254  // always add material
255  //
256  if( Strategy == 0) {
258  if (pmom.dot(step) < 0) {
260  }
261  endPer = m_extrapolator->extrapolate(
262  ctx, *pntOnTrk, surfEnd, dir, true, prtType, addNoise).release();
263  return endPer;
264  }
265  //
266  // Extrapolation for any measured point
267  //
268  if (Strategy == 1) {
271  if (pmom.dot(step) < 0) {
273  mmode = removeNoise;
274  }
275  endPer = m_extrapolator->extrapolate(
276  ctx, *pntOnTrk, surfEnd, dir, true, prtType, mmode).release();
277  return endPer;
278  }
279  //
280  // Extrapolation for perigee and B-hit
281  //
282  if (Strategy == 2) {
283  double Border = 25.;
284  bool dirPositive = true;
285  if (pmom.dot(step) < 0.)
286  dirPositive = false;
287  if ((*endPoint).perp() > Border && iniPoint.perp() > Border) {
288  if (dirPositive) {
289  endPer = m_extrapolator->extrapolate(
290  ctx, *pntOnTrk, surfEnd, alongMomentum, true, prtType, addNoise).release();
291  } else {
292  endPer = m_extrapolator->extrapolate(ctx,
293  *pntOnTrk,
294  surfEnd,
296  true,
297  prtType,
298  removeNoise).release();
299  }
300  return endPer;
301  }
302  if ((*endPoint).perp() < Border && iniPoint.perp() < Border) {
303  if (dirPositive) {
304  endPer = m_extrapolator->extrapolate(ctx,
305  *pntOnTrk,
306  surfEnd,
308  true,
309  prtType,
310  removeNoise).release();
311  } else {
312  endPer = m_extrapolator->extrapolate(ctx,
313  *pntOnTrk,
314  surfEnd,
316  true,
317  prtType,
318  addNoise).release();
319  }
320  return endPer;
321  }
322  Amg::Transform3D trnsf;
323  trnsf.setIdentity();
324  CylinderSurface surfBorder(trnsf, Border, 3000.);
325  if (iniPoint.perp() < Border) {
326  tmpPer = m_extrapolator->extrapolate(ctx,
327  *pntOnTrk,
328  surfBorder,
330  true,
331  prtType,
332  removeNoise).release();
333  if (tmpPer == nullptr) {
334  return nullptr;
335  }
336  endPer = m_extrapolator->extrapolate(
337  ctx, *tmpPer, surfEnd, alongMomentum, true, prtType, addNoise).release();
338  } else {
339  endPer = m_extrapolator->extrapolate(
340  ctx, *pntOnTrk, surfEnd, oppositeMomentum, true, prtType, addNoise).release();
341  return endPer;
342  }
343  delete tmpPer;
344  return endPer;
345  }
346  return endPer;
347  }
348 
349 /*--------------------------------------------------------------------------------------*/
350 /* Extrapolation to line */
351 /* */
352 /* All points are in GLOBAL Atlas frame here! */
353 /* DOESN't WORK FOR COMBINED TRACKS! */
354 /*--------------------------------------------------------------------------------------*/
356  const TrackParameters *inpPer,
357  Amg::Vector3D * endPoint,
358  StraightLineSurface &lineTarget,
359  const IVKalState& istate) const
360  {
361  const TrkVKalVrtFitter::State& state = static_cast<const TrkVKalVrtFitter::State&> (istate);
362  const EventContext& ctx = (state.m_eventContext)
363  ? *(state.m_eventContext)
364  : Gaudi::Hive::currentContext();
365 
366 
367  const Trk::TrackParameters* endPer=nullptr;
368  ParticleHypothesis prtType = muon;
369 //Initial point
370  Amg::Vector3D iniPoint = inpPer->position();
371  Amg::Vector3D step = (*endPoint) - iniPoint;
372 //
373  int Strategy = 0; if(TrkID>=0) Strategy = state.m_trkControl[TrkID].extrapolationType;
374 //
375 // Extrapolation for new track - no material at all
376 //
377  const TrackParameters *pntOnTrk=nullptr;
378  if(TrkID<0){
379  return endPer;
380  }
381  pntOnTrk=dynamic_cast<const TrackParameters*> (state.m_trkControl.at(TrkID).TrkPnt);
382  if(!pntOnTrk) return endPer;
383  //double inpMass=state.m_trkControl[TrkID].prtMass;
384  //if( inpMass > 0. && inpMass< 20.) { prtType=electron; } //VK Disabled according to users request
385  //else if(inpMass > 20. && inpMass<120.) { prtType=muon; } // May be activated in future
386  //else if(inpMass >120. && inpMass<200.) { prtType=pion; }
387  //else if(inpMass >200. && inpMass<700.) { prtType=kaon; }
388  //else if(inpMass >700. && inpMass<999.) { prtType=proton; }
389  //else { prtType=undefined; }
390  prtType=muon; // Muon hypothesis is always used for extrapolation
391  iniPoint = pntOnTrk->position();
392  step = (*endPoint) - iniPoint;
393 
394  Amg::Vector3D pmom=pntOnTrk->momentum();
395 //
396 // Extrapolation for first measured point strategy. Start from it and always add material
397 //
398  if( Strategy == 0) {
400  endPer = m_extrapolator->extrapolate(ctx, *pntOnTrk, lineTarget, dir, true, prtType, addNoise).release();
401  if (!endPer)
402  endPer = m_extrapolator->extrapolateDirectly(ctx, *pntOnTrk, lineTarget, dir, true, prtType).release();
403  return endPer;
404  }
405 //
406 // Extrapolation for any measured point
407 //
408  if( Strategy == 1 || Strategy == 2) {
410  if(pmom.dot(step)<0){ dir=oppositeMomentum; mmode=removeNoise;}
411  endPer = m_extrapolator->extrapolate(ctx, *pntOnTrk, lineTarget, dir, true, prtType, mmode).release();
412  return endPer;
413  }
414  return endPer;
415  }
416 
417 /*--------------------------------------------------------------------------------------*/
418 /* Simple extrapolation of neutral tracks */
419 /*--------------------------------------------------------------------------------------*/
421  Amg::Vector3D * endPoint) const
422  {
423  const Trk::NeutralParameters* endPer=nullptr;
424 //End surface
425  PerigeeSurface surfEnd( *endPoint );
426  endPer = m_extrapolator->extrapolate( *inpPer, surfEnd, anyDirection, true).release();
427  return endPer;
428  }
429 
430 /*--------------------------------------------------------------------------------------*/
431 /* xAOD method to find FirstMeasuredPoint on TrackParticle. */
432 /* */
433 /* All points are in GLOBAL Atlas frame here! */
434 /* */
435 /* xAOD::TrackParticle Perigee is extrapolated to cylinder with radius of first hit */
436 /*--------------------------------------------------------------------------------------*/
438  {
439  static const SG::ConstAccessor<float> radiusOfFirstHitAcc ("radiusOfFirstHit");
440  if(!radiusOfFirstHitAcc.isAvailable (*xprt)) return nullptr; // No radiusOfFirstHit on track
441 
442  const EventContext& ctx = Gaudi::Hive::currentContext();
443  const Trk::Perigee* mPer = &(xprt->perigeeParameters());
444  Amg::Transform3D trnsf;
445  trnsf.setIdentity();
446  CylinderSurface surfacePntOnTrk( trnsf, xprt->radiusOfFirstHit(), 20000.);
447  ParticleHypothesis prtType = pion;
448 
449  const TrackParameters *hitOnTrk =
451  *mPer,
452  surfacePntOnTrk,
454  true, prtType, removeNoise).release();
455 //std::cout<<" Radius="<<xprt->radiusOfFirstHit()<<" extrap="<<hitOnTrk<<'\n';
456  if(hitOnTrk==nullptr)hitOnTrk=m_extrapolator->extrapolateDirectly(ctx,
457  *mPer,
458  surfacePntOnTrk,
460  true, prtType).release();
461  if(hitOnTrk==nullptr)return nullptr;
462 
463  //convert result to Perigee
464  PerigeeSurface surfacePerigee( hitOnTrk->position() );
465  const TrackParameters *hitOnTrkPerig = m_extrapolator->extrapolate(ctx,
466  *hitOnTrk,
467  surfacePerigee).release();
468  delete hitOnTrk; // Delete temporary results
469  if(hitOnTrkPerig==nullptr)return nullptr;
470 //std::cout<<" perig="<<(*hitOnTrkPerig)<<'\n';
471  return dynamic_cast<const Perigee* > (hitOnTrkPerig);
472  }
473 
474 //--------------------------------------------------------------------------
475 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
476 // Setting interface to setup VKalVrt InDet extrapolator
478  {
479  // Save external propagator in VKalExtPropagator object and send it to TrkVKalVrtCore
480 //
481  if(m_fitPropagator != nullptr) delete m_fitPropagator;
482  m_fitPropagator = new VKalExtPropagator( this );
484  m_InDetExtrapolator = Pnt; // Pointer to InDet extrapolator
485  }
486 
487 }
Trk::TrkVKalVrtFitter::State
Definition: TrkVKalVrtFitter.h:387
Trk::anyDirection
@ anyDirection
Definition: PropDirection.h:22
Trk::TrkVKalVrtFitter::State::m_refFrameZ
double m_refFrameZ
Definition: TrkVKalVrtFitter.h:395
StraightLineSurface.h
Trk::TrkVKalVrtFitter::State::m_refFrameX
double m_refFrameX
Definition: TrkVKalVrtFitter.h:393
Trk::TrkVKalVrtFitter::m_InDetExtrapolator
const IExtrapolator * m_InDetExtrapolator
Pointer to Extrapolator AlgTool.
Definition: TrkVKalVrtFitter.h:480
Trk::TrkVKalVrtFitter::CreatePerigee
virtual std::unique_ptr< Trk::Perigee > CreatePerigee(const std::vector< double > &VKPerigee, const std::vector< double > &VKCov, IVKalState &istate) const override final
Definition: CvtPerigee.cxx:159
Trk::TrkVKalVrtFitter::VKalTransform
void VKalTransform(double MAG, double A0V, double ZV, double PhiV, double ThetaV, double PInv, const double[15], long int &Charge, double[5], double[15]) const
Definition: VKalTransform.cxx:59
Trk::PerigeeSurface
Definition: PerigeeSurface.h:43
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
Trk::oppositeMomentum
@ oppositeMomentum
Definition: PropDirection.h:21
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
Trig::MatchingStrategy::Strategy
Strategy
Definition: MatchingImplementation.h:26
Trk::VKalExtPropagator::VKalExtPropagator
VKalExtPropagator(TrkVKalVrtFitter *)
Definition: VKalExtPropagator.cxx:33
Trk::TrkVKalVrtFitter::m_fitPropagator
VKalExtPropagator * m_fitPropagator
Definition: TrkVKalVrtFitter.h:479
Trk::TrkVKalVrtFitter::m_IDsizeR
Gaudi::Property< double > m_IDsizeR
Definition: TrkVKalVrtFitter.h:326
Trk::VKalAtlasMagFld::getMagFld
virtual void getMagFld(const double, const double, const double, double &, double &, double &) override
Definition: VKalAtlasMagFld.cxx:61
Trk::TrkVKalVrtFitter::VKalExtPropagator
friend class VKalExtPropagator
Definition: TrkVKalVrtFitter.h:68
Trk::MaterialUpdateMode
MaterialUpdateMode
This is a steering enum to force the material update it can be: (1) addNoise (-1) removeNoise Second ...
Definition: MaterialUpdateMode.h:18
Trk::alongMomentum
@ alongMomentum
Definition: PropDirection.h:20
Trk::VKalExtPropagator::myExtrapWithMatUpdate
const TrackParameters * myExtrapWithMatUpdate(long int TrkID, const TrackParameters *inpPer, Amg::Vector3D *endPoint, const IVKalState &istate) const
Definition: VKalExtPropagator.cxx:202
Trk::TrkVKalVrtFitter::m_MSsizeZ
Gaudi::Property< double > m_MSsizeZ
Definition: TrkVKalVrtFitter.h:329
SG::ConstAccessor< float >
Trk::undefined
@ undefined
Definition: ParticleHypothesis.h:41
Trk::TrkVKalVrtFitter::m_MSsizeR
Gaudi::Property< double > m_MSsizeR
Definition: TrkVKalVrtFitter.h:328
TrkVKalVrtFitter.h
Trk::IExtrapolator::extrapolateDirectly
virtual std::unique_ptr< TrackParameters > extrapolateDirectly(const EventContext &ctx, const TrackParameters &parm, const Surface &sf, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion) const =0
Extrapolate directly: Forwards directly the call to the configured "Global" propagator.
Trk::VKalExtPropagator::myxAODFstPntOnTrk
const Perigee * myxAODFstPntOnTrk(const xAOD::TrackParticle *xprt) const
Definition: VKalExtPropagator.cxx:437
Trk::AmgSymMatrix
AmgSymMatrix(5) &GXFTrackState
Definition: GXFTrackState.h:156
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:28
xAOD::TrackParticle_v1::perigeeParameters
const Trk::Perigee & perigeeParameters() const
Returns the Trk::MeasuredPerigee track parameters.
Definition: TrackParticle_v1.cxx:486
Trk::PropDirection
PropDirection
Definition: PropDirection.h:19
Trk::TrkVKalVrtFitter::setAthenaPropagator
void setAthenaPropagator(const Trk::IExtrapolator *)
Definition: VKalExtPropagator.cxx:477
Trk::CylinderSurface
Definition: CylinderSurface.h:55
AmgVector
AmgVector(4) T2BSTrackFilterTool
Definition: T2BSTrackFilterTool.cxx:114
Trk::TrkVKalVrtFitter::State::m_trkControl
std::vector< TrkMatControl > m_trkControl
Definition: TrkVKalVrtFitter.h:396
xAOD::TrackParticle_v1::radiusOfFirstHit
float radiusOfFirstHit() const
Returns the radius of the first hit.
Trk::pion
@ pion
Definition: ParticleHypothesis.h:32
Trk::IExtrapolator::extrapolate
virtual std::unique_ptr< NeutralParameters > extrapolate(const NeutralParameters &parameters, const Surface &sf, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true) const =0
Main extrapolation Interface starting from neutral parameters and aiming at surface.
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
CylinderSurface.h
Trk::VKalExtPropagator::m_vkalFitSvc
TrkVKalVrtFitter * m_vkalFitSvc
Pointer to TrkVKalVrtFitter.
Definition: VKalExtPropagator.h:54
Trk::TrkVKalVrtFitter::State::m_allowUltraDisplaced
bool m_allowUltraDisplaced
Definition: TrkVKalVrtFitter.h:435
Trk::ParametersBase
Definition: ParametersBase.h:55
Scale
void Scale(TH1 *h, double d=1)
Definition: comparitor.cxx:79
Trk::muon
@ muon
Definition: ParticleHypothesis.h:31
Trk::VKalExtPropagator::Propagate
virtual void Propagate(long int trkID, long int Charge, double *ParOld, double *CovOld, double *RefStart, double *RefEnd, double *ParNew, double *CovNew, IVKalState &istate) const override
Definition: VKalExtPropagator.cxx:86
beamspotman.dir
string dir
Definition: beamspotman.py:621
Trk::VKalExtPropagator::checkTarget
virtual bool checkTarget(double *, const IVKalState &istate) const override
Definition: VKalExtPropagator.cxx:69
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::TrkVKalVrtFitter::State::m_fitField
VKalAtlasMagFld m_fitField
Definition: TrkVKalVrtFitter.h:406
Trk::VKalExtPropagator::setPropagator
void setPropagator(const IExtrapolator *)
Definition: VKalExtPropagator.cxx:41
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::IExtrapolator
Definition: IExtrapolator.h:62
Trk::VKalExtPropagator::myExtrapNeutral
const NeutralParameters * myExtrapNeutral(const NeutralParameters *inpPer, Amg::Vector3D *endPoint) const
Definition: VKalExtPropagator.cxx:420
Trk::TrkVKalVrtFitter::State::m_refFrameY
double m_refFrameY
Definition: TrkVKalVrtFitter.h:394
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
Trk::IVKalState
Definition: IVKalState.h:21
Trk::addNoise
@ addNoise
Definition: MaterialUpdateMode.h:19
Trk::VKalExtPropagator::Protection
double Protection(const double *, const IVKalState &istate) const
Definition: VKalExtPropagator.cxx:48
LArCellBinning.step
step
Definition: LArCellBinning.py:158
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
Trk::VKalExtPropagator::~VKalExtPropagator
virtual ~VKalExtPropagator()
calibdata.copy
bool copy
Definition: calibdata.py:26
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
Trk::VKalExtPropagator::m_extrapolator
const IExtrapolator * m_extrapolator
Pointer to Extrapolator AlgTool.
Definition: VKalExtPropagator.h:53
Trk::SurfaceType::Line
@ Line
Trk::TrkVKalVrtFitter::State::m_eventContext
const EventContext * m_eventContext
Definition: TrkVKalVrtFitter.h:408
Trk::removeNoise
@ removeNoise
Definition: MaterialUpdateMode.h:20
Trk::VKalExtPropagator::myExtrapToLine
const TrackParameters * myExtrapToLine(long int TrkID, const TrackParameters *inpPer, Amg::Vector3D *endPoint, StraightLineSurface &lineTarget, const IVKalState &istate) const
Definition: VKalExtPropagator.cxx:355
VKalExtPropagator.h
Trk::StraightLineSurface
Definition: StraightLineSurface.h:51
Trk::TrkVKalVrtFitter::m_IDsizeZ
Gaudi::Property< double > m_IDsizeZ
Definition: TrkVKalVrtFitter.h:327
Trk::TrkVKalVrtFitter
Definition: TrkVKalVrtFitter.h:67