ATLAS Offline Software
Loading...
Searching...
No Matches
Trk2DDistanceFinder.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3*/
4
5/*********************************************************************
6 Trk2DDistanceFinder.cxx - Description in header file
7*********************************************************************/
8
9//#define SEEDNEWTONTRKDISTANCEFINDER_DEBUG
10
11
18#include "TrkTrack/Track.h"
21#include <cmath>
22
23
24namespace Trk
25{
26
27
28 Trk2DDistanceFinder::Trk2DDistanceFinder(const std::string& t, const std::string& n, const IInterface* p) :
29 base_class(t,n,p),
30 m_2ddistanceseeder("Trk::Trk2dDistanceSeeder"),
32 {
33 declareProperty("Trk2dDistanceSeeder", m_2ddistanceseeder);
34 }
35
37
39 {
40
41 //initialize number of failures to 0
43
44 ATH_CHECK( AlgTool::initialize() );
45 ATH_CHECK( m_2ddistanceseeder.retrieve() );
46 ATH_MSG_DEBUG( "Initialize successful" );
47 return StatusCode::SUCCESS;
48 }
49
51 {
52 ATH_MSG_DEBUG( "Finalize successful. Number of failed minimizations: " << m_numberOfMinimizationFailures << ". Few per events is OK!" );
53 return StatusCode::SUCCESS;
54 }
55
56
59 std::optional<ITrkDistanceFinder::TwoPoints>
61 const Trk::Perigee & b) const
62 {
63 std::pair<PointOnTrack,PointOnTrack> minpoints;
64 Trk::TwoPoints points;
65
66 try {
67 minpoints=m_2ddistanceseeder->GetSeed(TwoTracks(a,b), &points);
68 } catch (...) {
69 ATH_MSG_WARNING( "Problem with 2d analytic minimum distance finder" );
71 return std::nullopt;
72 }
73
74
75#ifdef SEEDNEWTONTRKDISTANCEFINDER_DEBUG
76 ATH_MSG_DEBUG( "Returned a_phi " << minpoints.first.getPhiPoint() );
77 ATH_MSG_DEBUG( "Returned b_phi " << minpoints.second.getPhiPoint() );
78#endif
79
80 return points;
81
82 }
83
85 std::optional<ITrkDistanceFinder::TwoPoints>
87 const Trk::Track & b) const
88 {
89 if (std::isnan(a.perigeeParameters()->parameters()[Trk::d0])||std::isnan(b.perigeeParameters()->parameters()[Trk::d0])) {
90 ATH_MSG_ERROR( "Nan parameters in tracks. Cannot use them" );
91 return std::nullopt;
92 }
93
94 return CalculateMinimumDistance(*(a.perigeeParameters()),*(b.perigeeParameters()));
95 }
96
97} // namespace Trk
98
#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 a
virtual StatusCode finalize() override
Trk2DDistanceFinder(const std::string &t, const std::string &n, const IInterface *p)
virtual std::optional< TwoPoints > CalculateMinimumDistance(const Trk::Perigee &, const Trk::Perigee &) const override final
method to do the calculation starting from two MeasuredPerigees
std::atomic< int > m_numberOfMinimizationFailures
virtual StatusCode initialize() override
ToolHandle< Trk2dDistanceSeeder > m_2ddistanceseeder
Ensure that the ATLAS eigen extensions are properly loaded.
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
@ d0
Definition ParamDefs.h:63
std::pair< Amg::Vector3D, Amg::Vector3D > TwoPoints