Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
FPGATrackSimBinUtil.cxx
Go to the documentation of this file.
1 // Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
12 
13 
14 namespace FPGATrackSimBinUtil {
15 
16 // ----------------------------------------------------------------------------------------
17 // IdxSet and ParSet implementations
18 // ----------------------------------------------------------------------------------------
19 ParSet::ParSet(const std::vector<double> &val) {
20  if (val.size() != 5) {
21  throw std::invalid_argument(
22  "Not enough parameters in ParSet initialization");
23  }
24  std::copy(val.begin(), val.end(), this->begin());
25 }
26 ParSet::operator const std::vector<double>() const {
27  return std::vector<double>(this->begin(), this->end());
28 }
29 
30 IdxSet::IdxSet(const std::vector<unsigned> &val) {
31  if (val.size() != 5) {
32  throw std::invalid_argument(
33  "Not enough parameters in IdxSet initialization");
34  }
35  std::copy(val.begin(), val.end(), this->begin());
36 }
37 IdxSet::operator const std::vector<unsigned>() const {
38  return std::vector<unsigned>(this->begin(), this->end());
39 }
40 
41 // ----------------------------------------------------------------------------------------
42 // StoredHit implementations
43 // ----------------------------------------------------------------------------------------
44 std::ostream& operator<<(std::ostream &os, const StoredHit &hit)
45 {
46  os << "lyr: " << hit.layer << " ";
47  os << "(" << hit.hitptr->getR() << ", " << hit.hitptr->getGPhi() << ", " << hit.hitptr->getZ() << ") ";
48  os << "[" << hit.phiShift << ", " << hit.etaShift << "]";
49  return os;
50 }
51 
52 double StoredHit::rzrad() const {
53  return sqrt(hitptr->getR()*hitptr->getR()+hitptr->getZ()*hitptr->getZ());
54 }
55 
56 
57 // ----------------------------------------------------------------------------------------
58 // SubVec implementations
59 // ----------------------------------------------------------------------------------------
60 std::vector<unsigned> subVec(const std::vector<unsigned> &elems,
61  const IdxSet &invec) {
62  std::vector<unsigned> retv;
63  for (auto elem : elems) {
64  retv.push_back(invec[elem]);
65  }
66  return retv;
67 }
68 
69 void setIdxSubVec(IdxSet &idx, const std::vector<unsigned> &subvecelems,
70  const std::vector<unsigned> &subvecidx) {
71 
72  if (subvecelems.size() != subvecidx.size()) {
73  throw std::invalid_argument(
74  "Setting FPGATrackSimGenScanBinningBase::setIdxSubVec with mismatched "
75  "sizes");
76  }
77 
78  for (unsigned i = 0; i < subvecelems.size(); i++) {
79  if (subvecelems[i] >= idx.size()) {
80  throw std::invalid_argument(
81  "FPGATrackSimGenScanBinningBase::setIdxSubVec input out of range");
82  }
83  idx[subvecelems[i]] = subvecidx[i];
84  }
85 }
86 
87 // ----------------------------------------------------------------------------------------
88 // makeVariationSet implementation
89 // ----------------------------------------------------------------------------------------
90 // This gives a list tracks parameters for the corners of bin of dimensions
91 // scanpars.size()
92 std::vector<IdxSet> makeVariationSet(const std::vector<unsigned> &scanpars,
93  const IdxSet &idx) {
94  std::vector<IdxSet> retv;
95  for (unsigned corners = 0; corners < unsigned((1 << scanpars.size()));
96  corners++) {
97  IdxSet newidx = idx;
98  int scanDimCnt = 0;
99  for (auto &par : scanpars) {
100  newidx[par] = idx[par] + ((corners >> scanDimCnt) & 1);
101  scanDimCnt++;
102  }
103  retv.push_back(newidx);
104  }
105  return retv;
106 }
107 
108 // ----------------------------------------------------------------------------------------
109 // StreamManager implementation
110 // ----------------------------------------------------------------------------------------
111 // Class for writing const files formatted for firmware
113  for (auto &f : m_map) {
114  f.second << "\n";
115  }
116 }
117 
118 // FW constants writer
119 std::ostream &operator<<(std::ostream &os, const std::vector<unsigned>& idx) {
120  bool first = true;
121  for (auto &val : idx) {
122  if (!first)
123  os << ",";
124  os << val;
125  first = false;
126  }
127  return os;
128 }
129 
130 template <typename T>
131 void StreamManager::StreamManager::writeVar(const std::string &var, T val) {
132  auto emplace_result = m_map.try_emplace(
133  var, m_setname + "_" + var + "_const.txt", std::ios_base::out);
134  if (!emplace_result.second) {
135  emplace_result.first->second << ",\n";
136  }
137  emplace_result.first->second << val;
138 }
139 
140 
141 //-------------------------------------------------------------------------------------------------------
142 //
143 // Geometry Helpers -- does basic helix calculations
144 //
145 //-------------------------------------------------------------------------------------------------------
146 double GeomHelpers::ThetaFromEta(double eta)
147 {
148  return 2.0 * atan(exp(-1.0 * eta));
149 }
150 
151 double GeomHelpers::EtaFromTheta(double theta)
152 {
153  return -log(tan(theta / 2.0));
154 }
155 
157 {
158  double theta = ThetaFromEta(pars.eta);
159  double zhit = pars.z0 + r / tan(theta);
160  if (std::abs(pars.qOverPt) > 0)
161  {
162  zhit = pars.z0 + 1.0 / tan(theta) * asin(r * CurvatureConstant * pars.qOverPt) / (CurvatureConstant * pars.qOverPt);
163  }
164  return zhit;
165 }
166 
168  double phi_hit = xAOD::P4Helpers::deltaPhi(pars.phi,asin(r * CurvatureConstant * pars.qOverPt - pars.d0 / r));
169  return phi_hit;
170 }
171 
173 {
174  double r = hit->getR(); // mm
175  double phi_hit = hit->getGPhi(); // radians
176  double phi_trk = xAOD::P4Helpers::deltaPhi(phi_hit,asin(r * CurvatureConstant * pars.qOverPt - pars.d0 / r));
177  return phi_trk;
178 }
179 
180 
181 
182 } // namespace FPGATrackSimBinUtil
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::GeomHelpers::phiFromPars
static double phiFromPars(double r, const FPGATrackSimTrackPars &pars)
Definition: FPGATrackSimBinUtil.cxx:167
FPGATrackSimTrackPars
Definition: FPGATrackSimTrackPars.h:22
xAODP4Helpers.h
FPGATrackSimBinUtil::StoredHit::layer
unsigned layer
Definition: FPGATrackSimBinUtil.h:95
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
FPGATrackSimBinUtil::operator<<
std::ostream & operator<<(std::ostream &os, const StoredHit &hit)
Definition: FPGATrackSimBinUtil.cxx:44
xAOD::P4Helpers::deltaPhi
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
Definition: xAODP4Helpers.h:69
FPGATrackSimBinUtil::StoredHit::rzrad
double rzrad() const
Definition: FPGATrackSimBinUtil.cxx:52
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
FPGATrackSimBinUtil::subVec
std::vector< unsigned > subVec(const std::vector< unsigned > &elems, const IdxSet &invec)
Definition: FPGATrackSimBinUtil.cxx:60
xAOD::unsigned
unsigned
Definition: RingSetConf_v1.cxx:662
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
FPGATrackSimHit
Definition: FPGATrackSimHit.h:41
FPGATrackSimHit::getGPhi
float getGPhi() const
Definition: FPGATrackSimHit.h:144
FPGATrackSimBinUtil::GeomHelpers::ThetaFromEta
static double ThetaFromEta(double eta)
Definition: FPGATrackSimBinUtil.cxx:146
FPGATrackSimBinUtil::GeomHelpers::CurvatureConstant
static constexpr double CurvatureConstant
Definition: FPGATrackSimBinUtil.h:111
lumiFormat.i
int i
Definition: lumiFormat.py:85
FPGATrackSimBinUtil.h
Binning Utilities for GenScanTool.
hist_file_dump.f
f
Definition: hist_file_dump.py:141
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
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
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
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
FPGATrackSimHit::getR
float getR() const
Definition: FPGATrackSimHit.h:143
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
DeMoScan.first
bool first
Definition: DeMoScan.py:536
FPGATrackSimBinUtil::GeomHelpers::zFromPars
static double zFromPars(double r, const FPGATrackSimTrackPars &pars)
Definition: FPGATrackSimBinUtil.cxx:156
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
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
calibdata.copy
bool copy
Definition: calibdata.py:27
FPGATrackSimBinUtil::IdxSet
Definition: FPGATrackSimBinUtil.h:50
FPGATrackSimBinUtil
Definition: FPGATrackSimBinUtil.h:35