ATLAS Offline Software
FPGATrackSimTrackFitterTool.cxx
Go to the documentation of this file.
1 // Copyright (C) 2002-2023 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 
14 FPGATrackSimTrackFitterTool::FPGATrackSimTrackFitterTool(const std::string& algname, const std::string& name, const IInterface *ifc) :
16 {
17 }
18 
19 
20 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
22 {
23  ATH_MSG_DEBUG("FPGATrackSimTrackFitterTool::initialize()");
24 
25  ATH_CHECK(m_FPGATrackSimMapping.retrieve());
26  ATH_CHECK(m_FPGATrackSimBank.retrieve());
27 
28  const FPGATrackSimFitConstantBank* nominalbank;
29  std::vector<const FPGATrackSimFitConstantBank*> bankvec;
30 
31  if(!m_do2ndStage){
32  nominalbank = m_FPGATrackSimBank->FitConstantBank_1st();
33  if (!m_guessHits) {
34  for (unsigned int iplane = 0; iplane < m_FPGATrackSimMapping->PlaneMap_1st()->getNLogiLayers(); iplane++) {
35  const FPGATrackSimFitConstantBank* bank = m_FPGATrackSimBank->FitConstantBank_1st(iplane);
36  bankvec.push_back(bank);
37  }
38  }
39  }
40  else {
41  nominalbank = m_FPGATrackSimBank->FitConstantBank_2nd();
42  if (!m_guessHits) {
43  for (unsigned int iplane = 0; iplane < m_FPGATrackSimMapping->PlaneMap_2nd()->getNLogiLayers(); iplane++) {
44  const FPGATrackSimFitConstantBank* bank = m_FPGATrackSimBank->FitConstantBank_2nd(iplane);
45  bankvec.push_back(bank);
46  }
47  }
48  }
49 
50  MsgStream m(msgSvc(), "TrackFitter");
51  m.setLevel(msg().level());
52  m_tfpobj = std::unique_ptr<TrackFitter>(new TrackFitter(nominalbank, bankvec, m_guessHits));
53 
54  if(!m_do2ndStage) {
55  m_tfpobj->setPlaneMap(m_FPGATrackSimMapping->PlaneMap_1st());
56  m_tfpobj->setRegionMap(m_FPGATrackSimMapping->RegionMap_1st());
57  } else {
58  m_tfpobj->setPlaneMap(m_FPGATrackSimMapping->PlaneMap_2nd());
59  m_tfpobj->setRegionMap(m_FPGATrackSimMapping->RegionMap_2nd());
60  }
61 
62  // set parameter object to TrackFitter
63  m_tfpobj->setChi2DofRecoveryMin(m_chi2dof_recovery_min);
64  m_tfpobj->setChi2DofRecoveryMax(m_chi2dof_recovery_max);
65 
66  m_tfpobj->setDoMajority(m_doMajority);
67 
68  m_tfpobj->setRequireFirst(0);
69  m_tfpobj->setDoSecondStage(m_do2ndStage);
70 
71  m_tfpobj->setNorecoveryNhits(m_noRecoveryNHits);
72 
73  if (!m_guessHits && m_doMissingHitsChecks) ATH_MSG_WARNING("We can't do missing hits check if we don't guess hits");
74  m_tfpobj->setDoMissingHitsCheck(m_doMissingHitsChecks);
75  m_tfpobj->setIdealCoordFitType(static_cast<TrackCorrType>(m_idealCoordFitType.value()));
76  m_tfpobj->setDoDeltaGPhis(m_doDeltaGPhis);
77 
78  return StatusCode::SUCCESS;
79 }
80 
81 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
82 StatusCode FPGATrackSimTrackFitterTool::getTracks(const std::vector<FPGATrackSimRoad*>& roads, std::vector<FPGATrackSimTrack>& tracks) {
83  // elaborate the next event
84 
85  int status = m_tfpobj->fitTracks(roads,tracks);
86  if (status != FITTRACKS_OK) return StatusCode::FAILURE;
87 
88  if (msgLvl(MSG::DEBUG))
89  {
90  ATH_MSG_DEBUG("getTracks() returning " << tracks.size() << " tracks:");
91  for (auto & t : tracks)
92  ATH_MSG_DEBUG("\tchi2 = " << t.getChi2() << " and phi = " << t.getPhi()
93  << " and eta = " << t.getEta() << " and d0 = " << t.getD0()
94  << " and z0 = " << t.getZ0() << "and pt = " << t.getPt());
95  }
96 
97  return StatusCode::SUCCESS;
98 }
99 
100 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
101 StatusCode FPGATrackSimTrackFitterTool::getMissingHitsCheckTracks(std::vector<FPGATrackSimTrack>& tracks_guessed)
102 {
103  // only call this after we first fit the tracks!
104  tracks_guessed = m_tfpobj->getMissingHitsCheckTracks();
105  return StatusCode::SUCCESS;
106 }
107 
FPGATrackSimTrackFitterTool::m_FPGATrackSimBank
ServiceHandle< IFPGATrackSimBankSvc > m_FPGATrackSimBank
Definition: FPGATrackSimTrackFitterTool.h:49
getMenu.algname
algname
Definition: getMenu.py:53
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
FPGATrackSimPlaneMap.h
Maps physical layers to logical layers.
FPGATrackSimTrackFitterTool::m_idealCoordFitType
Gaudi::Property< int > m_idealCoordFitType
Definition: FPGATrackSimTrackFitterTool.h:60
xAOD::TrackFitter
TrackFitter
Enums to identify who created this track and which properties does it have.
Definition: TrackingPrimitives.h:39
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
FPGATrackSimTrackFitterTool::m_guessHits
Gaudi::Property< bool > m_guessHits
Definition: FPGATrackSimTrackFitterTool.h:57
FPGATrackSimTrackFitterTool::m_chi2dof_recovery_max
Gaudi::Property< int > m_chi2dof_recovery_max
Definition: FPGATrackSimTrackFitterTool.h:52
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
FPGATrackSimTrackFitterTool::m_tfpobj
std::unique_ptr< TrackFitter > m_tfpobj
Definition: FPGATrackSimTrackFitterTool.h:46
FPGATrackSimTrackFitterTool::m_do2ndStage
Gaudi::Property< bool > m_do2ndStage
Definition: FPGATrackSimTrackFitterTool.h:53
FITTRACKS_OK
#define FITTRACKS_OK
Definition: FPGATrackSimTypes.h:15
FPGATrackSimTrackFitterTool::getTracks
StatusCode getTracks(std::vector< FPGATrackSimRoad * > const &roads, std::vector< FPGATrackSimTrack > &tracks)
Definition: FPGATrackSimTrackFitterTool.cxx:82
python.iconfTool.models.loaders.level
level
Definition: loaders.py:20
FPGATrackSimRegionMap.h
Maps ITK module indices to FPGATrackSim regions.
StdJOSetup.msgSvc
msgSvc
Provide convenience handles for various services.
Definition: StdJOSetup.py:36
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
FPGATrackSimTrackFitterTool::m_chi2dof_recovery_min
Gaudi::Property< int > m_chi2dof_recovery_min
Definition: FPGATrackSimTrackFitterTool.h:51
FPGATrackSimTrackFitterTool::m_doMissingHitsChecks
Gaudi::Property< bool > m_doMissingHitsChecks
Definition: FPGATrackSimTrackFitterTool.h:59
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
FPGATrackSimTrackFitterTool::initialize
StatusCode initialize() override
Definition: FPGATrackSimTrackFitterTool.cxx:21
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
FPGATrackSimTrackFitterTool::m_FPGATrackSimMapping
ServiceHandle< IFPGATrackSimMappingSvc > m_FPGATrackSimMapping
Definition: FPGATrackSimTrackFitterTool.h:48
FPGATrackSimFitConstantBank
Definition: FPGATrackSimFitConstantBank.h:24
FPGATrackSimTrackFitterTool::m_doMajority
Gaudi::Property< int > m_doMajority
Definition: FPGATrackSimTrackFitterTool.h:54
FPGATrackSimTrackFitterTool::m_noRecoveryNHits
Gaudi::Property< int > m_noRecoveryNHits
Definition: FPGATrackSimTrackFitterTool.h:56
FPGATrackSimTrackFitterTool::getMissingHitsCheckTracks
StatusCode getMissingHitsCheckTracks(std::vector< FPGATrackSimTrack > &tracks_guessed)
Definition: FPGATrackSimTrackFitterTool.cxx:101
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DEBUG
#define DEBUG
Definition: page_access.h:11
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
FPGATrackSimTrackFitterTool::FPGATrackSimTrackFitterTool
FPGATrackSimTrackFitterTool(const std::string &, const std::string &, const IInterface *)
Definition: FPGATrackSimTrackFitterTool.cxx:14
merge.status
status
Definition: merge.py:17
TrackCorrType
TrackCorrType
Definition: FPGATrackSimTypes.h:37
AthAlgTool
Definition: AthAlgTool.h:26
FPGATrackSimTrackFitterTool.h
FPGATrackSimTrackFitterTool::m_doDeltaGPhis
Gaudi::Property< bool > m_doDeltaGPhis
Definition: FPGATrackSimTrackFitterTool.h:58