ATLAS Offline Software
Loading...
Searching...
No Matches
Rec::MuonMomentumBalanceSignificanceTool Class Reference

Tool to calculate the momentum balance significance from the detailed information (parameters, scattering angles) of a track fit. More...

#include <MuonMomentumBalanceSignificanceTool.h>

Inheritance diagram for Rec::MuonMomentumBalanceSignificanceTool:
Collaboration diagram for Rec::MuonMomentumBalanceSignificanceTool:

Public Member Functions

 ~MuonMomentumBalanceSignificanceTool ()=default
double momentumBalanceSignificance (const xAOD::Muon &muon) const
 Calculate momentum (im)balance significance of a muon (method will simply step down to the relevant track.
double momentumBalanceSignificance (const Trk::Track &track) const
 Calculate momentum (im)balance significance of a track, which needs to be a full ATLAS track.

Detailed Description

Tool to calculate the momentum balance significance from the detailed information (parameters, scattering angles) of a track fit.

Definition at line 20 of file MuonMomentumBalanceSignificanceTool.h.

Constructor & Destructor Documentation

◆ ~MuonMomentumBalanceSignificanceTool()

Rec::MuonMomentumBalanceSignificanceTool::~MuonMomentumBalanceSignificanceTool ( )
default

Member Function Documentation

◆ momentumBalanceSignificance() [1/2]

double Rec::MuonMomentumBalanceSignificanceTool::momentumBalanceSignificance ( const Trk::Track & track) const

Calculate momentum (im)balance significance of a track, which needs to be a full ATLAS track.

Definition at line 35 of file MuonMomentumBalanceSignificanceTool.cxx.

35 {
36 // find the TSOS carrying caloEnergy (TSOS type CaloDeposit)
37 // compare parameters with those from previous TSOS
38 double energyBalance = 0.;
39 const Trk::EnergyLoss* energyLoss = nullptr;
40 const Trk::TrackParameters* previousParameters = nullptr;
41 for (Trk::TrackStates::const_iterator s = track.trackStateOnSurfaces()->begin();
42 s != track.trackStateOnSurfaces()->end(); ++s) {
43 if (!(**s).trackParameters()) continue;
44 if ((**s).materialEffectsOnTrack()) {
45 const Trk::MaterialEffectsOnTrack* meot = dynamic_cast<const Trk::MaterialEffectsOnTrack*>((**s).materialEffectsOnTrack());
46 if (!meot) continue;
47 energyLoss = meot->energyLoss();
48 if ((**s).type(Trk::TrackStateOnSurface::CaloDeposit) && energyLoss && previousParameters) {
49 energyBalance = previousParameters->momentum().mag() - energyLoss->deltaE() - (**s).trackParameters()->momentum().mag();
50
51 if (fabs(energyBalance) < energyLoss->sigmaDeltaE() || energyLoss->sigmaMinusDeltaE() <= 0.0 ||
52 energyLoss->sigmaPlusDeltaE() <= 0.0)
53
54 {
55 ATH_MSG_VERBOSE(std::setiosflags(std::ios::fixed)
56 << " momentum balance " << std::setw(6) << std::setprecision(2) << energyBalance / GeV
57 << " significance " << std::setw(6) << std::setprecision(1)
58 << energyBalance / energyLoss->sigmaDeltaE() << " p before/after calo" << std::setw(7)
59 << std::setprecision(2) << previousParameters->momentum().mag() / GeV << " /" << std::setw(7)
60 << std::setprecision(2) << (**s).trackParameters()->momentum().mag() / GeV
61 << " energy deposit sigma " << energyLoss->sigmaDeltaE() / GeV << " GeV");
62 energyBalance /= energyLoss->sigmaDeltaE();
63 if (fabs(energyBalance) > 1.0)
64 ATH_MSG_DEBUG(" momentum balance using symmetric error "
65 << "as asymmetric error undefined ");
66 } else if (energyBalance < 0.) {
67 ATH_MSG_VERBOSE(std::setiosflags(std::ios::fixed)
68 << " momentum balance " << std::setw(6) << std::setprecision(2) << energyBalance / GeV
69 << " significance " << std::setw(6) << std::setprecision(1)
70 << energyBalance / energyLoss->sigmaDeltaE() << " p before/after calo" << std::setw(7)
71 << std::setprecision(2) << previousParameters->momentum().mag() / GeV << " /" << std::setw(7)
72 << std::setprecision(2) << (**s).trackParameters()->momentum().mag() / GeV
73 << " energy deposit sigma- " << energyLoss->sigmaMinusDeltaE() / GeV << " GeV");
74 energyBalance /= energyLoss->sigmaMinusDeltaE();
75 } else {
76 ATH_MSG_VERBOSE(std::setiosflags(std::ios::fixed)
77 << " momentum balance " << std::setw(6) << std::setprecision(2) << energyBalance / GeV
78 << " significance " << std::setw(6) << std::setprecision(1)
79 << energyBalance / energyLoss->sigmaDeltaE() << " p before/after calo" << std::setw(7)
80 << std::setprecision(2) << previousParameters->momentum().mag() / GeV << " /" << std::setw(7)
81 << std::setprecision(2) << (**s).trackParameters()->momentum().mag() / GeV
82 << " energy deposit sigma+ " << energyLoss->sigmaPlusDeltaE() / GeV << " GeV");
83 energyBalance /= energyLoss->sigmaPlusDeltaE();
84 }
85 break;
86 }
87 }
88
89 // update previous parameters
90 previousParameters = (**s).trackParameters();
91 }
92
93 return energyBalance;
94 }
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
double sigmaPlusDeltaE() const
returns the positive side
double sigmaMinusDeltaE() const
returns the negative side
double sigmaDeltaE() const
returns the symmatric error
double deltaE() const
returns the
const EnergyLoss * energyLoss() const
returns the energy loss object.
const Amg::Vector3D & momentum() const
Access method for the momentum.
@ CaloDeposit
This TSOS contains a CaloEnergy object.
ParametersBase< TrackParametersDim, Charged > TrackParameters

◆ momentumBalanceSignificance() [2/2]

double Rec::MuonMomentumBalanceSignificanceTool::momentumBalanceSignificance ( const xAOD::Muon & muon) const

Calculate momentum (im)balance significance of a muon (method will simply step down to the relevant track.

Definition at line 20 of file MuonMomentumBalanceSignificanceTool.cxx.

20 {
21 // exclude statistical combination
22 if (muon.author() == xAOD::Muon::Author::STACO) return 0.;
23 using enum xAOD::Muon::TrackParticleType;
24 // get combined track
25 const Trk::Track* theTrack =
26 muon.trackParticle(CombinedTrackParticle) ? muon.trackParticle(CombinedTrackParticle)->track() : nullptr;
27
28 if (theTrack == nullptr) {
29 ATH_MSG_DEBUG("No primary author original track for refitted muon, stop calculation...");
30 return 0.0;
31 } else
32 return momentumBalanceSignificance(*theTrack);
33 }
double momentumBalanceSignificance(const xAOD::Muon &muon) const
Calculate momentum (im)balance significance of a muon (method will simply step down to the relevant t...

The documentation for this class was generated from the following files: