ATLAS Offline Software
JetFitterV0FinderTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
12 
13 using namespace InDet;
14 
15 JetFitterV0FinderTool::JetFitterV0FinderTool(const std::string &t, const std::string &n, const IInterface *p)
16  : AthAlgTool(t, n, p),
17  m_compatibilityAccessor( "TrackCompatibility" ),
18  m_tracksAccessor( "VxTrackAtVertex" )
19 {
20 
21  declareInterface< JetFitterV0FinderTool >(this);
22 
23  std::string toolname = this->name();
24  std::string delimiter = "_";
25  std::string::size_type firstDelimiter = toolname.find(delimiter);
26  std::string sub = toolname.substr(0, firstDelimiter);
27  std::string decoratorName = std::string("JetFitter_TrackCompatibility_") + sub;
29 
30 }
31 
33 
34 
36 
37  if ( m_jetFitterUtils.retrieve().isFailure() ) {
38  ATH_MSG_ERROR( "Cannot retrieve InDet::InDetJetFitterUtils/InDetJetFitterUtils" );
39  return StatusCode::FAILURE;
40  }
41 
42  if ( m_mode3dfinder.retrieve().isFailure() ) {
43  ATH_MSG_ERROR( "Cannot retrieve Trk::Mode3dTo1dFinder/Mode3dTo1dFinder" );
44  return StatusCode::FAILURE;
45  }
46 
48  ATH_CHECK(detStore()->retrieve(m_beamPipeMgr, "BeamPipe"));
49  ATH_CHECK(detStore()->retrieve(m_pixelManager, "ITkPixel"));
50 
52 
54  }
55 
56  return StatusCode::SUCCESS;
57 }
58 
60  return StatusCode::SUCCESS;
61 }
62 
63 
64 
66  const TLorentzVector& jetMomentum,
67  std::vector< const Trk::ITrackLink* >& inputTracks,
68  const std::vector< const xAOD::Vertex* >& vertexCandidates,
69  std::vector< const Trk::ITrackLink* >& tracksToUseInFirstFit,
70  std::vector< const Trk::ITrackLink* >& tracksToUseInSecondFit,
71  Amg::Vector3D& JFseedDirection ) const {
72 
73  // Vector of seeding vertices.
74  std::vector< Trk::PositionAndWeight > positionsOfSeedingVertices;
75 
76  // Using a function here, may become tool in the future!
77  // Phase 3, 4 and 5: find and select v0 candidates
78  std::vector< const xAOD::Vertex* > v0candidates = findV0candidates( primaryVertex,jetMomentum,inputTracks, vertexCandidates );
79  ATH_MSG_DEBUG( "Found " << v0candidates.size() <<" V0 candidates!" );
80 
81  // Phase 6
82  // Select tracks for first fit using only the "best tracks" from the two-track vertices
83  ATH_MSG_DEBUG( "Analyzing two track vertices to select the best tracks" );
84  for ( const xAOD::Vertex* v0candidate : v0candidates ) {
85 
86  // Check quality for first fit
87  bool satisfyCriteriaFirstFitQuality = checkCriteriaFirstFit( primaryVertex,jetMomentum,*v0candidate );
88  if ( not satisfyCriteriaFirstFitQuality ) {
89  ATH_MSG_DEBUG( "Quality criteria for first fit not satisfied! skipping ... " );
90  continue;
91  }
92 
93  // The v0 candidate satisfy the selection criteria
94  // Filling the vector of tracks to be used in the first fit
95  std::vector< const Trk::ITrackLink* > vxTrackAtVertex = m_tracksAccessor( *v0candidate );
96  const Trk::ITrackLink *firstTrack = vxTrackAtVertex.at(0);
97  const Trk::ITrackLink *secondTrack = vxTrackAtVertex.at(1);
98 
99  // Second track added first, legacy from old jetfitter
100  bool secondTrackAlreadyStored = m_jetFitterUtils->checkIfTrackIsInVector( secondTrack,tracksToUseInFirstFit );
101  if ( not secondTrackAlreadyStored )
102  tracksToUseInFirstFit.push_back( secondTrack );
103 
104  // First track
105  bool firstTrackAlreadyStored = m_jetFitterUtils->checkIfTrackIsInVector( firstTrack,tracksToUseInFirstFit );
106  if ( not firstTrackAlreadyStored )
107  tracksToUseInFirstFit.push_back( firstTrack );
108 
109  positionsOfSeedingVertices.emplace_back( v0candidate->position(),1 );
110  }
111 
112 
113  // Phase 7
114  ATH_MSG_DEBUG( "Determine single good tracks to add in the fit in a second step" );
115  for ( const Trk::ITrackLink *trackLink : inputTracks ) {
116 
117  bool satisfyCriteriaSecondFitQuality = checkCriteriaSecondFit( primaryVertex,trackLink );
118  if ( not satisfyCriteriaSecondFitQuality ) {
119  ATH_MSG_DEBUG( "Quality criteria for second fit not satisfied! skipping ... " );
120  continue;
121  }
122 
123  bool alreadyUsed = m_jetFitterUtils->checkIfTrackIsInVector( trackLink,tracksToUseInFirstFit );
124  if ( alreadyUsed ) {
125  ATH_MSG_VERBOSE( "Track was already used" );
126  continue;
127  }
128 
129  bool trackAlreadyStored = m_jetFitterUtils->checkIfTrackIsInVector( trackLink,tracksToUseInSecondFit );
130  if ( not trackAlreadyStored )
131  tracksToUseInSecondFit.push_back( trackLink );
132  }
133 
134 
135  // Compute JFseedDirection
136  JFseedDirection = computeSeedDirection( primaryVertex,jetMomentum,positionsOfSeedingVertices );
137 
138  // First argument is the list of vertex candidates
139  // Second argument is the list of Selected Neutral Tracks To Store
140  // The Trk::TwoTrackVerticesInJet takes over the ownership
141 
142  // We need to use normal pointers instead of smart pointers since the code breaks.
143  // We have to fix this issue in the future
144  const Trk::TwoTrackVerticesInJet *twoTrackVerticesInJet = new Trk::TwoTrackVerticesInJet( std::move(v0candidates),
145  std::vector< const Trk::TrackParticleBase* >() );
146  return twoTrackVerticesInJet;
147 }
148 
149 std::vector< const xAOD::Vertex* > JetFitterV0FinderTool::findV0candidates( const xAOD::Vertex& /*primaryVertex*/,
150  const TLorentzVector& /*jetMomentum*/,
151  std::vector< const Trk::ITrackLink* >& /*inputTracks*/,
152  const std::vector< const xAOD::Vertex* >& vertexCandidates ) const {
153 
154  std::vector< const xAOD::Vertex* > v0candidates;
155  ATH_MSG_DEBUG( "Looping over " << vertexCandidates.size() <<" input candidates" );
156 
157  for ( unsigned int indexA(0); indexA<vertexCandidates.size(); indexA++ ) {
158  const xAOD::Vertex* myCandidate = vertexCandidates.at( indexA );
159 
160  // Here a shortlist of candidates will be applied
161 
162  // Phase 4 and 5 (not called in old code)!
163  // Check for photon convertion, Ks and Lambda
164  // Veto candidates and tracks
165 
166  // Make a copy of the input candidate
167  // This way of creating a copy creates a discrepancy w.r.t. the code in rel21, which is propagated to Jet Fitter variables.
168  // However, this assures that the vertex positions retrieved via position().x() and x() are consistent
170  v0candidates.push_back( toAdd );
171  *toAdd = *myCandidate;
172  }
173 
174  return v0candidates;
175 }
176 
178  const TLorentzVector& jetMomentum,
179  const xAOD::Vertex& v0candidate ) const {
180 
181 
182  // Check vertex probability
183  double vertexProb = TMath::Prob( v0candidate.chiSquared(),
184  v0candidate.numberDoF() );
185 
188  ATH_MSG_DEBUG( "V0 candidate does not satisfy the vertex prob criteria!" );
189  return false;
190  }
191 
192 
193 
194  // Retrieve and prepare objects
195  const std::vector< const Trk::ITrackLink* > vxTrackAtVertex = m_tracksAccessor( v0candidate );
196  const Trk::ITrackLink* trackLink1 = vxTrackAtVertex.at( 0 );
197  const Trk::ITrackLink* trackLink2 = vxTrackAtVertex.at( 1 );
198 
199  if ( trackLink1 == nullptr || trackLink2 == nullptr ) {
200  ATH_MSG_DEBUG( "Zero pointer (ITrackLink): skipping 2-track candidate" );
201  return false;
202  }
203 
204  const Trk::LinkToXAODTrackParticle* linkTrackA = dynamic_cast< const Trk::LinkToXAODTrackParticle* >( trackLink1 );
205  const Trk::LinkToXAODTrackParticle* linkTrackB = dynamic_cast< const Trk::LinkToXAODTrackParticle* >( trackLink2 );
206 
207  if ( !linkTrackA || !linkTrackB ) {
208  ATH_MSG_DEBUG( "Zero pointer (LinkToXAODTrackParticle): skipping 2-track candidate" );
209  return false;
210  }
211 
212 
213  // TO-DO
214  // remove track candidates that are supposed to be voted !
215 
216 
217 
218 
219  // Take track compatibility and compute flight significance
220  // compatibility is attached to tracks, so we need to retrieve xAOD::TrackParticles objects
221  float compatibiltyTrackA = m_compatibilityAccessor( ***linkTrackA );
222  float compatibiltyTrackB = m_compatibilityAccessor( ***linkTrackB );
223 
224  if ( TMath::Prob( fabs(compatibiltyTrackA),2 ) >= m_cutCompatibilityPrimaryVertexSingleTrackForBFirstSelection ) return false;
225  if ( TMath::Prob( fabs(compatibiltyTrackB),2 ) >= m_cutCompatibilityPrimaryVertexSingleTrackForBFirstSelection ) return false;
226  if ( TMath::Prob( fabs(compatibiltyTrackA) + fabs(compatibiltyTrackB),4 ) >= m_cutCompatibilityPrimaryVertexBothTracksForBFirstSelection ) return false;
227 
228 
229  // Criteria on D0 and Z0 of the tracks w.r.t. primary vertex
230  const Trk::TrackParameters* initialPerigee1 = linkTrackA->parameters();
231  const Trk::TrackParameters* initialPerigee2 = linkTrackB->parameters();
232 
233  if ( !initialPerigee1 || !initialPerigee2 ) {
234  ATH_MSG_DEBUG( "No refitted parameters available for 2-track vertex. Candidate not accepted..." );
235  return false;
236  }
237 
238  if ( initialPerigee1->momentum().perp() <= m_cutPtBothTracksForBFirstSelection ) return false;
239  if ( initialPerigee2->momentum().perp() <= m_cutPtBothTracksForBFirstSelection ) return false;
240 
241 
242 
243 
244  // Need to create Trk::RecVertex object. Is this really necessary?
245  Trk::RecVertex primaryVertexRecVertex( primaryVertex.position(),
246  primaryVertex.covariancePosition(),
247  primaryVertex.numberDoF(),
248  primaryVertex.chiSquared());
249 
250  std::pair<double,double> track1_IPd0z0 = m_jetFitterUtils->getD0andZ0IP( *initialPerigee1,
251  primaryVertexRecVertex );
252 
253  std::pair<double,double> track2_IPd0z0 = m_jetFitterUtils->getD0andZ0IP(*initialPerigee2,
254  primaryVertexRecVertex);
255 
256 
257 
258  ATH_MSG_DEBUG( "Checking good quality for track A..." );
259  if ( fabs( track1_IPd0z0.first ) >= m_cutIPD0BothTracksForBFirstSelection ) return false;
260  if ( fabs( track1_IPd0z0.second ) >= m_cutIPZ0BothTracksForBFirstSelection ) return false;
261 
262  ATH_MSG_DEBUG( "Checking good quality for track B..." );
263  if ( fabs( track2_IPd0z0.first ) >= m_cutIPD0BothTracksForBFirstSelection ) return false;
264  if ( fabs( track2_IPd0z0.second ) >= m_cutIPZ0BothTracksForBFirstSelection ) return false;
265 
266 
267 
268 
269 
270  ATH_MSG_DEBUG( "Checking distance and error between two vertices..." );
271  std::pair<double,double> distanceAndError = m_jetFitterUtils->getDistanceAndErrorBetweenTwoVertices( v0candidate,primaryVertexRecVertex );
272 
273  Amg::Vector3D jetMomSpatial( jetMomentum.X(), jetMomentum.Y(), jetMomentum.Z() );
274  double sign = ( v0candidate.position() - primaryVertexRecVertex.position() ).dot( jetMomSpatial );
275 
276  double signedDistance = distanceAndError.first;
277  if ( sign < 0 ) signedDistance = -signedDistance;
278  double significance = signedDistance/distanceAndError.second;
279 
280  double FirstSelectionFirstCriterium = m_cutTwoTrkVtxLifetimeSignificanceForBFirstSelectionFirstCriterium;
281  double FirstSelectionSecondCriterium = m_cutTwoTrkVtxLifetimeSignificanceForBFirstSelectionSecondCriterium;
282 
284  FirstSelectionFirstCriterium = -FirstSelectionFirstCriterium;
285  FirstSelectionSecondCriterium = -FirstSelectionSecondCriterium;
286  }
287 
288  bool firstCriterium = ( vertexProb > m_cutTwoTrkVtxVertexProbForBFirstSelectionFirstCriterium ) &&
289  ( significance > FirstSelectionFirstCriterium );
290  bool secondCriterium = ( vertexProb > m_cutTwoTrkVtxVertexProbForBFirstSelectionSecondCriterium ) &&
291  ( significance > FirstSelectionSecondCriterium );
292 
293  if ( not ( firstCriterium || secondCriterium ) )
294  return false;
295 
296 
297 
298 
299  ATH_MSG_DEBUG( "Checking material interaction in layer..." );
300  double radius = v0candidate.position().perp();
301  double z = v0candidate.position().z();
302  bool matinteraction = false;
303 
305  int bin = m_ITkPixMaterialMap->FindBin(z,radius);
306  if(m_ITkPixMaterialMap->GetBinContent(bin)>0) matinteraction = true;
307  }
308 
309  else{
312  matinteraction = true;
313  }
314 
315  if ( matinteraction ) {
316  bool signifCutTight = ( TMath::Prob( fabs( compatibiltyTrackA ),2 ) < m_cutCompatibilityToPrimarySingleTrackForMatInteractions ) &&
317  ( TMath::Prob( fabs( compatibiltyTrackB ),2 ) < m_cutCompatibilityToPrimarySingleTrackForMatInteractions ) &&
318  ( TMath::Prob( fabs( compatibiltyTrackA ) + fabs( compatibiltyTrackB ),4 ) < m_cutCompatibilityToPrimaryBothTracksForMatInteractions );
319 
320  if ( signifCutTight ) return false;
321  }
322 
323 
324 
325  // TO-DO
326  // Remove candidates with track overlaps
327 
328 
329 
330  return true;
331 }
332 
333 
335  const Trk::ITrackLink *trackLink ) const {
336 
337  const Trk::LinkToXAODTrackParticle* linkTrack = dynamic_cast< const Trk::LinkToXAODTrackParticle* >( trackLink );
338  if ( linkTrack == nullptr ) {
339  ATH_MSG_DEBUG( "Zero pointer (LinkToXAODTrackParticle): skipping 2-track candidate" );
340  return false;
341  }
342 
343  float compatibilityTrack = m_compatibilityAccessor( ***linkTrack );
344 
345 
346  const Trk::TrackParameters* perigee = trackLink->parameters();
347  const AmgSymMatrix(5) *measPerigee = perigee->covariance();
348 
349  if ( measPerigee == nullptr ) {
350  ATH_MSG_DEBUG( "Track parameters have no covariance. skipping single track candidate..." );
351  return false;
352  }
353 
354  // Need to create Trk::RecVertex object. Is this really necessary?
355  Trk::RecVertex primaryVertexRecVertex( primaryVertex.position(),
356  primaryVertex.covariancePosition(),
357  primaryVertex.numberDoF(),
358  primaryVertex.chiSquared());
359 
360  std::pair<double,double> track_IPd0z0 = m_jetFitterUtils->getD0andZ0IP( *perigee,
361  primaryVertexRecVertex );
362  std::pair<double,double> track_IPd0z0Sig = m_jetFitterUtils->getD0andZ0IPSig( *perigee,
363  primaryVertexRecVertex );
364 
365  const double IPd0 = track_IPd0z0.first;
366  const double IPz0 = track_IPd0z0.second;
367  const double IPd0Sig = track_IPd0z0Sig.first;
368  const double IPz0Sig = track_IPd0z0Sig.second;
369  const double pT = perigee->momentum().perp();
370 
371  double cutCompatibilityPrimaryVertexSinglePositiveLifetimeTrackForBSecondSelection = m_cutCompatibilityPrimaryVertexSinglePositiveLifetimeTrackForBSecondSelection;
372  double cutCompatibilityPrimaryVertexSingleNegativeLifetimeTrackForBSecondSelection = m_cutCompatibilityPrimaryVertexSingleNegativeLifetimeTrackForBSecondSelection;
373 
375  cutCompatibilityPrimaryVertexSinglePositiveLifetimeTrackForBSecondSelection = m_cutCompatibilityPrimaryVertexSingleNegativeLifetimeTrackForBSecondSelection;
376  cutCompatibilityPrimaryVertexSingleNegativeLifetimeTrackForBSecondSelection = m_cutCompatibilityPrimaryVertexSinglePositiveLifetimeTrackForBSecondSelection;
377  }
378 
379  bool passBoxCut = ( fabs(IPd0Sig) < m_cutIPD0SigBoxSingleTrackForBSecondSelection ) &&
381 
382 
383  if ( fabs(IPd0) > m_cutIPD0SingleTrackForBSecondSelection ||
385  ( compatibilityTrack >= 0 && TMath::Prob( fabs(compatibilityTrack),2) > cutCompatibilityPrimaryVertexSinglePositiveLifetimeTrackForBSecondSelection ) ||
386  ( compatibilityTrack < 0 && TMath::Prob( fabs(compatibilityTrack),2) > cutCompatibilityPrimaryVertexSingleNegativeLifetimeTrackForBSecondSelection ) ||
387  pT < m_cutPtSingleTrackForBSecondSelection || passBoxCut )
388  {
389  ATH_MSG_DEBUG( "Candidate didn't pass one of the selection cuts" );
390  return false;
391  }
392 
393  return true;
394 }
395 
397  const TLorentzVector& jetMomentum,
398  const std::vector< Trk::PositionAndWeight >& positionsOfSeedingVertices ) const {
399 
400  Amg::Vector3D JFseedDirection( jetMomentum.X(),jetMomentum.Y(),jetMomentum.Z() );
401  JFseedDirection.normalize();
402  ATH_MSG_VERBOSE( "Jet Direction would be: " << JFseedDirection );
403 
404  if ( positionsOfSeedingVertices.empty() )
405  return JFseedDirection;
406 
407  Amg::Vector3D theSeedVertex = m_mode3dfinder->getMode( primaryVertex.x(),primaryVertex.y(),positionsOfSeedingVertices );
408  double sign = ( theSeedVertex - primaryVertex.position() ).dot( JFseedDirection );
409 
410  if ( m_revertFromPositiveToNegativeTags == false ) {
411 
412  if ( sign > 0 ) {
413  JFseedDirection = ( theSeedVertex - primaryVertex.position() ).unit();
414  ATH_MSG_DEBUG( "Using twotrkvtx direction for start: " << JFseedDirection );
415  } else ATH_MSG_DEBUG( "NORMAL SEEDING: Seed vertex is on negative side... Using Jet Direction!" );
416 
417  } else {
418 
419  if ( sign < 0 ) {
420  JFseedDirection = -( theSeedVertex - primaryVertex.position() ).unit();
421  ATH_MSG_DEBUG( "Using twotrkvtx direction for start: " << JFseedDirection );
422  } else ATH_MSG_DEBUG( "REVERSE SEEDING: Seed vertex is on positive side... Using Jet Direction!" );
423 
424  }
425 
426  return JFseedDirection;
427 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
InDet::JetFitterV0FinderTool::checkCriteriaSecondFit
bool checkCriteriaSecondFit(const xAOD::Vertex &, const Trk::ITrackLink *) const
Definition: JetFitterV0FinderTool.cxx:334
xAOD::Vertex_v1::x
float x() const
Returns the x position.
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
InDet::JetFitterV0FinderTool::m_cutIPD0SigBoxSingleTrackForBSecondSelection
Gaudi::Property< double > m_cutIPD0SigBoxSingleTrackForBSecondSelection
Definition: JetFitterV0FinderTool.h:101
InDet::JetFitterV0FinderTool::m_firstLayer_min
Gaudi::Property< double > m_firstLayer_min
Definition: JetFitterV0FinderTool.h:94
InDet::JetFitterV0FinderTool::m_cutTwoTrkVtxVertexProbForBFirstSelectionSecondCriterium
Gaudi::Property< double > m_cutTwoTrkVtxVertexProbForBFirstSelectionSecondCriterium
Definition: JetFitterV0FinderTool.h:80
InDet::JetFitterV0FinderTool::m_cutTwoTrkVtxLifetimeSignificanceForBFirstSelectionFirstCriterium
Gaudi::Property< double > m_cutTwoTrkVtxLifetimeSignificanceForBFirstSelectionFirstCriterium
Definition: JetFitterV0FinderTool.h:88
xAOD::Vertex
Vertex_v1 Vertex
Define the latest version of the vertex class.
Definition: Event/xAOD/xAODTracking/xAODTracking/Vertex.h:16
InDet::JetFitterV0FinderTool::m_firstLayer_max
Gaudi::Property< double > m_firstLayer_max
Definition: JetFitterV0FinderTool.h:95
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:68
InDet::JetFitterV0FinderTool::JetFitterV0FinderTool
JetFitterV0FinderTool(const std::string &t, const std::string &n, const IInterface *p)
Definition: JetFitterV0FinderTool.cxx:15
InDet::JetFitterV0FinderTool::m_cutCompatibilityToPrimarySingleTrackForMatInteractions
Gaudi::Property< double > m_cutCompatibilityToPrimarySingleTrackForMatInteractions
Definition: JetFitterV0FinderTool.h:90
InDet
Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::JetFitterV0FinderTool::m_secondLayer_max
Gaudi::Property< double > m_secondLayer_max
Definition: JetFitterV0FinderTool.h:97
bin
Definition: BinsDiffFromStripMedian.h:43
InDet::JetFitterV0FinderTool::m_pixelManager
const InDetDD::PixelDetectorManager * m_pixelManager
Definition: JetFitterV0FinderTool.h:110
InDet::JetFitterV0FinderTool::m_cutCompatibilityPrimaryVertexSinglePositiveLifetimeTrackForBSecondSelection
Gaudi::Property< double > m_cutCompatibilityPrimaryVertexSinglePositiveLifetimeTrackForBSecondSelection
Definition: JetFitterV0FinderTool.h:99
InDet::JetFitterV0FinderTool::m_cutIPZ0SingleTrackForBSecondSelection
Gaudi::Property< double > m_cutIPZ0SingleTrackForBSecondSelection
Definition: JetFitterV0FinderTool.h:105
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
InDet::JetFitterV0FinderTool::m_compatibilityAccessor
SG::AuxElement::Accessor< float > m_compatibilityAccessor
Definition: JetFitterV0FinderTool.h:72
InDet::JetFitterV0FinderTool::computeSeedDirection
Amg::Vector3D computeSeedDirection(const xAOD::Vertex &, const TLorentzVector &, const std::vector< Trk::PositionAndWeight > &) const
Definition: JetFitterV0FinderTool.cxx:396
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
InDet::JetFitterV0FinderTool::m_cutCompatibilityToPrimaryBothTracksForMatInteractions
Gaudi::Property< double > m_cutCompatibilityToPrimaryBothTracksForMatInteractions
Definition: JetFitterV0FinderTool.h:91
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
InDet::JetFitterV0FinderTool::m_cutTwoTrkVtxLifetimeSignificanceForBFirstSelectionSecondCriterium
Gaudi::Property< double > m_cutTwoTrkVtxLifetimeSignificanceForBFirstSelectionSecondCriterium
Definition: JetFitterV0FinderTool.h:89
Trk::LinkToXAODTrackParticle::parameters
virtual const TrackParameters * parameters() const override final
return the track parameters of the track (to which the EL< TrackCollection points)
Definition: LinkToXAODTrackParticle.cxx:20
InDet::JetFitterV0FinderTool::finalize
StatusCode finalize()
Definition: JetFitterV0FinderTool.cxx:59
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:50
InDet::JetFitterV0FinderTool::initialize
StatusCode initialize()
Definition: JetFitterV0FinderTool.cxx:35
InDetMaterialVeto.h
Trk::RecVertex
Trk::RecVertex inherits from Trk::Vertex.
Definition: RecVertex.h:44
InDet::JetFitterV0FinderTool::m_mode3dfinder
ToolHandle< Trk::IMode3dFinder > m_mode3dfinder
Definition: JetFitterV0FinderTool.h:69
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
InDet::JetFitterV0FinderTool::m_ITkPixMaterialMap
std::unique_ptr< TH2D > m_ITkPixMaterialMap
Definition: JetFitterV0FinderTool.h:111
InDet::JetFitterV0FinderTool::m_secondLayer_min
Gaudi::Property< double > m_secondLayer_min
Definition: JetFitterV0FinderTool.h:96
InDet::JetFitterV0FinderTool::m_useITkMaterialRejection
Gaudi::Property< bool > m_useITkMaterialRejection
Definition: JetFitterV0FinderTool.h:108
InDet::JetFitterV0FinderTool::m_tracksAccessor
SG::AuxElement::Accessor< std::vector< const Trk::ITrackLink * > > m_tracksAccessor
Definition: JetFitterV0FinderTool.h:73
Trk::TwoTrackVerticesInJet
Definition: TwoTrackVerticesInJet.h:45
python.AthDsoLogger.delimiter
delimiter
Definition: AthDsoLogger.py:71
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
LinkToXAODTrackParticle.h
TrackParticleAuxContainer.h
python.TrigInDetConfig.inputTracks
inputTracks
Definition: TrigInDetConfig.py:183
z
#define z
InDet::JetFitterV0FinderTool::m_cutIPD0BothTracksForBFirstSelection
Gaudi::Property< double > m_cutIPD0BothTracksForBFirstSelection
Definition: JetFitterV0FinderTool.h:84
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
InDet::JetFitterV0FinderTool::findV0candidates
std::vector< const xAOD::Vertex * > findV0candidates(const xAOD::Vertex &, const TLorentzVector &, std::vector< const Trk::ITrackLink * > &, const std::vector< const xAOD::Vertex * > &) const
Definition: JetFitterV0FinderTool.cxx:149
sign
int sign(int a)
Definition: TRT_StrawNeighbourSvc.h:107
Trk::LinkToXAODTrackParticle
Element link to XAOD TrackParticle.
Definition: LinkToXAODTrackParticle.h:33
InDet::JetFitterV0FinderTool::m_cutPtSingleTrackForBSecondSelection
Gaudi::Property< double > m_cutPtSingleTrackForBSecondSelection
Definition: JetFitterV0FinderTool.h:106
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
InDet::JetFitterV0FinderTool::~JetFitterV0FinderTool
~JetFitterV0FinderTool()
Trk::ParametersBase
Definition: ParametersBase.h:55
Trk::Vertex::position
const Amg::Vector3D & position() const
return position of vertex
Definition: Vertex.cxx:72
dot.dot
def dot(G, fn, nodesToHighlight=[])
Definition: dot.py:5
DeMoUpdate.toAdd
bool toAdd
Definition: DeMoUpdate.py:1304
LinkToTrackParticleBase.h
python.hypoToolDisplay.toolname
def toolname(tool)
Definition: hypoToolDisplay.py:13
InDet::JetFitterV0FinderTool::m_cutPtBothTracksForBFirstSelection
Gaudi::Property< double > m_cutPtBothTracksForBFirstSelection
Definition: JetFitterV0FinderTool.h:86
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
InDet::JetFitterV0FinderTool::m_cutIPD0SingleTrackForBSecondSelection
Gaudi::Property< double > m_cutIPD0SingleTrackForBSecondSelection
Definition: JetFitterV0FinderTool.h:104
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
xAOD::Vertex_v1::numberDoF
float numberDoF() const
Returns the number of degrees of freedom of the vertex fit as float.
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
InDet::JetFitterV0FinderTool::m_cutTwoTrkVtxVertexProbForBFirstSelectionFirstCriterium
Gaudi::Property< double > m_cutTwoTrkVtxVertexProbForBFirstSelectionFirstCriterium
Definition: JetFitterV0FinderTool.h:79
InDet::InDetMaterialVeto::ITkPixMaterialMap
std::unique_ptr< TH2D > ITkPixMaterialMap()
Definition: InDetMaterialVeto.h:34
InDet::JetFitterV0FinderTool::m_cutIPZ0BothTracksForBFirstSelection
Gaudi::Property< double > m_cutIPZ0BothTracksForBFirstSelection
Definition: JetFitterV0FinderTool.h:85
xAOD::Vertex_v1::chiSquared
float chiSquared() const
Returns the of the vertex fit as float.
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
InDet::JetFitterV0FinderTool::m_revertFromPositiveToNegativeTags
Gaudi::Property< bool > m_revertFromPositiveToNegativeTags
Definition: JetFitterV0FinderTool.h:77
InDet::JetFitterV0FinderTool::m_jetFitterUtils
ToolHandle< InDet::InDetJetFitterUtils > m_jetFitterUtils
Definition: JetFitterV0FinderTool.h:68
unit
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
Definition: AmgMatrixBasePlugin.h:21
xAOD::Vertex_v1::y
float y() const
Returns the y position.
InDet::JetFitterV0FinderTool::m_beamPipeMgr
const BeamPipeDetectorManager * m_beamPipeMgr
Definition: JetFitterV0FinderTool.h:109
InDet::JetFitterV0FinderTool::m_cutIPZ0SigBoxSingleTrackForBSecondSelection
Gaudi::Property< double > m_cutIPZ0SigBoxSingleTrackForBSecondSelection
Definition: JetFitterV0FinderTool.h:102
Amg::signedDistance
double signedDistance(const Amg::Vector3D &posA, const Amg::Vector3D &dirA, const Amg::Vector3D &posB, const Amg::Vector3D &dirB)
Calculates the signed distance between two lines in 3D space.
Definition: GeoPrimitivesHelpers.h:329
InDet::JetFitterV0FinderTool::m_cutCompatibilityPrimaryVertexBothTracksForBFirstSelection
Gaudi::Property< double > m_cutCompatibilityPrimaryVertexBothTracksForBFirstSelection
Definition: JetFitterV0FinderTool.h:83
JetFitterV0FinderTool.h
AthAlgTool
Definition: AthAlgTool.h:26
InDet::InDetMaterialVeto
Definition: InDetMaterialVeto.h:29
InDet::JetFitterV0FinderTool::checkCriteriaFirstFit
bool checkCriteriaFirstFit(const xAOD::Vertex &, const TLorentzVector &, const xAOD::Vertex &) const
Definition: JetFitterV0FinderTool.cxx:177
TrackParticleContainer.h
InDet::JetFitterV0FinderTool::m_cutCompatibilityPrimaryVertexSingleNegativeLifetimeTrackForBSecondSelection
Gaudi::Property< double > m_cutCompatibilityPrimaryVertexSingleNegativeLifetimeTrackForBSecondSelection
Definition: JetFitterV0FinderTool.h:100
InDet::JetFitterV0FinderTool::m_cutCompatibilityPrimaryVertexSingleTrackForBFirstSelection
Gaudi::Property< double > m_cutCompatibilityPrimaryVertexSingleTrackForBFirstSelection
Definition: JetFitterV0FinderTool.h:82
InDet::JetFitterV0FinderTool::doV0Finding
const Trk::TwoTrackVerticesInJet * doV0Finding(const xAOD::Vertex &, const TLorentzVector &, std::vector< const Trk::ITrackLink * > &, const std::vector< const xAOD::Vertex * > &, std::vector< const Trk::ITrackLink * > &, std::vector< const Trk::ITrackLink * > &, Amg::Vector3D &) const
Definition: JetFitterV0FinderTool.cxx:65