 |
ATLAS Offline Software
|
Implementation of an IMuonTrackFinder.
More...
#include <MuonTrackSteering.h>
|
std::unique_ptr< TrackCollection > | selectTracks (std::vector< std::unique_ptr< MuPatTrack >> &candidates, bool takeOwnership=true) const |
|
std::unique_ptr< TrackCollection > | findTracks (const EventContext &ctx, ChSegCol_t &chamberSegments, StSegCol_t &stationSegments) const |
| actual find method More...
|
|
bool | extractSegments (const EventContext &ctx, const MuonSegmentCollection &coll, ChSegCol_t &chamberSegments, StSegCol_t &stationSegments, ChSet &chambersWithSegments, StSet &stationsWithSegments, GarbageContainer &trash_bin) const |
|
StatusCode | decodeStrategyVector (const std::vector< std::string > &strategy) |
|
std::unique_ptr< const MuonTrackSteeringStrategy > | decodeStrategy (const std::string &strategy) const |
|
std::vector< std::unique_ptr< MuPatTrack > > | extendWithLayer (const EventContext &ctx, MuPatTrack &candidate, const SegColVec_t &segcol, unsigned int nextlayer, const unsigned int endlayer, int cutLevel=0) const |
|
std::vector< std::unique_ptr< MuPatTrack > > | findTrackFromSeed (const EventContext &ctx, MuPatSegment &seedSeg, const MuonTrackSteeringStrategy &strat, const unsigned int layer, const SegColVec_t &segs) const |
| Find tracks starting from a good segment. More...
|
|
void | refineTracks (const EventContext &ctx, std::vector< std::unique_ptr< MuPatTrack >> &candidates) const |
|
void | solveAmbiguities (std::vector< std::unique_ptr< MuPatTrack >> &tracks, const MuonTrackSteeringStrategy *strat=nullptr) const |
| Resolve ambiguities among tracks for a single strategy This allows a strategy-specific ambiguity solving (with some options per strategy) More...
|
|
void | combineOverlapSegments (const EventContext &ctx, std::vector< MuPatSegment * > &ch1, std::vector< MuPatSegment * > &ch2, StSegCol_t &stationSegments, StSet &stationsWithSegments, GarbageContainer &trash_bin) const |
|
|
static bool | decodeList (const std::string &input, std::vector< std::string > &list) |
|
|
ServiceHandle< IMuonEDMHelperSvc > | m_edmHelperSvc |
|
PublicToolHandle< MuonEDMPrinterTool > | m_printer {this, "MuonPrinterTool", "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"} |
|
ToolHandle< MuPatCandidateTool > | m_candidateTool {this, "MuPatCandidateTool", "Muon::MuPatCandidateTool/MuPatCandidateTool"} |
|
ToolHandle< IMuonTrackBuilder > | m_trackBTool {this, "TrackBuilderTool", "Muon::MooTrackBuilder/MooMuonTrackBuilder"} |
|
ToolHandle< Trk::ITrackAmbiguityProcessorTool > | m_ambiTool |
|
ToolHandle< MooTrackBuilder > | m_mooBTool {this, "MooBuilderTool", "Muon::MooTrackBuilder/MooMuonTrackBuilder"} |
|
ToolHandle< MooCandidateMatchingTool > | m_candidateMatchingTool |
|
ToolHandle< IMuonTrackRefiner > | m_trackRefineTool {this, "TrackRefinementTool", "Muon::MooTrackBuilder/MooMuonTrackBuilder"} |
|
ToolHandle< IMuonSegmentFittingTool > | m_segmentFitter |
|
ToolHandle< Muon::MuonTrackSelectorTool > | m_trackSelector |
|
ToolHandle< IMuonHoleRecoveryTool > | m_muonHoleRecoverTool |
|
ToolHandle< Trk::IExtendedTrackSummaryTool > | m_trackSummaryTool {this, "TrackSummaryTool", "MuonTrackSummaryTool"} |
|
std::vector< std::unique_ptr< const MuonTrackSteeringStrategy > > | m_strategies |
|
std::vector< std::string > | m_stringStrategies |
|
std::array< int, 3 > | m_segQCut {} |
| Required segment quality for seed, 2nd, and other segments. More...
|
|
bool | m_outputSingleStationTracks |
|
bool | m_combinedSLOverlaps |
|
bool | m_doSummary |
|
bool | m_useTightMatching |
|
bool | m_onlyMDTSeeding |
|
int | m_segThreshold |
|
Implementation of an IMuonTrackFinder.
For more details look at the mainpage of this package.
Definition at line 51 of file MuonTrackSteering.h.
◆ ChCit
◆ ChIt
◆ ChSegCol_t
Helper container to sort the segments by chamber index.
Definition at line 60 of file MuonTrackSteering.h.
◆ ChSet
◆ SegCol
◆ SegColIt
◆ SegColVec_t
◆ StCit
◆ StIt
◆ StSegCol_t
Helper container to sort the segments by station index.
Definition at line 58 of file MuonTrackSteering.h.
◆ StSet
◆ TrkCollVec
◆ TrkVec
◆ MuonTrackSteering()
Muon::MuonTrackSteering::MuonTrackSteering |
( |
const std::string & |
t, |
|
|
const std::string & |
n, |
|
|
const IInterface * |
p |
|
) |
| |
default AlgTool constructor
Definition at line 50 of file MuonTrackSteering.cxx.
53 declareProperty(
"StrategyList",
m_stringStrategies,
"List of strategies to be used by the track steering");
54 declareProperty(
"SegSeedQCut",
m_segQCut[0] = -2,
"Required quality for segments to be a seed");
55 declareProperty(
"Seg2ndQCut",
m_segQCut[1] = -2,
"Required quality for segments to be the second on a track");
56 declareProperty(
"SegOtherQCut",
m_segQCut[2] = -2,
"Required quality for segments to be added to a track");
◆ ~MuonTrackSteering()
virtual Muon::MuonTrackSteering::~MuonTrackSteering |
( |
| ) |
|
|
virtualdefault |
◆ combineOverlapSegments()
try to find small/large overlaps, insert segment into stationVec
Start with -1 as the first operation in the loop over the second set of chambers is the counter incrementation
Actually this should be always 1. What should it conceptionally reject? The angle between the combined segment and the segment from the first collection?
Definition at line 161 of file MuonTrackSteering.cxx.
167 if (ch1.empty() && ch2.empty())
return;
170 StIndex stIndex = !ch1.empty() ? ch1.front()->stIndex : ch2.front()->stIndex;
172 SegCol& stationVec = stationSegments[
toInt(stIndex)];
175 std::vector<bool> wasMatched2(ch2.size(),
false);
178 for (MuPatSegment* sit1 : ch1) {
180 int qualityLevel1 = ch1.size() > 5 ? 1 : 2;
181 if (sit1->quality < qualityLevel1) {
182 ATH_MSG_VERBOSE(
"resolveSLOverlaps::bad segment1 q: " << sit1->quality <<
" cut " << qualityLevel1 << std::endl
184 stationVec.push_back(sit1);
188 bool wasMatched1 =
false;
191 int qualityLevel2 = ch2.size() > 5 ? 1 : 2;
195 for (MuPatSegment* sit2 : ch2) {
198 if (sit2->quality < qualityLevel2) {
199 ATH_MSG_VERBOSE(
"resolveSLOverlaps::bad segment2: q " << sit2->quality <<
" cut " << qualityLevel2 << std::endl
203 if (sit1->quality < 2 && sit2->quality < 2) {
204 ATH_MSG_VERBOSE(
"resolveSLOverlaps:: combination of insufficient quality " << std::endl
205 <<
" q1 " << sit1->quality <<
" q2 "
211 <<
m_printer->print(*sit1->segment) << std::endl
215 ATH_MSG_VERBOSE(
" overlap combination rejected based on matching" << std::endl <<
m_printer->print(*sit2->segment));
221 std::unique_ptr<MuonSegment> newseg{
m_mooBTool->combineToSegment(ctx, *sit1, *sit2, emptyPhiHits)};
235 std::unique_ptr<MuPatSegment> segInfo =
m_candidateTool->createSegInfo(ctx, *newseg);
237 if (!segInfo || segInfo->quality < 2 || (segInfo->quality < sit1->quality || segInfo->quality < sit2->quality)) {
242 int shared_eta = 0, shared_phi = 0;
244 const MuPatSegment* const_sit1 = sit1;
245 const MuPatSegment* const_sit2 = sit2;
246 for (
const MuPatHitPtr& hit_ch1 : const_sit1->hitList()) {
247 for (
const MuPatHitPtr& hit_ch2 : const_sit2->hitList()) {
248 if (hit_ch1->info().id == hit_ch2->info().id) {
249 if (hit_ch1->info().measuresPhi)
257 if (sit1->etaHits().size() + sit2->etaHits().size() - shared_eta - segInfo->etaHits().size() > 1) {
258 ATH_MSG_VERBOSE(
"resolveSLOverlaps::more than one eta measurement removed, dropping track "
264 int phiHitDiff = sit1->phiHits().size() + sit2->phiHits().size() - shared_phi - segInfo->phiHits().size();
265 if (phiHitDiff > 1 || (sit1->phiHits().size() + sit2->phiHits().size() > 0 && segInfo->phiHits().empty())) {
266 ATH_MSG_VERBOSE(
"resolveSLOverlaps::more than one phi measurement removed, dropping track "
273 double cosPointingAngle = (newseg->globalPosition().x() * newseg->globalDirection().x() +
274 newseg->globalPosition().y() * newseg->globalDirection().y()) /
275 (newseg->globalPosition().perp() * newseg->globalDirection().perp());
276 if (cosPointingAngle < 0.995) {
277 ATH_MSG_VERBOSE(
"resolveSLOverlaps: rejected due to too large pointing angle " << std::endl
281 ATH_MSG_VERBOSE(
"created SL overlap segment: cos pointing " << cosPointingAngle << std::endl
286 wasMatched2[idx_ch2] =
true;
289 stationVec.push_back(segInfo.get());
290 trash_bin.push_back(std::move(newseg));
291 trash_bin.push_back(std::move(segInfo));
296 if (!wasMatched1) { stationVec.push_back(sit1); }
300 for (
unsigned int i = 0;
i < wasMatched2.size(); ++
i) {
301 if (!wasMatched2[
i]) { stationVec.push_back(ch2[
i]); }
305 if (!stationVec.empty()) { stationsWithSegments.insert(stIndex); }
308 std::stable_sort(stationVec.begin(), stationVec.end(), SortSegInfoByQuality());
◆ decodeList()
bool Muon::MuonTrackSteering::decodeList |
( |
const std::string & |
input, |
|
|
std::vector< std::string > & |
list |
|
) |
| |
|
staticprivate |
Definition at line 806 of file MuonTrackSteering.cxx.
808 std::string::size_type begIdx = 0;
809 std::string::size_type endIdx = 0;
811 endIdx =
input.find(
',', begIdx);
812 std::string::size_type lstIdx = endIdx;
813 if (std::string::npos == endIdx) { lstIdx =
input.length(); }
814 std::string
item =
input.substr(begIdx, lstIdx - begIdx);
817 }
while (std::string::npos != endIdx);
◆ decodeStrategy()
Definition at line 720 of file MuonTrackSteering.cxx.
721 const std::string delims(
" \t[],;");
728 std::vector<std::string>
options;
732 typedef std::vector<std::string> ChamberGroup;
733 std::vector<ChamberGroup> sequence;
736 bool success =
false;
737 std::unique_ptr<const MuonTrackSteeringStrategy>
result;
742 std::string::size_type begIdx, endIdx;
743 begIdx =
strategy.find_first_not_of(delims);
744 if (std::string::npos != begIdx) {
745 endIdx =
strategy.find(
':', begIdx);
746 if (std::string::npos != endIdx) {
748 std::string nameopt =
strategy.substr(begIdx, endIdx - begIdx);
749 std::string::size_type bi = nameopt.find(
'[');
750 if (std::string::npos != bi) {
751 name = nameopt.substr(0, bi);
754 std::string::size_type ei = nameopt.find(
']', bi);
755 if (std::string::npos == ei) { ei = nameopt.length(); }
756 std::string inputOpt = nameopt.substr(bi + 1, ei - bi - 1);
764 ATH_MSG_DEBUG(
"From strat: " <<
strategy <<
" with success " << success <<
" end " << endIdx <<
" beg " << begIdx
765 <<
" Name: " <<
name <<
" options: ");
773 endIdx =
strategy.find(
';', begIdx);
774 std::string::size_type lstIdx = endIdx;
775 if (std::string::npos == endIdx) { lstIdx =
strategy.length(); }
776 std::string grpString =
strategy.substr(begIdx, lstIdx - begIdx);
779 sequence.push_back(
group);
781 }
while (std::string::npos != endIdx && success);
785 std::vector<std::vector<ChIndex> >
path;
786 for (
unsigned int i = 0;
i < sequence.size(); ++
i) {
787 std::vector<ChIndex> idxGrp;
788 for (
unsigned int j = 0; j < sequence[
i].size(); ++j) {
790 if (ChIndex::ChUnknown ==
idx) {
793 idxGrp.push_back(
idx);
796 path.push_back(idxGrp);
◆ decodeStrategyVector()
StatusCode Muon::MuonTrackSteering::decodeStrategyVector |
( |
const std::vector< std::string > & |
strategy | ) |
|
|
private |
◆ extendWithLayer()
std::vector< std::unique_ptr< MuPatTrack > > Muon::MuonTrackSteering::extendWithLayer |
( |
const EventContext & |
ctx, |
|
|
MuPatTrack & |
candidate, |
|
|
const SegColVec_t & |
segcol, |
|
|
unsigned int |
nextlayer, |
|
|
const unsigned int |
endlayer, |
|
|
int |
cutLevel = 0 |
|
) |
| const |
|
private |
Definition at line 618 of file MuonTrackSteering.cxx.
621 std::vector<std::unique_ptr<MuPatTrack> >
result;
622 if (nextlayer < endlayer) {
623 for (; nextlayer != endlayer; nextlayer++) {
624 if (segs[nextlayer].
empty())
continue;
626 std::vector<std::unique_ptr<MuPatTrack> > nextTracks =
m_trackBTool->find(ctx, candidate, segs[nextlayer]);
627 if (!nextTracks.empty()) {
628 for (std::unique_ptr<MuPatTrack>& cit : nextTracks) {
629 std::vector<std::unique_ptr<MuPatTrack> > nextTracks2 =
631 if (!nextTracks2.empty()) {
632 result.insert(
result.end(), std::make_move_iterator(nextTracks2.begin()),
633 std::make_move_iterator(nextTracks2.end()));
635 result.push_back(std::move(cit));
◆ extractSegments()
Definition at line 102 of file MuonTrackSteering.cxx.
104 if (coll.empty())
return false;
116 StIndex stIndex = aSeg->stIndex;
117 if (
chIndex == ChIndex::ChUnknown || stIndex == StIndex::StUnknown) {
121 chambersWithSegments.insert(
chIndex);
122 stationsWithSegments.insert(stIndex);
124 std::vector<MuPatSegment*>& segments = chamberSegments[
toInt(
chIndex)];
125 segments.push_back(aSeg.get());
127 std::vector<MuPatSegment*>& segments2 = stationSegments[
toInt(stIndex)];
128 segments2.push_back(aSeg.get());
130 trash_bin.push_back(std::move(aSeg));
135 stationsWithSegments, trash_bin);
137 stationsWithSegments, trash_bin);
139 stationsWithSegments, trash_bin);
141 stationsWithSegments, trash_bin);
143 stationsWithSegments, trash_bin);
145 stationsWithSegments, trash_bin);
147 stationsWithSegments, trash_bin);
149 stationsWithSegments, trash_bin);
151 if (!segments.empty()) {
155 segs.insert(segs.end(), segments.begin(), segments.end());
◆ find()
find tracks starting from a MuonSegmentCollection
- Parameters
-
coll | a reference to a MuonSegmentCollection |
- Returns
- a pointer to a vector of tracks, the ownership of the tracks is passed to the client calling the tool.
Definition at line 84 of file MuonTrackSteering.cxx.
85 GarbageContainer trash_bin{};
86 trash_bin.reserve(150);
88 std::unique_ptr<TrackCollection>
result = std::make_unique<TrackCollection>();
92 ChSet chambersWithSegments;
93 StSet stationsWithSegments;
95 if (
extractSegments(ctx, coll, chamberSegments, stationSegments, chambersWithSegments, stationsWithSegments, trash_bin)) {
◆ findTrackFromSeed()
Find tracks starting from a good segment.
- Parameters
-
seedSeg | the seeding MuonSegment pointer |
strat | the current track finding strategy |
layer | the current layer for the seed |
Loop over layers following the seed layer
Definition at line 540 of file MuonTrackSteering.cxx.
544 std::vector<std::unique_ptr<MuPatTrack> >
result;
546 const unsigned int endLayer = strat.getAll().size();
548 for (
unsigned int ilayer = 0; ilayer < strat.getAll().
size(); ++ilayer) {
549 if (ilayer ==
layer)
continue;
551 if (segs[ilayer].
empty())
continue;
553 std::vector<MuPatSegment*> matchedSegs;
554 bool tightCuts =
false;
557 double phiSeed = (seedSeg.segment)->globalPosition().phi();
558 double etaSeed = (seedSeg.segment)->globalPosition().eta();
561 for (
unsigned int j = 0; j < segs[ilayer].size(); j++) {
562 double phiSeg = (*segs[ilayer][j]).
segment->globalPosition().phi();
563 double etaSeg = (*segs[ilayer][j]).
segment->globalPosition().eta();
566 double deltaEta = std::abs(etaSeed - etaSeg);
569 if (
deltaR < 0.35) segsInCone++;
573 for (
unsigned int j = 0; j < segs[ilayer].size(); ++j) {
576 if (
isMatched) matchedSegs.push_back(segs[ilayer][j]);
578 if (matchedSegs.empty())
continue;
583 std::vector<std::unique_ptr<MuPatTrack> > tracks;
588 tracks =
m_trackBTool->find(ctx, seedSeg, segs[ilayer]);
589 if (!tracks.empty()) {
591 if (ilayer + 1 == strat.getAll().size()) {
592 result.insert(
result.end(), std::make_move_iterator(tracks.begin()), std::make_move_iterator(tracks.end()));
597 for (std::unique_ptr<MuPatTrack>& cit : tracks) {
598 unsigned int nextLayer = ilayer + 1;
599 if (nextLayer < strat.getAll().size()) {
600 int cutLevel = tightCuts ? 1 : 0;
601 std::vector<std::unique_ptr<MuPatTrack> > nextTracks =
603 if (!nextTracks.empty()) {
604 result.insert(
result.end(), std::make_move_iterator(nextTracks.begin()),
605 std::make_move_iterator(nextTracks.end()));
607 result.push_back(std::move(cit));
614 ATH_MSG_DEBUG(
"Constructed " <<
result.size() <<
" tracks with strategy " << strat.getName());
◆ findTracks()
actual find method
Definition at line 313 of file MuonTrackSteering.cxx.
318 std::vector<std::unique_ptr<MuPatTrack> > resultAll;
326 std::vector<std::unique_ptr<MuPatTrack> >
result;
333 std::set<StIndex> stations;
335 for (
unsigned int lit = 0; lit <
strategy.getAll().
size(); ++lit) {
336 std::vector<ChIndex> chambers =
strategy.getCh(lit);
341 for (
unsigned int chin = 0; chin < chambers.size(); ++chin) {
346 if (stations.count(stIndex))
continue;
347 SegCol& segments = stationSegments[
toInt(stIndex)];
353 for (
unsigned int iseg = 0; iseg < segments.size(); iseg++) {
354 double thetaSeg = std::abs((*segments[iseg]).
segment->globalPosition().theta());
357 if ((0.74159 > thetaSeg && thetaSeg > 0.51159) || (2.63 > thetaSeg && thetaSeg > 2.40))
358 mySegColVec[lit].push_back(segments[iseg]);
361 mySegColVec[lit].insert(mySegColVec[lit].
end(), segments.begin(), segments.end());
364 stations.insert(stIndex);
369 for (
unsigned int chin = 0; chin < chambers.size(); ++chin) {
370 SegCol& segments = chamberSegments[
toInt(chambers[chin])];
372 mySegColVec[lit].insert(mySegColVec[lit].
end(), segments.begin(), segments.end());
379 for (
unsigned int lit = 0; lit < mySegColVec.size(); ++lit) {
384 bool hasSegments =
false;
385 for (
unsigned int lit = 0; lit < mySegColVec.size(); ++lit) {
386 if (!mySegColVec[lit].
empty()) {
393 for (
unsigned int lit = 0; lit < mySegColVec.size(); ++lit)
394 for (
unsigned int sit = 0; sit < mySegColVec[lit].size(); ++sit)
405 std::vector<unsigned int> seeds;
410 std::vector<std::pair<int, unsigned int> > occupancy;
411 for (
unsigned int lit = 0; lit < mySegColVec.size(); ++lit) {
412 occupancy.emplace_back(mySegColVec[lit].
size(), lit);
415 for (
unsigned int lit = 0; lit < occupancy.size(); ++lit) { seeds.push_back(occupancy[lit].
second); }
419 for (
unsigned int j = 0; j < mySegColVec.size(); ++j) seeds.push_back(j);
424 MuPatSegment* seedSeg =
nullptr;
426 for (
unsigned int lin = 0; lin < seeds.size(); ++lin) {
428 ATH_MSG_VERBOSE(
"New seed layer " << lin <<
" segments in layer " << mySegColVec[lin].
size());
430 for (
unsigned int sin = 0;
sin < mySegColVec[lin].size();
sin++) {
431 seedSeg = mySegColVec[lin].operator[](
sin);
432 if (!seedSeg)
continue;
435 if (cutSeeds && seedSeg->usedInFit)
continue;
439 (
m_segQCut[0] == -99 && !(seedSeg->segQuality && seedSeg->segQuality->isStrict())))
444 double phiSeed = seedSeg->segment->globalPosition().phi();
445 double etaSeed = seedSeg->segment->globalPosition().eta();
446 for (
unsigned int sin2 = 0; sin2 < mySegColVec[lin].size(); sin2++) {
447 if (
sin == sin2)
continue;
448 MuPatSegment* seg = mySegColVec[lin].operator[](sin2);
450 if (seg->quality <
m_segQCut[0] || (
m_segQCut[0] == -99 && !(seg->segQuality && seg->segQuality->isStrict())))
453 double phiSeg = seg->segment->globalPosition().phi();
454 double etaSeg = seg->segment->globalPosition().eta();
457 double deltaEta = std::abs(etaSeed - etaSeg);
460 if (
deltaR < 0.35) segsInCone++;
466 std::vector<std::unique_ptr<MuPatTrack> >
found =
470 if (!
found.empty()) {
471 result.insert(
result.end(), std::make_move_iterator(
found.begin()), std::make_move_iterator(
found.end()));
488 resultAll.insert(resultAll.end(), std::make_move_iterator(
result.begin()), std::make_move_iterator(
result.end()));
497 if (!emSegments.empty()) {
498 for (MuPatSegment* sit : emSegments) {
500 if (!sit->tracks().empty())
continue;
503 if (sit->quality < 2)
continue;
506 std::unique_ptr<Trk::Track> segmentTrack(
m_segmentFitter->fit(*sit->segment));
510 if (recoveredTrack) segmentTrack.swap(recoveredTrack);
517 std::unique_ptr<MuPatTrack>
can =
m_candidateTool->createCandidate(*sit, segmentTrack);
519 resultAll.push_back(std::move(
can));
528 if (!resultAll.empty()) {
534 std::unique_ptr<TrackCollection> finalTrack =
nullptr;
535 if (!resultAll.empty()) { finalTrack =
selectTracks(resultAll); }
◆ initialize()
StatusCode Muon::MuonTrackSteering::initialize |
( |
| ) |
|
|
overridevirtual |
initialize method, method taken from bass-class AlgTool
Definition at line 64 of file MuonTrackSteering.cxx.
81 return StatusCode::SUCCESS;
◆ refineTracks()
void Muon::MuonTrackSteering::refineTracks |
( |
const EventContext & |
ctx, |
|
|
std::vector< std::unique_ptr< MuPatTrack >> & |
candidates |
|
) |
| const |
|
private |
◆ selectTracks()
std::unique_ptr< TrackCollection > Muon::MuonTrackSteering::selectTracks |
( |
std::vector< std::unique_ptr< MuPatTrack >> & |
candidates, |
|
|
bool |
takeOwnership = true |
|
) |
| const |
|
private |
◆ solveAmbiguities()
Resolve ambiguities among tracks for a single strategy This allows a strategy-specific ambiguity solving (with some options per strategy)
- Parameters
-
vector | of tracks that were found |
strat | the steering strategy |
Definition at line 672 of file MuonTrackSteering.cxx.
675 std::unique_ptr<TrackCollection> trkColl(
selectTracks(tracks,
false));
676 if (!trkColl || trkColl->empty()) {
return; }
678 std::unique_ptr<const TrackCollection> resolvedTracks(
m_ambiTool->process(trkColl.get()));
679 if (!resolvedTracks) {
return; }
681 ATH_MSG_DEBUG(
" resolved track candidates: old size " << trkColl->size() <<
" new size " << resolvedTracks->size());
683 std::vector<std::unique_ptr<MuPatTrack> >
::iterator pat = tracks.begin();
684 for (;
pat != tracks.end();) {
686 for (
const Trk::Track* rtrk : *resolvedTracks) {
687 if (&(*pat)->track() == rtrk) {
◆ m_ambiTool
Initial value:{this, "AmbiguityTool",
"Trk::TrackSelectionProcessorTool/MuonAmbiProcessor"}
Definition at line 137 of file MuonTrackSteering.h.
◆ m_candidateMatchingTool
Initial value:{this, "CandidateMatchingTool",
"Muon::MooCandidateMatchingTool/MooCandidateMatchingTool"}
Definition at line 140 of file MuonTrackSteering.h.
◆ m_candidateTool
◆ m_combinedSLOverlaps
bool Muon::MuonTrackSteering::m_combinedSLOverlaps |
|
private |
◆ m_doSummary
bool Muon::MuonTrackSteering::m_doSummary |
|
private |
◆ m_edmHelperSvc
Initial value:{this, "edmHelper", "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
"Handle to the service providing the IMuonEDMHelperSvc interface"}
Definition at line 132 of file MuonTrackSteering.h.
◆ m_mooBTool
◆ m_muonHoleRecoverTool
Initial value:{this, "HoleRecoveryTool",
"Muon::MuonChamberHoleRecoveryTool/MuonChamberHoleRecoveryTool"}
Definition at line 147 of file MuonTrackSteering.h.
◆ m_onlyMDTSeeding
bool Muon::MuonTrackSteering::m_onlyMDTSeeding |
|
private |
◆ m_outputSingleStationTracks
bool Muon::MuonTrackSteering::m_outputSingleStationTracks |
|
private |
◆ m_printer
◆ m_segmentFitter
Initial value:{this, "MuonSegmentFittingTool",
"Muon::MuonSegmentFittingTool/MuonSegmentFittingTool"}
Definition at line 143 of file MuonTrackSteering.h.
◆ m_segQCut
std::array<int, 3> Muon::MuonTrackSteering::m_segQCut {} |
|
private |
Required segment quality for seed, 2nd, and other segments.
Definition at line 154 of file MuonTrackSteering.h.
◆ m_segThreshold
int Muon::MuonTrackSteering::m_segThreshold |
|
private |
◆ m_strategies
◆ m_stringStrategies
std::vector<std::string> Muon::MuonTrackSteering::m_stringStrategies |
|
private |
◆ m_trackBTool
◆ m_trackRefineTool
◆ m_trackSelector
Initial value:{this, "MuonTrackSelector",
"Muon::MuonTrackSelectorTool/MuonTrackSelectorTool"}
Definition at line 145 of file MuonTrackSteering.h.
◆ m_trackSummaryTool
◆ m_useTightMatching
bool Muon::MuonTrackSteering::m_useTightMatching |
|
private |
The documentation for this class was generated from the following files:
JetConstituentVector::iterator iterator
std::array< int, 3 > m_segQCut
Required segment quality for seed, 2nd, and other segments.
std::vector< MuPatSegment * > SegCol
static bool decodeList(const std::string &input, std::vector< std::string > &list)
path
python interpreter configuration --------------------------------------—
std::unique_ptr< TrackCollection > findTracks(const EventContext &ctx, ChSegCol_t &chamberSegments, StSegCol_t &stationSegments) const
actual find method
void refineTracks(const EventContext &ctx, std::vector< std::unique_ptr< MuPatTrack >> &candidates) const
std::unique_ptr< const MuonTrackSteeringStrategy > decodeStrategy(const std::string &strategy) const
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
PublicToolHandle< MuonEDMPrinterTool > m_printer
bool isMatched(int matchInfo)
#define ATH_MSG_VERBOSE(x)
MuonSegment_v1 MuonSegment
Reference the current persistent version:
std::vector< std::unique_ptr< MuPatTrack > > extendWithLayer(const EventContext &ctx, MuPatTrack &candidate, const SegColVec_t &segcol, unsigned int nextlayer, const unsigned int endlayer, int cutLevel=0) const
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
void stable_sort(std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, std::reverse_iterator< DataModel_detail::iterator< DVL > > end, Compare comp)
Specialization of stable_sort for DataVector/List.
bool m_outputSingleStationTracks
void combineOverlapSegments(const EventContext &ctx, std::vector< MuPatSegment * > &ch1, std::vector< MuPatSegment * > &ch2, StSegCol_t &stationSegments, StSet &stationsWithSegments, GarbageContainer &trash_bin) const
bool m_combinedSLOverlaps
std::vector< std::unique_ptr< MuPatTrack > > findTrackFromSeed(const EventContext &ctx, MuPatSegment &seedSeg, const MuonTrackSteeringStrategy &strat, const unsigned int layer, const SegColVec_t &segs) const
Find tracks starting from a good segment.
StIndex toStationIndex(ChIndex index)
convert ChIndex into StIndex
double deltaEta(const I4Momentum &p1, const I4Momentum &p2)
Computes efficiently .
ChIndex chIndex(const std::string &index)
convert ChIndex name string to enum
ToolHandle< Muon::MuonTrackSelectorTool > m_trackSelector
std::set< MuonStationIndex::StIndex > StSet
std::vector< std::unique_ptr< const MuonTrackSteeringStrategy > > m_strategies
ServiceHandle< IMuonEDMHelperSvc > m_edmHelperSvc
std::set< MuonStationIndex::ChIndex > ChSet
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
ToolHandle< IMuonSegmentFittingTool > m_segmentFitter
std::shared_ptr< MuPatHit > MuPatHitPtr
ToolHandle< IMuonTrackRefiner > m_trackRefineTool
ToolHandle< IMuonHoleRecoveryTool > m_muonHoleRecoverTool
StatusCode decodeStrategyVector(const std::vector< std::string > &strategy)
ToolHandle< MooTrackBuilder > m_mooBTool
ToolHandle< MuPatCandidateTool > m_candidateTool
std::unique_ptr< TrackCollection > selectTracks(std::vector< std::unique_ptr< MuPatTrack >> &candidates, bool takeOwnership=true) const
constexpr int toInt(const ParamDefs p)
ToolHandle< MooCandidateMatchingTool > m_candidateMatchingTool
void solveAmbiguities(std::vector< std::unique_ptr< MuPatTrack >> &tracks, const MuonTrackSteeringStrategy *strat=nullptr) const
Resolve ambiguities among tracks for a single strategy This allows a strategy-specific ambiguity solv...
bool empty() const noexcept
#define ATH_MSG_WARNING(x)
MuonStationIndex::StIndex StIndex
std::vector< std::string > m_stringStrategies
bool extractSegments(const EventContext &ctx, const MuonSegmentCollection &coll, ChSegCol_t &chamberSegments, StSegCol_t &stationSegments, ChSet &chambersWithSegments, StSet &stationsWithSegments, GarbageContainer &trash_bin) const
double chiSquared() const
returns the of the overall track fit
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
ChIndex
enum to classify the different chamber layers in the muon spectrometer
ToolHandle< IMuonTrackBuilder > m_trackBTool
std::vector< const Trk::PrepRawData * > PrepVec
ToolHandle< Trk::ITrackAmbiguityProcessorTool > m_ambiTool
Muon::NSW_PadTriggerSegment segment(const NSWL1::PadTrigger &data)
std::vector< SegCol > SegColVec_t
std::array< SegCol, MuonStationIndex::toInt(MuonStationIndex::ChIndex::ChIndexMax)> ChSegCol_t
Helper container to sort the segments by chamber index.
std::array< SegCol, MuonStationIndex::toInt(MuonStationIndex::StIndex::StIndexMax)> StSegCol_t
Helper container to sort the segments by station index.