ATLAS Offline Software
Classes | Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
MuonR4::SpacePointMakerAlg Class Reference

#include <SpacePointMakerAlg.h>

Inheritance diagram for MuonR4::SpacePointMakerAlg:
Collaboration 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 (const std::string &name, ISvcLocator *pSvcLocator)
 
 ~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
 
virtual StatusCode sysInitialize () override
 Override sysInitialize. More...
 
virtual bool isClonable () const override
 Specify if the algorithm is clonable. More...
 
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant. More...
 
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm. More...
 
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies. More...
 
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. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
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. More...
 

Private Types

using PreSortedSpacePointMap = std::unordered_map< const MuonGMR4::SpectrometerSector *, SpacePointsPerChamber >
 Container abrivation of the presorted space point container per MuonChambers. More...
 
using SpacePointBucketVec = std::vector< SpacePointBucket >
 Abrivation of a MuonSapcePoint bucket vector. More...
 
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. More...
 
void distributePointsAndStore (const EventContext &ctx, SpacePointsPerChamber &&hitsPerChamber, SpacePointContainer &finalContainer) const
 Distribute the premade spacepoints per chamber into their individual SpacePoint buckets. More...
 
void distributePointsAndStore (const EventContext &ctx, std::vector< SpacePoint > &&spacePoints, SpacePointBucketVec &splittedContainer) const
 
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. More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

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< ActsGeometryContextm_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 int > 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. More...
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Definition at line 24 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 111 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 ( const std::string &  name,
ISvcLocator *  pSvcLocator 
)

Definition at line 79 of file SpacePointMakerAlg.cxx.

79  :
80  AthReentrantAlgorithm{name, pSvcLocator}{}

◆ ~SpacePointMakerAlg()

MuonR4::SpacePointMakerAlg::~SpacePointMakerAlg ( )
default

Member Function Documentation

◆ cardinality()

unsigned int AthReentrantAlgorithm::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.

Override this to return 0 for reentrant algorithms.

Definition at line 55 of file AthReentrantAlgorithm.cxx.

56 {
57  return 0;
58 }

◆ declareGaudiProperty() [1/4]

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

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

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

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

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

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

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

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

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

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

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

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

95 { return m_detStore; }

◆ distributePointsAndStore() [1/2]

void MuonR4::SpacePointMakerAlg::distributePointsAndStore ( const EventContext &  ctx,
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 279 of file SpacePointMakerAlg.cxx.

281  {
282  SpacePointBucketVec splittedHits{};
283  splittedHits.emplace_back();
284  if (m_statCounter){
285  m_statCounter->addToStat(hitsPerChamber.etaHits);
286  m_statCounter->addToStat(hitsPerChamber.phiHits);
287 
288  }
289  distributePointsAndStore(ctx, std::move(hitsPerChamber.etaHits), splittedHits);
290  distributePointsAndStore(ctx, std::move(hitsPerChamber.phiHits), splittedHits);
291 
292  for (SpacePointBucket& bucket : splittedHits) {
293  if (bucket.size() > 1)
294  finalContainer.push_back(std::make_unique<SpacePointBucket>(std::move(bucket)));
295  }
296 
297 }

◆ distributePointsAndStore() [2/2]

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

Phi modules

The current measurement is too far away from the first one. Make a new bucket

Remove the probably empty bucket again.

Definition at line 298 of file SpacePointMakerAlg.cxx.

300  {
301 
302  if (spacePoints.empty()) return;
303 
304  const bool defineBuckets = splittedHits[0].empty();
305  const bool hasEtaMeas{spacePoints[0].measuresEta()};
306 
307  auto pointPos = [hasEtaMeas, defineBuckets] (const SpacePoint& p) {
308  return hasEtaMeas || !defineBuckets ? p.positionInChamber().y() : p.positionInChamber().x();
309  };
311 
312  auto channelDir = [hasEtaMeas, defineBuckets, &gctx](const SpacePoint & p) {
313  const Amg::Vector3D d = xAOD::channelDirInChamber(*gctx, p.primaryMeasurement());
314  return std::abs(hasEtaMeas || !defineBuckets ? d.y() : d.z());
315  };
316 
317  std::sort(spacePoints.begin(), spacePoints.end(),
318  [&pointPos] (const SpacePoint& a, const SpacePoint& b) {
319  return pointPos(a) < pointPos(b);
320  });
321 
322 
323  double lastPoint = pointPos(spacePoints[0]);
324 
325  auto newBucket = [this, &lastPoint, &splittedHits, &pointPos, &channelDir] (const double currPos) {
326  splittedHits.emplace_back();
327  splittedHits.back().setBucketId(splittedHits.size() -1);
328  SpacePointBucket& overlap{splittedHits[splittedHits.size() - 2]};
329  SpacePointBucket& newContainer{splittedHits[splittedHits.size() - 1]};
330 
331  for (const std::shared_ptr<SpacePoint>& pointInBucket : overlap) {
332  const double overlapPos = pointPos(*pointInBucket) + pointInBucket->uncertainty()[1] * channelDir(*pointInBucket);
333  if (std::abs(overlapPos - currPos) < m_spacePointOverlap) {
334  newContainer.push_back(pointInBucket);
335  }
336  }
337  lastPoint = newContainer.empty() ? currPos : pointPos(**newContainer.begin());
338  overlap.setCoveredRange(pointPos(**overlap.begin()), pointPos(**overlap.rbegin()));
339  overlap.populateChamberLocations();
340  };
341 
342  for (SpacePoint& toSort : spacePoints) {
343  const double currPoint = pointPos(toSort);
345  if (!defineBuckets) {
346  std::shared_ptr<SpacePoint> madePoint = std::make_shared<SpacePoint>(std::move(toSort));
347  for (SpacePointBucket& bucket : splittedHits) {
348  const double measDir = channelDir(toSort);
349  const double posMin = currPoint - toSort.uncertainty()[1] * measDir;
350  const double posMax = currPoint + toSort.uncertainty()[1] * measDir;
351 
352  if (posMax >= bucket.coveredMin() && bucket.coveredMax() >= posMin) {
353  bucket.push_back(madePoint);
354  }
355  }
356  continue;
357  }
359  if (currPoint - lastPoint > m_maxBucketLength || (!splittedHits.empty() && !splittedHits.back().empty() && currPoint - pointPos(*splittedHits.back().back()) > m_spacePointWindow )) {
360  newBucket(currPoint);
361  }
362  std::shared_ptr<SpacePoint> spacePoint = std::make_shared<SpacePoint>(std::move(toSort));
363  splittedHits.back().emplace_back(spacePoint);
364  if (splittedHits.size() > 1) {
365  SpacePointBucket& overlap{splittedHits[splittedHits.size() - 2]};
366  const double overlapPos = currPoint - spacePoint->uncertainty()[1] * channelDir(*spacePoint);
367  if (overlapPos - overlap.coveredMax() < m_spacePointOverlap) {
368  overlap.push_back(spacePoint);
369  }
370  }
371  }
372  if (defineBuckets){
373  SpacePointBucket& lastBucket{splittedHits[splittedHits.size() - 1]};
374  newBucket(pointPos(*lastBucket.back()));
376  splittedHits.pop_back();
377  }
378 
379 }

◆ evtStore() [1/2]

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.

85 { return m_evtStore; }

◆ evtStore() [2/2]

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

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

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ execute()

StatusCode MuonR4::SpacePointMakerAlg::execute ( const EventContext &  ctx) const
override

Definition at line 261 of file SpacePointMakerAlg.cxx.

261  {
262  PreSortedSpacePointMap preSortedContainer{};
263  ATH_CHECK(loadContainerAndSort(ctx, m_mdtKey, preSortedContainer));
264  ATH_CHECK(loadContainerAndSort(ctx, m_rpcKey, preSortedContainer));
265  ATH_CHECK(loadContainerAndSort(ctx, m_tgcKey, preSortedContainer));
266  ATH_CHECK(loadContainerAndSort(ctx, m_mmKey, preSortedContainer));
267  ATH_CHECK(loadContainerAndSort(ctx, m_stgcKey, preSortedContainer));
268  std::unique_ptr<SpacePointContainer> outContainer = std::make_unique<SpacePointContainer>();
269 
270  for (auto &[chamber, hitsPerChamber] : preSortedContainer){
271  ATH_MSG_VERBOSE("Fill space points for chamber "<<chamber);
272  distributePointsAndStore(ctx, std::move(hitsPerChamber), *outContainer);
273  }
275  ATH_CHECK(writeHandle.record(std::move(outContainer)));
276  return StatusCode::SUCCESS;
277 }

◆ 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 & AthReentrantAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

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

Definition at line 79 of file AthReentrantAlgorithm.cxx.

80 {
81  // If we didn't find any symlinks to add, just return the collection
82  // from the base class. Otherwise, return the extended collection.
83  if (!m_extendedExtraObjects.empty()) {
85  }
86  return Algorithm::extraOutputDeps();
87 }

◆ filterPassed()

virtual bool AthReentrantAlgorithm::filterPassed ( const EventContext &  ctx) const
inlinevirtualinherited

Definition at line 135 of file AthReentrantAlgorithm.h.

135  {
136  return execState( ctx ).filterPassed();
137  }

◆ finalize()

StatusCode MuonR4::SpacePointMakerAlg::finalize ( )
override

Definition at line 83 of file SpacePointMakerAlg.cxx.

83  {
84  if (m_statCounter) {
85  m_statCounter->dumpStatisics(msgStream());
86  }
87  return StatusCode::SUCCESS;
88 }

◆ initialize()

StatusCode MuonR4::SpacePointMakerAlg::initialize ( )
override

Definition at line 89 of file SpacePointMakerAlg.cxx.

89  {
91  ATH_CHECK(m_mdtKey.initialize(!m_mdtKey.empty()));
92  ATH_CHECK(m_rpcKey.initialize(!m_rpcKey.empty()));
93  ATH_CHECK(m_tgcKey.initialize(!m_tgcKey.empty()));
94  ATH_CHECK(m_mmKey.initialize(!m_mmKey.empty()));
95  ATH_CHECK(m_stgcKey.initialize(!m_stgcKey.empty()));
96  ATH_CHECK(m_idHelperSvc.retrieve());
98  if (m_doStat) m_statCounter = std::make_unique<SpacePointStatistics>(m_idHelperSvc.get());
99  return StatusCode::SUCCESS;
100 }

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

bool AthReentrantAlgorithm::isClonable ( ) const
overridevirtualinherited

◆ 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

Make directly to a space point

Wires measure the phi coordinate

Tgc & Rpcs have the measuresPhi property

Sort in the hit

Create the space points

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

If there's a phi measuremnt which cannot be combined with the others or no eta measurement is suitable, then manually push_back the phi hits

Definition at line 137 of file SpacePointMakerAlg.cxx.

139  {
140  if (key.empty()) {
141  ATH_MSG_DEBUG("Key "<<typeid(ContType).name()<<" not set. Do not fill anything");
142  return StatusCode::SUCCESS;
143  }
144  SG::ReadHandle readHandle{key, ctx};
145  ATH_CHECK(readHandle.isPresent());
146  if (readHandle->empty()){
147  ATH_MSG_DEBUG("nothing to do");
148  return StatusCode::SUCCESS;
149  }
150  SG::ReadHandle gctx{m_geoCtxKey, ctx};
151  ATH_CHECK(gctx.isPresent());
152 
153  using PrdType = typename ContType::const_value_type;
154  using PrdVec = std::vector<PrdType>;
155  xAOD::ChamberViewer viewer{*readHandle};
156  do {
157 
158  SpacePointsPerChamber& pointsInChamb = fillContainer[viewer.at(0)->readoutElement()->msSector()];
159  ATH_MSG_DEBUG("Fill space points for chamber "<<m_idHelperSvc->toStringDetEl(viewer.at(0)->identify()));
160  if constexpr( std::is_same_v<ContType, xAOD::MdtDriftCircleContainer> ||
161  std::is_same_v<ContType, xAOD::MMClusterContainer>) {
162 
163  pointsInChamb.etaHits.reserve(pointsInChamb.etaHits.capacity() + viewer.size());
164  for (const PrdType prd: viewer) {
165  ATH_MSG_VERBOSE("Create space point from "<<m_idHelperSvc->toString(prd->identify())
166  <<", hash: "<<prd->identifierHash());
167  pointsInChamb.etaHits.emplace_back(*gctx, prd, nullptr);
168  }
169  } else {
171  using EtaPhiHits = std::array<PrdVec, 2>;
172  std::vector<EtaPhiHits> hitsPerGasGap{};
173  for (const PrdType prd : viewer) {
174  ATH_MSG_VERBOSE("Create space point from "<<m_idHelperSvc->toString(prd->identify())<<", hash: "<<prd->identifierHash());
175 
176  unsigned int gapIdx = prd->gasGap() -1;
177  if constexpr (std::is_same_v<ContType, xAOD::RpcMeasurementContainer>) {
178  gapIdx = prd->readoutElement()->createHash(0, prd->gasGap(), prd->doubletPhi(), false);
179  }
180 
181  bool measPhi{false};
182  if constexpr(std::is_same_v<ContType, xAOD::sTgcMeasContainer>) {
184  if (prd->channelType() == sTgcIdHelper::sTgcChannelTypes::Pad) {
185  pointsInChamb.etaHits.emplace_back(*gctx, prd, nullptr);
186  continue;
187  }
189  measPhi = prd->channelType() == sTgcIdHelper::sTgcChannelTypes::Wire;
190  } else {
192  measPhi = prd->measuresPhi();
193  }
194 
195  if (hitsPerGasGap.size() <= gapIdx) {
196  hitsPerGasGap.resize(gapIdx + 1);
197  }
199  PrdVec& toPush = hitsPerGasGap[gapIdx][measPhi];
200  if (toPush.capacity() == toPush.size()) {
201  toPush.reserve(toPush.size() + m_capacityBucket);
202  }
203  toPush.push_back(prd);
204  }
206  for (auto& [etaHits, phiHits] : hitsPerGasGap) {
207  if (!passOccupancy2D(etaHits, phiHits)) {
208  ATH_MSG_VERBOSE("Occupancy cut not passed "<<etaHits.size()<<", "<<phiHits.size());
209  pointsInChamb.etaHits.reserve(pointsInChamb.etaHits.size() + etaHits.size());
210  pointsInChamb.phiHits.reserve(pointsInChamb.phiHits.size() + phiHits.size());
211  for (const PrdType etaPrd : etaHits) {
212  pointsInChamb.etaHits.emplace_back(*gctx, etaPrd);
213  ATH_MSG_VERBOSE("Add new eta hit "<<m_idHelperSvc->toString(pointsInChamb.etaHits.back().identify())
214  <<" "<<Amg::toString(pointsInChamb.etaHits.back().positionInChamber()));
215 
216  }
217  for (const PrdType phiPrd : phiHits) {
218  pointsInChamb.phiHits.emplace_back(*gctx, phiPrd);
219  ATH_MSG_VERBOSE("Add new phi hit "<<m_idHelperSvc->toString(pointsInChamb.phiHits.back().identify())
220  <<" "<<Amg::toString(pointsInChamb.phiHits.back().positionInChamber()));
221  }
222  continue;
223  }
224  std::vector<std::shared_ptr<unsigned>> etaCounts{matchCountVec(etaHits.size())},
225  phiCounts{matchCountVec(phiHits.size())};
226  pointsInChamb.etaHits.reserve(etaHits.size()*phiHits.size());
228  for (unsigned int etaP = 0; etaP < etaHits.size(); ++etaP) {
230  for (unsigned int phiP = 0; phiP < phiHits.size(); ++ phiP) {
233  if (!(etaHits[etaP]->bcBitMap() & phiHits[phiP]->bcBitMap())){
234  continue;
235  }
236  }
237  SpacePoint& spacePoint{pointsInChamb.etaHits.emplace_back(*gctx, etaHits[etaP], phiHits[phiP])};
238  ATH_MSG_VERBOSE("Create new spacepoint from "<<m_idHelperSvc->toString(etaHits[etaP]->identify())
239  <<" & "<<m_idHelperSvc->toString(phiHits[phiP]->identify())<<" at "<<Amg::toString(spacePoint.positionInChamber()));
240  spacePoint.setInstanceCounts(etaCounts[etaP], phiCounts[phiP]);
241  }
242  if (!(*etaCounts[etaP])) {
243  pointsInChamb.etaHits.emplace_back(*gctx, etaHits[etaP]);
244  continue;
245  }
246  }
249  for (unsigned int phiP = 0; phiP < phiHits.size(); ++ phiP){
250  if (!(*phiCounts[phiP])) {
251  pointsInChamb.phiHits.emplace_back(*gctx, phiHits[phiP]);
252  }
253  }
254  }
255  }
256  } while (viewer.next());
257  return StatusCode::SUCCESS;
258 }

◆ msg() [1/2]

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ msg() [2/2]

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

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

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

◆ passOccupancy2D() [1/4]

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/4]

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

Definition at line 114 of file SpacePointMakerAlg.cxx.

115  {
116  if (etaHits.empty() || phiHits.empty()) {
117  return false;
118  }
119  const MuonGMR4::RpcReadoutElement* re = etaHits[0]->readoutElement();
120  ATH_MSG_VERBOSE("Collected "<<etaHits.size()<<"/"<<phiHits.size()<<" hits in "<<m_idHelperSvc->toStringGasGap(etaHits[0]->identify()));
121  return ((1.*etaHits.size()) / (1.*re->nEtaStrips())) < m_maxOccRpcEta &&
122  ((1.*phiHits.size()) / (1.*re->nPhiStrips())) < m_maxOccRpcPhi;
123  }

◆ passOccupancy2D() [3/4]

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

Definition at line 126 of file SpacePointMakerAlg.cxx.

127  {
128  if (etaHits.empty() || phiHits.empty()) {
129  return false;
130  }
131  const MuonGMR4::sTgcReadoutElement* re = etaHits[0]->readoutElement();
132  return ((1.*etaHits.size()) / (1.*re->numStrips(etaHits[0]->gasGap()))) < m_maxOccStgcEta &&
133  ((1.*phiHits.size()) / (1.*re->numWireGroups(phiHits[0]->gasGap()))) < m_maxOccStgcPhi;
134  }

◆ passOccupancy2D() [4/4]

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

Definition at line 103 of file SpacePointMakerAlg.cxx.

104  {
105  if (etaHits.empty() || phiHits.empty()) {
106  return false;
107  }
108  const MuonGMR4::TgcReadoutElement* re = etaHits[0]->readoutElement();
109  ATH_MSG_VERBOSE("Collected "<<etaHits.size()<<"/"<<phiHits.size()<<" hits in "<<m_idHelperSvc->toStringGasGap(etaHits[0]->identify()));
110  return ((1.*etaHits.size()) / ((1.*re->numChannels(etaHits[0]->measurementHash())))) < m_maxOccTgcEta &&
111  ((1.*phiHits.size()) / ((1.*re->numChannels(phiHits[0]->measurementHash())))) < m_maxOccTgcPhi;
112  }

◆ 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();
383  PBASE::renounce (h);
384  }

◆ 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  {
365  handlesArray.renounce();
366  }

◆ setFilterPassed()

virtual void AthReentrantAlgorithm::setFilterPassed ( bool  state,
const EventContext &  ctx 
) const
inlinevirtualinherited

Definition at line 139 of file AthReentrantAlgorithm.h.

139  {
140  execState( ctx ).setFilterPassed( state );
141  }

◆ sysExecute()

StatusCode AthReentrantAlgorithm::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 67 of file AthReentrantAlgorithm.cxx.

68 {
69  return Gaudi::Algorithm::sysExecute (ctx);
70 }

◆ sysInitialize()

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

Definition at line 96 of file AthReentrantAlgorithm.cxx.

96  {
98 
99  if (sc.isFailure()) {
100  return sc;
101  }
102 
103  ServiceHandle<ICondSvc> cs("CondSvc",name());
104  for (auto h : outputHandles()) {
105  if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
106  // do this inside the loop so we don't create the CondSvc until needed
107  if ( cs.retrieve().isFailure() ) {
108  ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
109  return StatusCode::SUCCESS;
110  }
111  if (cs->regHandle(this,*h).isFailure()) {
112  sc = StatusCode::FAILURE;
113  ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
114  << " with CondSvc");
115  }
116  }
117  }
118  return sc;
119 }

◆ 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) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
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 178 of file SpacePointMakerAlg.h.

◆ m_capacityBucket

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

Definition at line 177 of file SpacePointMakerAlg.h.

◆ 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", true,
"If enabled the algorithm keeps track how many hits have been made" }

Definition at line 174 of file SpacePointMakerAlg.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 AthReentrantAlgorithm::m_extendedExtraObjects
privateinherited

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

Empty if no symlinks were found.

Definition at line 153 of file AthReentrantAlgorithm.h.

◆ m_geoCtxKey

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

Definition at line 158 of file SpacePointMakerAlg.h.

◆ m_idHelperSvc

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

Definition at line 160 of file SpacePointMakerAlg.h.

◆ 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 167 of file SpacePointMakerAlg.h.

◆ 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 180 of file SpacePointMakerAlg.h.

◆ 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 182 of file SpacePointMakerAlg.h.

◆ 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 190 of file SpacePointMakerAlg.h.

◆ m_maxOccStgcPhi

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

Definition at line 192 of file SpacePointMakerAlg.h.

◆ 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 185 of file SpacePointMakerAlg.h.

◆ 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 187 of file SpacePointMakerAlg.h.

◆ 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 143 of file SpacePointMakerAlg.h.

◆ 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 152 of file SpacePointMakerAlg.h.

◆ 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 146 of file SpacePointMakerAlg.h.

◆ 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 170 of file SpacePointMakerAlg.h.

◆ 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 164 of file SpacePointMakerAlg.h.

◆ m_stgcKey

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

Definition at line 155 of file SpacePointMakerAlg.h.

◆ 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 149 of file SpacePointMakerAlg.h.

◆ 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 162 of file SpacePointMakerAlg.h.


The documentation for this class was generated from the following files:
MuonR4::SpacePointMakerAlg::PreSortedSpacePointMap
std::unordered_map< const MuonGMR4::SpectrometerSector *, SpacePointsPerChamber > PreSortedSpacePointMap
Container abrivation of the presorted space point container per MuonChambers.
Definition: SpacePointMakerAlg.h:93
MuonR4::SpacePointMakerAlg::m_stgcKey
SG::ReadHandleKey< xAOD::sTgcMeasContainer > m_stgcKey
Definition: SpacePointMakerAlg.h:155
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
calibdata.chamber
chamber
Definition: calibdata.py:32
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
hist_file_dump.d
d
Definition: hist_file_dump.py:137
AthCommonDataStore::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 > renounce(T &h)
Definition: AthCommonDataStore.h:380
MuonR4::SpacePointMakerAlg::m_maxOccStgcPhi
Gaudi::Property< double > m_maxOccStgcPhi
Definition: SpacePointMakerAlg.h:192
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
athena.value
value
Definition: athena.py:124
MuonR4::SpacePointMakerAlg::m_rpcKey
SG::ReadHandleKey< xAOD::RpcMeasurementContainer > m_rpcKey
Definition: SpacePointMakerAlg.h:146
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
xAOD::channelDirInChamber
Amg::Vector3D channelDirInChamber(const ActsGeometryContext &gctx, const UncalibratedMeasurement *meas)
Definition: MuonSpectrometer/MuonPhaseII/Event/xAOD/xAODMuonPrepData/Root/UtilFunctions.cxx:118
MuonGMR4::RpcReadoutElement
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:17
MuonR4::SpacePointMakerAlg::m_mmKey
SG::ReadHandleKey< xAOD::MMClusterContainer > m_mmKey
Definition: SpacePointMakerAlg.h:152
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
SpacePoint
Definition: Trigger/TrigAccel/TrigCudaFitter/src/SpacePoint.h:7
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
MuonR4::SpacePointMakerAlg::distributePointsAndStore
void distributePointsAndStore(const EventContext &ctx, SpacePointsPerChamber &&hitsPerChamber, SpacePointContainer &finalContainer) const
Distribute the premade spacepoints per chamber into their individual SpacePoint buckets.
Definition: SpacePointMakerAlg.cxx:279
xAOD::ChamberViewer
Definition: ChamberViewer.h:65
MuonR4::SpacePointMakerAlg::SpacePointBucketVec
std::vector< SpacePointBucket > SpacePointBucketVec
Abrivation of a MuonSapcePoint bucket vector.
Definition: SpacePointMakerAlg.h:111
MuonR4::SpacePointMakerAlg::m_tgcKey
SG::ReadHandleKey< xAOD::TgcStripContainer > m_tgcKey
Definition: SpacePointMakerAlg.h:149
MuonR4::SpacePointMakerAlg::m_writeKey
SG::WriteHandleKey< SpacePointContainer > m_writeKey
Definition: SpacePointMakerAlg.h:162
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
MuonR4::SpacePointMakerAlg::m_maxOccStgcEta
Gaudi::Property< double > m_maxOccStgcEta
Definition: SpacePointMakerAlg.h:190
AthCommonDataStore
Definition: AthCommonDataStore.h:52
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MuonR4::SpacePointMakerAlg::m_maxOccTgcEta
Gaudi::Property< double > m_maxOccTgcEta
Definition: SpacePointMakerAlg.h:185
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
MuonR4::SpacePointMakerAlg::m_maxOccTgcPhi
Gaudi::Property< double > m_maxOccTgcPhi
Definition: SpacePointMakerAlg.h:187
AthReentrantAlgorithm::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Definition: AthReentrantAlgorithm.h:153
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
MuonR4::SpacePointMakerAlg::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: SpacePointMakerAlg.h:160
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
NSWL1::PadTriggerAdapter::fillContainer
StatusCode fillContainer(const std::unique_ptr< Muon::NSW_PadTriggerDataContainer > &out, const std::vector< std::unique_ptr< NSWL1::PadTrigger >> &triggers, const uint32_t l1id)
Definition: PadTriggerAdapter.cxx:17
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
MuonR4::SpacePointMakerAlg::loadContainerAndSort
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 ...
Definition: SpacePointMakerAlg.cxx:137
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
AthReentrantAlgorithm::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthReentrantAlgorithm.cxx:96
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonGMR4::sTgcReadoutElement
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:20
MuonR4::SpacePointMakerAlg::m_mdtKey
SG::ReadHandleKey< xAOD::MdtDriftCircleContainer > m_mdtKey
Definition: SpacePointMakerAlg.h:143
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
MuonR4::SpacePointMakerAlg::passOccupancy2D
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.
MuonR4::SpacePointMakerAlg::m_maxBucketLength
Gaudi::Property< double > m_maxBucketLength
Definition: SpacePointMakerAlg.h:167
MuonR4::SpacePointMakerAlg::m_spacePointWindow
Gaudi::Property< double > m_spacePointWindow
Definition: SpacePointMakerAlg.h:164
a
TList * a
Definition: liststreamerinfos.cxx:10
h
std::sort
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
Definition: DVL_algorithms.h:623
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
re
const boost::regex re(r_e)
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:623
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
MuonR4::SpacePointMakerAlg::m_doStat
Gaudi::Property< bool > m_doStat
Definition: SpacePointMakerAlg.h:174
MuonR4::SpacePointMakerAlg::m_geoCtxKey
SG::ReadHandleKey< ActsGeometryContext > m_geoCtxKey
Definition: SpacePointMakerAlg.h:158
MuonR4::SpacePointMakerAlg::m_maxOccRpcEta
Gaudi::Property< double > m_maxOccRpcEta
Definition: SpacePointMakerAlg.h:180
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
MuonR4::SpacePointMakerAlg::m_capacityBucket
Gaudi::Property< unsigned int > m_capacityBucket
Definition: SpacePointMakerAlg.h:177
MuonGMR4::TgcReadoutElement
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/TgcReadoutElement.h:19
MuonR4::SpacePointMakerAlg::m_spacePointOverlap
Gaudi::Property< double > m_spacePointOverlap
Definition: SpacePointMakerAlg.h:170
fitman.k
k
Definition: fitman.py:528
ServiceHandle< ICondSvc >
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
MuonR4::SpacePointMakerAlg::m_maxOccRpcPhi
Gaudi::Property< double > m_maxOccRpcPhi
Definition: SpacePointMakerAlg.h:182