ATLAS Offline Software
Loading...
Searching...
No Matches
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
8EIGEN_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
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();
106
107};
108
109
110#endif // FPGATrackSimFITCONSTANTBANK_H
Maps physical layers to logical layers.
int32_t sector_t
Defines several vector wrappers for homogenous multi-dimensional vectors, declared as 1D arrays for l...
AthMessaging(IMessageSvc *msgSvc, const std::string &name)
Constructor.
void linfit_pars_eval(sector_t sector, FPGATrackSimTrack &trk) const
bool getIsGood(sector_t sector) const
std::vector< Eigen::MatrixXf, Eigen::aligned_allocator< Eigen::MatrixXf > > m_invfit_consts
FPGATrackSimFitConstantBank(FPGATrackSimPlaneMap const *pmap, int ncoords, std::string const &fname, bool isFirstStage, float phishift, int missingPlane=-1)
void readHeader(std::ifstream &geocfile)
void linfit_chisq(sector_t sector, FPGATrackSimTrack &trk) const
float getKaverage(int isec, int iconstr) const
float getFitConst(int isec, int ipar) const
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...
float getKernel(int isec, int iconstr, int icoord) const
void readSectorInfo(std::ifstream &geocfile)
float getFitPar(int isec, int ipar, int icoord) const
FPGATrackSimPlaneMap const * m_pmap
bool linfit(sector_t sector, FPGATrackSimTrack &track, bool isSecondStage) const
int missing_point_guess(sector_t sector, FPGATrackSimTrack &track, bool isFirstStage, bool doExtrapolation) const