ATLAS Offline Software
Loading...
Searching...
No Matches
TrkVKalVrtFitter.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5// TrkVKalVrtFitter.h
6//
7#ifndef TRKVKALVRTFITTER_VKALVRTFITTER_H
8#define TRKVKALVRTFITTER_VKALVRTFITTER_H
9
10#include "GaudiKernel/ToolHandle.h"
12
13// Interfaces
15#include "TrkVKalVrtFitter/ITrkVKalVrtFitter.h" //base class
16#include "TrkVKalVrtFitter/IVertexCascadeFitter.h" //base class
17
19// MagField cache
23#include "TrkVKalVrtFitter/IVKalState.h" //base class
24#include "TrkVKalVrtFitter/VKalAtlasMagFld.h" //for Trk::VKalAtlasMagFld (member)
25#include "TrkVKalVrtFitter/VKalExtPropagator.h" //for Trk::VKalExtPropagator (member)
26
27#include "TrkVKalVrtCore/TrkVKalVrtCore.h" //for VKalVrtControl (member)
28//
29class IChronoStatSvc;
30class EventContext;
31
32namespace Trk{
33
34
35 enum { NTrMaxVFit=200 };
36 typedef std::vector<double> dvect;
37 class IExtrapolator;
38 class IMagneticFieldTool;
39 class Track;
41
44 std::vector<int> trkInVrt; // positions of participating tracks in common track list
45 std::vector<VertexID> pseudoInVrt; // VertexIDs of pseudos
46 double Mass{};
47 };
48
49 struct cascadeV{ // general description of vertex in cascade
50 VertexID vID; // vertex ID - used everywhere
51 std::vector<int> trkInVrt; // list of tracks attached to vertex directly
52 VertexID outPointingV; // to which vertex it points
53 std::vector<VertexID> inPointingV; // which vertices points to it
54 VertexID mergedTO; // merged to another vertex (not separate anymore)
55 std::vector<VertexID> mergedIN; // vertices attached to current
58 ~cascadeV() = default;
59 };
60
61
62//------------------------------------------------------------------------
63 //Tool should not be used reentrantly or used publically
64 class TrkVKalVrtFitter : public extends<AthAlgTool, IVertexFitter,
65 ITrkVKalVrtFitter,
66 IVertexCascadeFitter>
67 {
68 friend class VKalExtPropagator;
69 public:
70
71 virtual StatusCode initialize() override final;
72 virtual StatusCode finalize() override final;
73
74 TrkVKalVrtFitter(const std::string& t, const std::string& name, const IInterface* parent);
75 virtual ~TrkVKalVrtFitter();
76
77 //
78 // IVertexFitter interface
79 //
80
81 virtual std::unique_ptr<xAOD::Vertex> fit(
82 const EventContext& ctx,
83 const std::vector<const TrackParameters*>& perigeeList,
84 const Amg::Vector3D& startingPoint) const override final;
85
86 virtual std::unique_ptr<xAOD::Vertex> fit(
87 const EventContext& ctx,
88 const std::vector<const TrackParameters*>& perigeeList,
89 const std::vector<const NeutralParameters*>& /*neutralPerigeeList*/,
90 const Amg::Vector3D& startingPoint) const override final;
91
92 virtual std::unique_ptr<xAOD::Vertex> fit(
93 const EventContext& ctx,
94 const std::vector<const TrackParameters*>& perigeeList,
95 const xAOD::Vertex& constraint) const override final;
96
97 virtual std::unique_ptr<xAOD::Vertex> fit(
98 const EventContext& ctx,
99 const std::vector<const TrackParameters*>& perigeeList,
100 const std::vector<const NeutralParameters*>& /*neutralPerigeeList*/,
101 const xAOD::Vertex& constraint) const override final;
102
103 virtual std::unique_ptr<xAOD::Vertex> fit(
104 const EventContext& ctx,
105 const std::vector<const xAOD::TrackParticle*>& vectorTrk,
106 const Amg::Vector3D& startingPoint) const override final;
107
108 virtual std::unique_ptr<xAOD::Vertex> fit(
109 const EventContext& ctx,
110 const std::vector<const xAOD::TrackParticle*>& vectorTrk,
111 const xAOD::Vertex& constraint) const override final;
112
113 virtual std::unique_ptr<xAOD::Vertex> fit(
114 const EventContext& ctx,
115 const std::vector<const xAOD::TrackParticle*>& vectorTrk,
116 const std::vector<const xAOD::NeutralParticle*>& vectorNeu,
117 const Amg::Vector3D& startingPoint) const override final;
118
119 virtual std::unique_ptr<xAOD::Vertex> fit(
120 const EventContext& ctx,
121 const std::vector<const xAOD::TrackParticle*>& vectorTrk,
122 const std::vector<const xAOD::NeutralParticle*>& vectorNeu,
123 const xAOD::Vertex& constraint) const override final;
124
125 virtual std::unique_ptr<xAOD::Vertex> fit(
126 const EventContext& ctx,
127 const std::vector<const TrackParameters*>&) const override final;
128
129 virtual std::unique_ptr<xAOD::Vertex> fit(
130 const EventContext& ctx,
132 const std::vector<const Trk::NeutralParameters*>&) const override final;
133
134
135 /*-------------- Additional xAOD interfaces -------------*/
136 std::unique_ptr<xAOD::Vertex> fit(const std::vector<const xAOD::TrackParticle*>& vectorTrk,
137 const Amg::Vector3D& constraint,
138 IVKalState& istate) const;
139 std::unique_ptr<xAOD::Vertex> fit(const std::vector<const xAOD::TrackParticle*>& vectorTrk,
140 const xAOD::Vertex& constraint,
141 IVKalState& istate) const;
142
143//
144// Cascade fitter interface
145//
147 const std::vector<const xAOD::TrackParticle*>& list,
148 std::span<const double> particleMass,
149 IVKalState& istate,
150 double massConstraint = 0.) const override final;
151
152 VertexID nextVertex(const std::vector<const xAOD::TrackParticle*>& list,
153 std::span<const double> particleMass,
154 IVKalState& istate,
155 double massConstraint = 0.) const override final;
156
157 VertexID nextVertex(const std::vector<const xAOD::TrackParticle*>& list,
158 std::span<const double> particleMass,
159 const std::vector<VertexID>& precedingVertices,
160 IVKalState& istate,
161 double massConstraint = 0.) const override final;
162
164 const Vertex* primVertex = 0,
165 bool FirstDecayAtPV = false) const override final;
166
167 StatusCode addMassConstraint(
169 const std::vector<const xAOD::TrackParticle*>& tracksInConstraint,
170 const std::vector<VertexID>& verticesInConstraint,
171 IVKalState& istate,
172 double massConstraint) const override final;
173
174 //------ specific VKalVrt staff
175
177 const EventContext& ctx) const override final;
178
179 virtual StatusCode VKalVrtFit(
180 const std::vector<const xAOD::TrackParticle*>&,
181 const std::vector<const xAOD::NeutralParticle*>&,
183 TLorentzVector& Momentum,
184 long int& Charge,
186 dvect& Chi2PerTrk,
187 std::vector<std::vector<double>>& TrkAtVrt,
188 double& Chi2,
189 IVKalState& istate,
190 bool ifCovV0 = false) const override final;
191
192 virtual StatusCode VKalVrtFit(
195 TLorentzVector& Momentum,
196 long int& Charge,
198 dvect& Chi2PerTrk,
199 std::vector<std::vector<double>>& TrkAtVrt,
200 double& Chi2,
201 IVKalState& istate,
202 bool ifCovV0 = false) const override final;
203
204 virtual StatusCode VKalVrtFit(
208 TLorentzVector& Momentum,
209 long int& Charge,
211 dvect& Chi2PerTrk,
212 std::vector<std::vector<double>>& TrkAtVrt,
213 double& Chi2,
214 IVKalState& istate,
215 bool ifCovV0 = false) const override final;
216 //------
217 virtual StatusCode VKalVrtCvtTool(const Amg::Vector3D& Vertex,
218 const TLorentzVector& Momentum,
219 const dvect& CovVrtMom,
220 const long int& Charge,
221 dvect& Perigee,
222 dvect& CovPerigee,
223 IVKalState& istate) const override final;
224 //-----
225 virtual StatusCode VKalVrtFitFast(
226 std::span<const xAOD::TrackParticle* const>,
227 Amg::Vector3D& Vertex, double &minDZ,
228 IVKalState& istate) const;
229
230 virtual StatusCode VKalVrtFitFast(
231 const std::span<const xAOD::TrackParticle* const>,
233 IVKalState& istate) const override final;
234
235 virtual StatusCode VKalVrtFitFast(
238 IVKalState& istate) const override final;
239
240 virtual std::unique_ptr<Trk::Perigee>
241 CreatePerigee(const std::vector<double>& VKPerigee,
242 const std::vector<double>& VKCov,
243 IVKalState& istate) const override final;
244
245 virtual StatusCode VKalGetTrkWeights(
246 dvect& Weights,
247 const IVKalState& istate) const override final;
248
249 virtual StatusCode VKalGetFullCov(long int,
250 dvect& CovMtx,
251 IVKalState& istate,
252 bool = false) const override final;
253
254 virtual StatusCode VKalGetMassError(
255 double& Mass,
256 double& MassError,
257 const IVKalState& istate) const override final;
258
259 virtual void setApproximateVertex(double X,
260 double Y,
261 double Z,
262 IVKalState& istate) const override final;
263
264 virtual void setMassForConstraint(double Mass,
265 IVKalState& istate) const override final;
266
267 virtual void setMassForConstraint(double Mass,
268 std::span<const int>,
269 IVKalState& istate) const override final;
270
271 virtual void setRobustness(int, IVKalState& istate) const override final;
272
273 virtual void setRobustScale(double, IVKalState& istate) const override final;
274
275 virtual void setCnstType(int, IVKalState& istate) const override final;
276
278 IVKalState& istate) const override final;
279
280 virtual void setVertexForConstraint(double X,
281 double Y,
282 double Z,
283 IVKalState& istate) const override final;
284
285 virtual void setCovVrtForConstraint(double XX,
286 double XY,
287 double YY,
288 double XZ,
289 double YZ,
290 double ZZ,
291 IVKalState& istate) const override final;
292
293 virtual void setMassInputParticles(const std::vector<double>&,
294 IVKalState& istate) const override final;
295
296 virtual double VKalGetImpact(const xAOD::TrackParticle*,
298 const long int Charge,
299 dvect& Impact,
300 dvect& ImpactError,
301 IVKalState& istate) const override final;
302
303 virtual double VKalGetImpact(const Trk::Perigee*,
305 const long int Charge,
306 dvect& Impact,
307 dvect& ImpactError,
308 IVKalState& istate) const override final;
309
310 virtual double VKalGetImpact(const EventContext& ctx,
311 const xAOD::TrackParticle*,
313 const long int Charge,
314 dvect& Impact,
315 dvect& ImpactError) const override final;
316
317 virtual double VKalGetImpact(const EventContext& ctx,
318 const Trk::Perigee*,
320 const long int Charge,
321 dvect& Impact,
322 dvect& ImpactError) const override final;
323
324 //
325 // ATLAS related code
326 //
327 private:
328 Gaudi::Property<int> m_Robustness{this, "Robustness", 0};
329 Gaudi::Property<double> m_RobustScale{this, "RobustScale", 1.0};
330 Gaudi::Property<double> m_cascadeCnstPrecision{this, "CascadeCnstPrecision", 1.e-4};
331 Gaudi::Property<double> m_massForConstraint{this, "MassForConstraint", -1.0};
332 Gaudi::Property<int> m_IterationNumber{this, "IterationNumber", 0};
333 Gaudi::Property<double> m_IterationPrecision{this, "IterationPrecision", 0.0};
334 Gaudi::Property<double> m_IDsizeR{this, "IDsizeR", 1150.0};
335 Gaudi::Property<double> m_IDsizeZ{this, "IDsizeZ", 3000.0};
336 Gaudi::Property<double> m_MSsizeR{this, "MSsizeR", 8000.0};
337 Gaudi::Property<double> m_MSsizeZ{this, "MSsizeZ", 10000.0};
338 Gaudi::Property<std::vector<double>> m_c_VertexForConstraint{this, "VertexForConstraint", {0,0,0}};
339 Gaudi::Property<std::vector<double>> m_c_CovVrtForConstraint{this, "CovVrtForConstraint", {0,0,0,0,0,0}};
340 Gaudi::Property<std::vector<double>> m_c_MassInputParticles{this, "InputParticleMasses", {}, "List of masses of input particles (pions assumed if absent)"};
341
342 ToolHandle<IExtrapolator> m_extPropagator{this, "Extrapolator", "", "External propagator"};
343 // Read handle for conditions object to get the field cache
346 "AtlasFieldCacheCondObj",
347 "fieldCondObj",
348 "Name of the Magnetic Field key" };
349 Gaudi::Property<bool> m_firstMeasuredPoint{this, "FirstMeasuredPoint", false, "Use FirstMeasuredPoint strategy in fits"};
350 Gaudi::Property<bool> m_firstMeasuredPointLimit{this, "FirstMeasuredPointLimit", false, "Use FirstMeasuredPointLimit strategy"};
351 Gaudi::Property<bool> m_firstMeasuredRadiusLimit{this, "FirstMeasuredRadiusLimit", false,
352 "Use radius of FirstMeasuredRadiusLimit as maximal vertex radius"};
353 Gaudi::Property<bool> m_makeExtendedVertex{this, "MakeExtendedVertex", false, "Return VxCandidate with full covariance matrix"};
354 Gaudi::Property<bool> m_useFixedField{this, "useFixedField", false, "Use fixed magnetic field instead of exact Atlas one"};
355
356 bool m_isAtlasField{false}; // To allow callback and then field first call only at execute stage
357
358 Gaudi::Property<bool> m_useAprioriVertex{this, "useAprioriVertexCnst", false, "Use a priori vertex constraint"};
359 Gaudi::Property<bool> m_useThetaCnst{this, "useThetaCnst", false, "Use angle dTheta=0 constraint"};
360 Gaudi::Property<bool> m_usePhiCnst{this, "usePhiCnst", false, "Use angle dPhi=0 constraint"};
361 Gaudi::Property<bool> m_usePointingCnst{this, "usePointingCnst", false, "Use pointing to other vertex constraint"};
362 Gaudi::Property<bool> m_useZPointingCnst{this, "useZPointingCnst", false, "Use ZPointing to other vertex constraint"};
363 Gaudi::Property<bool> m_usePassNear{this, "usePassNearCnst", false, "Use combined particle pass near other vertex constraint"};
364 Gaudi::Property<bool> m_usePassWithTrkErr{this, "usePassWithTrkErrCnst", false, "Use pass near with combined particle errors constraint"};
365 Gaudi::Property<bool> m_frozenVersionForBTagging{this, "FrozenVersionForBTagging", false, "Frozen version for BTagging"};
366 Gaudi::Property<bool> m_allowUltraDisplaced{this, "allowUltraDisplaced", false, "Allow ultra displaced vertices"};
368
369 // Track material effects control
370 //
372 {
373 // Track reference point(hit) in global ATLAS frame
376 int TrkID;
378 double prtMass;
379 Amg::Vector3D trkSavedLocalVertex; // Local VKalVrtCore vertex
380 };
381
383 {
384 public:
386 std::vector<const xAOD::TrackParticle*> m_partListForCascade;
387
388 std::vector<double> m_partMassForCascade;
389 std::vector<PartialMassConstraint> m_partMassCnstForCascade;
390 //
391 std::vector<cascadeV> m_cascadeVList; // list of cascade vertex objects
392 };
393
394 class State : public IVKalState
395 {
396 public:
397 //
398 // Origin of global reference frame.
399 // (0,0,0) by default but can be changed by input tracks
400 //
401 double m_refFrameX = 0;
402 double m_refFrameY = 0;
403 double m_refFrameZ = 0;
404 std::vector<TrkMatControl> m_trkControl;
405
406 //
407 // Arrays needed for fitting kernel
408 //
409 double m_apar[NTrMaxVFit][5]{}; // used only for fit preparation
410 double m_awgt[NTrMaxVFit][15]{}; // used only for fit preparation
411 long int m_ich[NTrMaxVFit]{};
412 double m_parfs[NTrMaxVFit][3]{};
413
416 const EventContext* m_eventContext = nullptr;
418
420
421 double m_save_xyzfit[3]{}; // Save vertex after successful fit
422
423 int m_FitStatus = 0; /* Fit Status flag*/
424 /* =0 - no fit. All "after fit" routines fail*/
425 /* >1 - good fit. "After fit" routines work*/
426
427 //
428 // Array for full error matrix
429 //
430 std::vector<double> m_ErrMtx;
431
432 int m_planeCnstNDOF = 0; /* NDOF addition if plane constraint is used */
433 std::vector<double> m_ApproximateVertex;
434
435 bool m_useAprioriVertex = false;
436 bool m_useThetaCnst = false;
437 bool m_usePhiCnst = false;
438 bool m_usePointingCnst = false;
439 bool m_useZPointingCnst = false;
440 bool m_usePassNear = false;
444
445 std::vector<double> m_VertexForConstraint;
446 std::vector<double> m_CovVrtForConstraint;
448 std::vector<double> m_partMassCnst;
449 std::vector<std::vector<int>> m_partMassCnstTrk;
451 double m_RobustScale = 1;
452 std::vector<double> m_MassInputParticles;
453 double m_parPlaneCnst[4]{};
454 double m_cnstRadius{};
455 double m_cnstRadiusRef[2]{};
456
457
458 std::unique_ptr<CascadeState> m_cascadeState;
459
462 VKalVrtControlBase(&m_fitField, nullptr, nullptr, nullptr, this))
463 {
464 m_ApproximateVertex.reserve(3);
465 }
466 };
467
468//-----------------------------------------------------------------
469// Cascade related stuff
470//
471 static void makeSimpleCascade(std::vector< std::vector<int> > &, std::vector< std::vector<int> > &,
472 CascadeState& cstate) ;
473 static void printSimpleCascade(std::vector< std::vector<int> > &, std::vector< std::vector<int> > &,
474 const CascadeState& cstate) ;
475 static int findPositions(const std::vector<int> &,const std::vector<int> &, std::vector<int> &) ;
476 static int getSimpleVIndex( const VertexID &, const CascadeState& cstate) ;
477 static int indexInV( const VertexID &, const CascadeState& cstate) ;
478 static int getCascadeNDoF (const CascadeState& cstate) ;
479//----------------------
480// Control variables
481//
482
483 double m_BMAG{1.997}; /* const magnetic field if needed */
484 double m_CNVMAG{0.29979246}; /* conversion constant for MeV and MM */
485
486
489//
490//
491//
492
493
494
495//
496// Private technical functions
497//
499 void initState (const EventContext& ctx, State& state) const;
500
501 static void FillMatrixP(AmgSymMatrix(5)& , std::vector<double>& ) ;
502 static void FillMatrixP(int iTrk, AmgSymMatrix(5)& , std::vector<double>& ) ;
503 static Amg::MatrixX * GiveFullMatrix(int NTrk, std::vector<double>&) ;
504 bool convertAmg5SymMtx(const AmgSymMatrix(5)*, double[15] ) const;
505
506 void VKalTransform(double MAG,
507 double A0V,
508 double ZV,
509 double PhiV,
510 double ThetaV,
511 double PInv,
512 const double[15],
513 long int& Charge,
514 double[5],
515 double[15]) const;
516
517 std::unique_ptr<xAOD::Vertex> makeXAODVertex(int,
518 const Amg::Vector3D&,
519 const dvect&,
520 const dvect&,
521 const std::vector<dvect>&,
522 double,
523 State& state) const;
524
525 StatusCode CvtPerigee(const std::vector<const Perigee*>& list,
526 int& ntrk,
527 State& state) const;
528
529 StatusCode CvtTrackParticle(
530 std::span<const xAOD::TrackParticle* const> list,
531 int& ntrk,
532 State& state) const;
533
534 StatusCode CvtNeutralParticle(
535 const std::vector<const xAOD::NeutralParticle*>& list,
536 int& ntrk,
537 State& state) const;
538
539 StatusCode CvtTrackParameters(
540 const std::vector<const TrackParameters*>& InpTrk,
541 int& ntrk,
542 State& state) const;
543
544 StatusCode CvtNeutralParameters(
545 const std::vector<const NeutralParameters*>& InpTrk,
546 int& ntrk,
547 State& state) const;
548
549 void VKalVrtConfigureFitterCore(int NTRK, State& state) const;
550
551 void VKalToTrkTrack(double curBMAG,
552 double vp1,
553 double vp2,
554 double vp3,
555 double& tp1,
556 double& tp2,
557 double& tp3) const;
558
559 int VKalVrtFit3(int ntrk,
561 TLorentzVector& Momentum,
562 long int& Charge,
564 dvect& Chi2PerTrk,
565 std::vector<std::vector<double>>& TrkAtVrt,
566 double& Chi2,
567 State& state,
568 bool ifCovV0) const;
569
570 std::unique_ptr<Perigee> CreatePerigee(double Vx,
571 double Vy,
572 double Vz,
573 const std::vector<double>& VKPerigee,
574 const std::vector<double>& VKCov,
575 State& state) const;
576
577 //
578 //
579 static const Perigee* GetPerigee(const TrackParameters* i_ntrk) ;
580
581 static int VKalGetNDOF(const State& state) ;
582 };
583
584} //end of namespace
585
586#endif
#define AmgSymMatrix(dim)
Base class for VKal state object.
Eigen::Matrix< double, 3, 1 > Vector3D
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h).
Support class for PropertyMgr.
Definition Property.h:23
Interface class for the extrapolation AlgTool, it inherits from IAlgTool Detailed information about p...
std::vector< const xAOD::TrackParticle * > m_partListForCascade
std::vector< double > m_partMassForCascade
std::vector< PartialMassConstraint > m_partMassCnstForCascade
std::vector< cascadeV > m_cascadeVList
std::vector< double > m_partMassCnst
std::vector< double > m_MassInputParticles
MagField::AtlasFieldCache m_fieldCache
std::vector< double > m_ApproximateVertex
double m_apar[NTrMaxVFit][5]
std::vector< double > m_VertexForConstraint
double m_awgt[NTrMaxVFit][15]
std::vector< double > m_CovVrtForConstraint
double m_parfs[NTrMaxVFit][3]
std::vector< std::vector< int > > m_partMassCnstTrk
std::unique_ptr< CascadeState > m_cascadeState
const TrackParameters * m_globalFirstHit
std::vector< double > m_ErrMtx
const EventContext * m_eventContext
std::vector< TrkMatControl > m_trkControl
static int getSimpleVIndex(const VertexID &, const CascadeState &cstate)
virtual std::unique_ptr< Trk::Perigee > CreatePerigee(const std::vector< double > &VKPerigee, const std::vector< double > &VKCov, IVKalState &istate) const override final
StatusCode CvtTrackParameters(const std::vector< const TrackParameters * > &InpTrk, int &ntrk, State &state) const
void VKalVrtConfigureFitterCore(int NTRK, State &state) const
TrkVKalVrtFitter(const std::string &t, const std::string &name, const IInterface *parent)
virtual std::unique_ptr< xAOD::Vertex > fit(const EventContext &ctx, const std::vector< const TrackParameters * > &perigeeList, const Amg::Vector3D &startingPoint) const override final
Interface for MeasuredPerigee with starting point.
const IExtrapolator * m_InDetExtrapolator
Pointer to Extrapolator AlgTool.
Gaudi::Property< bool > m_makeExtendedVertex
virtual void setMassInputParticles(const std::vector< double > &, IVKalState &istate) const override final
VertexID nextVertex(const std::vector< const xAOD::TrackParticle * > &list, std::span< const double > particleMass, IVKalState &istate, double massConstraint=0.) const override final
static int indexInV(const VertexID &, const CascadeState &cstate)
Gaudi::Property< double > m_MSsizeZ
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
virtual void setCnstType(int, IVKalState &istate) const override final
bool convertAmg5SymMtx(const AmgSymMatrix(5) *, double[15]) const
static Amg::MatrixX * GiveFullMatrix(int NTrk, std::vector< double > &)
Gaudi::Property< bool > m_usePhiCnst
virtual StatusCode VKalVrtCvtTool(const Amg::Vector3D &Vertex, const TLorentzVector &Momentum, const dvect &CovVrtMom, const long int &Charge, dvect &Perigee, dvect &CovPerigee, IVKalState &istate) const override final
virtual void setCovVrtForConstraint(double XX, double XY, double YY, double XZ, double YZ, double ZZ, IVKalState &istate) const override final
virtual StatusCode VKalVrtFitFast(std::span< const xAOD::TrackParticle *const >, Amg::Vector3D &Vertex, double &minDZ, IVKalState &istate) const
StatusCode CvtPerigee(const std::vector< const Perigee * > &list, int &ntrk, State &state) const
virtual StatusCode VKalGetMassError(double &Mass, double &MassError, const IVKalState &istate) const override final
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
virtual void setVertexForConstraint(const xAOD::Vertex &, IVKalState &istate) const override final
Gaudi::Property< bool > m_usePointingCnst
Gaudi::Property< double > m_IDsizeZ
static int findPositions(const std::vector< int > &, const std::vector< int > &, std::vector< int > &)
ToolHandle< IExtrapolator > m_extPropagator
int VKalVrtFit3(int ntrk, Amg::Vector3D &Vertex, TLorentzVector &Momentum, long int &Charge, dvect &ErrorMatrix, dvect &Chi2PerTrk, std::vector< std::vector< double > > &TrkAtVrt, double &Chi2, State &state, bool ifCovV0) const
Gaudi::Property< int > m_IterationNumber
static const Perigee * GetPerigee(const TrackParameters *i_ntrk)
Gaudi::Property< bool > m_allowUltraDisplaced
Gaudi::Property< double > m_RobustScale
static void makeSimpleCascade(std::vector< std::vector< int > > &, std::vector< std::vector< int > > &, CascadeState &cstate)
void initState(const EventContext &ctx, State &state) const
virtual StatusCode initialize() override final
Gaudi::Property< std::vector< double > > m_c_CovVrtForConstraint
virtual StatusCode VKalGetFullCov(long int, dvect &CovMtx, IVKalState &istate, bool=false) const override final
Gaudi::Property< double > m_massForConstraint
VertexID startVertex(const std::vector< const xAOD::TrackParticle * > &list, std::span< const double > particleMass, IVKalState &istate, double massConstraint=0.) const override final
Interface for cascade fit.
virtual StatusCode VKalVrtFit(const std::vector< const xAOD::TrackParticle * > &, const std::vector< const xAOD::NeutralParticle * > &, Amg::Vector3D &Vertex, TLorentzVector &Momentum, long int &Charge, dvect &ErrorMatrix, dvect &Chi2PerTrk, std::vector< std::vector< double > > &TrkAtVrt, double &Chi2, IVKalState &istate, bool ifCovV0=false) const override final
Gaudi::Property< bool > m_frozenVersionForBTagging
Gaudi::Property< bool > m_firstMeasuredPoint
Gaudi::Property< int > m_Robustness
virtual double VKalGetImpact(const xAOD::TrackParticle *, const Amg::Vector3D &Vertex, const long int Charge, dvect &Impact, dvect &ImpactError, IVKalState &istate) const override final
static void printSimpleCascade(std::vector< std::vector< int > > &, std::vector< std::vector< int > > &, const CascadeState &cstate)
virtual StatusCode VKalGetTrkWeights(dvect &Weights, const IVKalState &istate) const override final
static int VKalGetNDOF(const State &state)
Gaudi::Property< bool > m_usePassWithTrkErr
Gaudi::Property< double > m_cascadeCnstPrecision
static void FillMatrixP(AmgSymMatrix(5)&, std::vector< double > &)
Gaudi::Property< bool > m_useZPointingCnst
Gaudi::Property< bool > m_useAprioriVertex
Gaudi::Property< bool > m_firstMeasuredRadiusLimit
Gaudi::Property< bool > m_useFixedField
std::unique_ptr< xAOD::Vertex > makeXAODVertex(int, const Amg::Vector3D &, const dvect &, const dvect &, const std::vector< dvect > &, double, State &state) const
virtual StatusCode finalize() override final
VxCascadeInfo * fitCascade(IVKalState &istate, const Vertex *primVertex=0, bool FirstDecayAtPV=false) const override final
StatusCode CvtTrackParticle(std::span< const xAOD::TrackParticle *const > list, int &ntrk, State &state) const
Gaudi::Property< bool > m_usePassNear
VKalExtPropagator * m_fitPropagator
friend class VKalExtPropagator
virtual void setApproximateVertex(double X, double Y, double Z, IVKalState &istate) const override final
Gaudi::Property< std::vector< double > > m_c_MassInputParticles
Gaudi::Property< std::vector< double > > m_c_VertexForConstraint
virtual void setMassForConstraint(double Mass, IVKalState &istate) const override final
Gaudi::Property< double > m_IterationPrecision
Gaudi::Property< double > m_IDsizeR
Gaudi::Property< bool > m_firstMeasuredPointLimit
virtual std::unique_ptr< IVKalState > makeState(const EventContext &ctx) const override final
virtual void setRobustness(int, IVKalState &istate) const override final
StatusCode CvtNeutralParticle(const std::vector< const xAOD::NeutralParticle * > &list, int &ntrk, State &state) const
Gaudi::Property< double > m_MSsizeR
StatusCode addMassConstraint(VertexID Vertex, const std::vector< const xAOD::TrackParticle * > &tracksInConstraint, const std::vector< VertexID > &verticesInConstraint, IVKalState &istate, double massConstraint) const override final
void VKalToTrkTrack(double curBMAG, double vp1, double vp2, double vp3, double &tp1, double &tp2, double &tp3) const
void setAthenaPropagator(const Trk::IExtrapolator *)
virtual void setRobustScale(double, IVKalState &istate) const override final
StatusCode CvtNeutralParameters(const std::vector< const NeutralParameters * > &InpTrk, int &ntrk, State &state) const
Gaudi::Property< bool > m_useThetaCnst
static int getCascadeNDoF(const CascadeState &cstate)
This class is a simplest representation of a vertex candidate.
STL class.
Definition of ATLAS Math & Geometry primitives (Amg).
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 3, 1 > Vector3D
=============================================================================
Ensure that the ATLAS eigen extensions are properly loaded.
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
ParametersBase< NeutralParametersDim, Neutral > NeutralParameters
ParametersBase< TrackParametersDim, Charged > TrackParameters
std::vector< double > dvect
STL namespace.
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
std::vector< VertexID > pseudoInVrt
std::vector< int > trkInVrt
std::vector< VertexID > mergedIN
VertexID outPointingV
~cascadeV()=default
std::vector< VertexID > inPointingV
std::vector< int > trkInVrt
#define private