Loading [MathJax]/jax/output/SVG/config.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
FPGATrackSimBinTool.cxx
Go to the documentation of this file.
1 // Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
11 
12 FPGATrackSimBinTool::FPGATrackSimBinTool(const std::string &algname, const std::string &name,
13  const IInterface *ifc)
14 : AthAlgTool(algname, name, ifc) {
15 }
16 
17 
18 // ----------------------------------------------------------------------------------------
19 // AthTool Methods
20 // ----------------------------------------------------------------------------------------
21 
23  // Dump the configuration to make sure it propagated through right
24  const std::vector<Gaudi::Details::PropertyBase*> props = this->getProperties();
25  for( Gaudi::Details::PropertyBase* prop : props ) {
26  if (prop->ownerTypeName()==this->type()) {
27  ATH_MSG_DEBUG("Property:\t" << prop->name() << "\t : \t" << prop->toString());
28  }
29  }
30 
31  // Retrieve
32  ATH_MSG_INFO("Using " << m_steps.size() << " steps");
33  ATH_CHECK(m_steps.retrieve());
34 
35  if (m_steps.empty()) {
36  ATH_MSG_FATAL("initialize() Step list empty");
37  return StatusCode::FAILURE;
38  }
39 
40  m_parMin = std::vector<double>(m_parMinConfig);
41  m_parMax = std::vector<double>(m_parMaxConfig);
42 
43  FPGATrackSimBinStep* prev = 0;
44  for (auto &step : m_steps) {
45  ATH_MSG_INFO("Got Binning Step " << step->stepName());
46  m_stepNames.push_back(step->stepName());
47  if (!step->setRanges(prev, m_parMin, m_parMax)) {
48  ATH_MSG_FATAL("Failed to setRange on step");
49  return StatusCode::FAILURE;
50  }
51  prev = step.get();
52  }
53 
54  return StatusCode::SUCCESS;
55 }
56 
57 // ----------------------------------------------------------------------------------------
58 // Other methods
59 // ----------------------------------------------------------------------------------------
60 
62  const ParSet &parset) const {
63  for (unsigned par = 0; par < FPGATrackSimTrackPars::NPARS; par++) {
64  if (!inRange(par,parset[par]))
65  return false;
66  }
67  return true;
68 }
69 
70 // ----------------------------------------------------------------------------------------
71 // Valid Bin Function Implementation
72 // ----------------------------------------------------------------------------------------
73 
74 void FPGATrackSimBinTool::setValidBin(const std::vector<unsigned>& idx) {
76 }
77 
79  for (auto& step: m_steps) step->initValidBins();
80 }
81 
83  for (auto &step : m_steps) {
84  step->printValidBin();
85  }
86 }
87 
88 // Compute which bins correspond to track parameters that are in the region
89 // i.e. the pT, eta, phi, z0 and d0 bounds
91  // determine which bins are valid
92 
93  FPGATrackSimTrackPars min_padded;
94  FPGATrackSimTrackPars max_padded;
101  for (unsigned par = 0; par < FPGATrackSimTrackPars::NPARS; par++)
102  {
103  min_padded[par] = evtSel->getMin()[par] - padding[par] * (evtSel->getMax()[par]-evtSel->getMin()[par]);
104  max_padded[par] = evtSel->getMax()[par] + padding[par] * (evtSel->getMax()[par]-evtSel->getMin()[par]);
106  // working in units of GeV internally
107  min_padded[par] *= 1000;
108  max_padded[par] *= 1000;
109  }
110  ATH_MSG_INFO("Padded Parameter Range: " << FPGATrackSimTrackPars::parName(par)
111  << " min=" << min_padded[par] << " max=" << max_padded[par]);
112  }
113 
114  // iterator over the finest binning used which is the laststep
115  // setting lastSteps valid bins sets all the previous steps
116  auto laststep = lastStep();
117  for (FPGATrackSimBinArray<int>::Iterator bin : laststep->m_validBinFull)
118  {
119  // this finds the parameters at all 2^5 corners of the bin and then finds the min and max of those
120  std::vector<IdxSet> idxsets = FPGATrackSimBinUtil::makeVariationSet(std::vector<unsigned>({0,1,2,3,4}),bin.idx());
121  FPGATrackSimTrackPars minvals = m_binDesc->parSetToTrackPars(laststep->binCenter(bin.idx()));
122  FPGATrackSimTrackPars maxvals = m_binDesc->parSetToTrackPars(laststep->binCenter(bin.idx()));
123  for (IdxSet & idxset : idxsets) {
124  FPGATrackSimTrackPars trackpars = m_binDesc->parSetToTrackPars(laststep->binLowEdge(idxset));
125  for (unsigned par =0; par < FPGATrackSimTrackPars::NPARS; par++) {
126  minvals[par] = std::min(minvals[par],trackpars[par]);
127  maxvals[par] = std::max(maxvals[par],trackpars[par]);
128  }
129  }
130 
131  // make sure bin overlaps with active region
132  bool inRange = true;
133  for (unsigned par =0; par < FPGATrackSimTrackPars::NPARS; par++) {
134  inRange = inRange && (minvals[par] < max_padded[par]) && (maxvals[par] > min_padded[par]);
135  }
136  if (inRange)
137  {
138  setValidBin(bin.idx());
139  }
140 
141  if (bin.data() == false)
142  {
143  ATH_MSG_VERBOSE("Invalid bin: " << bin.idx() << " :" << m_binDesc->parSetToTrackPars(laststep->binCenter(bin.idx()))
144  << " minvals: " << minvals << " maxvals: " << maxvals );
145  }
146  }
147 }
148 
FPGATrackSimTrackPars::IHIP
@ IHIP
Definition: FPGATrackSimTrackPars.h:49
FPGATrackSimBinTool::m_parMin
ParSet m_parMin
Definition: FPGATrackSimBinTool.h:113
FPGATrackSimTrackPars::ID0
@ ID0
Definition: FPGATrackSimTrackPars.h:49
FPGATrackSimBinTool::m_parMax
ParSet m_parMax
Definition: FPGATrackSimBinTool.h:114
FPGATrackSimBinTool::m_d0FractionalPadding
Gaudi::Property< double > m_d0FractionalPadding
Definition: FPGATrackSimBinTool.h:97
getMenu.algname
algname
Definition: getMenu.py:54
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
FPGATrackSimBinStep
Definition: FPGATrackSimBinStep.h:49
FPGATrackSimBinTool::m_stepNames
std::vector< std::string > m_stepNames
Definition: FPGATrackSimBinTool.h:117
FPGATrackSimBinTool::m_binDesc
ToolHandle< IFPGATrackSimBinDesc > m_binDesc
Definition: FPGATrackSimBinTool.h:106
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:99
bin
Definition: BinsDiffFromStripMedian.h:43
IFPGATrackSimEventSelectionSvc
Definition: IFPGATrackSimEventSelectionSvc.h:22
FPGATrackSimBinTool::printValidBin
void printValidBin() const
Definition: FPGATrackSimBinTool.cxx:82
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
FPGATrackSimBinTool::lastStep
FPGATrackSimBinStep * lastStep()
Definition: FPGATrackSimBinTool.h:59
FPGATrackSimBinTool::m_parMaxConfig
Gaudi::Property< std::vector< double > > m_parMaxConfig
Definition: FPGATrackSimBinTool.h:103
dqutils::padding
std::atomic< int > padding
Definition: MonitoringFile_MoveVertexMonitoring.cxx:20
FPGATrackSimBinStep::setValidBin
void setValidBin(const std::vector< unsigned > &idx)
Definition: FPGATrackSimBinStep.cxx:128
FPGATrackSimBinTool::m_phiFractionalPadding
Gaudi::Property< double > m_phiFractionalPadding
Definition: FPGATrackSimBinTool.h:100
FPGATrackSimBinTool::computeValidBins
void computeValidBins(const IFPGATrackSimEventSelectionSvc *evtSel)
Definition: FPGATrackSimBinTool.cxx:90
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::initValidBins
void initValidBins()
Definition: FPGATrackSimBinTool.cxx:78
FPGATrackSimBinTool::inRange
bool inRange(unsigned par, double val) const
Definition: FPGATrackSimBinTool.h:78
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:102
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:74
IFPGATrackSimEventSelectionSvc::getMin
virtual FPGATrackSimTrackPars getMin() const =0
FPGATrackSimBinTool::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimBinTool.cxx:22
FPGATrackSimBinUtil::makeVariationSet
std::vector< IdxSet > makeVariationSet(const std::vector< unsigned > &scanpars, const IdxSet &idx)
Definition: FPGATrackSimBinUtil.cxx:92
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
FPGATrackSimBinTool::m_z0FractionalPadding
Gaudi::Property< double > m_z0FractionalPadding
Definition: FPGATrackSimBinTool.h:98
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:12
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:105
AthAlgTool
Definition: AthAlgTool.h:26
FPGATrackSimBinUtil::IdxSet
Definition: FPGATrackSimBinUtil.h:50
FPGATrackSimBinTool::m_qOverPtFractionalPadding
Gaudi::Property< double > m_qOverPtFractionalPadding
Definition: FPGATrackSimBinTool.h:101
FPGATrackSimTrackPars::IETA
@ IETA
Definition: FPGATrackSimTrackPars.h:49