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

#include <SpacePointMakerAlg.h>

Inheritance diagram for MuonR4::SpacePointMakerAlg:

Classes

struct  SpacePointsPerChamber
 : Helper struct to collect the space point per muon chamber, which are later sorted into the space point buckets. More...
class  SpacePointStatistics
 Helper class to keep track of how many eta+phi, eta and phi only space points are built in various detector regions. More...

Public Member Functions

 ~SpacePointMakerAlg ()=default
StatusCode execute (const EventContext &ctx) const override
StatusCode initialize () override
StatusCode finalize () override
template<>
bool passOccupancy2D (const std::vector< const xAOD::TgcStrip * > &etaHits, const std::vector< const xAOD::TgcStrip * > &phiHits) const
template<>
bool passOccupancy2D (const std::vector< const xAOD::RpcMeasurement * > &etaHits, const std::vector< const xAOD::RpcMeasurement * > &phiHits) const
template<>
bool passOccupancy2D (const std::vector< const xAOD::sTgcMeasurement * > &etaHits, const std::vector< const xAOD::sTgcMeasurement * > &phiHits) const
template<>
bool passOccupancy2D (const std::vector< const xAOD::MMCluster * > &, const std::vector< const xAOD::MMCluster * > &) const
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
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
virtual void setFilterPassed (bool state, const EventContext &ctx) const
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

using PreSortedSpacePointMap = std::unordered_map<const MuonGMR4::SpectrometerSector*, SpacePointsPerChamber>
 Container abrivation of the presorted space point container per MuonChambers.
using SpacePointBucketVec = std::vector<SpacePointBucket>
 Abrivation of a MuonSapcePoint bucket vector.
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

template<class ContType>
StatusCode loadContainerAndSort (const EventContext &ctx, const SG::ReadHandleKey< ContType > &key, PreSortedSpacePointMap &fillContainer) const
 Retrieve an uncalibrated measurement container <ContType> and fill the hits into the presorted space point map.
template<class PrdType>
bool passOccupancy2D (const std::vector< const PrdType * > &etaHits, const std::vector< const PrdType * > &phiHits) const
 : Check whether the occupancy cuts of hits in a gasGap are surpassed.
template<class PrdType>
void fillUncombinedSpacePoints (const ActsTrk::GeometryContext &gctx, const Amg::Transform3D &sectorTrans, const std::vector< const PrdType * > &prdsToFill, std::vector< SpacePoint > &outColl) const
 Fills all space points that are beloni.
void distributePointsAndStore (SpacePointsPerChamber &&hitsPerChamber, SpacePointContainer &finalContainer) const
 Distribute the premade spacepoints per chamber into their individual SpacePoint buckets.
void distributePrimaryPoints (std::vector< SpacePoint > &&spacePoints, SpacePointBucketVec &splittedContainer) const
 Distributes the vector of primary eta or eta + phi space points and fills them into the buckets.
void distributePhiPoints (std::vector< SpacePoint > &&spacePoints, SpacePointBucketVec &splittedContainer) const
 Distributs the vector phi space points into the buckets.
bool splitBucket (const SpacePoint &spacePoint, const double firstSpPos, const SpacePointBucketVec &sortedPoints) const
 Returns whether the space point is beyond the bucket boundary.
void newBucket (const SpacePoint &refSp, SpacePointBucketVec &sortedPoints) const
 Closes the current processed bucket and creates a new one.
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

SG::ReadHandleKey< xAOD::MdtDriftCircleContainerm_mdtKey
SG::ReadHandleKey< xAOD::RpcMeasurementContainerm_rpcKey
SG::ReadHandleKey< xAOD::TgcStripContainerm_tgcKey
SG::ReadHandleKey< xAOD::MMClusterContainerm_mmKey
SG::ReadHandleKey< xAOD::sTgcMeasContainerm_stgcKey {this, "sTgcKey", "xAODsTgcMeasurements"}
SG::ReadHandleKey< ActsTrk::GeometryContextm_geoCtxKey {this, "AlignmentKey", "ActsAlignment", "cond handle key"}
ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {this, "IdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
SG::WriteHandleKey< SpacePointContainerm_writeKey {this, "WriteKey", "MuonSpacePoints"}
Gaudi::Property< double > m_spacePointWindow
Gaudi::Property< double > m_maxBucketLength
Gaudi::Property< double > m_spacePointOverlap
Gaudi::Property< bool > m_doStat
Gaudi::Property< unsigned > m_capacityBucket {this,"CapacityBucket" , 50}
std::unique_ptr< SpacePointStatistics > m_statCounter ATLAS_THREAD_SAFE {}
Gaudi::Property< double > m_maxOccRpcEta
Gaudi::Property< double > m_maxOccRpcPhi
Gaudi::Property< double > m_maxOccTgcEta
Gaudi::Property< double > m_maxOccTgcPhi
Gaudi::Property< double > m_maxOccStgcEta
Gaudi::Property< double > m_maxOccStgcPhi
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

Detailed Description

Definition at line 27 of file SpacePointMakerAlg.h.

Member Typedef Documentation

◆ PreSortedSpacePointMap

Container abrivation of the presorted space point container per MuonChambers.

Definition at line 93 of file SpacePointMakerAlg.h.

◆ SpacePointBucketVec

Abrivation of a MuonSapcePoint bucket vector.

Definition at line 96 of file SpacePointMakerAlg.h.

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ ~SpacePointMakerAlg()

MuonR4::SpacePointMakerAlg::~SpacePointMakerAlg ( )
default

Member Function Documentation

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::cardinality ( ) const
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

64{
65 return 0;
66}

◆ 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.

◆ distributePhiPoints()

void MuonR4::SpacePointMakerAlg::distributePhiPoints ( std::vector< SpacePoint > && spacePoints,
SpacePointBucketVec & splittedContainer ) const
private

Distributs the vector phi space points into the buckets.

In contrast to the primary distribution no new buckets are created and the points are distributed into the existing ones instead.

Parameters
spacePointVecotr of phi space points to sort into the buckets
splittedContainerOutput vector containing all defined bucket

If maxY is smaller than the lower cov boundary or minY is bigger than the other boundary, there's definetely no overlap

Definition at line 449 of file SpacePointMakerAlg.cxx.

450 {
451 for (SpacePoint& sp : spacePoints) {
452 auto phiPoint = std::make_shared<SpacePoint>(std::move(sp));
453 const double dY = std::sqrt(phiPoint->covariance()[Acts::toUnderlying(CovIdx::etaCov)]);
454 const double minY = phiPoint->localPosition().y() - dY;
455 const double maxY = phiPoint->localPosition().y() + dY;
456 for (SpacePointBucket& bucket : splittedContainer){
459 if (! (maxY < bucket.coveredMin() || bucket.coveredMax() < minY) ) {
460 bucket.emplace_back(phiPoint);
461 }
462 }
463 }
464}
static Double_t sp

◆ distributePointsAndStore()

void MuonR4::SpacePointMakerAlg::distributePointsAndStore ( SpacePointsPerChamber && hitsPerChamber,
SpacePointContainer & finalContainer ) const
private

Distribute the premade spacepoints per chamber into their individual SpacePoint buckets.

A new bucket is created everytime if the hit to fill is along the z-axis farther away from the first point in the bucket than the <spacePointWindowSize>. Hit in the previous bucket which are <spacePointOverlap> away from the first hit in the new bucket are also mirrored. The bucket formation starts with the eta Muon space points and then consumes the phi hits.

Parameters
ctxEvent context of the current event
hitsPerChamberList of all premade space points which have to be sorted
finalContainerOutput SpacePoint bucket container.

Definition at line 417 of file SpacePointMakerAlg.cxx.

418 {
419 SpacePointBucketVec splittedHits{};
420 splittedHits.emplace_back();
421 if (m_statCounter){
422 m_statCounter->addToStat(hitsPerChamber.etaHits);
423 m_statCounter->addToStat(hitsPerChamber.phiHits);
424
425 }
426 distributePrimaryPoints(std::move(hitsPerChamber.etaHits), splittedHits);
427 splittedHits.erase(std::remove_if(splittedHits.begin(), splittedHits.end(),
428 [](const SpacePointBucket& bucket) {
429 return bucket.size() <= 1;
430 }), splittedHits.end());
431 distributePhiPoints(std::move(hitsPerChamber.phiHits), splittedHits);
432
433 for (SpacePointBucket& bucket : splittedHits) {
434
435 std::ranges::sort(bucket, MuonR4::SpacePointPerLayerSorter{});
436
437 if (msgLvl(MSG::VERBOSE)){
438 std::stringstream spStr{};
439 for (const std::shared_ptr<SpacePoint>& sp : bucket){
440 spStr<<"SpacePoint: PrimaryMeas: " <<(*sp)<<std::endl;
441 }
442 ATH_MSG_VERBOSE("Created a bucket, printing all spacepoints..."<<std::endl<<spStr.str());
443 }
444 bucket.populateChamberLocations();
445 finalContainer.push_back(std::make_unique<SpacePointBucket>(std::move(bucket)));
446 }
447
448}
#define ATH_MSG_VERBOSE(x)
bool msgLvl(const MSG::Level lvl) const
void distributePhiPoints(std::vector< SpacePoint > &&spacePoints, SpacePointBucketVec &splittedContainer) const
Distributs the vector phi space points into the buckets.
std::vector< SpacePointBucket > SpacePointBucketVec
Abrivation of a MuonSapcePoint bucket vector.
void distributePrimaryPoints(std::vector< SpacePoint > &&spacePoints, SpacePointBucketVec &splittedContainer) const
Distributes the vector of primary eta or eta + phi space points and fills them into the buckets.
DataModel_detail::iterator< DVL > remove_if(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end, Predicate pred)
Specialization of remove_if for DataVector/List.

◆ distributePrimaryPoints()

void MuonR4::SpacePointMakerAlg::distributePrimaryPoints ( std::vector< SpacePoint > && spacePoints,
SpacePointBucketVec & splittedContainer ) const
private

Distributes the vector of primary eta or eta + phi space points and fills them into the buckets.

The buckets are dynamically created based on the distance of the new space point to sort to the previous or the first space point in the bucket.

Parameters
spacePointsVector of space points to sort into the buckets
splittedContainerOutput vector containing all defined bucket

Order the space points by local chamber y which is along the tube-plane.

Definition at line 504 of file SpacePointMakerAlg.cxx.

505 {
506
507 if (spacePoints.empty()) return;
508
510 std::ranges::sort(spacePoints,
511 [] (const SpacePoint& a, const SpacePoint& b) {
512 return a.localPosition().y() < b.localPosition().y();
513 });
514
515 double firstPointPos = spacePoints.front().localPosition().y();
516
517 for (SpacePoint& toSort : spacePoints) {
518 ATH_MSG_VERBOSE("Add new primary space point "<<toSort);
519
520 if (splitBucket(toSort, firstPointPos, splittedHits)){
521 newBucket(toSort, splittedHits);
522 firstPointPos = splittedHits.back().empty() ? toSort.localPosition().y() : splittedHits.back().front()->localPosition().y();
523 ATH_MSG_VERBOSE("New bucket: id " << splittedHits.back().bucketId() << " Coverage: " << firstPointPos);
524 }
525 std::shared_ptr<SpacePoint> spacePoint = std::make_shared<SpacePoint>(std::move(toSort));
526 splittedHits.back().emplace_back(spacePoint);
527 }
528 SpacePointBucket& lastBucket{splittedHits.back()};
529 lastBucket.setCoveredRange(lastBucket.front()->localPosition().y(),
530 lastBucket.back()->localPosition().y());
531}
static Double_t a
void newBucket(const SpacePoint &refSp, SpacePointBucketVec &sortedPoints) const
Closes the current processed bucket and creates a new one.
bool splitBucket(const SpacePoint &spacePoint, const double firstSpPos, const SpacePointBucketVec &sortedPoints) const
Returns whether the space point is beyond the bucket boundary.

◆ 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::SpacePointMakerAlg::execute ( const EventContext & ctx) const
override

Definition at line 398 of file SpacePointMakerAlg.cxx.

398 {
399 PreSortedSpacePointMap preSortedContainer{};
400 ATH_CHECK(loadContainerAndSort(ctx, m_mdtKey, preSortedContainer));
401 ATH_CHECK(loadContainerAndSort(ctx, m_rpcKey, preSortedContainer));
402 ATH_CHECK(loadContainerAndSort(ctx, m_tgcKey, preSortedContainer));
403 ATH_CHECK(loadContainerAndSort(ctx, m_mmKey, preSortedContainer));
404 ATH_CHECK(loadContainerAndSort(ctx, m_stgcKey, preSortedContainer));
405 std::unique_ptr<SpacePointContainer> outContainer = std::make_unique<SpacePointContainer>();
406
407 for (auto &[chamber, hitsPerChamber] : preSortedContainer){
408 ATH_MSG_DEBUG("Fill space points for chamber "<<chamber->identString() << " with "<<hitsPerChamber.etaHits.size()
409 <<" primary and "<<hitsPerChamber.phiHits.size()<<" phi space points.");
410 distributePointsAndStore(std::move(hitsPerChamber), *outContainer);
411 }
412 SG::WriteHandle writeHandle{m_writeKey, ctx};
413 ATH_CHECK(writeHandle.record(std::move(outContainer)));
414 return StatusCode::SUCCESS;
415}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
SG::ReadHandleKey< xAOD::TgcStripContainer > m_tgcKey
SG::ReadHandleKey< xAOD::MMClusterContainer > m_mmKey
SG::WriteHandleKey< SpacePointContainer > m_writeKey
StatusCode loadContainerAndSort(const EventContext &ctx, const SG::ReadHandleKey< ContType > &key, PreSortedSpacePointMap &fillContainer) const
Retrieve an uncalibrated measurement container <ContType> and fill the hits into the presorted space ...
SG::ReadHandleKey< xAOD::RpcMeasurementContainer > m_rpcKey
SG::ReadHandleKey< xAOD::sTgcMeasContainer > m_stgcKey
void distributePointsAndStore(SpacePointsPerChamber &&hitsPerChamber, SpacePointContainer &finalContainer) const
Distribute the premade spacepoints per chamber into their individual SpacePoint buckets.
std::unordered_map< const MuonGMR4::SpectrometerSector *, SpacePointsPerChamber > PreSortedSpacePointMap
Container abrivation of the presorted space point container per MuonChambers.
SG::ReadHandleKey< xAOD::MdtDriftCircleContainer > m_mdtKey
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.

◆ 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 & AthCommonReentrantAlgorithm< 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 94 of file AthCommonReentrantAlgorithm.cxx.

90{
91 // If we didn't find any symlinks to add, just return the collection
92 // from the base class. Otherwise, return the extended collection.
93 if (!m_extendedExtraObjects.empty()) {
95 }
97}
An algorithm that can be simultaneously executed in multiple threads.

◆ fillUncombinedSpacePoints()

template<typename PrdType>
void MuonR4::SpacePointMakerAlg::fillUncombinedSpacePoints ( const ActsTrk::GeometryContext & gctx,
const Amg::Transform3D & sectorTrans,
const std::vector< const PrdType * > & prdsToFill,
std::vector< SpacePoint > & outColl ) const
private

Fills all space points that are beloni.

Local coordinate system aligned such that the strips point along local y

The measurement is a phi measurement

Definition at line 194 of file SpacePointMakerAlg.cxx.

197 {
198 if (prdsToFill.empty()) {
199 return;
200 }
201 const PrdType* refMeas = prdsToFill.front();
202 bool allSpArePhi{false};
203
204 const Amg::Transform3D toSectorTrans = toChamberTransform(gctx, sectorTrans, *refMeas);
206 Amg::Vector3D sensorDir{Amg::Vector3D::Zero()}, toNextSen{Amg::Vector3D::Zero()};
208 if constexpr(std::is_same_v<PrdType, xAOD::RpcMeasurement> ||
209 std::is_same_v<PrdType, xAOD::TgcStrip>) {
210 allSpArePhi = refMeas->measuresPhi();
211 const auto& stripLayout = refMeas->readoutElement()->sensorLayout(refMeas->layerHash());
212 const auto& design = stripLayout->design(allSpArePhi);
213 sensorDir = toSectorTrans.rotation() * stripLayout->to3D(design.stripDir(), allSpArePhi);
214 toNextSen = toSectorTrans.rotation() * stripLayout->to3D(design.stripNormal(), allSpArePhi);
215 } else {
216 sensorDir = toSectorTrans.rotation().col(Amg::y);
217 toNextSen = toSectorTrans.rotation().col(Amg::x);
218 }
219 outColl.reserve(outColl.size() + prdsToFill.size());
220 for (const PrdType* prd: prdsToFill) {
221 SpacePoint& newSp = outColl.emplace_back(prd);
222 if constexpr (std::is_same_v<PrdType, xAOD::TgcStrip>) {
223 if (allSpArePhi) {
224 const auto& stripLayout = refMeas->readoutElement()->sensorLayout(refMeas->layerHash());
225 const auto& radialDesign = static_cast<const MuonGMR4::RadialStripDesign&>(stripLayout->design(allSpArePhi));
226 toNextSen = toSectorTrans.rotation() * stripLayout->to3D(radialDesign.stripNormal(prd->channelNumber()), allSpArePhi);
227 sensorDir = toSectorTrans.rotation() * stripLayout->to3D(radialDesign.stripDir(prd->channelNumber()), allSpArePhi);
228 }
229 }
230 newSp.setPosition(toSectorTrans * prd->localMeasurementPos());
231 newSp.setDirection(sensorDir, toNextSen);
232 auto cov = Acts::filledArray<double,3>(0.);
233 if (prd->numDimensions() == 2) {
234 if constexpr(std::is_same_v<PrdType, xAOD::RpcMeasurement>) {
235 cov[Acts::toUnderlying(CovIdx::etaCov)] = prd->template localCovariance<2>()(0,0);
236 cov[Acts::toUnderlying(CovIdx::phiCov)] = prd->template localCovariance<2>()(1,1);
237 } else if constexpr(std::is_same_v<PrdType, xAOD::sTgcMeasurement>) {
238 cov[Acts::toUnderlying(CovIdx::phiCov)] = prd->template localCovariance<2>()(0,0);
239 cov[Acts::toUnderlying(CovIdx::etaCov)] = prd->template localCovariance<2>()(1,1);
240 } else {
241 ATH_MSG_WARNING("Unsupported measurement type. "<<typeid(PrdType).name());
242 // Prevent division by zero later on.
243 cov[Acts::toUnderlying(CovIdx::phiCov)] = 1;
244 cov[Acts::toUnderlying(CovIdx::etaCov)] = 1;
245 }
246 } else {
248 if (newSp.measuresEta()) {
249 cov[Acts::toUnderlying(CovIdx::etaCov)] = prd->template localCovariance<1>()[0];
250 cov[Acts::toUnderlying(CovIdx::phiCov)] = Acts::square(sensorHalfLength(*prd));
251 } else {
252 cov[Acts::toUnderlying(CovIdx::phiCov)] = prd->template localCovariance<1>()[0];
253 cov[Acts::toUnderlying(CovIdx::etaCov)] = Acts::square(sensorHalfLength(*prd));
254 }
255 }
256 newSp.setCovariance(std::move(cov));
257 }
258}
#define ATH_MSG_WARNING(x)
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D

◆ filterPassed()

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

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96 {
97 return execState( ctx ).filterPassed();
98 }
virtual bool filterPassed(const EventContext &ctx) const

◆ finalize()

StatusCode MuonR4::SpacePointMakerAlg::finalize ( )
override

Definition at line 134 of file SpacePointMakerAlg.cxx.

134 {
135 if (m_statCounter) {
136 m_statCounter->dumpStatisics(msgStream());
137 }
138 return StatusCode::SUCCESS;
139}

◆ initialize()

StatusCode MuonR4::SpacePointMakerAlg::initialize ( )
override

Definition at line 140 of file SpacePointMakerAlg.cxx.

140 {
141 ATH_CHECK(m_geoCtxKey.initialize());
142 ATH_CHECK(m_mdtKey.initialize(!m_mdtKey.empty()));
143 ATH_CHECK(m_rpcKey.initialize(!m_rpcKey.empty()));
144 ATH_CHECK(m_tgcKey.initialize(!m_tgcKey.empty()));
145 ATH_CHECK(m_mmKey.initialize(!m_mmKey.empty()));
146 ATH_CHECK(m_stgcKey.initialize(!m_stgcKey.empty()));
147 ATH_CHECK(m_idHelperSvc.retrieve());
148 ATH_CHECK(m_writeKey.initialize());
149 if (m_doStat) {
150 m_statCounter = std::make_unique<SpacePointStatistics>(m_idHelperSvc.get());
151 }
152 return StatusCode::SUCCESS;
153}
Gaudi::Property< bool > m_doStat
SG::ReadHandleKey< ActsTrk::GeometryContext > m_geoCtxKey
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc

◆ 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()

◆ loadContainerAndSort()

template<class ContType>
StatusCode MuonR4::SpacePointMakerAlg::loadContainerAndSort ( const EventContext & ctx,
const SG::ReadHandleKey< ContType > & key,
PreSortedSpacePointMap & fillContainer ) const
private

Retrieve an uncalibrated measurement container <ContType> and fill the hits into the presorted space point map.

Per associated MuonChamber, hits from Tgc, Rpc, sTgcs are grouped by their gasGap location and then divided into eta & phi measurements. If both are found, each eta measurement is combined with phi measurement into a SpacePoint. In any other case, the measurements are just transformed into a SpacePoint.

Parameters
ctxEvent context of the current event
keyReadHandleKey to access the container of data type <ContType>
fillContainerGlobal container into which all space points are filled.

Loop over the chamber hits to split the hits per gasGap

Wires measure the phi coordinate

Tgc & Rpcs have the measuresPhi property

Sort in the hit

Fill in the 2D measurements BIL Rpc / sTGC pad

Only one dimensional space points can be built

Simple combination by taking the cross-product

There's no valid combination with another phi hit

Tgc measurements with different bunch crossing tags cannot be combined

Definition at line 260 of file SpacePointMakerAlg.cxx.

262 {
263 const ContType* measurementCont{nullptr};
264 ATH_CHECK(SG::get(measurementCont, key, ctx));
265 if (!measurementCont || measurementCont->empty()){
266 ATH_MSG_DEBUG("nothing to do");
267 return StatusCode::SUCCESS;
268 }
269 const ActsTrk::GeometryContext* gctx{nullptr};
270 ATH_CHECK(SG::get(gctx, m_geoCtxKey, ctx));
271
272 using PrdType = typename ContType::const_value_type;
273 using PrdVec = std::vector<PrdType>;
274 xAOD::ChamberViewer viewer{*measurementCont};
275 do {
276 SpacePointsPerChamber& pointsInChamb = fillContainer[viewer.at(0)->readoutElement()->msSector()];
277 const Amg::Transform3D sectorTrans = viewer.at(0)->readoutElement()->msSector()->globalToLocalTrans(*gctx);
278 ATH_MSG_DEBUG("Fill space points for chamber "<<m_idHelperSvc->toStringDetEl(viewer.at(0)->identify()));
279 if constexpr( std::is_same_v<ContType, xAOD::MdtDriftCircleContainer>) {
280 pointsInChamb.etaHits.reserve(pointsInChamb.etaHits.capacity() + viewer.size());
281 for (const PrdType prd : viewer) {
282 Amg::Transform3D toChamberTrans{toChamberTransform(*gctx, sectorTrans, *prd)};
283 SpacePoint& sp{pointsInChamb.etaHits.emplace_back(prd)};
284 sp.setPosition(toChamberTrans*prd->localMeasurementPos());
285 sp.setDirection(toChamberTrans.rotation().col(Amg::z),
286 toChamberTrans.rotation().col(Amg::y));
287 std::array<double, 3> cov{Acts::filledArray<double,3>(0.)};
288 cov[Acts::toUnderlying(CovIdx::etaCov)] = prd->driftRadiusCov();
289 cov[Acts::toUnderlying(CovIdx::phiCov)] = Acts::square(sensorHalfLength(*prd));
290 if (ATH_UNLIKELY(prd->numDimensions() == 2)){
291 cov[Acts::toUnderlying(CovIdx::phiCov)] = static_cast<const xAOD::MdtTwinDriftCircle*>(prd)->posAlongWireCov();
292 }
293 sp.setCovariance(std::move(cov));
294 }
295 } else {
297 using EtaPhi2DHits = std::array<PrdVec, 3>;
298 std::vector<EtaPhi2DHits> hitsPerGasGap{};
299 for (const PrdType prd : viewer) {
300 ATH_MSG_VERBOSE("Create space point from "<<m_idHelperSvc->toString(prd->identify())
301 <<", hash: "<<prd->identifierHash());
302
303 unsigned gapIdx = prd->gasGap() -1;
304 if constexpr (std::is_same_v<ContType, xAOD::RpcMeasurementContainer>) {
305 gapIdx = prd->readoutElement()->createHash(0, prd->gasGap(), prd->doubletPhi(), false);
306 }
307 if (hitsPerGasGap.size() <= gapIdx) {
308 hitsPerGasGap.resize(gapIdx + 1);
309 }
310 bool measPhi{false};
311 if constexpr(std::is_same_v<ContType, xAOD::sTgcMeasContainer>) {
313 measPhi = prd->channelType() == sTgcIdHelper::sTgcChannelTypes::Wire;
314 } else if constexpr(!std::is_same_v<ContType, xAOD::MMClusterContainer>) {
316 measPhi = prd->measuresPhi();
317 }
318
319 if (prd->numDimensions() == 2) {
320 hitsPerGasGap[gapIdx][2].push_back(prd);
321 continue;
322 }
324 PrdVec& toPush = hitsPerGasGap[gapIdx][measPhi];
325 if (toPush.capacity() == toPush.size()) {
326 toPush.reserve(toPush.size() + m_capacityBucket);
327 }
328 toPush.push_back(prd);
329 }
330
331 for (auto& [etaHits, phiHits, two2DHits] : hitsPerGasGap) {
332 ATH_MSG_DEBUG("Found "<<etaHits.size()<<"/"<<phiHits.size()<<" 1D and "<<two2DHits.size()<<" 2D hits in chamber "<<m_idHelperSvc->toStringDetEl(viewer.at(0)->identify()));
334 fillUncombinedSpacePoints(*gctx, sectorTrans, two2DHits, pointsInChamb.etaHits);
336 if (!passOccupancy2D(etaHits, phiHits)) {
337 fillUncombinedSpacePoints(*gctx, sectorTrans, etaHits, pointsInChamb.etaHits);
338 fillUncombinedSpacePoints(*gctx, sectorTrans, phiHits, pointsInChamb.phiHits);
339 continue;
340 }
341
342 std::vector<std::shared_ptr<unsigned>> etaCounts{matchCountVec(etaHits.size())},
343 phiCounts{matchCountVec(phiHits.size())};
344 pointsInChamb.etaHits.reserve(pointsInChamb.etaHits.size() + etaHits.size()*phiHits.size());
346 const PrdType firstEta{etaHits.front()};
347 const PrdType firstPhi{phiHits.front()};
348
349 const Amg::Transform3D toSectorTransEta = toChamberTransform(*gctx, sectorTrans, *firstEta);
350 const Amg::Transform3D toSectorTransPhi = toChamberTransform(*gctx, sectorTrans, *firstPhi);
351
352 Amg::Vector3D toNextDir{Amg::Vector3D::Zero()}, sensorDir{Amg::Vector3D::Zero()};
353
354 if constexpr (std::is_same_v<xAOD::RpcMeasurementContainer, ContType> ||
355 std::is_same_v<xAOD::TgcStripContainer, ContType>) {
356 const auto& stripLayout = firstEta->readoutElement()->sensorLayout(firstEta->layerHash());
357 const auto& design = stripLayout->design();
358 sensorDir = toSectorTransEta.rotation() * stripLayout->to3D(design.stripDir(), false);
359 toNextDir = toSectorTransEta.rotation() * stripLayout->to3D(design.stripNormal(), false);
360 } else {
361 toNextDir = toSectorTransEta.rotation().col(Amg::x);
362 sensorDir = toSectorTransEta.rotation().col(Amg::y);
363 }
364 using namespace Acts::detail::LineHelper;
365 for (unsigned etaP = 0; etaP < etaHits.size(); ++etaP) {
367 for (unsigned phiP = 0; phiP < phiHits.size(); ++ phiP) {
369 if constexpr(std::is_same_v<xAOD::TgcStripContainer, ContType>) {
370 if (!(etaHits[etaP]->bcBitMap() & phiHits[phiP]->bcBitMap())){
371 continue;
372 }
373 const auto& stripLay = phiHits[phiP]->readoutElement()->sensorLayout(phiHits[phiP]->layerHash());
374 const auto& radialDesign = static_cast<const MuonGMR4::RadialStripDesign&>(stripLay->design(true));
375 toNextDir = toSectorTransPhi.rotation() * stripLay->to3D(radialDesign.stripDir(phiHits[phiP]->channelNumber()), true);
376 }
377 SpacePoint& newSp = pointsInChamb.etaHits.emplace_back(etaHits[etaP], phiHits[phiP]);
378 newSp.setInstanceCounts(etaCounts[etaP], phiCounts[phiP]);
379
380 auto spIsect = lineIntersect(toSectorTransEta*etaHits[etaP]->localMeasurementPos(), sensorDir,
381 toSectorTransPhi*phiHits[phiP]->localMeasurementPos(), toNextDir);
382 newSp.setPosition(spIsect.position());
383 newSp.setDirection(sensorDir, toNextDir);
384 auto cov = Acts::filledArray<double, 3>(0.);
385 cov[Acts::toUnderlying(CovIdx::etaCov)] = etaHits[etaP]->template localCovariance<1>()[0];
386 cov[Acts::toUnderlying(CovIdx::phiCov)] = phiHits[phiP]->template localCovariance<1>()[0];
387 newSp.setCovariance(std::move(cov));
388 ATH_MSG_VERBOSE("Created new space point "<<newSp);
389 }
390 }
391 }
392 }
393 } while (viewer.next());
394 return StatusCode::SUCCESS;
395}
#define ATH_UNLIKELY(x)
bool passOccupancy2D(const std::vector< const PrdType * > &etaHits, const std::vector< const PrdType * > &phiHits) const
: Check whether the occupancy cuts of hits in a gasGap are surpassed.
void fillUncombinedSpacePoints(const ActsTrk::GeometryContext &gctx, const Amg::Transform3D &sectorTrans, const std::vector< const PrdType * > &prdsToFill, std::vector< SpacePoint > &outColl) const
Fills all space points that are beloni.
Gaudi::Property< unsigned > m_capacityBucket
const_ref at(const std::size_t idx) const
Returns the i-the measurement from the current chamber.
std::size_t size() const noexcept
Returns how many hits are in the current chamber.
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
MdtTwinDriftCircle_v1 MdtTwinDriftCircle
IdentifierHash layerHash(const UncalibratedMeasurement *meas)
Returns the layer hash from an uncalibrated meaurement.
: Helper struct to collect the space point per muon chamber, which are later sorted into the space po...

◆ 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 }

◆ newBucket()

void MuonR4::SpacePointMakerAlg::newBucket ( const SpacePoint & refSp,
SpacePointBucketVec & sortedPoints ) const
private

Closes the current processed bucket and creates a new one.

Space points of the previous bucket within the overlap region to the first space point of the new bucket are copied over

Parameters
refSpFirst new space point which will be added to the new bucket.
sortedPointsList of all processed buckets in the chamber. The list is augmented by 1 element

Set the boundaries from the previous bucket

Copy space points that could be within the overlap region to the next bucket

Definition at line 479 of file SpacePointMakerAlg.cxx.

480 {
481 SpacePointBucket& newContainer = sortedPoints.emplace_back();
482 newContainer.setBucketId(sortedPoints.size() -1);
483
485 SpacePointBucket& overlap{sortedPoints[sortedPoints.size() - 2]};
486 overlap.setCoveredRange(overlap.front()->localPosition().y(),
487 overlap.back()->localPosition().y());
488
489 const double refBound = refSpacePoint.localPosition().y();
490
492 for (const std::shared_ptr<SpacePoint>& pointInBucket : overlap | std::views::reverse) {
493 const double overlapPos = pointInBucket->localPosition().y() +
494 std::sqrt(pointInBucket->covariance()[Acts::toUnderlying(CovIdx::etaCov)]);
495 if (refBound - overlapPos < m_spacePointOverlap) {
496 newContainer.insert(newContainer.begin(), pointInBucket);
497 } else {
498 break;
499 }
500 }
501
502}
Gaudi::Property< double > m_spacePointOverlap

◆ 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.

◆ passOccupancy2D() [1/5]

template<class PrdType>
bool MuonR4::SpacePointMakerAlg::passOccupancy2D ( const std::vector< const PrdType * > & etaHits,
const std::vector< const PrdType * > & phiHits ) const
private

: Check whether the occupancy cuts of hits in a gasGap are surpassed.

The method is specified for each of the 3 strip technologies, Rpc, Tgc, sTgc and applies a technology-dependent upper bound on the number of phi & eta hits. If the threshold is surpassed, only 1D space points are built intsead of 2D ones

Parameters
etaHitsList of all presorted eta measurements in a gas gap
phiHitsList of all presorted phi measurements in a gas gap

◆ passOccupancy2D() [2/5]

template<>
bool MuonR4::SpacePointMakerAlg::passOccupancy2D ( const std::vector< const xAOD::MMCluster * > & ,
const std::vector< const xAOD::MMCluster * > &  ) const

Definition at line 189 of file SpacePointMakerAlg.cxx.

190 {
191 return false;
192 }

◆ passOccupancy2D() [3/5]

template<>
bool MuonR4::SpacePointMakerAlg::passOccupancy2D ( const std::vector< const xAOD::RpcMeasurement * > & etaHits,
const std::vector< const xAOD::RpcMeasurement * > & phiHits ) const

Definition at line 167 of file SpacePointMakerAlg.cxx.

168 {
169 if (etaHits.empty() || phiHits.empty()) {
170 return false;
171 }
172 const MuonGMR4::RpcReadoutElement* re = etaHits[0]->readoutElement();
173 ATH_MSG_VERBOSE("Collected "<<etaHits.size()<<"/"<<phiHits.size()<<" hits in "<<m_idHelperSvc->toStringGasGap(etaHits[0]->identify()));
174 return ((1.*etaHits.size()) / (1.*re->nEtaStrips())) < m_maxOccRpcEta &&
175 ((1.*phiHits.size()) / (1.*re->nPhiStrips())) < m_maxOccRpcPhi;
176 }
const boost::regex re(r_e)
Gaudi::Property< double > m_maxOccRpcEta
Gaudi::Property< double > m_maxOccRpcPhi

◆ passOccupancy2D() [4/5]

template<>
bool MuonR4::SpacePointMakerAlg::passOccupancy2D ( const std::vector< const xAOD::sTgcMeasurement * > & etaHits,
const std::vector< const xAOD::sTgcMeasurement * > & phiHits ) const

Definition at line 179 of file SpacePointMakerAlg.cxx.

180 {
181 if (etaHits.empty() || phiHits.empty()) {
182 return false;
183 }
184 const MuonGMR4::sTgcReadoutElement* re = etaHits[0]->readoutElement();
185 return ((1.*etaHits.size()) / (1.*re->numChannels(etaHits[0]->measurementHash()))) < m_maxOccStgcEta &&
186 ((1.*phiHits.size()) / (1.*re->numChannels(phiHits[0]->measurementHash()))) < m_maxOccStgcPhi;
187 }
Gaudi::Property< double > m_maxOccStgcPhi
Gaudi::Property< double > m_maxOccStgcEta

◆ passOccupancy2D() [5/5]

template<>
bool MuonR4::SpacePointMakerAlg::passOccupancy2D ( const std::vector< const xAOD::TgcStrip * > & etaHits,
const std::vector< const xAOD::TgcStrip * > & phiHits ) const

Definition at line 156 of file SpacePointMakerAlg.cxx.

157 {
158 if (etaHits.empty() || phiHits.empty()) {
159 return false;
160 }
161 const MuonGMR4::TgcReadoutElement* re = etaHits[0]->readoutElement();
162 ATH_MSG_VERBOSE("Collected "<<etaHits.size()<<"/"<<phiHits.size()<<" hits in "<<m_idHelperSvc->toStringGasGap(etaHits[0]->identify()));
163 return ((1.*etaHits.size()) / ((1.*re->numChannels(etaHits[0]->measurementHash())))) < m_maxOccTgcEta &&
164 ((1.*phiHits.size()) / ((1.*re->numChannels(phiHits[0]->measurementHash())))) < m_maxOccTgcPhi;
165 }
Gaudi::Property< double > m_maxOccTgcEta
Gaudi::Property< double > m_maxOccTgcPhi

◆ 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 AthCommonReentrantAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100 {
102 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const

◆ splitBucket()

bool MuonR4::SpacePointMakerAlg::splitBucket ( const SpacePoint & spacePoint,
const double firstSpPos,
const SpacePointBucketVec & sortedPoints ) const
private

Returns whether the space point is beyond the bucket boundary.

Parameters
spacePointSpace point candidate to add to the bucket
sortedPointsContainer of all defined buckets in the chamber

Distance between this point and the first one exceeds the maximum length

Definition at line 465 of file SpacePointMakerAlg.cxx.

467 {
469 const double spY = spacePoint.localPosition().y();
470 if (spY - firstSpPos > m_maxBucketLength){
471 return true;
472 }
473
474 if (sortedPoints.empty() || sortedPoints.back().empty()) {
475 return false;
476 }
477 return spY - sortedPoints.back().back()->localPosition().y() > m_spacePointWindow;
478}
Gaudi::Property< double > m_spacePointWindow
Gaudi::Property< double > m_maxBucketLength

◆ sysExecute()

StatusCode AthCommonReentrantAlgorithm< 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.

Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.

77{
78 return BaseAlg::sysExecute (ctx);
79}

◆ sysInitialize()

StatusCode AthCommonReentrantAlgorithm< 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 HypoBase, and InputMakerBase.

Definition at line 61 of file AthCommonReentrantAlgorithm.cxx.

107 {
109
110 if (sc.isFailure()) {
111 return sc;
112 }
113
114 ServiceHandle<ICondSvc> cs("CondSvc",name());
115 for (auto h : outputHandles()) {
116 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
117 // do this inside the loop so we don't create the CondSvc until needed
118 if ( cs.retrieve().isFailure() ) {
119 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
120 return StatusCode::SUCCESS;
121 }
122 if (cs->regHandle(this,*h).isFailure()) {
124 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
125 << " with CondSvc");
126 }
127 }
128 }
129 return sc;
130}
#define ATH_MSG_ERROR(x)
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 }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::unique_ptr<SpacePointStatistics> m_statCounter MuonR4::SpacePointMakerAlg::ATLAS_THREAD_SAFE {}
private

Definition at line 199 of file SpacePointMakerAlg.h.

199{};

◆ m_capacityBucket

Gaudi::Property<unsigned> MuonR4::SpacePointMakerAlg::m_capacityBucket {this,"CapacityBucket" , 50}
private

Definition at line 198 of file SpacePointMakerAlg.h.

198{this,"CapacityBucket" , 50};

◆ 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_doStat

Gaudi::Property<bool> MuonR4::SpacePointMakerAlg::m_doStat
private
Initial value:
{this, "doStats", false,
"If enabled the algorithm keeps track how many hits have been made" }

Definition at line 195 of file SpacePointMakerAlg.h.

195 {this, "doStats", false,
196 "If enabled the algorithm keeps track how many hits have been made" };

◆ 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 AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

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

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.h.

◆ m_geoCtxKey

SG::ReadHandleKey<ActsTrk::GeometryContext> MuonR4::SpacePointMakerAlg::m_geoCtxKey {this, "AlignmentKey", "ActsAlignment", "cond handle key"}
private

Definition at line 179 of file SpacePointMakerAlg.h.

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

◆ m_idHelperSvc

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

Definition at line 181 of file SpacePointMakerAlg.h.

181{this, "IdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};

◆ m_maxBucketLength

Gaudi::Property<double> MuonR4::SpacePointMakerAlg::m_maxBucketLength
private
Initial value:
{this, "maxBucketLength", 2.*Gaudi::Units::m,
"Maximal size of a space point bucket"}

Definition at line 188 of file SpacePointMakerAlg.h.

188 {this, "maxBucketLength", 2.*Gaudi::Units::m,
189 "Maximal size of a space point bucket"};

◆ m_maxOccRpcEta

Gaudi::Property<double> MuonR4::SpacePointMakerAlg::m_maxOccRpcEta
private
Initial value:
{this, "maxRpcEtaOccupancy", 0.1,
"Maximum occpancy of Rpc eta hits in a gasGap"}

Definition at line 201 of file SpacePointMakerAlg.h.

201 {this, "maxRpcEtaOccupancy", 0.1,
202 "Maximum occpancy of Rpc eta hits in a gasGap"};

◆ m_maxOccRpcPhi

Gaudi::Property<double> MuonR4::SpacePointMakerAlg::m_maxOccRpcPhi
private
Initial value:
{this, "maxRpcPhiOccupancy", 0.1,
"Maximum occpancy of Rpc phi hits in a gasGap"}

Definition at line 203 of file SpacePointMakerAlg.h.

203 {this, "maxRpcPhiOccupancy", 0.1,
204 "Maximum occpancy of Rpc phi hits in a gasGap"};

◆ m_maxOccStgcEta

Gaudi::Property<double> MuonR4::SpacePointMakerAlg::m_maxOccStgcEta
private
Initial value:
{this, "maxSTGCEtaOccupancy", 0.1,
"Maximum occpancy of sTgc eta hits in a gasGap"}

Definition at line 211 of file SpacePointMakerAlg.h.

211 {this, "maxSTGCEtaOccupancy", 0.1,
212 "Maximum occpancy of sTgc eta hits in a gasGap"};

◆ m_maxOccStgcPhi

Gaudi::Property<double> MuonR4::SpacePointMakerAlg::m_maxOccStgcPhi
private
Initial value:
{this, "maxSTGCPhiOccupancy", 0.5,
"Maximum occpancy of sTgc phi hits in a gasGap"}

Definition at line 213 of file SpacePointMakerAlg.h.

213 {this, "maxSTGCPhiOccupancy", 0.5,
214 "Maximum occpancy of sTgc phi hits in a gasGap"};

◆ m_maxOccTgcEta

Gaudi::Property<double> MuonR4::SpacePointMakerAlg::m_maxOccTgcEta
private
Initial value:
{this, "maxTgcEtaOccupancy", 0.1,
"Maximum occpancy of Tgc eta hits in a gasGap"}

Definition at line 206 of file SpacePointMakerAlg.h.

206 {this, "maxTgcEtaOccupancy", 0.1,
207 "Maximum occpancy of Tgc eta hits in a gasGap"};

◆ m_maxOccTgcPhi

Gaudi::Property<double> MuonR4::SpacePointMakerAlg::m_maxOccTgcPhi
private
Initial value:
{this, "maxTgcPhiOccupancy", 0.1,
"Maximum occpancy of Tgc phi hits in a gasGap"}

Definition at line 208 of file SpacePointMakerAlg.h.

208 {this, "maxTgcPhiOccupancy", 0.1,
209 "Maximum occpancy of Tgc phi hits in a gasGap"};

◆ m_mdtKey

SG::ReadHandleKey<xAOD::MdtDriftCircleContainer> MuonR4::SpacePointMakerAlg::m_mdtKey
private
Initial value:
{this, "MdtKey", "xMdtMeasurements",
"Key to the uncalibrated Drift circle measurements"}

Definition at line 164 of file SpacePointMakerAlg.h.

164 {this, "MdtKey", "xMdtMeasurements",
165 "Key to the uncalibrated Drift circle measurements"};

◆ m_mmKey

SG::ReadHandleKey<xAOD::MMClusterContainer> MuonR4::SpacePointMakerAlg::m_mmKey
private
Initial value:
{this, "MmKey", "xAODMMClusters",
"Key to the uncalibrated 1D Mm hits"}

Definition at line 173 of file SpacePointMakerAlg.h.

173 {this, "MmKey", "xAODMMClusters",
174 "Key to the uncalibrated 1D Mm hits"};

◆ m_rpcKey

SG::ReadHandleKey<xAOD::RpcMeasurementContainer> MuonR4::SpacePointMakerAlg::m_rpcKey
private
Initial value:
{this, "RpcKey", "xRpcMeasurements",
"Key to the uncalibrated 1D rpc hits"}

Definition at line 167 of file SpacePointMakerAlg.h.

167 {this, "RpcKey", "xRpcMeasurements",
168 "Key to the uncalibrated 1D rpc hits"};

◆ m_spacePointOverlap

Gaudi::Property<double> MuonR4::SpacePointMakerAlg::m_spacePointOverlap
private
Initial value:
{this, "spacePointOverlap", 25.*Gaudi::Units::cm,
"Hits that are within <spacePointOverlap> of the bucket margin. "
"Are copied to the next bucket"}

Definition at line 191 of file SpacePointMakerAlg.h.

191 {this, "spacePointOverlap", 25.*Gaudi::Units::cm,
192 "Hits that are within <spacePointOverlap> of the bucket margin. "
193 "Are copied to the next bucket"};

◆ m_spacePointWindow

Gaudi::Property<double> MuonR4::SpacePointMakerAlg::m_spacePointWindow
private
Initial value:
{this, "spacePointWindowSize", 0.8*Gaudi::Units::m,
"Maximal distance between consecutive hits in a bucket"}

Definition at line 185 of file SpacePointMakerAlg.h.

185 {this, "spacePointWindowSize", 0.8*Gaudi::Units::m,
186 "Maximal distance between consecutive hits in a bucket"};

◆ m_stgcKey

SG::ReadHandleKey<xAOD::sTgcMeasContainer> MuonR4::SpacePointMakerAlg::m_stgcKey {this, "sTgcKey", "xAODsTgcMeasurements"}
private

Definition at line 176 of file SpacePointMakerAlg.h.

176{this, "sTgcKey", "xAODsTgcMeasurements"};

◆ m_tgcKey

SG::ReadHandleKey<xAOD::TgcStripContainer> MuonR4::SpacePointMakerAlg::m_tgcKey
private
Initial value:
{this, "TgcKey", "xTgcStrips",
"Key to the uncalibrated 1D tgc hits"}

Definition at line 170 of file SpacePointMakerAlg.h.

170 {this, "TgcKey", "xTgcStrips",
171 "Key to the uncalibrated 1D tgc hits"};

◆ 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.

◆ m_writeKey

SG::WriteHandleKey<SpacePointContainer> MuonR4::SpacePointMakerAlg::m_writeKey {this, "WriteKey", "MuonSpacePoints"}
private

Definition at line 183 of file SpacePointMakerAlg.h.

183{this, "WriteKey", "MuonSpacePoints"};

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