ATLAS Offline Software
PhiHoughTransformAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "PhiHoughTransformAlg.h"
6 
8 
9 
14 
15 namespace {
16  constexpr double resetVal = 1.e10;
17 }
18 
19 
20 namespace MuonR4{
21 using namespace SegmentFit;
22 
24  ISvcLocator* pSvcLocator)
25  : AthReentrantAlgorithm(name, pSvcLocator) {}
26 
29  ATH_CHECK(m_maxima.initialize());
30  ATH_CHECK(m_segmentSeeds.initialize());
31  ATH_CHECK(m_visionTool.retrieve(EnableTool{!m_visionTool.empty()}));
32  return StatusCode::SUCCESS;
33 }
34 
35 template <class ContainerType>
38  const ContainerType*& contToPush) const {
39  contToPush = nullptr;
40  if (key.empty()) {
41  ATH_MSG_VERBOSE("No key has been parsed for object "
42  << typeid(ContainerType).name());
43  return StatusCode::SUCCESS;
44  }
45  SG::ReadHandle readHandle{key, ctx};
46  ATH_CHECK(readHandle.isPresent());
47  contToPush = readHandle.cptr();
48  return StatusCode::SUCCESS;
49 }
50 
52  HoughPlaneConfig cfg;
53  cfg.nBinsX = m_nBinsTanPhi;
54  cfg.nBinsY = m_nBinsIntercept;
55  // configure the peak finder for the phi-extension.
56  // Expect "shallow" maxima with 2-3 hits.
57  ActsPeakFinderForMuonCfg peakFinderCfg;
58  peakFinderCfg.fractionCutoff = 0.4;
59  peakFinderCfg.threshold = 2; // 2D spacepoints receive a weight of 2
60  peakFinderCfg.minSpacingBetweenPeaks = {0., 30.};
61  data.houghPlane = std::make_unique<HoughPlane>(cfg);
62  data.peakFinder = std::make_unique<ActsPeakFinderForMuon>(peakFinderCfg);
63 }
64 
65 int PhiHoughTransformAlg::countIncompatibleEtaHits(const ActsPeakFinderForMuon::Maximum& phiMaximum,
66  const HoughMaximum& etaMaximum) const {
67  std::unordered_map<const xAOD::UncalibratedMeasurement*, bool> foundEtas;
68  // loop over the original eta maximum and check all hits measuring the eta-coordinate
69  for (auto& hit : etaMaximum.getHitsInMax()) {
70  if (hit->measuresEta() && hit->measuresPhi()) {
71  auto [iter, added] = foundEtas.emplace(hit->primaryMeasurement(), false);
72  // test if the PRD for the eta-measurement appears on at least
73  // one space point of this phi extension.
74  // This will be done for all space points containing the eta-PRD
75  iter->second |= phiMaximum.hitIdentifiers.count(hit);
76  }
77  }
78  // count the number of eta PRD not compatible with this extension.
79  return std::count_if(foundEtas.begin(), foundEtas.end(),
80  [](const std::pair<const xAOD::UncalibratedMeasurement*, bool>& p) {
81  return !p.second;
82  });
83 }
84 std::unique_ptr<SegmentSeed>
86  const ActsPeakFinderForMuon::Maximum & phiMax) const {
87  // book a new hit list
88  std::vector<HoughHitType> hitsOnMax;
89  // copy the pure eta hits onto the hit list
90  std::copy_if(etaMax.getHitsInMax().begin(), etaMax.getHitsInMax().end(), std::back_inserter(hitsOnMax), [](const HoughHitType &hit){
91  return (hit->measuresEta() && !hit->measuresPhi());
92  });
93  // and then add all hits (2D and pure phi) from the phi-extension to it
94  hitsOnMax.insert(hitsOnMax.end(), phiMax.hitIdentifiers.begin(), phiMax.hitIdentifiers.end());
95  // use this to construct the segment seed
96  sortByLayer(hitsOnMax);
97  return std::make_unique<SegmentSeed>(etaMax.tanTheta(), etaMax.interceptY(), phiMax.x, phiMax.y, hitsOnMax.size(), std::move(hitsOnMax), etaMax.parentBucket());
98 }
99 
101  const HoughMaximum & maximum,
102  HoughEventData& eventData) const{
103  // reset the event data
104  eventData.phiHitsOnMax = 0;
105  eventData.searchSpaceTanAngle = std::make_pair(resetVal, -resetVal);
106  eventData.searchSpaceIntercept = std::make_pair(resetVal, -resetVal);
107  // loop over the measurements on the maximum
108  for (auto hit : maximum.getHitsInMax()) {
109  // reject the pure eta measurements - not relevant here
110  if (!hit->measuresPhi()) {
111  continue;
112  }
113  // find the direction of the IP viewed from the sector frame
114  const Amg::Vector3D extrapDir = (hit->positionInChamber() - hit->msSector()->globalToLocalTrans(gctx).translation()).unit();
115  ATH_MSG_VERBOSE("Direction "<<Amg::toString(extrapDir));
116  // express the x location of our phi hits on the chamber plane (z = 0) when projecting from the beam spot
117  std::optional<double> dummyIntercept = Amg::intersect<3>(hit->positionInChamber(), extrapDir, Amg::Vector3D::UnitZ(),0);
118  double x0 = (hit->positionInChamber() + dummyIntercept.value_or(0) * extrapDir).x();
119  // now we can obtain the most likely tan(phi) via the pointing vector from the origin to our hit
120  double tanPhi = houghTanPhi(extrapDir);
121  // update our search space with this info
122  eventData.updateSearchWindow(eventData.searchSpaceTanAngle, tanPhi);
123  eventData.updateSearchWindow(eventData.searchSpaceIntercept, x0);
124  // and increment the hit counter
125  ++eventData.phiHitsOnMax;
126  }
127  // now use the results from the individual hits to define an axis range adapted to the binning we desire
128  double chamberCenter = (eventData.searchSpaceIntercept.second + eventData.searchSpaceIntercept.first) * 0.5;
129  double searchStart = chamberCenter - 0.5 * eventData.houghPlane->nBinsY() * m_targetResoIntercept;
130  double searchEnd = chamberCenter + 0.5 * eventData.houghPlane->nBinsY() * m_targetResoIntercept;
131  // Protection for very wide buckets - if the search space does not cover all of the bucket, widen the bin size
132  // so that we cover everything
133  searchStart = std::min(searchStart, eventData.searchSpaceIntercept.first- m_minSigmasSearchIntercept * m_targetResoIntercept);
134  searchEnd = std::max(searchEnd, eventData.searchSpaceIntercept.second + m_minSigmasSearchIntercept * m_targetResoIntercept);
135  // also treat tan(phi)
136  double tanPhiMean = 0.5 * (eventData.searchSpaceTanAngle.first + eventData.searchSpaceTanAngle.second);
137  double searchStartTanPhi = tanPhiMean - 0.5 * eventData.houghPlane->nBinsX() * m_targetResoTanPhi;
138  double searchEndTanPhi = tanPhiMean + 0.5* eventData.houghPlane->nBinsX() * m_targetResoTanPhi;
139  searchStartTanPhi = std::min(searchStartTanPhi, eventData.searchSpaceTanAngle.first- m_minSigmasSearchTanPhi * m_targetResoTanPhi);
140  searchEndTanPhi = std::max(searchEndTanPhi, eventData.searchSpaceTanAngle.second + m_minSigmasSearchTanPhi * m_targetResoTanPhi);
141 
142  // and update the axis ranges for the search space according to our results
143  eventData.currAxisRanges =
144  Acts::HoughTransformUtils::HoughAxisRanges{searchStartTanPhi, searchEndTanPhi, searchStart, searchEnd};
145  ATH_MSG_VERBOSE("Accumulator search window: tanPhi: ["<<searchStartTanPhi<<";"<<searchEndTanPhi<<"], x0: ["
146  <<searchStart<<";"<<searchEnd<<"]");
147 }
148 
149 std::vector<ActsPeakFinderForMuon::Maximum>
151  HoughEventData & eventData, const HoughMaximum & maximum) const{
152  std::unordered_map<int, std::vector<ActsPeakFinderForMuon::Maximum>> rankedSeeds;
153  using namespace std::placeholders;
154  // reset the accumulator
155  eventData.houghPlane->reset();
156  // fill the accumulator with the phi measurements
157  for (auto hit : maximum.getHitsInMax()){
158  if (!hit->measuresPhi()) {
159  ATH_MSG_VERBOSE("Hit "<<hit->msSector()->idHelperSvc()->toString(hit->identify())<<" does not have a phi measurement");
160  continue;
161  }
162  ATH_MSG_VERBOSE("Fill hit "<<hit->msSector()->idHelperSvc()->toString(hit->identify())<<", "<<Amg::toString(hit->positionInChamber()));
163  eventData.houghPlane->fill<HoughHitType>(
164  hit, eventData.currAxisRanges,
166  std::bind(HoughHelpers::Phi::houghWidthStrip, _1, _2, m_targetResoIntercept), hit, 0,
167  // up-weigh 2D spacepoints w.r.t 1D phi hits to prevent
168  // discarding measurements known to be compatible in eta
169  (hit->measuresEta() ? 2.0 : 1.0) / (m_downWeightMultiplePrd? hit->nPhiInstanceCounts() : 1)
170  );
171  }
172  // run the peak finder
173  auto foundMaxPhi = eventData.peakFinder->findPeaks(*eventData.houghPlane, eventData.currAxisRanges);
174  if (m_visionTool.isEnabled()) {
175  m_visionTool->visualizeAccumulator(ctx,*eventData.houghPlane, eventData.currAxisRanges, foundMaxPhi,
176  "#phi accumulator");
177  }
178  // now rank the found peaks by the number of eta-compatible PRDs they would discard.
179  for (const auto& solution : foundMaxPhi) {
180  // for each solution, count how many eta PRDs would not be compatible with this phi extension.
181  // rank by the lowest number of such "holes".
182  rankedSeeds[countIncompatibleEtaHits(solution, maximum)].push_back(solution);
183  }
184  // return only the best solution(s)
185  auto best = rankedSeeds.begin();
186  // and apply the maximum hole cut.
187  if (best != rankedSeeds.end() && best->first <= m_maxEtaHolesOnMax){
188  return best->second;
189  }
190  return {};
191 }
192 std::unique_ptr<SegmentSeed>
194  // recovers cases of a single phi hit assuming a straight
195  // line extrapolation from the beam line to the phi measurement
196  std::vector<HoughHitType> hits{maximum.getHitsInMax()};
197  sortByLayer(hits);
198  return std::make_unique<SegmentSeed>(maximum.tanTheta(), maximum.interceptY(),
199  data.searchSpaceTanAngle.first,
200  data.searchSpaceIntercept.first,
201  maximum.getCounts(),
202  std::move(hits), maximum.parentBucket());
203 
204 }
205 
206 
207 StatusCode PhiHoughTransformAlg::execute(const EventContext& ctx) const {
208 
209  // read the inputs
210  const EtaHoughMaxContainer* maxima{nullptr};
211  ATH_CHECK(retrieveContainer(ctx, m_maxima, maxima));
212 
213  const ActsGeometryContext* gctx{nullptr};
215 
216  // book the event data object
217  HoughEventData eventData{};
218 
219  // prepare the accumulator
220  prepareHoughPlane(eventData);
221 
222  // prepare our output collection
223  SG::WriteHandle writeMaxima{m_segmentSeeds, ctx};
224  ATH_CHECK(writeMaxima.record(std::make_unique<SegmentSeedContainer>()));
225 
226  // loop over the previously found eta-maxima for each station
227  for (const HoughMaximum* max : *maxima) {
228  // for each maximum, pre-process
229  ATH_MSG_VERBOSE("Search extra phi hits on maximum "<<max->msSector()->identString()<<", tanTheta: "<<max->tanTheta()
230  <<", y0: "<<max->interceptY());
231  if (m_visionTool.isEnabled() && msgLvl(MSG::VERBOSE)) {
232  for (const auto& truth : m_visionTool->getLabeledSegments(max->getHitsInMax())) {
233  const Parameters truthPars = localSegmentPars(*truth);
234  ATH_MSG_VERBOSE("Truth parameters "<<toString(truthPars)<<", tanPhi: "
236  }
237  }
238  preProcessMaximum(*gctx, *max, eventData);
239  bool foundSolution=false;
240  // if we have enough hits, run a phi transform
241  if (eventData.phiHitsOnMax > 1){
242  std::vector<ActsPeakFinderForMuon::Maximum> rankedSeeds = findRankedSegmentSeeds(ctx, eventData, *max);
243  for (auto & phiSolution : rankedSeeds){
244  foundSolution = true;
245  const SegmentSeed* seed {writeMaxima->push_back(buildSegmentSeed(*max, phiSolution))};
246  if (m_visionTool.isEnabled()) {
247  m_visionTool->visualizeSeed(ctx, *seed, "#phi pattern seed");
248  }
249  }
250  }
251  ATH_MSG_VERBOSE("Solution found: "<<foundSolution);
252  // if we do not have at least two phi-hits for a proper transform:
253  if (!foundSolution){
254  // if we have a single phi hit, we can approximate the phi
255  // solution using the beam spot (as the IP is far).
256  // This is steered by a flag, and not appropriate for splashes
257  // or cosmics.
258  if (m_recoverSinglePhiWithBS && eventData.phiHitsOnMax == 1){
259  const SegmentSeed* singleMax{writeMaxima->push_back(recoverSinglePhiMax(eventData,*max))};
260  if (m_visionTool.isEnabled()) {
261  m_visionTool->visualizeSeed(ctx, *singleMax, "Single #phi hit recovery");
262  }
263  }
264  // otherwise we have no phi-solution, and we fall back to writing a 1D eta-maximum
265  else{
266  writeMaxima->push_back(std::make_unique<SegmentSeed>(*max));
267  }
268  }
269  }
270  // add the maxima for this station to the output
271 
272  return StatusCode::SUCCESS;
273 }
274 }
MuonR4::PhiHoughTransformAlg::m_segmentSeeds
SG::WriteHandleKey< SegmentSeedContainer > m_segmentSeeds
Definition: PhiHoughTransformAlg.h:101
MuonR4::PhiHoughTransformAlg::buildSegmentSeed
std::unique_ptr< SegmentSeed > buildSegmentSeed(const HoughMaximum &etaMax, const MuonR4::ActsPeakFinderForMuon::Maximum &phiMax) const
constructs a segment seed from an eta maximum and a phi-extension.
Definition: PhiHoughTransformAlg.cxx:85
MuonR4::PhiHoughTransformAlg::prepareHoughPlane
void prepareHoughPlane(HoughEventData &data) const
prepare the hough plane once per event.
Definition: PhiHoughTransformAlg.cxx:51
MuonR4::PhiHoughTransformAlg::PhiHoughTransformAlg
PhiHoughTransformAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: PhiHoughTransformAlg.cxx:23
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
MuonR4::PhiHoughTransformAlg::initialize
virtual StatusCode initialize() override
Definition: PhiHoughTransformAlg.cxx:27
MuonR4::HoughMaximum::tanTheta
double tanTheta() const
getter
Definition: HoughMaximum.h:36
TRTCalib_Extractor.hits
hits
Definition: TRTCalib_Extractor.py:35
MuonR4::PhiHoughTransformAlg::m_targetResoIntercept
DoubleProperty m_targetResoIntercept
Definition: PhiHoughTransformAlg.h:110
MuonR4::HoughEventData_impl::peakFinder
std::unique_ptr< peakFinder_t > peakFinder
Definition: HoughEventData.h:37
MuonR4::SegmentFit::Parameters
AmgVector(toInt(ParamDefs::nPars)) Parameters
Definition: MuonHoughDefs.h:48
MuonR4::HoughEventData_impl::phiHitsOnMax
size_t phiHitsOnMax
Definition: HoughEventData.h:67
MuonR4::HoughEventData_impl::searchSpaceTanAngle
std::pair< double, double > searchSpaceTanAngle
Definition: HoughEventData.h:65
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
MuonR4::PhiHoughTransformAlg::m_geoCtxKey
SG::ReadHandleKey< ActsGeometryContext > m_geoCtxKey
Definition: PhiHoughTransformAlg.h:104
MuonR4::PhiHoughTransformAlg::m_targetResoTanPhi
DoubleProperty m_targetResoTanPhi
Definition: PhiHoughTransformAlg.h:108
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
EventPrimitivesHelpers.h
MuonR4::PhiHoughTransformAlg::m_nBinsTanPhi
IntegerProperty m_nBinsTanPhi
Definition: PhiHoughTransformAlg.h:120
MuonR4::PhiHoughTransformAlg::m_minSigmasSearchIntercept
DoubleProperty m_minSigmasSearchIntercept
Definition: PhiHoughTransformAlg.h:116
HoughHelperFunctions.h
xAOD::etaMax
etaMax
Definition: HIEventShape_v2.cxx:46
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
MuonR4::HoughHelpers::Phi::houghParamStrip
double houghParamStrip(double tanPhi, const MuonR4::HoughHitType &dc)
straight line parametrisation for strip detector measurements, in the x-direction
Definition: HoughHelperFunctions.cxx:31
MuonR4::ActsPeakFinderForMuonCfg
Acts::HoughTransformUtils::PeakFinders::IslandsAroundMaxConfig ActsPeakFinderForMuonCfg
Definition: MuonHoughDefs.h:26
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::ReadHandleKey< ContainerType >
MuonR4::PhiHoughTransformAlg::m_nBinsIntercept
IntegerProperty m_nBinsIntercept
Definition: PhiHoughTransformAlg.h:122
SpectrometerSector.h
x
#define x
MuonR4::HoughMaximum::getHitsInMax
const std::vector< HitType > & getHitsInMax() const
getter
Definition: HoughMaximum.h:46
MuonR4::toString
std::string toString(const CalibratedSpacePoint::Covariance_t &mat)
Returns the matrix in string.
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonSpacePoint/src/UtilFunctions.cxx:75
MuonR4::PhiHoughTransformAlg::m_visionTool
ToolHandle< MuonValR4::IPatternVisualizationTool > m_visionTool
Pattern visualization tool.
Definition: PhiHoughTransformAlg.h:106
MuonR4::SegmentFit::ParamDefs::phi
@ phi
MuonR4::sortByLayer
void sortByLayer(std::vector< const SpacePoint * > &spacePoints)
Sorts the space points in a vector by z.
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonSpacePoint/src/UtilFunctions.cxx:80
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
MuonR4::houghTanPhi
double houghTanPhi(const Amg::Vector3D &v)
: Returns the hough tanPhi [x] / [z]
Definition: SegmentFitterEventData.cxx:18
MuonR4::PhiHoughTransformAlg::countIncompatibleEtaHits
int countIncompatibleEtaHits(const MuonR4::ActsPeakFinderForMuon::Maximum &phiMaximum, const MuonR4::HoughMaximum &etaMaximum) const
helper to count the number of eta measurements that would be discarded for a given phi extension cand...
Definition: PhiHoughTransformAlg.cxx:65
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
MuonR4::HoughHelpers::Phi::houghWidthStrip
double houghWidthStrip(double tanPhi, const MuonR4::HoughHitType &dc, double targetReso)
Uncertainty parametrisation for strip measurements.
Definition: HoughHelperFunctions.cxx:34
MuonR4::HoughEventData_impl::searchSpaceIntercept
std::pair< double, double > searchSpaceIntercept
Definition: HoughEventData.h:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
UtilFunctions.h
MuonR4::HoughMaximum::parentBucket
const SpacePointBucket * parentBucket() const
getter
Definition: HoughMaximum.h:51
MuonR4::PhiHoughTransformAlg::m_minSigmasSearchTanPhi
DoubleProperty m_minSigmasSearchTanPhi
Definition: PhiHoughTransformAlg.h:113
python.utils.best
def best(iterable, priorities=[3, 2, 1, -1, 0])
Definition: DataQuality/DQUtils/python/utils.py:50
AnalysisUtils::copy_if
Out copy_if(In first, const In &last, Out res, const Pred &p)
Definition: IFilterUtils.h:30
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
MuonR4::HoughEventData_impl::currAxisRanges
Acts::HoughTransformUtils::HoughAxisRanges currAxisRanges
Definition: HoughEventData.h:61
MuonR4::SegmentFit::ParamDefs::x0
@ x0
MuonR4::PhiHoughTransformAlg::findRankedSegmentSeeds
std::vector< MuonR4::ActsPeakFinderForMuon::Maximum > findRankedSegmentSeeds(const EventContext &ctx, HoughEventData &data, const MuonR4::HoughMaximum &maximum) const
perform a hough search for the most promising phi extension of an eta-maximum Performs a local hough ...
Definition: PhiHoughTransformAlg.cxx:150
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:27
MuonR4::SpacePoint
The muon space point is the combination of two uncalibrated measurements one of them measures the eta...
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonSpacePoint/MuonSpacePoint/SpacePoint.h:18
MuonR4::PhiHoughTransformAlg::m_maxEtaHolesOnMax
IntegerProperty m_maxEtaHolesOnMax
Definition: PhiHoughTransformAlg.h:125
PhiHoughTransformAlg.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
MuonR4::PhiHoughTransformAlg::m_recoverSinglePhiWithBS
BooleanProperty m_recoverSinglePhiWithBS
Definition: PhiHoughTransformAlg.h:128
MuonR4::SegmentFit::toInt
constexpr int toInt(const ParamDefs p)
Definition: MuonHoughDefs.h:42
MuonR4::HoughMaximum::getCounts
double getCounts() const
getter
Definition: HoughMaximum.h:43
WriteCaloSwCorrections.cfg
cfg
Definition: WriteCaloSwCorrections.py:23
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonR4::PhiHoughTransformAlg::preProcessMaximum
void preProcessMaximum(const ActsGeometryContext &gctx, const MuonR4::HoughMaximum &maximum, HoughEventData &data) const
pre-processing for a given input eta-maximum Counts potential phi-hits and defines the search space
Definition: PhiHoughTransformAlg.cxx:100
Amg::dirFromAngles
Amg::Vector3D dirFromAngles(const double phi, const double theta)
Constructs a direction vector from the azimuthal & polar angles.
Definition: GeoPrimitivesHelpers.h:299
MuonR4
This header ties the generic definitions in this package.
Definition: HoughEventData.h:16
MuonR4::PhiHoughTransformAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: PhiHoughTransformAlg.cxx:207
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
MuonR4::HoughMaximum
Data class to represent an eta maximum in hough space.
Definition: HoughMaximum.h:14
MuonR4::PhiHoughTransformAlg::m_maxima
SG::ReadHandleKey< EtaHoughMaxContainer > m_maxima
Definition: PhiHoughTransformAlg.h:99
SegmentFitterEventData.h
unit
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
Definition: AmgMatrixBasePlugin.h:21
MuonR4::SegmentSeed
Representation of a segment seed (a fully processed hough maximum) produced by the hough transform.
Definition: SegmentSeed.h:14
MuonR4::PhiHoughTransformAlg::m_downWeightMultiplePrd
BooleanProperty m_downWeightMultiplePrd
Definition: PhiHoughTransformAlg.h:131
MuonR4::HoughMaximum::interceptY
double interceptY() const
getter
Definition: HoughMaximum.h:40
MuonR4::PhiHoughTransformAlg::retrieveContainer
StatusCode retrieveContainer(const EventContext &ctx, const SG::ReadHandleKey< ContainerType > &key, const ContainerType *&contToPush) const
Helper method to fetch data from StoreGate.
Definition: PhiHoughTransformAlg.cxx:36
MuonR4::SegmentFit::localSegmentPars
Parameters localSegmentPars(const xAOD::MuonSegment &seg)
Returns the localSegPars decoration from a xAODMuon::Segment.
Definition: SegmentFitterEventData.cxx:32
MuonR4::PhiHoughTransformAlg::recoverSinglePhiMax
std::unique_ptr< SegmentSeed > recoverSinglePhiMax(HoughEventData &data, const MuonR4::HoughMaximum &maximum) const
extend an eta maximum with just a single attached phi measurement.
Definition: PhiHoughTransformAlg.cxx:193
MuonR4::HoughEventData_impl::houghPlane
std::unique_ptr< HoughPlane > houghPlane
Definition: HoughEventData.h:35
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
MuonR4::HoughEventData_impl::updateSearchWindow
static void updateSearchWindow(std::pair< double, double > &searchWindow, double value)
Updates a search space window to account for a value.
Definition: HoughEventData.h:29
MuonR4::SegmentFit::ParamDefs::theta
@ theta
MuonR4::HoughEventData_impl
Templated event data class for the phase-2 muon hough transform.
Definition: HoughEventData.h:22
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37