ATLAS Offline Software
Loading...
Searching...
No Matches
JetSecVertexingAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
6
8
9//general interface for secondary vertex finders
12
17
19
21
24
25#include "xAODBase/IParticle.h"
26
28
29namespace Analysis {
30
31 JetSecVertexingAlg::JetSecVertexingAlg(const std::string& name, ISvcLocator* pSvcLocator):
32 AthReentrantAlgorithm(name,pSvcLocator),
33 m_MSVvarFactory("Analysis::MSVVariablesFactory",this)
34 {
35 declareProperty("SecVtxFinderxAODBaseName", m_secVertexFinderBaseName);
36 declareProperty("MSVVariableFactory", m_MSVvarFactory);
37 }
38
40 {
41 // This will check that the properties were initialized properly
42 // by job configuration.
43 ATH_CHECK( m_JetCollectionName.initialize() );
44 ATH_CHECK( m_TrackCollectionName.initialize() );
45 ATH_CHECK( m_VxSecVertexInfoName.initialize() );
46 ATH_CHECK( m_VertexCollectionName.initialize() );
48 ATH_CHECK( m_BTagJFVtxCollectionName.initialize( (m_secVertexFinderBaseName == "JetFitter") || (m_secVertexFinderBaseName == "JetFitterFlip") ) );
49 ATH_CHECK( m_jetSVLinkName.initialize() );
50
51 /* ----------------------------------------------------------------------------------- */
52 /* RETRIEVE SERVICES FROM STOREGATE */
53 /* ----------------------------------------------------------------------------------- */
54
55 if ( m_MSVvarFactory.retrieve().isFailure() ) {
56 ATH_MSG_ERROR("#BTAG# Failed to retrieve " << m_MSVvarFactory);
57 } else {
58 ATH_MSG_DEBUG("#BTAG# Retrieved " << m_MSVvarFactory);
59 }
60
61 return StatusCode::SUCCESS;
62 }
63
64
65 StatusCode JetSecVertexingAlg::execute(const EventContext& ctx) const{
66 //retrieve the Jet container
68 if (!h_JetCollectionName.isValid()) {
69 ATH_MSG_ERROR( " cannot retrieve jet container with key " << m_JetCollectionName.key() );
70 return StatusCode::FAILURE;
71 }
72
73 SG::WriteHandle<xAOD::VertexContainer> h_BTagSVCollectionName;
74 SG::WriteHandle<xAOD::BTagVertexContainer> h_BTagJFVtxCollectionName;
75
77 /* Record the BTagging JF Vertex output container */
78 if ((basename == "JetFitter") || (basename == "JetFitterFlip")) {
79 ATH_MSG_DEBUG("#BTAG# Record the BTagging JF Vertex output container");
81 ATH_CHECK( h_BTagJFVtxCollectionName.record(std::make_unique<xAOD::BTagVertexContainer>(),
82 std::make_unique<xAOD::BTagVertexAuxContainer>()) );
83 }
84
85 /* Record the BTagging Secondary Vertex output container */
86 if ((basename == "SV1") ||(basename == "SV1Flip") || (basename == "MSV")) {
87 ATH_MSG_DEBUG("#BTAG# Record the BTagging Secondary Vertex output container");
89 ATH_CHECK( h_BTagSVCollectionName.record(std::make_unique<xAOD::VertexContainer>(),
90 std::make_unique<xAOD::VertexAuxContainer>()) );
91 }
92
93 if (h_JetCollectionName->empty()) {
94 ATH_MSG_DEBUG("#BTAG# Empty Jet collection");
95 return StatusCode::SUCCESS;
96 }
97
99 if (!h_TrackCollectionName.isValid()) {
100 ATH_MSG_ERROR( " cannot retrieve track container with key " << m_TrackCollectionName.key() );
101 return StatusCode::FAILURE;
102 }
103
104 const xAOD::TrackParticleContainer* theTrackParticleContainer = h_TrackCollectionName.ptr();
105
106 const xAOD::Vertex* primaryVertex(nullptr);
107
108 //retrieve primary vertex
110 if (!h_VertexCollectionName.isValid()) {
111 ATH_MSG_ERROR( " cannot retrieve primary vertex container with key " << m_VertexCollectionName.key() );
112 return StatusCode::FAILURE;
113 }
114
115 //retrieve VxSecVertexInfo
117 if (!h_VxSecVertexInfoName.isValid()) {
118 ATH_MSG_ERROR( " cannot retrieve secondary vertex container with key " << m_VxSecVertexInfoName.key() );
119 return StatusCode::FAILURE;
120 }
121 ATH_MSG_DEBUG("Size of VxSecVertexInfo: " << h_VxSecVertexInfoName->size());
122
123 if (h_VxSecVertexInfoName->size() != h_JetCollectionName->size()) {
124 ATH_MSG_ERROR("Size of jet container different than size of VxSecVertexInfo");
125 return StatusCode::FAILURE;
126 }
127
128 unsigned int nVertexes = h_VertexCollectionName->size();
129 if (nVertexes == 0) {
130 ATH_MSG_ERROR("#BTAG# Vertex container is empty");
131 return StatusCode::FAILURE;
132 }
133 for (const auto *fz : *h_VertexCollectionName) {
134 if (fz->vertexType() == xAOD::VxType::PriVtx) {
135 primaryVertex = fz;
136 break;
137 }
138 }
139
140 if (! primaryVertex) {
141 ATH_MSG_DEBUG("#BTAG# No vertex labeled as VxType::PriVtx!");
142 xAOD::VertexContainer::const_iterator fz = h_VertexCollectionName->begin();
143 primaryVertex = *fz;
144 if (primaryVertex->nTrackParticles() == 0) {
145 ATH_MSG_DEBUG("#BTAG# PV==BeamSpot: probably poor tagging");
146 }
147 }
148
149 const xAOD::Vertex& PrimaryVtx = *primaryVertex;
150
151 Trk::VxSecVertexInfoContainer::const_iterator infoSVIter = h_VxSecVertexInfoName->begin();
152
153 if(basename == "MSV") {
154 for (const xAOD::Jet* jetToTag : *h_JetCollectionName) {
155 const Trk::VxSecVertexInfo* myVertexInfo = *infoSVIter++;
156 if(myVertexInfo != nullptr) {
157 if(const Trk::VxSecVKalVertexInfo* myVertexInfoVKal = dynamic_cast<const Trk::VxSecVKalVertexInfo*>(myVertexInfo)) {
158 ATH_MSG_DEBUG("#BTAG# Found VKalVertexInfo information");
159 StatusCode sc = m_MSVvarFactory->createMSVContainer(*jetToTag, myVertexInfoVKal, &(*h_BTagSVCollectionName), PrimaryVtx);
160 if(sc.isFailure()){
161 ATH_MSG_ERROR("#BTAG# error filling variables in MSVVariablesFactory" );
162 return sc;
163 }
164 }
165 else {
166 ATH_MSG_DEBUG("#BTAG# dynamic_cast failed for a non-nullptr myVertexInfo!");
167 }
168 }
169 }
170 }
171
172 else if(basename == "SV1" || basename == "SV1Flip") { //SV1
174 for (const xAOD::Jet* jetToTag : *h_JetCollectionName) {
175 const Trk::VxSecVertexInfo* myVertexInfo = *infoSVIter++;
176 std::vector< ElementLink< xAOD::VertexContainer > > SVertexLinks;
177 if(myVertexInfo != nullptr) {
178 if(const Trk::VxSecVKalVertexInfo* myVertexInfoVKal = dynamic_cast<const Trk::VxSecVKalVertexInfo*>(myVertexInfo)) {
179 ATH_MSG_DEBUG("#BTAG# Found VKalVertexInfo information");
180 StatusCode sc = createSecVkalContainer(&(*h_BTagSVCollectionName), &SVertexLinks, myVertexInfoVKal);
181 if(sc.isFailure()){
182 ATH_MSG_ERROR("#BTAG# error filling variables from VxSecVKalVertexInfo " << m_VxSecVertexInfoName.key());
183 return sc;
184 }
185 }
186 else {
187 ATH_MSG_DEBUG("#BTAG# dynamic_cast failed for a non-nullptr myVertexInfo!");
188 }
189 }
190 h_jetSVLinkName(*jetToTag) = SVertexLinks;
191 }
192 }
193
194 else if(basename == "JetFitter" || basename == "JetFitterFlip") {
196 for (const xAOD::Jet* jetToTag : *h_JetCollectionName) {
197 const Trk::VxSecVertexInfo* myVertexInfo = *infoSVIter++;
198 std::vector< ElementLink< xAOD::BTagVertexContainer > > JFVtxLinks;
199 if(myVertexInfo != nullptr) {
200 if(const Trk::VxJetFitterVertexInfo* myVertexInfoJetFitter = dynamic_cast<const Trk::VxJetFitterVertexInfo*>(myVertexInfo)) {
201 ATH_MSG_DEBUG("#BTAG# Found VxJetFitterVertexInfo information");
202 StatusCode sc = createJFContainer(&(*h_BTagJFVtxCollectionName), &JFVtxLinks, myVertexInfoJetFitter, theTrackParticleContainer);
203 if(sc.isFailure()){
204 ATH_MSG_ERROR("#BTAG# error filling variables from VxJetFitterVertexInfo " << m_VxSecVertexInfoName.key());
205 return sc;
206 }
207 }
208 else {
209 ATH_MSG_DEBUG("#BTAG# dynamic_cast failed for a non-nullptr myVertexInfo!");
210 }
211 }
212 h_jetSVLinkName(*jetToTag) = JFVtxLinks;
213 }
214 }
215
216 else {
217 ATH_MSG_ERROR("#BTAG# JetSecVertexingAlg encounters an unknown basename: " << basename);
218 }
219
220 return StatusCode::SUCCESS;
221 }
222
224 const Trk::VxSecVKalVertexInfo* myVertexInfoVKal) const {
225
226 std::vector<xAOD::Vertex*>::const_iterator verticesBegin = myVertexInfoVKal->vertices().begin();
227 std::vector<xAOD::Vertex*>::const_iterator verticesEnd = myVertexInfoVKal->vertices().end();
228
229 for (std::vector<xAOD::Vertex*>::const_iterator verticesIter=verticesBegin; verticesIter!=verticesEnd;++verticesIter) {
230 xAOD::Vertex* btagVtx = *verticesIter;
231 bTagVertexContainer->push_back(btagVtx);
232
234 linkBTagVertex.toContainedElement(*bTagVertexContainer, btagVtx);
235 SVertexLinks->push_back(linkBTagVertex);
236 }
237 ATH_MSG_DEBUG("#BTAG# SV container size: " << bTagVertexContainer->size());
238
239 return StatusCode::SUCCESS;
240 }
241
242
244 std::vector< ElementLink< xAOD::BTagVertexContainer > > * JFVerticesLinks,
245 const Trk::VxJetFitterVertexInfo* myVertexInfoJetFitter,
246 const xAOD::TrackParticleContainer* theTrackParticleContainer) const {
247
248 //list of JFvertices
249 const std::vector<Trk::VxJetCandidate*>& JFvertices = myVertexInfoJetFitter->verticesJF();
250
251 int nVtx = 0;
252 if (!JFvertices.empty()) {
253 Trk::VxJetCandidate* vxjetcand = dynamic_cast< Trk::VxJetCandidate*>(JFvertices[0]);
254 if (!vxjetcand) {
255 ATH_MSG_WARNING("#BTAG# bad VxCandidate is not a VxJetCandidate");
256 return StatusCode::SUCCESS;
257 }
258
259 //compatibility with others SV
260 const Trk::VxClusteringTable* ClusteringTable = vxjetcand->getClusteringTable();
261 typedef std::map<Trk::VxVertexOnJetAxis*, std::vector<std::pair<Trk::VxVertexOnJetAxis*,float> > > map2vtx;
262 map2vtx inverseCompMap;
263
264 if (ClusteringTable !=nullptr) {
265 const std::map<float,Trk::PairOfVxVertexOnJetAxis>& mapPairVtxOnJetAxis = ClusteringTable->getCompatibilityPairOfVertices();
266 std::map<float,Trk::PairOfVxVertexOnJetAxis>::const_iterator mapiter = mapPairVtxOnJetAxis.begin();
267 for(;mapiter != mapPairVtxOnJetAxis.end(); ++mapiter){
268
269 Trk::VxVertexOnJetAxis* vtx1 = mapiter->second.first;
270 Trk::VxVertexOnJetAxis* vtx2 = mapiter->second.second;
271 float comp = mapiter->first;
272
273 std::pair<Trk::VxVertexOnJetAxis*,float> pair1(vtx1, comp);
274 std::pair<Trk::VxVertexOnJetAxis*,float> pair2(vtx1, comp);
275
276 inverseCompMap[vtx1].push_back(pair2);
277 inverseCompMap[vtx2].push_back(pair1);
278
279 }
280 }
281
282 //vtx on jet axis
283 const std::vector<Trk::VxVertexOnJetAxis*> Vtxonjetaxes = vxjetcand->getVerticesOnJetAxis();
284 ATH_MSG_DEBUG("#BTAG# VerticesOnJetAxis of VxJetCandidate size: " << Vtxonjetaxes.size());
285 std::vector<Trk::VxVertexOnJetAxis*>::const_iterator iterBegin = Vtxonjetaxes.begin();
286 std::vector<Trk::VxVertexOnJetAxis*>::const_iterator iterEnd = Vtxonjetaxes.end();
287 float comptoPV(0.);
288 double chi2(0.);
289 int ndf(0);
290 nVtx = Vtxonjetaxes.size();
291 std::map<Trk::VxVertexOnJetAxis*, ElementLink< xAOD::BTagVertexContainer> > oldnewmap;
292
293 for (std::vector<Trk::VxVertexOnJetAxis*>::const_iterator it=iterBegin; it!=iterEnd; ++it) {
294 //ndf, chi2 , comptoPV
295 const Trk::FitQuality& fitquality = (*it)->fitQuality();
296 chi2 = fitquality.chiSquared();
297 ndf = fitquality.numberDoF();
298 comptoPV = (*it)->getCompatibilityToPrimaryVtx();
299 const std::vector<Trk::VxTrackAtVertex*> & trackatVtx = (*it)->getTracksAtVertex();
300 std::vector<Trk::VxTrackAtVertex*>::const_iterator itrBegin = trackatVtx.begin();
301 std::vector<Trk::VxTrackAtVertex*>::const_iterator itrEnd = trackatVtx.end();
302 std::vector< float> tmpchi2;
303 std::vector< float> tmpndf;
304 std::vector< ElementLink< xAOD::TrackParticleContainer > > trkLinks;
305 std::vector< float> tmpRefPx;
306 std::vector< float> tmpRefPy;
307 std::vector< float> tmpRefPz;
308
309 //loop in trks
310 for (std::vector<Trk::VxTrackAtVertex*>::const_iterator itr=itrBegin; itr!=itrEnd; ++itr) {
311 //ndf, chi2
312 const Trk::FitQuality& trkquality = (*itr)->trackQuality();
313 double tpchi2 = trkquality.chiSquared();
314 int tpndf = trkquality.numberDoF();
315 tmpchi2.push_back(float(tpchi2));
316 tmpndf.push_back(float(tpndf));
317 //tracks links
318 Trk::ITrackLink* trklinks = (*itr)->trackOrParticleLink();
319 const Trk::LinkToXAODTrackParticle* trkLinkTPxAOD=dynamic_cast<const Trk::LinkToXAODTrackParticle *>(trklinks);
320 if (!trkLinkTPxAOD) {
321 ATH_MSG_WARNING("#BTAG# bad ITrackLink is not a LinkToXAODTrackParticle");
322 continue;
323 }
324 const xAOD::TrackParticle* myTrklink = **trkLinkTPxAOD;
326
327 tpel.toContainedElement(*theTrackParticleContainer, myTrklink);
328 trkLinks.push_back(tpel);
329
330 //reffited momentum
331 const Trk::TrackParameters* trkperigee = (*itr)->perigeeAtVertex();
332 Amg::Vector3D mytrack = trkperigee->momentum();
333 tmpRefPx.push_back(mytrack.x());
334 tmpRefPy.push_back(mytrack.y());
335 tmpRefPz.push_back(mytrack.z());
336
337 }
338
339 xAOD::BTagVertex* newbtagVtx = new xAOD::BTagVertex();
340 bTagJFVertexContainer->push_back(newbtagVtx);
341
342 newbtagVtx->setNDF(ndf);
343 newbtagVtx->setChi2(chi2);
344 newbtagVtx->setPV_compatibility(comptoPV);
345 newbtagVtx->setTrack_chi2(tmpchi2);
346 newbtagVtx->setTrack_NDF(tmpndf);
347 newbtagVtx->setTrack_links(trkLinks);
348 newbtagVtx->setTrack_refPx(tmpRefPx);
349 newbtagVtx->setTrack_refPy(tmpRefPy);
350 newbtagVtx->setTrack_refPz(tmpRefPz);
351
353 linkBTagVertex.toContainedElement(*bTagJFVertexContainer, newbtagVtx);
354 JFVerticesLinks->push_back(linkBTagVertex);
355 oldnewmap.insert(std::make_pair(*it,linkBTagVertex));
356 }
357
358 if(ClusteringTable !=nullptr){
359 for (std::vector<Trk::VxVertexOnJetAxis*>::const_iterator it=iterBegin; it!=iterEnd; ++it) {
360 std::vector< ElementLink< xAOD::BTagVertexContainer > > JFCompLinks;
361 std::vector<float> JFCompValues;
362
363 bool foundmap=true;
364 map2vtx::iterator itmap = inverseCompMap.find(*it);
365 if(itmap == inverseCompMap.end()){
366 ATH_MSG_DEBUG("#BTAG# JF compatibility value in map2vtx map not found ");
367 foundmap=false;
368 }
369
370 if(foundmap){
371
372 std::vector<std::pair<Trk::VxVertexOnJetAxis*,float> > tmpvectpair = itmap->second;
373
374 for(auto & icomppair : tmpvectpair){
375 std::map<Trk::VxVertexOnJetAxis*, ElementLink< xAOD::BTagVertexContainer> >::iterator JFOlNewIter = oldnewmap.find(icomppair.first);
376
377 if(JFOlNewIter == oldnewmap.end()){
378 ATH_MSG_DEBUG("#BTAG# JF compatibility vector not found ");
379 continue;
380 }
381
382 JFCompLinks.push_back(JFOlNewIter->second);
383 JFCompValues.push_back(icomppair.second);
384 }
385 }
386 }
387 }
388
389 const Trk::RecVertexPositions& recVtxposition = vxjetcand->getRecVertexPositions();
390 const Amg::VectorX& vtxPositions = recVtxposition.position();
391 const Amg::MatrixX& vtxCovMatrix = recVtxposition.covariancePosition();
392 ATH_MSG_DEBUG("#BTAGJF# size vtxPosition "<<vtxPositions.size());
393 std::vector< float > fittedPosition = std::vector<float>(nVtx+5,-1);
394 std::vector< float > fittedCov = std::vector<float>(nVtx+5,-1); //only store the diagonal terms
395 if (fittedPosition.size() < 5) std::abort(); // suppress cppcheck warnings
396 if(vtxPositions.rows()>4 ) {
397 fittedPosition[0] = vtxPositions[Trk::jet_xv]; //position x,y,z of PV
398 fittedPosition[1] = vtxPositions[Trk::jet_yv];
399 fittedPosition[2] = vtxPositions[Trk::jet_zv];
400 fittedPosition[3] = vtxPositions[Trk::jet_phi]; // direction of the jet axis
401 fittedPosition[4] = vtxPositions[Trk::jet_theta];
402
403 fittedCov[0] = vtxCovMatrix(0,0);
404 fittedCov[1] = vtxCovMatrix(1,1);
405 fittedCov[2] = vtxCovMatrix(2,2);
406 fittedCov[3] = vtxCovMatrix(3,3);
407 fittedCov[4] = vtxCovMatrix(4,4);
408
409 }
410
411 for(int i=0; i<nVtx; ++i){
412 fittedPosition[i+5] = vtxPositions[i+5]; //dist of vtxi on jet axis from PV
413 fittedCov[i+5] = vtxCovMatrix(i+5,i+5);
414 }
415
416 //trks at PV
417 const std::vector<Trk::VxTrackAtVertex*> & trackatPV = vxjetcand->getPrimaryVertex()->getTracksAtVertex();
418 std::vector<Trk::VxTrackAtVertex*>::const_iterator irBegin = trackatPV.begin();
419 std::vector<Trk::VxTrackAtVertex*>::const_iterator irEnd = trackatPV.end();
420 std::vector< float > tracksAtPVchi2;
421 std::vector< float > tracksAtPVndf;
422 std::vector< ElementLink< xAOD::TrackParticleContainer > > tracksAtPVlinks;
423
424 for (std::vector<Trk::VxTrackAtVertex*>::const_iterator it=irBegin; it!=irEnd; ++it) {
425 const Trk::FitQuality& trkquality = (*it)->trackQuality();
426 double tmpchi2 = trkquality.chiSquared();
427 int tmpndf = trkquality.numberDoF();
428 tracksAtPVchi2.push_back(float(tmpchi2));
429 tracksAtPVndf.push_back(float(tmpndf));
430 //links
431
432 Trk::ITrackLink* trklinks = (*it)->trackOrParticleLink();
433 const Trk::LinkToXAODTrackParticle* trkLinkTPxAOD = dynamic_cast<const Trk::LinkToXAODTrackParticle *>(trklinks);
434 if (!trkLinkTPxAOD) {
435 ATH_MSG_WARNING("#BTAG# bad ITrackLink is not a LinkToXAODTrackParticle");
436 continue;
437 }
438 const xAOD::TrackParticle* myTrklink = **trkLinkTPxAOD;
440 tpel.toContainedElement(*theTrackParticleContainer, myTrklink);
441 tracksAtPVlinks.push_back(tpel);
442 }
443 }
444 else { //No JF vertices
445 ATH_MSG_ERROR("#BTAG# No JF vertices. Minimum 1");
446 }
447
448 return StatusCode::SUCCESS;
449 }
450
451} // namespace
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
static Double_t sc
Handle class for adding a decoration to an object.
SG::ReadHandleKey< Trk::VxSecVertexInfoContainer > m_VxSecVertexInfoName
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrackCollectionName
SG::ReadHandleKey< xAOD::VertexContainer > m_VertexCollectionName
JetSecVertexingAlg(const std::string &name, ISvcLocator *pSvcLocator)
Constructors and destructors.
SG::WriteHandleKey< xAOD::BTagVertexContainer > m_BTagJFVtxCollectionName
SG::WriteHandleKey< xAOD::VertexContainer > m_BTagSVCollectionName
SG::ReadHandleKey< xAOD::JetContainer > m_JetCollectionName
StatusCode createSecVkalContainer(xAOD::VertexContainer *, std::vector< ElementLink< xAOD::VertexContainer > > *, const Trk::VxSecVKalVertexInfo *) const
virtual StatusCode initialize() override
Main routines specific to an ATHENA algorithm.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_jetSVLinkName
ToolHandle< IMSVVariablesFactory > m_MSVvarFactory
virtual StatusCode execute(const EventContext &ctx) const override
StatusCode createJFContainer(xAOD::BTagVertexContainer *, std::vector< ElementLink< xAOD::BTagVertexContainer > > *, const Trk::VxJetFitterVertexInfo *, const xAOD::TrackParticleContainer *) const
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
An algorithm that can be simultaneously executed in multiple threads.
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
const_pointer_type ptr()
Dereference the pointer.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
Handle class for adding a decoration to an object.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
Definition FitQuality.h:97
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
Definition FitQuality.h:60
double chiSquared() const
returns the of the overall track fit
Definition FitQuality.h:56
Element link to XAOD TrackParticle.
const Amg::Vector3D & momentum() const
Access method for the momentum.
Amg::MatrixX const & covariancePosition() const
return the covDeltaV matrix of the vertex fit
const Amg::VectorX & position() const
return position of vertex
const std::map< float, PairOfVxVertexOnJetAxis > & getCompatibilityPairOfVertices(void) const
Get back full compatibility info (only for reading)
Trk::VxClusteringTable *& getClusteringTable(void)
const std::vector< VxVertexOnJetAxis * > & getVerticesOnJetAxis(void) const
const VxVertexOnJetAxis * getPrimaryVertex(void) const
const Trk::RecVertexPositions & getRecVertexPositions() const
const std::vector< Trk::VxJetCandidate * > & verticesJF() const
const std::vector< xAOD::Vertex * > & vertices() const
VxVertexOnJetAxis inherits from Vertex.
const std::vector< VxTrackAtVertex * > & getTracksAtVertex(void) const
get Tracks At Vertex Method
void setTrack_chi2(const std::vector< float > &values)
set track chi2 values
void setTrack_NDF(const std::vector< float > &values)
set track NDF values
void setTrack_refPz(const std::vector< float > &values)
set track momentum z components
void setChi2(float value)
access the corresponding xAOD::BTagVertex
void setTrack_refPx(const std::vector< float > &values)
set track momentum x components
void setNDF(float value)
set fit NDF
void setTrack_links(const TPELinks_t &links)
set track ElementLinks
void setPV_compatibility(float value)
set compatibility with PV
void setTrack_refPy(const std::vector< float > &values)
set track momentum y components
size_t nTrackParticles() const
Get the number of tracks associated with this vertex.
double chi2(TH1 *h0, TH1 *h1)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 3, 1 > Vector3D
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
The namespace of all packages in PhysicsAnalysis/JetTagging.
ParametersBase< TrackParametersDim, Charged > TrackParameters
@ jet_zv
position x,y,z of primary vertex
@ PriVtx
Primary vertex.
Jet_v1 Jet
Definition of the current "jet version".
BTagVertex_v1 BTagVertex
Definition of the current "BTagging version".
Definition BTagVertex.h:17
BTagVertexContainer_v1 BTagVertexContainer
Definition of the current "BTagging container version".
TrackParticle_v1 TrackParticle
Reference the current persistent version:
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".
std::string basename(std::string name)
Definition utils.cxx:207