ATLAS Offline Software
FPGATrackSimFitConstantBank.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 #ifndef FPGATrackSimFITCONSTANTBANK_H
4 #define FPGATrackSimFITCONSTANTBANK_H
5 
6 #include <Eigen/StdVector>
7 // cppcheck-suppress unknownMacro
8 EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(Eigen::MatrixXf)
9 #include <Eigen/Core>
10 #include <Eigen/LU>
11 
12 #include <bitset>
13 #include <iomanip>
14 #include <fstream>
15 
19 
20 class FPGATrackSimTrack;
21 
22 
24 {
25  public:
26 
27  // missing plane -1 means we guess hits, we don't have separate banks for a missing plane
28  FPGATrackSimFitConstantBank(FPGATrackSimPlaneMap const * pmap, int ncoords, std::string const & fname, bool isFirstStage, float phishift, int missingPlane = -1);
29 
31  // Simple Getters
32 
33  int getBankID() const { return m_bankID; }
34  int getNConstr() const { return m_nconstr; }
35  int getNCoords() const { return m_ncoords; }
36  int getNPars() const { return m_npars; }
37  int getNSectors() const { return m_nsectors; }
38  int getMissingPlane() const { return m_missingPlane; }
39 
40 
41  bool getIsGood(sector_t sector) const { return m_sector_good[sector]; }
42  float getFitConst(int isec, int ipar) const { return m_fit_const(isec, ipar); }
43  float getFitPar(int isec, int ipar, int icoord) const { return m_fit_pars(isec, ipar, icoord); }
44  float getKaverage(int isec, int iconstr ) const { return m_kaverage(isec, iconstr); }
45  float getKernel(int isec, int iconstr, int icoord) const { return m_kernel(isec, iconstr, icoord); }
46 
48  // Main Interface
49 
50  bool linfit(sector_t sector, FPGATrackSimTrack & track, bool isSecondStage) const;
51  void linfit_chisq(sector_t sector, FPGATrackSimTrack &trk) const;
52  void linfit_pars_eval(sector_t sector, FPGATrackSimTrack &trk) const;
53  int missing_point_guess(sector_t sector, FPGATrackSimTrack &track, bool isFirstStage, bool doExtrapolation) const;
54 
55  void invlinfit(sector_t sector, FPGATrackSimTrack &track, double const *constr) const;
57  void setPhiShift(float v) {m_phiShift = v;}
58 
59  private:
60 
61  FPGATrackSimPlaneMap const * m_pmap = nullptr;
62 
64  // Configuration
65 
66  int m_bankID; // ID of the related pattern bank
67  int m_nsectors; // number of sectors in this bank
68  int m_npars = 0; // numbers of parameters
69  int m_ncoords; // number of coordinates used in the linear fit
70  int m_nconstr; // number of constraints: m_ncoords-m_npars
71  int m_npixcy; // number of 2d coordinates
72  float m_phiShift; // amount to shift phi of hits
73  int m_missingPlane; // plane that is missing
74 // bool m_isFirstStage; // is this a first stage fit?
75  bool m_isIdealCoordFit; // fitting for ideal coordinates? by default always true for now
76 
78  // Data
79 
80  std::vector<int> m_missid; // ids of the missing coordinates, [ncoords]
81 
82  // these are what we read in
83  // they are also used in the inverse function since that is not for the hardware but for bank generation
84  std::vector<bool> m_sector_good; //[m_nsectors] false if all constants are 0
85  vector3D<float> m_fit_pars; //[m_nsectors][m_npars][m_ncoords] fit parameters
86  vector2D<float> m_fit_const; //[m_nsectors][m_npars] parameter offset in this sector
87  vector3D<float> m_kernel; //[m_nsectors][m_nconstr][m_ncoords] covariance matrix
88  vector2D<float> m_kaverage; //[m_nsectors][m_nconstr]
89 
90  vector2D<float> m_maj_a; // offset for missing coordinate
91  vector3D<float> m_maj_kk; // for majority fits
92  vector3D<float> m_maj_invkk; // for majority inverse
93 
94  std::vector<Eigen::MatrixXf, Eigen::aligned_allocator<Eigen::MatrixXf>> m_invfit_consts;
95 
96  vector2D<int> m_WCs; //[m_nsectors][m_ncoords] which coordinates are WCs
97 
98 
100  // Helper Functions
101 
102  void readHeader(std::ifstream & geocfile);
103  void readSectorInfo(std::ifstream & geocfile);
104  void calculateMajority();
105  void prepareInvFitConstants();
106 
107 };
108 
109 
110 #endif // FPGATrackSimFITCONSTANTBANK_H
FPGATrackSimFitConstantBank::readSectorInfo
void readSectorInfo(std::ifstream &geocfile)
Definition: FPGATrackSimFitConstantBank.cxx:104
FPGATrackSimTrack
Definition: FPGATrackSimTrack.h:18
FPGATrackSimPlaneMap.h
Maps physical layers to logical layers.
FPGATrackSimFitConstantBank::m_kernel
vector3D< float > m_kernel
Definition: FPGATrackSimFitConstantBank.h:87
FPGATrackSimFitConstantBank::invlinfit
void invlinfit(sector_t sector, FPGATrackSimTrack &track, double const *constr) const
This method uses the track parameters and additional constraints to use the constants to calculate th...
Definition: FPGATrackSimFitConstantBank.cxx:548
FPGATrackSimFitConstantBank::readHeader
void readHeader(std::ifstream &geocfile)
Definition: FPGATrackSimFitConstantBank.cxx:60
FPGATrackSimFitConstantBank::getNCoords
int getNCoords() const
Definition: FPGATrackSimFitConstantBank.h:35
FPGATrackSimFitConstantBank::m_maj_a
vector2D< float > m_maj_a
Definition: FPGATrackSimFitConstantBank.h:90
FPGATrackSimFitConstantBank::m_fit_const
vector2D< float > m_fit_const
Definition: FPGATrackSimFitConstantBank.h:86
FPGATrackSimFitConstantBank::m_missingPlane
int m_missingPlane
Definition: FPGATrackSimFitConstantBank.h:73
FPGATrackSimFitConstantBank::m_nconstr
int m_nconstr
Definition: FPGATrackSimFitConstantBank.h:70
FPGATrackSimFitConstantBank::m_fit_pars
vector3D< float > m_fit_pars
Definition: FPGATrackSimFitConstantBank.h:85
FPGATrackSimFitConstantBank::m_nsectors
int m_nsectors
Definition: FPGATrackSimFitConstantBank.h:67
FPGATrackSimFitConstantBank::m_ncoords
int m_ncoords
Definition: FPGATrackSimFitConstantBank.h:69
FPGATrackSimFitConstantBank::FPGATrackSimFitConstantBank
FPGATrackSimFitConstantBank(FPGATrackSimPlaneMap const *pmap, int ncoords, std::string const &fname, bool isFirstStage, float phishift, int missingPlane=-1)
Definition: FPGATrackSimFitConstantBank.cxx:22
FPGATrackSimFitConstantBank::m_missid
std::vector< int > m_missid
Definition: FPGATrackSimFitConstantBank.h:80
FPGATrackSimFitConstantBank::m_npixcy
int m_npixcy
Definition: FPGATrackSimFitConstantBank.h:71
FPGATrackSimFitConstantBank::setPhiShift
void setPhiShift(float v)
Definition: FPGATrackSimFitConstantBank.h:57
FPGATrackSimVectors.h
Defines several vector wrappers for homogenous multi-dimensional vectors, declared as 1D arrays for l...
vector2D< float >
FPGATrackSimFitConstantBank::linfit_chisq
void linfit_chisq(sector_t sector, FPGATrackSimTrack &trk) const
Definition: FPGATrackSimFitConstantBank.cxx:469
FPGATrackSimFitConstantBank::getFitConst
float getFitConst(int isec, int ipar) const
Definition: FPGATrackSimFitConstantBank.h:42
FPGATrackSimFitConstantBank::getKernel
float getKernel(int isec, int iconstr, int icoord) const
Definition: FPGATrackSimFitConstantBank.h:45
AthMessaging
Class to provide easy MsgStream access and capabilities.
Definition: AthMessaging.h:55
FPGATrackSimFitConstantBank::getBankID
int getBankID() const
Definition: FPGATrackSimFitConstantBank.h:33
FPGATrackSimFitConstantBank::m_npars
int m_npars
Definition: FPGATrackSimFitConstantBank.h:68
FPGATrackSimPlaneMap
Definition: FPGATrackSimPlaneMap.h:62
sector_t
int32_t sector_t
Definition: FPGATrackSimTypes.h:21
FPGATrackSimFitConstantBank::m_maj_kk
vector3D< float > m_maj_kk
Definition: FPGATrackSimFitConstantBank.h:91
FPGATrackSimFitConstantBank::prepareInvFitConstants
void prepareInvFitConstants()
Definition: FPGATrackSimFitConstantBank.cxx:211
FPGATrackSimFitConstantBank::linfit_pars_eval
void linfit_pars_eval(sector_t sector, FPGATrackSimTrack &trk) const
Definition: FPGATrackSimFitConstantBank.cxx:507
FPGATrackSimFitConstantBank
Definition: FPGATrackSimFitConstantBank.h:24
FPGATrackSimFitConstantBank::missing_point_guess
int missing_point_guess(sector_t sector, FPGATrackSimTrack &track, bool isFirstStage, bool doExtrapolation) const
Definition: FPGATrackSimFitConstantBank.cxx:327
FPGATrackSimFitConstantBank::m_phiShift
float m_phiShift
Definition: FPGATrackSimFitConstantBank.h:72
FPGATrackSimFitConstantBank::m_pmap
FPGATrackSimPlaneMap const * m_pmap
Definition: FPGATrackSimFitConstantBank.h:61
FPGATrackSimFitConstantBank::getIsGood
bool getIsGood(sector_t sector) const
Definition: FPGATrackSimFitConstantBank.h:41
FPGATrackSimFitConstantBank::linfit
bool linfit(sector_t sector, FPGATrackSimTrack &track, bool isSecondStage) const
Definition: FPGATrackSimFitConstantBank.cxx:304
FPGATrackSimFitConstantBank::m_invfit_consts
std::vector< Eigen::MatrixXf, Eigen::aligned_allocator< Eigen::MatrixXf > > m_invfit_consts
Definition: FPGATrackSimFitConstantBank.h:94
python.AthDsoLogger.fname
string fname
Definition: AthDsoLogger.py:66
python.PyAthena.v
v
Definition: PyAthena.py:154
FPGATrackSimFitConstantBank::setIdealCoordFit
void setIdealCoordFit(bool v)
Definition: FPGATrackSimFitConstantBank.h:56
FPGATrackSimFitConstantBank::m_sector_good
std::vector< bool > m_sector_good
Definition: FPGATrackSimFitConstantBank.h:84
FPGATrackSimFitConstantBank::getNSectors
int getNSectors() const
Definition: FPGATrackSimFitConstantBank.h:37
FPGATrackSimFitConstantBank::calculateMajority
void calculateMajority()
Definition: FPGATrackSimFitConstantBank.cxx:169
FPGATrackSimFitConstantBank::m_WCs
vector2D< int > m_WCs
Definition: FPGATrackSimFitConstantBank.h:96
AthMessaging.h
FPGATrackSimFitConstantBank::m_bankID
int m_bankID
Definition: FPGATrackSimFitConstantBank.h:66
FPGATrackSimFitConstantBank::getMissingPlane
int getMissingPlane() const
Definition: FPGATrackSimFitConstantBank.h:38
FPGATrackSimFitConstantBank::getFitPar
float getFitPar(int isec, int ipar, int icoord) const
Definition: FPGATrackSimFitConstantBank.h:43
vector3D< float >
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
FPGATrackSimFitConstantBank::m_maj_invkk
vector3D< float > m_maj_invkk
Definition: FPGATrackSimFitConstantBank.h:92
FPGATrackSimFitConstantBank::m_kaverage
vector2D< float > m_kaverage
Definition: FPGATrackSimFitConstantBank.h:88
FPGATrackSimFitConstantBank::m_isIdealCoordFit
bool m_isIdealCoordFit
Definition: FPGATrackSimFitConstantBank.h:75
FPGATrackSimFitConstantBank::getKaverage
float getKaverage(int isec, int iconstr) const
Definition: FPGATrackSimFitConstantBank.h:44
FPGATrackSimFitConstantBank::getNConstr
int getNConstr() const
Definition: FPGATrackSimFitConstantBank.h:34
FPGATrackSimFitConstantBank::getNPars
int getNPars() const
Definition: FPGATrackSimFitConstantBank.h:36