ATLAS Offline Software
Loading...
Searching...
No Matches
MuonR4::MuonFastSegmentFittingAlg Class Reference

Algorithm handling fast segment fitting starting from global patterns. More...

#include <MuonFastSegmentFittingAlg.h>

Inheritance diagram for MuonR4::MuonFastSegmentFittingAlg:

Classes

struct  Beamspot
 Define simplified beamspot measurement in a selected plane. More...

Public Member Functions

virtual ~MuonFastSegmentFittingAlg ()=default
virtual StatusCode initialize () override
virtual StatusCode execute (const EventContext &ctx) const override
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
virtual bool filterPassed (const EventContext &ctx) const
 Get filter decision:
virtual void setFilterPassed (bool state, const EventContext &ctx) const
 Set filter decision:
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

enum class  CoordPlane : std::uint8_t { etaPlane = 0 , phiPlane = 1 }
 Define the coordinate planes. More...
enum class  ParamDefs2D : std::uint8_t { slope = 0 , intercept = 1 , nParams = 2 }
 Define the line parameters. More...
using StIndex = Muon::MuonStationIndex::StIndex
 Type alias for the station index.
using Hit_t = const SpacePoint*
 Type alias for the hit type & associated vector.
using HitVec_t = std::vector<Hit_t>
using Bucket_t = const SpacePointBucket*
 Type alias for the bucket type.
using Seed_t = std::unique_ptr<SegmentSeed>
 Type alias for the segment seed type.
using Segment_t = std::unique_ptr<Segment>
 Type alias for the segment type.
using Parameters = SegmentFit::Parameters
 Type alias for the segment fitting parameters.
using LineFitter = MuonR4::SegmentFit::SegmentLineFitter
 Type alias for the line fitter.
using MdtSegmentSeeder = MuonR4::SegmentFit::MdtSegmentSeedGenerator
 Type alias for the L-R segment seeder.
using SegmentSeedPair_t = std::pair<Seed_t, Segment_t>
 Struct to hold the segment and the seed for the needed lifetime.
using SegmentSeedOpt_t = std::optional<SegmentSeedPair_t>
 Type alias for the segment-seed optional.
using Line2D_t = std::array<double, Acts::toUnderlying(ParamDefs2D::nParams)>
 Type alias for the line representation.
using RegressionRes_t = std::pair<HitVec_t, std::optional<Line2D_t>>
 Type alias for the result of the linear regression, consisting of the valid hits and line parameters.
using DecorKey_t = SG::WriteDecorHandleKey<xAOD::MuonSegmentContainer>
 Abrivation of the extra declared auxVariables.
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

std::vector< SegmentSeedPair_tprocessPattern (const EventContext &ctx, const ActsTrk::GeometryContext &gctx, const GlobalPattern &pattern) const
 Main methods steering the segment fitting.
SegmentSeedOpt_t fitSegment (const EventContext &ctx, const Amg::Transform3D &localToGlobal, Bucket_t parentBucket, HitVec_t &&hits) const
 Fit a segment in a station given the hits & their parent bucket.
std::pair< HitVec_t, ParametersinitializePars (const Amg::Transform3D &localToGlobal, const HitVec_t &hits) const
 Estimate the initial parameters for the segment fitting.
RegressionRes_t linearRegression (const CoordPlane Plane, const HitVec_t &hits, const std::optional< Beamspot > &beamspot=std::nullopt) const
 Estimate the segment parameters in the plane defined by the CoordPlane template parameter using a weighted linear regression.
const SegmentfindSegmentToAddPhi (std::vector< SegmentSeedPair_t > &segs) const
 Find the segment to which increase the phi measurement count.
double beamspotCov (const CoordPlane Plane, const Amg::Transform3D &localToGlobal) const
 Helper method to compute the beamspot covariance in one local coordinate.
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

SG::ReadHandleKey< GlobalPatternContainerm_inPatterns {this, "InPatterns", "MuonR4GlobalPatterns", "Global patterns to read"}
 Write handle key for the output global patterns.
SG::WriteHandleKey< xAOD::MuonSegmentContainerm_outSegments {this, "OutSegments", "FastMuonSegments", "Segments to write"}
 Write handle key for the output segments.
DecorKey_t m_patternKey {this, "ParentPatternKey", m_outSegments, "GlobalPatternLink", "Parent global pattern for the segments"}
 Parent global pattern decoration of the segments.
DecorKey_t m_localSegParKey {this, "LocalSegParKey", m_outSegments, "localSegPars"}
 Decoration of the local segment parameters.
DecorKey_t m_localSegCovKey {this, "LocalCovParKey", m_outSegments, "localSegCov"}
 Decoration of the local fit covariance parameters.
DecorKey_t m_prdLinkKey {this, "PrdLinkKey", m_outSegments, "prdLinks" }
 Decoration to the links to the associated Uncalibrated measurements.
DecorKey_t m_prdStateKey {this, "PrdStateKey", m_outSegments, "prdState"}
 Decoration to the PrdLink state (I.e.
SG::WriteHandleKey< xAOD::CombinedMuonStripContainerm_combMeasKey {this, "combinedPrdKey", "FastCombinedPrdKey"}
 Auxiliary container to model two measurements in the same gas gap as a single track state.
ActsTrk::GeoContextReadKey_t m_geoCtxKey {this, "AlignmentKey", "ActsAlignment", "cond handle key"}
 Geometry context key.
ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
 Handle to the MuonIdHelper service.
ToolHandle< ISpacePointCalibratorm_calibTool {this, "Calibrator", "" }
 Handle to the space point calibrator tool.
ToolHandle< IxAODSegmentCnvToolm_segmentCnvTool {this, "SegmentCnvTool", ""}
 Segment converter tool.
ToolHandle< MuonValR4::IPatternVisualizationToolm_segVisionTool {this, "VisualizationTool", ""}
 Handle to the visualization tool for segments.
BooleanProperty m_recalibInFit {this, "recalibInFit" , false}
 Toggle the recalibration of hits during the segment fit.
BooleanProperty m_hessianResidual {this, "useHessianResidual", false}
 Use the expliciit Hessian in the residual calculation.
DoubleProperty m_seedHitChi2 {this, "ResoSeedHitAssoc", 5. }
 Two mdt seeds are the same if their defining parameters match wihin.
BooleanProperty m_recalibSeed {this, "SeedRecalibrate", false}
 Toggle seed recalibration.
DoubleProperty m_goodSegmentCut {this, "GoodSegmentCut", 2.}
 Reduced chi2 defining a good segment, stopping the fit of other segments in the same station.
UnsignedIntegerProperty m_goodSegmentDoF {this, "GoodSegmentDoF", 5}
 Number of degrees of freedom defining a good segment, stopping the fit of other segments in the same station.
DoubleProperty m_outlierRemovalCut {this, "OutlierRemoval", 3.}
 Cut on the segment chi2 / nDoF to launch the outlier removal.
DoubleProperty m_recoveryPull {this, "RecoveryPull", 3.}
 Pull value for hit recovery.
UnsignedIntegerProperty m_precHitCut {this, "PrecHitCut" , 3}
 Minimum number of precision hits to accept the segment.
BooleanProperty m_useFastFitter {this, "useFastFitter", false}
 Use the fast Mdt fitter where possible.
BooleanProperty m_fastPreFitter {this, "useFastPreFitter", false}
 The fast fitter is treated as a pre fitter.
BooleanProperty m_ignoreFailedPreFit {this, "ignoreFailedPreFit", false}
 Switch to try the full fit when the fast pre-fitter fails.
UnsignedIntegerProperty m_maxIter {this, "maxIterations", 50}
 Tune the number of iterations.
BooleanProperty m_beamSpotRadius {this, "BeamSpotRadius", 30.*Gaudi::Units::cm}
 Beam spot radius.
BooleanProperty m_beamSpotLength {this, "BeamSpotLength", 2.*Gaudi::Units::m}
 Beam spot length.
SpacePointPerLayerSorter m_spSorter {}
 Spacepoint sorter per logical measurement layer.
std::unique_ptr< LineFitterm_fitter {}
 Pointer to the actual segment fitter.
std::unique_ptr< LineFitterm_nswFitter {}
 Pointer to the NSW segment fitter.
std::unique_ptr< MdtSegmentSeederm_mdtSeeder {}
 Pointer to the L-R segment seeder.
Acts::SquareMatrix< 3 > m_beamspotCov {Acts::SquareMatrix<3>::Zero()}
 Covariance matrix of the beam spot.
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default).
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default).
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Friends

std::ostream & operator<< (std::ostream &os, MuonFastSegmentFittingAlg::CoordPlane plane)
std::ostream & operator<< (std::ostream &os, MuonFastSegmentFittingAlg::ParamDefs2D pars)
std::ostream & operator<< (std::ostream &os, const Line2D_t &line)
std::ostream & operator<< (std::ostream &os, const Beamspot &bs)

Detailed Description

Algorithm handling fast segment fitting starting from global patterns.

This algorithm processes the global patterns found in previous steps to build segments, needed later to estimate the momentum. It performs a straight line segment fit using the pattern hits in each station. The main method consumes the global patterns and produces the xAOD::segment container decorated with links to the original patterns.

Definition at line 29 of file MuonFastSegmentFittingAlg.h.

Member Typedef Documentation

◆ Bucket_t

Type alias for the bucket type.

Definition at line 45 of file MuonFastSegmentFittingAlg.h.

◆ DecorKey_t

Abrivation of the extra declared auxVariables.

Definition at line 146 of file MuonFastSegmentFittingAlg.h.

◆ Hit_t

Type alias for the hit type & associated vector.

Definition at line 42 of file MuonFastSegmentFittingAlg.h.

◆ HitVec_t

using MuonR4::MuonFastSegmentFittingAlg::HitVec_t = std::vector<Hit_t>
private

Definition at line 43 of file MuonFastSegmentFittingAlg.h.

◆ Line2D_t

using MuonR4::MuonFastSegmentFittingAlg::Line2D_t = std::array<double, Acts::toUnderlying(ParamDefs2D::nParams)>
private

Type alias for the line representation.

Definition at line 114 of file MuonFastSegmentFittingAlg.h.

◆ LineFitter

Type alias for the line fitter.

Definition at line 53 of file MuonFastSegmentFittingAlg.h.

◆ MdtSegmentSeeder

◆ Parameters

Type alias for the segment fitting parameters.

Definition at line 51 of file MuonFastSegmentFittingAlg.h.

◆ RegressionRes_t

using MuonR4::MuonFastSegmentFittingAlg::RegressionRes_t = std::pair<HitVec_t, std::optional<Line2D_t>>
private

Type alias for the result of the linear regression, consisting of the valid hits and line parameters.

Definition at line 117 of file MuonFastSegmentFittingAlg.h.

◆ Seed_t

using MuonR4::MuonFastSegmentFittingAlg::Seed_t = std::unique_ptr<SegmentSeed>
private

Type alias for the segment seed type.

Definition at line 47 of file MuonFastSegmentFittingAlg.h.

◆ Segment_t

using MuonR4::MuonFastSegmentFittingAlg::Segment_t = std::unique_ptr<Segment>
private

Type alias for the segment type.

Definition at line 49 of file MuonFastSegmentFittingAlg.h.

◆ SegmentSeedOpt_t

Type alias for the segment-seed optional.

Definition at line 60 of file MuonFastSegmentFittingAlg.h.

◆ SegmentSeedPair_t

Struct to hold the segment and the seed for the needed lifetime.

Definition at line 58 of file MuonFastSegmentFittingAlg.h.

◆ StIndex

Type alias for the station index.

Definition at line 40 of file MuonFastSegmentFittingAlg.h.

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ CoordPlane

enum class MuonR4::MuonFastSegmentFittingAlg::CoordPlane : std::uint8_t
strongprivate

Define the coordinate planes.

Enumerator
etaPlane 

Bending plane.

phiPlane 

Phi, e.g.

non-bending, plane

Definition at line 89 of file MuonFastSegmentFittingAlg.h.

89 : std::uint8_t {
91 etaPlane = 0,
93 phiPlane = 1
94 };

◆ ParamDefs2D

enum class MuonR4::MuonFastSegmentFittingAlg::ParamDefs2D : std::uint8_t
strongprivate

Define the line parameters.

Enumerator
slope 

Tangent of the angle, defined as dy/dz or dx/dz according to the plane.

intercept 

Intercept at z=0 (i.e.

y0 or x0, according to the plane)

nParams 

Number of parameters.

Definition at line 96 of file MuonFastSegmentFittingAlg.h.

96 : std::uint8_t {
98 slope = 0,
100 intercept = 1,
102 nParams = 2
103 };

Constructor & Destructor Documentation

◆ ~MuonFastSegmentFittingAlg()

virtual MuonR4::MuonFastSegmentFittingAlg::~MuonFastSegmentFittingAlg ( )
virtualdefault

Member Function Documentation

◆ beamspotCov()

double MuonR4::MuonFastSegmentFittingAlg::beamspotCov ( const CoordPlane Plane,
const Amg::Transform3D & localToGlobal ) const
private

Helper method to compute the beamspot covariance in one local coordinate.

Parameters
PlaneCoordinate plane to be used
localToGlobalTransform from local to global coordinates
Returns
: The beamspot covariance in the specified local coordinate

Definition at line 530 of file MuonFastSegmentFittingAlg.cxx.

531 {
532
533 const Amg::Vector3D localAxisDir {Amg::Vector3D::Unit(Plane == CoordPlane::etaPlane)};
534 const Amg::Vector3D globalAxisDir {localToGlobal.rotation() * localAxisDir};
535
536 return globalAxisDir.dot(m_beamspotCov * globalAxisDir);
537}
Acts::SquareMatrix< 3 > m_beamspotCov
Covariance matrix of the beam spot.
Eigen::Matrix< double, 3, 1 > Vector3D

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode MuonR4::MuonFastSegmentFittingAlg::execute ( const EventContext & ctx) const
overridevirtual

If no phi measurements are found, we add a fake one, in order to prevent the segment selector during the candidate construction to discard the candidate.

We fill the segment container by preserving the ordering by parent pattern

Decorate with pattern link

Add the phi hit if needed

Definition at line 144 of file MuonFastSegmentFittingAlg.cxx.

144 {
145
146 const ActsTrk::GeometryContext* gctx{nullptr};
147 ATH_CHECK(SG::get(gctx, m_geoCtxKey, ctx));
148
149 const GlobalPatternContainer* inPatterns{nullptr};
150 ATH_CHECK(SG::get(inPatterns, m_inPatterns, ctx));
151
152 IxAODSegmentCnvTool::DataShip ship{};
153 ATH_CHECK(ship.segmentContainer.record(m_outSegments, ctx));
154 ATH_CHECK(ship.setupLocalParameters(m_localSegParKey, m_localSegCovKey, ctx));
155 ATH_CHECK(ship.setupMeasurementLink(m_combMeasKey, m_prdLinkKey, m_prdStateKey, ctx));
156
157 using PatLink_t = ElementLink<GlobalPatternContainer>;
158 xAOD::ContainerDecorator<xAOD::MuonSegmentContainer, PatLink_t> dec_patternLink{m_patternKey, ctx};
159
160 std::size_t patIdx{0};
161 ATH_MSG_DEBUG(__func__<<"() Start fitting segments in " << inPatterns->size() << " global patterns");
162 for (const GlobalPattern* pat : *inPatterns) {
163
164 std::vector<SegmentSeedPair_t> seedSegPairs{processPattern(ctx, *gctx, *pat)};
165
166 if (seedSegPairs.size() <= 1u) {
167 ATH_MSG_DEBUG(__func__<<"() Not enough muon segments to construct a candidate - abort pattern"
168 << std::endl << *pat);
169 patIdx++;
170 continue;
171 }
174 const bool hasPhi {std::ranges::any_of(seedSegPairs, [](const SegmentSeedPair_t& seg) {
175 return std::ranges::any_of(seg.second->measurements(), [](const auto& meas) {
176 return isGoodHit(*meas) && meas->measuresPhi(); });
177 })};
178 const Segment* toAddPhi{nullptr};
179 if(!hasPhi) {
180 toAddPhi = findSegmentToAddPhi(seedSegPairs);
181 }
182
184 ship.segmentContainer->reserve(ship.segmentContainer->size() + seedSegPairs.size());
185 for (const SegmentSeedPair_t& seedSegPair : seedSegPairs) {
186 const Segment_t& seg = seedSegPair.second;
187 xAOD::MuonSegment* segXAOD = m_segmentCnvTool->convertSegment(ctx, *seg, ship);
188
190 dec_patternLink(*segXAOD) = PatLink_t{*inPatterns, patIdx};
191
193 if (toAddPhi && toAddPhi == seg.get()) {
194 segXAOD->setNHits(segXAOD->nPrecisionHits(),
195 segXAOD->nPhiLayers() + 1u,
196 segXAOD->nTrigEtaLayers());
197 }
198
199 ATH_MSG_VERBOSE(__func__<<"() Converted segment " << printSegment(*segXAOD));
200 }
201 patIdx++;
202 }
203 ATH_MSG_DEBUG("Written "<<ship.segmentContainer->size()<<" xAOD::Segments into StoreGate.");
204 return StatusCode::SUCCESS;
205}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_VERBOSE(x,...)
SG::WriteHandleKey< xAOD::MuonSegmentContainer > m_outSegments
Write handle key for the output segments.
const Segment * findSegmentToAddPhi(std::vector< SegmentSeedPair_t > &segs) const
Find the segment to which increase the phi measurement count.
std::pair< Seed_t, Segment_t > SegmentSeedPair_t
Struct to hold the segment and the seed for the needed lifetime.
SG::ReadHandleKey< GlobalPatternContainer > m_inPatterns
Write handle key for the output global patterns.
SG::WriteHandleKey< xAOD::CombinedMuonStripContainer > m_combMeasKey
Auxiliary container to model two measurements in the same gas gap as a single track state.
std::unique_ptr< Segment > Segment_t
Type alias for the segment type.
DecorKey_t m_prdStateKey
Decoration to the PrdLink state (I.e.
DecorKey_t m_localSegCovKey
Decoration of the local fit covariance parameters.
DecorKey_t m_patternKey
Parent global pattern decoration of the segments.
DecorKey_t m_prdLinkKey
Decoration to the links to the associated Uncalibrated measurements.
ActsTrk::GeoContextReadKey_t m_geoCtxKey
Geometry context key.
std::vector< SegmentSeedPair_t > processPattern(const EventContext &ctx, const ActsTrk::GeometryContext &gctx, const GlobalPattern &pattern) const
Main methods steering the segment fitting.
DecorKey_t m_localSegParKey
Decoration of the local segment parameters.
ToolHandle< IxAODSegmentCnvTool > m_segmentCnvTool
Segment converter tool.
std::uint8_t nTrigEtaLayers() const
Returns the number of trigger eta hits.
void setNHits(const std::uint8_t nPrecisionHits, const std::uint8_t nPhiLayers, const std::uint8_t nTrigEtaLayers)
Assign the segment hit summary.
std::uint8_t nPrecisionHits() const
Returns the number of precision hits.
std::uint8_t nPhiLayers() const
Returns the number of trigger phi hits.
std::string printSegment(const xAOD::MuonSegment &seg)
Print the details of a segment.
DataVector< GlobalPattern > GlobalPatternContainer
Abrivation of the GlobalPattern container type.
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
MuonSegment_v1 MuonSegment
Reference the current persistent version:

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthCommonAlgorithm< Gaudi::Algorithm >::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 89 of file AthCommonAlgorithm.cxx.

54{
55 // If we didn't find any symlinks to add, just return the collection
56 // from the base class. Otherwise, return the extended collection.
57 if (!m_extendedExtraObjects.empty()) {
59 }
61}
Common base class for algorithms.

◆ filterPassed()

virtual bool AthCommonAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext & ctx) const
inlinevirtualinherited

Get filter decision:

Definition at line 93 of file AthCommonAlgorithm.h.

93 {
94 return execState( ctx ).filterPassed();
95 }
virtual bool filterPassed(const EventContext &ctx) const
Get filter decision:

◆ findSegmentToAddPhi()

const Segment * MuonR4::MuonFastSegmentFittingAlg::findSegmentToAddPhi ( std::vector< SegmentSeedPair_t > & segs) const
private

Find the segment to which increase the phi measurement count.

This is needed to avoid the segment selector to discard the candidate during the candidate building.

Parameters
segsVector of segment-seed pairs
Returns
: Pointer to the segment to add phi measurements to, if any

Find the first segment which is on the most favoured layer to be a seed in the muon bulding process. If there is none, continue to the next.

Definition at line 515 of file MuonFastSegmentFittingAlg.cxx.

515 {
516 using enum LayerIndex;
517
520 for (const LayerIndex layer : {Middle, Inner, Outer, Extended, BarrelExtended}) {
521
522 auto it = std::ranges::find_if(segs, [&layer](const SegmentSeedPair_t& seg) {
523 return toLayerIndex(seg.second->msSector()->chamberIndex()) == layer; });
524 if (it != segs.end()) {
525 return it->second.get();
526 }
527 }
528 return nullptr;
529}
LayerIndex
enum to classify the different layers in the muon spectrometer
LayerIndex toLayerIndex(ChIndex index)
convert ChIndex into LayerIndex
@ layer
Definition HitInfo.h:79

◆ fitSegment()

MuonFastSegmentFittingAlg::SegmentSeedOpt_t MuonR4::MuonFastSegmentFittingAlg::fitSegment ( const EventContext & ctx,
const Amg::Transform3D & localToGlobal,
Bucket_t parentBucket,
HitVec_t && hits ) const
private

Fit a segment in a station given the hits & their parent bucket.

Parameters
ctxEvent context
localToGlobalTransformation from local to global coordinates
parentBucketPointer to the parent bucket of the hits, needed for hole recovery
hitsVector of hits to be fitted
Returns
: Unique pointer to the fitted segment

Reject segment candidates with insufficient precision hits

Initialize initial parameters

Handle the case of NSW.

If we have straws, use the MDT segment seeder to estimate initial parameters. Segments are fitted into the chamber center phi plane.

Definition at line 328 of file MuonFastSegmentFittingAlg.cxx.

331 {
333 std::set<unsigned> layers{};
334 std::ranges::for_each(hits, [this, &layers](Hit_t hit) {
335 if (isPrecisionHit(*hit)) {
336 layers.insert(m_spSorter.sectorLayerNum(*hit));
337 }
338 });
339 if (layers.size() < m_precHitCut) {
340 ATH_MSG_VERBOSE(__func__<<"() Not enough layers with hits to fit a segment, skipping!");
341 return std::nullopt;
342 }
343 Acts::CalibrationContext cctx {ActsTrk::getCalibrationContext(ctx)};
344
346 auto [ValidHits, initialPars] {initializePars(localToGlobal, hits)};
347 if (ValidHits.empty()) {
348 ATH_MSG_VERBOSE(__func__<<"() Failed to initialize initial parameters for segment fitting.");
349 return std::nullopt;
350 }
351 ATH_MSG_VERBOSE(__func__<<"() Start segment fitting with initial parameters: "
352 <<toString(initialPars)<<", hits: "<<print(ValidHits));
353
354 const auto [locPos, locDir] {makeLine(initialPars)};
355 auto houghSeed {std::make_unique<SegmentSeed>(houghTanBeta(locDir), locPos.y(),
356 houghTanAlpha(locDir), locPos.x(),
357 ValidHits.size(), std::move(ValidHits), parentBucket)};
358
360 if (toStationIndex(parentBucket->msSector()->chamberIndex()) == StIndex::EI &&
361 std::ranges::all_of(houghSeed->getHitsInMax(), [](const Hit_t& hit) {
362 return xAOD::isNSW(hit->type()); })) {
363
364 ATH_MSG_VERBOSE(__func__<<"() Found NSW hits. Use the NSW fitter to fit the segment.");
366 CalibSpacePointVec calibHits{m_calibTool->calibrate(ctx,
367 houghSeed->getHitsInMax(), locPos, locDir, 0.)};
368 Segment_t res {m_nswFitter->fitSegment(ctx,
369 houghSeed.get(), initialPars, localToGlobal, std::move(calibHits))};
370 if (res) {
371 return std::make_pair(std::move(houghSeed), std::move(res));
372 }
373 return std::nullopt;
374 }
375
378 std::vector<Segment_t> segments{};
379 MdtSegmentSeeder::State_t seedState{initialPars, houghSeed.get(), m_calibTool.get(), m_recalibSeed.value()};
380
381 ATH_MSG_VERBOSE(__func__<<"() Start segment seed search");
382 while (auto seed = m_mdtSeeder->nextSeed(cctx, seedState)) {
383 ATH_MSG_VERBOSE(__func__<<"() Found a seed. Try to fit the segment...");
384
385 Segment_t segment {m_fitter->fitSegment(ctx, houghSeed.get(), seed->parameters,
386 localToGlobal, std::move(seed->hits))};
387 if (segment) {
388 segments.push_back(std::move(segment));
389 }
390 }
391
392 if (!segments.empty()) {
393 ATH_MSG_VERBOSE(__func__<<"() In total "<<segments.size()<<" segment were constructed. Keep the best one.");
394 if (msgLvl(MSG::VERBOSE) && segments.size() > 1) {
395 for (const Segment_t& seg : segments) {
396 ATH_MSG_VERBOSE(__func__<<"() Segment: Pos: "<<Amg::toString(seg->position())
397 <<", dir: "<<Amg::toString(seg->direction())<<", chi2: "<<seg->chi2()
398 <<", nDoF: "<<NDoF(*seg)<<std::endl<<print(seg->measurements()));
399 }
400 }
401 Segment_t& bestSegment {*std::ranges::max_element(segments, [&](const Segment_t& s1, const Segment_t& s2) {
402 return betterSegment(*s2, *s1);
403 })};
404 return std::make_pair(std::move(houghSeed), std::move(bestSegment));
405 }
406 ATH_MSG_VERBOSE(__func__<<"() No segment seeds could be fitted.");
407 return std::nullopt;
408}
std::pair< std::vector< unsigned int >, bool > res
bool hit(const Container &ids, int pdgId)
bool msgLvl(const MSG::Level lvl) const
std::vector< CalibSpacePointPtr > CalibSpacePointVec
std::unique_ptr< LineFitter > m_fitter
Pointer to the actual segment fitter.
std::unique_ptr< LineFitter > m_nswFitter
Pointer to the NSW segment fitter.
ToolHandle< ISpacePointCalibrator > m_calibTool
Handle to the space point calibrator tool.
std::pair< HitVec_t, Parameters > initializePars(const Amg::Transform3D &localToGlobal, const HitVec_t &hits) const
Estimate the initial parameters for the segment fitting.
UnsignedIntegerProperty m_precHitCut
Minimum number of precision hits to accept the segment.
const SpacePoint * Hit_t
Type alias for the hit type & associated vector.
BooleanProperty m_recalibSeed
Toggle seed recalibration.
SpacePointPerLayerSorter m_spSorter
Spacepoint sorter per logical measurement layer.
std::unique_ptr< MdtSegmentSeeder > m_mdtSeeder
Pointer to the L-R segment seeder.
SeedingState< HitVec_t, CalibCont_t, SeederStateBase > State_t
Define the state holder object.
Acts::CalibrationContext getCalibrationContext(const EventContext &ctx)
The Acts::Calibration context is piped through the Acts fitters to (re)calibrate the Acts::SourceLink...
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
std::pair< Amg::Vector3D, Amg::Vector3D > makeLine(const Parameters &pars)
Returns the parsed parameters into an Eigen line parametrization.
std::string toString(const Parameters &pars)
Dumps the parameters into a string with labels in front of each number.
ISpacePointCalibrator::CalibSpacePointVec CalibSpacePointVec
double houghTanBeta(const Amg::Vector3D &v)
Returns the hough tanBeta [y] / [z].
bool isPrecisionHit(const SpacePoint &hit)
Returns whether the uncalibrated spacepoint is a precision hit (Mdt, micromegas, stgc strips).
std::string print(const cont_t &container)
Print a space point container to string.
double houghTanAlpha(const Amg::Vector3D &v)
: Returns the hough tanAlpha [x] / [z]
StIndex toStationIndex(ChIndex index)
convert ChIndex into StIndex

◆ initialize()

StatusCode MuonR4::MuonFastSegmentFittingAlg::initialize ( )
overridevirtual

Initialize the segment line fitter

Initialize the NSW segment fitter

Initialize the L-R segment seeder

Definition at line 73 of file MuonFastSegmentFittingAlg.cxx.

73 {
74 ATH_CHECK(m_outSegments.initialize());
75 ATH_CHECK(m_patternKey.initialize());
76 ATH_CHECK(m_localSegParKey.initialize());
77 ATH_CHECK(m_localSegCovKey.initialize());
78 ATH_CHECK(m_prdLinkKey.initialize());
79 ATH_CHECK(m_prdStateKey.initialize());
80 ATH_CHECK(m_combMeasKey.initialize());
81 ATH_CHECK(m_inPatterns.initialize());
82 ATH_CHECK(m_geoCtxKey.initialize());
83 ATH_CHECK(m_calibTool.retrieve());
84 ATH_CHECK(m_segmentCnvTool.retrieve());
85 ATH_CHECK(m_idHelperSvc.retrieve());
86
87 ATH_CHECK(m_segVisionTool.retrieve(EnableTool(!m_segVisionTool.empty())));
88
90 SegmentLineFitter::Config fitCfg{};
91 fitCfg.calibrator = m_calibTool.get();
92 fitCfg.visionTool = m_segVisionTool.get();
93 fitCfg.idHelperSvc = m_idHelperSvc.get();
94 fitCfg.fitT0 = false;
95 fitCfg.calcAlongStrip = false;
96 fitCfg.recalibrate = m_recalibInFit;
97 fitCfg.useFastFitter = m_useFastFitter;
98 fitCfg.fastPreFitter = m_fastPreFitter;
99 fitCfg.ignoreFailedPreFit = m_ignoreFailedPreFit;
100 fitCfg.useHessian = m_hessianResidual;
101 fitCfg.doBeamSpot = false;
102 fitCfg.outlierRemovalCut = m_outlierRemovalCut;
103 fitCfg.recoveryPull = m_recoveryPull;
104 fitCfg.nPrecHitCut = m_precHitCut;
105 fitCfg.maxIter = m_maxIter;
106 fitCfg.parsToUse = {ParamDefs::y0, ParamDefs::theta};
107
109 SegmentLineFitter::Config nswFitCfg{fitCfg};
110 nswFitCfg.parsToUse = {ParamDefs::x0, ParamDefs::y0, ParamDefs::theta, ParamDefs::phi};
111
112 m_fitter = std::make_unique<LineFitter>(name(), std::move(fitCfg));
113 m_nswFitter = std::make_unique<LineFitter>(name(), std::move(nswFitCfg));
114
116 MdtSegmentSeeder::Config genCfg{};
117 genCfg.hitPullCut = m_seedHitChi2;
118 genCfg.busyLayerLimit = 3;
119 genCfg.startWithPattern = false;
120 m_mdtSeeder = std::make_unique<MdtSegmentSeeder>(std::move(genCfg),
121 makeActsAthenaLogger(this, name()));
122
123 ATH_MSG_DEBUG("FastMuonSABuilder Configuration:\n"
124 << " Recalibrate in fit: " << m_recalibInFit << "\n"
125 << " Use Hessian in residual: " << m_hessianResidual << "\n"
126 << " Seed hit chi2: " << m_seedHitChi2 << "\n"
127 << " Recalibrate seed: " << m_recalibSeed << "\n"
128 << " Good segment cut (reduced chi2): " << m_goodSegmentCut << "\n"
129 << " Outlier removal cut (chi2/nDoF): " << m_outlierRemovalCut << "\n"
130 << " Recovery pull: " << m_recoveryPull << "\n"
131 << " Precision hit cut: " << m_precHitCut << "\n"
132 << " Use fast fitter: " << m_useFastFitter << "\n"
133 << " Fast fitter as pre-fitter: " << m_fastPreFitter << "\n"
134 << " Ignore failed pre-fits: " << m_ignoreFailedPreFit << "\n"
135 << " Max iterations: " << m_maxIter);
136
138 Acts::square(m_beamSpotRadius);
140
141 return StatusCode::SUCCESS;
142}
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
Definition Logger.cxx:64
BooleanProperty m_fastPreFitter
The fast fitter is treated as a pre fitter.
BooleanProperty m_useFastFitter
Use the fast Mdt fitter where possible.
BooleanProperty m_recalibInFit
Toggle the recalibration of hits during the segment fit.
DoubleProperty m_outlierRemovalCut
Cut on the segment chi2 / nDoF to launch the outlier removal.
DoubleProperty m_recoveryPull
Pull value for hit recovery.
DoubleProperty m_seedHitChi2
Two mdt seeds are the same if their defining parameters match wihin.
BooleanProperty m_ignoreFailedPreFit
Switch to try the full fit when the fast pre-fitter fails.
BooleanProperty m_beamSpotLength
Beam spot length.
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Handle to the MuonIdHelper service.
BooleanProperty m_beamSpotRadius
Beam spot radius.
ToolHandle< MuonValR4::IPatternVisualizationTool > m_segVisionTool
Handle to the visualization tool for segments.
UnsignedIntegerProperty m_maxIter
Tune the number of iterations.
BooleanProperty m_hessianResidual
Use the expliciit Hessian in the residual calculation.
DoubleProperty m_goodSegmentCut
Reduced chi2 defining a good segment, stopping the fit of other segments in the same station.

◆ initializePars()

std::pair< MuonFastSegmentFittingAlg::HitVec_t, Parameters > MuonR4::MuonFastSegmentFittingAlg::initializePars ( const Amg::Transform3D & localToGlobal,
const HitVec_t & hits ) const
private

Estimate the initial parameters for the segment fitting.

Parameters
localToGlobalTransformation from local to global coordinates
hitsVector of hits
Returns
: Estimated initial parameters

No enough hits or bad topology, return empty result

Failed to initialize phi parameters, fit the segment in the chamber phi plane

Add phi-only hits to eta hits

Definition at line 410 of file MuonFastSegmentFittingAlg.cxx.

411 {
412
413 auto [etaHits, etaPars] = linearRegression(CoordPlane::etaPlane, hits);
414 if (!etaPars || etaHits.size() < m_precHitCut) {
416 ATH_MSG_VERBOSE(__func__<<"() Failed to initialize eta parameters.");
417 return std::pair<HitVec_t, Parameters>{};
418 }
419 const Amg::Vector3D beamspotPos {localToGlobal.inverse().translation()};
420 const Beamspot beamspot{beamspotPos.x(), beamspotPos.z(),
421 beamspotCov(CoordPlane::phiPlane, localToGlobal)};
422 ATH_MSG_VERBOSE(__func__<<"() Use: "<<beamspot<<" for regression in "<<CoordPlane::phiPlane);
423 auto [phiHits, phiPars] = linearRegression(CoordPlane::phiPlane, hits, beamspot);
424
425 if (!phiPars) {
427 phiHits.clear();
428 phiPars = std::make_optional(Line2D_t{0., 0.});
429 }
430
432 for (Hit_t hit : phiHits) {
433 if (!hit->measuresEta()) {
434 etaHits.push_back(hit);
435 }
436 }
437 Parameters pars{};
438 const auto [tanAlpha, x0] = *phiPars;
439 const auto [tanBeta , y0] = *etaPars;
440 pars[Acts::toUnderlying(ParamDefs::y0)] = y0;
441 pars[Acts::toUnderlying(ParamDefs::x0)] = x0;
442 const Amg::Vector3D dir {Acts::makeDirectionFromAxisTangents(tanAlpha, tanBeta)};
443 pars[Acts::toUnderlying(ParamDefs::theta)] = dir.theta();
444 pars[Acts::toUnderlying(ParamDefs::phi)] = dir.phi();
445
446 return std::make_pair(std::move(etaHits), pars);
447}
SegmentFit::Parameters Parameters
Type alias for the segment fitting parameters.
double beamspotCov(const CoordPlane Plane, const Amg::Transform3D &localToGlobal) const
Helper method to compute the beamspot covariance in one local coordinate.
std::array< double, Acts::toUnderlying(ParamDefs2D::nParams)> Line2D_t
Type alias for the line representation.
RegressionRes_t linearRegression(const CoordPlane Plane, const HitVec_t &hits, const std::optional< Beamspot > &beamspot=std::nullopt) const
Estimate the segment parameters in the plane defined by the CoordPlane template parameter using a wei...
Define simplified beamspot measurement in a selected plane.

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isClonable()

virtual bool AthCommonAlgorithm< Gaudi::Algorithm >::isClonable ( ) const
inlineoverridevirtualinherited

Specify if the algorithm is clonable.

Only relevant for non-reentrant algorithms. Actual number of clones needs to be set via the "Cardinality" property.

Reimplemented in AFP_DigiTop, AlgB, AlgT, BCM_Digitization, CscDigitBuilder, CscDigitToCscRDO, G4AtlasAlg, G4RunAlg, HGTD_Digitization, HiveAlgBase, InDet::GNNSeedingTrackMaker, InDet::SCT_Clusterization, InDet::SiSPGNNTrackMaker, InDet::SiSPSeededTrackFinder, InDet::SiTrackerSpacePointFinder, ISF::SimKernelMT, ITk::StripDigitization, ITkPixelCablingAlg, ITkStripCablingAlg, LArHitEMapMaker, LArTTL1Maker, LUCID_DigiTop, LVL1::L1TopoSimulation, MergeCalibHits, MergeGenericMuonSimHitColl, MergeHijingPars, MergeMcEventCollection, MergeTrackRecordCollection, MergeTruthJets, MergeTruthParticles, MuonDigitizer, PileUpMTAlg, PixelDigitization, RoIBResultToxAOD, SCT_ByteStreamErrorsTestAlg, SCT_CablingCondAlgFromCoraCool, SCT_CablingCondAlgFromText, SCT_ConditionsParameterTestAlg, SCT_ConditionsSummaryTestAlg, SCT_ConfigurationConditionsTestAlg, SCT_Digitization, SCT_FlaggedConditionTestAlg, SCT_LinkMaskingTestAlg, SCT_MajorityConditionsTestAlg, SCT_ModuleVetoTestAlg, SCT_MonitorConditionsTestAlg, SCT_PrepDataToxAOD, SCT_RawDataToxAOD, SCT_ReadCalibChipDataTestAlg, SCT_ReadCalibDataTestAlg, SCT_RODVetoTestAlg, SCT_SensorsTestAlg, SCT_SiliconConditionsTestAlg, SCT_StripVetoTestAlg, SCT_TdaqEnabledTestAlg, SCT_TestCablingAlg, SCTEventFlagWriter, SCTRawDataProvider, SCTSiLorentzAngleTestAlg, SCTSiPropertiesTestAlg, SGInputLoader, Simulation::BeamEffectsAlg, TileHitVecToCnt, TileMuonFitter, TilePulseForTileMuonReceiver, TileRawChannelMaker, TRTDigitization, and ZDC_DigiTop.

Definition at line 68 of file AthCommonAlgorithm.h.

68 {
69 return true;
70 }

◆ linearRegression()

MuonFastSegmentFittingAlg::RegressionRes_t MuonR4::MuonFastSegmentFittingAlg::linearRegression ( const CoordPlane Plane,
const HitVec_t & hits,
const std::optional< Beamspot > & beamspot = std::nullopt ) const
private

Estimate the segment parameters in the plane defined by the CoordPlane template parameter using a weighted linear regression.

This method is used to estimate initial parameters either in the phi plane or in the bending plane when no straw measurements are available and the MDTseeder cannot be used, e.g. NSW.

Parameters
PlaneCoordinate plane to be used for the regression
hitsVector of hits
Returns
: Result of the linear regression

TO DO: The linear regression should be improved to handle the covariance in z, not only in the x and y directions. This is needed for both straws measurements and beamspot.

Helper function to accumulate the regression sums

Address the case of not enough valid hits

Handle invalid determinant: require a non-zero total weight and sufficient weighted variance in z of the hits (at least 1 mm)

Definition at line 449 of file MuonFastSegmentFittingAlg.cxx.

451 {
454 ATH_MSG_VERBOSE(__func__<<"() Start linear regression in the "<<Plane
455 <<" with "<<hits.size()<<" hits"<<(beamspot ? " & beamspot." : "."));
456
457 const auto CovIdx {Plane == CoordPlane::etaPlane
458 ? Acts::toUnderlying(SpacePoint::CovIdx::etaCov)
459 : Acts::toUnderlying(SpacePoint::CovIdx::phiCov)};
460
461 double S {0.}, Sy {0.}, Sz {0.}, Szz {0.}, Syz {0.};
463 auto accumulate = [&](const double y, const double z, const double w) {
464 S += w;
465 Sy += w * y;
466 Sz += w * z;
467 Szz += w * z * z;
468 Syz += w * z * y;
469 };
470
471 HitVec_t validHits {};
472 for (Hit_t hit : hits) {
473 if ((Plane == CoordPlane::etaPlane && !hit->measuresEta()) ||
474 (Plane == CoordPlane::phiPlane && !hit->measuresPhi())) {
475 continue;
476 }
477 const double sigma2 {(Plane == CoordPlane::etaPlane && hit->isStraw())
478 ? hit->covariance()[CovIdx] + Acts::square(hit->driftRadius())
479 : hit->covariance()[CovIdx]};
480
481 validHits.push_back(hit);
482 const Amg::Vector3D& locPos {hit->localPosition()};
483
484 accumulate(Plane == CoordPlane::etaPlane ? locPos.y() : locPos.x(),
485 locPos.z(),
486 1./sigma2);
487 }
488 if (beamspot) {
489 accumulate(beamspot->coord, beamspot->z, 1./beamspot->cov_coordCoord);
490 }
492 if (validHits.size() + beamspot.has_value() < 2u) {
493 ATH_MSG_VERBOSE(__func__<<"() Not enough hits to do a linear regression in the "
494 <<Plane<<". Valid hits: "<<print(validHits));
495 return std::make_pair(std::move(validHits), std::nullopt);
496 }
499 const double det {S * Szz - Acts::square(Sz)};
500 if (S <= Acts::s_epsilon ||
501 (det / Acts::square(S)) < minZVariance) {
502 ATH_MSG_WARNING(__func__<<"() Degenerate regression in the "
503 <<Plane<<": total weight: "<<S<<", variance in z: "
504 <<det/Acts::square(S)<<" valid hits: "<<print(validHits));
505 return std::make_pair(std::move(validHits), std::nullopt);
506 }
507 Line2D_t pars{};
508 pars[Acts::toUnderlying(ParamDefs2D::slope)] = (S * Syz - Sz * Sy) / det;
509 pars[Acts::toUnderlying(ParamDefs2D::intercept)] = (Szz * Sy - Sz * Syz) / det;
510 ATH_MSG_VERBOSE(__func__<<"() Linear regression in the "
511 <<Plane<<" -> "<<pars<<", with "<<validHits.size()
512 <<" valid hits"<<(beamspot ? " and beamspot." : "."));
513 return std::make_pair(std::move(validHits), std::move(pars));
514}
#define ATH_MSG_WARNING(x,...)
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
#define y
#define z
@ slope
Tangent of the angle, defined as dy/dz or dx/dz according to the plane.

◆ msg()

MsgStream & AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ processPattern()

std::vector< MuonFastSegmentFittingAlg::SegmentSeedPair_t > MuonR4::MuonFastSegmentFittingAlg::processPattern ( const EventContext & ctx,
const ActsTrk::GeometryContext & gctx,
const GlobalPattern & pattern ) const
private

Main methods steering the segment fitting.

Given the global pattern, it fits segments in each station, computing just the minimum amount to allow muon candidate building, i.e. 3 segments.

Parameters
ctxEvent context
gctxGeometry context
patternGlobal pattern
Returns
: Vector of fitted segments

If we already have 3 segments, we don't try to fit more segments in other stations. Same if we are at the last station and haven't found any segments yet

Retrieve the pattern hits & parent buckets in the station

Since we can have multiple sectors in a station, we need to group hits by sector

We collect the sectors with hits in the station. We can either have 1 or 2 sectors (in the overlap regions). If we have 2 sectors, we ensure one is small and the other is large

Ensure the small sector is processed first to maximize the lever arm

Try to fit a segment using the first sector. If it fails or the segment has poor quality, try other sectors if any

Find the parent bucket, needed for holes recovery in segment fitting. We expect one parent bucket per sector; if we have multiple ones, take the one containing the most hits

Definition at line 208 of file MuonFastSegmentFittingAlg.cxx.

210 {
211 ATH_MSG_VERBOSE(__func__<<"() Start processing " << pattern);
212
213 std::vector<StIndex> stations {pattern.getStations()};
214 std::ranges::sort(stations, [](StIndex s1, StIndex s2) {
216 if (l1 == l2) {
217 return isBarrel(s1);
218 }
219 return layerRank(l1) < layerRank(l2);
220 });
221
222 std::vector<SegmentSeedPair_t> muonSegments{};
223 muonSegments.reserve(3u);
224 for (const StIndex st : stations) {
227 if (muonSegments.size() > 2 || (st == stations.back() && muonSegments.size() == 0.)) {
228 break;
229 }
230 // If we already have a segment in the layer, we don't try to fit another one
231 const LayerIndex layer {toLayerIndex(st)};
232 if (std::ranges::any_of(muonSegments, [&layer](const SegmentSeedPair_t& seg) {
233 return toLayerIndex(seg.second->msSector()->chamberIndex()) == layer; })) {
234 ATH_MSG_VERBOSE(__func__<<"() Already found a segment in layer " << layer
235 << " - skip station " << st);
236 continue;
237 }
239 const HitVec_t& hits {pattern.hitsInStation(st)};
240 const std::vector<Bucket_t>& buckets {pattern.bucketsInStation(st)};
241
243 std::unordered_map<const MuonGMR4::SpectrometerSector*, HitVec_t> hitsPerSector{};
244 std::ranges::for_each(hits, [&hitsPerSector](Hit_t hit) {
245 hitsPerSector[hit->msSector()].push_back(hit);
246 });
249 std::vector<const MuonGMR4::SpectrometerSector*> sectorsInStation{};
250 sectorsInStation.reserve(hitsPerSector.size());
251 std::ranges::transform(hitsPerSector, std::back_inserter(sectorsInStation),
252 [](const auto& pair) { return pair.first; });
253 assert(sectorsInStation.size() > 0 && sectorsInStation.size() <= 2u &&
254 (sectorsInStation.size() == 1u || isSmall(sectorsInStation[0]->chamberIndex()) != isSmall(sectorsInStation[1]->chamberIndex())));
256 if (sectorsInStation.size() == 2u && !isSmall(sectorsInStation[0]->chamberIndex())) {
257 std::swap(sectorsInStation[0], sectorsInStation[1]);
258 }
259
260 std::vector<SegmentSeedPair_t> stSegments{};
261 stSegments.reserve(sectorsInStation.size());
264 for (const MuonGMR4::SpectrometerSector* sector : sectorsInStation) {
265 ATH_MSG_VERBOSE(__func__<<"() Start segment fitting in sector " << sector->identString()
266 <<" station " << st << " with " << hitsPerSector[sector].size() << " hits.");
267 HitVec_t& sectorHits {hitsPerSector[sector]};
268
271 std::vector<Bucket_t> bucketsInSector {};
272 std::ranges::copy_if(buckets, std::back_inserter(bucketsInSector),
273 [&sector](Bucket_t bucket) { return bucket->msSector() == sector;
274 });
275 if (bucketsInSector.empty()) {
276 throw std::runtime_error(std::format("No parent bucket found for sector {} in station {}",
277 sector->identString(), stName(st)));
278 }
279 if (bucketsInSector.size() > 1u) {
280 Bucket_t primaryBucket {*std::ranges::max_element(bucketsInSector,
281 std::ranges::less{}, [&sectorHits](const Bucket_t& b) {
282 return std::ranges::count_if(sectorHits, [&b](const Hit_t& hit) {
283 return std::ranges::any_of(*b, [&hit](const auto& h) {
284 return h.get() == hit; });
285 });
286 })};
287 bucketsInSector.clear();
288 bucketsInSector.push_back(primaryBucket);
289 }
290 Bucket_t parentBucket {bucketsInSector.back()};
291
292 SegmentSeedOpt_t segment{fitSegment(ctx, sector->localToGlobalTransform(gctx),
293 parentBucket, std::move(sectorHits))};
294 if (segment) {
295 ATH_MSG_VERBOSE(__func__<<"() Successfully fitted segment in station "<< st
296 <<": Pos: "<< Amg::toString(segment->second->position())
297 << ", dir: "<< Amg::toString(segment->second->direction())
298 << ", chi2: "<< segment->second->chi2()<<", nDoF: "<<NDoF(*segment->second)<<std::endl
299 << print(segment->second->measurements()));
300 stSegments.push_back(std::move(*segment));
301 // If we found a good segment, we don't try to fit segments in other sectors of the same station.
302 const Segment_t& newSegment {stSegments.back().second};
303 if (calcRedChi2(*newSegment) <= m_goodSegmentCut &&
304 NDoF(*newSegment) >= m_goodSegmentDoF) {
305 break;
306 }
307 continue;
308 }
309 ATH_MSG_VERBOSE(__func__<<"() No segment could be fitted. Try next sector, if any.");
310 }
311 if (stSegments.empty()) {
312 ATH_MSG_DEBUG("No segment could be fitted in station " << st << " for " << pattern);
313 continue;
314 }
315 SegmentSeedPair_t& bestSeg {stSegments.size() > 1
316 ? *std::ranges::max_element(stSegments, [](const SegmentSeedPair_t& s1, const SegmentSeedPair_t& s2) {
317 return betterSegment(*s2.second, *s1.second); })
318 : stSegments.back()};
319 ATH_MSG_VERBOSE(__func__<<"() Best segment in station " << st << ": Pos: " << Amg::toString(bestSeg.second->position())
320 << ", dir: " << Amg::toString(bestSeg.second->direction()) << ", chi2: " << bestSeg.second->chi2() << ", nDoF: " << NDoF(*bestSeg.second));
321
322 muonSegments.push_back(std::move(bestSeg));
323 }
324 ATH_MSG_DEBUG(__func__<<"() Found "<< muonSegments.size()<<" muon segments to construct a candidate.");
325 return muonSegments;
326}
Muon::MuonStationIndex::StIndex StIndex
Type alias for the station index.
const SpacePointBucket * Bucket_t
Type alias for the bucket type.
std::optional< SegmentSeedPair_t > SegmentSeedOpt_t
Type alias for the segment-seed optional.
SegmentSeedOpt_t fitSegment(const EventContext &ctx, const Amg::Transform3D &localToGlobal, Bucket_t parentBucket, HitVec_t &&hits) const
Fit a segment in a station given the hits & their parent bucket.
UnsignedIntegerProperty m_goodSegmentDoF
Number of degrees of freedom defining a good segment, stopping the fit of other segments in the same ...
return m_collEvts back().back().max_entries
bool isSmall(const ChIndex index)
Returns true if the chamber index is in a small sector.
bool isBarrel(const ChIndex index)
Returns true if the chamber index points to a barrel chamber.
const std::string & stName(StIndex index)
convert StIndex into a string
void swap(ElementLinkVector< DOBJ > &lhs, ElementLinkVector< DOBJ > &rhs)

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setFilterPassed()

virtual void AthCommonAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Set filter decision:

Reimplemented in AthFilterAlgorithm.

Definition at line 99 of file AthCommonAlgorithm.h.

99 {
101 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const
Set filter decision:

◆ sysExecute()

StatusCode AthCommonAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext & ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Reimplemented in AthAnalysisAlgorithm.

Definition at line 80 of file AthCommonAlgorithm.cxx.

41{
42 return BaseAlg::sysExecute (ctx);
43}

◆ sysInitialize()

StatusCode AthCommonAlgorithm< Gaudi::Algorithm >::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, HypoBase, InputMakerBase, and PyAthena::Alg.

Definition at line 60 of file AthCommonAlgorithm.cxx.

71 {
73
74 if (sc.isFailure()) {
75 return sc;
76 }
77
78 ServiceHandle<ICondSvc> cs("CondSvc",name());
79 for (auto h : outputHandles()) {
80 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
81 // do this inside the loop so we don't create the CondSvc until needed
82 if ( cs.retrieve().isFailure() ) {
83 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
85 }
86 if (cs->regHandle(this,*h).isFailure()) {
88 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
89 << " with CondSvc");
90 }
91 }
92 }
93 return sc;
94}
#define ATH_MSG_ERROR(x,...)
virtual StatusCode sysInitialize() override
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }

◆ operator<< [1/4]

std::ostream & operator<< ( std::ostream & os,
const Beamspot & bs )
friend

Definition at line 563 of file MuonFastSegmentFittingAlg.cxx.

563 {
564 return os << "Beamspot [z, coord, sigmaCoord]: ["
565 << beamspot.z<< ", "<<beamspot.coord<< ", "<< std::sqrt(beamspot.cov_coordCoord) << "]";
566}

◆ operator<< [2/4]

std::ostream & operator<< ( std::ostream & os,
const Line2D_t & line )
friend

Definition at line 558 of file MuonFastSegmentFittingAlg.cxx.

558 {
559 return os << "Line [slope, intercept]: ["
560 << line[Acts::toUnderlying(MuonFastSegmentFittingAlg::ParamDefs2D::slope)] << ", "
561 << line[Acts::toUnderlying(MuonFastSegmentFittingAlg::ParamDefs2D::intercept)] << "]";
562}

◆ operator<< [3/4]

std::ostream & operator<< ( std::ostream & os,
MuonFastSegmentFittingAlg::CoordPlane plane )
friend

Definition at line 539 of file MuonFastSegmentFittingAlg.cxx.

539 {
540 switch (plane) {
542 return os << "etaPlane";
544 return os << "phiPlane";
545 }
546 return os;
547}

◆ operator<< [4/4]

std::ostream & operator<< ( std::ostream & os,
MuonFastSegmentFittingAlg::ParamDefs2D pars )
friend

Definition at line 548 of file MuonFastSegmentFittingAlg.cxx.

548 {
549 switch (pars) {
551 return os << "Intercept";
553 return os << "Slope";
554 default:
555 return os;
556 }
557}

Member Data Documentation

◆ m_beamspotCov

Acts::SquareMatrix<3> MuonR4::MuonFastSegmentFittingAlg::m_beamspotCov {Acts::SquareMatrix<3>::Zero()}
private

Covariance matrix of the beam spot.

Definition at line 212 of file MuonFastSegmentFittingAlg.h.

212{Acts::SquareMatrix<3>::Zero()};

◆ m_beamSpotLength

BooleanProperty MuonR4::MuonFastSegmentFittingAlg::m_beamSpotLength {this, "BeamSpotLength", 2.*Gaudi::Units::m}
private

Beam spot length.

Definition at line 201 of file MuonFastSegmentFittingAlg.h.

201{this, "BeamSpotLength", 2.*Gaudi::Units::m};

◆ m_beamSpotRadius

BooleanProperty MuonR4::MuonFastSegmentFittingAlg::m_beamSpotRadius {this, "BeamSpotRadius", 30.*Gaudi::Units::cm}
private

Beam spot radius.

Definition at line 199 of file MuonFastSegmentFittingAlg.h.

199{this, "BeamSpotRadius", 30.*Gaudi::Units::cm};

◆ m_calibTool

ToolHandle<ISpacePointCalibrator> MuonR4::MuonFastSegmentFittingAlg::m_calibTool {this, "Calibrator", "" }
private

Handle to the space point calibrator tool.

Definition at line 165 of file MuonFastSegmentFittingAlg.h.

165{this, "Calibrator", "" };

◆ m_combMeasKey

SG::WriteHandleKey<xAOD::CombinedMuonStripContainer> MuonR4::MuonFastSegmentFittingAlg::m_combMeasKey {this, "combinedPrdKey", "FastCombinedPrdKey"}
private

Auxiliary container to model two measurements in the same gas gap as a single track state.

Definition at line 158 of file MuonFastSegmentFittingAlg.h.

158{this, "combinedPrdKey", "FastCombinedPrdKey"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default).

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default).

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthCommonAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 108 of file AthCommonAlgorithm.h.

◆ m_fastPreFitter

BooleanProperty MuonR4::MuonFastSegmentFittingAlg::m_fastPreFitter {this, "useFastPreFitter", false}
private

The fast fitter is treated as a pre fitter.

Definition at line 193 of file MuonFastSegmentFittingAlg.h.

193{this, "useFastPreFitter", false};

◆ m_fitter

std::unique_ptr<LineFitter> MuonR4::MuonFastSegmentFittingAlg::m_fitter {}
private

Pointer to the actual segment fitter.

Definition at line 206 of file MuonFastSegmentFittingAlg.h.

206{};

◆ m_geoCtxKey

ActsTrk::GeoContextReadKey_t MuonR4::MuonFastSegmentFittingAlg::m_geoCtxKey {this, "AlignmentKey", "ActsAlignment", "cond handle key"}
private

Geometry context key.

Definition at line 161 of file MuonFastSegmentFittingAlg.h.

161{this, "AlignmentKey", "ActsAlignment", "cond handle key"};

◆ m_goodSegmentCut

DoubleProperty MuonR4::MuonFastSegmentFittingAlg::m_goodSegmentCut {this, "GoodSegmentCut", 2.}
private

Reduced chi2 defining a good segment, stopping the fit of other segments in the same station.

Definition at line 181 of file MuonFastSegmentFittingAlg.h.

181{this, "GoodSegmentCut", 2.};

◆ m_goodSegmentDoF

UnsignedIntegerProperty MuonR4::MuonFastSegmentFittingAlg::m_goodSegmentDoF {this, "GoodSegmentDoF", 5}
private

Number of degrees of freedom defining a good segment, stopping the fit of other segments in the same station.

Definition at line 183 of file MuonFastSegmentFittingAlg.h.

183{this, "GoodSegmentDoF", 5};

◆ m_hessianResidual

BooleanProperty MuonR4::MuonFastSegmentFittingAlg::m_hessianResidual {this, "useHessianResidual", false}
private

Use the expliciit Hessian in the residual calculation.

Definition at line 174 of file MuonFastSegmentFittingAlg.h.

174{this, "useHessianResidual", false};

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> MuonR4::MuonFastSegmentFittingAlg::m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
private

Handle to the MuonIdHelper service.

Definition at line 163 of file MuonFastSegmentFittingAlg.h.

163{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};

◆ m_ignoreFailedPreFit

BooleanProperty MuonR4::MuonFastSegmentFittingAlg::m_ignoreFailedPreFit {this, "ignoreFailedPreFit", false}
private

Switch to try the full fit when the fast pre-fitter fails.

Definition at line 195 of file MuonFastSegmentFittingAlg.h.

195{this, "ignoreFailedPreFit", false};

◆ m_inPatterns

SG::ReadHandleKey<GlobalPatternContainer> MuonR4::MuonFastSegmentFittingAlg::m_inPatterns {this, "InPatterns", "MuonR4GlobalPatterns", "Global patterns to read"}
private

Write handle key for the output global patterns.

Definition at line 141 of file MuonFastSegmentFittingAlg.h.

141{this, "InPatterns", "MuonR4GlobalPatterns", "Global patterns to read"};

◆ m_localSegCovKey

DecorKey_t MuonR4::MuonFastSegmentFittingAlg::m_localSegCovKey {this, "LocalCovParKey", m_outSegments, "localSegCov"}
private

Decoration of the local fit covariance parameters.

Definition at line 152 of file MuonFastSegmentFittingAlg.h.

152{this, "LocalCovParKey", m_outSegments, "localSegCov"};

◆ m_localSegParKey

DecorKey_t MuonR4::MuonFastSegmentFittingAlg::m_localSegParKey {this, "LocalSegParKey", m_outSegments, "localSegPars"}
private

Decoration of the local segment parameters.

Definition at line 150 of file MuonFastSegmentFittingAlg.h.

150{this, "LocalSegParKey", m_outSegments, "localSegPars"};

◆ m_maxIter

UnsignedIntegerProperty MuonR4::MuonFastSegmentFittingAlg::m_maxIter {this, "maxIterations", 50}
private

Tune the number of iterations.

Definition at line 197 of file MuonFastSegmentFittingAlg.h.

197{this, "maxIterations", 50};

◆ m_mdtSeeder

std::unique_ptr<MdtSegmentSeeder> MuonR4::MuonFastSegmentFittingAlg::m_mdtSeeder {}
private

Pointer to the L-R segment seeder.

Definition at line 210 of file MuonFastSegmentFittingAlg.h.

210{};

◆ m_nswFitter

std::unique_ptr<LineFitter> MuonR4::MuonFastSegmentFittingAlg::m_nswFitter {}
private

Pointer to the NSW segment fitter.

Definition at line 208 of file MuonFastSegmentFittingAlg.h.

208{};

◆ m_outlierRemovalCut

DoubleProperty MuonR4::MuonFastSegmentFittingAlg::m_outlierRemovalCut {this, "OutlierRemoval", 3.}
private

Cut on the segment chi2 / nDoF to launch the outlier removal.

Definition at line 185 of file MuonFastSegmentFittingAlg.h.

185{this, "OutlierRemoval", 3.};

◆ m_outSegments

SG::WriteHandleKey<xAOD::MuonSegmentContainer> MuonR4::MuonFastSegmentFittingAlg::m_outSegments {this, "OutSegments", "FastMuonSegments", "Segments to write"}
private

Write handle key for the output segments.

Definition at line 143 of file MuonFastSegmentFittingAlg.h.

143{this, "OutSegments", "FastMuonSegments", "Segments to write"};

◆ m_patternKey

DecorKey_t MuonR4::MuonFastSegmentFittingAlg::m_patternKey {this, "ParentPatternKey", m_outSegments, "GlobalPatternLink", "Parent global pattern for the segments"}
private

Parent global pattern decoration of the segments.

Definition at line 148 of file MuonFastSegmentFittingAlg.h.

148{this, "ParentPatternKey", m_outSegments, "GlobalPatternLink", "Parent global pattern for the segments"};

◆ m_prdLinkKey

DecorKey_t MuonR4::MuonFastSegmentFittingAlg::m_prdLinkKey {this, "PrdLinkKey", m_outSegments, "prdLinks" }
private

Decoration to the links to the associated Uncalibrated measurements.

Definition at line 154 of file MuonFastSegmentFittingAlg.h.

154{this, "PrdLinkKey", m_outSegments, "prdLinks" };

◆ m_prdStateKey

DecorKey_t MuonR4::MuonFastSegmentFittingAlg::m_prdStateKey {this, "PrdStateKey", m_outSegments, "prdState"}
private

Decoration to the PrdLink state (I.e.

outlier or valid)

Definition at line 156 of file MuonFastSegmentFittingAlg.h.

156{this, "PrdStateKey", m_outSegments, "prdState"};

◆ m_precHitCut

UnsignedIntegerProperty MuonR4::MuonFastSegmentFittingAlg::m_precHitCut {this, "PrecHitCut" , 3}
private

Minimum number of precision hits to accept the segment.

Definition at line 189 of file MuonFastSegmentFittingAlg.h.

189{this, "PrecHitCut" , 3};

◆ m_recalibInFit

BooleanProperty MuonR4::MuonFastSegmentFittingAlg::m_recalibInFit {this, "recalibInFit" , false}
private

Toggle the recalibration of hits during the segment fit.

Definition at line 172 of file MuonFastSegmentFittingAlg.h.

172{this, "recalibInFit" , false};

◆ m_recalibSeed

BooleanProperty MuonR4::MuonFastSegmentFittingAlg::m_recalibSeed {this, "SeedRecalibrate", false}
private

Toggle seed recalibration.

The two seed circles are recalibrated using the initial seed

Definition at line 179 of file MuonFastSegmentFittingAlg.h.

179{this, "SeedRecalibrate", false};

◆ m_recoveryPull

DoubleProperty MuonR4::MuonFastSegmentFittingAlg::m_recoveryPull {this, "RecoveryPull", 3.}
private

Pull value for hit recovery.

Definition at line 187 of file MuonFastSegmentFittingAlg.h.

187{this, "RecoveryPull", 3.};

◆ m_seedHitChi2

DoubleProperty MuonR4::MuonFastSegmentFittingAlg::m_seedHitChi2 {this, "ResoSeedHitAssoc", 5. }
private

Two mdt seeds are the same if their defining parameters match wihin.

Definition at line 176 of file MuonFastSegmentFittingAlg.h.

176{this, "ResoSeedHitAssoc", 5. };

◆ m_segmentCnvTool

ToolHandle<IxAODSegmentCnvTool> MuonR4::MuonFastSegmentFittingAlg::m_segmentCnvTool {this, "SegmentCnvTool", ""}
private

Segment converter tool.

Definition at line 167 of file MuonFastSegmentFittingAlg.h.

167{this, "SegmentCnvTool", ""};

◆ m_segVisionTool

ToolHandle<MuonValR4::IPatternVisualizationTool> MuonR4::MuonFastSegmentFittingAlg::m_segVisionTool {this, "VisualizationTool", ""}
private

Handle to the visualization tool for segments.

Definition at line 169 of file MuonFastSegmentFittingAlg.h.

169{this, "VisualizationTool", ""};

◆ m_spSorter

SpacePointPerLayerSorter MuonR4::MuonFastSegmentFittingAlg::m_spSorter {}
private

Spacepoint sorter per logical measurement layer.

Definition at line 204 of file MuonFastSegmentFittingAlg.h.

204{};

◆ m_useFastFitter

BooleanProperty MuonR4::MuonFastSegmentFittingAlg::m_useFastFitter {this, "useFastFitter", false}
private

Use the fast Mdt fitter where possible.

Definition at line 191 of file MuonFastSegmentFittingAlg.h.

191{this, "useFastFitter", false};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: