 |
ATLAS Offline Software
|
#include <CombinatorialNSWSeedFinderAlg.h>
|
virtual | ~CombinatorialNSWSeedFinderAlg ()=default |
|
virtual StatusCode | initialize () override |
|
virtual StatusCode | execute (const EventContext &ctx) const 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 |
|
|
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< 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 complementary layers onto the seed. More...
|
|
void | markHitsAsUsed (const SegmentSeed &seed, const HitLayVec &allSortHits, UsedHitMarker_t &usedHitMarker) const |
|
HitVec | extendHits (const Amg::Vector3D &startPos, const Amg::Vector3D &direction, const HitLaySpan_t &extensionLayers, const UsedHitSpan_t &usedHits) const |
|
std::vector< std::unique_ptr< SegmentSeed > > | findSeedsFromMaximum (const HoughMaximum &max, const ActsGeometryContext &gctx) const |
|
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...
|
|
|
SG::ReadHandleKey< EtaHoughMaxContainer > | m_etaKey {this, "CombinatorialReadKey", "MuonHoughNswMaxima"} |
|
SG::WriteHandleKey< SegmentSeedContainer > | m_writeKey {this, "CombinatorialPhiWriteKey", "MuonHoughNswSegmentSeeds"} |
|
SG::ReadHandleKey< ActsGeometryContext > | m_geoCtxKey {this, "AlignmentKey", "ActsAlignment", "cond handle key"} |
|
ServiceHandle< Muon::IMuonIdHelperSvc > | m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"} |
|
DoubleProperty | m_windowTheta {this, "thetaWindow", 0.5 * Gaudi::Units::deg} |
|
DoubleProperty | m_minPullThreshold {this, "maxPull", 5.} |
|
ToolHandle< MuonValR4::IPatternVisualizationTool > | m_visionTool {this, "VisualizationTool", ""} |
| Pattern visualization tool. More...
|
|
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 |
|
◆ HitLaySpan_t
◆ HitLayVec
◆ HitVec
◆ InitialSeed_t
◆ InitialSeedVec_t
◆ StoreGateSvc_t
◆ UsedHitMarker_t
◆ UsedHitSpan_t
◆ 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 69 of file CombinatorialNSWSeedFinderAlg.h.
◆ StripOrient
Enumeration to classify the orientation of a NSW strip
Enumerator |
---|
U | |
V | Stereo strips with positive angle.
|
X | Stereo strips with negative angle.
|
Unknown | Ordinary eta strips.
|
Definition at line 39 of file CombinatorialNSWSeedFinderAlg.h.
◆ ~CombinatorialNSWSeedFinderAlg()
virtual MuonR4::CombinatorialNSWSeedFinderAlg::~CombinatorialNSWSeedFinderAlg |
( |
| ) |
|
|
virtualdefault |
◆ buildSegmentSeed()
Build the final seed from the initial seed hits and then attempt to append hits from the complementary layers onto the seed.
- Parameters
-
initialSeed | Reference to the hit quadruplet that may form a seed |
bMatrix | Kernel matrix calculated from the layer configuration to construct the seed |
max | Refrence to the eta maximum from which the segment seed is constructed |
extensionLayers | Reference to the hits on the remaining layers of the detector |
usedExtensionHits | Refrence to the book keeper of which of the hits on the extension was already used |
Definition at line 283 of file CombinatorialNSWSeedFinderAlg.cxx.
289 HitVec hits{initialSeed.begin(), initialSeed.end()};
296 for (std::size_t
i = 0;
i < 4; ++
i) {
297 const double halfLength = stripHalfLength(*
hits[
i]);
299 if (std::abs(
params[
i]) > halfLength) {
300 ATH_MSG_VERBOSE(
"Seed Rejection: Invalid seed - outside of the strip's length");
307 double interceptX = segPos.x();
308 double interceptY = segPos.y();
312 auto extendedHits =
extendHits(segPos, direction, extensionLayers, usedHits);
313 hits.insert(
hits.end(), extendedHits.begin(), extendedHits.end());
314 return std::make_unique<SegmentSeed>(tanTheta, interceptY, tanPhi,
315 interceptX,
hits.size(),
316 std::move(
hits),
max.parentBucket());
◆ cardinality()
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.
◆ classifyStrip()
Determines the orientation of the strip space point.
Definition at line 90 of file CombinatorialNSWSeedFinderAlg.cxx.
93 const auto& design = getDesign(sp);
94 if (!design.hasStereoAngle()) {
◆ constructPrelimnarySeeds()
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
-
beamSpot | Position of the beam spot in the sector's frame |
combinatoricLayers | Quadruplet of four hit vectors from which the hits are retrieved |
usedHits | Mask marking hits that were already successfully added to a seed |
outVec | Reference 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 181 of file CombinatorialNSWSeedFinderAlg.cxx.
186 seedHitsFromLayers.clear();
187 std::size_t maxSize{1};
188 for (
const HitVec& hitVec : combinatoricLayers) {
189 maxSize = maxSize * hitVec.size();
191 seedHitsFromLayers.reserve(maxSize);
194 unsigned int iterLay0{0}, iterLay1{0}, iterLay2{0}, iterLay3{0};
195 unsigned int startLay1{0}, startLay2{0}, startLay3{0};
197 for( ; iterLay0 < combinatoricLayers[0].get().
size() ; ++iterLay0){
199 if (usedHits[0].
get()[iterLay0]) {
202 const SpacePoint* hit0 = combinatoricLayers[0].get()[iterLay0];
213 for( iterLay1 = startLay1; iterLay1 < combinatoricLayers[1].get().
size() ; ++iterLay1){
215 for( iterLay2 = startLay2; iterLay2 < combinatoricLayers[2].get().
size() ; ++iterLay2){
217 for( iterLay3 = startLay3; iterLay3 < combinatoricLayers[3].get().
size(); ++iterLay3){
219 seedHitsFromLayers.emplace_back(
std::array{hit0, combinatoricLayers[1].get()[iterLay1],
220 combinatoricLayers[2].
get()[iterLay2],
221 combinatoricLayers[3].
get()[iterLay3]});
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation 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.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation 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.
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation 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.
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation 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.
◆ declareProperty() [6/6]
◆ detStore()
◆ emptyBookKeeper()
Constructs an empty HitMarker from the split space points.
- Parameters
-
sortedSp | List of space points sorted by layer |
Definition at line 81 of file CombinatorialNSWSeedFinderAlg.cxx.
83 for (std::size_t
l = 0;
l < sortedSp.size(); ++
l) {
84 emptyKeeper[
l].resize(sortedSp[
l].
size(), 0);
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ execute()
StatusCode MuonR4::CombinatorialNSWSeedFinderAlg::execute |
( |
const EventContext & |
ctx | ) |
const |
|
overridevirtual |
Definition at line 432 of file CombinatorialNSWSeedFinderAlg.cxx.
442 ATH_CHECK(writeMaxima.record(std::make_unique<SegmentSeedContainer>()));
446 for (
const HoughMaximum *
max : *maxima) {
449 for(
const auto& hitMax :
max->getHitsInMax()){
455 for (
auto &seed : seeds) {
457 std::stringstream sstr{};
458 sstr<<
"Seed tanTheta = "<<
seed->tanTheta()<<
", y0 = "<<
seed->interceptY()
459 <<
", tanPhi = "<<
seed->tanPhi()<<
", x0 = "<<
seed->interceptX()<<
", hits in the seed "
460 <<
seed->getHitsInMax().size()<<std::endl;
462 for(
const auto& hit :
seed->getHitsInMax()){
463 sstr<<
" *** Hit "<<
m_idHelperSvc->toString(hit->identify())<<
", "
469 m_visionTool->visualizeSeed(ctx, *seed,
"#phi-combinatorialSeed");
471 writeMaxima->push_back(std::move(seed));
474 return StatusCode::SUCCESS;
◆ extendHits()
Definition at line 230 of file CombinatorialNSWSeedFinderAlg.cxx.
239 for (std::size_t
i = 0;
i < extensionLayers.size(); ++
i) {
243 unsigned int indexOfHit =
layer.size() + 1;
244 unsigned int triedHit{0};
248 for (
unsigned int j = 0; j <
layer.size(); ++j) {
249 if (usedHits[
i].
get().at(j)) {
252 auto hit =
layer.at(j);
257 if (
pull > minPull) {
272 const auto* bestCand =
layer.at(indexOfHit);
275 <<
", dir: "<<
Amg::toString(bestCand->directionInChamber())<<
" found with pull "<<minPull);
276 combinatoricHits.push_back(bestCand);
279 return combinatoricHits;
◆ extraDeps_update_handler()
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()
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.
◆ filterPassed()
◆ findSeedsFromMaximum()
Definition at line 321 of file CombinatorialNSWSeedFinderAlg.cxx.
323 SpacePointPerLayerSplitter hitLayers{
max.getHitsInMax()};
325 const HitLayVec& stripHitsLayers{hitLayers.stripHits()};
326 const std::size_t layerSize = stripHitsLayers.size();
328 std::vector<std::unique_ptr<SegmentSeed>> seeds{};
340 constexpr
double legX{0.2};
343 const auto* mmClust =
static_cast<const xAOD::MMCluster*
>(sp->primaryMeasurement());
354 const double pull2 = (mmClust->localPosition<1>().
x() - simHit->
localPosition().x()) / std::sqrt(mmClust->localCovariance<1>().x());
359 m_visionTool->visualizeBucket(Gaudi::Hive::currentContext(), *
max.parentBucket(),
360 "truth", std::move(primitives));
365 std::array<const SpacePoint*, 4> seedHits{};
369 for (std::size_t
i = 0;
i < layerSize - 3; ++
i) {
370 seedHits[0] = stripHitsLayers[
i].front();
371 for (std::size_t j =
i + 1; j < layerSize - 2; ++j) {
372 seedHits[1] = stripHitsLayers[j].front();
373 for (std::size_t
k = j + 1;
k < layerSize - 1; ++
k) {
374 seedHits[2] = stripHitsLayers[
k].front();
375 for (std::size_t
l =
k + 1;
l < layerSize; ++
l) {
376 seedHits[3] = stripHitsLayers[
l].front();
377 AmgSymMatrix(2) bMatrix = CombinatorialSeedSolver::betaMatrix(seedHits);
378 if (std::abs(bMatrix.determinant()) < 1.
e-6) {
382 const HitLaySpan_t layers{stripHitsLayers[
i], stripHitsLayers[j], stripHitsLayers[
k], stripHitsLayers[
l]};
383 UsedHitSpan_t usedHits{allUsedHits[
i], allUsedHits[j], allUsedHits[
k], allUsedHits[
l]};
390 usedExtensionHits.reserve(stripHitsLayers.size());
391 extensionLayers.reserve(stripHitsLayers.size());
392 for (std::size_t
e = 0 ;
e < stripHitsLayers.size(); ++
e) {
393 if (!(
e ==
i ||
e == j ||
e ==
k ||
e ==
l)){
394 extensionLayers.emplace_back(stripHitsLayers[
e]);
395 usedExtensionHits.emplace_back(allUsedHits[
e]);
400 for (
auto &combinatoricHits : preLimSeeds) {
404 seeds.push_back(std::move(seed));
◆ hitFromIPCorridor()
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
-
testHit | Reference to the hit to test |
beamSpotPos | Position of the beam spot serving as starting point |
dirEstUp | Direction vector defining the upper limit of the corridor |
dirEstDn | Direction 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 108 of file CombinatorialNSWSeedFinderAlg.cxx.
116 bool below{
true}, above{
true};
121 const double halfLength = 0.5* stripHalfLength(testHit);
123 const Amg::Vector3D leftEdge = testHit.positionInChamber() - halfLength * testHit.directionInChamber();
124 const Amg::Vector3D rightEdge = testHit.positionInChamber() + halfLength * testHit.directionInChamber();
127 below = estPlaneArrivalDn.y() >
std::max(leftEdge.y(), rightEdge.y());
129 above = estPlaneArrivalUp.y() <
std::min(leftEdge.y(), rightEdge.y());
133 const double hY = testHit.positionInChamber().y();
134 below = estPlaneArrivalDn.y() > hY;
136 above = estPlaneArrivalUp.y() < hY;
145 << (below || above ?
" is outside the window" :
" is inside the window"));
◆ initialize()
StatusCode MuonR4::CombinatorialNSWSeedFinderAlg::initialize |
( |
| ) |
|
|
overridevirtual |
◆ inputHandles()
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()
◆ markHitsAsUsed()
That's ultra slow & should be revised
Definition at line 414 of file CombinatorialNSWSeedFinderAlg.cxx.
418 for (
const auto* sp :
seed.getHitsInMax()) {
420 for (std::size_t lIdx = 0; !
found && lIdx < allSortHits.size(); ++lIdx) {
421 const HitVec& hVec{allSortHits[lIdx]};
422 for (std::size_t hIdx = 0 ; hIdx < hVec.size(); ++hIdx) {
423 if (hVec[hIdx] == sp) {
424 usedHitMarker[lIdx][hIdx] =
true;
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ outputHandles()
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()
◆ renounceArray()
◆ setFilterPassed()
◆ sysExecute()
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.
◆ sysInitialize()
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.
110 if (
sc.isFailure()) {
118 if ( cs.retrieve().isFailure() ) {
120 return StatusCode::SUCCESS;
122 if (cs->regHandle(
this,*
h).isFailure()) {
123 sc = StatusCode::FAILURE;
124 ATH_MSG_ERROR(
"unable to register WriteCondHandle " <<
h->fullKey()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ updateVHKA()
◆ m_detStore
◆ m_etaKey
◆ m_evtStore
◆ m_extendedExtraObjects
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
◆ m_idHelperSvc
◆ m_minPullThreshold
DoubleProperty MuonR4::CombinatorialNSWSeedFinderAlg::m_minPullThreshold {this, "maxPull", 5.} |
|
private |
◆ m_varHandleArraysDeclared
◆ m_vhka
◆ m_visionTool
◆ m_windowTheta
DoubleProperty MuonR4::CombinatorialNSWSeedFinderAlg::m_windowTheta {this, "thetaWindow", 0.5 * Gaudi::Units::deg} |
|
private |
◆ m_writeKey
The documentation for this class was generated from the following files:
constexpr unsigned int minLayers
double stereoAngle() const
Returns the value of the stereo angle.
const SpectrometerSector * msSector() const
Returns the pointer to the envelope volume enclosing all chambers in the sector.
Identifier identify() const
Returns the global ATLAS identifier of the SimHit.
HitVec extendHits(const Amg::Vector3D &startPos, const Amg::Vector3D &direction, const HitLaySpan_t &extensionLayers, const UsedHitSpan_t &usedHits) const
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...
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.
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)
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool msgLvl(const MSG::Level lvl) const
@ Unknown
Ordinary eta strips.
#define ATH_MSG_VERBOSE(x)
ToolHandle< MuonValR4::IPatternVisualizationTool > m_visionTool
Pattern visualization tool.
StripOrient classifyStrip(const SpacePoint &spacePoint) const
Determines the orientation of the strip space point.
@ X
Stereo strips with negative angle.
std::unique_ptr< TLatex > drawLabel(const std::string &text, const double xPos, const double yPos, const unsigned int fontSize=18)
Create a TLatex label,.
@ inside
The hit is below the predefined corridor.
virtual void setOwner(IDataHandleHolder *o)=0
Amg::Vector3D extrapolateToPlane(const Amg::Vector3D &pos, const Amg::Vector3D &dir, const SpacePoint &hit)
Extrapolates the segment line onto the plane defined by the by the space-point's position & plane nor...
double houghTanPhi(const Amg::Vector3D &v)
: Returns the hough tanPhi [x] / [z]
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
std::vector< InitialSeed_t > InitialSeedVec_t
Vector of initial seeds.
virtual const DataObjIDColl & extraOutputDeps() const override
Return the list of extra output dependencies.
double chiSqTermStrip(const Amg::Vector3D &posInChamber, const Amg::Vector3D &dirInChamber, const SpacePoint &measurement, MsgStream &msg)
Calculates the chi2 contribuation to a linear segment line from an uncalibrated strip measurement.
SG::ReadHandleKey< ActsGeometryContext > m_geoCtxKey
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
int multilayer() const
Returns the multi layer of the element [1-2].
SpacePointPerLayerSplitter::HitLayVec HitLayVec
@ tooHigh
The hit is inside the defined window and hence an initial candidate.
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
::StatusCode StatusCode
StatusCode definition for legacy code.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Amg::Transform3D globalToLocalTrans(const ActsGeometryContext &gctx) const
Returns the global -> local transformation from the ATLAS global.
virtual StatusCode sysExecute(const EventContext &ctx) override
Execute an algorithm.
Eigen::Affine3d Transform3D
SG::WriteHandleKey< SegmentSeedContainer > m_writeKey
requires acceptedContainer< spacePointContainer > &&hasPointerValues< spacePointContainer > std::pair< Amg::Vector3D, Amg::Vector3D > seedSolution(const spacePointContainer &spacePoints, const std::array< double, 4 > ¶meters)
solves the equation system to calculate the seed
#define TEST_HIT_CORRIDOR(LAYER, HIT_ITER, START_LAYER)
Macro to check whether a hit is compatible with the hit corridor.
UsedHitMarker_t emptyBookKeeper(const HitLayVec &sortedSp) const
Constructs an empty HitMarker from the split space points.
ConstVectorMap< 3 > localDirection() const
Returns the local direction of the traversing particle.
std::vector< std::vector< char > > UsedHitMarker_t
Abbrivation of the container book keeping whether a hit is used or not.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Include the GeoPrimitives which need to be put first.
const StripDesign & design(bool phiView=false) const
Returns the underlying strip design.
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
const StripLayer & stripLayer(const Identifier &measId) const
std::vector< std::reference_wrapper< std::vector< char > >> UsedHitSpan_t
Abbrivation of the container to pass a subset of markers wtihout copy.
DoubleProperty m_windowTheta
@ V
Stereo strips with positive angle.
Eigen::Matrix< double, 3, 1 > Vector3D
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
SG::ReadHandleKey< EtaHoughMaxContainer > m_etaKey
StripOrient
Enumeration to classify the orientation of a NSW strip
Amg::Vector3D dirFromAngles(const double phi, const double theta)
Constructs a direction vector from the azimuthal & polar angles.
void markHitsAsUsed(const SegmentSeed &seed, const HitLayVec &allSortHits, UsedHitMarker_t &usedHitMarker) const
#define ATH_MSG_WARNING(x)
requires acceptedContainer< spacePointContainer > &&hasPointerValues< spacePointContainer > std::array< double, 4 > defineParameters(AmgSymMatrix(2) betaMatrix, const spacePointContainer &spacePoints)
calculates the parameters lamda,alpha,gamma,kappa of the system
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
SpacePointPerLayerSplitter::HitVec HitVec
ConstVectorMap< 3 > localPosition() const
Returns the local postion of the traversing particle.
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
const Amg::Transform3D & localToGlobalTrans(const ActsGeometryContext &ctx) const
Returns the local to global transformation into the ATLAS coordinate system.
const xAOD::MuonSimHit * getTruthMatchedHit(const xAOD::UncalibratedMeasurement &prdHit)
Returns the MuonSimHit, if there's any, matched to the uncalibrated muon measurement.
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
bool hasStereoAngle() const
Returns whether a stereo angle is defined.
DataVector< HoughMaximum > EtaHoughMaxContainer
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
const AmgSymMatrix(2) &SpacePoint
std::vector< std::reference_wrapper< const HitVec > > HitLaySpan_t
Abbrivation of the space comprising multiple hit vectors without copy.
double houghTanTheta(const Amg::Vector3D &v)
Returns the hough tanTheta [y] / [z].
std::vector< std::unique_ptr< SegmentSeed > > findSeedsFromMaximum(const HoughMaximum &max, const ActsGeometryContext &gctx) const
std::unordered_set< const xAOD::MuonSimHit * > getMatchingSimHits(const xAOD::MuonSegment &segment)
: Returns all sim hits matched to a xAOD::MuonSegment
DoubleProperty m_minPullThreshold