ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
EFTracking
FPGATrackSim
FPGATrackSimAlgorithms
src
FPGATrackSimTrackFitterTool.cxx
Go to the documentation of this file.
1
// Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3
#include "
FPGATrackSimAlgorithms/FPGATrackSimTrackFitterTool.h
"
4
#include "
FPGATrackSimMaps/FPGATrackSimPlaneMap.h
"
5
#include "
FPGATrackSimMaps/FPGATrackSimRegionMap.h
"
6
7
#include "GaudiKernel/MsgStream.h"
8
9
#include <sstream>
10
#include <iostream>
11
#include <fstream>
12
14
FPGATrackSimTrackFitterTool::FPGATrackSimTrackFitterTool
(
const
std::string&
type
,
15
const
std::string& name,
16
const
IInterface* parent)
17
:
FPGATrackSimTrackingToolBase
(
type
, name, parent)
18
{
19
}
20
21
22
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
23
StatusCode
FPGATrackSimTrackFitterTool::initialize
()
24
{
25
ATH_MSG_DEBUG
(
"FPGATrackSimTrackFitterTool::initialize()"
);
26
27
ATH_CHECK
(
m_FPGATrackSimMapping
.retrieve());
28
ATH_CHECK
(
m_FPGATrackSimBank
.retrieve());
29
if
(
m_useSpacePoints
)
ATH_CHECK
(
m_spRoadFilterTool
.retrieve(EnableTool{m_spRoadFilterTool}));
30
31
const
FPGATrackSimFitConstantBank
* nominalbank;
32
std::vector<const FPGATrackSimFitConstantBank*> bankvec;
33
if
(!
m_do2ndStage
){
34
nominalbank =
m_FPGATrackSimBank
->FitConstantBank_1st();
35
if
(!
m_guessHits
) {
36
for
(
unsigned
int
iplane = 0; iplane <
m_FPGATrackSimMapping
->PlaneMap_1st(0)->getNLogiLayers(); iplane++) {
37
const
FPGATrackSimFitConstantBank
* bank =
m_FPGATrackSimBank
->FitConstantBank_1st(iplane);
38
bankvec.push_back(bank);
39
}
40
}
41
}
42
else
{
43
nominalbank =
m_FPGATrackSimBank
->FitConstantBank_2nd();
44
if
(!
m_guessHits
) {
45
for
(
unsigned
int
iplane = 0; iplane <
m_FPGATrackSimMapping
->PlaneMap_2nd(0)->getNLogiLayers(); iplane++) {
46
const
FPGATrackSimFitConstantBank
* bank =
m_FPGATrackSimBank
->FitConstantBank_2nd(iplane);
47
bankvec.push_back(bank);
48
}
49
}
50
}
51
52
MsgStream m(msgSvc(),
"TrackFitter"
);
53
m.setLevel(
msg
().level());
54
m_tfpobj
= std::unique_ptr<TrackFitter>(
new
TrackFitter
(nominalbank, bankvec,
m_guessHits
));
55
56
if
(!
m_do2ndStage
) {
57
m_tfpobj
->setPlaneMap(
m_FPGATrackSimMapping
->PlaneMap_1st(0));
58
m_tfpobj
->setRegionMap(
m_FPGATrackSimMapping
->RegionMap_1st());
59
}
else
{
60
m_tfpobj
->setPlaneMap(
m_FPGATrackSimMapping
->PlaneMap_2nd(0));
61
m_tfpobj
->setRegionMap(
m_FPGATrackSimMapping
->RegionMap_2nd());
62
}
63
64
// set parameter object to TrackFitter
65
m_tfpobj
->setChi2DofRecoveryMin(
m_chi2dof_recovery_min
);
66
m_tfpobj
->setChi2DofRecoveryMax(
m_chi2dof_recovery_max
);
67
68
m_tfpobj
->setDoMajority(
m_doMajority
);
69
70
m_tfpobj
->setRequireFirst(0);
71
m_tfpobj
->setDoSecondStage(
m_do2ndStage
);
72
73
m_tfpobj
->setNorecoveryNhits(
m_noRecoveryNHits
);
74
75
m_tfpobj
->setFitFromRoad(
m_fitFromRoad
);
76
77
if
(!
m_guessHits
&&
m_doMissingHitsChecks
)
ATH_MSG_WARNING
(
"We can't do missing hits check if we don't guess hits"
);
78
m_tfpobj
->setDoMissingHitsCheck(
m_doMissingHitsChecks
);
79
m_tfpobj
->setIdealCoordFitType(
static_cast<
TrackCorrType
>
(
m_idealCoordFitType
.value()));
80
m_tfpobj
->setDoDeltaGPhis(
m_doDeltaGPhis
);
81
82
return
StatusCode::SUCCESS;
83
}
84
85
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
86
StatusCode
FPGATrackSimTrackFitterTool::getTracks
(std::vector<FPGATrackSimRoad>& roads, std::vector<FPGATrackSimTrack>& tracks,
const
FPGATrackSimTrackPars
&
min
,
const
FPGATrackSimTrackPars
&
max
) {
87
// elaborate the next event
88
if
(!
m_fitFromRoad
||
m_do2ndStage
)
ATH_CHECK
(
setRoadSectors
(roads));
// we do not need to set sectors in this case
89
int
status =
m_tfpobj
->fitTracks(roads,tracks);
90
if
(status !=
FITTRACKS_OK
)
return
StatusCode::FAILURE;
91
92
// Make sure none of our track parameters go outside the appropriate boundary
93
for
(
auto
& track : tracks) {
94
track.setQOverPt(std::clamp(
static_cast<
double
>
(track.getQOverPt()),
95
min
[
FPGATrackSimTrackPars::IHIP
],
max
[
FPGATrackSimTrackPars::IHIP
]));
96
track.setEta(std::clamp(
static_cast<
double
>
(track.getEta()),
97
min
[
FPGATrackSimTrackPars::IETA
],
max
[
FPGATrackSimTrackPars::IETA
]));
98
track.setPhi(std::clamp(
static_cast<
double
>
(track.getPhi()),
99
min
[
FPGATrackSimTrackPars::IPHI
],
max
[
FPGATrackSimTrackPars::IPHI
]));
100
track.setD0(std::clamp(
static_cast<
double
>
(track.getD0()),
101
min
[
FPGATrackSimTrackPars::ID0
],
max
[
FPGATrackSimTrackPars::ID0
]));
102
track.setZ0(std::clamp(
static_cast<
double
>
(track.getZ0()),
103
min
[
FPGATrackSimTrackPars::IZ0
],
max
[
FPGATrackSimTrackPars::IZ0
]));
104
}
105
106
if
(msgLvl(MSG::DEBUG))
107
{
108
ATH_MSG_DEBUG
(
"getTracks() returning "
<< tracks.size() <<
" tracks:"
);
109
for
(
auto
& t : tracks)
110
ATH_MSG_DEBUG
(
"\tchi2 = "
<< t.getChi2() <<
" and phi = "
<< t.getPhi()
111
<<
" and eta = "
<< t.getEta() <<
" and d0 = "
<< t.getD0()
112
<<
" and z0 = "
<< t.getZ0() <<
"and pt = "
<< t.getPt());
113
}
114
115
return
StatusCode::SUCCESS;
116
}
117
118
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
119
StatusCode
FPGATrackSimTrackFitterTool::getMissingHitsCheckTracks
(std::vector<FPGATrackSimTrack>& tracks_guessed)
120
{
121
// only call this after we first fit the tracks!
122
tracks_guessed =
m_tfpobj
->getMissingHitsCheckTracks();
123
return
StatusCode::SUCCESS;
124
}
125
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition
AthMsgStreamMacros.h:32
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
FPGATrackSimPlaneMap.h
Maps physical layers to logical layers.
FPGATrackSimRegionMap.h
Maps ITK module indices to FPGATrackSim regions.
FPGATrackSimTrackFitterTool.h
FITTRACKS_OK
#define FITTRACKS_OK
Definition
FPGATrackSimTypes.h:15
TrackCorrType
TrackCorrType
Definition
FPGATrackSimTypes.h:37
min
#define min(a, b)
Definition
cfImp.cxx:40
max
#define max(a, b)
Definition
cfImp.cxx:41
FPGATrackSimFitConstantBank
Definition
FPGATrackSimFitConstantBank.h:24
FPGATrackSimTrackFitterTool::m_doDeltaGPhis
Gaudi::Property< bool > m_doDeltaGPhis
Definition
FPGATrackSimTrackFitterTool.h:54
FPGATrackSimTrackFitterTool::m_chi2dof_recovery_max
Gaudi::Property< int > m_chi2dof_recovery_max
Definition
FPGATrackSimTrackFitterTool.h:49
FPGATrackSimTrackFitterTool::m_noRecoveryNHits
Gaudi::Property< int > m_noRecoveryNHits
Definition
FPGATrackSimTrackFitterTool.h:52
FPGATrackSimTrackFitterTool::m_doMajority
Gaudi::Property< int > m_doMajority
Definition
FPGATrackSimTrackFitterTool.h:50
FPGATrackSimTrackFitterTool::m_fitFromRoad
Gaudi::Property< bool > m_fitFromRoad
Definition
FPGATrackSimTrackFitterTool.h:57
FPGATrackSimTrackFitterTool::m_doMissingHitsChecks
Gaudi::Property< bool > m_doMissingHitsChecks
Definition
FPGATrackSimTrackFitterTool.h:55
FPGATrackSimTrackFitterTool::m_idealCoordFitType
Gaudi::Property< int > m_idealCoordFitType
Definition
FPGATrackSimTrackFitterTool.h:56
FPGATrackSimTrackFitterTool::FPGATrackSimTrackFitterTool
FPGATrackSimTrackFitterTool(const std::string &, const std::string &, const IInterface *)
Definition
FPGATrackSimTrackFitterTool.cxx:14
FPGATrackSimTrackFitterTool::m_tfpobj
std::unique_ptr< TrackFitter > m_tfpobj
Definition
FPGATrackSimTrackFitterTool.h:46
FPGATrackSimTrackFitterTool::m_chi2dof_recovery_min
Gaudi::Property< int > m_chi2dof_recovery_min
Definition
FPGATrackSimTrackFitterTool.h:48
FPGATrackSimTrackFitterTool::getTracks
StatusCode getTracks(std::vector< FPGATrackSimRoad > &roads, std::vector< FPGATrackSimTrack > &tracks, const FPGATrackSimTrackPars &min, const FPGATrackSimTrackPars &max)
Definition
FPGATrackSimTrackFitterTool.cxx:86
FPGATrackSimTrackFitterTool::initialize
StatusCode initialize() override
Definition
FPGATrackSimTrackFitterTool.cxx:23
FPGATrackSimTrackFitterTool::m_guessHits
Gaudi::Property< bool > m_guessHits
Definition
FPGATrackSimTrackFitterTool.h:53
FPGATrackSimTrackFitterTool::getMissingHitsCheckTracks
StatusCode getMissingHitsCheckTracks(std::vector< FPGATrackSimTrack > &tracks_guessed)
Definition
FPGATrackSimTrackFitterTool.cxx:119
FPGATrackSimTrackPars
Definition
FPGATrackSimTrackPars.h:22
FPGATrackSimTrackPars::IHIP
@ IHIP
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::ID0
@ ID0
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::IETA
@ IETA
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::IPHI
@ IPHI
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::IZ0
@ IZ0
Definition
FPGATrackSimTrackPars.h:49
FPGATrackSimTrackingToolBase::m_useSpacePoints
Gaudi::Property< bool > m_useSpacePoints
Definition
FPGATrackSimTrackingToolBase.h:36
FPGATrackSimTrackingToolBase::m_FPGATrackSimBank
ServiceHandle< IFPGATrackSimBankSvc > m_FPGATrackSimBank
Definition
FPGATrackSimTrackingToolBase.h:30
FPGATrackSimTrackingToolBase::m_spRoadFilterTool
ToolHandle< IFPGATrackSimRoadFilterTool > m_spRoadFilterTool
Definition
FPGATrackSimTrackingToolBase.h:32
FPGATrackSimTrackingToolBase::m_do2ndStage
Gaudi::Property< bool > m_do2ndStage
Definition
FPGATrackSimTrackingToolBase.h:40
FPGATrackSimTrackingToolBase::m_FPGATrackSimMapping
ServiceHandle< IFPGATrackSimMappingSvc > m_FPGATrackSimMapping
Definition
FPGATrackSimTrackingToolBase.h:29
FPGATrackSimTrackingToolBase::setRoadSectors
StatusCode setRoadSectors(std::vector< FPGATrackSimRoad > &roads)
Definition
FPGATrackSimTrackingToolBase.cxx:11
FPGATrackSimTrackingToolBase::FPGATrackSimTrackingToolBase
FPGATrackSimTrackingToolBase(const std::string &type, const std::string &name, const IInterface *parent)
Definition
FPGATrackSimTrackingToolBase.cxx:6
TrackFitter
Definition
TrackFitter.h:26
type
msg
MsgStream & msg
Definition
testRead.cxx:32
Generated on
for ATLAS Offline Software by
1.17.0