ATLAS Offline Software
Loading...
Searching...
No Matches
AdaptiveMultiPriVtxFinderTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7// ATHENA
8#include "GaudiKernel/IInterface.h"
13
14
15// ACTS
16#include "Acts/Propagator/Navigator.hpp"
17#include "Acts/Propagator/EigenStepper.hpp"
18#include "Acts/Propagator/Propagator.hpp"
19#include "Acts/Utilities/AnnealingUtility.hpp"
20#include "Acts/Surfaces/PerigeeSurface.hpp"
21#include "Acts/Vertexing/TrackAtVertex.hpp"
22
23#include "Acts/Vertexing/GaussianGridTrackDensity.hpp"
24#include "Acts/Vertexing/GridDensityVertexFinder.hpp"
25#include "Acts/Vertexing/GaussianTrackDensity.hpp"
26
27
28// STL
29#include <iostream>
30#include <memory>
31
32namespace
33{
34 // Helper struct for vertex signal compatibility
35 struct VertexAndSignalComp {
36 xAOD::Vertex* first;
37 double second;
38 VertexAndSignalComp(xAOD::Vertex* p1, double p2)
39 : first(p1), second(p2) {}
40 bool
41 operator < (const VertexAndSignalComp& other) const
42 {return second > other.second;}
43 };
44} //anonymous namespace
45
48{
49 using namespace std::literals::string_literals;
50
51 ATH_CHECK(m_beamSpotKey.initialize());
52 ATH_CHECK(m_trkFilter.retrieve());
53
54 ATH_CHECK(m_ctxProvider.initialize());
55 ATH_MSG_INFO("Initializing ACTS AMVF tool");
56 ATH_CHECK( m_trackingGeometrySvc.retrieve() );
57 std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry
58 = m_trackingGeometrySvc->trackingGeometry();
59
60 // Logger
61 m_logger = makeActsAthenaLogger(this, "Acts");
62
63 Acts::Navigator navigator( Acts::Navigator::Config{ std::move(trackingGeometry) },
64 logger().cloneWithSuffix("Navigator"));
65
66 auto bField = std::make_shared<ATLASMagneticFieldWrapper>();
67 auto stepper = Acts::EigenStepper<>(bField);
68 m_propagator = std::make_shared<Propagator>(std::move(stepper),
69 std::move(navigator),
70 logger().cloneWithSuffix("Prop"));
71
72 // IP Estimator
73 Acts::ImpactPointEstimator::Config ipEstCfg(bField, m_propagator);
74 ipEstCfg.maxIterations = m_ipEstMaxIterations;
75 ipEstCfg.precision = m_ipEstPrecision;
76 Acts::ImpactPointEstimator ipEst(ipEstCfg,
77 logger().cloneWithSuffix("ImpactPointEstimator"));
78
79 Acts::AnnealingUtility::Config annealingConfig;
80 annealingConfig.setOfTemperatures = m_annealingTemps;
81 annealingConfig.cutOff = m_annealingCutOff;
82 Acts::AnnealingUtility annealingUtility(annealingConfig);
83
84 // Linearizer for Acts::BoundParameters type test
85 TrackLinearizer::Config ltConfig;
86 ltConfig.bField = bField;
87 ltConfig.propagator = m_propagator;
88 m_linearizer.emplace(ltConfig, logger().cloneWithSuffix("Linearizer"));
89
90 // Vertex fitter configuration
91 VertexFitter::Config fitterCfg(ipEst);
92 fitterCfg.annealingTool = std::move(annealingUtility);
93 fitterCfg.maxIterations = m_fitterMaxIterations;
94 fitterCfg.maxDistToLinPoint = m_fitterMaxDistToLinPoint;
95 fitterCfg.minWeight = m_minWeightFitter;
96 fitterCfg.maxRelativeShift = m_fitterMaxRelativeShift;
97 fitterCfg.doSmoothing = m_fitterDoSmoothing;
98 fitterCfg.extractParameters.connect<&TrackWrapper::extractParameters>();
99 fitterCfg.trackLinearizer.connect<&TrackLinearizer::linearizeTrack>(&*m_linearizer);
100 VertexFitter fitter(std::move(fitterCfg), logger().cloneWithSuffix("Fitter"));
101
102 std::string seederType = m_seederType;
103
104 if (seederType == "Grid") {
105 Acts::GaussianGridTrackDensity::Config trackDensityConfig;
106 trackDensityConfig.mainGridSize = m_gridMainGridSize;
107 trackDensityConfig.trkGridSize = m_gridTrkGridSize;
108 trackDensityConfig.useHighestSumZPosition = m_gridUseHighestSumZPosition;
109 Acts::GaussianGridTrackDensity trackDensity(trackDensityConfig);
110
111 Acts::GridDensityVertexFinder::Config gridSeedFinderConfig(trackDensity);
112 gridSeedFinderConfig.extractParameters.connect<&TrackWrapper::extractParameters>();
113 gridSeedFinderConfig.maxD0TrackSignificance = m_gridMaxD0Significance;
114 gridSeedFinderConfig.maxZ0TrackSignificance = m_gridMaxZ0Significance;
115
116 Acts::GridDensityVertexFinder gridSeedFinder(gridSeedFinderConfig);
117
118 VertexFinder::Config finderConfig(
119 std::move(fitter),
120 std::make_shared<Acts::GridDensityVertexFinder>(gridSeedFinder),
121 std::move(ipEst),
122 bField
123 );
124
125 initializeVertexFinder(std::move(finderConfig));
126 }
127 else if (seederType == "Gaussian") {
128 Acts::GaussianTrackDensity::Config trackDensityConfig;
129 trackDensityConfig.d0MaxSignificance = m_gaussianMaxD0Significance;
130 trackDensityConfig.z0MaxSignificance = m_gaussianMaxZ0Significance;
131 trackDensityConfig.extractParameters.connect<&TrackWrapper::extractParameters>();
132
133 Acts::GaussianTrackDensity trackDensity(trackDensityConfig);
134 VertexSeedFinder::Config seedFinderConfig(trackDensity);
135 auto seedFinder = std::make_shared<VertexSeedFinder>(seedFinderConfig);
136
137 VertexFinder::Config finderConfig(
138 std::move(fitter),
139 seedFinder,
140 std::move(ipEst),
141 bField
142 );
143
144 initializeVertexFinder(std::move(finderConfig));
145 }
146 else {
147 ATH_MSG_ERROR("Unknown seederType '" << seederType << "'.");
148 return StatusCode::FAILURE;
149 }
150
151 ATH_MSG_INFO("ACTS AMVF tool successfully initialized");
152 return StatusCode::SUCCESS;
153 }
154
155 void
157 {
158
159 finderConfig.tracksMaxZinterval = m_tracksMaxZinterval;
160 finderConfig.tracksMaxSignificance = m_tracksMaxSignificance;
161 finderConfig.maxVertexChi2 = m_maxVertexChi2;
162 finderConfig.doRealMultiVertex = m_doRealMultiVertex;
163 finderConfig.useFastCompatibility = m_useFastCompatibility;
164 finderConfig.maxMergeVertexSignificance = m_maxMergeVertexSignificance;
165 finderConfig.minWeight = m_minWeight;
166 finderConfig.maxIterations = m_maxIterations;
167 finderConfig.addSingleTrackVertices = m_addSingleTrackVertices;
168 finderConfig.doFullSplitting = m_doFullSplitting;
169 finderConfig.maximumVertexContamination = m_maximumVertexContamination;
170 finderConfig.initialVariances = Acts::Vector4::Constant(m_looseConstrValue);
171 finderConfig.useVertexCovForIPEstimation = m_useVertexCovForIPEstimation;
172 finderConfig.useSeedConstraint = m_useSeedConstraint;
173
174 finderConfig.extractParameters.connect<&TrackWrapper::extractParameters>();
175
176 m_vertexFinder = std::make_shared<VertexFinder>(
177 std::move(finderConfig),
178 logger().cloneWithSuffix("Finder"));
179}
180
181std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
183 const TrackCollection* trackTES) const
184{
186 const Trk::RecVertex& beamposition(beamSpotHandle->beamVtx());
187
188 std::vector<std::unique_ptr<Trk::ITrackLink>> selectedTracks;
189
190 typedef DataVector<Trk::Track>::const_iterator TrackDataVecIter;
191
192 bool selectionPassed;
193 for (TrackDataVecIter itr = (*trackTES).begin(); itr != (*trackTES).end(); ++itr) {
195 selectionPassed = static_cast<bool>(m_trkFilter->accept(**itr, &beamposition));
196 } else {
197 Trk::Vertex null(Amg::Vector3D(0, 0, 0));
198 selectionPassed = static_cast<bool>(m_trkFilter->accept(**itr, &null));
199 }
200 if (selectionPassed) {
202 link.setElement(*itr);
203 auto trkPtr = std::make_unique<Trk::LinkToTrack>(link);
204 trkPtr->setStorableObject(*trackTES);
205 selectedTracks.push_back(std::move(trkPtr));
206 }
207 }
208
209 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> returnContainers = findVertex(ctx, std::move(selectedTracks));
210
211 return returnContainers;
212}
213
214std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
216 const xAOD::TrackParticleContainer* trackParticles) const
217{
218
219 std::vector<std::unique_ptr<Trk::ITrackLink>> selectedTracks;
221 xAOD::Vertex beamposition;
222 beamposition.makePrivateStore();
223 beamposition.setPosition(beamSpotHandle->beamVtx().position());
224 beamposition.setCovariancePosition(beamSpotHandle->beamVtx().covariancePosition());
225
226 typedef DataVector<xAOD::TrackParticle>::const_iterator TrackParticleDataVecIter;
227
228 bool selectionPassed;
229 for (TrackParticleDataVecIter itr = (*trackParticles).begin(); itr != (*trackParticles).end(); ++itr) {
231 selectionPassed = static_cast<bool>(m_trkFilter->accept(**itr, &beamposition));
232 } else {
233 xAOD::Vertex null;
234 null.makePrivateStore();
235 null.setPosition(Amg::Vector3D(0, 0, 0));
236 AmgSymMatrix(3) vertexError;
237 vertexError.setZero();
238 null.setCovariancePosition(vertexError);
239 selectionPassed = static_cast<bool>(m_trkFilter->accept(**itr, &null));
240 }
241
242 if (selectionPassed) {
244 link.setElement(*itr);
245 auto trkPtr = std::make_unique<Trk::LinkToXAODTrackParticle>(link);
246 trkPtr->setStorableObject(*trackParticles);
247 selectedTracks.push_back(std::move(trkPtr));
248 }
249 }
250
251 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> returnContainers = findVertex(ctx, std::move(selectedTracks));
252
253 return returnContainers;
254}
255
256
257std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
259 const std::vector<std::unique_ptr<Trk::ITrackLink>>& trackVector) const
260{
261 using namespace Acts::UnitLiterals; // !!!
262
263 const InDet::BeamSpotData* beamSpotHandle{};
264 if (!SG::get(beamSpotHandle, m_beamSpotKey, ctx).isSuccess()) {
265 return {};
266 }
267 const Acts::Vector3& beamSpotPos = beamSpotHandle->beamVtx().position();
268 Acts::Vertex beamSpotConstraintVtx(beamSpotPos);
269 beamSpotConstraintVtx.setCovariance(beamSpotHandle->beamVtx().covariancePosition());
270
271 // Get the magnetic field context
272 const Acts::MagneticFieldContext magFieldContext = m_ctxProvider.getMagneticFieldContext(ctx);
273 const Acts::GeometryContext geoContext = m_ctxProvider.getGeometryContext(ctx);
274
275 // The output vertex containers
276 xAOD::VertexContainer* theVertexContainer = new xAOD::VertexContainer;
277 xAOD::VertexAuxContainer* theVertexAuxContainer = new xAOD::VertexAuxContainer;
278 theVertexContainer->setStore(theVertexAuxContainer);
279
280 if(trackVector.empty()){
281 xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
282 theVertexContainer->push_back(dummyxAODVertex);
283 dummyxAODVertex->setPosition(beamSpotHandle->beamVtx().position());
284 dummyxAODVertex->setCovariancePosition(beamSpotHandle->beamVtx().covariancePosition());
285 dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
286
287 return std::make_pair(theVertexContainer, theVertexAuxContainer);
288 }
289
290 std::shared_ptr<Acts::PerigeeSurface> perigeeSurface =
291 Acts::Surface::makeShared<Acts::PerigeeSurface>(
292 Amg::toIsometry3D((trackVector[0])->parameters()->associatedSurface().transform()));
293
294 // Convert tracks to Acts::BoundParameters
295 std::vector<TrackWrapper> allTracks;
296
297 for (const auto& trk : trackVector) {
298 const auto& trkParams = trk->parameters();
299 const auto& params = trkParams->parameters();
300
301 Acts::BoundVector actsParams;
302 actsParams << params(0), params(1), params(2), params(3), params(4)*1./(1_MeV), 0.;
303
304 if(trkParams->covariance() == nullptr){
305 continue;
306 }
307
308 auto cov = *(trkParams->covariance());
309
310 // TODO: check if the following works as well:
311 // cov->col(4) *= 1./1_MeV;
312 // cov->row(4) *= 1./1_MeV;
313 Acts::BoundMatrix covMat;
314 covMat << cov(0,0) , cov(0,1) , cov(0,2) , cov(0,3) , cov(0,4) *1./(1_MeV), 0
315 , cov(1,0) , cov(1,1) , cov(1,2) , cov(1,3) , cov(1,4) *1./(1_MeV) , 0
316 , cov(2,0) , cov(2,1) , cov(2,2) , cov(2,3) , cov(2,4) *1./(1_MeV) , 0
317 , cov(3,0) , cov(3,1) , cov(3,2) , cov(3,3) , cov(3,4) *1./(1_MeV) , 0
318 , cov(4,0) *1./(1_MeV) , cov(4,1) *1./(1_MeV) , cov(4,2) *1./(1_MeV) , cov(4,3) *1./(1_MeV) , cov(4,4) *1./(1_MeV*1_MeV), 0
319 , 0. , 0. , 0. , 0., 0., 1.;
320
321 allTracks.emplace_back(trk.get(),Acts::BoundTrackParameters(perigeeSurface, actsParams, covMat, Acts::ParticleHypothesis::pion()));
322 }
323
324 std::vector<Acts::InputTrack> allTrackPtrs;
325 allTrackPtrs.reserve(allTracks.size());
326
327 for(const auto& trk : allTracks){
328 allTrackPtrs.emplace_back(&trk);
329 }
330
331 Acts::VertexingOptions vertexingOptions( geoContext, magFieldContext );
332
334 beamSpotConstraintVtx.setPosition(Acts::Vector3::Zero());
335 Amg::MatrixX looseConstraintCovariance(3, 3);
336 looseConstraintCovariance.setIdentity();
337 looseConstraintCovariance = looseConstraintCovariance * 1e+8;
338 beamSpotConstraintVtx.setCovariance(looseConstraintCovariance);
339 }
340
341 vertexingOptions.useConstraintInFit = m_useBeamConstraint;
342 vertexingOptions.constraint = std::move(beamSpotConstraintVtx);
343
344 auto finderState = m_vertexFinder->makeState(magFieldContext);
345
346 auto findResult = m_vertexFinder->find(allTrackPtrs, vertexingOptions, finderState);
347
348 if(!findResult.ok()){
349 xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
350 theVertexContainer->push_back(dummyxAODVertex);
351 dummyxAODVertex->setPosition(beamSpotHandle->beamVtx().position());
352 dummyxAODVertex->setCovariancePosition(beamSpotHandle->beamVtx().covariancePosition());
353 dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
354 return std::make_pair(theVertexContainer, theVertexAuxContainer);
355 }
356
357 std::vector<Acts::Vertex> allVertices = *findResult;
358
359 std::vector<VertexAndSignalComp> vtxList;
360
361 // Reserve memory for all vertices
362 vtxList.reserve(allVertices.size());
363
364 for(const auto& vtx : allVertices){
365 //skip the vertex with negative covariance
366 if(vtx.covariance()(0,0)<0||vtx.covariance()(1,1)<0||vtx.covariance()(2,2)<0)
367 continue;
368 xAOD::Vertex* xAODVtx = new xAOD::Vertex;
369 xAODVtx->makePrivateStore();
370 xAODVtx->setPosition(vtx.position());
371 xAODVtx->setCovariancePosition(vtx.covariance());
372 xAODVtx->setFitQuality(vtx.fitQuality().first, vtx.fitQuality().second);
373
374 const auto& tracks = vtx.tracks();
375 std::vector<Trk::VxTrackAtVertex>* trkAtVtxVec = &(xAODVtx->vxTrackAtVertex());
376 for(const auto& trk : tracks){
377
378 // Clean up incompatible tracks
379 if ((trk.vertexCompatibility > m_maxVertexChi2 && m_useFastCompatibility) ||
380 ((trk.trackWeight < m_minWeight
381 || trk.chi2Track > m_maxVertexChi2)
383 continue;
384 }
385
386 const TrackWrapper* originalParams = trk.originalParams.template as<TrackWrapper>();
387
388 Trk::Perigee* fittedPerigee = actsBoundToTrkPerigee(trk.fittedParams, beamSpotPos);
389 Trk::VxTrackAtVertex trkAtVtx(originalParams->trackLink()->clone());
390 trkAtVtx.setPerigeeAtVertex(fittedPerigee);
391 trkAtVtx.setTrackQuality(Trk::FitQuality(trk.chi2Track, trk.ndf));
392 trkAtVtx.setVtxCompatibility(trk.vertexCompatibility);
393 trkAtVtx.setWeight(trk.trackWeight);
394 trkAtVtxVec->push_back(std::move(trkAtVtx));
395
396 const Trk::LinkToXAODTrackParticle* linkToXAODTP =
397 dynamic_cast<const Trk::LinkToXAODTrackParticle*>(originalParams->trackLink());
398 if (linkToXAODTP) {
399 xAODVtx->addTrackAtVertex(*linkToXAODTP, trk.trackWeight);
400 }
401 }
402 // Find signal compatibility
403 double sigComp = estimateSignalCompatibility(xAODVtx);
404 // Insert vertex at correct position according to sigComp value
405 VertexAndSignalComp vertexAndSig(xAODVtx, sigComp);
406 auto it = std::lower_bound( vtxList.begin(), vtxList.end(), vertexAndSig );
407 vtxList.insert( it, vertexAndSig );
408 }
409
410 for(unsigned int i = 0; i < vtxList.size(); i++){
411 auto vtx = vtxList[i].first;
412 theVertexContainer->push_back(vtx);
413 if(i == 0){
414 vtx->setVertexType(xAOD::VxType::PriVtx);
415 }
416 else{
417 vtx->setVertexType(xAOD::VxType::PileUp);
418 }
419 }
420
421 // Add dummy vertex to collection
422 xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
423 theVertexContainer->push_back(dummyxAODVertex);
424
425 if(!vtxList.empty()){
426 // If HS vertex exists, create dummy with same position/covariance
427 xAOD::Vertex* primaryVtx = theVertexContainer->front();
428 dummyxAODVertex->setPosition(primaryVtx->position());
429 dummyxAODVertex->setCovariancePosition(primaryVtx->covariancePosition());
430 dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
431 }
432 else{
433 dummyxAODVertex->setPosition(beamSpotHandle->beamVtx().position());
434 dummyxAODVertex->setCovariancePosition(beamSpotHandle->beamVtx().covariancePosition());
435 dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
436 }
437
438 return std::make_pair(theVertexContainer, theVertexAuxContainer);
439}
440
441
444 const Acts::Vector3& surfCenter) const
445{
446 using namespace Acts::UnitLiterals;
447 AmgSymMatrix(5) cov = AmgSymMatrix(5)(bound.covariance()->block<5,5>(0,0));
448 cov.col(Trk::qOverP) *= 1_MeV;
449 cov.row(Trk::qOverP) *= 1_MeV;
450 Acts::Vector<5> params = bound.parameters().head<5>();
451 params[Trk::qOverP] *= 1_MeV;
452
453 return new Trk::Perigee(params, Trk::PerigeeSurface(surfCenter), std::move(cov));
454}
455
456double
458{
459 double totalPt2 = 0;
460 unsigned int nTracks = 0;
461
462 for(const auto& trk : vtx->vxTrackAtVertex()){
463 if ((trk.vtxCompatibility() < m_finalCutMaxVertexChi2 && m_useFastCompatibility) ||
464 (trk.weight() > m_minWeight
465 && trk.trackQuality().chiSquared() < m_finalCutMaxVertexChi2
467 const Trk::TrackParameters* perigee = nullptr;
468 if (trk.perigeeAtVertex() != nullptr) {
469 perigee = trk.perigeeAtVertex();
470 } else {
471 ATH_MSG_VERBOSE("Only initialPerigee is available");
472 perigee = trk.initialPerigee();
473 }
474 if (perigee == nullptr) {
475 ATH_MSG_ERROR("Neutrals are not supported. Skipping track in pT calculation...");
476 continue;
477 }
478 totalPt2 +=
479 std::pow(std::fabs(1. / perigee->parameters()[Trk::qOverP]) * std::sin(perigee->parameters()[Trk::theta]), 2);
480 nTracks += 1;
481 }
482 }
483 return totalPt2 * std::sqrt((double) nTracks);
484}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_VERBOSE(x,...)
#define ATH_MSG_INFO(x,...)
bool operator<(const DataVector< T > &a, const DataVector< T > &b)
Vector ordering relation.
#define AmgSymMatrix(dim)
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
Definition Logger.cxx:64
static Acts::BoundTrackParameters extractParameters(const Acts::InputTrack &input)
ContextUtility m_ctxProvider
Auxiliary class to access the magnetic field, geometry and calibration context.
Trk::Perigee * actsBoundToTrkPerigee(const Acts::BoundTrackParameters &bound, const Acts::Vector3 &surfCenter) const
double estimateSignalCompatibility(xAOD::Vertex *vtx) const
ServiceHandle< ActsTrk::ITrackingGeometrySvc > m_trackingGeometrySvc
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
void initializeVertexFinder(VertexFinder::Config &&finderConfig)
virtual std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex(const EventContext &ctx, const TrackCollection *trackTES) const override
std::unique_ptr< const Acts::Logger > m_logger
logging instance
ToolHandle< InDet::IInDetTrackSelectionTool > m_trkFilter
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
Definition DataVector.h:861
value_type push_back(value_type pElem)
Add an element to the end of the collection.
const T * front() const
Access the first element in the collection as an rvalue.
const Trk::RecVertex & beamVtx() const noexcept
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
Definition FitQuality.h:97
Element link to XAOD TrackParticle.
Class describing the Line to which the Perigee refers to.
Trk::RecVertex inherits from Trk::Vertex.
Definition RecVertex.h:44
This class is a simplest representation of a vertex candidate.
const Amg::Vector3D & position() const
return position of vertex
Definition Vertex.cxx:63
The VxTrackAtVertex is a common class for all present TrkVertexFitters The VxTrackAtVertex is designe...
void setTrackQuality(const FitQuality &trkQuality)
Set methods for various components.
void setPerigeeAtVertex(TrackParameters *perigee)
Setting up parameters at vertex.
void setWeight(const double)
Set method for a weight.
void setVtxCompatibility(const double)
void setCovariancePosition(const AmgSymMatrix(3)&covariancePosition)
Sets the vertex covariance matrix.
void addTrackAtVertex(const ElementLink< TrackParticleContainer > &tr, float weight=1.0)
Add a new track to the vertex.
void setVertexType(VxType::VertexType vType)
Set the type of the vertex.
void setPosition(const Amg::Vector3D &position)
Sets the 3-position.
std::vector< Trk::VxTrackAtVertex > & vxTrackAtVertex()
Non-const access to the VxTrackAtVertex vector.
void setFitQuality(float chiSquared, float numberDoF)
Set the 'Fit Quality' information.
const Amg::Vector3D & position() const
Returns the 3-pos.
static Root::TMsgLogger logger("iLumiCalc")
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Amg::Isometry3D toIsometry3D(const Isometry3D &iso)
Eigen::Matrix< double, 3, 1 > Vector3D
::StatusCode StatusCode
StatusCode definition for legacy code.
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
@ theta
Definition ParamDefs.h:66
@ qOverP
perigee
Definition ParamDefs.h:67
ParametersBase< TrackParametersDim, Charged > TrackParameters
@ PileUp
Pile-up vertex.
@ PriVtx
Primary vertex.
@ NoVtx
Dummy vertex. TrackParticle was not used in vertex fit.
VertexAuxContainer_v1 VertexAuxContainer
Definition of the current jet auxiliary container.
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Vertex_v1 Vertex
Define the latest version of the vertex class.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".