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

#include <NswSegmentFinderAlg.h>

Inheritance diagram for MuonR4::NswSegmentFinderAlg:
Collaboration diagram for MuonR4::NswSegmentFinderAlg:

Classes

class  SeedStatistics
 Seed statistics per sector to be printed in the end. More...
 

Public Member Functions

virtual ~NswSegmentFinderAlg ()=default
 
virtual StatusCode initialize () override
 
virtual StatusCode execute (const EventContext &ctx) const override
 
virtual StatusCode finalize () override
 
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, V, H > &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

enum  StripOrient {
  StripOrient::U, StripOrient::V, StripOrient::X, StripOrient::P,
  StripOrient::C, StripOrient::Unknown
}
 Enumeration to classify the orientation of a NSW strip
More...
 
enum  HitWindow { HitWindow::tooLow, HitWindow::inside, HitWindow::tooHigh }
 To fastly check whether a hit is roughly compatible with a muon trajectory a narrow corridor is opened from the estimated beamspot to the first tested hit in the seed finding. More...
 
using HitVec = SpacePointPerLayerSplitter::HitVec
 
using HitLayVec = SpacePointPerLayerSplitter::HitLayVec
 
using HitLaySpan_t = std::vector< std::reference_wrapper< const HitVec > >
 Abbrivation of the space comprising multiple hit vectors without copy. More...
 
using UsedHitMarker_t = std::vector< std::vector< unsigned int > >
 Abbrivation of the container book keeping whether a hit is used or not. More...
 
using UsedHitSpan_t = std::vector< std::reference_wrapper< std::vector< unsigned int > >>
 Abbrivation of the container to pass a subset of markers wtihout copy. More...
 
using InitialSeed_t = std::array< const SpacePoint *, 4 >
 Abbrivation of the
More...
 
using InitialSeedVec_t = std::vector< InitialSeed_t >
 Vector of initial seeds. More...
 
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

StripOrient classifyStrip (const SpacePoint &spacePoint) const
 Determines the orientation of the strip space point. More...
 
UsedHitMarker_t emptyBookKeeper (const HitLayVec &sortedSp) const
 Constructs an empty HitMarker from the split space points. More...
 
HitWindow hitFromIPCorridor (const SpacePoint &testHit, const Amg::Vector3D &beamSpotPos, const Amg::Vector3D &dirEstUp, const Amg::Vector3D &dirEstDn) const
 The hit is above the predefined corridor. More...
 
void constructPrelimnarySeeds (const Amg::Vector3D &beamSpot, const HitLaySpan_t &combinatoricLayers, const UsedHitSpan_t &usedHits, InitialSeedVec_t &outVec) const
 Construct a set of prelimnary seeds from the selected combinatoric layers. More...
 
std::unique_ptr< SegmentSeedbuildSegmentSeed (const InitialSeed_t &initialSeed, const AmgSymMatrix(2)&bMatrix, const HoughMaximum &max, const HitLaySpan_t &extensionLayers, const UsedHitSpan_t &usedHits) const
 Build the final seed from the initial seed hits and then attempt to append hits from the complementary layers onto the seed. More...
 
std::unique_ptr< SegmentfitSegmentSeed (const EventContext &ctx, const ActsTrk::GeometryContext &gctx, const SegmentSeed *patternSeed) const
 Fit the segment seed. More...
 
void markHitsAsUsed (const HitVec &spacePoints, const HitLayVec &allSortHits, UsedHitMarker_t &usedHitMarker, unsigned int increase, bool markNeighborHits) const
 Hits that are used in a good seed/segment built should be flagged as used and not contribute to other seed. More...
 
HitVec extendHits (const Amg::Vector3D &startPos, const Amg::Vector3D &direction, const HitLaySpan_t &extensionLayers, const UsedHitSpan_t &usedHits) const
 Extend the seed with the hits from the other layers. More...
 
std::pair< std::vector< std::unique_ptr< SegmentSeed > >, std::vector< std::unique_ptr< Segment > > > findSegmentsFromMaximum (const HoughMaximum &max, const ActsTrk::GeometryContext &gctx, const EventContext &ctx) const
 Find seed and segment from an eta hough maximum. More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &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< EtaHoughMaxContainerm_etaKey {this, "CombinatorialReadKey", "MuonHoughNswMaxima"}
 
SG::WriteHandleKey< SegmentSeedContainerm_writeSegmentSeedKey {this, "MuonNswSegmentSeedWriteKey", "MuonNswSegmentSeeds"}
 
SG::WriteHandleKey< SegmentContainerm_writeSegmentKey {this, "MuonNswSegmentWriteKey", "MuonNswSegments"}
 
SG::ReadHandleKey< ActsTrk::GeometryContextm_geoCtxKey {this, "AlignmentKey", "ActsAlignment", "cond handle key"}
 
ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
 
ToolHandle< MuonValR4::IPatternVisualizationToolm_visionTool {this, "VisualizationTool", ""}
 Pattern visualization tool. More...
 
ToolHandle< ISpacePointCalibratorm_calibTool {this, "Calibrator", "" }
 
std::unique_ptr< SegmentFit::SegmentLineFitterm_lineFitter {}
 
DoubleProperty m_windowTheta {this, "thetaWindow", 0.5 * Gaudi::Units::deg}
 
DoubleProperty m_minPullThreshold {this, "maxPull", 5.}
 
DoubleProperty m_minSeedHits {this, "minSeedHits", 6.}
 
DoubleProperty m_maxInvalidClusters {this, "maxInvalidClusters", 4.}
 
BooleanProperty m_markHitsFromSeed {this, "markHitsFromSeed", true}
 
UnsignedIntegerProperty m_maxUsed {this, "maxHitIsUsed", 6}
 
DoubleProperty m_minClusSize {this, "minClusterSize", 1.}
 
DoubleProperty m_maxChi2 {this, "maxChi2", 6.}
 
DoubleProperty m_maxClustersInLayer {this, "maxClustersInLayer", 8}
 
DoubleProperty m_maxdYWindow {this, "maxdYWindow", 4.*Gaudi::Units::cm}
 
BooleanProperty m_dumpSeedStatistics {this, "dumpStatistics", true}
 
std::unique_ptr< SeedStatistics > m_seedCounter ATLAS_THREAD_SAFE {}
 
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 33 of file NswSegmentFinderAlg.h.

Member Typedef Documentation

◆ HitLaySpan_t

using MuonR4::NswSegmentFinderAlg::HitLaySpan_t = std::vector<std::reference_wrapper<const HitVec> >
private

Abbrivation of the space comprising multiple hit vectors without copy.

Definition at line 113 of file NswSegmentFinderAlg.h.

◆ HitLayVec

Definition at line 111 of file NswSegmentFinderAlg.h.

◆ HitVec

Definition at line 109 of file NswSegmentFinderAlg.h.

◆ InitialSeed_t

Abbrivation of the

Definition at line 119 of file NswSegmentFinderAlg.h.

◆ InitialSeedVec_t

Vector of initial seeds.

Definition at line 121 of file NswSegmentFinderAlg.h.

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

◆ UsedHitMarker_t

using MuonR4::NswSegmentFinderAlg::UsedHitMarker_t = std::vector<std::vector<unsigned int> >
private

Abbrivation of the container book keeping whether a hit is used or not.

Definition at line 115 of file NswSegmentFinderAlg.h.

◆ UsedHitSpan_t

using MuonR4::NswSegmentFinderAlg::UsedHitSpan_t = std::vector<std::reference_wrapper<std::vector<unsigned int> >>
private

Abbrivation of the container to pass a subset of markers wtihout copy.

Definition at line 117 of file NswSegmentFinderAlg.h.

Member Enumeration Documentation

◆ HitWindow

To fastly check whether a hit is roughly compatible with a muon trajectory a narrow corridor is opened from the estimated beamspot to the first tested hit in the seed finding.

Hits in subsequent layers need to be within this corridor in order to be considered for seed construction. The HitWindow is the output classification of such a corridor test.

Enumerator
tooLow 
inside 

The hit is below the predefined corridor.

tooHigh 

The hit is inside the defined window and hence an initial candidate.

Definition at line 131 of file NswSegmentFinderAlg.h.

131  {tooLow,
132  inside,
133  tooHigh};

◆ StripOrient

Enumeration to classify the orientation of a NSW strip

Enumerator

Stereo strips with positive angle.

Stereo strips with negative angle.

Ordinary eta strips.

Single phi measurements.

Unknown 

Combined 2D space point (sTGC wire + strip / sTgc pad)

Definition at line 45 of file NswSegmentFinderAlg.h.

45  {
46  U,
47  V,
48  X,
49  P,
50  C,
51  Unknown
52  };

Constructor & Destructor Documentation

◆ ~NswSegmentFinderAlg()

virtual MuonR4::NswSegmentFinderAlg::~NswSegmentFinderAlg ( )
virtualdefault

Member Function Documentation

◆ buildSegmentSeed()

std::unique_ptr< SegmentSeed > MuonR4::NswSegmentFinderAlg::buildSegmentSeed ( const InitialSeed_t initialSeed,
const AmgSymMatrix(2)&  bMatrix,
const HoughMaximum max,
const HitLaySpan_t extensionLayers,
const UsedHitSpan_t usedHits 
) const
private

Build the final seed from the initial seed hits and then attempt to append hits from the complementary layers onto the seed.

Parameters
initialSeedReference to the hit quadruplet that may form a seed
bMatrixKernel matrix calculated from the layer configuration to construct the seed
maxRefrence to the eta maximum from which the segment seed is constructed
extensionLayersReference to the hits on the remaining layers of the detector
usedExtensionHitsRefrence to the book keeper of which of the hits on the extension was already used

Definition at line 299 of file NswSegmentFinderAlg.cxx.

303  {
304 
305 
306  //we reject seeds with all clusters' sizes less than min value
307  bool allValid = std::all_of(initialSeed.begin(), initialSeed.end(), [this](const auto& hit){
308 
309  if (hit->type() == xAOD::UncalibMeasType::MMClusterType) {
310  const auto* mmClust = static_cast<const xAOD::MMCluster*>(hit->primaryMeasurement());
311  return mmClust->stripNumbers().size() >= m_minClusSize;
312  }
313 
314  return false;
315  });
316 
317  if (!allValid) {
318  ATH_MSG_VERBOSE("Seed rejection: Not all clusters meet minimum strip size");
319  return nullptr;
320  }
321 
322 
323  std::array<double, 4> params = defineParameters(bMatrix, initialSeed);
324 
325  const auto [segPos, direction] = seedSolution(initialSeed, params);
326 
327  // check the consistency of the parameters - expected to lay in the strip's
328  // length
329  for (std::size_t i = 0; i < 4; ++i) {
330  const double halfLength = stripHalfLength(*initialSeed[i]);
331 
332  if (std::abs(params[i]) > halfLength) {
333  ATH_MSG_VERBOSE("Seed Rejection: Invalid seed - outside of the strip's length");
334  return nullptr;
335  }
336  }
337  double tanAlpha = houghTanAlpha(direction);
338  double tanBeta = houghTanBeta(direction);
339 
340  double interceptX = segPos.x();
341  double interceptY = segPos.y();
342 
343 
344  // extend the seed to the segment -- include hits from the other layers too
345  auto extendedHits = extendHits(segPos, direction, extensionLayers, usedHits);
346  HitVec hits{initialSeed.begin(),initialSeed.end()};
347  hits.insert(hits.end(), extendedHits.begin(), extendedHits.end());
348 
349 
350  return std::make_unique<SegmentSeed>(tanBeta, interceptY, tanAlpha,
351  interceptX, hits.size(),
352  std::move(hits), max.parentBucket());
353 }

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::cardinality
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 75 of file AthCommonReentrantAlgorithm.cxx.

64 {
65  return 0;
66 }

◆ classifyStrip()

NswSegmentFinderAlg::StripOrient MuonR4::NswSegmentFinderAlg::classifyStrip ( const SpacePoint spacePoint) const
private

Determines the orientation of the strip space point.

Definition at line 100 of file NswSegmentFinderAlg.cxx.

100  {
101 
102  if (sp.type() == xAOD::UncalibMeasType::MMClusterType) {
103  const auto& design = getDesign(sp);
104  if (!design.hasStereoAngle()) {
105  return StripOrient::X;
106  }
107  return design.stereoAngle() > 0. ? StripOrient::U : StripOrient::V;
108  } else if (sp.type() == xAOD::UncalibMeasType::sTgcStripType) {
109  const auto* prd = static_cast<const xAOD::sTgcMeasurement*>(sp.primaryMeasurement());
110  if (sp.dimension() == 2) {
111  return StripOrient::C;
112  }
113  return prd->channelType() == sTgcIdHelper::Strip ? StripOrient::X : StripOrient::P;
114 
115  }
116  ATH_MSG_WARNING("Cannot classify orientation of "<<m_idHelperSvc->toString(sp.identify()));
117  return StripOrient::Unknown;
118 }

◆ constructPrelimnarySeeds()

void MuonR4::NswSegmentFinderAlg::constructPrelimnarySeeds ( const Amg::Vector3D beamSpot,
const HitLaySpan_t combinatoricLayers,
const UsedHitSpan_t usedHits,
InitialSeedVec_t outVec 
) const
private

Construct a set of prelimnary seeds from the selected combinatoric layers.

Quadruplets of hits, one from each layer, are formed if they are all within the the corridor as described above

Parameters
beamSpotPosition of the beam spot in the sector's frame
combinatoricLayersQuadruplet of four hit vectors from which the hits are retrieved
usedHitsMask marking hits that were already successfully added to a seed
outVecReference to the output vector where the initial seeds are stored. The vector is cleared at the beginning and capacity is allocated accordingly

Assign enough memory to the vector

The hit is alrady in a good seed. Don't consider again

Construct the beamspot to first hit connection to guestimate the angle

Apply cut window on theta of the seed.

Definition at line 197 of file NswSegmentFinderAlg.cxx.

200  {
202  seedHitsFromLayers.clear();
203  std::size_t maxSize{1};
204  for (const HitVec& hitVec : combinatoricLayers) {
205  maxSize = maxSize * hitVec.size();
206  }
207  seedHitsFromLayers.reserve(maxSize);
208 
209 
210  unsigned int iterLay0{0}, iterLay1{0}, iterLay2{0}, iterLay3{0};
211  unsigned int startLay1{0}, startLay2{0}, startLay3{0};
212 
213  for( ; iterLay0 < combinatoricLayers[0].get().size() ; ++iterLay0){
215  if (usedHits[0].get()[iterLay0] > m_maxUsed) {
216  continue;
217  }
218  const SpacePoint* hit0 = combinatoricLayers[0].get()[iterLay0];
220  const Amg::Vector3D initSeedDir{(beamSpot - hit0->localPosition()).unit()};
221  const Amg::Vector3D dirEstUp = Amg::dirFromAngles(initSeedDir.phi(), initSeedDir.theta() - m_windowTheta);
222  const Amg::Vector3D dirEstDn = Amg::dirFromAngles(initSeedDir.phi(), initSeedDir.theta() + m_windowTheta);
223 
224  ATH_MSG_VERBOSE("Reference hit: "<<m_idHelperSvc->toString(hit0->identify())
225  <<", position: "<<Amg::toString(hit0->localPosition())
226  <<", seed dir: "<<Amg::toString(initSeedDir)
227  <<", seed plane: "<<Amg::toString(SeedingAux::extrapolateToPlane(beamSpot, initSeedDir, *hit0)));
229  for( iterLay1 = startLay1; iterLay1 < combinatoricLayers[1].get().size() ; ++iterLay1){
230  TEST_HIT_CORRIDOR(1, iterLay1, startLay1);
231  for( iterLay2 = startLay2; iterLay2 < combinatoricLayers[2].get().size() ; ++iterLay2){
232  TEST_HIT_CORRIDOR(2, iterLay2, startLay2);
233  for( iterLay3 = startLay3; iterLay3 < combinatoricLayers[3].get().size(); ++iterLay3){
234  TEST_HIT_CORRIDOR(3, iterLay3, startLay3);
235  seedHitsFromLayers.emplace_back(std::array{hit0, combinatoricLayers[1].get()[iterLay1],
236  combinatoricLayers[2].get()[iterLay2],
237  combinatoricLayers[3].get()[iterLay3]});
238  }
239  }
240  }
241  }
242 }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  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, V, H > &  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, V, H > &  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, V, H > &  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, V, H > &  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; }

◆ emptyBookKeeper()

NswSegmentFinderAlg::UsedHitMarker_t MuonR4::NswSegmentFinderAlg::emptyBookKeeper ( const HitLayVec sortedSp) const
private

Constructs an empty HitMarker from the split space points.

Parameters
sortedSpList of space points sorted by layer

Definition at line 91 of file NswSegmentFinderAlg.cxx.

91  {
92  UsedHitMarker_t emptyKeeper(sortedSp.size());
93  for (std::size_t l = 0; l < sortedSp.size(); ++l) {
94  emptyKeeper[l].resize(sortedSp[l].size(), 0);
95  }
96  return emptyKeeper;
97 }

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

Definition at line 581 of file NswSegmentFinderAlg.cxx.

581  {
582  // read the inputs
583  const EtaHoughMaxContainer *maxima{nullptr};
584  ATH_CHECK(SG::get( maxima, m_etaKey, ctx));
585 
586  const ActsTrk::GeometryContext *gctx{nullptr};
587  ATH_CHECK(SG::get(gctx, m_geoCtxKey, ctx));
588 
589  // prepare our output collection
590  SG::WriteHandle writeSegments{m_writeSegmentKey, ctx};
591  ATH_CHECK(writeSegments.record(std::make_unique<SegmentContainer>()));
592 
593  SG::WriteHandle writeSegmentSeeds{m_writeSegmentSeedKey, ctx};
594  ATH_CHECK(writeSegmentSeeds.record(std::make_unique<SegmentSeedContainer>()));
595 
596  // we use the information from the previous eta-hough transform
597  // to get the combined hits that belong in the same maxima
598  for (const HoughMaximum *max : *maxima) {
599 
600  auto [seeds, segments] = findSegmentsFromMaximum(*max, *gctx, ctx);
601 
602  if (msgLvl(MSG::VERBOSE)) {
603  for(const auto& hitMax : max->getHitsInMax()){
604  ATH_MSG_VERBOSE("Hit "<<m_idHelperSvc->toString(hitMax->identify())<<", "
605  <<Amg::toString(hitMax->localPosition())<<", dir: "
606  <<Amg::toString(hitMax->sensorDirection()));
607  }
608  }
609 
610  for(auto& seed: seeds){
611 
612  if (msgLvl(MSG::VERBOSE)){
613  std::stringstream sstr{};
614  sstr<<"Seed tanBeta = "<<seed->tanBeta()<<", y0 = "<<seed->interceptY()
615  <<", tanAlpha = "<<seed->tanAlpha()<<", x0 = "<<seed->interceptX()<<", hits in the seed "
616  <<seed->getHitsInMax().size()<<std::endl;
617 
618  for(const auto& hit : seed->getHitsInMax()){
619  sstr<<" *** Hit "<<m_idHelperSvc->toString(hit->identify())<<", "
620  << Amg::toString(hit->localPosition())<<", dir: "<<Amg::toString(hit->sensorDirection())<<std::endl;
621  }
622  ATH_MSG_VERBOSE(sstr.str());
623  }
624  if (m_visionTool.isEnabled()) {
625  m_visionTool->visualizeSeed(ctx, *seed, "#phi-combinatorialSeed");
626  }
627 
628  writeSegmentSeeds->push_back(std::move(seed));
629 
630  }
631 
632  for (auto &seg : segments) {
633 
634  const Parameters pars = localSegmentPars(*gctx, *seg);
635 
636  ATH_MSG_VERBOSE("Segment parameters : "<<toString(pars));
637 
638  if (m_visionTool.isEnabled()) {
639  m_visionTool->visualizeSegment(ctx, *seg, "#phi-segment");
640  }
641 
642  writeSegments->push_back(std::move(seg));
643 
644  }
645  }
646 
647  return StatusCode::SUCCESS;
648 }

◆ extendHits()

NswSegmentFinderAlg::HitVec MuonR4::NswSegmentFinderAlg::extendHits ( const Amg::Vector3D startPos,
const Amg::Vector3D direction,
const HitLaySpan_t extensionLayers,
const UsedHitSpan_t usedHits 
) const
private

Extend the seed with the hits from the other layers.

Parameters
startPosThe seed position
directionThe seed direction
extensionLayersThe layers to which the seed is extended by extrapolation
usedHitsThe book keeping of the used hits to be skipped

Definition at line 246 of file NswSegmentFinderAlg.cxx.

249  {
250 
251  //the hits we need to return to extend the segment seed
252  HitVec combinatoricHits;
253 
254  //the stripHitsLayers are already the unused ones - only use for the extension
255  for (std::size_t i = 0; i < extensionLayers.size(); ++i) {
256  const HitVec& layer{extensionLayers[i].get()};
257  const Amg::Vector3D extrapPos = SeedingAux::extrapolateToPlane(startPos, direction, *layer.front());
258 
259  unsigned int indexOfHit = layer.size() + 1;
260  unsigned int triedHit{0};
261  double minPull{std::numeric_limits<double>::max()};
262 
263  // loop over the hits on the same layer
264  for (unsigned int j = 0; j < layer.size(); ++j) {
265  if (usedHits[i].get().at(j) > m_maxUsed) {
266  continue;
267  }
268  auto hit = layer.at(j);
269  const double pull = std::sqrt(SeedingAux::chi2Term(extrapPos, direction, *hit));
270  ATH_MSG_VERBOSE("Trying extension with hit " << m_idHelperSvc->toString(hit->identify()));
271 
272  //find the hit with the minimum pull (check at least one hit after we have increasing pulls)
273  if (pull > minPull) {
274  triedHit+=1;
275  continue;
276  }
277 
278  if(triedHit>1){
279  break;
280  }
281 
282  indexOfHit = j;
283  minPull = pull;
284  }
285 
286  // complete the seed with the extended hits
287  if (minPull < m_minPullThreshold) {
288  const auto* bestCand = layer.at(indexOfHit);
289  ATH_MSG_VERBOSE("Extension successfull - hit" << m_idHelperSvc->toString(bestCand->identify())
290  <<", pos: "<<Amg::toString(bestCand->localPosition())
291  <<", dir: "<<Amg::toString(bestCand->sensorDirection())<<" found with pull "<<minPull);
292  combinatoricHits.push_back(bestCand);
293  }
294  }
295  return combinatoricHits;
296 }

◆ 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
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  }
96  return BaseAlg::extraOutputDeps();
97 }

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

◆ finalize()

StatusCode MuonR4::NswSegmentFinderAlg::finalize ( )
overridevirtual

Definition at line 650 of file NswSegmentFinderAlg.cxx.

650  {
651 
653  m_seedCounter->printTableSeedStats(msgStream());
654  }
655  return StatusCode::SUCCESS;
656 }

◆ findSegmentsFromMaximum()

std::pair< std::vector< std::unique_ptr< SegmentSeed > >, std::vector< std::unique_ptr< Segment > > > MuonR4::NswSegmentFinderAlg::findSegmentsFromMaximum ( const HoughMaximum max,
const ActsTrk::GeometryContext gctx,
const EventContext &  ctx 
) const
private

Find seed and segment from an eta hough maximum.

Parameters
maxThe maximum from the eta hough transform
gctxThe geometry Context
ctxThe event context

Definition at line 376 of file NswSegmentFinderAlg.cxx.

376  {
377  // first sort the hits per layer from the maximum
378  SpacePointPerLayerSplitter hitLayers{max.getHitsInMax()};
379 
380  const HitLayVec& stripHitsLayers{hitLayers.stripHits()};
381  const std::size_t layerSize = stripHitsLayers.size();
382 
383  //seeds and segments containers
384  std::vector<std::unique_ptr<SegmentSeed>> seeds{};
385  std::vector<std::unique_ptr<Segment>> segments{};
386 
387  //counters for the number of seeds, extented seeds and segments
388  unsigned int nSeeds{0}, nExtSeeds{0}, nSegments{0};
389 
390 
391  if (layerSize < minLayers) {
392  ATH_MSG_VERBOSE("Not enough layers to build a seed");
393  return std::make_pair(std::move(seeds),std::move(segments));
394  }
395 
396 
397  if (m_visionTool.isEnabled()) {
399  const auto truthHits = getMatchingSimHits(max.getHitsInMax());
400  constexpr double legX{0.2};
401  double legY{0.8};
402  for (const SpacePoint* sp : max.getHitsInMax()) {
403  const auto* mmClust = static_cast<const xAOD::MMCluster*>(sp->primaryMeasurement());
404  const xAOD::MuonSimHit* simHit = getTruthMatchedHit(*mmClust);
405  if (!simHit || !MC::isMuon(simHit)) continue;
406  const MuonGMR4::MmReadoutElement* reEle = mmClust->readoutElement();
407  const MuonGMR4::StripDesign& design = reEle->stripLayer(mmClust->measurementHash()).design();
408  const Amg::Transform3D toChamb = reEle->msSector()->globalToLocalTrans(gctx) *
409  reEle->localToGlobalTrans(gctx, simHit->identify());
410  const Amg::Vector3D hitPos = toChamb * xAOD::toEigen(simHit->localPosition());
411  const Amg::Vector3D hitDir = toChamb.linear() * xAOD::toEigen(simHit->localDirection());
412  const double pull = std::sqrt(SeedingAux::chi2Term(hitPos, hitDir, *sp));
413  const double pull2 = (mmClust->localPosition<1>().x() - simHit->localPosition().x()) / std::sqrt(mmClust->localCovariance<1>().x());
414  primitives.push_back(MuonValR4::drawLabel(std::format("ml: {:1d}, gap: {:1d}, {:}, pull: {:.2f} / {:.2f}", reEle->multilayer(), mmClust->gasGap(),
415  !design.hasStereoAngle() ? "X" : design.stereoAngle() >0 ? "U": "V",pull, pull2),legX,legY,14));
416  legY-=0.05;
417  }
418  m_visionTool->visualizeBucket(ctx, *max.parentBucket(),
419  "truth", std::move(primitives));
420  }
421 
422  UsedHitMarker_t allUsedHits = emptyBookKeeper(stripHitsLayers);
423 
424 
425  const Amg::Transform3D globToLocal = max.msSector()->globalToLocalTrans(gctx);
426  std::array<const SpacePoint*, 4> seedHits{};
427 
428  InitialSeedVec_t preLimSeeds{};
429 
430  for (std::size_t i = 0; i < layerSize - 3; ++i) {
431  seedHits[0] = stripHitsLayers[i].front();
432  for (std::size_t j = i + 1; j < layerSize - 2; ++j) {
433  seedHits[1] = stripHitsLayers[j].front();
434  for (std::size_t k = j + 1; k < layerSize - 1; ++k) {
435  seedHits[2] = stripHitsLayers[k].front();
436  for (std::size_t l = k + 1; l < layerSize; ++l) {
437  seedHits[3] = stripHitsLayers[l].front();
438 
439  const HitLaySpan_t layers{stripHitsLayers[i], stripHitsLayers[j], stripHitsLayers[k], stripHitsLayers[l]};
440 
441  //skip combination with at least one too busy layer
442  if (std::any_of(layers.begin(), layers.end(),
443  [this](const auto& layer) {
444  return layer.get().size() > m_maxClustersInLayer;
445  })) {
446  continue; // skip this combination
447  }
448 
449  AmgSymMatrix(2) bMatrix = betaMatrix(seedHits);
450  if (std::abs(bMatrix.determinant()) < 1.e-6) {
451  continue;
452  }
453  ATH_MSG_DEBUG("Space point positions for seed layers: "
454  << Amg::toString(seedHits[0]->localPosition()) << ", "
455  << Amg::toString(seedHits[1]->localPosition()) << ", "
456  << Amg::toString(seedHits[2]->localPosition()) << ", "
457  << Amg::toString(seedHits[3]->localPosition()));
458 
459  UsedHitSpan_t usedHits{allUsedHits[i], allUsedHits[j], allUsedHits[k], allUsedHits[l]};
460  // each layer may have more than one hit - take the hit combinations
461  constructPrelimnarySeeds(globToLocal.translation(), layers, usedHits, preLimSeeds);
462 
463  //the layers not participated in the seed build - gonna be used for the extension
464  HitLaySpan_t extensionLayers{};
465  UsedHitSpan_t usedExtensionHits{};
466  usedExtensionHits.reserve(stripHitsLayers.size());
467  extensionLayers.reserve(stripHitsLayers.size());
468  for (std::size_t e = 0 ; e < stripHitsLayers.size(); ++e) {
469  if (!(e == i || e == j || e == k || e == l)){
470  extensionLayers.emplace_back(stripHitsLayers[e]);
471  usedExtensionHits.emplace_back(allUsedHits[e]);
472  }
473  }
474  // we have made sure to have hits from all the four layers -
475  // start by 4 hits for the seed and try to build the seed for the combinatorics found
476  for (auto &combinatoricHits : preLimSeeds) {
477  auto seed = buildSegmentSeed(combinatoricHits, bMatrix, max, extensionLayers, usedExtensionHits);
478  if (seed) {
479  //if the seed build is successful, try to build the segment
480  ++nSeeds;
481  if(seed->getHitsInMax().size() < m_minSeedHits){
482  ATH_MSG_VERBOSE("Not succesfully extended seed");
483  continue;
484 
485  }
486  ++nExtSeeds;
487  std::unique_ptr<Segment> segment = fitSegmentSeed(ctx, gctx, seed.get());
488  seeds.push_back(std::move(seed));
489 
490 
491  if (!segment) {
492  ATH_MSG_VERBOSE("Seed Rejection: Segment fit failed");
493  if(m_markHitsFromSeed){
494  //mark hits from extended seed if no succesfully led to segment
495  markHitsAsUsed(seeds.back()->getHitsInMax(), stripHitsLayers, allUsedHits, 1, false);
496  }
497  continue;
498  }
499 
500  ++nSegments;
501  // Flag hits as used and in the window around segment
502  HitVec segMeasSP;
503  segMeasSP.reserve(segment->measurements().size());
504  std::transform(segment->measurements().begin(),
505  segment->measurements().end(),
506  std::back_inserter(segMeasSP),
507  [](const auto& m) { return m->spacePoint(); });
508  //mark hits from segment
509  markHitsAsUsed(segMeasSP, stripHitsLayers, allUsedHits, 10, true);
510  segments.push_back(std::move(segment));
511 
512  }
513  }
514  }
515  }
516  }
517  }
518 
520  m_seedCounter->addToStat(max.msSector(), nSeeds, nExtSeeds, nSegments);
521  }
522 
523  return std::make_pair(std::move(seeds),std::move(segments));
524 }

◆ fitSegmentSeed()

std::unique_ptr< Segment > MuonR4::NswSegmentFinderAlg::fitSegmentSeed ( const EventContext &  ctx,
const ActsTrk::GeometryContext gctx,
const SegmentSeed patternSeed 
) const
private

Fit the segment seed.

Parameters
gctxThe reference to the Geometry Context
patternSeedThe pointer to the seed of which we fit the calibrated space points

Definition at line 356 of file NswSegmentFinderAlg.cxx.

358  {
359 
360  ATH_MSG_VERBOSE("Fit the SegmentSeed");
361 
362  //Calibration of the seed spacepoints
363  CalibSpacePointVec calibratedHits = m_calibTool->calibrate(ctx, patternSeed->getHitsInMax(),
364  patternSeed->localPosition(), patternSeed->localDirection(), 0.);
365 
366  const Amg::Transform3D& locToGlob{patternSeed->msSector()->localToGlobalTrans(gctx)};
367 
368  auto segment = m_lineFitter->fitSegment(ctx, patternSeed, patternSeed->parameters(),
369  locToGlob, std::move(calibratedHits));
370 
371  return segment;
372 
373 }

◆ hitFromIPCorridor()

NswSegmentFinderAlg::HitWindow MuonR4::NswSegmentFinderAlg::hitFromIPCorridor ( const SpacePoint testHit,
const Amg::Vector3D beamSpotPos,
const Amg::Vector3D dirEstUp,
const Amg::Vector3D dirEstDn 
) const
inlineprivate

The hit is above the predefined corridor.

Tests whether a hit is inside the corridor defined by line connecting the centre of the first candidate hit in the seed and the beam spot. The theta angle is varied by m_windowTheta to define the lower & upper direction etimate. The function tests whether the strip then crosses the corridor.

Parameters
testHitReference to the hit to test
beamSpotPosPosition of the beam spot serving as starting point
dirEstUpDirection vector defining the upper limit of the corridor
dirEstDnDirection vector defining the lower limit of the corridor

Calculate the strip edges

Check whether the both edges are below the lower estimated muon arrival

Analogous check for the upper edge

No extrapolation needed

Analogous check for the upper edge

Definition at line 120 of file NswSegmentFinderAlg.cxx.

123  {
124 
125  const Amg::Vector3D estPlaneArrivalUp = SeedingAux::extrapolateToPlane(beamSpotPos, dirEstUp, testHit);
126  const Amg::Vector3D estPlaneArrivalDn = SeedingAux::extrapolateToPlane(beamSpotPos, dirEstDn, testHit);
127 
128  bool below{true}, above{true};
129  switch (classifyStrip(testHit)) {
130  using enum StripOrient;
131  case U:
132  case V:{
133  const double halfLength = 0.5* stripHalfLength(testHit);
135  const Amg::Vector3D leftEdge = testHit.localPosition() - halfLength * testHit.sensorDirection();
136  const Amg::Vector3D rightEdge = testHit.localPosition() + halfLength * testHit.sensorDirection();
137 
139  below = estPlaneArrivalDn.y() > std::max(leftEdge.y(), rightEdge.y());
141  above = estPlaneArrivalUp.y() < std::min(leftEdge.y(), rightEdge.y());
142  break;
143  } case X:
144  case C: {
146  const double hY = testHit.localPosition().y();
147  below = estPlaneArrivalDn.y() > hY;
149  above = estPlaneArrivalUp.y() < hY;
150  break;
151  }
152  case P:{
153  break;
154  }
155  case Unknown:{
156  break;
157  }
158 
159  }
160  ATH_MSG_VERBOSE("Hit " << m_idHelperSvc->toString(testHit.identify())
161  << (below || above ? " is outside the window" : " is inside the window"));
162  if(below) {
163  return HitWindow::tooLow;
164  }
165  if(above) {
166  return HitWindow::tooHigh;
167  }
168  return HitWindow::inside;
169 };

◆ initialize()

StatusCode MuonR4::NswSegmentFinderAlg::initialize ( )
overridevirtual

Definition at line 61 of file NswSegmentFinderAlg.cxx.

61  {
63  ATH_CHECK(m_etaKey.initialize());
64  ATH_CHECK(m_writeSegmentKey.initialize());
65  ATH_CHECK(m_writeSegmentSeedKey.initialize());
66  ATH_CHECK(m_idHelperSvc.retrieve());
67  ATH_CHECK(m_calibTool.retrieve());
68  ATH_CHECK(m_visionTool.retrieve(DisableTool{m_visionTool.empty()}));
69 
70  if (!(m_idHelperSvc->hasMM() || m_idHelperSvc->hasSTGC())) {
71  ATH_MSG_ERROR("MM or STGC not part of initialized detector layout");
72  return StatusCode::FAILURE;
73  }
74 
75  SegmentLineFitter::Config fitCfg{};
76  fitCfg.calibrator = m_calibTool.get();
77  fitCfg.visionTool = m_visionTool.get();
78  fitCfg.idHelperSvc = m_idHelperSvc.get();
79 
80  m_lineFitter = std::make_unique<SegmentFit::SegmentLineFitter>(name(), std::move(fitCfg));
81 
83 
84  m_seedCounter = std::make_unique<SeedStatistics>();
85  }
86 
87  return StatusCode::SUCCESS;
88 }

◆ 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 AthCommonReentrantAlgorithm< Gaudi::Algorithm >::isClonable
overridevirtualinherited

Specify if the algorithm is clonable.

Reentrant algorithms are clonable.

Definition at line 68 of file AthCommonReentrantAlgorithm.cxx.

52 {
53  // Reentrant algorithms are clonable.
54  return true;
55 }

◆ markHitsAsUsed()

void MuonR4::NswSegmentFinderAlg::markHitsAsUsed ( const HitVec spacePoints,
const HitLayVec allSortHits,
UsedHitMarker_t usedHitMarker,
unsigned int  increase,
bool  markNeighborHits 
) const
private

Hits that are used in a good seed/segment built should be flagged as used and not contribute to other seed.

Parameters
spacePointsThe space points to be marked as used
allSortHitsAll the available hits
usedHitMarkerThe book keeping of the hits
increaseThe hit counter increase
markNeighborHitsFlag wether to mark hits on the layer in the vicinity

Definition at line 527 of file NswSegmentFinderAlg.cxx.

531  {
532 
533  SpacePointPerLayerSorter layerSorter{};
534 
535  for(const auto& sp : spacePoints){
536 
537  if(!sp){
538  continue;
539  }
540 
541  unsigned int measLayer = layerSorter.sectorLayerNum(*sp);
542 
543  bool found{false};
544  double spPosX = sp->primaryMeasurement()->localPosition<1>().x();
545 
546  for (std::size_t lIdx = 0; !found && lIdx < allSortHits.size(); ++lIdx) {
547  const HitVec& hVec{allSortHits[lIdx]};
548  //check if they are not in the same layer
549  unsigned int hitLayer = layerSorter.sectorLayerNum(*hVec.front());
550  if(hitLayer != measLayer){
551  ATH_MSG_VERBOSE("Not in the same layer since measLayer = "<< measLayer << " and "<<hitLayer);
552  continue;
553  }
554 
555  for (std::size_t hIdx = 0 ; hIdx < hVec.size(); ++hIdx) {
556  //check the dY between the measurement and the hits
557 
558  auto testHit = hVec[hIdx];
559 
560  if (testHit == sp) {
561  usedHitMarker[lIdx][hIdx] += incr;
562  found = true;
563  if(!markNeighborHits){
564  break;
565  }
566  }
567 
568  //if the hit not found let's see if it is too close to the segment's measurement
569  double deltaX = std::abs(testHit->primaryMeasurement()->localPosition<1>().x() - spPosX);
570  if(deltaX < m_maxdYWindow){
571  usedHitMarker[lIdx][hIdx] += incr;
572 
573  }
574  }
575  }
576 
577  }
578 
579 }

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

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

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100  {
101  execState( ctx ).setFilterPassed( state );
102  }

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

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()) {
123  sc = StatusCode::FAILURE;
124  ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
125  << " with CondSvc");
126  }
127  }
128  }
129  return sc;
130 }

◆ 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<SeedStatistics> m_seedCounter MuonR4::NswSegmentFinderAlg::ATLAS_THREAD_SAFE {}
private

Definition at line 270 of file NswSegmentFinderAlg.h.

◆ m_calibTool

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

Definition at line 232 of file NswSegmentFinderAlg.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_dumpSeedStatistics

BooleanProperty MuonR4::NswSegmentFinderAlg::m_dumpSeedStatistics {this, "dumpStatistics", true}
private

Definition at line 268 of file NswSegmentFinderAlg.h.

◆ m_etaKey

SG::ReadHandleKey<EtaHoughMaxContainer> MuonR4::NswSegmentFinderAlg::m_etaKey {this, "CombinatorialReadKey", "MuonHoughNswMaxima"}
private

Definition at line 214 of file NswSegmentFinderAlg.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 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::NswSegmentFinderAlg::m_geoCtxKey {this, "AlignmentKey", "ActsAlignment", "cond handle key"}
private

Definition at line 223 of file NswSegmentFinderAlg.h.

◆ m_idHelperSvc

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

Definition at line 226 of file NswSegmentFinderAlg.h.

◆ m_lineFitter

std::unique_ptr<SegmentFit::SegmentLineFitter> MuonR4::NswSegmentFinderAlg::m_lineFitter {}
private

Definition at line 235 of file NswSegmentFinderAlg.h.

◆ m_markHitsFromSeed

BooleanProperty MuonR4::NswSegmentFinderAlg::m_markHitsFromSeed {this, "markHitsFromSeed", true}
private

Definition at line 250 of file NswSegmentFinderAlg.h.

◆ m_maxChi2

DoubleProperty MuonR4::NswSegmentFinderAlg::m_maxChi2 {this, "maxChi2", 6.}
private

Definition at line 259 of file NswSegmentFinderAlg.h.

◆ m_maxClustersInLayer

DoubleProperty MuonR4::NswSegmentFinderAlg::m_maxClustersInLayer {this, "maxClustersInLayer", 8}
private

Definition at line 262 of file NswSegmentFinderAlg.h.

◆ m_maxdYWindow

DoubleProperty MuonR4::NswSegmentFinderAlg::m_maxdYWindow {this, "maxdYWindow", 4.*Gaudi::Units::cm}
private

Definition at line 265 of file NswSegmentFinderAlg.h.

◆ m_maxInvalidClusters

DoubleProperty MuonR4::NswSegmentFinderAlg::m_maxInvalidClusters {this, "maxInvalidClusters", 4.}
private

Definition at line 247 of file NswSegmentFinderAlg.h.

◆ m_maxUsed

UnsignedIntegerProperty MuonR4::NswSegmentFinderAlg::m_maxUsed {this, "maxHitIsUsed", 6}
private

Definition at line 253 of file NswSegmentFinderAlg.h.

◆ m_minClusSize

DoubleProperty MuonR4::NswSegmentFinderAlg::m_minClusSize {this, "minClusterSize", 1.}
private

Definition at line 256 of file NswSegmentFinderAlg.h.

◆ m_minPullThreshold

DoubleProperty MuonR4::NswSegmentFinderAlg::m_minPullThreshold {this, "maxPull", 5.}
private

Definition at line 241 of file NswSegmentFinderAlg.h.

◆ m_minSeedHits

DoubleProperty MuonR4::NswSegmentFinderAlg::m_minSeedHits {this, "minSeedHits", 6.}
private

Definition at line 244 of file NswSegmentFinderAlg.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_visionTool

ToolHandle<MuonValR4::IPatternVisualizationTool> MuonR4::NswSegmentFinderAlg::m_visionTool {this, "VisualizationTool", ""}
private

Pattern visualization tool.

Definition at line 229 of file NswSegmentFinderAlg.h.

◆ m_windowTheta

DoubleProperty MuonR4::NswSegmentFinderAlg::m_windowTheta {this, "thetaWindow", 0.5 * Gaudi::Units::deg}
private

Definition at line 238 of file NswSegmentFinderAlg.h.

◆ m_writeSegmentKey

SG::WriteHandleKey<SegmentContainer> MuonR4::NswSegmentFinderAlg::m_writeSegmentKey {this, "MuonNswSegmentWriteKey", "MuonNswSegments"}
private

Definition at line 220 of file NswSegmentFinderAlg.h.

◆ m_writeSegmentSeedKey

SG::WriteHandleKey<SegmentSeedContainer> MuonR4::NswSegmentFinderAlg::m_writeSegmentSeedKey {this, "MuonNswSegmentSeedWriteKey", "MuonNswSegmentSeeds"}
private

Definition at line 217 of file NswSegmentFinderAlg.h.


The documentation for this class was generated from the following files:
MuonR4::minLayers
constexpr unsigned int minLayers
Definition: NswSegmentFinderAlg.cxx:58
MuonR4::NswSegmentFinderAlg::m_markHitsFromSeed
BooleanProperty m_markHitsFromSeed
Definition: NswSegmentFinderAlg.h:250
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
GetLCDefs::Unknown
@ Unknown
Definition: GetLCDefs.h:21
xAOD::MuonSimHit_v1
Definition: MuonSimHit_v1.h:18
MuonGMR4::StripDesign::stereoAngle
double stereoAngle() const
Returns the value of the stereo angle.
MuonGMR4::MmReadoutElement
Definition: MmReadoutElement.h:18
MuonGMR4::StripDesign
Definition: StripDesign.h:30
MuonR4::NswSegmentFinderAlg::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: NswSegmentFinderAlg.h:226
MuonR4::NswSegmentFinderAlg::HitLaySpan_t
std::vector< std::reference_wrapper< const HitVec > > HitLaySpan_t
Abbrivation of the space comprising multiple hit vectors without copy.
Definition: NswSegmentFinderAlg.h:113
TRTCalib_Extractor.hits
hits
Definition: TRTCalib_Extractor.py:35
MuonGMR4::MuonReadoutElement::msSector
const SpectrometerSector * msSector() const
Returns the pointer to the envelope volume enclosing all chambers in the sector.
xAOD::MuonSimHit_v1::identify
Identifier identify() const
Returns the global ATLAS identifier of the SimHit.
Definition: xAODMuonSimHit_V1.cxx:42
vtune_athena.format
format
Definition: vtune_athena.py:14
xAOD::MMCluster_v1
Definition: MMCluster_v1.h:20
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
DMTest::P
P_v1 P
Definition: P.h:23
MuonR4::NswSegmentFinderAlg::StripOrient
StripOrient
Enumeration to classify the orientation of a NSW strip
Definition: NswSegmentFinderAlg.h:45
MuonR4::NswSegmentFinderAlg::m_geoCtxKey
SG::ReadHandleKey< ActsTrk::GeometryContext > m_geoCtxKey
Definition: NswSegmentFinderAlg.h:223
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
MuonR4::NswSegmentFinderAlg::HitWindow::tooHigh
@ tooHigh
The hit is inside the defined window and hence an initial candidate.
DMTest::C
C_v1 C
Definition: C.h:26
MuonR4::NswSegmentFinderAlg::HitWindow::tooLow
@ tooLow
MuonR4::NswSegmentFinderAlg::m_lineFitter
std::unique_ptr< SegmentFit::SegmentLineFitter > m_lineFitter
Definition: NswSegmentFinderAlg.h:235
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
xAOD::UncalibMeasType::MMClusterType
@ MMClusterType
module_driven_slicing.layers
layers
Definition: module_driven_slicing.py:113
MuonR4::NswSegmentFinderAlg::buildSegmentSeed
std::unique_ptr< SegmentSeed > buildSegmentSeed(const InitialSeed_t &initialSeed, const AmgSymMatrix(2)&bMatrix, const HoughMaximum &max, const HitLaySpan_t &extensionLayers, const UsedHitSpan_t &usedHits) const
Build the final seed from the initial seed hits and then attempt to append hits from the complementar...
Definition: NswSegmentFinderAlg.cxx:299
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
TEST_HIT_CORRIDOR
#define TEST_HIT_CORRIDOR(LAYER, HIT_ITER, START_LAYER)
Macro to check whether a hit is compatible with the hit corridor.
Definition: NswSegmentFinderAlg.cxx:172
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
sTgcIdHelper::Strip
@ Strip
Definition: sTgcIdHelper.h:190
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:157
MuonR4::NswSegmentFinderAlg::StripOrient::Unknown
@ Unknown
Combined 2D space point (sTGC wire + strip / sTgc pad)
MuonR4::NswSegmentFinderAlg::m_windowTheta
DoubleProperty m_windowTheta
Definition: NswSegmentFinderAlg.h:238
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
MuonR4::NswSegmentFinderAlg::m_maxUsed
UnsignedIntegerProperty m_maxUsed
Definition: NswSegmentFinderAlg.h:253
xAOD::UncalibMeasType::sTgcStripType
@ sTgcStripType
MuonR4::NswSegmentFinderAlg::constructPrelimnarySeeds
void constructPrelimnarySeeds(const Amg::Vector3D &beamSpot, const HitLaySpan_t &combinatoricLayers, const UsedHitSpan_t &usedHits, InitialSeedVec_t &outVec) const
Construct a set of prelimnary seeds from the selected combinatoric layers.
Definition: NswSegmentFinderAlg.cxx:197
x
#define x
MuonValR4::drawLabel
std::unique_ptr< TLatex > drawLabel(const std::string &text, const double xPos, const double yPos, const unsigned int fontSize=18)
Create a TLatex label,.
Definition: VisualizationHelpers.cxx:40
MuonR4::NswSegmentFinderAlg::m_writeSegmentKey
SG::WriteHandleKey< SegmentContainer > m_writeSegmentKey
Definition: NswSegmentFinderAlg.h:220
MuonR4::NswSegmentFinderAlg::m_visionTool
ToolHandle< MuonValR4::IPatternVisualizationTool > m_visionTool
Pattern visualization tool.
Definition: NswSegmentFinderAlg.h:229
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:50
MuonR4::NswSegmentFinderAlg::markHitsAsUsed
void markHitsAsUsed(const HitVec &spacePoints, const HitLayVec &allSortHits, UsedHitMarker_t &usedHitMarker, unsigned int increase, bool markNeighborHits) const
Hits that are used in a good seed/segment built should be flagged as used and not contribute to other...
Definition: NswSegmentFinderAlg.cxx:527
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Monitored::X
@ X
Definition: HistogramFillerUtils.h:24
SpacePoint
Definition: Trigger/TrigAccel/TrigCudaFitter/src/SpacePoint.h:7
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
MuonR4::NswSegmentFinderAlg::StripOrient::P
@ P
Ordinary eta strips.
MuonR4::NswSegmentFinderAlg::HitWindow::inside
@ inside
The hit is below the predefined corridor.
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
AthCommonReentrantAlgorithm::extraOutputDeps
virtual const DataObjIDColl & extraOutputDeps() const override
Return the list of extra output dependencies.
Definition: AthCommonReentrantAlgorithm.cxx:89
MuonR4::houghTanBeta
double houghTanBeta(const Amg::Vector3D &v)
Returns the hough tanBeta [y] / [z].
Definition: SegmentFitterEventData.cxx:26
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
MuonR4::NswSegmentFinderAlg::m_etaKey
SG::ReadHandleKey< EtaHoughMaxContainer > m_etaKey
Definition: NswSegmentFinderAlg.h:214
AthCommonDataStore
Definition: AthCommonDataStore.h:52
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
Generate_dsid_ranseed.seed
seed
Definition: Generate_dsid_ranseed.py:10
MuonGMR4::MmReadoutElement::multilayer
int multilayer() const
Returns the multi layer of the element [1-2].
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
MuonR4::NswSegmentFinderAlg::m_maxdYWindow
DoubleProperty m_maxdYWindow
Definition: NswSegmentFinderAlg.h:265
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
lumiFormat.i
int i
Definition: lumiFormat.py:85
SG::get
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
Definition: ReadCondHandle.h:283
MuonR4::NswSegmentFinderAlg::m_calibTool
ToolHandle< ISpacePointCalibrator > m_calibTool
Definition: NswSegmentFinderAlg.h:232
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
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition: AthCommonDataStore.h:145
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
AthCommonReentrantAlgorithm::sysExecute
virtual StatusCode sysExecute(const EventContext &ctx) override
Execute an algorithm.
Definition: AthCommonReentrantAlgorithm.cxx:76
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
MuonR4::SegmentFit::Parameters
Acts::Experimental::CompositeSpacePointLineFitter::ParamVec_t Parameters
Definition: MuonHoughDefs.h:46
MuonGMR4::MuonReadoutElement::localToGlobalTrans
const Amg::Transform3D & localToGlobalTrans(const ActsTrk::GeometryContext &ctx) const
Returns the local to global transformation into the ATLAS coordinate system.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:81
python.StandardJetMods.pull
pull
Definition: StandardJetMods.py:309
xAOD::MuonSimHit_v1::localDirection
ConstVectorMap< 3 > localDirection() const
Returns the local direction of the traversing particle.
Definition: xAODMuonSimHit_V1.cxx:66
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MuonR4::NswSegmentFinderAlg::findSegmentsFromMaximum
std::pair< std::vector< std::unique_ptr< SegmentSeed > >, std::vector< std::unique_ptr< Segment > > > findSegmentsFromMaximum(const HoughMaximum &max, const ActsTrk::GeometryContext &gctx, const EventContext &ctx) const
Find seed and segment from an eta hough maximum.
Definition: NswSegmentFinderAlg.cxx:376
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
ActsTrk::GeometryContext
Definition: GeometryContext.h:28
F600IntegrationConfig.spacePoints
spacePoints
Definition: F600IntegrationConfig.py:122
MuonR4::NswSegmentFinderAlg::classifyStrip
StripOrient classifyStrip(const SpacePoint &spacePoint) const
Determines the orientation of the strip space point.
Definition: NswSegmentFinderAlg.cxx:100
compareGeometries.deltaX
float deltaX
Definition: compareGeometries.py:32
MuonGMR4::StripLayer::design
const StripDesign & design(bool phiView=false) const
Returns the underlying strip design.
MuonR4::NswSegmentFinderAlg::UsedHitSpan_t
std::vector< std::reference_wrapper< std::vector< unsigned int > >> UsedHitSpan_t
Abbrivation of the container to pass a subset of markers wtihout copy.
Definition: NswSegmentFinderAlg.h:117
MuonR4::NswSegmentFinderAlg::StripOrient::X
@ X
Stereo strips with negative angle.
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
MuonGMR4::SpectrometerSector::globalToLocalTrans
Amg::Transform3D globalToLocalTrans(const ActsTrk::GeometryContext &gctx) const
Returns the global -> local transformation from the ATLAS global.
Definition: SpectrometerSector.cxx:78
lumiFormat.array
array
Definition: lumiFormat.py:91
MuonR4::NswSegmentFinderAlg::m_writeSegmentSeedKey
SG::WriteHandleKey< SegmentSeedContainer > m_writeSegmentSeedKey
Definition: NswSegmentFinderAlg.h:217
MuonGMR4::MmReadoutElement::stripLayer
const StripLayer & stripLayer(const Identifier &measId) const
MuonR4::NswSegmentFinderAlg::extendHits
HitVec extendHits(const Amg::Vector3D &startPos, const Amg::Vector3D &direction, const HitLaySpan_t &extensionLayers, const UsedHitSpan_t &usedHits) const
Extend the seed with the hits from the other layers.
Definition: NswSegmentFinderAlg.cxx:246
MuonR4::NswSegmentFinderAlg::m_minPullThreshold
DoubleProperty m_minPullThreshold
Definition: NswSegmentFinderAlg.h:241
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
MuonValR4::IPatternVisualizationTool::PrimitiveVec
std::vector< PrimitivePtr > PrimitiveVec
Definition: IPatternVisualizationTool.h:31
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
MuonR4::NswSegmentFinderAlg::m_dumpSeedStatistics
BooleanProperty m_dumpSeedStatistics
Definition: NswSegmentFinderAlg.h:268
checkTriggerxAOD.found
found
Definition: checkTriggerxAOD.py:328
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Amg::dirFromAngles
Amg::Vector3D dirFromAngles(const double phi, const double theta)
Constructs a direction vector from the azimuthal & polar angles.
Definition: GeoPrimitivesHelpers.h:299
Trk::inside
@ inside
Definition: PropDirection.h:29
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
MuonR4::NswSegmentFinderAlg::InitialSeedVec_t
std::vector< InitialSeed_t > InitialSeedVec_t
Vector of initial seeds.
Definition: NswSegmentFinderAlg.h:121
MuonR4::NswSegmentFinderAlg::m_minSeedHits
DoubleProperty m_minSeedHits
Definition: NswSegmentFinderAlg.h:244
a
TList * a
Definition: liststreamerinfos.cxx:10
h
MuonR4::NswSegmentFinderAlg::StripOrient::U
@ U
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
MuonR4::CalibSpacePointVec
ISpacePointCalibrator::CalibSpacePointVec CalibSpacePointVec
Definition: SpacePointCalibrator.cxx:40
unit
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
Definition: AmgMatrixBasePlugin.h:21
MuonR4::NswSegmentFinderAlg::fitSegmentSeed
std::unique_ptr< Segment > fitSegmentSeed(const EventContext &ctx, const ActsTrk::GeometryContext &gctx, const SegmentSeed *patternSeed) const
Fit the segment seed.
Definition: NswSegmentFinderAlg.cxx:356
xAOD::MuonSimHit_v1::localPosition
ConstVectorMap< 3 > localPosition() const
Returns the local postion of the traversing particle.
Definition: xAODMuonSimHit_V1.cxx:60
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
MuonR4::NswSegmentFinderAlg::StripOrient::V
@ V
Stereo strips with positive angle.
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:629
MuonR4::getTruthMatchedHit
const xAOD::MuonSimHit * getTruthMatchedHit(const xAOD::UncalibratedMeasurement &prdHit)
Returns the MuonSimHit, if there's any, matched to the uncalibrated muon measurement.
Definition: MuonSimHitHelpers.cxx:27
MuonR4::SegmentFit::localSegmentPars
Parameters localSegmentPars(const xAOD::MuonSegment &seg)
Returns the localSegPars decoration from a xAODMuon::Segment.
Definition: SegmentFitterEventData.cxx:42
AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthCommonReentrantAlgorithm.cxx:107
python.BuildSignatureFlags.beamSpot
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
Definition: BuildSignatureFlags.py:491
MuonGMR4::StripDesign::hasStereoAngle
bool hasStereoAngle() const
Returns whether a stereo angle is defined.
MuonR4::NswSegmentFinderAlg::HitLayVec
SpacePointPerLayerSplitter::HitLayVec HitLayVec
Definition: NswSegmentFinderAlg.h:111
MuonR4::EtaHoughMaxContainer
DataVector< HoughMaximum > EtaHoughMaxContainer
Definition: MuonPatternContainer.h:14
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:801
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:13
PowhegControl_ttFCNC_NLO.params
params
Definition: PowhegControl_ttFCNC_NLO.py:226
AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Definition: AthCommonReentrantAlgorithm.h:114
MuonR4::houghTanAlpha
double houghTanAlpha(const Amg::Vector3D &v)
: Returns the hough tanAlpha [x] / [z]
Definition: SegmentFitterEventData.cxx:30
MuonR4::NswSegmentFinderAlg::UsedHitMarker_t
std::vector< std::vector< unsigned int > > UsedHitMarker_t
Abbrivation of the container book keeping whether a hit is used or not.
Definition: NswSegmentFinderAlg.h:115
MuonR4::NswSegmentFinderAlg::StripOrient::C
@ C
Single phi measurements.
MuonR4::getMatchingSimHits
std::unordered_set< const xAOD::MuonSimHit * > getMatchingSimHits(const xAOD::MuonSegment &segment)
: Returns all sim hits matched to a xAOD::MuonSegment
Definition: MuonSimHitHelpers.cxx:38
fitman.k
k
Definition: fitman.py:528
xAOD::sTgcMeasurement_v1
Definition: sTgcMeasurement_v1.h:21
MuonR4::NswSegmentFinderAlg::HitVec
SpacePointPerLayerSplitter::HitVec HitVec
Definition: NswSegmentFinderAlg.h:109
python.SystemOfUnits.m
float m
Definition: SystemOfUnits.py:106
MuonR4::NswSegmentFinderAlg::emptyBookKeeper
UsedHitMarker_t emptyBookKeeper(const HitLayVec &sortedSp) const
Constructs an empty HitMarker from the split space points.
Definition: NswSegmentFinderAlg.cxx:91
ServiceHandle< ICondSvc >
isMuon
bool isMuon(const T &p)
Definition: AtlasPID.h:205