ATLAS Offline Software
FPGATrackSimBinTool.cxx
Go to the documentation of this file.
1 // Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 
11 
14 
15 FPGATrackSimBinTool::FPGATrackSimBinTool(const std::string &algname, const std::string &name,
16  const IInterface *ifc)
17 : AthAlgTool(algname, name, ifc) {
18 }
19 
20 
21 // ----------------------------------------------------------------------------------------
22 // AthTool Methods
23 // ----------------------------------------------------------------------------------------
24 
26  // Dump the configuration to make sure it propagated through right
27  const std::vector<Gaudi::Details::PropertyBase*> props = this->getProperties();
28  for( Gaudi::Details::PropertyBase* prop : props ) {
29  if (prop->ownerTypeName()==this->type()) {
30  ATH_MSG_DEBUG("Property:\t" << prop->name() << "\t : \t" << prop->toString());
31  }
32  }
33 
34  // Retrieve
35  ATH_MSG_INFO("Using " << m_steps.size() << " steps");
36  ATH_CHECK(m_steps.retrieve());
37 
38  if (m_steps.empty()) {
39  ATH_MSG_FATAL("initialize() Step list empty");
40  return StatusCode::FAILURE;
41  }
42 
43  m_parMin = std::vector<double>(m_parMinConfig);
44  m_parMax = std::vector<double>(m_parMaxConfig);
45 
46  FPGATrackSimBinStep* prev = 0;
47  for (auto &step : m_steps) {
48  ATH_MSG_INFO("Got Binning Step " << step->stepName());
49  m_stepNames.push_back(step->stepName());
50  if (!step->setRanges(prev, m_parMin, m_parMax)) {
51  ATH_MSG_FATAL("Failed to setRange on step");
52  return StatusCode::FAILURE;
53  }
54  prev = step.get();
55  }
56 
57  ATH_MSG_DEBUG("Finished initializing BinTool");
58 
59  return StatusCode::SUCCESS;
60 }
61 
62 // ----------------------------------------------------------------------------------------
63 // Other methods
64 // ----------------------------------------------------------------------------------------
65 
67  const ParSet &parset) const {
68  for (unsigned par = 0; par < FPGATrackSimTrackPars::NPARS; par++) {
69  if (!inRange(par,parset[par]))
70  return false;
71  }
72  return true;
73 }
74 
75 // ----------------------------------------------------------------------------------------
76 // Valid Bin Function Implementation
77 // ----------------------------------------------------------------------------------------
78 
79 void FPGATrackSimBinTool::setValidBin(const std::vector<unsigned>& idx) {
81 }
82 
84  for (auto& step: m_steps) step->initValidBins();
85 }
86 
88  for (auto &step : m_steps) {
89  step->printValidBin();
90  }
91 }
92 
93 // Compute which bins correspond to track parameters that are in the region
94 // i.e. the pT, eta, phi, z0 and d0 bounds
96  // determine which bins are valid
97 
98  FPGATrackSimTrackPars min_padded;
99  FPGATrackSimTrackPars max_padded;
106  for (unsigned par = 0; par < FPGATrackSimTrackPars::NPARS; par++)
107  {
108  min_padded[par] = evtSel->getMin()[par] - padding[par] * (evtSel->getMax()[par]-evtSel->getMin()[par]);
109  max_padded[par] = evtSel->getMax()[par] + padding[par] * (evtSel->getMax()[par]-evtSel->getMin()[par]);
111  // working in units of GeV internally
112  min_padded[par] *= 1000;
113  max_padded[par] *= 1000;
114  }
115  ATH_MSG_INFO("Padded Parameter Range: " << FPGATrackSimTrackPars::parName(par)
116  << " min=" << min_padded[par] << " max=" << max_padded[par]);
117  }
118 
119  // iterator over the finest binning used which is the laststep
120  // setting lastSteps valid bins sets all the previous steps
121  auto laststep = lastStep();
122  for (FPGATrackSimBinArray<int>::Iterator bin : laststep->m_validBinFull)
123  {
124  // this finds the parameters at all 2^5 corners of the bin and then finds the min and max of those
125  std::vector<IdxSet> idxsets = FPGATrackSimBinUtil::makeVariationSet(std::vector<unsigned>({0,1,2,3,4}),bin.idx());
126  FPGATrackSimTrackPars minvals = m_binDesc->parSetToTrackPars(laststep->binCenter(bin.idx()));
127  FPGATrackSimTrackPars maxvals = m_binDesc->parSetToTrackPars(laststep->binCenter(bin.idx()));
128  for (IdxSet & idxset : idxsets) {
129  FPGATrackSimTrackPars trackpars = m_binDesc->parSetToTrackPars(laststep->binLowEdge(idxset));
130  for (unsigned par =0; par < FPGATrackSimTrackPars::NPARS; par++) {
131  minvals[par] = std::min(minvals[par],trackpars[par]);
132  maxvals[par] = std::max(maxvals[par],trackpars[par]);
133  }
134  }
135 
136  // make sure bin overlaps with active region
137  bool inRange = true;
138  for (unsigned par =0; par < FPGATrackSimTrackPars::NPARS; par++) {
139  inRange = inRange && (minvals[par] < max_padded[par]) && (maxvals[par] > min_padded[par]);
140  }
141  if (inRange)
142  {
143  setValidBin(bin.idx());
144  }
145 
146  if (bin.data() == false)
147  {
148  ATH_MSG_VERBOSE("Invalid bin: " << bin.idx() << " :" << m_binDesc->parSetToTrackPars(laststep->binCenter(bin.idx()))
149  << " minvals: " << minvals << " maxvals: " << maxvals );
150  }
151  }
152 }
153 
155 {
156  ParSet parset;
157  for (unsigned i = 0; i < FPGATrackSimTrackPars::NPARS; i++)
158  {
159  parset[i] = parCenter(i);
160  }
161  return parset;
162 }
163 
164 // ----------------------------------------------------------------------------------------
165 // Write Firmware LUTs (constants)
166 // ----------------------------------------------------------------------------------------
168  for (const auto &step : m_steps) {
169  m_binDesc->writeLUTs(*step.get());
170  }
171 }
FPGATrackSimTrackPars::IHIP
@ IHIP
Definition: FPGATrackSimTrackPars.h:49
FPGATrackSimTrackPars::ID0
@ ID0
Definition: FPGATrackSimTrackPars.h:49
FPGATrackSimBinTool::m_d0FractionalPadding
Gaudi::Property< double > m_d0FractionalPadding
Definition: FPGATrackSimBinTool.h:103
getMenu.algname
algname
Definition: getMenu.py:54
FPGATrackSimBinTool::writeLUTs
void writeLUTs() const
Definition: FPGATrackSimBinTool.cxx:167
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
FPGATrackSimBinTool::m_parMin
FPGATrackSimBinUtil::ParSet m_parMin
Definition: FPGATrackSimBinTool.h:119
FPGATrackSimBinStep
Definition: FPGATrackSimBinStep.h:45
FPGATrackSimBinTool::m_stepNames
std::vector< std::string > m_stepNames
Definition: FPGATrackSimBinTool.h:123
FPGATrackSimBinTool::m_binDesc
ToolHandle< IFPGATrackSimBinDesc > m_binDesc
Definition: FPGATrackSimBinTool.h:112
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
FPGATrackSimTrackPars
Definition: FPGATrackSimTrackPars.h:22
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
FPGATrackSimTrackPars::IZ0
@ IZ0
Definition: FPGATrackSimTrackPars.h:49
FPGATrackSimBinTool.h
Binning Classes for BinTool.
FPGATrackSimBinTool::m_etaFractionalPadding
Gaudi::Property< double > m_etaFractionalPadding
Definition: FPGATrackSimBinTool.h:105
bin
Definition: BinsDiffFromStripMedian.h:43
IFPGATrackSimEventSelectionSvc
Definition: IFPGATrackSimEventSelectionSvc.h:22
FPGATrackSimBinTool::center
FPGATrackSimBinUtil::ParSet center() const
Definition: FPGATrackSimBinTool.cxx:154
FPGATrackSimBinTool::printValidBin
void printValidBin() const
Definition: FPGATrackSimBinTool.cxx:87
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
FPGATrackSimBinTool::lastStep
FPGATrackSimBinStep * lastStep()
Definition: FPGATrackSimBinTool.h:56
FPGATrackSimBinTool::m_parMaxConfig
Gaudi::Property< std::vector< double > > m_parMaxConfig
Definition: FPGATrackSimBinTool.h:109
dqutils::padding
std::atomic< int > padding
Definition: MonitoringFile_MoveVertexMonitoring.cxx:20
FPGATrackSimBinStep::setValidBin
void setValidBin(const std::vector< unsigned > &idx)
Definition: FPGATrackSimBinStep.cxx:133
FPGATrackSimBinTool::m_phiFractionalPadding
Gaudi::Property< double > m_phiFractionalPadding
Definition: FPGATrackSimBinTool.h:106
lumiFormat.i
int i
Definition: lumiFormat.py:85
FPGATrackSimBinTool::computeValidBins
void computeValidBins(const IFPGATrackSimEventSelectionSvc *evtSel)
Definition: FPGATrackSimBinTool.cxx:95
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
FPGATrackSimBinTool::parCenter
double parCenter(unsigned par) const
Definition: FPGATrackSimBinTool.h:71
FPGATrackSimBinTool::initValidBins
void initValidBins()
Definition: FPGATrackSimBinTool.cxx:83
FPGATrackSimBinTool::inRange
bool inRange(unsigned par, double val) const
Definition: FPGATrackSimBinTool.h:81
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
FPGATrackSimBinArray
Definition: FPGATrackSimBinArray.h:41
FPGATrackSimBinUtil::ParSet
Definition: FPGATrackSimBinUtil.h:45
FPGATrackSimBinTool::m_parMinConfig
Gaudi::Property< std::vector< double > > m_parMinConfig
Definition: FPGATrackSimBinTool.h:108
inRange
bool inRange(const double *boundaries, const double value, const double tolerance=0.02)
Definition: LArSCIdVsIdTest.cxx:5
FPGATrackSimBinTool::setValidBin
void setValidBin(const std::vector< unsigned > &idx)
Definition: FPGATrackSimBinTool.cxx:79
IFPGATrackSimEventSelectionSvc::getMin
virtual FPGATrackSimTrackPars getMin() const =0
FPGATrackSimBinTool::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimBinTool.cxx:25
FPGATrackSimBinUtil::makeVariationSet
std::vector< IdxSet > makeVariationSet(const std::vector< unsigned > &scanpars, const IdxSet &idx)
Definition: FPGATrackSimBinUtil.cxx:93
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:28
FPGATrackSimBinTool::m_z0FractionalPadding
Gaudi::Property< double > m_z0FractionalPadding
Definition: FPGATrackSimBinTool.h:104
FPGATrackSimTrackPars::parName
static std::string parName(unsigned i)
Definition: FPGATrackSimTrackPars.cxx:72
FPGATrackSimTrackPars::IPHI
@ IPHI
Definition: FPGATrackSimTrackPars.h:49
FPGATrackSimBinTool::FPGATrackSimBinTool
FPGATrackSimBinTool(const std::string &algname, const std::string &name, const IInterface *ifc)
Definition: FPGATrackSimBinTool.cxx:15
FPGATrackSimTrackPars::NPARS
@ NPARS
Definition: FPGATrackSimTrackPars.h:49
IFPGATrackSimEventSelectionSvc::getMax
virtual FPGATrackSimTrackPars getMax() const =0
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
LArCellBinning.step
step
Definition: LArCellBinning.py:158
FPGATrackSimBinTool::m_steps
ToolHandleArray< FPGATrackSimBinStep > m_steps
Definition: FPGATrackSimBinTool.h:111
AthAlgTool
Definition: AthAlgTool.h:26
FPGATrackSimBinUtil::IdxSet
Definition: FPGATrackSimBinUtil.h:50
FPGATrackSimBinTool::m_parMax
FPGATrackSimBinUtil::ParSet m_parMax
Definition: FPGATrackSimBinTool.h:120
FPGATrackSimBinTool::m_qOverPtFractionalPadding
Gaudi::Property< double > m_qOverPtFractionalPadding
Definition: FPGATrackSimBinTool.h:107
FPGATrackSimTrackPars::IETA
@ IETA
Definition: FPGATrackSimTrackPars.h:49