ATLAS Offline Software
GNNVertexFitterTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
8 #include "ranges"
9 #include <boost/iterator/zip_iterator.hpp>
10 
11 namespace Rec {
12 
13 GNNVertexFitterTool::GNNVertexFitterTool(const std::string &type, const std::string &name,
14  const IInterface *parent)
15  : AthAlgTool(type, name, parent), m_vertexFitterTool("Trk::TrkVKalVrtFitter/VertexFitterTool", this),
16  m_deco_mass("mass"),
17  m_deco_pt("pt"),
18  m_deco_charge("charge"),
19  m_deco_vPos("vPos"),
20  m_deco_lxy("Lxy"),
21  m_deco_sig3D("significance3D"),
22  m_deco_deltaR("deltaR"),
23  m_deco_ntrk("ntrk"),
24  m_deco_lxyz("Lxyz"),
25  m_deco_eFrac("efracsv"),
26  m_deco_nHFTracks("nHFtrk"){
27  declareInterface<IGNNVertexFitterInterface>(this);
28  declareProperty("JetTrackLinks", m_trackLinksKey = "AntiKt4EMPFlow."+m_gnnModel+"_TrackLinks");
29  declareProperty("JetTrackOrigins", m_trackOriginsKey = "AntiKt4EMPFlow."+m_gnnModel+"_TrackOrigin");
30  declareProperty("JetVertexLinks", m_vertexLinksKey = "AntiKt4EMPFlow."+m_gnnModel+"_VertexIndex");
31  declareProperty("VertexFitterTool", m_vertexFitterTool, "Vertex fitting tool");
32  m_massPi = 139.5702 * Gaudi::Units::MeV;
33 }
34 
35 /* Destructor */
36 GNNVertexFitterTool::~GNNVertexFitterTool() { ATH_MSG_DEBUG("GNNVertexFitterTool destructor called"); }
37 
39 
40  ATH_MSG_DEBUG("GNNVertexFitter Tool in initialize()");
41 
42  // Initialize keys
43  ATH_CHECK(m_trackLinksKey.initialize());
44  ATH_CHECK(m_trackOriginsKey.initialize());
45  ATH_CHECK(m_vertexLinksKey.initialize());
46 
47  std::string linkNameMod = "";
48  if (m_doInclusiveVertexing) linkNameMod = "Inclusive";
49  m_jetWriteDecorKeyVertexLink = m_jetCollection + "."+linkNameMod+"GNNVerticesLink";
51 
52  // Retrieve tools
53  ATH_CHECK(m_vertexFitterTool.retrieve());
54  // Additional Info for Vertex Fit
57 
58  return StatusCode::SUCCESS;
59 }
60 
61 // Total Momentum of Jet
62 TLorentzVector GNNVertexFitterTool::TotalMom(const std::vector<const xAOD::TrackParticle *> &selTrk) const {
63  TLorentzVector sum(0., 0., 0., 0.);
64  for (int i = 0; i < (int)selTrk.size(); ++i) {
65  if (selTrk[i] == NULL)
66  continue;
67  sum += selTrk[i]->p4();
68  }
69  return sum;
70 }
71 
72 // Vertex to Vertex Distance
73 double GNNVertexFitterTool::vrtVrtDist(const xAOD::Vertex &primVrt, const Amg::Vector3D &secVrt,
74  const std::vector<double> &secVrtErr, double &signif) const {
75  double distx = primVrt.x() - secVrt.x();
76  double disty = primVrt.y() - secVrt.y();
77  double distz = primVrt.z() - secVrt.z();
78 
79  AmgSymMatrix(3) primCovMtx = primVrt.covariancePosition(); // Create
80  primCovMtx(0, 0) += secVrtErr[0];
81  primCovMtx(0, 1) += secVrtErr[1];
82  primCovMtx(1, 0) += secVrtErr[1];
83  primCovMtx(1, 1) += secVrtErr[2];
84  primCovMtx(0, 2) += secVrtErr[3];
85  primCovMtx(2, 0) += secVrtErr[3];
86  primCovMtx(1, 2) += secVrtErr[4];
87  primCovMtx(2, 1) += secVrtErr[4];
88  primCovMtx(2, 2) += secVrtErr[5];
89 
90  AmgSymMatrix(3) wgtMtx = primCovMtx.inverse();
91 
92  signif = distx * wgtMtx(0, 0) * distx + disty * wgtMtx(1, 1) * disty + distz * wgtMtx(2, 2) * distz +
93  2. * distx * wgtMtx(0, 1) * disty + 2. * distx * wgtMtx(0, 2) * distz + 2. * disty * wgtMtx(1, 2) * distz;
94  signif = std::sqrt(std::abs(signif));
95  if (signif != signif)
96  signif = 0.;
97  return std::sqrt(distx * distx + disty * disty + distz * distz);
98 }
99 
100 // Perform Vertex fit using the jet decorations of the GNN
102  xAOD::VertexContainer *outVertexContainer,
103  const xAOD::Vertex &primVrt, const EventContext &ctx) const {
104 
105  using TLC = std::vector<ElementLink<DataVector<xAOD::TrackParticle_v1>>>;
107 
108  // Read Decor Handle for Track links and Vertex links
113  jetWriteDecorHandleVertexLink(m_jetWriteDecorKeyVertexLink, ctx);
114 
115  // Loop over the jets
116  for (const auto &jet : *inJetContainer) {
117 
118  // Retrieve the Vertex and Track Collections
119  auto vertexCollection = vertexLinksHandle(*jet);
120  auto trackCollection = trackLinksHandle(*jet);
121  auto trackOriginCollection = trackOriginsHandle(*jet);
122 
123  using indexList = std::vector<int>;
124  using trackCountMap = std::map<char, std::set<TL>>;
125 
126  indexList iList(vertexCollection.size());
127 
128  trackCountMap allTracksMap; // All the vertices and the corresponding track links
129  trackCountMap heavyFlavourVertexMap; // All Heavy Flavour Tracks associated with a vertex
130  trackCountMap primaryVertexMap; // All Primary Tracks associated with a vertex
131  trackCountMap fittingMap; // Map filled with vertices to be fitted
132 
133  fittingMap.clear();
134  heavyFlavourVertexMap.clear();
135  primaryVertexMap.clear();
136  allTracksMap.clear();
137 
138  // Fill the map of predicted vertex indices -> tracks
139  for (int index=0; index < int(vertexCollection.size()); index++){
140 
141  auto vertex = vertexCollection[index];
142  auto trackOrigin = trackOriginCollection[index];
143  auto trackLink = trackCollection[index];
144 
145  allTracksMap[vertex].insert(trackLink);
146 
147  // Add heavy flavour tracks associated to each vertex to the map
148  if (InDet::ExclusiveOrigin::FromB == trackOrigin || InDet::ExclusiveOrigin::FromBC == trackOrigin ||
149  InDet::ExclusiveOrigin::FromC == trackOrigin) {
150  heavyFlavourVertexMap[vertex].insert(trackLink);
151  }
152  // Add primary tracks associated to each vertex to the map
153  else if (InDet::ExclusiveOrigin::Primary == trackOrigin) {
154  primaryVertexMap[vertex].insert(trackLink);
155  }
156  };
157 
158  // determine the vertex with the largest number of primary tracks
159  auto pvCandidate = std::max_element(
160  primaryVertexMap.begin(), primaryVertexMap.end(),
161  [](const auto& a, const auto& b) { return a.second.size() < b.second.size(); }
162  )->first;
163 
164  // filter the vertices according to the configurable options
165  for (const auto &vertexTrackPair : allTracksMap) {
166  // unpack vertexTrackPair
167  const auto &[vertex, trackLinks] = vertexTrackPair;
168  // remove the primary vertex unless requested
170  if(vertex == pvCandidate) {
171  continue;
172  }
173  }
174  // remove vertices which do not contain any heavy flavour tracks if requested
176  if (heavyFlavourVertexMap.find(vertex) == heavyFlavourVertexMap.end()) {
177  continue;
178  }
179  }
180  // remove vertices which contain insufficient heavy flavour tracks if requested
181  if(m_HFRatioThres > 0) {
182  if (heavyFlavourVertexMap.find(vertex) != heavyFlavourVertexMap.end() &&
183  (static_cast<float>(heavyFlavourVertexMap[vertex].size()) / trackLinks.size()) < m_HFRatioThres) {
184  continue;
185  }
186  }
187  // now we've passed all vertex filtering, add the vertex to the fittingMap
188  fittingMap.insert(std::pair<char, std::set<TL>>(vertex, trackLinks));
189  }
190  // If inclusive vertexing is requested, merge the vertices
192  // Define the key for the merged vertex
193  const char mergedVertexKey = 0;
194  std::set<TL> mergedSet;
195  std::set<TL> combinedHFTracks;
196 
197  // Iterate over the fittingMap to merge all sets into a single set
198  for (const auto &vertexTrackPair : fittingMap) {
199  // Insert all elements from trackLinks into mergedSet
200  mergedSet.insert(vertexTrackPair.second.begin(), vertexTrackPair.second.end());
201  combinedHFTracks.insert(heavyFlavourVertexMap[vertexTrackPair.first].begin(), heavyFlavourVertexMap[vertexTrackPair.first].end());
202  }
203 
204  // Clear fittingMap and insert the merged set under the mergedVertexKey
205  fittingMap.clear();
206  fittingMap[mergedVertexKey] = std::move(mergedSet);
207  heavyFlavourVertexMap.clear();
208  heavyFlavourVertexMap[mergedVertexKey] = std::move(combinedHFTracks);
209  }
210 
211  // Working xAOD
212  std::unique_ptr<workVectorArrxAOD> xAODwrk (new workVectorArrxAOD());
214 
215  // Beam Conditions
216  xAODwrk->beamX = beamSpotHandle->beamPos().x();
217  xAODwrk->beamY = beamSpotHandle->beamPos().y();
218  xAODwrk->beamZ = beamSpotHandle->beamPos().z();
219  xAODwrk->tanBeamTiltX = tan(beamSpotHandle->beamTilt(0));
220  xAODwrk->tanBeamTiltY = tan(beamSpotHandle->beamTilt(1));
221 
222  std::unique_ptr<std::vector<WrkVrt>> wrkVrtSet = std::make_unique<std::vector<WrkVrt>>();
223  WrkVrt newvrt;
224  newvrt.Good = true;
225  std::unique_ptr<Trk::IVKalState> state = m_vertexFitterTool->makeState();
226  std::vector<const xAOD::NeutralParticle *> neutralPartDummy(0);
227  Amg::Vector3D IniVrt(0., 0., 0.);
228 
229  for (const auto &pair : fittingMap) {
230  // Need at least 2 tracks to perform a fit
231  if (pair.second.size() >= 2) {
232  int NTRKS = pair.second.size();
233  std::vector<double> InpMass(NTRKS, m_massPi);
234  m_vertexFitterTool->setMassInputParticles(InpMass, *state);
235 
236  xAODwrk->listSelTracks.clear();
237 
238  for (auto TrackLink : pair.second) {
239  xAODwrk->listSelTracks.push_back(*TrackLink);
240  }
241 
242  Amg::Vector3D FitVertex, vDist;
243  TLorentzVector jetDir(jet->p4()); // Jet Direction
244 
245  // Get Estimate
246  StatusCode sc = m_vertexFitterTool->VKalVrtFitFast(xAODwrk->listSelTracks, FitVertex, *state);
247 
248  if (sc.isFailure() || FitVertex.perp() > m_maxLxy) { /* No initial estimation */
249  IniVrt = primVrt.position();
251  IniVrt.setZero();
252  } else {
253  vDist = FitVertex - primVrt.position();
254  double JetVrtDir = jetDir.Px() * vDist.x() + jetDir.Py() * vDist.y() + jetDir.Pz() * vDist.z();
256  JetVrtDir = fabs(JetVrtDir); /* Always positive when primary vertex is seeked for*/
257  if (JetVrtDir > 0.)
258  IniVrt = FitVertex; /* Good initial estimation */
259  else
260  IniVrt = primVrt.position();
261  }
262 
263  m_vertexFitterTool->setApproximateVertex(IniVrt.x(), IniVrt.y(), IniVrt.z(), *state);
264 
265  // Perform the Vertex Fit
266  sc = (m_vertexFitterTool->VKalVrtFit(xAODwrk->listSelTracks, neutralPartDummy, newvrt.vertex, newvrt.vertexMom,
267  newvrt.vertexCharge, newvrt.vertexCov, newvrt.chi2PerTrk, newvrt.trkAtVrt,
268  newvrt.chi2, *state, false));
269  if (sc.isFailure())
270  continue;
271 
272  // Chi2 Cut
273  auto NDOF = 2 * (newvrt.trkAtVrt.size()) - 3.0; // From VrtSecInclusive
274 
275  if (newvrt.chi2 / NDOF >= m_maxChi2)
276  continue;
277  ATH_MSG_DEBUG("Found IniVertex=" << newvrt.vertex[0] << ", " << newvrt.vertex[1] << ", " << newvrt.vertex[2]
278  << " trks " << newvrt.trkAtVrt.size());
279 
280  Amg::Vector3D vDir = newvrt.vertex - primVrt.position(); // Vertex Dirction in relation to Primary
281 
282  Amg::Vector3D jetVrtDir(jet->p4().Px(), jet->p4().Py(), jet->p4().Pz());
283 
284  double vPos =
285  (vDir.x() * newvrt.vertexMom.Px() + vDir.y() * newvrt.vertexMom.Py() + vDir.z() * newvrt.vertexMom.Pz()) /
286  newvrt.vertexMom.Rho();
287 
288  double Lxy = sqrt(vDir[0] * vDir[0] + vDir[1] * vDir[1]);
289  double Lxyz = sqrt(vDir[0] * vDir[0] + vDir[1] * vDir[1] + vDir[2] * vDir[2]);
290  ATH_MSG_DEBUG("Lxyz " << Lxyz);
291 
292  double drJPVSV = Amg::deltaR(jetVrtDir, vDir); // DeltaR
293 
294  int ntrk = newvrt.trkAtVrt.size(); // # Tracks in Vertex
295 
296  TLorentzVector MomentumVtx = TotalMom(xAODwrk->listSelTracks);
297 
298  double eRatio = MomentumVtx.E() / jet->p4().E();
299  double signif3D;
300  [[maybe_unused]] double distToPV = vrtVrtDist(primVrt, newvrt.vertex, newvrt.vertexCov, signif3D);
301 
302  // apply quality cuts
303  if (m_applyCuts) {
304  // cut on minimum number of tracks in the vertex
305  if (ntrk < m_minNTrack)
306  continue;
307  // cut on 3D significance
308  if (signif3D < m_minSig3D)
309  continue;
310  // cut on minumum transverse displacement from the PV
311  if (Lxy < m_minLxy )
312  continue;
313  }
314 
315  // Register Container
316  auto* GNNvertex = outVertexContainer->emplace_back(new xAOD::Vertex);
317 
318  for (const auto *trk : xAODwrk->listSelTracks) {
320  *(dynamic_cast<const xAOD::TrackParticleContainer *>(trk->container())),
321  trk->index());
322  GNNvertex->addTrackAtVertex(link_trk, 1.);
323  }
324 
325  //Add Vertex Info into Container
326  GNNvertex->setVertexType(xAOD::VxType::SecVtx);
327  GNNvertex->setPosition(newvrt.vertex);
328  GNNvertex->setFitQuality(newvrt.chi2, NDOF);
329 
330  m_deco_mass(*GNNvertex) = newvrt.vertexMom.M();
331  m_deco_pt(*GNNvertex) = newvrt.vertexMom.Perp();
332  m_deco_charge(*GNNvertex) = newvrt.vertexCharge;
333  m_deco_vPos(*GNNvertex) = vPos;
334  m_deco_lxy(*GNNvertex) = Lxy;
335  m_deco_lxyz(*GNNvertex) = Lxyz;
336  m_deco_sig3D(*GNNvertex) = signif3D;
337  m_deco_ntrk(*GNNvertex) = ntrk;
338  m_deco_deltaR(*GNNvertex) = drJPVSV;
339  m_deco_eFrac(*GNNvertex) = eRatio;
340  m_deco_nHFTracks(*GNNvertex) = heavyFlavourVertexMap[pair.first].size();
341 
343  linkVertex.setElement(GNNvertex);
344  linkVertex.setStorableObject(*outVertexContainer);
345  jetWriteDecorHandleVertexLink(*jet).push_back(linkVertex);
346 
347  } // end of 2 Track requirement
348  }
349  } // end loop over jets
350  return StatusCode::SUCCESS;
351 } // end performVertexFit
352 
353 StatusCode GNNVertexFitterTool::finalize() { return StatusCode::SUCCESS; }
354 
355 } // namespace Rec
356 
Rec::GNNVertexFitterTool::fitAllVertices
virtual StatusCode fitAllVertices(const xAOD::JetContainer *, xAOD::VertexContainer *, const xAOD::Vertex &primaryVertex, const EventContext &) const
Definition: GNNVertexFitterTool.cxx:101
Rec::GNNVertexFitterTool::m_maxChi2
DoubleProperty m_maxChi2
Definition: GNNVertexFitterTool.h:132
xAOD::Vertex_v1::x
float x() const
Returns the x position.
Rec::GNNVertexFitterTool::m_deco_nHFTracks
SG::AuxElement::Decorator< float > m_deco_nHFTracks
Definition: GNNVertexFitterTool.h:125
Rec::GNNVertexFitterTool::m_vertexLinksKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_vertexLinksKey
Definition: GNNVertexFitterTool.h:80
DataVector::emplace_back
value_type emplace_back(value_type pElem)
Add an element to the end of the collection.
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
Rec::GNNVertexFitterTool::m_deco_sig3D
SG::AuxElement::Decorator< float > m_deco_sig3D
Definition: GNNVertexFitterTool.h:120
InDet::ExclusiveOrigin::FromC
@ FromC
Definition: InDetTrackTruthOriginDefs.h:166
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
index
Definition: index.py:1
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Rec::GNNVertexFitterTool::m_jetWriteDecorKeyVertexLink
SG::WriteDecorHandleKey< xAOD::JetContainer > m_jetWriteDecorKeyVertexLink
Definition: GNNVertexFitterTool.h:85
Rec::GNNVertexFitterTool::m_deco_lxy
SG::AuxElement::Decorator< float > m_deco_lxy
Definition: GNNVertexFitterTool.h:119
python.SystemOfUnits.MeV
int MeV
Definition: SystemOfUnits.py:154
Rec::GNNVertexFitterTool::m_trackLinksKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_trackLinksKey
Definition: GNNVertexFitterTool.h:76
Rec::GNNVertexFitterTool::m_deco_deltaR
SG::AuxElement::Decorator< float > m_deco_deltaR
Definition: GNNVertexFitterTool.h:121
Rec::GNNVertexFitterTool::m_minSig3D
DoubleProperty m_minSig3D
Definition: GNNVertexFitterTool.h:136
Rec::GNNVertexFitterTool::m_includePrimaryVertex
BooleanProperty m_includePrimaryVertex
Definition: GNNVertexFitterTool.h:129
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
Rec::GNNVertexFitterTool::m_deco_charge
SG::AuxElement::Decorator< float > m_deco_charge
Definition: GNNVertexFitterTool.h:117
Rec::GNNVertexFitterTool::~GNNVertexFitterTool
virtual ~GNNVertexFitterTool()
Definition: GNNVertexFitterTool.cxx:36
Rec::GNNVertexFitterTool::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: GNNVertexFitterTool.h:91
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:52
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Rec::GNNVertexFitterTool::m_vertexFitterTool
ToolHandle< Trk::TrkVKalVrtFitter > m_vertexFitterTool
Definition: GNNVertexFitterTool.h:73
InDet::ExclusiveOrigin::Primary
@ Primary
Definition: InDetTrackTruthOriginDefs.h:163
Rec::GNNVertexFitterTool::m_massPi
double m_massPi
Definition: GNNVertexFitterTool.h:139
Rec::GNNVertexFitterTool::WrkVrt::Good
bool Good
Definition: GNNVertexFitterTool.h:104
Rec::GNNVertexFitterTool::m_deco_eFrac
SG::AuxElement::Decorator< float > m_deco_eFrac
Definition: GNNVertexFitterTool.h:124
Rec::GNNVertexFitterTool::m_trackOriginsKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_trackOriginsKey
Definition: GNNVertexFitterTool.h:78
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
convertTimingResiduals.sum
sum
Definition: convertTimingResiduals.py:55
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
Rec::GNNVertexFitterTool::m_jetCollection
StringProperty m_jetCollection
Definition: GNNVertexFitterTool.h:128
lumiFormat.i
int i
Definition: lumiFormat.py:92
Rec
Name: MuonSpContainer.h Package : offline/Reconstruction/MuonIdentification/muonEvent.
Definition: FakeTrackBuilder.h:10
Rec::GNNVertexFitterTool::initialize
StatusCode initialize()
Definition: GNNVertexFitterTool.cxx:38
Rec::GNNVertexFitterTool::finalize
StatusCode finalize()
Definition: GNNVertexFitterTool.cxx:353
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
xAOD::VxType::SecVtx
@ SecVtx
Secondary vertex.
Definition: TrackingPrimitives.h:572
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:99
WriteDecorHandle.h
Handle class for adding a decoration to an object.
Rec::GNNVertexFitterTool::GNNVertexFitterTool
GNNVertexFitterTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: GNNVertexFitterTool.cxx:13
test_pyathena.parent
parent
Definition: test_pyathena.py:15
Rec::GNNVertexFitterTool::WrkVrt
Definition: GNNVertexFitterTool.h:103
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
xAOD::Vertex_v1::z
float z() const
Returns the z position.
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
Rec::GNNVertexFitterTool::m_doInclusiveVertexing
BooleanProperty m_doInclusiveVertexing
Definition: GNNVertexFitterTool.h:131
Rec::GNNVertexFitterTool::m_minLxy
DoubleProperty m_minLxy
Definition: GNNVertexFitterTool.h:134
Rec::GNNVertexFitterTool::m_applyCuts
BooleanProperty m_applyCuts
Definition: GNNVertexFitterTool.h:133
Rec::workVectorArrxAOD
Definition: GNNVertexFitterTool.h:51
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Rec::GNNVertexFitterTool::m_maxLxy
DoubleProperty m_maxLxy
Definition: GNNVertexFitterTool.h:135
Rec::GNNVertexFitterTool::m_removeNonHFVertices
BooleanProperty m_removeNonHFVertices
Definition: GNNVertexFitterTool.h:130
Rec::GNNVertexFitterTool::m_deco_mass
SG::AuxElement::Decorator< float > m_deco_mass
Definition: GNNVertexFitterTool.h:115
Amg::deltaR
double deltaR(const Amg::Vector3D &v1, const Amg::Vector3D &v2)
Definition: GeoPrimitivesHelpers.h:122
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
DeMoScan.index
string index
Definition: DeMoScan.py:362
Rec::GNNVertexFitterTool::TotalMom
TLorentzVector TotalMom(const std::vector< const xAOD::TrackParticle * > &selTrk) const
Definition: GNNVertexFitterTool.cxx:62
a
TList * a
Definition: liststreamerinfos.cxx:10
Rec::GNNVertexFitterTool::m_HFRatioThres
DoubleProperty m_HFRatioThres
Definition: GNNVertexFitterTool.h:137
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
InDet::ExclusiveOrigin::FromBC
@ FromBC
Definition: InDetTrackTruthOriginDefs.h:165
xAOD::Vertex_v1::y
float y() const
Returns the y position.
Rec::GNNVertexFitterTool::m_deco_vPos
SG::AuxElement::Decorator< float > m_deco_vPos
Definition: GNNVertexFitterTool.h:118
Rec::GNNVertexFitterTool::m_deco_ntrk
SG::AuxElement::Decorator< float > m_deco_ntrk
Definition: GNNVertexFitterTool.h:122
ReadDecorHandle.h
Handle class for reading a decoration on an object.
GNNVertexFitterTool.h
AthAlgTool
Definition: AthAlgTool.h:26
InDet::ExclusiveOrigin::FromB
@ FromB
Definition: InDetTrackTruthOriginDefs.h:164
Rec::GNNVertexFitterTool::m_deco_pt
SG::AuxElement::Decorator< float > m_deco_pt
Definition: GNNVertexFitterTool.h:116
Rec::GNNVertexFitterTool::m_deco_lxyz
SG::AuxElement::Decorator< float > m_deco_lxyz
Definition: GNNVertexFitterTool.h:123
Rec::GNNVertexFitterTool::m_gnnModel
StringProperty m_gnnModel
Definition: GNNVertexFitterTool.h:127
Rec::GNNVertexFitterTool::m_minNTrack
DoubleProperty m_minNTrack
Definition: GNNVertexFitterTool.h:138
Rec::GNNVertexFitterTool::m_eventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Definition: GNNVertexFitterTool.h:82
Rec::GNNVertexFitterTool::vrtVrtDist
double vrtVrtDist(const xAOD::Vertex &primVrt, const Amg::Vector3D &secVrt, const std::vector< double > &vrtErr, double &signif) const
Definition: GNNVertexFitterTool.cxx:73