13#include "AthLinks/ElementLink.h"
26 declareInterface<IMuonPrintingTool>(
this);
38 return StatusCode::SUCCESS;
44 return StatusCode::SUCCESS;
48 std::ostringstream sout;
49 sout <<
" pt : " << tp.
pt() <<
" eta : " << tp.
eta() <<
" phi : " << tp.
phi();
54 std::ostringstream sout;
56 sout <<
"##### Muon, pt : " << muon.pt() <<
" eta : " << muon.eta() <<
" phi : " << muon.phi() <<
" mass : " << muon.m()
57 <<
" author " << muon.author() <<
" type : " << muon.muonType() <<
" secondary authors: ";
59 xAOD::Muon::Author author =
static_cast<xAOD::Muon::Author
>(
a);
60 if (author != muon.author() && muon.isAuthor(author)) sout <<
" " <<
a;
64 sout <<
" ParamDef available:" << std::endl;
65 using enum xAOD::Muon::ParamDef;
66 static constexpr std::array<xAOD::Muon::ParamDef, 24> printPars{
67 spectrometerFieldIntegral,
68 scatteringCurvatureSignificance,
69 scatteringNeighbourSignificance,
70 momentumBalanceSignificance,
74 t0, beta, annBarrel, annEndCap, innAngle, meanDeltaADCCountsMDT,
75 CaloMuonScore, EnergyLossSigma, FSR_CandidateEnergy,
76 ParamEnergyLossSigmaMinus, ParamEnergyLossSigmaPlus,
77 midAngle, msInnerMatchChi2, msOuterMatchChi2
79 for (
auto p : printPars) {
81 if (
muon.parameter(val, p)){
82 sout<<
" "<<
p<<
": "<<
val<<std::endl;
86 if (
muon.parameter(iVal, msInnerMatchDOF)) sout <<
" msInnerMatchDOF : " << msInnerMatchDOF << std::endl;
87 if (
muon.parameter(iVal, msOuterMatchDOF)) sout <<
" msOuterMatchDOF : " << msOuterMatchDOF << std::endl;
88 if (
muon.parameter(iVal, CaloMuonIDTag)) sout <<
" CaloMuonIDTag : " << CaloMuonIDTag << std::endl;
89 sout <<
" EnergyLossType : " <<
muon.energyLossType() << std::endl;
92 uint8_t nprecisionHoleLayers = 0;
109 sout <<
" Station Layers: precision " <<
static_cast<int>(nprecisionLayers) <<
" holes " <<
static_cast<int>(nprecisionHoleLayers)
110 <<
" phi " <<
static_cast<int>(nphiLayers) <<
" holes " <<
static_cast<int>(nphiHoleLayers) <<
" trigEta "
111 <<
static_cast<int>(ntrigEtaLayers) <<
" holes " <<
static_cast<int>(ntrigEtaHoleLayers) <<
" main sector "
112 <<
static_cast<int>(mainSector) <<
" secondary " <<
static_cast<int>(secondSector) << std::endl;
114 bool printMeasurements =
true;
116 if (
const xAOD::TrackParticle* cbtp =
muon.trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle); cbtp !=
nullptr) {
117 sout <<
" --- Combined Muon track --- " <<
print(*cbtp);
118 if (!cbtp->trackLink().isValid()) {
119 sout <<
" No Track link";
122 const Trk::Track* cbtr = *cbtp->trackLink();
123 if (cbtr) sout << std::endl << m_edmPrinter->printStations(*cbtr);
124 if (cbtr && printMeasurements) sout << std::endl << m_edmPrinter->printMeasurements(*cbtr);
129 if (
const xAOD::TrackParticle* satp =
muon.trackParticle(xAOD::Muon::TrackParticleType::ExtrapolatedMuonSpectrometerTrackParticle); satp !=
nullptr) {
130 sout <<
" --- Extrapolated Muon track --- " <<
print(*satp);
131 if (!satp->trackLink().isValid()) {
132 sout <<
" No Track link";
133 ATH_MSG_DEBUG(
"Extrapolated track particle without Trk::Track");
135 const Trk::Track* satr = *satp->trackLink();
136 if (satr) sout << std::endl << m_edmPrinter->printStations(*satr);
137 if (satr && printMeasurements) sout << std::endl << m_edmPrinter->printMeasurements(*satr);
142 if (
const xAOD::TrackParticle* satp =
muon.trackParticle(xAOD::Muon::TrackParticleType::MuonSpectrometerTrackParticle); satp !=
nullptr) {
143 sout <<
" --- MuonSpectrometer track --- " <<
print(*satp);
144 if (!satp->trackLink().isValid()) {
145 sout <<
" No Track link";
148 const Trk::Track* satr = *satp->trackLink();
149 if (satr) sout << std::endl << m_edmPrinter->printStations(*satr);
150 if (satr && printMeasurements) sout << std::endl << m_edmPrinter->printMeasurements(*satr);
158 std::ostringstream sout;
159 sout <<
"Muon Container Size :" << muons.
size() << std::endl;
161 for (
const auto *m : muons) { sout <<
print(*m); }
#define ATH_CHECK
Evaluate an expression and check for errors.
void print(char *figname, TCanvas *c1)
size_type size() const noexcept
Returns the number of elements in the collection.
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .).
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
constexpr int toInt(const EnumType enumVal)
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Muon_v1 Muon
Reference the current persistent version:
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".
@ numberOfPrecisionLayers
layers with at least 3 hits [unit8_t].
@ numberOfTriggerEtaHoleLayers
layers with trigger eta holes but no hits [unit8_t].
@ numberOfPhiHoleLayers
layers with trigger phi holes but no hits [unit8_t].
@ numberOfTriggerEtaLayers
layers with trigger eta hits [unit8_t].
@ numberOfPhiLayers
layers with a trigger phi hit [unit8_t].
@ numberOfPrecisionHoleLayers
layers with holes AND no hits [unit8_t].
@ primarySector
primary sector crossed by the muon
@ secondarySector
secondary sector crossed by the muon (set to the primary if the muon only passed one sector)