Loading [MathJax]/jax/output/SVG/config.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
FPGATrackSimGenScanBinning.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 
3 #ifndef FPGATrackSimGenScanBinning_H
4 #define FPGATrackSimGenScanBinning_H
5 
55 
56 
62 
64 #include "GaudiKernel/StatusCode.h"
65 
66 #include <cmath>
67 #include <fstream>
68 #include <initializer_list>
69 #include <ios>
70 #include <string>
71 #include <vector>
72 #include <array>
73 #include <stdexcept> //std::invalid_argument
74 #include <algorithm> //std::copy
75 
76 
77 //-------------------------------------------------------------------------------------------------------
78 // Binning base class
79 // Nomenclature:
80 // slice = first larger region binning (z0-eta binning in typical Hough)
81 // scan, row are the independent and dependent variables in a standard Hough ( e.g. pT and phi_track)
82 // slicePar = variables used to slice into overlapping regions (e.g. z0,eta)
83 // sliceVar = variable that slicePars specify a valid range of (e.g. hit_z)
84 // scanPar = scan variables of Hough-like scan (e.g. pT,d0)
85 // rowPar = variable that scanPars specify a valid range of for a given hit (e.g. phi_track)
86 //-------------------------------------------------------------------------------------------------------
87 class FPGATrackSimGenScanBinningBase : virtual public IAlgTool
88 {
89 public:
91 
92  //--------------------------------------------------------------------------------------------------
93  //
94  // These just makes ParSet and IdxSet types that have 5 double or unsigned int
95  // for the 5-track parameters. The point of the structs is that they are fixed
96  // to the right length and can be converted back and forth to std::vector
97  // through cast operators and constructors
98  //
99  //--------------------------------------------------------------------------------------------------
100 
101  struct ParSet : public std::array<double,5> {
103  ParSet(const std::vector<double>& val) {
104  if (val.size() != 5) {
105  throw std::invalid_argument("Not enough parameters in ParSet initialization");
106  }
107  std::copy(val.begin(), val.end(), this->begin());
108  }
109  operator const std::vector<double>() const { return std::vector<double>(this->begin(),this->end());}
110  };
111  struct IdxSet : public std::array<unsigned, 5> {
113  IdxSet(const std::vector<unsigned>& val) {
114  if (val.size() != 5) {
115  throw std::invalid_argument("Not enough parameters in IdxSet initialization");
116  }
117  std::copy(val.begin(), val.end(), this->begin());
118  }
119  operator const std::vector<unsigned>() const { return std::vector<unsigned>(this->begin(),this->end());}
120  };
121 
122  //--------------------------------------------------------------------------------------------------
123  //
124  // Virtual methods that are overloaded to define the binning
125  //
126  //--------------------------------------------------------------------------------------------------
127 
128  // Specification of parameters
129  virtual const std::string &
130  parNames(unsigned i) const = 0;
131 
132  // overloaded to define which parameters are slice, scan, and row
133  // they return vectors which are the numbers of the parameters in the slice or scan
134  // and just an unsigned for row since there can be only one row parmeter
135  virtual std::vector<unsigned> slicePars() const = 0;
136  virtual std::vector<unsigned> scanPars() const = 0;
137  virtual unsigned rowParIdx() const = 0;
138 
139 
140  // convert back and forth from pT, eta, phi, d0, z0 and internal paramater set
141  virtual const ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const = 0;
142  virtual const FPGATrackSimTrackPars parSetToTrackPars(const ParSet &parset) const = 0;
143 
144  // calculate the distance in phi or eta from a track defined by parset to a hit
145  // these can be implemented as any variable in the r-phi or r-eta plane (not necessarily eta and phi).
146  virtual double phiResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const = 0;
147  virtual double etaResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const = 0;
148 
149  // Used to scale the histograms binning appropriately (very approximate, but at least the default ranges come up reasonable)
150  virtual double phiHistScale() const = 0;
151  virtual double etaHistScale() const = 0;
152 
153  // To determine if a hit is in a slice or row there are two options
154  // 1) Directly implement hitInSlice and idxsetToRowParBinRange.
155  // 2) Use the default implementaions of those in which case sliceVar, sliceVarExpected, and rowPar should be implemented
156  // Tells if a hit is in a slice
157  virtual bool hitInSlice(const IdxSet &idx, FPGATrackSimHit const *hit) const;
158 
159  // Tells the range of row parameters a hit is conistent with assuming the other parameters (slice and scan)
160  // are set by the given bin idx
161  virtual std::pair<unsigned, unsigned> idxsetToRowParBinRange(const IdxSet &idx, FPGATrackSimHit const *hit) const;
162 
163  // Constants access for firmware -- not required for simulation-only
164  virtual void writeSliceConsts([[maybe_unused]] FPGATrackSimGenScanArray<int>& valid) const {}
165  virtual void writeScanConsts([[maybe_unused]] FPGATrackSimGenScanArray<int>& valid) const {}
166 
167 
168  private:
169  // Hit variable used in slicing (e.g. for eta-z0 slicing it would be the z of the hit)
170  virtual double sliceVar([[maybe_unused]] FPGATrackSimHit const *hit) const;
171 
172  // Find expected sliceVar for a track with the given parameters (e.g. or eta-z0 slicing this is the expect z for a given hit radius)
173  virtual double sliceVarExpected([[maybe_unused]] const ParSet &pars, [[maybe_unused]] FPGATrackSimHit const *hit) const;
174 
175  // Find the parameter for a given hit and parameters (e.g. given pT and d0 what is track phi)
176  virtual double rowPar([[maybe_unused]] const ParSet &pars, [[maybe_unused]] FPGATrackSimHit const *hit) const;
177 
178 
179  //--------------------------------------------------------------------------------------------------
180  //
181  // Functional Implementation
182  //
183  //--------------------------------------------------------------------------------------------------
184 
185  public:
186  // merge of both slice and scan par lists
187  std::vector<unsigned> sliceAndScanPars() const {
188  std::vector<unsigned> retv = slicePars();
189  std::vector<unsigned> scan = scanPars();
190  retv.insert(retv.end(), scan.begin(), scan.end());
191  return retv;
192  };
193 
194  // Find distance from bin center to hit in either slice direction or the row direction
195  double phiShift(const IdxSet &idx, FPGATrackSimHit const *hit, bool debug=false) const { return phiResidual(binCenter(idx),hit,debug);}
196  double etaShift(const IdxSet &idx, FPGATrackSimHit const *hit, bool debug=false) const { return etaResidual(binCenter(idx),hit,debug);}
197 
198  // accessors to get the numbers of bins in just the slice, scan, sliceAndScan, or row (subset of the 5-d space)
199  virtual std::vector<unsigned> sliceBins() const { return subVec(slicePars(), m_parBins); }
200  virtual std::vector<unsigned> scanBins() const { return subVec(scanPars(), m_parBins); }
201  virtual std::vector<unsigned> sliceAndScanBins() const { return subVec(sliceAndScanPars(), m_parBins); }
202  virtual unsigned rowBin() const { return m_parBins[rowParIdx()]; }
203 
204  // extract just the slice, scan, sliceAndScan, or row part of a 5-d index
205  virtual std::vector<unsigned> sliceIdx(const IdxSet &idx) const { return subVec(slicePars(), idx); }
206  virtual std::vector<unsigned> scanIdx(const IdxSet &idx) const { return subVec(scanPars(), idx); }
207  virtual std::vector<unsigned> sliceAndScanIdx(const IdxSet &idx) const { return subVec(sliceAndScanPars(), idx); }
208  virtual unsigned rowIdx(const IdxSet &idx) const { return idx[rowParIdx()]; }
209 
210 
211  // Bin boundary utilities
212  double binCenter(unsigned par, unsigned bin) const { return m_parMin[par] + m_parStep[par] * (double(bin) + 0.5); }
213  double binLowEdge(unsigned par, unsigned bin) const { return m_parMin[par] + m_parStep[par] * (double(bin)); }
214  double binHighEdge(unsigned par, unsigned bin) const { return m_parMin[par] + m_parStep[par] * (double(bin) + 1.0); }
215  ParSet binLowEdge(const IdxSet &idx) const;
216  ParSet binCenter(const IdxSet &idx) const;
217 
218  // center of whole region
219  ParSet center() const;
220  double parRange(unsigned par) const { return m_parMax[par]-m_parMin[par];}
221 
222  // get bin value for a specific parameter value
223  unsigned binIdx(unsigned par, double val) const { return (val > m_parMin[par]) ? unsigned(floor((val - m_parMin[par]) / m_parStep[par])) : 0; }
224  unsigned rowParBinIdx(double val) const { return binIdx(rowParIdx(), val); }
225 
226  // check if 1-d or 5-d parameter is within the range of the binning
227  bool inRange(unsigned par, double val) const { return ((val < m_parMax[par]) && (val > m_parMin[par])); }
228  bool inRange(const ParSet &pars) const;
229 
230  // convert parset (the binning parameters) to a 5-d bin
231  IdxSet binIdx(const ParSet &pars) const;
232 
233  // convert FPGATrackSimTrackPars to 5-d bin
234  const IdxSet parsToBin(FPGATrackSimTrackPars &pars) const;
235 
236  // Generic Utility for splitting in vector (e.g. idx or #bins 5-d vectors)
237  // into subvectors (e.g. idx for just the scan parameters). Technically, for
238  // a list of parameter indices (elems) gives the subvector of the invec with just those indices
239  std::vector<unsigned> subVec(const std::vector<unsigned>& elems, const IdxSet& invec) const;
240 
241  // Opposite of above subVec, this sets the subvector
242  void setIdxSubVec(IdxSet &idx, const std::vector<unsigned>& subvecelems, const std::vector<unsigned>& subvecidx) const;
243 
244  // Makes are set of parameters corresponding to the corners specified by scanpars of the bin specified by idx
245  // e.g. if scan pars is (pT,d0) then the set is (low pT,low d0), (low pT, high d0), (high pT,low d0), (high pT, high d0)
246  std::vector<ParSet> makeVariationSet(const std::vector<unsigned> &scanpars, const IdxSet &idx) const;
247 
248 
249  // Class for writing const files formatted for firmware
250  struct StreamManager {
251  StreamManager(const std::string& setname) : m_setname(setname) {}
253  for (auto &f : m_map) { f.second << "\n"; }
254  }
255 
256  template<typename T> void writeVar(const std::string& var, T val);
257 
258  private:
259  std::string m_setname;
260  std::map<std::string, std::fstream> m_map;
261  };
262 
263  //
264  // Internal data
265  //
266  static constexpr unsigned NPars = 5;
271 
272  // invalid bin value, there is no way a true bin could be there
275 };
276 
277 
278 
279 //-------------------------------------------------------------------------------------------------------
280 //
281 // Geometry Helpers -- does basic helix calculations
282 //
283 //-------------------------------------------------------------------------------------------------------
285 {
286 public:
287  // This is the constant needed to relate hit phi to track phi due to curvature
288  static constexpr double CurvatureConstant = fpgatracksim::A;
289 
290  // standard eta to theta calculation
291  static double ThetaFromEta(double eta);
292 
293  // standard theta to eta calculation
294  static double EtaFromTheta(double theta);
295 
296  // find the expected z position from the radius and track parameters
297  static double zFromPars(double r, const FPGATrackSimTrackPars &pars);
298 
299  // find the expected z position from the radius and track parameters
300  static double phiFromPars(double r, const FPGATrackSimTrackPars &pars);
301 
302  // find the track phi that would be consistent with the other track parameters and the hit (r,phi)
303  static double parsToTrkPhi(const FPGATrackSimTrackPars &pars, FPGATrackSimHit const *hit);
304 };
305 
306 //-------------------------------------------------------------------------------------------------------
307 //
308 // Standard pT, d0, phi, eta, z0 implmentation of FPGATrackSimGenScanStdTrkBinning
309 // -- this is then effectively a "standard" Hough transform except that it slices
310 // in (z0,eta) and then the accumulator scans is in both pT and d0 with phi_track
311 // as the row of the accumulator
312 //
313 //-------------------------------------------------------------------------------------------------------
314 class FPGATrackSimGenScanStdTrkBinning : public extends<AthAlgTool, FPGATrackSimGenScanBinningBase>
315 {
316 public:
317  FPGATrackSimGenScanStdTrkBinning(const std::string& algname, const std::string &name, const IInterface *ifc) :
318  base_class(algname, name, ifc), m_parNames({"z0", "eta", "qOverPt", "d0", "phi"})
319  {
320  declareInterface<FPGATrackSimGenScanBinningBase>(this);
321  }
322 
323  virtual StatusCode initialize() override { return StatusCode::SUCCESS; }
324 
325  virtual const std::string &parNames(unsigned i) const override { return m_parNames[i]; }
326  virtual unsigned rowParIdx() const override { return 4;}
327 
328  virtual std::vector<unsigned> slicePars() const override { return std::vector<unsigned>({0,1}); }
329  virtual std::vector<unsigned> scanPars() const override { return std::vector<unsigned>({2,3}); }
330 
331  virtual double etaHistScale() const override {return 200.0;}
332  virtual double phiHistScale() const override {return 0.1;}
333 
334  virtual const ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const override
335  {
338  }
339  virtual const FPGATrackSimTrackPars parSetToTrackPars(const ParSet &parset) const override
340  {
342  pars[FPGATrackSimTrackPars::IZ0] = parset[0];
343  pars[FPGATrackSimTrackPars::IETA] = parset[1];
344  pars[FPGATrackSimTrackPars::IHIP] = parset[2];
345  pars[FPGATrackSimTrackPars::ID0] = parset[3];
346  pars[FPGATrackSimTrackPars::IPHI] = parset[4];
347  return pars;
348  }
349 
350  virtual double sliceVarExpected(const ParSet &pars, FPGATrackSimHit const *hit) const override
351  {
353  }
354  virtual double sliceVar(FPGATrackSimHit const *hit) const override
355  {
356  return hit->getZ();
357  }
358  virtual double rowPar(const ParSet &pars, FPGATrackSimHit const *hit) const override
359  {
361  }
362 
363  virtual double etaResidual(const ParSet &parset ,FPGATrackSimHit const * hit, [[maybe_unused]] bool debug=false) const override {
364  // this uses a shift in "eta*radius" instead of "z"
365  double theta = FPGATrackSimGenScanGeomHelpers::ThetaFromEta(parset[1]); // 1 = eta
366  return (hit->getZ() - parset[0]) * sin(theta) - hit->getR() * cos(theta); // 0=z0
367  }
368  virtual double phiResidual(const ParSet &parset,FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const override {
370  }
371 
372 private:
373  const std::vector<std::string> m_parNames;
374 };
375 
376 //-------------------------------------------------------------------------------------------------------
377 //
378 // Tool for doing Key Layer Math
379 // -- that is converting be the track parameters set by the standard (pT,eta,phi,d0,z0) and
380 // the "KeyLayer" parametes set by the phi and z at to radii (R1,R2) and a deviation from
381 // straight line between the two points (xm)
382 // -- All the math for the r-phi plane is based finding the rotated coordinate system where
383 // the points (R1,phiR1) and (R2,phiR2) both lie on the x=0 axis. Then the x of a track halfway
384 // between the points (called xm) is the sagitta.
385 //
386 //-------------------------------------------------------------------------------------------------------
388 {
389 public:
390  FPGATrackSimGenScanKeyLyrHelper(double r1, double r2) : m_R1(r1), m_R2(r2) {}
391  FPGATrackSimGenScanKeyLyrHelper() {} // NOTE r1 and r2 must be set before using class
392 
393  struct KeyLyrPars {
394  KeyLyrPars() = default;
396  : z1(parset[0]), z2(parset[1]), phi1(parset[2]), phi2(parset[3]), xm(parset[4]) {}
397  double z1{};
398  double z2{};
399  double phi1{};
400  double phi2{};
401  double xm{};
402  };
403 
404  // convert (r,phi) to (x,y)
405  std::pair<double, double> getXY(double r, double phi) const;
406 
407  // Get rotation angles need to rotate the two given points to be only seperated in the y direction (both have same x)
408  // results is the sin and cos of rotation
409  std::pair<double, double> getRotationAngles(const std::pair<double, double>& xy1, const std::pair<double, double>& xy2) const;
410 
411  // Apply a rotation angles (sin and cos) to a point xy
412  std::pair<double, double> rotateXY(const std::pair<double, double>& xy, const std::pair<double, double>& ang) const;
413 
414  // Simple struct and function to get the rotation angle and full rotated information in one call
416  {
417  std::pair<double, double> xy1p{}; // point 1 after rotation
418  std::pair<double, double> xy2p{}; // point 2 after rotation
419  std::pair<double, double> rotang{}; // rotation angle
420  double y{}; // y seperation after rotation
421  };
422  rotatedConfig getRotatedConfig(const KeyLyrPars &keypars) const;
423 
424  // get the x,y coordinates of a hit in the rotated coordinate system specified by rotang
425  std::pair<double, double> getRotatedHit(const std::pair<double, double>& rotang, const FPGATrackSimHit *hit) const;
426 
427  // Convert back and forth to standard track parameters
428  KeyLyrPars trackParsToKeyPars(const FPGATrackSimTrackPars &pars) const;
429  FPGATrackSimTrackPars keyParsToTrackPars(const KeyLyrPars &keypars) const;
430 
431  // find expected z hit position given a radius
432  double zExpected(const KeyLyrPars& keypars, double r) const;
433 
434  // find expected x position of a hit at given a radius in the rotated coordinate system
435  double xExpected(const KeyLyrPars& keypars, const FPGATrackSimHit *hit) const;
436 
437  // takes hit position and calculated what xm would be for track going through that hit
438  double xmForHit(const KeyLyrPars& keypars, const FPGATrackSimHit *hit) const;
439 
440  // Find shift from nominal track to hit in the "x" direction
441  double deltaX(const KeyLyrPars& keypars, const FPGATrackSimHit *hit) const;
442 
443  // accessors
444  double R1() const {return m_R1;}
445  double R2() const {return m_R2;}
446  void setR1(const double r1) {m_R1=r1;}
447  void setR2(const double r2) {m_R2=r2;}
448 
449  private:
450  double m_R1{};
451  double m_R2{};
452 };
453 
454 //-------------------------------------------------------------------------------------------------------
455 //
456 // Key Layer Binning implementation (z slice then phi scan)
457 // -- Using the FPGATrackSimGenScanKeyLyrHelper to implement an instance of
458 // FPGATrackSimGenScanBinningBase which slices in z and then scans in (phiR1,phiR2),
459 // and then uses xm as the final row variable
460 //
461 //-------------------------------------------------------------------------------------------------------
462 class FPGATrackSimGenScanKeyLyrBinning : public extends<AthAlgTool, FPGATrackSimGenScanBinningBase>
463 {
464 public:
465  FPGATrackSimGenScanKeyLyrBinning(const std::string& algname, const std::string &name, const IInterface *ifc) :
466  base_class(algname, name, ifc), m_keylyrtool(m_rin,m_rout), m_parNames({"zR1", "zR2", "phiR1", "phiR2", "xm"})
467  {
468  declareInterface<FPGATrackSimGenScanBinningBase>(this);
469  }
470 
471  virtual StatusCode initialize() override {
474  return StatusCode::SUCCESS;
475  }
476 
477  Gaudi::Property<double> m_rin{this, "rin", {-1.0}, "Radius of inner layer for keylayer definition"};
478  Gaudi::Property<double> m_rout{this, "rout", {-1.0}, "Radius of outer layer for keylayer definition"};
479 
480  virtual const std::string &parNames(unsigned i) const override { return m_parNames[i]; }
481  virtual unsigned rowParIdx() const override { return 4;}
482  virtual std::vector<unsigned> slicePars() const override { return std::vector<unsigned>({0,1}); }
483  virtual std::vector<unsigned> scanPars() const override { return std::vector<unsigned>({2,3}); }
484 
485 
486  virtual double etaHistScale() const override {return 300.0;}
487  virtual double phiHistScale() const override {return 60.0;}
488 
490  return ParSet({keypars.z1,keypars.z2,keypars.phi1,keypars.phi2,keypars.xm});
491  }
492 
495  }
496 
497  virtual const ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const override {
499  }
500  virtual const FPGATrackSimTrackPars parSetToTrackPars(const ParSet &parset) const override {
502  }
503  virtual double sliceVarExpected(const ParSet &pars, FPGATrackSimHit const *hit) const override
504  {
506  }
507  virtual double sliceVar(FPGATrackSimHit const *hit) const override {
508  return hit->getZ();
509  }
510  virtual double rowPar(const ParSet &parset, FPGATrackSimHit const *hit) const override
511  {
512  return m_keylyrtool.xmForHit(parSetToKeyPars(parset),hit);
513  }
514  virtual double etaResidual(const ParSet &parset,FPGATrackSimHit const * hit, [[maybe_unused]] bool debug=false) const override {
515  return hit->getZ()- m_keylyrtool.zExpected(parSetToKeyPars(parset),hit->getR());
516  }
517 
518  virtual double phiResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const override {
519  return m_keylyrtool.deltaX(parSetToKeyPars(parset),hit);
520  }
521 
522 private:
524  const std::vector<std::string> m_parNames;
525 
526  };
527 
528 //-------------------------------------------------------------------------------------------------------
529 //
530 // Key Layer Binning Phi Sliced (then z scanned)
531 // -- This scans slices in all phi parameters ("phiR1", "phiR2", "xm")
532 // and then scans in in ("zR1", "zR2")
533 // -- This was used to explore the throughput of inverting these opperations
534 // -- Also the hitInSlice and idxsetToRowParBinRange functions were switched
535 // to be simple windows so that its more like real firmware
536 //
537 //-------------------------------------------------------------------------------------------------------
538 class FPGATrackSimGenScanPhiSlicedKeyLyrBinning : public extends<AthAlgTool, FPGATrackSimGenScanBinningBase>
539 {
540 public:
541  FPGATrackSimGenScanPhiSlicedKeyLyrBinning(const std::string& algname, const std::string &name, const IInterface *ifc) :
542  base_class(algname, name, ifc), m_parNames({"zR1", "zR2", "phiR1", "phiR2", "xm"})
543  {
544  declareInterface<FPGATrackSimGenScanBinningBase>(this);
545  }
546 
547  virtual StatusCode initialize() override {
550  return StatusCode::SUCCESS;
551  }
552 
553  Gaudi::Property<double> m_rin{this, "rin", {-1.0}, "Radius of inner layer for keylayer definition"};
554  Gaudi::Property<double> m_rout{this, "rout", {-1.0}, "Radius of outer layer for keylayer definition"};
555  Gaudi::Property<bool> m_approxMath{this, "approxMath", {false}, "Use approximate math to emulate possible firmware"};
556 
557 
558  virtual const std::string &parNames(unsigned i) const override { return m_parNames[i]; }
559  virtual unsigned rowParIdx() const override { return 4;}
560  virtual std::vector<unsigned> slicePars() const override { return std::vector<unsigned>({2,3,4}); }
561  virtual std::vector<unsigned> scanPars() const override { return std::vector<unsigned>({0,1}); }
562 
563 
564  virtual double etaHistScale() const override {return 60.0;}
565  virtual double phiHistScale() const override {return 30.0;}
566 
568  return ParSet({keypars.z1,keypars.z2,keypars.phi1,keypars.phi2,keypars.xm});
569  }
570 
573  }
574 
575  virtual const ParSet
578  }
579  virtual const FPGATrackSimTrackPars
580  parSetToTrackPars(const ParSet &parset) const override {
582  }
583 
584  virtual double phiResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug) const override;
585 
586  virtual double etaResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug) const override
587  {
588  return hit->getZ()- m_keylyrtool.zExpected(parSetToKeyPars(parset),hit->getR());
589  }
590 
591  virtual bool hitInSlice(const IdxSet &idx, FPGATrackSimHit const *hit) const override {
592  double r1 = m_keylyrtool.R1();
593  double r2 = m_keylyrtool.R2();
594 
595  if (m_approxMath) {
596  ATH_MSG_WARNING("Approx Math is underdevlopment do not use it!");
597 
598  double r = hit->getR();
599 
600  double d0_range = 2.1;
601 
602  double slopelow = - 8.0 * binLowEdge(4, idx[4]) * (r / ((r2 - r1) * (r2 - r1))) + d0_range/r;
603  double slopehigh = - 8.0 * binHighEdge(4, idx[4]) * (r / ((r2 - r1) * (r2 - r1))) - d0_range/r;
604 
605  // xmeffective_in give possible curvature to inner radius
606  double xmeffective_in = m_parStep[4] * ((r2 - r) / (r2 - r1))*((r2 - r) / (r2 - r1));
607  double xshift_low_in = slopelow * (r1-r) - 4.0 * xmeffective_in;
608  double xshift_high_in = slopehigh * (r1-r) + 4.0 * xmeffective_in;
609 
610  double phi_hit = hit->getGPhi();
611 
612 
613  // for now we'll test inner (par=2) then out (par = 3)
614  if (((r1*phi_hit + xshift_high_in) > r1*binLowEdge(2, idx[2]) &&
615  (r1*phi_hit + xshift_low_in) < r1*binHighEdge(2, idx[2]))) {
616  return true;
617 
618  // xmeffective_out give possible curvature to inner radius
619  double xmeffective_out = m_parStep[4] * ((r2 - r) / (r2 - r1))*((r2 - r) / (r2 - r1));
620  double xshift_low_out = slopehigh * (r2-r) - 4.0 * xmeffective_out;
621  double xshift_high_out = slopelow * (r2-r) + 4.0 * xmeffective_out;
622 
623  if ((r2*phi_hit + xshift_high_out) > r2*binLowEdge(3, idx[3]) &&
624  (r2*phi_hit + xshift_low_out) < r2*binHighEdge(3, idx[3])) {
625  return true;
626  } else {
627  return false;
628  }
629 
630  } else {
631  return false;
632  }
633  }
634 
635  auto keypars = parSetToKeyPars(binCenter(idx));
636  auto tmppars = keypars;
637  tmppars.xm = m_parStep[4] / 2.0;
638  double xrange = m_keylyrtool.xExpected(tmppars, hit) + (r1*m_parStep[2] + (r2*m_parStep[3] - r1*m_parStep[2]) / (r2 - r1) * (hit->getR() - r1))/2.0;
639  return (std::abs(phiShift(idx, hit)) < xrange);
640  }
641 
642  virtual std::pair<unsigned, unsigned> idxsetToRowParBinRange(const IdxSet &idx, [[maybe_unused]] FPGATrackSimHit const *hit) const override
643  {
644  double r1 = m_keylyrtool.R1();
645  double r2 = m_keylyrtool.R2();
646  double lowz_in = binLowEdge(0,idx[0]);
647  double highz_in = binHighEdge(0,idx[0]);
648  double lowz_out = binLowEdge(1,idx[1]);
649  double highz_out = binHighEdge(1,idx[1]);
650 
651 
652  // simple box cut
653  if (hit->getZ() < lowz_in + (lowz_out-lowz_in) * (hit->getR()-r1)/(r2-r1))
654  return std::pair<unsigned, unsigned>(0, 0); // empty range
655 
656  if (hit->getZ() > highz_in + (highz_out-highz_in) * (hit->getR()-r1)/(r2-r1))
657  return std::pair<unsigned, unsigned>(0, 0); // empty range
658 
659  return std::pair<unsigned, unsigned>(rowIdx(idx), rowIdx(idx) + 1); // range covers just 1 row bin
660  }
661 
662  virtual void writeScanConsts([[maybe_unused]] FPGATrackSimGenScanArray<int> &valid) const override {
663 
664  StreamManager streams("z_binning");
665  int nbins = 0;
667  if (!bin.data())
668  continue;
669 
670  streams.writeVar("z_bin", bin.idx());
671 
673  setIdxSubVec(idx, scanPars(), bin.idx());
674 
675  double r_in = m_keylyrtool.R1();
676  double r_out = m_keylyrtool.R2();
677  double z_in = binCenter(0, idx[0]);
678  double z_out = binCenter(1, idx[1]);
679  double dz_dr = (z_out - z_in)/(r_out-r_in);
680  double w_in = (binHighEdge(0, idx[0]) - binLowEdge(0, idx[0])) / 2.0;
681  double w_out = (binHighEdge(1, idx[1]) - binLowEdge(1, idx[1])) / 2.0;
682  double dw_dr = (w_out - w_in)/(r_out-r_in);
683 
684 
685  streams.writeVar("r_in", m_keylyrtool.R1());
686  streams.writeVar("r_out", m_keylyrtool.R2());
687 
688  streams.writeVar("z_in", z_in);
689  streams.writeVar("dz_dr", dz_dr);
690 
691  streams.writeVar("w_in", w_in);
692  streams.writeVar("dw_dr", dw_dr);
693 
694  nbins++;
695  }
696 
697  streams.writeVar("nbins", nbins);
698 
699 
700  }
701 
702  virtual void writeSliceConsts(
703  [[maybe_unused]] FPGATrackSimGenScanArray<int> &valid) const override {
704 
705  StreamManager streams("phi_binning");
706  int nbins = 0;
708  if (!bin.data())
709  continue;
710 
711  streams.writeVar("phi_bin", bin.idx());
712 
714  setIdxSubVec(idx, slicePars(), bin.idx());
715 
716  auto keypars = parSetToKeyPars(binCenter(idx));
717 
718  auto rotated_coords = m_keylyrtool.getRotatedConfig(keypars);
719 
720  streams.writeVar("y", rotated_coords.y);
721  streams.writeVar("x1p", rotated_coords.xy1p.first);
722  streams.writeVar("y1p", rotated_coords.xy1p.second);
723  streams.writeVar("cosb", rotated_coords.rotang.first);
724  streams.writeVar("sinb", rotated_coords.rotang.second);
725 
726  double x_m = binCenter(4,idx[4]);
727  streams.writeVar("x_m", x_m);
728  streams.writeVar("x_factor", 4.0 * x_m / (rotated_coords.y * rotated_coords.y));
729 
730  double r_in = m_keylyrtool.R1();
731  double r_out = m_keylyrtool.R2();
732  double w_in =
733  r_in * ((binHighEdge(2, idx[2]) - binLowEdge(2, idx[2])) / 2.0);
734  double w_out = r_out*((binHighEdge(3,idx[3])-binLowEdge(3,idx[3]))/2.0);
735  double w_x = (binHighEdge(4,idx[4])-binLowEdge(4,idx[4]))/2.0;
736 
737  double dw_dr = (w_out - w_in)/(r_out-r_in);
738 
739  streams.writeVar("w_x", 4.0 * w_x / (rotated_coords.y * rotated_coords.y));
740  streams.writeVar("w_in", w_in);
741  streams.writeVar("dw_dr", dw_dr);
742 
743  nbins++;
744  }
745 
746  streams.writeVar("nbins", nbins);
747  }
748 
749 
750 private:
752  const std::vector<std::string> m_parNames;
753 
754  };
755 
756 #endif // FPGATrackSimGenScanBinning_H
FPGATrackSimGenScanKeyLyrHelper::rotatedConfig
Definition: FPGATrackSimGenScanBinning.h:416
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
xrange
void xrange(TH1 *h, bool symmetric)
Definition: computils.cxx:516
FPGATrackSimGenScanGeomHelpers::phiFromPars
static double phiFromPars(double r, const FPGATrackSimTrackPars &pars)
Definition: FPGATrackSimGenScanBinning.cxx:221
FPGATrackSimTrackPars::IHIP
@ IHIP
Definition: FPGATrackSimTrackPars.h:49
beamspotman.r
def r
Definition: beamspotman.py:676
FPGATrackSimGenScanArray< int >
FPGATrackSimGenScanKeyLyrHelper::R1
double R1() const
Definition: FPGATrackSimGenScanBinning.h:444
FPGATrackSimGenScanKeyLyrHelper::rotatedConfig::xy1p
std::pair< double, double > xy1p
Definition: FPGATrackSimGenScanBinning.h:417
beamspotnt.var
var
Definition: bin/beamspotnt.py:1394
FPGATrackSimGenScanKeyLyrHelper::setR1
void setR1(const double r1)
Definition: FPGATrackSimGenScanBinning.h:446
FPGATrackSimGenScanBinningBase::scanBins
virtual std::vector< unsigned > scanBins() const
Definition: FPGATrackSimGenScanBinning.h:200
FPGATrackSimTrackPars::ID0
@ ID0
Definition: FPGATrackSimTrackPars.h:49
FPGATrackSimGenScanBinningBase::IdxSet
Definition: FPGATrackSimGenScanBinning.h:111
FPGATrackSimGenScanStdTrkBinning::slicePars
virtual std::vector< unsigned > slicePars() const override
Definition: FPGATrackSimGenScanBinning.h:328
getMenu.algname
algname
Definition: getMenu.py:54
FPGATrackSimGenScanKeyLyrHelper::rotateXY
std::pair< double, double > rotateXY(const std::pair< double, double > &xy, const std::pair< double, double > &ang) const
Definition: FPGATrackSimGenScanBinning.cxx:257
FPGATrackSimGenScanBinningBase::StreamManager::m_setname
std::string m_setname
Definition: FPGATrackSimGenScanBinning.h:259
FPGATrackSimGenScanKeyLyrHelper::xmForHit
double xmForHit(const KeyLyrPars &keypars, const FPGATrackSimHit *hit) const
Definition: FPGATrackSimGenScanBinning.cxx:363
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::FPGATrackSimGenScanPhiSlicedKeyLyrBinning
FPGATrackSimGenScanPhiSlicedKeyLyrBinning(const std::string &algname, const std::string &name, const IInterface *ifc)
Definition: FPGATrackSimGenScanBinning.h:541
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
FPGATrackSimGenScanKeyLyrHelper::R2
double R2() const
Definition: FPGATrackSimGenScanBinning.h:445
FPGATrackSimGenScanBinningBase::StreamManager::StreamManager
StreamManager(const std::string &setname)
Definition: FPGATrackSimGenScanBinning.h:251
AthMsgStreamMacros.h
FPGATrackSimGenScanKeyLyrBinning::phiHistScale
virtual double phiHistScale() const override
Definition: FPGATrackSimGenScanBinning.h:487
FPGATrackSimGenScanGeomHelpers::CurvatureConstant
static constexpr double CurvatureConstant
Definition: FPGATrackSimGenScanBinning.h:288
FPGATrackSimGenScanBinningBase::rowPar
virtual double rowPar([[maybe_unused]] const ParSet &pars, [[maybe_unused]] FPGATrackSimHit const *hit) const
Definition: FPGATrackSimGenScanBinning.cxx:172
python.outputTest_v2.streams
streams
Definition: outputTest_v2.py:55
FPGATrackSimGenScanKeyLyrBinning::etaResidual
virtual double etaResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const override
Definition: FPGATrackSimGenScanBinning.h:514
FPGATrackSimGenScanKeyLyrHelper::getXY
std::pair< double, double > getXY(double r, double phi) const
Definition: FPGATrackSimGenScanBinning.cxx:242
FPGATrackSimTrackPars
Definition: FPGATrackSimTrackPars.h:22
FPGATrackSimGenScanBinningBase::inRange
bool inRange(unsigned par, double val) const
Definition: FPGATrackSimGenScanBinning.h:227
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
FPGATrackSimGenScanBinningBase::setIdxSubVec
void setIdxSubVec(IdxSet &idx, const std::vector< unsigned > &subvecelems, const std::vector< unsigned > &subvecidx) const
Definition: FPGATrackSimGenScanBinning.cxx:88
xAODP4Helpers.h
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::idxsetToRowParBinRange
virtual std::pair< unsigned, unsigned > idxsetToRowParBinRange(const IdxSet &idx, [[maybe_unused]] FPGATrackSimHit const *hit) const override
Definition: FPGATrackSimGenScanBinning.h:642
FPGATrackSimGenScanBinningBase::m_parBins
IdxSet m_parBins
Definition: FPGATrackSimGenScanBinning.h:270
FPGATrackSimGenScanKeyLyrHelper::setR2
void setR2(const double r2)
Definition: FPGATrackSimGenScanBinning.h:447
FPGATrackSimGenScanStdTrkBinning::sliceVar
virtual double sliceVar(FPGATrackSimHit const *hit) const override
Definition: FPGATrackSimGenScanBinning.h:354
FPGATrackSimGenScanBinningBase::StreamManager
Definition: FPGATrackSimGenScanBinning.h:250
FPGATrackSimTrackPars::IZ0
@ IZ0
Definition: FPGATrackSimTrackPars.h:49
FPGATrackSimGenScanGeomHelpers::ThetaFromEta
static double ThetaFromEta(double eta)
Definition: FPGATrackSimGenScanBinning.cxx:200
FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars::z1
double z1
Definition: FPGATrackSimGenScanBinning.h:397
FPGATrackSimGenScanKeyLyrHelper::m_R2
double m_R2
Definition: FPGATrackSimGenScanBinning.h:451
FPGATrackSimGenScanKeyLyrBinning::sliceVar
virtual double sliceVar(FPGATrackSimHit const *hit) const override
Definition: FPGATrackSimGenScanBinning.h:507
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:75
FPGATrackSimGenScanBinningBase::ParSet
Definition: FPGATrackSimGenScanBinning.h:101
FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars::xm
double xm
Definition: FPGATrackSimGenScanBinning.h:401
FPGATrackSimGenScanKeyLyrHelper::FPGATrackSimGenScanKeyLyrHelper
FPGATrackSimGenScanKeyLyrHelper(double r1, double r2)
Definition: FPGATrackSimGenScanBinning.h:390
FPGATrackSimGenScanBinningBase::sliceAndScanIdx
virtual std::vector< unsigned > sliceAndScanIdx(const IdxSet &idx) const
Definition: FPGATrackSimGenScanBinning.h:207
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
FPGATrackSimGenScanBinningBase::hitInSlice
virtual bool hitInSlice(const IdxSet &idx, FPGATrackSimHit const *hit) const
Definition: FPGATrackSimGenScanBinning.cxx:127
FPGATrackSimGenScanKeyLyrBinning::trackParsToParSet
virtual const ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const override
Definition: FPGATrackSimGenScanBinning.h:497
FPGATrackSimGenScanKeyLyrHelper::keyParsToTrackPars
FPGATrackSimTrackPars keyParsToTrackPars(const KeyLyrPars &keypars) const
Definition: FPGATrackSimGenScanBinning.cxx:310
bin
Definition: BinsDiffFromStripMedian.h:43
FPGATrackSimGenScanKeyLyrBinning::etaHistScale
virtual double etaHistScale() const override
Definition: FPGATrackSimGenScanBinning.h:486
FPGATrackSimGenScanBinningBase::parNames
virtual const std::string & parNames(unsigned i) const =0
FPGATrackSimGenScanBinningBase::center
ParSet center() const
Definition: FPGATrackSimGenScanBinning.cxx:48
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::rowParIdx
virtual unsigned rowParIdx() const override
Definition: FPGATrackSimGenScanBinning.h:559
xAOD::P4Helpers::deltaPhi
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
Definition: xAODP4Helpers.h:69
FPGATrackSimGenScanKeyLyrBinning::m_parNames
const std::vector< std::string > m_parNames
Definition: FPGATrackSimGenScanBinning.h:524
FPGATrackSimGenScanKeyLyrBinning::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimGenScanBinning.h:471
FPGATrackSimGenScanBinningBase::etaResidual
virtual double etaResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const =0
FPGATrackSimGenScanBinningBase::binIdx
unsigned binIdx(unsigned par, double val) const
Definition: FPGATrackSimGenScanBinning.h:223
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimGenScanBinning.h:547
FPGATrackSimGenScanStdTrkBinning::parNames
virtual const std::string & parNames(unsigned i) const override
Definition: FPGATrackSimGenScanBinning.h:325
FPGATrackSimGenScanBinningBase::writeScanConsts
virtual void writeScanConsts([[maybe_unused]] FPGATrackSimGenScanArray< int > &valid) const
Definition: FPGATrackSimGenScanBinning.h:165
FPGATrackSimGenScanKeyLyrBinning::phiResidual
virtual double phiResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const override
Definition: FPGATrackSimGenScanBinning.h:518
FPGATrackSimGenScanBinningBase::idxsetToRowParBinRange
virtual std::pair< unsigned, unsigned > idxsetToRowParBinRange(const IdxSet &idx, FPGATrackSimHit const *hit) const
Definition: FPGATrackSimGenScanBinning.cxx:147
FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars::KeyLyrPars
KeyLyrPars()=default
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::m_rin
Gaudi::Property< double > m_rin
Definition: FPGATrackSimGenScanBinning.h:553
FPGATrackSimGenScanBinningBase::m_parMax
ParSet m_parMax
Definition: FPGATrackSimGenScanBinning.h:268
FPGATrackSimGenScanBinningBase::phiHistScale
virtual double phiHistScale() const =0
xAOD::unsigned
unsigned
Definition: RingSetConf_v1.cxx:662
FPGATrackSimGenScanKeyLyrBinning::rowPar
virtual double rowPar(const ParSet &parset, FPGATrackSimHit const *hit) const override
Definition: FPGATrackSimGenScanBinning.h:510
FPGATrackSimGenScanBinningBase::scanIdx
virtual std::vector< unsigned > scanIdx(const IdxSet &idx) const
Definition: FPGATrackSimGenScanBinning.h:206
FPGATrackSimGenScanStdTrkBinning::phiResidual
virtual double phiResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const override
Definition: FPGATrackSimGenScanBinning.h:368
FPGATrackSimGenScanBinningBase::trackParsToParSet
virtual const ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const =0
FPGATrackSimGenScanKeyLyrHelper::rotatedConfig::rotang
std::pair< double, double > rotang
Definition: FPGATrackSimGenScanBinning.h:419
FPGATrackSimGenScanStdTrkBinning::etaResidual
virtual double etaResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const override
Definition: FPGATrackSimGenScanBinning.h:363
FPGATrackSimConstants.h
FPGATrackSimGenScanStdTrkBinning::FPGATrackSimGenScanStdTrkBinning
FPGATrackSimGenScanStdTrkBinning(const std::string &algname, const std::string &name, const IInterface *ifc)
Definition: FPGATrackSimGenScanBinning.h:317
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::phiHistScale
virtual double phiHistScale() const override
Definition: FPGATrackSimGenScanBinning.h:565
FPGATrackSimGenScanBinningBase::sliceVar
virtual double sliceVar([[maybe_unused]] FPGATrackSimHit const *hit) const
Definition: FPGATrackSimGenScanBinning.cxx:170
FPGATrackSimGenScanKeyLyrBinning::parNames
virtual const std::string & parNames(unsigned i) const override
Definition: FPGATrackSimGenScanBinning.h:480
FPGATrackSimHit
Definition: FPGATrackSimHit.h:41
FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars::phi2
double phi2
Definition: FPGATrackSimGenScanBinning.h:400
FPGATrackSimGenScanBinningBase::m_invalidBin
const IdxSet m_invalidBin
Definition: FPGATrackSimGenScanBinning.h:273
FPGATrackSimHit::getGPhi
float getGPhi() const
Definition: FPGATrackSimHit.h:144
FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars::KeyLyrPars
KeyLyrPars(const FPGATrackSimGenScanBinningBase::ParSet &parset)
Definition: FPGATrackSimGenScanBinning.h:395
FPGATrackSimGenScanBinningBase::rowParBinIdx
unsigned rowParBinIdx(double val) const
Definition: FPGATrackSimGenScanBinning.h:224
FPGATrackSimGenScanBinningBase::sliceAndScanPars
std::vector< unsigned > sliceAndScanPars() const
Definition: FPGATrackSimGenScanBinning.h:187
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::scanPars
virtual std::vector< unsigned > scanPars() const override
Definition: FPGATrackSimGenScanBinning.h:561
calibdata.valid
list valid
Definition: calibdata.py:45
FPGATrackSimGenScanBinningBase::etaHistScale
virtual double etaHistScale() const =0
FPGATrackSimGenScanBinningBase::NPars
static constexpr unsigned NPars
Definition: FPGATrackSimGenScanBinning.h:266
FPGATrackSimGenScanBinningBase::sliceIdx
virtual std::vector< unsigned > sliceIdx(const IdxSet &idx) const
Definition: FPGATrackSimGenScanBinning.h:205
FPGATrackSimGenScanKeyLyrBinning::sliceVarExpected
virtual double sliceVarExpected(const ParSet &pars, FPGATrackSimHit const *hit) const override
Definition: FPGATrackSimGenScanBinning.h:503
FPGATrackSimGenScanStdTrkBinning
Definition: FPGATrackSimGenScanBinning.h:315
FPGATrackSimGenScanBinningBase::scanPars
virtual std::vector< unsigned > scanPars() const =0
FPGATrackSimGenScanBinningBase::slicePars
virtual std::vector< unsigned > slicePars() const =0
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::etaResidual
virtual double etaResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug) const override
Definition: FPGATrackSimGenScanBinning.h:586
FPGATrackSimGenScanBinningBase::phiResidual
virtual double phiResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const =0
FPGATrackSimGenScanBinningBase::IdxSet::IdxSet
IdxSet(const std::vector< unsigned > &val)
Definition: FPGATrackSimGenScanBinning.h:113
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::keyparsToParSet
ParSet keyparsToParSet(const FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars &keypars) const
Definition: FPGATrackSimGenScanBinning.h:567
FPGATrackSimGenScanKeyLyrBinning::m_rout
Gaudi::Property< double > m_rout
Definition: FPGATrackSimGenScanBinning.h:478
FPGATrackSimGenScanKeyLyrBinning::rowParIdx
virtual unsigned rowParIdx() const override
Definition: FPGATrackSimGenScanBinning.h:481
lumiFormat.i
int i
Definition: lumiFormat.py:85
FPGATrackSimGenScanKeyLyrBinning::scanPars
virtual std::vector< unsigned > scanPars() const override
Definition: FPGATrackSimGenScanBinning.h:483
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::m_keylyrtool
FPGATrackSimGenScanKeyLyrHelper m_keylyrtool
Definition: FPGATrackSimGenScanBinning.h:751
FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars::phi1
double phi1
Definition: FPGATrackSimGenScanBinning.h:399
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::phiResidual
virtual double phiResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug) const override
Definition: FPGATrackSimGenScanBinning.cxx:415
AthAlgTool.h
FPGATrackSimGenScanKeyLyrHelper::getRotatedHit
std::pair< double, double > getRotatedHit(const std::pair< double, double > &rotang, const FPGATrackSimHit *hit) const
Definition: FPGATrackSimGenScanBinning.cxx:278
FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars::z2
double z2
Definition: FPGATrackSimGenScanBinning.h:398
FPGATrackSimGenScanPhiSlicedKeyLyrBinning
Definition: FPGATrackSimGenScanBinning.h:539
FPGATrackSimGenScanBinningBase::DeclareInterfaceID
DeclareInterfaceID(FPGATrackSimGenScanBinningBase, 2, 0)
FPGATrackSimGenScanKeyLyrHelper::rotatedConfig::xy2p
std::pair< double, double > xy2p
Definition: FPGATrackSimGenScanBinning.h:418
FPGATrackSimGenScanBinningBase::rowIdx
virtual unsigned rowIdx(const IdxSet &idx) const
Definition: FPGATrackSimGenScanBinning.h:208
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::writeSliceConsts
virtual void writeSliceConsts([[maybe_unused]] FPGATrackSimGenScanArray< int > &valid) const override
Definition: FPGATrackSimGenScanBinning.h:702
hist_file_dump.f
f
Definition: hist_file_dump.py:141
FPGATrackSimGenScanBinningBase::sliceAndScanBins
virtual std::vector< unsigned > sliceAndScanBins() const
Definition: FPGATrackSimGenScanBinning.h:201
FPGATrackSimGenScanKeyLyrBinning::m_rin
Gaudi::Property< double > m_rin
Definition: FPGATrackSimGenScanBinning.h:477
FPGATrackSimGenScanBinningBase::StreamManager::m_map
std::map< std::string, std::fstream > m_map
Definition: FPGATrackSimGenScanBinning.h:260
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::m_parNames
const std::vector< std::string > m_parNames
Definition: FPGATrackSimGenScanBinning.h:752
FPGATrackSimGenScanKeyLyrHelper::FPGATrackSimGenScanKeyLyrHelper
FPGATrackSimGenScanKeyLyrHelper()
Definition: FPGATrackSimGenScanBinning.h:391
FPGATrackSimHit::getZ
float getZ() const
Definition: FPGATrackSimHit.h:142
FPGATrackSimGenScanBinningBase::StreamManager::~StreamManager
~StreamManager()
Definition: FPGATrackSimGenScanBinning.h:252
FPGATrackSimGenScanKeyLyrBinning
Definition: FPGATrackSimGenScanBinning.h:463
FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars
Definition: FPGATrackSimGenScanBinning.h:393
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::parSetToTrackPars
virtual const FPGATrackSimTrackPars parSetToTrackPars(const ParSet &parset) const override
Definition: FPGATrackSimGenScanBinning.h:580
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
FPGATrackSimGenScanStdTrkBinning::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimGenScanBinning.h:323
FPGATrackSimGenScanKeyLyrHelper::getRotationAngles
std::pair< double, double > getRotationAngles(const std::pair< double, double > &xy1, const std::pair< double, double > &xy2) const
Definition: FPGATrackSimGenScanBinning.cxx:247
FPGATrackSimGenScanStdTrkBinning::m_parNames
const std::vector< std::string > m_parNames
Definition: FPGATrackSimGenScanBinning.h:373
FPGATrackSimGenScanKeyLyrBinning::m_keylyrtool
FPGATrackSimGenScanKeyLyrHelper m_keylyrtool
Definition: FPGATrackSimGenScanBinning.h:523
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::etaHistScale
virtual double etaHistScale() const override
Definition: FPGATrackSimGenScanBinning.h:564
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
debug
const bool debug
Definition: MakeUncertaintyPlots.cxx:53
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
FPGATrackSimGenScanStdTrkBinning::parSetToTrackPars
virtual const FPGATrackSimTrackPars parSetToTrackPars(const ParSet &parset) const override
Definition: FPGATrackSimGenScanBinning.h:339
FPGATrackSimHit.h
: FPGATrackSim-specific class to represent an hit in the detector.
FPGATrackSimGenScanGeomHelpers
Definition: FPGATrackSimGenScanBinning.h:285
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::m_approxMath
Gaudi::Property< bool > m_approxMath
Definition: FPGATrackSimGenScanBinning.h:555
FPGATrackSimGenScanGeomHelpers::parsToTrkPhi
static double parsToTrkPhi(const FPGATrackSimTrackPars &pars, FPGATrackSimHit const *hit)
Definition: FPGATrackSimGenScanBinning.cxx:228
FPGATrackSimGenScanKeyLyrHelper::getRotatedConfig
rotatedConfig getRotatedConfig(const KeyLyrPars &keypars) const
Definition: FPGATrackSimGenScanBinning.cxx:263
FPGATrackSimGenScanStdTrkBinning::trackParsToParSet
virtual const ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const override
Definition: FPGATrackSimGenScanBinning.h:334
FPGATrackSimGenScanBinningBase::etaShift
double etaShift(const IdxSet &idx, FPGATrackSimHit const *hit, bool debug=false) const
Definition: FPGATrackSimGenScanBinning.h:196
SCT_CalibAlgs::nbins
@ nbins
Definition: SCT_CalibNumbers.h:10
FPGATrackSimTrackPars::IPHI
@ IPHI
Definition: FPGATrackSimTrackPars.h:49
FPGATrackSimGenScanKeyLyrHelper::xExpected
double xExpected(const KeyLyrPars &keypars, const FPGATrackSimHit *hit) const
Definition: FPGATrackSimGenScanBinning.cxx:401
FPGATrackSimGenScanBinningBase::rowBin
virtual unsigned rowBin() const
Definition: FPGATrackSimGenScanBinning.h:202
FPGATrackSimGenScanBinningBase::parsToBin
const IdxSet parsToBin(FPGATrackSimTrackPars &pars) const
Definition: FPGATrackSimGenScanBinning.cxx:38
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::hitInSlice
virtual bool hitInSlice(const IdxSet &idx, FPGATrackSimHit const *hit) const override
Definition: FPGATrackSimGenScanBinning.h:591
FPGATrackSimGenScanKeyLyrBinning::FPGATrackSimGenScanKeyLyrBinning
FPGATrackSimGenScanKeyLyrBinning(const std::string &algname, const std::string &name, const IInterface *ifc)
Definition: FPGATrackSimGenScanBinning.h:465
FPGATrackSimGenScanStdTrkBinning::sliceVarExpected
virtual double sliceVarExpected(const ParSet &pars, FPGATrackSimHit const *hit) const override
Definition: FPGATrackSimGenScanBinning.h:350
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::writeScanConsts
virtual void writeScanConsts([[maybe_unused]] FPGATrackSimGenScanArray< int > &valid) const override
Definition: FPGATrackSimGenScanBinning.h:662
FPGATrackSimGenScanBinningBase::m_parMin
ParSet m_parMin
Definition: FPGATrackSimGenScanBinning.h:267
FPGATrackSimHit::getR
float getR() const
Definition: FPGATrackSimHit.h:143
FPGATrackSimGenScanStdTrkBinning::phiHistScale
virtual double phiHistScale() const override
Definition: FPGATrackSimGenScanBinning.h:332
scan
void scan(TDirectory *td=0, int depth=0)
Definition: listroot.cxx:440
FPGATrackSimGenScanBinningBase::parRange
double parRange(unsigned par) const
Definition: FPGATrackSimGenScanBinning.h:220
FPGATrackSimGenScanStdTrkBinning::scanPars
virtual std::vector< unsigned > scanPars() const override
Definition: FPGATrackSimGenScanBinning.h:329
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::m_rout
Gaudi::Property< double > m_rout
Definition: FPGATrackSimGenScanBinning.h:554
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
FPGATrackSimGenScanBinningBase::parSetToTrackPars
virtual const FPGATrackSimTrackPars parSetToTrackPars(const ParSet &parset) const =0
FPGATrackSimGenScanArray.h
Iterable Multidimensional Array Class for FPGATrackSimGenScanTool.
FPGATrackSimGenScanKeyLyrHelper::deltaX
double deltaX(const KeyLyrPars &keypars, const FPGATrackSimHit *hit) const
Definition: FPGATrackSimGenScanBinning.cxx:387
FPGATrackSimGenScanBinningBase::writeSliceConsts
virtual void writeSliceConsts([[maybe_unused]] FPGATrackSimGenScanArray< int > &valid) const
Definition: FPGATrackSimGenScanBinning.h:164
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
FPGATrackSimGenScanKeyLyrBinning::parSetToTrackPars
virtual const FPGATrackSimTrackPars parSetToTrackPars(const ParSet &parset) const override
Definition: FPGATrackSimGenScanBinning.h:500
FPGATrackSimGenScanBinningBase::binLowEdge
double binLowEdge(unsigned par, unsigned bin) const
Definition: FPGATrackSimGenScanBinning.h:213
FPGATrackSimGenScanKeyLyrHelper::zExpected
double zExpected(const KeyLyrPars &keypars, double r) const
Definition: FPGATrackSimGenScanBinning.cxx:357
FPGATrackSimGenScanBinningBase::StreamManager::writeVar
void writeVar(const std::string &var, T val)
Definition: FPGATrackSimGenScanBinning.cxx:185
FPGATrackSimGenScanBinningBase::rowParIdx
virtual unsigned rowParIdx() const =0
FPGATrackSimGenScanStdTrkBinning::rowParIdx
virtual unsigned rowParIdx() const override
Definition: FPGATrackSimGenScanBinning.h:326
calibdata.copy
bool copy
Definition: calibdata.py:27
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
FPGATrackSimGenScanKeyLyrHelper::rotatedConfig::y
double y
Definition: FPGATrackSimGenScanBinning.h:420
FPGATrackSimGenScanStdTrkBinning::rowPar
virtual double rowPar(const ParSet &pars, FPGATrackSimHit const *hit) const override
Definition: FPGATrackSimGenScanBinning.h:358
FPGATrackSimGenScanBinningBase
Definition: FPGATrackSimGenScanBinning.h:88
FPGATrackSimGenScanStdTrkBinning::etaHistScale
virtual double etaHistScale() const override
Definition: FPGATrackSimGenScanBinning.h:331
FPGATrackSimGenScanBinningBase::ParSet::ParSet
ParSet(const std::vector< double > &val)
Definition: FPGATrackSimGenScanBinning.h:103
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::trackParsToParSet
virtual const ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const override
Definition: FPGATrackSimGenScanBinning.h:576
FPGATrackSimGenScanBinningBase::phiShift
double phiShift(const IdxSet &idx, FPGATrackSimHit const *hit, bool debug=false) const
Definition: FPGATrackSimGenScanBinning.h:195
FPGATrackSimGenScanKeyLyrHelper::m_R1
double m_R1
Definition: FPGATrackSimGenScanBinning.h:450
FPGATrackSimGenScanBinningBase::sliceVarExpected
virtual double sliceVarExpected([[maybe_unused]] const ParSet &pars, [[maybe_unused]] FPGATrackSimHit const *hit) const
Definition: FPGATrackSimGenScanBinning.cxx:171
FPGATrackSimGenScanKeyLyrHelper::trackParsToKeyPars
KeyLyrPars trackParsToKeyPars(const FPGATrackSimTrackPars &pars) const
Definition: FPGATrackSimGenScanBinning.cxx:284
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::parNames
virtual const std::string & parNames(unsigned i) const override
Definition: FPGATrackSimGenScanBinning.h:558
FPGATrackSimGenScanBinningBase::makeVariationSet
std::vector< ParSet > makeVariationSet(const std::vector< unsigned > &scanpars, const IdxSet &idx) const
Definition: FPGATrackSimGenScanBinning.cxx:109
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::slicePars
virtual std::vector< unsigned > slicePars() const override
Definition: FPGATrackSimGenScanBinning.h:560
FPGATrackSimGenScanBinningBase::sliceBins
virtual std::vector< unsigned > sliceBins() const
Definition: FPGATrackSimGenScanBinning.h:199
FPGATrackSimGenScanPhiSlicedKeyLyrBinning::parSetToKeyPars
FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars parSetToKeyPars(const ParSet &parset) const
Definition: FPGATrackSimGenScanBinning.h:571
FPGATrackSimGenScanBinningBase::binCenter
double binCenter(unsigned par, unsigned bin) const
Definition: FPGATrackSimGenScanBinning.h:212
FPGATrackSimGenScanBinningBase::m_parStep
ParSet m_parStep
Definition: FPGATrackSimGenScanBinning.h:269
FPGATrackSimGenScanKeyLyrBinning::slicePars
virtual std::vector< unsigned > slicePars() const override
Definition: FPGATrackSimGenScanBinning.h:482
FPGATrackSimGenScanKeyLyrHelper
Definition: FPGATrackSimGenScanBinning.h:388
FPGATrackSimGenScanKeyLyrBinning::keyparsToParSet
ParSet keyparsToParSet(const FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars &keypars) const
Definition: FPGATrackSimGenScanBinning.h:489
FPGATrackSimTrackPars.h
Structs that store the 5 track parameters.
FPGATrackSimGenScanGeomHelpers::EtaFromTheta
static double EtaFromTheta(double theta)
Definition: FPGATrackSimGenScanBinning.cxx:205
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
FPGATrackSimGenScanBinningBase::binHighEdge
double binHighEdge(unsigned par, unsigned bin) const
Definition: FPGATrackSimGenScanBinning.h:214
FPGATrackSimGenScanGeomHelpers::zFromPars
static double zFromPars(double r, const FPGATrackSimTrackPars &pars)
Definition: FPGATrackSimGenScanBinning.cxx:210
FPGATrackSimGenScanBinningBase::subVec
std::vector< unsigned > subVec(const std::vector< unsigned > &elems, const IdxSet &invec) const
Definition: FPGATrackSimGenScanBinning.cxx:78
FPGATrackSimGenScanKeyLyrBinning::parSetToKeyPars
FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars parSetToKeyPars(const ParSet &parset) const
Definition: FPGATrackSimGenScanBinning.h:493
FPGATrackSimTrackPars::IETA
@ IETA
Definition: FPGATrackSimTrackPars.h:49