Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
FPGATrackSimBinUtil.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 
3 #ifndef FPGATrackSimBinUtil_H
4 #define FPGATrackSimBinUtil_H
5 
24 #include <array>
25 #include <fstream>
26 #include <map>
27 #include <string>
28 #include <vector>
29 
33 
34 
36 
37 //--------------------------------------------------------------------------------------------------
38 //
39 // These just makes ParSet and IdxSet types that have 5 double or unsigned int
40 // for the 5-track parameters. The point of the structs is that they are fixed
41 // to the right length and can be converted back and forth to std::vector
42 // through cast operators and constructors
43 //
44 //--------------------------------------------------------------------------------------------------
45 struct ParSet : public std::array<double, FPGATrackSimTrackPars::NPARS> {
47  ParSet(const std::vector<double> &val);
48  operator const std::vector<double>() const;
49 };
50 struct IdxSet : public std::array<unsigned, FPGATrackSimTrackPars::NPARS> {
52  IdxSet(const std::vector<unsigned> &val);
53  operator const std::vector<unsigned>() const;
54 };
55 
56 // invalid bin value, there is no way a true bin could be there
59 
60 
61 // Generic Utility for splitting in vector (e.g. idx or #bins 5-d vectors)
62 // into subvectors (e.g. idx for just the scan parameters). Technically, for
63 // a list of parameter indices (elems) gives the subvector of the invec with
64 // just those indices
65 std::vector<unsigned> subVec(const std::vector<unsigned> &elems,
66  const IdxSet &invec);
67 
68 // Opposite of above subVec, this sets the subvector
69 void setIdxSubVec(IdxSet &idx, const std::vector<unsigned> &subvecelems,
70  const std::vector<unsigned> &subvecidx);
71 
72 // Makes are set of parameters corresponding to the corners specified by
73 // scanpars of the bin specified by idx e.g. if scan pars is (pT,d0) then the
74 // set is (low pT,low d0), (low pT, high d0), (high pT,low d0), (high pT, high
75 // d0)
76 std::vector<IdxSet> makeVariationSet(const std::vector<unsigned> &scanpars,
77  const IdxSet &idx);
78 
79 // Class for writing const files formatted for firmware
80 struct StreamManager {
81  StreamManager(const std::string &setname) : m_setname(setname) {}
83  template <typename T> void writeVar(const std::string &var, T val);
84 private:
85  std::string m_setname;
86  std::map<std::string, std::fstream> m_map;
87 };
88 
89 // Stores hit plus the phi/etashift from the nominal bin center
90 struct StoredHit {
91  StoredHit(const std::shared_ptr<const FPGATrackSimHit>& hit) : hitptr(hit), phiShift(0), etaShift(0), layer(-1) {}
92  std::shared_ptr<const FPGATrackSimHit> hitptr;
93  double phiShift; // shift in r-phi plane as quantified by BinDesc
94  double etaShift; // shift in r-z plane as quantified by BinDesc
95  unsigned layer;
96  double rzrad() const;
98 };
99 std::ostream &operator<<(std::ostream &os, const StoredHit &hit);
100 
101 
102 //-------------------------------------------------------------------------------------------------------
103 //
104 // Geometry Helpers -- does basic helix calculations
105 //
106 //-------------------------------------------------------------------------------------------------------
108 {
109 public:
110  // This is the constant needed to relate hit phi to track phi due to curvature
111  static constexpr double CurvatureConstant = fpgatracksim::A;
112 
113  // standard eta to theta calculation
114  static double ThetaFromEta(double eta);
115 
116  // standard theta to eta calculation
117  static double EtaFromTheta(double theta);
118 
119  // find the expected z position from the radius and track parameters
120  static double zFromPars(double r, const FPGATrackSimTrackPars &pars);
121 
122  // find the expected z position from the radius and track parameters
123  static double phiFromPars(double r, const FPGATrackSimTrackPars &pars);
124 
125  // find the track phi that would be consistent with the other track parameters and the hit (r,phi)
126  static double parsToTrkPhi(const FPGATrackSimTrackPars &pars, FPGATrackSimHit const *hit);
127 };
128 
129 
130 }; // namespace FPGATrackSimBinUtil
131 
132 #endif // FPGATrackSimBinUtil_H
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
beamspotman.r
def r
Definition: beamspotman.py:676
beamspotnt.var
var
Definition: bin/beamspotnt.py:1394
FPGATrackSimBinUtil::StoredHit::hitptr
std::shared_ptr< const FPGATrackSimHit > hitptr
Definition: FPGATrackSimBinUtil.h:92
FPGATrackSimBinUtil::IdxSet::IdxSet
IdxSet(const std::vector< unsigned > &val)
Definition: FPGATrackSimBinUtil.cxx:30
FPGATrackSimBinUtil::StoredHit::StoredHit
StoredHit(const std::shared_ptr< const FPGATrackSimHit > &hit)
Definition: FPGATrackSimBinUtil.h:91
FPGATrackSimBinUtil::GeomHelpers
Definition: FPGATrackSimBinUtil.h:108
FPGATrackSimBinUtil::GeomHelpers::phiFromPars
static double phiFromPars(double r, const FPGATrackSimTrackPars &pars)
Definition: FPGATrackSimBinUtil.cxx:167
FPGATrackSimBinUtil::invalidBin
const IdxSet invalidBin
Definition: FPGATrackSimBinUtil.h:57
FPGATrackSimTrackPars
Definition: FPGATrackSimTrackPars.h:22
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
FPGATrackSimBinUtil::StoredHit::layer
unsigned layer
Definition: FPGATrackSimBinUtil.h:95
FPGATrackSimBinUtil::StreamManager::StreamManager
StreamManager(const std::string &setname)
Definition: FPGATrackSimBinUtil.h:81
FPGATrackSimBinUtil::operator<<
std::ostream & operator<<(std::ostream &os, const StoredHit &hit)
Definition: FPGATrackSimBinUtil.cxx:44
FPGATrackSimBinUtil::StoredHit::rzrad
double rzrad() const
Definition: FPGATrackSimBinUtil.cxx:52
FPGATrackSimBinUtil::subVec
std::vector< unsigned > subVec(const std::vector< unsigned > &elems, const IdxSet &invec)
Definition: FPGATrackSimBinUtil.cxx:60
FPGATrackSimConstants.h
FPGATrackSimBinUtil::StreamManager::m_setname
std::string m_setname
Definition: FPGATrackSimBinUtil.h:85
FPGATrackSimHit
Definition: FPGATrackSimHit.h:41
FPGATrackSimBinUtil::GeomHelpers::ThetaFromEta
static double ThetaFromEta(double eta)
Definition: FPGATrackSimBinUtil.cxx:146
FPGATrackSimBinUtil::GeomHelpers::CurvatureConstant
static constexpr double CurvatureConstant
Definition: FPGATrackSimBinUtil.h:111
FPGATrackSimBinUtil::StreamManager
Definition: FPGATrackSimBinUtil.h:80
FPGATrackSimBinUtil::ParSet
Definition: FPGATrackSimBinUtil.h:45
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:231
FPGATrackSimBinUtil::GeomHelpers::parsToTrkPhi
static double parsToTrkPhi(const FPGATrackSimTrackPars &pars, FPGATrackSimHit const *hit)
Definition: FPGATrackSimBinUtil.cxx:172
FPGATrackSimBinUtil::setIdxSubVec
void setIdxSubVec(IdxSet &idx, const std::vector< unsigned > &subvecelems, const std::vector< unsigned > &subvecidx)
Definition: FPGATrackSimBinUtil.cxx:69
lumiFormat.array
array
Definition: lumiFormat.py:91
FPGATrackSimBinUtil::StoredHit::invalidLayer
static const unsigned invalidLayer
Definition: FPGATrackSimBinUtil.h:97
FPGATrackSimBinUtil::GeomHelpers::EtaFromTheta
static double EtaFromTheta(double theta)
Definition: FPGATrackSimBinUtil.cxx:151
FPGATrackSimBinUtil::makeVariationSet
std::vector< IdxSet > makeVariationSet(const std::vector< unsigned > &scanpars, const IdxSet &idx)
Definition: FPGATrackSimBinUtil.cxx:92
FPGATrackSimBinUtil::StoredHit
Definition: FPGATrackSimBinUtil.h:90
FPGATrackSimHit.h
: FPGATrackSim-specific class to represent an hit in the detector.
FPGATrackSimBinUtil::StreamManager::~StreamManager
~StreamManager()
Definition: FPGATrackSimBinUtil.cxx:112
FPGATrackSimBinUtil::StreamManager::m_map
std::map< std::string, std::fstream > m_map
Definition: FPGATrackSimBinUtil.h:86
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
FPGATrackSimBinUtil::GeomHelpers::zFromPars
static double zFromPars(double r, const FPGATrackSimTrackPars &pars)
Definition: FPGATrackSimBinUtil.cxx:156
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
FPGATrackSimBinUtil::StreamManager::writeVar
void writeVar(const std::string &var, T val)
FPGATrackSimBinUtil::StoredHit::etaShift
double etaShift
Definition: FPGATrackSimBinUtil.h:94
FPGATrackSimBinUtil::StoredHit::phiShift
double phiShift
Definition: FPGATrackSimBinUtil.h:93
FPGATrackSimBinUtil::ParSet::ParSet
ParSet(const std::vector< double > &val)
Definition: FPGATrackSimBinUtil.cxx:19
FPGATrackSimBinUtil::IdxSet
Definition: FPGATrackSimBinUtil.h:50
FPGATrackSimTrackPars.h
Structs that store the 5 track parameters.
FPGATrackSimBinUtil
Definition: FPGATrackSimBinUtil.h:35