ATLAS Offline Software
FPGATrackSimBinStep.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 
3 #ifndef FPGATrackSimBinStep_H
4 #define FPGATrackSimBinStep_H
5 
25 
26 
30 
31 #include "GaudiKernel/StatusCode.h"
32 
33 #include <cmath>
34 #include <string>
35 #include <vector>
36 #include <array>
37 
39 
40 //--------------------------------------------------------------------------------------------------
41 //
42 // Class to define the sub steps of the full binning
43 //
44 //--------------------------------------------------------------------------------------------------
45 class FPGATrackSimBinStep : virtual public AthAlgTool {
46 public:
47  FPGATrackSimBinStep(const std::string & algname, const std::string & name,
48  const IInterface * ifc) : AthAlgTool(algname, name, ifc) {}
49 
50  virtual StatusCode initialize() override;
52 
53  // property of step
54  const std::vector<unsigned> stepIdx(FPGATrackSimBinUtil::IdxSet idx) const; // index for only the pars used in this step
55  const std::vector<unsigned> stepBins() const; // bin sizes for only the pars used in this step
56  const std::vector<unsigned>& stepPars() const {return m_pars;} // parameters used for this step
57  const std::vector<unsigned> nBins() const {return m_parBins;} // bin sizes for only the pars used in this step
58  const std::string stepName() const {return this->name().substr(this->name().find_last_of(".")+1);}
59  unsigned stepNum() const {return m_stepNum;}
60 
61  // Calculation of bin boundaries
62  double binCenter(unsigned par, unsigned bin) const { return m_parMin[par] + m_parStep[par] * (double(bin) + 0.5); }
63  double binLowEdge(unsigned par, unsigned bin) const { return m_parMin[par] + m_parStep[par] * (double(bin)); }
64  double binHighEdge(unsigned par, unsigned bin) const { return m_parMin[par] + m_parStep[par] * (double(bin) + 1.0);}
65  double binWidth(unsigned par) const { return m_parStep[par]; }
68 
69  // get bin value for a specific parameter value
70  unsigned binIdx(unsigned par, double val) const {
71  // Guard against both underflow and overflow.
72  if (val < m_parMin[par]) return 0;
73  else if (val > m_parMax[par]) return unsigned(floor((m_parMax[par] - m_parMin[par]) / m_parStep[par])) - 1;
74  else return unsigned(floor((val - m_parMin[par]) / m_parStep[par]));
75  }
76 
77  // convert parset (the binning parameters) to a 5-d bin
79 
80  // Convert to previous steps idx
82 
83  // Check if its the first step
84  bool isFirstStep() const {return m_prev==0;}
85 
86  //--------------------------------------------------------------------------------------------------
87  //
88  // Set which bins are valid
89  //
90  //--------------------------------------------------------------------------------------------------
91  // Which bins are consistent with the (pT, eta, pho, d0, z0)
92  // ranges computed from region definition defined in the eventselection
93  // service or set by the layer map
94  void initValidBins();
95  void setValidBin(const std::vector<unsigned>& idx); // also sets SubBins
96  void printValidBin() const; // dump an output to log for x-checks
99 
100 private:
101  Gaudi::Property<std::vector<unsigned>> m_parBinsConfig{this,"parBins",{},"Vector of number of bins for each parameter (expect 5)"};
102 
103  // pars used in this step
104  std::vector<unsigned> m_pars{};
105 
106  // Array that has a true/false for if a bin is valid
107  // some bins may not be valid because they correspond to (pT,eta,phi,d0,z0)
108  // that are being targeted for reconstruction
109  FPGATrackSimBinArray<int> m_validBinFull; // this is the full binning
110  FPGATrackSimBinArray<int> m_validBinLocal; // this is for the pars used at this step
111 
112  // pointer to FPGATrackSimBinStep of previous step
114  unsigned m_stepNum{}; // number of step
115 
116  // the bins for this step
117  FPGATrackSimBinUtil::IdxSet m_parBins; // one means no binning this step
118  FPGATrackSimBinUtil::ParSet m_parStep; // step size of each bin
119 
120  // reference to the full range defined in the "tool"
123 
125 };
126 
127 #endif // FPGATrackSimBinStep_H
FPGATrackSimBinStep::stepBins
const std::vector< unsigned > stepBins() const
Definition: FPGATrackSimBinStep.cxx:130
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
FPGATrackSimBinStep::binLowEdge
double binLowEdge(unsigned par, unsigned bin) const
Definition: FPGATrackSimBinStep.h:63
FPGATrackSimBinStep::m_parMax
FPGATrackSimBinUtil::ParSet m_parMax
Definition: FPGATrackSimBinStep.h:122
getMenu.algname
algname
Definition: getMenu.py:54
FPGATrackSimBinStep
Definition: FPGATrackSimBinStep.h:45
FPGATrackSimBinStep::binIdx
unsigned binIdx(unsigned par, double val) const
Definition: FPGATrackSimBinStep.h:70
FPGATrackSimBinStep::initValidBins
void initValidBins()
Definition: FPGATrackSimBinStep.cxx:139
FPGATrackSimBinStep::m_parMin
FPGATrackSimBinUtil::ParSet m_parMin
Definition: FPGATrackSimBinStep.h:121
beamspotman.cur
def cur
Definition: beamspotman.py:669
FPGATrackSimBinStep::m_parBins
FPGATrackSimBinUtil::IdxSet m_parBins
Definition: FPGATrackSimBinStep.h:117
FPGATrackSimBinStep::validBinsLocal
const FPGATrackSimBinArray< int > & validBinsLocal() const
Definition: FPGATrackSimBinStep.h:98
FPGATrackSimBinStep::binCenter
double binCenter(unsigned par, unsigned bin) const
Definition: FPGATrackSimBinStep.h:62
FPGATrackSimBinStep::setRanges
StatusCode setRanges(FPGATrackSimBinStep *prev, const FPGATrackSimBinUtil::ParSet &parMin, const FPGATrackSimBinUtil::ParSet &parMax)
Definition: FPGATrackSimBinStep.cxx:32
FPGATrackSimBinStep::binWidth
double binWidth(unsigned par) const
Definition: FPGATrackSimBinStep.h:65
FPGATrackSimBinArray.h
Iterable Multidimensional Array Class for FPGATrackSimBinTool.
bin
Definition: BinsDiffFromStripMedian.h:43
FPGATrackSimBinStep::convertToPrev
FPGATrackSimBinUtil::IdxSet convertToPrev(const FPGATrackSimBinUtil::IdxSet &cur) const
Definition: FPGATrackSimBinStep.cxx:114
FPGATrackSimBinStep::m_validBinFull
FPGATrackSimBinArray< int > m_validBinFull
Definition: FPGATrackSimBinStep.h:109
xAOD::unsigned
unsigned
Definition: RingSetConf_v1.cxx:662
FPGATrackSimBinStep::setValidBin
void setValidBin(const std::vector< unsigned > &idx)
Definition: FPGATrackSimBinStep.cxx:133
FPGATrackSimBinStep::m_parStep
FPGATrackSimBinUtil::ParSet m_parStep
Definition: FPGATrackSimBinStep.h:118
FPGATrackSimBinStep::m_validBinLocal
FPGATrackSimBinArray< int > m_validBinLocal
Definition: FPGATrackSimBinStep.h:110
FPGATrackSimBinTool
Definition: FPGATrackSimBinTool.h:40
FPGATrackSimBinStep::stepIdx
const std::vector< unsigned > stepIdx(FPGATrackSimBinUtil::IdxSet idx) const
Definition: FPGATrackSimBinStep.cxx:127
FPGATrackSimBinStep::stepNum
unsigned stepNum() const
Definition: FPGATrackSimBinStep.h:59
FPGATrackSimBinStep::FPGATrackSimBinTool
friend FPGATrackSimBinTool
Definition: FPGATrackSimBinStep.h:124
FPGATrackSimBinStep::m_pars
std::vector< unsigned > m_pars
Definition: FPGATrackSimBinStep.h:104
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
FPGATrackSimBinUtil.h
Binning Utilities for GenScanTool.
AthAlgTool.h
FPGATrackSimBinStep::printValidBin
void printValidBin() const
Definition: FPGATrackSimBinStep.cxx:144
FPGATrackSimBinStep::m_parBinsConfig
Gaudi::Property< std::vector< unsigned > > m_parBinsConfig
Definition: FPGATrackSimBinStep.h:101
FPGATrackSimBinArray< int >
FPGATrackSimBinStep::stepPars
const std::vector< unsigned > & stepPars() const
Definition: FPGATrackSimBinStep.h:56
FPGATrackSimBinStep::validBinsFull
const FPGATrackSimBinArray< int > & validBinsFull() const
Definition: FPGATrackSimBinStep.h:97
FPGATrackSimBinStep::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimBinStep.cxx:19
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
FPGATrackSimBinUtil::ParSet
Definition: FPGATrackSimBinUtil.h:45
FPGATrackSimBinStep::m_prev
FPGATrackSimBinStep * m_prev
Definition: FPGATrackSimBinStep.h:113
FPGATrackSimBinStep::stepName
const std::string stepName() const
Definition: FPGATrackSimBinStep.h:58
FPGATrackSimBinStep::FPGATrackSimBinStep
FPGATrackSimBinStep(const std::string &algname, const std::string &name, const IInterface *ifc)
Definition: FPGATrackSimBinStep.h:47
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:28
IFPGATrackSimBinDesc.h
Defines Parameters used for binning.
FPGATrackSimBinStep::m_stepNum
unsigned m_stepNum
Definition: FPGATrackSimBinStep.h:114
FPGATrackSimBinStep::binHighEdge
double binHighEdge(unsigned par, unsigned bin) const
Definition: FPGATrackSimBinStep.h:64
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
FPGATrackSimBinStep::isFirstStep
bool isFirstStep() const
Definition: FPGATrackSimBinStep.h:84
AthAlgTool
Definition: AthAlgTool.h:26
FPGATrackSimBinUtil::IdxSet
Definition: FPGATrackSimBinUtil.h:50
FPGATrackSimBinStep::nBins
const std::vector< unsigned > nBins() const
Definition: FPGATrackSimBinStep.h:57