![]() |
ATLAS Offline Software
|
Helper class to generate valid seeds for the segment fit. More...
#include <MdtSegmentSeedGenerator.h>
Classes | |
| struct | Config |
| Configuration switches of the module More... | |
| struct | DriftCircleSeed |
| Helper struct from a generated Mdt seed. More... | |
| struct | SeedSolution |
| Cache of all solutions seen thus far. More... | |
Public Types | |
| using | LineSeeder_t = Acts::Experimental::CompositeSpacePointLineSeeder |
| using | HitVec = SpacePointPerLayerSplitter::HitVec |
Public Member Functions | |
| MdtSegmentSeedGenerator (const std::string &name, const SegmentSeed *segmentSeed, const Config &configuration) | |
| Standard constructor taking the segmentSeed to start with and then few configuration tunes. More... | |
| ~MdtSegmentSeedGenerator () | |
| std::optional< DriftCircleSeed > | nextSeed (const EventContext &ctx) |
| returns the next seed in the row More... | |
| unsigned int | numGenerated () const |
| Returns how many seeds have been generated. More... | |
| const Config & | config () const |
| Returns the current seed configuration. More... | |
| bool | msgLvl (const MSG::Level lvl) const |
| Test the output level. More... | |
| MsgStream & | msg () const |
| The standard message stream. More... | |
| MsgStream & | msg (const MSG::Level lvl) const |
| The standard message stream. More... | |
| void | setLevel (MSG::Level lvl) |
| Change the current logging level. More... | |
Private Types | |
| using | TangentLine = LineSeeder_t::TwoCircleTangentPars |
| using | TangentAmbi = LineSeeder_t::TangentAmbi |
Private Member Functions | |
| bool | isValidLine (const TangentLine &solution) const |
| Checks whether the intercept and the angle are witihn the allowed ranges. More... | |
| Line_t::ParamVector | constructLinePars (const double theta, const double y0) const |
| Construct the 3D-Line parameters from the estimates theta & y0 from the tangent line. More... | |
| std::optional< DriftCircleSeed > | buildSeed (const EventContext &ctx, const HoughHitType &topHit, const HoughHitType &bottomHit, const TangentAmbi ambi) |
| Tries to build the seed from the two hits. More... | |
| void | moveToNextCandidate () |
| Prepares the generator to generate the seed from the next pair of drift circles. More... | |
| void | initMessaging () const |
| Initialize our message level and MessageSvc. More... | |
Static Private Member Functions | |
| static SeedingAux::Config | translate (const Config &cfg) |
| Translate the SeedGenerator config to a Seed auxillary config. More... | |
Private Attributes | |
| Config | m_cfg {} |
| Line_t | m_line {} |
| Line to instantiate the seed parameters. More... | |
| const SegmentSeed * | m_segmentSeed {nullptr} |
| SpacePointPerLayerSplitter | m_hitLayers {m_segmentSeed->getHitsInMax()} |
| std::size_t | m_upperLayer {0} |
| Considered layer to pick the top drift circle from. More... | |
| std::size_t | m_lowerLayer {0} |
| Considered layer to pick the bottom drift circle from. More... | |
| std::size_t | m_lowerHitIndex {0} |
| Explicit hit to pick in the selected bottom layer. More... | |
| std::size_t | m_upperHitIndex {0} |
| Explicit hit to pick in the selected top layer. More... | |
| std::size_t | m_signComboIndex {0} |
| Index of the left-right ambiguity between the circles. More... | |
| std::vector< SeedSolution > | m_seenSolutions {} |
| Vector caching equivalent solutions to avoid double seeding. More... | |
| unsigned int | m_nGenSeeds {0} |
| Counter on how many seeds have been generated. More... | |
| std::string | m_nm |
| Message source name. More... | |
| boost::thread_specific_ptr< MsgStream > | m_msg_tls |
| MsgStream instance (a std::cout like with print-out levels) More... | |
| std::atomic< IMessageSvc * > | m_imsg { nullptr } |
| MessageSvc pointer. More... | |
| std::atomic< MSG::Level > | m_lvl { MSG::NIL } |
| Current logging level. More... | |
| std::atomic_flag m_initialized | ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT |
| Messaging initialized (initMessaging) More... | |
Static Private Attributes | |
| static constexpr std::array< TangentAmbi, 4 > | s_signCombos |
Helper class to generate valid seeds for the segment fit.
The generator first returns a seed directly made from the patten recogntion. Afterwards it builds seeds by lying tangent lines to a pair of drift circles. The pairing starts from the innermost & outermost layers with tubes. A valid seed must have at least 4 associated hits which are within a chi2 of 5. If two seeds within the parameter resolution are generated, then the latter one is skipped.
Definition at line 27 of file MdtSegmentSeedGenerator.h.
Definition at line 30 of file MdtSegmentSeedGenerator.h.
| using MuonR4::SegmentFit::MdtSegmentSeedGenerator::LineSeeder_t = Acts::Experimental::CompositeSpacePointLineSeeder |
Definition at line 29 of file MdtSegmentSeedGenerator.h.
|
private |
Definition at line 97 of file MdtSegmentSeedGenerator.h.
|
private |
Definition at line 96 of file MdtSegmentSeedGenerator.h.
| MuonR4::SegmentFit::MdtSegmentSeedGenerator::MdtSegmentSeedGenerator | ( | const std::string & | name, |
| const SegmentSeed * | segmentSeed, | ||
| const Config & | configuration | ||
| ) |
Standard constructor taking the segmentSeed to start with and then few configuration tunes.
| name | Name of the Seed generator's logger |
| segmentSeed | Seed from which the seeds for the fit are built |
| configuration | Passed configuration settings of the generator |
Check whether the first layer is too busy
Check whether the lower layer is too busy
Definition at line 63 of file MdtSegmentSeedGenerator.cxx.
|
default |
|
private |
Tries to build the seed from the two hits.
Fails if the solution is invalid or if the seed has already been built before
| topHit | Hit candidate from the upper layer |
| bottomHit | Hit candidate from the lower layer |
| sign | Object encoding whether the tangent is left / right |
If there's an estimate on the time of arrival use it
Create a new line position & direction which also takes the potential phi estimates into account
Collect all hits close to the seed line
what ever comes after is not matching onto the segment
Reject seeds with too litle Mdt hit association
Last check wheather another seed with the same left-right combination hasn't already been found
All seed hits are of the same size
Including the places where no seed hit was assigned. Both solutions match in terms of left-right solutions. It's very likely that they're converging to the same segment.
Calibrate the seed hits
Add the solution to the list. That we don't iterate twice over it
If we found a long Mdt seed, then ensure that all subsequent seeds have at least the same amount of Mdt hits.
Associate strip hits
Definition at line 269 of file MdtSegmentSeedGenerator.cxx.
| const MdtSegmentSeedGenerator::Config & MuonR4::SegmentFit::MdtSegmentSeedGenerator::config | ( | ) | const |
Returns the current seed configuration.
Definition at line 58 of file MdtSegmentSeedGenerator.cxx.
|
private |
Construct the 3D-Line parameters from the estimates theta & y0 from the tangent line.
| theta | Tangent line theta in the y-z plane |
| y0 | Y intercept at z=0 |
Definition at line 233 of file MdtSegmentSeedGenerator.cxx.
|
privateinherited |
Initialize our message level and MessageSvc.
This method should only be called once.
Definition at line 39 of file AthMessaging.cxx.
|
private |
Checks whether the intercept and the angle are witihn the allowed ranges.
| solution | Reference to the tangent line solution to check |
Definition at line 248 of file MdtSegmentSeedGenerator.cxx.
|
inlineprivate |
Prepares the generator to generate the seed from the next pair of drift circles.
Vary the left-right solutions
Move to the next hit in the lower layer
Ensure that the first hit in the lower layer is good for seeding
--> So we can update to the next hit in the upper layer
All combinations of hits & lines in both layers are processed Switch to the next lowerLayer. But skip the busy ones according to the configuration
The layer has ineed a good hit
Abort the loop if we parsed the multi-layer boundary
Go to the first lower layer
But search at least the first valid hit there
The layer has ineed a good hit
Definition at line 123 of file MdtSegmentSeedGenerator.cxx.
|
inlineinherited |
The standard message stream.
Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.
Definition at line 164 of file AthMessaging.h.
|
inlineinherited |
The standard message stream.
Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.
Definition at line 179 of file AthMessaging.h.
|
inlineinherited |
Test the output level.
| lvl | The message level to test against |
| true | Messages at level "lvl" will be printed |
Definition at line 151 of file AthMessaging.h.
| std::optional< MdtSegmentSeedGenerator::DriftCircleSeed > MuonR4::SegmentFit::MdtSegmentSeedGenerator::nextSeed | ( | const EventContext & | ctx | ) |
returns the next seed in the row
Increment for the next candidate
If a candidate is built return it. Otherwise continue the process
Definition at line 190 of file MdtSegmentSeedGenerator.cxx.
| unsigned int MuonR4::SegmentFit::MdtSegmentSeedGenerator::numGenerated | ( | ) | const |
Returns how many seeds have been generated.
Definition at line 120 of file MdtSegmentSeedGenerator.cxx.
|
inherited |
Change the current logging level.
Use this rather than msg().setLevel() for proper operation with MT.
Definition at line 28 of file AthMessaging.cxx.
|
staticprivate |
Translate the SeedGenerator config to a Seed auxillary config.
|
mutableprivateinherited |
Messaging initialized (initMessaging)
Definition at line 141 of file AthMessaging.h.
|
private |
Definition at line 134 of file MdtSegmentSeedGenerator.h.
|
private |
Definition at line 139 of file MdtSegmentSeedGenerator.h.
|
mutableprivateinherited |
MessageSvc pointer.
Definition at line 135 of file AthMessaging.h.
|
private |
Line to instantiate the seed parameters.
Definition at line 137 of file MdtSegmentSeedGenerator.h.
|
private |
Explicit hit to pick in the selected bottom layer.
Definition at line 146 of file MdtSegmentSeedGenerator.h.
|
private |
Considered layer to pick the bottom drift circle from.
Definition at line 144 of file MdtSegmentSeedGenerator.h.
|
mutableprivateinherited |
Current logging level.
Definition at line 138 of file AthMessaging.h.
|
mutableprivateinherited |
MsgStream instance (a std::cout like with print-out levels)
Definition at line 132 of file AthMessaging.h.
|
private |
Counter on how many seeds have been generated.
Definition at line 154 of file MdtSegmentSeedGenerator.h.
|
privateinherited |
Message source name.
Definition at line 129 of file AthMessaging.h.
|
private |
Vector caching equivalent solutions to avoid double seeding.
Definition at line 152 of file MdtSegmentSeedGenerator.h.
|
private |
Definition at line 138 of file MdtSegmentSeedGenerator.h.
|
private |
Index of the left-right ambiguity between the circles.
Definition at line 150 of file MdtSegmentSeedGenerator.h.
|
private |
Explicit hit to pick in the selected top layer.
Definition at line 148 of file MdtSegmentSeedGenerator.h.
|
private |
Considered layer to pick the top drift circle from.
Definition at line 142 of file MdtSegmentSeedGenerator.h.
|
staticconstexprprivate |
Definition at line 98 of file MdtSegmentSeedGenerator.h.
1.8.18