ATLAS Offline Software
SegmentActsRefitAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "SegmentActsRefitAlg.h"
6 
12 
17 #include "GaudiKernel/PhysicalConstants.h"
19 #include "CLHEP/Random/RandGaussZiggurat.h"
24 
25 #include "Acts/Surfaces/PlaneSurface.hpp"
27 
28 using namespace Acts::UnitLiterals;
29 namespace{
30  constexpr double straightQoverP = 1. / (100._TeV);
31  constexpr double pseudoSurfDist = 5.*Gaudi::Units::cm;
33 }
34 
35 
36 namespace MuonR4{
37  using namespace SegmentFit;
38 
40  ATH_CHECK(m_readKey.initialize());
41  ATH_CHECK(m_writeKey.initialize());
42  ATH_CHECK(m_linkKey.initialize());
43  ATH_CHECK(m_localParsKey.initialize());
44  ATH_CHECK(m_seedParsKey.initialize());
45  ATH_CHECK(m_surfKey.initialize());
46  ATH_CHECK(m_auxMeasProv.initialize(m_writeKey.key()));
47 
48  ATH_CHECK(m_idHelperSvc.retrieve());
49  ATH_CHECK(m_trackFitTool.retrieve());
50  ATH_CHECK(m_trackingGeometryTool.retrieve());
51  ATH_CHECK(m_extrapolationTool.retrieve());
52  ATH_CHECK(m_segSelector.retrieve());
53  ATH_CHECK(detStore()->retrieve(m_detMgr));
54 
55  auto trkGeo = m_trackingGeometryTool->trackingGeometry();
56  trkGeo->visitSurfaces([this](const Acts::Surface* surf){
57  const auto detEl = surf->associatedDetectorElement();
58  if (!detEl) {
59  ATH_MSG_ALWAYS("Insensitive surface "<<surf->geometryId());
60  return;
61  }
62  const auto* det = static_cast<const ActsTrk::IDetectorElementBase*>(detEl);
63  if (!m_idHelperSvc->isMuon(det->identify())){
64  return;
65  }
66  ATH_MSG_ALWAYS("Sensitive muon surface "<<m_idHelperSvc->toString(det->identify())<<" -> geoId: "
67  <<surf->geometryId());
68 
69  });
70  return StatusCode::SUCCESS;
71  }
72  std::tuple<Amg::Vector3D, Amg::Vector3D>
73  SegmentActsRefitAlg::smearSegment(const ActsTrk::GeometryContext& gctx,
74  const MuonR4::Segment& segment,
75  CLHEP::HepRandomEngine* engine) const{
76  // return std::make_pair(segment.position(), segment.direction()* (segment.direction().z() < 0 ? -1. : 1.));
77  const auto segPars = localSegmentPars(gctx, segment);
78  auto smearedPars = segPars;
80  for (ParamDefs precPar : {ParamDefs::y0, ParamDefs::theta,
81  ParamDefs::x0, ParamDefs::phi}) {
82  if (precPar == ParamDefs::phi && !segment.summary().nPhiHits) {
83  break;
84  }
85  const unsigned idx = Acts::toUnderlying(precPar);
86  const double uncert = Amg::error(segment.covariance(), idx) * m_smearRange;
87  smearedPars[idx] = CLHEP::RandGaussZiggurat::shoot(engine, segPars[idx], uncert);
88  ATH_MSG_VERBOSE("Apply smearing to "<<SeedingAux::parName(precPar)
89  <<" parameter -- cov: "<<uncert
90  <<", original: "<<segPars[idx]<<", smeared: "<<smearedPars[idx]<<", deviation: "
91  <<(smearedPars[idx] - segPars[idx]) / uncert );
92 
93  }
94  auto [smearLocPos, smearLocDir] = makeLine(smearedPars);
95  const auto [locPos, locDir] = makeLine(segPars);
97  if (SeedingAux::strawSigns(locPos,locDir, segment.measurements()) !=
98  SeedingAux::strawSigns(smearLocPos, smearLocDir, segment.measurements())) {
99  ATH_MSG_ALWAYS("Parameter smearng from "<<toString(segPars)<<" -> "<<toString(smearedPars)
100  <<" changes the L/R ambiguity -> avoid for this test");
101  return smearSegment(gctx, segment, engine);
102  }
103 
104  const Amg::Transform3D& locToGlob{segment.msSector()->localToGlobalTrans(gctx)};
105  if (smearLocDir.z() < 0) {
106  smearLocDir = -smearLocDir;
107  }
108  return std::make_tuple(locToGlob * smearLocPos, locToGlob.linear() * smearLocDir);
109  }
110  StatusCode SegmentActsRefitAlg::execute(const EventContext& ctx) const {
111 
112  const xAOD::MuonSegmentContainer* segments{nullptr};
113  ATH_CHECK(SG::get(segments, m_readKey, ctx));
115  const ActsTrk::GeometryContext& gctx{m_trackingGeometryTool->getGeometryContext(ctx)};
116  const Acts::GeometryContext tgContext = gctx.context();
117  const Acts::MagneticFieldContext mfContext = m_extrapolationTool->getMagneticFieldContext(ctx);
118  const Acts::CalibrationContext calContext = ActsTrk::getCalibrationContext(ctx);
119 
121  ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, name());
122  rngWrapper->setSeed(name(), ctx);
123  CLHEP::HepRandomEngine* randEngine = rngWrapper->getEngine(ctx);
124 
125  SG::WriteHandle outHandle{m_writeKey, ctx};
126  ATH_CHECK(outHandle.record(std::make_unique<xAOD::MuonSegmentContainer>(),
127  std::make_unique<xAOD::MuonSegmentAuxContainer>()));
128 
129  SG::WriteHandle surfaceHandle{m_surfKey, ctx};
130  ATH_CHECK(surfaceHandle.record(std::make_unique<xAOD::TrackSurfaceContainer>(),
131  std::make_unique<xAOD::TrackStateAuxContainer>()));
132 
134  auto auxMeasHandle = m_auxMeasProv.makeHandle(ctx, *surfaceHandle);
135 
139  xAOD::MeasVector<Acts::toUnderlying(ParamDefs::nPars)>>;
140 
141  ParDecor_t dec_locPars{m_localParsKey, ctx};
142  ParDecor_t dec_seedPars{m_seedParsKey, ctx};
143 
144  Acts::ObjVisualization3D visualHelper{};
145 
147  for (const xAOD::MuonSegment* reFitMe: *segments){
148  const auto msSector = m_detMgr->getSectorEnvelope(reFitMe->chamberIndex(),
149  reFitMe->sector(),
150  reFitMe->etaIndex());
151  const Amg::Transform3D& sectorTrf{msSector->localToGlobalTrans(gctx)};
152 
154  const auto [seedPos, seedDir] = smearSegment(gctx, *MuonR4::detailedSegment(*reFitMe), randEngine);
156  {
157  auto invTrf = sectorTrf.inverse();
158  const Amg::Vector3D locSeedPos = invTrf * seedPos;
159  const Amg::Vector3D locSeedDir = invTrf.linear() * seedDir;
160  auto& seedPars = dec_seedPars(*reFitMe);
161  seedPars[Acts::toUnderlying(ParamDefs::x0)] = locSeedPos.x();
162  seedPars[Acts::toUnderlying(ParamDefs::y0)] = locSeedPos.y();
163  seedPars[Acts::toUnderlying(ParamDefs::theta)] = locSeedDir.theta();
164  seedPars[Acts::toUnderlying(ParamDefs::phi)] = locSeedDir.phi();
165  }
166 
167  const GeoTrf::CoordEulerAngles sectorAngles = GeoTrf::getCoordRotationAngles(sectorTrf);
169  std::vector<const xAOD::UncalibratedMeasurement*> startMeas = MuonR4::collectMeasurements(*reFitMe);
170 
171  const auto* refMeas = startMeas.front();
172 
173  const Amg::Vector3D firstSurfPos{surfAcc.get(refMeas)->transform(tgContext).translation()};
174 
175  if (reFitMe->nPhiLayers() < 1) {
176  ATH_MSG_VERBOSE("Skip phi layer free segment");
177  continue;
178  const Amg::Vector3D planeNormal = sectorTrf.linear().col(2);
179 
180  const Amg::Vector3D lastSurfPos = surfAcc.get(startMeas.back())->transform(tgContext).translation();
182 
183  const Amg::Transform3D trfBeneath = GeoTrf::GeoTransformRT{sectorAngles, firstSurfPos - pseudoSurfDist * planeNormal};
184  const Amg::Transform3D trfAbove = GeoTrf::GeoTransformRT{sectorAngles, lastSurfPos + pseudoSurfDist * planeNormal};
185 
186  auto surfBeneath = Acts::Surface::makeShared<Acts::PlaneSurface>(trfBeneath);
187  auto surfAbove = Acts::Surface::makeShared<Acts::PlaneSurface>(trfAbove);
188  const double covVal = std::pow(1.*Gaudi::Units::cm, 2);
189  startMeas.insert(startMeas.begin(), auxMeasHandle.newMeasurement<1>(surfBeneath, ProjectorType::e1DimNoTime, AmgSymMatrix(1){covVal}));
190  startMeas.insert(startMeas.end(), auxMeasHandle.newMeasurement<1>(surfAbove, ProjectorType::e1DimNoTime, AmgSymMatrix(1){covVal}));
191 
192  }
193  if (m_drawEvent) {
195  MuonValR4::drawSegmentLine(gctx, *reFitMe, visualHelper,
196  Acts::ViewConfig{.color = {220, 0, 0}});
197  MuonValR4::drawSegmentMeasurements(gctx, *reFitMe, visualHelper, Acts::s_viewSurface);
198  }
199  //else if (const auto& firstMeas = reFitMe->measurements().front(); firstMeas->type() == xAOD::UncalibMeasType::Other) {
200  // auto pseudoSurf = Acts::Surface::makeShared<Acts::PlaneSurface>(
201  // GeoTrf::GeoTransformRT{sectorAngles, Amg::Vector3D::Zero()});
202  // startMeas.insert(startMeas.begin(), auxMeasHandle.newMeasurement<2>(pseudoSurf, ProjectorType::e2DimNoTime, AmgSymMatrix(2)::Identity()));
203  //}
204 
206  const Amg::Vector3D trfZ = sectorTrf.linear().col(2);
207  const double extDist = Amg::intersect<3>(seedPos, seedDir, trfZ,
208  firstSurfPos.dot(trfZ) - 10.*Gaudi::Units::cm).value_or(0.);
209  // const double extDist = dir.dot(firstSurfPos - pos) - 5.*Gaudi::Units::cm;
211  const Amg::Vector3D refPos = seedPos + extDist * seedDir;
212  const Amg::Transform3D trf{GeoTrf::GeoTransformRT{sectorAngles, refPos}};
213  if (msgLvl(MSG::VERBOSE)) {
214  const auto [locPos, locDir] = makeLine(localSegmentPars(*reFitMe));
215 
216  std::stringstream sstr{};
217  sstr<<"pos: "<<Amg::toString(seedPos)<<", dir: "<<Amg::toString(seedDir)<<", chi2/nDoF: "
218  <<reFitMe->chiSquared() / reFitMe->numberDoF()<<", nDoF: "<<reFitMe->numberDoF()<<", "
219  <<reFitMe->nPrecisionHits()<<", "<<reFitMe->nPhiLayers()<<std::endl;
220  for (const auto& meas : MuonR4::detailedSegment(*reFitMe)->measurements()) {
221  sstr<<" **** "<<(*meas)<<", chi2: "<<SeedingAux::chi2Term(locPos, locDir, *meas)
222  <<", sign: "<<(meas->isStraw() ?
223  (SeedingAux::strawSign(locPos,locDir, *meas) == 1 ? "R" : "L") : "-")
224  <<", geoId: "<<(meas->spacePoint() ? surfAcc.get(meas->spacePoint()->primaryMeasurement())->geometryId()
225  : Acts::GeometryIdentifier{})<<std::endl;
226  }
227 
228  sstr<<" Target surf: "<<Amg::toString(trf)<<", firstSurf: "<< Amg::toString(trf.inverse()*firstSurfPos)
229  <<", refPoint: "<<Amg::toString(trf.inverse()*refPos)<<std::endl;
230  ATH_MSG_VERBOSE("Run G2F fit on "<<msSector->identString()<<std::endl<<sstr.str());
231  }
233  auto target = Acts::Surface::makeShared<Acts::PlaneSurface>(trf);
234 
235  auto fourPos{ActsTrk::convertPosToActs(refPos, refPos.mag() / Gaudi::Units::c_light)};
236  Acts::BoundMatrix initialCov{Acts::BoundMatrix::Identity()};
237 
238  auto initialPars = Acts::BoundTrackParameters::create(tgContext, target, fourPos, seedDir, straightQoverP,
239  initialCov, Acts::ParticleHypothesis::muon());
240  if (!initialPars.ok()) {
241  ATH_MSG_WARNING("Initial estimate of the parameters failed");
242  continue;
243  }
244  if (m_drawEvent) {
245  MuonValR4::drawBoundParameters(gctx, *initialPars, visualHelper,
246  Acts::ViewConfig{.color={0,220,0}});
247  }
248  ATH_MSG_ALWAYS("Initial parameters "<<Amg::toString((*initialPars).parameters()));
249  auto fitTraject = m_trackFitTool->fit(startMeas, *initialPars,
250  tgContext, mfContext, calContext, target.get());
251  if (!fitTraject) {
252  ATH_MSG_WARNING("Track fit failed.");
253  if (m_drawEvent) {
254  visualHelper.write(std::format("SegmentReFitTest_failed_{:}_{:}_{:}.obj",
255  ctx.eventID().event_number(), reFitMe->index(),
256  MuonR4::printID(*reFitMe)));
257  }
258  continue;
259  }
260 
261  auto track = fitTraject->getTrack(0);
262  ATH_MSG_DEBUG("Track fit succeeded. ");
263 
266  std::vector<const xAOD::UncalibratedMeasurement*> goodMeas{};
267  unsigned int itr{0};
268  fitTraject->trackStateContainer().visitBackwards(track.tipIndex(),[&](const auto& state){
269  if (!state.hasUncalibratedSourceLink()){
270  return;
271  }
272  goodMeas.insert(goodMeas.begin(),
273  ActsTrk::detail::xAODUncalibMeasCalibrator::unpack(state.getUncalibratedSourceLink()));
274  ATH_MSG_VERBOSE("Loop over track state: "<<(itr++)<<", "<<m_idHelperSvc->toString(xAOD::identify(goodMeas.front()))
275  <<", id: "<<surfAcc.get(goodMeas.front())->geometryId());
276 
277  const xAOD::UncalibratedMeasurement* m = goodMeas.front();
278  summary.nPrecHits += (m->type() == xAOD::UncalibMeasType::MdtDriftCircleType);
279  if (m->type() == xAOD::UncalibMeasType::Other) {
280  }
281  else if (m_idHelperSvc->measuresPhi(xAOD::identify(m))){
282  ++summary.nPhiHits;
283  } else {
284  summary.nEtaTrigHits += (m->type() != xAOD::UncalibMeasType::MdtDriftCircleType);
285  }
286  });
287 
288  Acts::BoundTrackParameters parameters = track.createParametersAtReference();
289  if (m_drawEvent) {
290  MuonValR4::drawBoundParameters(gctx, parameters, visualHelper,
291  Acts::ViewConfig{.color={0, 0, 220}});
292 
293  visualHelper.write(std::format("SegmentReFitTest_goodone_{:}_{:}_{:}.obj",
294  ctx.eventID().event_number(), reFitMe->index(),
295  MuonR4::printID(*reFitMe)));
296  }
298  const Amg::Vector3D globDir = parameters.direction();
300  const Amg::Transform3D globToLoc{sectorTrf.inverse()};
301  const Amg::Vector3D refitPos = globToLoc * parameters.position(tgContext);
302  const Amg::Vector3D refitDir = globToLoc.linear() * globDir;
304  const Amg::Vector3D refitSeg = refitPos + Amg::intersect<3>(refitPos, refitDir, Amg::Vector3D::UnitZ(), 0).value_or(0.) * refitDir;
305  const Amg::Vector3D globPos{msSector->localToGlobalTrans(gctx) * refitSeg};
306 
307  auto newSegment = outHandle->push_back(std::make_unique<xAOD::MuonSegment>());
308  dec_segLink(*newSegment) = Link_t{*segments, reFitMe->index(), ctx};
309 
310  newSegment->setDirection(globDir.x(), globDir.y(), globDir.z());
311  newSegment->setPosition(globPos.x(), globPos.y(), globPos.z());
312 
313  newSegment->setFitQuality(track.chi2(), track.nDoF());
314  newSegment->setNHits(summary.nPrecHits, summary.nPhiHits, summary.nEtaTrigHits);
315  auto& locFitPars = dec_locPars(*newSegment);
316  locFitPars[Acts::toUnderlying(ParamDefs::x0)] = refitSeg.x();
317  locFitPars[Acts::toUnderlying(ParamDefs::y0)] = refitSeg.y();
318  locFitPars[Acts::toUnderlying(ParamDefs::theta)] = refitDir.theta();
319  locFitPars[Acts::toUnderlying(ParamDefs::phi)] = refitDir.phi();
320  }
321  return StatusCode::SUCCESS;
322  }
323 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
MuonR4::printID
std::string printID(const xAOD::MuonSegment &seg)
Print the chamber ID of a segment, e.g.
Definition: TrackingHelpers.cxx:17
ATHRNG::RNGWrapper::setSeed
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
Definition: RNGWrapper.h:169
ActsTrk::getCalibrationContext
Acts::CalibrationContext getCalibrationContext(const EventContext &ctx)
The Acts::Calibration context is piped through the Acts fitters to (re)calibrate the Acts::SourceLink...
Definition: CalibrationContext.h:15
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:196
xAOD::identify
const Identifier & identify(const UncalibratedMeasurement *meas)
Returns the associated identifier from the muon measurement.
Definition: MuonSpectrometer/MuonPhaseII/Event/xAOD/xAODMuonPrepData/Root/UtilFunctions.cxx:95
MuonR4::Segment::summary
const HitSummary & summary() const
Returns the hit summary.
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonPatternEvent/MuonPatternEvent/Segment.h:74
TrackStateAuxContainer.h
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
vtune_athena.format
format
Definition: vtune_athena.py:14
SegmentActsRefitAlg.h
TRTCalib_Extractor.det
det
Definition: TRTCalib_Extractor.py:36
MuonGMR4::SpectrometerSector::localToGlobalTrans
const Amg::Transform3D & localToGlobalTrans(const ActsTrk::GeometryContext &gctx) const
Returns the local -> global tarnsformation from the sector.
Definition: SpectrometerSector.cxx:75
initialize
void initialize()
Definition: run_EoverP.cxx:894
MuonSegmentAuxContainer.h
EventPrimitivesHelpers.h
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:75
MuonR4::Segment
Placeholder for what will later be the muon segment EDM representation.
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonPatternEvent/MuonPatternEvent/Segment.h:19
MuonR4::Segment::measurements
const MeasVec & measurements() const
Returns the associated measurements.
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonPatternEvent/MuonPatternEvent/Segment.h:49
MuonR4::collectMeasurements
std::vector< const xAOD::UncalibratedMeasurement * > collectMeasurements(const xAOD::MuonSegment &segment, bool skipOutlier=true)
Helper function to extract the measurements from the segment.
Definition: TrackingHelpers.cxx:56
TrackSurfaceAuxContainer.h
xAOD::MuonSegment_v1
Class describing a MuonSegment.
Definition: MuonSegment_v1.h:33
MuonR4::SegmentFit::ParamDefs
SeedingAux::FitParIndex ParamDefs
Use the same parameter indices as used by the CompSpacePointAuxiliaries.
Definition: MuonHoughDefs.h:38
xAODUncalibMeasCalibrator.h
ActsTrk::convertPosToActs
Acts::Vector4 convertPosToActs(const Amg::Vector3D &athenaPos, const double athenaTime=0.)
Converts a position vector & time from Athena units into Acts units.
Definition: UnitConverters.h:74
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SpectrometerSector.h
MuonR4::SegmentFit::makeLine
std::pair< Amg::Vector3D, Amg::Vector3D > makeLine(const Parameters &pars)
Returns the parsed parameters into an Eigen line parametrization.
Definition: SegmentFitterEventData.cxx:35
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:50
MuonValR4::drawSegmentLine
void drawSegmentLine(const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment &segment, Acts::ObjVisualization3D &visualHelper, const Acts::ViewConfig &viewConfig=Acts::s_viewLine, const double standardLength=1.*Gaudi::Units::m)
Draw a segment line inside the obj file.
Definition: ObjVisualizationHelpers.cxx:46
ActsTrk::detail::xAODUncalibMeasCalibrator::unpack
static const xAOD::UncalibratedMeasurement * unpack(const Acts::SourceLink &sl)
Helper method to unpack an Acts source link to an uncalibrated measurement.
Definition: xAODUncalibMeasCalibrator.cxx:12
ActsTrk::detail::MeasurementCalibratorBase::ProjectorType
ProjectorType
Enum encoding the possible projectors used in ATLAS.
Definition: MeasurementCalibratorBase.h:29
MuonR4::detailedSegment
const Segment * detailedSegment(const xAOD::MuonSegment &seg)
Helper function to navigate from the xAOD::MuonSegment to the MuonR4::Segment.
Definition: TrackingHelpers.cxx:24
LArG4FSStartPointFilterLegacy.execute
execute
Definition: LArG4FSStartPointFilterLegacy.py:20
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
CalibrationContext.h
xAOD::UncalibratedMeasurement_v1
Definition: UncalibratedMeasurement_v1.h:13
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
ActsTrk::IDetectorElementBase
base class interface providing the bare minimal interface extension.
Definition: IDetectorElement.h:32
SG::get
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
Definition: ReadCondHandle.h:283
UnitConverters.h
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
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:100
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
ObjVisualizationHelpers.h
WriteDecorHandle.h
Handle class for adding a decoration to an object.
beamspotnt.parName
list parName
Definition: bin/beamspotnt.py:1286
xAOD::Other
@ Other
ATH_MSG_ALWAYS
#define ATH_MSG_ALWAYS(x)
Definition: AthMsgStreamMacros.h:35
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ActsTrk::GeometryContext
Definition: GeometryContext.h:28
MuonR4::Segment::msSector
const MuonGMR4::SpectrometerSector * msSector() const
Returns the associated MS sector.
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonPatternEvent/MuonPatternEvent/Segment.h:39
DataVector
Derived DataVector<T>.
Definition: DataVector.h:795
xAOD::MuonSegmentContainer
MuonSegmentContainer_v1 MuonSegmentContainer
Definition of the current "MuonSegment container version".
Definition: MuonSegmentContainer.h:14
xAOD::MeasVector
Eigen::Matrix< float, N, 1 > MeasVector
Abrivation of the Matrix & Covariance definitions.
Definition: MeasurementDefs.h:53
TrackingHelpers.h
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ATHRNG::RNGWrapper
A wrapper class for event-slot-local random engines.
Definition: RNGWrapper.h:56
Amg::error
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Definition: EventPrimitivesHelpers.h:40
MuonValR4::drawSegmentMeasurements
void drawSegmentMeasurements(const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment &segment, Acts::ObjVisualization3D &visualHelper, const Acts::ViewConfig &viewConfig=Acts::s_viewSensitive)
Draw all uncalibrated measurements associated to the segment.
Definition: ObjVisualizationHelpers.cxx:81
python.PhysicalConstants.c_light
float c_light
Definition: PhysicalConstants.py:73
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
python.copyTCTOutput.locDir
locDir
Definition: copyTCTOutput.py:110
ATHRNG::RNGWrapper::getEngine
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition: RNGWrapper.h:134
RNGWrapper.h
xAODUncalibMeasSurfAcc.h
MuonR4
This header ties the generic definitions in this package.
Definition: HoughEventData.h:16
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
MuonValR4::drawBoundParameters
void drawBoundParameters(const ActsTrk::GeometryContext &gctx, const Acts::BoundTrackParameters &pars, Acts::ObjVisualization3D &visualHelper, const Acts::ViewConfig &viewConfig=Acts::s_viewLine, const double standardLength=3.*Gaudi::Units::cm)
Draw a line representing the bound track parameters.
Definition: ObjVisualizationHelpers.cxx:175
MuonR4::Segment::HitSummary
Helper struct to summarize the hit count
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonPatternEvent/MuonPatternEvent/Segment.h:61
SegmentFitterEventData.h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
copySelective.target
string target
Definition: copySelective.py:36
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
GeoPrimitivesToStringConverter.h
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
MuonR4::SegmentFit::localSegmentPars
Parameters localSegmentPars(const xAOD::MuonSegment &seg)
Returns the localSegPars decoration from a xAODMuon::Segment.
Definition: SegmentFitterEventData.cxx:42
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
MuonR4::Segment::HitSummary::nPhiHits
unsigned nPhiHits
Number of good Rpc / Tgc / sTgc phi hits.
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonPatternEvent/MuonPatternEvent/Segment.h:67
ActsTrk::detail::xAODUncalibMeasSurfAcc
Helper class to access the Acts::surface associated with an Uncalibrated xAOD measurement.
Definition: xAODUncalibMeasSurfAcc.h:22
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:13
CaloLCW_tf.trf
trf
Definition: CaloLCW_tf.py:20
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
xAOD::UncalibMeasType::MdtDriftCircleType
@ MdtDriftCircleType
python.SystemOfUnits.m
float m
Definition: SystemOfUnits.py:106
MuonR4::Segment::covariance
const SegmentFit::Covariance & covariance() const
Returns the uncertainties of the defining parameters.
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonPatternEvent/MuonPatternEvent/Segment.h:53
ActsTrk::GeometryContext::context
Acts::GeometryContext context() const
Definition: GeometryContext.h:46
SCT_Monitoring::summary
@ summary
Definition: SCT_MonitoringNumbers.h:65