ATLAS Offline Software
Loading...
Searching...
No Matches
FPGATrackSimTrackFitterTool.cxx
Go to the documentation of this file.
1// Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
6
7#include "GaudiKernel/MsgStream.h"
8
9#include <sstream>
10#include <iostream>
11#include <fstream>
12
15 const std::string& name,
16 const IInterface* parent)
17 : FPGATrackSimTrackingToolBase(type, name, parent)
18{
19}
20
21
22// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
24{
25 ATH_MSG_DEBUG("FPGATrackSimTrackFitterTool::initialize()");
26
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// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
86StatusCode FPGATrackSimTrackFitterTool::getTracks(std::vector<std::shared_ptr<const FPGATrackSimRoad>>& roads, std::vector<FPGATrackSimTrack>& tracks, const FPGATrackSimTrackPars& min, const FPGATrackSimTrackPars& max) {
87 // elaborate the next event
88 if (!m_fitFromRoad) 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
95 double qopt = track.getQOverPt();
96 double eta = track.getEta();
97 double phi = track.getPhi();
98 double d0 = track.getD0();
99 double z0 = track.getZ0();
110
111 track.setQOverPt(qopt);
112 track.setEta(eta);
113 track.setPhi(phi);
114 track.setD0(d0);
115 track.setZ0(z0);
116 }
117
118 if (msgLvl(MSG::DEBUG))
119 {
120 ATH_MSG_DEBUG("getTracks() returning " << tracks.size() << " tracks:");
121 for (auto & t : tracks)
122 ATH_MSG_DEBUG("\tchi2 = " << t.getChi2() << " and phi = " << t.getPhi()
123 << " and eta = " << t.getEta() << " and d0 = " << t.getD0()
124 << " and z0 = " << t.getZ0() << "and pt = " << t.getPt());
125 }
126
127 return StatusCode::SUCCESS;
128}
129
130// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
131StatusCode FPGATrackSimTrackFitterTool::getMissingHitsCheckTracks(std::vector<FPGATrackSimTrack>& tracks_guessed)
132{
133 // only call this after we first fit the tracks!
134 tracks_guessed = m_tfpobj->getMissingHitsCheckTracks();
135 return StatusCode::SUCCESS;
136}
137
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Maps physical layers to logical layers.
Maps ITK module indices to FPGATrackSim regions.
#define FITTRACKS_OK
TrackCorrType
#define min(a, b)
Definition cfImp.cxx:40
#define max(a, b)
Definition cfImp.cxx:41
Gaudi::Property< int > m_chi2dof_recovery_max
Gaudi::Property< bool > m_doMissingHitsChecks
FPGATrackSimTrackFitterTool(const std::string &, const std::string &, const IInterface *)
std::unique_ptr< TrackFitter > m_tfpobj
StatusCode getTracks(std::vector< std::shared_ptr< const FPGATrackSimRoad > > &roads, std::vector< FPGATrackSimTrack > &tracks, const FPGATrackSimTrackPars &min, const FPGATrackSimTrackPars &max)
Gaudi::Property< int > m_chi2dof_recovery_min
StatusCode getMissingHitsCheckTracks(std::vector< FPGATrackSimTrack > &tracks_guessed)
ServiceHandle< IFPGATrackSimBankSvc > m_FPGATrackSimBank
ToolHandle< IFPGATrackSimRoadFilterTool > m_spRoadFilterTool
ServiceHandle< IFPGATrackSimMappingSvc > m_FPGATrackSimMapping
StatusCode setRoadSectors(std::vector< std::shared_ptr< const FPGATrackSimRoad > > &roads)
FPGATrackSimTrackingToolBase(const std::string &type, const std::string &name, const IInterface *parent)
MsgStream & msg
Definition testRead.cxx:32