![Logo](../../ATLAS-Logo-Square-Blue-RGB.png) |
ATLAS Offline Software
|
#include <MuonCombinedFitTagTool.h>
|
| MuonCombinedFitTagTool (const std::string &type, const std::string &name, const IInterface *parent) |
|
virtual | ~MuonCombinedFitTagTool ()=default |
|
virtual StatusCode | initialize () override |
|
virtual void | combine (const MuonCandidate &muonCandidate, const std::vector< const InDetCandidate * > &indetCandidates, InDetCandidateToTagMap &tagMap, TrackCollection *combTracks, TrackCollection *METracks, const EventContext &ctx) const override |
| IMuonCombinedTagTool interface: build combined muons from a muon and a vector of indet candidates. More...
|
|
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 | sysInitialize () override |
| Perform system initialization for an algorithm. More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
std::unique_ptr< Trk::Track > | buildCombinedTrack (const EventContext &ctx, const Trk::Track &indetTrack, const Trk::Track &spectrometerTrack, const Trk::Track *extrapolatedTrack) const |
|
bool | combinedTrackQualityCheck (const EventContext &ctx, const Trk::Track &combinedTrack, const Trk::Track &indetTrack) const |
|
std::unique_ptr< Trk::Track > | evaluateMatchProperties (const EventContext &ctx, const Trk::Track *combinedTrack, CombinedFitTag &tag, const xAOD::TrackParticle &idTrackParticle) const |
|
bool | extrapolatedNeedsRefit (const EventContext &ctx, const Trk::Track &combTrack, const Trk::Track *extrTrack) const |
|
bool | bestMatchChooser (const InDetCandidate &curCandidate, const CombinedFitTag &curTag, const Trk::Track &curTrack, const Trk::Track *curMETrack, const InDetCandidate &bestCandidate, const CombinedFitTag &bestTag, const Trk::Track &bestTrack, const Trk::Track *bestMETrack) const |
|
void | dumpCaloEloss (const EventContext &ctx, const Trk::Track *track, const std::string &txt) const |
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &) |
| specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
|
|
|
ServiceHandle< Muon::IMuonIdHelperSvc > | m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"} |
|
ToolHandle< Muon::MuonEDMPrinterTool > | m_printer {this, "Printer", "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"} |
|
ToolHandle< Rec::ICombinedMuonTrackBuilder > | m_trackBuilder {this, "TrackBuilder", ""} |
|
ToolHandle< Rec::ICombinedMuonTrackBuilder > | m_outwardsBuilder {this, "OutwardsTrackBuilder", ""} |
|
ToolHandle< Rec::IMuonTrackQuery > | m_trackQuery {this, "TrackQuery", "Rec::MuonTrackQuery/MuonTrackQuery"} |
|
ToolHandle< Rec::IMuonMomentumBalanceSignificance > | m_momentumBalanceTool |
|
ToolHandle< Rec::IMuidMuonRecovery > | m_muonRecovery {this, "MuonRecovery", ""} |
|
ToolHandle< Rec::IMuonMatchQuality > | m_matchQuality {this, "MatchQuality", "Rec::MuonMatchQuality/MuonMatchQuality"} |
|
ToolHandle< Trk::ITrackScoringTool > | m_trackScoringTool {this, "TrackScoringTool", "Muon::MuonTrackScoringTool/MuonTrackScoringTool"} |
|
Gaudi::Property< double > | m_badFitChi2 {this, "BadFitChi2", 2.5} |
|
Gaudi::Property< double > | m_momentumBalanceCut {this, "MomentumBalanceCut", 6} |
|
Gaudi::Property< double > | m_indetPullCut {this, "IndetPullCut", 6} |
|
Gaudi::Property< double > | m_matchChiSquaredCut {this, "MatchChiSquaredCut", 30} |
|
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > | m_fieldCacheCondObjInputKey |
|
SG::ReadHandleKey< xAOD::VertexContainer > | m_vertexKey {this, "VertexContainer", "PrimaryVertices", "primary vertex container"} |
|
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 |
|
Definition at line 36 of file MuonCombinedFitTagTool.h.
◆ StoreGateSvc_t
◆ MuonCombinedFitTagTool()
MuonCombined::MuonCombinedFitTagTool::MuonCombinedFitTagTool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ ~MuonCombinedFitTagTool()
virtual MuonCombined::MuonCombinedFitTagTool::~MuonCombinedFitTagTool |
( |
| ) |
|
|
virtualdefault |
◆ bestMatchChooser()
Definition at line 530 of file MuonCombinedFitTagTool.cxx.
537 const Trk::Track* curExtrTrack = curMETrack ? curMETrack : curTag.muonCandidate().extrapolatedTrack();
538 const Trk::Track* bestExtrTrack = bestMETrack ? bestMETrack : bestTag.muonCandidate().extrapolatedTrack();
544 const double matchChiSq1 = curTag.matchChi2();
545 const double matchChiSq2 = bestTag.matchChi2();
548 ATH_MSG_VERBOSE(
"bestMatchChooser: matchChiSq " << matchChiSq1 <<
" " << matchChiSq2);
549 if (summary1 && summary2) {
550 ATH_MSG_VERBOSE(
"bestMatchChooser: matchChiSq " << matchChiSq1 <<
" " << matchChiSq2 <<
" numTRTHits "
553 << curTag.fieldIntegral().betweenInDetMeasurements() <<
" "
554 << bestTag.fieldIntegral().betweenInDetMeasurements() <<
" MS "
555 << curTag.fieldIntegral().betweenSpectrometerMeasurements() <<
" "
556 << bestTag.fieldIntegral().betweenSpectrometerMeasurements());
558 ATH_MSG_VERBOSE(
"bestMatchChooser: matchChiSq " << matchChiSq1 <<
" " << matchChiSq2);
566 ATH_MSG_VERBOSE(
"bestMatchChooser: fitChiSq " << fitChiSq1 <<
" " << fitChiSq2);
570 ATH_MSG_DEBUG(
"bestMatchChooser: choose worse, but acceptable, matchChiSq as better fitChiSq. "
571 <<
" matchChiSq 1,2 " << matchChiSq1 <<
", " << matchChiSq2 <<
" fitChiSq/DoF 1,2 " << fitChiSq1
572 <<
"/" << numberDoF1 <<
", " << fitChiSq2 <<
"/" << numberDoF2);
578 ATH_MSG_DEBUG(
"bestMatchChooser: choose worse, but acceptable, matchChiSq as better fitChiSq. "
579 <<
" matchChiSq 1,2 " << matchChiSq1 <<
", " << matchChiSq2 <<
" fitChiSq/DoF 1,2 " << fitChiSq1
580 <<
"/" << numberDoF1 <<
", " << fitChiSq2 <<
"/" << numberDoF2);
601 double cutRatio{1.5}, integral1{0.}, integral2{0.};
606 ATH_MSG_VERBOSE(
"bestMatchChooser: momentumBalanceSignificance " << curTag.momentumBalanceSignificance() <<
" "
607 << bestTag.momentumBalanceSignificance());
608 double significanceCut = 2.0;
609 const double significance1 = std::abs(curTag.momentumBalanceSignificance());
610 const double significance2 = std::abs(bestTag.momentumBalanceSignificance());
611 if (std::abs(significance1 - significance2) > significanceCut) {
612 if (significance1 < significanceCut) {
615 ATH_MSG_DEBUG(
"bestMatchChooser: choose worse, but acceptable, matchChiSq as better momentum balance. "
616 <<
" matchChiSq 1,2 " << matchChiSq1 <<
", " << matchChiSq2
617 <<
" momentumBalanceSignificance 1,2 " << curTag.momentumBalanceSignificance() <<
", "
618 << bestTag.momentumBalanceSignificance());
622 if (significance2 < significanceCut) {
625 ATH_MSG_DEBUG(
"bestMatchChooser: choose worse, but acceptable, matchChiSq as better momentum balance. "
626 <<
" matchChiSq 1,2 " << matchChiSq1 <<
", " << matchChiSq2
627 <<
" momentumBalanceSignificance 1,2 " << curTag.momentumBalanceSignificance() <<
", "
628 << bestTag.momentumBalanceSignificance());
636 ATH_MSG_VERBOSE(
"bestMatchChooser: spectrometer field integral ratio ");
637 integral1 = std::abs(curTag.fieldIntegral().betweenSpectrometerMeasurements());
638 integral2 = std::abs(bestTag.fieldIntegral().betweenSpectrometerMeasurements());
639 if (integral1 > cutRatio * integral2)
return true;
640 if (integral2 > cutRatio * integral1)
return false;
644 integral1 = std::abs(curTag.fieldIntegral().betweenInDetMeasurements());
645 integral2 = std::abs(bestTag.fieldIntegral().betweenInDetMeasurements());
646 if (integral1 > cutRatio * integral2)
return true;
647 if (integral2 > cutRatio * integral1)
return false;
652 if (std::abs(fitChiSq1 - fitChiSq2) > 0.5 *
m_badFitChi2) {
656 ATH_MSG_DEBUG(
"bestMatchChooser: choose worse, but acceptable, matchChiSq according to overall quality. "
657 <<
" matchChiSq 1,2 " << matchChiSq1 <<
", " << matchChiSq2 <<
" fitChiSq/DoF 1,2 " << fitChiSq1
658 <<
"/" << numberDoF1 <<
", " << fitChiSq2 <<
"/" << numberDoF2);
665 ATH_MSG_DEBUG(
"bestMatchChooser: choose worse, but acceptable, matchChiSq according to overall quality. "
666 <<
" matchChiSq 1,2 " << matchChiSq1 <<
", " << matchChiSq2 <<
" fitChiSq/DoF 1,2 " << fitChiSq1
667 <<
"/" << numberDoF1 <<
", " << fitChiSq2 <<
"/" << numberDoF2);
694 return fitChiSq1 < fitChiSq2;
697 return matchChiSq1 < matchChiSq2;
◆ buildCombinedTrack()
Definition at line 196 of file MuonCombinedFitTagTool.cxx.
201 if (!extrapolatedTrack) extrapolatedTrack = &spectrometerTrack;
204 double combinedFitChi2 = 9999.;
213 std::unique_ptr<Trk::Track> outwardsTrack(
214 m_outwardsBuilder->combinedFit(ctx, indetTrack, *extrapolatedTrack, spectrometerTrack));
215 if (outwardsTrack &&
chi2(outwardsTrack->fitQuality()) < combinedFitChi2) {
217 outwardsTrack->info().addPatternReco(spectrometerTrack.
info());
◆ combine()
IMuonCombinedTagTool interface: build combined muons from a muon and a vector of indet candidates.
Sort such that the track with the largest probability comes first
try recovery
Implements MuonCombined::IMuonCombinedTagTool.
Definition at line 63 of file MuonCombinedFitTagTool.cxx.
66 ATH_MSG_DEBUG(
"muon candidate: " << muonCandidate.toString());
68 std::unique_ptr<CombinedFitTag> bestTag, currentTag;
69 std::unique_ptr<Trk::Track> bestCombTrack, bestMETrack,
combinedTrack, METrack;
70 const InDetCandidate* bestCandidate =
nullptr;
73 using InDetProbMatch = std::pair<double, const InDetCandidate*>;
74 std::vector<InDetProbMatch> sortedInDetCandidates;
75 sortedInDetCandidates.reserve(indetCandidates.size());
78 const Trk::Track* id_track = idTP->indetTrackParticle().track();
79 double outerMatchProb =
m_matchQuality->outerMatchProbability(*id_track, muonCandidate.muonSpectrometerTrack(), ctx);
80 double innerMatchProb = -1;
81 if (muonCandidate.extrapolatedTrack())
82 innerMatchProb =
m_matchQuality->innerMatchProbability(*id_track, *muonCandidate.extrapolatedTrack(), ctx);
83 const double maxProb =
std::max(outerMatchProb, innerMatchProb);
84 sortedInDetCandidates.emplace_back(maxProb, idTP);
87 std::sort(sortedInDetCandidates.begin(), sortedInDetCandidates.end(),
88 [](
const InDetProbMatch&
a,
const InDetProbMatch&
b) { return a.first > b.first; });
90 bool fitBadMatches =
false;
91 for (
const InDetProbMatch& cand_prob : sortedInDetCandidates) {
93 if (cand_prob.first < probCut && !fitBadMatches) {
102 const Trk::Track* id_track = cand_prob.second->indetTrackParticle().track();
103 ATH_MSG_DEBUG(
"Doing combined fit with ID track " << cand_prob.second->toString());
104 ATH_MSG_DEBUG(
"Doing combined fit with MS track " << muonCandidate.toString());
115 dumpCaloEloss(ctx, muonCandidate.extrapolatedTrack(),
"Extrapolated Track ");
129 *bestCombTrack, bestMETrack.get())) {
130 bestCandidate = cand_prob.second;
131 bestTag.swap(currentTag);
133 bestMETrack.swap(METrack);
138 for (
const InDetProbMatch& cand_prob : sortedInDetCandidates) {
139 const Trk::Track* id_track = cand_prob.second->indetTrackParticle().track();
143 combinedTrack->info().addPatternReco(muonCandidate.muonSpectrometerTrack().info());
154 dumpCaloEloss(ctx, muonCandidate.extrapolatedTrack(),
"Recovery Extrapolated Track ");
162 *bestTag, *bestCombTrack, bestMETrack.get())) {
163 bestCandidate = cand_prob.second;
164 bestTag.swap(currentTag);
166 bestMETrack.swap(METrack);
174 if (msgLevel() >=
MSG::DEBUG && bestMETrack) {
175 dumpCaloEloss(ctx, bestCombTrack.get(),
" bestCandidate Combined Track ");
176 dumpCaloEloss(ctx, bestMETrack.get(),
" bestCandidate Extrapolated Track ");
180 ATH_MSG_DEBUG(
"Combined Muon with ID " <<
m_printer->print(bestCandidate->indetTrackParticle().perigeeParameters())
181 <<
" match chi2 " << bestTag->matchChi2());
182 combTracks->
push_back(std::move(bestCombTrack));
184 bestTag->setCombinedTrackLink(comblink);
186 METracks->
push_back(std::move(bestMETrack));
188 bestTag->setUpdatedExtrapolatedTrackLink(melink);
192 tagMap.addEntry(bestCandidate, bestTag.release());
◆ combinedTrackQualityCheck()
Definition at line 232 of file MuonCombinedFitTagTool.cxx.
237 ATH_MSG_DEBUG(
" No Calorimeter CaloDeposit found on combined track ");
243 ATH_MSG_DEBUG(
" combinedTrackQualityCheck fails with momentumBalanceSignificance " << significance);
251 if (combinedPerigee->covariance() && indetPerigee->covariance()) {
252 const double dpOverP2 =
Amg::error(*combinedPerigee->covariance(),
Trk::qOverP) * combinedPerigee->momentum().mag2();
253 if (dpOverP2 < 1.
E-6) {
255 ATH_MSG_DEBUG(
"combinedTrackQualityCheck: fail with unphysical momentum covariance");
263 ATH_MSG_DEBUG(
"combinedTrackQualityCheck: fail with momentum pull above cut: "
264 <<
pull <<
" pid " << 1. / indetPerigee->parameters()[
Trk::qOverP] <<
" pcb "
265 << 1. / combinedPerigee->parameters()[
Trk::qOverP] <<
" 1./sigma " << 1. /
sigma);
◆ 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()
◆ dumpCaloEloss()
void MuonCombined::MuonCombinedFitTagTool::dumpCaloEloss |
( |
const EventContext & |
ctx, |
|
|
const Trk::Track * |
track, |
|
|
const std::string & |
txt |
|
) |
| const |
|
private |
Definition at line 378 of file MuonCombinedFitTagTool.cxx.
380 if (!inTrack)
return;
395 double Eloss{0.}, idEloss{0.}, caloEloss{0.}, msEloss{0.}, deltaP{0.},
396 pcalo{0.}, pstart{0.},
eta{0.}, pMuonEntry{0.};
399 if (
m->trackParameters()) pMuonEntry =
m->trackParameters()->momentum().mag();
407 if (pstart == 0 &&
m->trackParameters()) {
408 pstart =
m->trackParameters()->momentum().mag();
409 eta =
m->trackParameters()->momentum().eta();
410 ATH_MSG_DEBUG(
"Start pars found eta " <<
eta <<
" r " << (
m->trackParameters())->position().perp() <<
" z "
411 << (
m->trackParameters())->position().z() <<
" pstart " << pstart);
413 if (
m->materialEffectsOnTrack()) {
420 pcalo =
m->trackParameters()->momentum().mag();
424 <<
" deltaTheta " << scatAngles->
deltaTheta() <<
" pull "
430 ATH_MSG_DEBUG(
"Eloss found r " << (
m->trackParameters())->position().perp() <<
" z "
431 << (
m->trackParameters())->position().z() <<
" value " << energyLoss->
deltaE()
432 <<
" Eloss " << Eloss);
435 caloEloss = std::abs(energyLoss->
deltaE());
437 deltaP =
m->trackParameters()->momentum().mag() - pcalo;
440 ATH_MSG_DEBUG(
txt <<
" Calorimeter delta p " << deltaP <<
" deltaE " << caloEloss
441 <<
" delta pID = pcaloEntry-pstart " << pcalo - pstart);
443 Eloss += std::abs(energyLoss->
deltaE());
450 Eloss = idEloss + caloEloss + msEloss;
451 ATH_MSG_DEBUG(
txt <<
" eta " <<
eta <<
" pstart " << pstart / 1000. <<
" Eloss on TSOS idEloss " << idEloss <<
" caloEloss "
452 << caloEloss <<
" msEloss " << msEloss <<
" Total " << Eloss <<
" pstart - pMuonEntry " << pstart - pMuonEntry);
◆ evaluateMatchProperties()
Definition at line 274 of file MuonCombinedFitTagTool.cxx.
282 if (
tag.muonCandidate().extrapolatedTrack()) {
283 std::pair<int, std::pair<double, double> > aTriad =
284 m_matchQuality->innerMatchAll(idTrack, *
tag.muonCandidate().extrapolatedTrack(), ctx);
285 const int matchDoF = aTriad.first;
286 const double matchChi2 = aTriad.second.first;
287 const double matchProb = aTriad.second.second;
289 tag.innerMatch(matchChi2, matchDoF, matchProb);
290 ATH_MSG_DEBUG(
" extrapolatedTrack innerMatch " << matchChi2);
294 std::unique_ptr<Trk::Track> refittedExtrapolatedTrack;
308 fieldCondObj->getInitializedCache(fieldCache);
309 if (!fieldCache.
toroidOn()) dorefit =
false;
316 if (vertices.isValid()) {
318 for (
const auto& tpLink : vx->trackParticleLinks()) {
319 if (*tpLink == &idTrackParticle) {
324 if (matchedVertex)
break;
329 origin =
Amg::Vector3D{matchedVertex->x(), matchedVertex->y(), matchedVertex->z()};
335 origin[
Amg::z] = idTrackParticle.
z0() + idTrackParticle.
vz();
336 ATH_MSG_DEBUG(
" NO matched vertex take track perigee " << origin);
346 unsigned numberPseudo =
347 tag.muonCandidate().extrapolatedTrack() ?
m_trackQuery->numberPseudoMeasurements(*
tag.muonCandidate().extrapolatedTrack()) : 1;
350 if (refittedExtrapolatedTrack) {
351 std::pair<int, std::pair<double, double> > aTriad =
m_matchQuality->innerMatchAll(idTrack, *refittedExtrapolatedTrack, ctx);
352 const int matchDoF = aTriad.first;
353 const double matchChi2 = aTriad.second.first;
354 const double matchProb = aTriad.second.second;
357 tag.innerMatch(matchChi2, matchDoF, matchProb);
358 ATH_MSG_DEBUG(
" refittedExtrapolatedTrack innerMatch " << matchChi2);
361 if (
tag.muonCandidate().extrapolatedTrack()) {
362 double oldmatchChi2 =
m_matchQuality->innerMatchChi2(idTrack, *
tag.muonCandidate().extrapolatedTrack(), ctx);
364 ATH_MSG_VERBOSE(
"evaluateMatchProperties: chi2 re-evaluated from " << oldmatchChi2 <<
" to " << matchChi2);
366 if (matchChi2 > 1.1 * oldmatchChi2)
367 ATH_MSG_DEBUG(
"evaluateMatchProperties: chi2 got worse: from " << oldmatchChi2 <<
" to " << matchChi2);
369 ATH_MSG_VERBOSE(
"evaluateMatchProperties: added new extrapolated track with chi2 " << matchChi2);
371 }
else if (!numberPseudo) {
373 ATH_MSG_DEBUG(
"evaluateMatchProperties: fail re-evaluation of match chi2");
375 return refittedExtrapolatedTrack;
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ 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
◆ extrapolatedNeedsRefit()
Definition at line 455 of file MuonCombinedFitTagTool.cxx.
457 if (!extrTrack)
return true;
458 if (!
m_trackQuery->isCaloAssociated(*extrTrack, ctx))
return true;
471 if (!caloEnergyCombined || !caloEnergyExtrapolated) {
473 ATH_MSG_VERBOSE(
"extrapolatedNeedsRefit: no refit for combined track without CaloEnergy");
476 double deltaE = caloEnergyExtrapolated->
deltaE() - caloEnergyCombined->
deltaE();
477 if (std::abs(deltaE) > 0.3 * caloEnergyExtrapolated->
sigmaDeltaE()) {
478 ATH_MSG_VERBOSE(
"extrapolatedNeedsRefit: caloEnergy difference " << deltaE <<
" sigma "
479 << caloEnergyExtrapolated->
sigmaDeltaE() <<
" ratio "
480 << deltaE / caloEnergyExtrapolated->
sigmaDeltaE());
490 if ((**o).measurementOnTrack() && (**o).trackParameters()) {
497 ((**o).trackParameters()->associatedSurface().center() - (**c).trackParameters()->associatedSurface().center()).
mag();
498 if (std::abs(separation) > 1. *
CLHEP::mm) {
500 <<
" separation " << separation <<
" extrap " << (**o).trackParameters()->associatedSurface().center()
501 <<
" comb " << (**c).trackParameters()->associatedSurface().center());
508 ATH_MSG_VERBOSE(
"extrapolatedNeedsRefit: outlier only on combined track ");
510 ATH_MSG_VERBOSE(
"extrapolatedNeedsRefit: outlier only on extrapolated track ");
◆ initialize()
StatusCode MuonCombined::MuonCombinedFitTagTool::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.
◆ interfaceID()
static const InterfaceID& MuonCombined::IMuonCombinedTagTool::interfaceID |
( |
| ) |
|
|
inlinestaticinherited |
Definition at line 25 of file IMuonCombinedTagTool.h.
26 static const InterfaceID IID_IMuonCombinedTagTool(
"MuonCombined::IMuonCombinedTagTool", 1, 0);
27 return IID_IMuonCombinedTagTool;
◆ 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()
◆ sysInitialize()
◆ 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_badFitChi2
Gaudi::Property<double> MuonCombined::MuonCombinedFitTagTool::m_badFitChi2 {this, "BadFitChi2", 2.5} |
|
private |
◆ m_detStore
◆ m_evtStore
◆ m_fieldCacheCondObjInputKey
Initial value:{this, "AtlasFieldCacheCondObj", "fieldCondObj",
"Name of the Magnetic Field conditions object key"}
Definition at line 83 of file MuonCombinedFitTagTool.h.
◆ m_idHelperSvc
◆ m_indetPullCut
Gaudi::Property<double> MuonCombined::MuonCombinedFitTagTool::m_indetPullCut {this, "IndetPullCut", 6} |
|
private |
◆ m_matchChiSquaredCut
Gaudi::Property<double> MuonCombined::MuonCombinedFitTagTool::m_matchChiSquaredCut {this, "MatchChiSquaredCut", 30} |
|
private |
◆ m_matchQuality
◆ m_momentumBalanceCut
Gaudi::Property<double> MuonCombined::MuonCombinedFitTagTool::m_momentumBalanceCut {this, "MomentumBalanceCut", 6} |
|
private |
◆ m_momentumBalanceTool
Initial value:{
this, "MomentumBalanceTool", "Rec::MuonMomentumBalanceSignificanceTool/MuonMomentumBalanceSignifTool"}
Definition at line 71 of file MuonCombinedFitTagTool.h.
◆ m_muonRecovery
ToolHandle<Rec::IMuidMuonRecovery> MuonCombined::MuonCombinedFitTagTool::m_muonRecovery {this, "MuonRecovery", ""} |
|
private |
◆ m_outwardsBuilder
◆ m_printer
◆ m_trackBuilder
◆ m_trackQuery
◆ m_trackScoringTool
◆ m_varHandleArraysDeclared
◆ m_vertexKey
◆ m_vhka
The documentation for this class was generated from the following files:
double deltaPhi() const
returns the
@ MuidCombined
MuidCombined.
@ CaloDeposit
This TSOS contains a CaloEnergy object.
const FitQuality * fitQuality() const
return a pointer to the fit quality const-overload
class extending the basic Trk::EnergyLoss to describe the measured or parameterised muon energy loss ...
float vx() const
The x origin for the parameters.
const_reverse_iterator rend() const noexcept
Return a const_reverse_iterator pointing at the beginning of the collection.
Scalar eta() const
pseudorapidity method
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
const TrackInfo & info() const
Returns a const ref to info of a const tracks.
float vz() const
The z origin for the parameters.
double sigmaDeltaE() const
returns the symmatric error
float z0() const
Returns the parameter.
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
represents a deflection of the track caused through multiple scattering in material.
double thicknessInX0() const
returns the actually traversed material .
#define ATH_MSG_VERBOSE(x)
const std::string & key() const
Return the StoreGate ID for the referenced object.
void combinedTrack(long int ICH, double *pv0, double *covi, double BMAG, double *par, double *covo)
float d0() const
Returns the parameter.
virtual void setOwner(IDataHandleHolder *o)=0
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
@ StraightTrack
A straight track.
represents the full description of deflection and e-loss of a track in material.
double sigmaDeltaTheta() const
returns the
double chi2(TH1 *h0, TH1 *h1)
double deltaE() const
returns the
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
const_reverse_iterator rbegin() const noexcept
Return a const_reverse_iterator pointing past the end of the collection.
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
const Perigee * perigeeParameters() const
return Perigee.
@ numberOfTRTHits
number of TRT outliers
float vy() const
The y origin for the parameters.
represents the track state (measurement, material, fit parameters and quality) at a surface.
A summary of the information contained by a track.
std::reverse_iterator< const_iterator > const_reverse_iterator
Standard const_reverse_iterator.
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
This class describes energy loss material effects in the ATLAS tracking EDM.
This class represents the corrected MDT measurements, where the corrections include the effects of wi...
value_type push_back(value_type pElem)
Add an element to the end of the collection.
StatusCode initialize(bool used=true)
Eigen::Matrix< double, 3, 1 > Vector3D
const EnergyLoss * energyLoss() const
returns the energy loss object.
Class describing a Vertex.
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
const Trk::TrackSummary * trackSummary() const
Returns a pointer to the const Trk::TrackSummary owned by this const track (could be nullptr)
const ScatteringAngles * scatteringAngles() const
returns the MCS-angles object.
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
double sigmaDeltaPhi() const
returns the
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
const Trk::Track * track() const
Returns a pointer (which can be NULL) to the Trk::Track which was used to make this TrackParticle.
int get(const SummaryType &type) const
returns the summary information for the passed SummaryType.
double deltaTheta() const
returns the
size_type size() const noexcept
Returns the number of elements in the collection.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
bool trackProperties(const TrackProperties &property) const
Access methods for track properties.
Scalar mag() const
mag method
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)