ATLAS Offline Software
Loading...
Searching...
No Matches
MuonTraits.h
Go to the documentation of this file.
1// emacs: this is -*- c++ -*-
13
14#ifndef IDTPM2_MUONTRAITS_H
15#define IDTPM2_MUONTRAITS_H
16
17#include "xAODMuon/Muon.h"
18
19#include "TrackTraits.h"
20
21
22template<>
23struct TrackTraits<xAOD::Muon> : public TrackTraitsBase<xAOD::Muon> {
24
25public:
26
27 static constexpr xAOD::Muon::TrackParticleType muontype() { return xAOD::Muon::InnerDetectorTrackParticle; }
29 // static constexpr xAOD::Muon::TrackParticleType muontype() { return xAOD::Muon::CombinedTrackParticle; }
30
31 static uint8_t summary_value( const xAOD::Muon& m, xAOD::SummaryType type ) {
32 uint8_t n(0); m.trackParticle(muontype())->summaryValue(n, type); return n;
33 }
34
35 // static float pt(const xAOD::Muon& m) { return m.trackParticle(muontype())->pt(); }
36 static float pt(const xAOD::Muon& m) { return m.pt(); }
37 static float phi(const xAOD::Muon& m) { return m.phi(); }
38 static float eta(const xAOD::Muon& m) { return m.eta(); }
39 static float theta(const xAOD::Muon& m) { return 2*std::atan(std::exp(-m.eta())); }
40
41 static float z0(const xAOD::Muon& m) { return m.trackParticle(muontype())->z0() + m.trackParticle(muontype())->vz(); }
42
43 static float d0(const xAOD::Muon& m) { return m.trackParticle(muontype())->d0(); }
44
45 static float m(const xAOD::Muon& m) { return m.m(); }
46
47 static float E(const xAOD::Muon& m) { return m.e(); }
48
49 static float ET(const xAOD::Muon& m) { return m.e()*std::sin(theta(m)); }
50
51 // Check this I do not trust the way I changed it
52 static float p(const xAOD::Muon& m) {
53 if ( m.trackParticle(muontype())->qOverP()==0 ) throw std::runtime_error( "divide by 0 - track qOverP() is 0" );
54 return 1/m.trackParticle(muontype())->qOverP();
55 }
56
57 static float qOverP(const xAOD::Muon& m) { return m.trackParticle(muontype())->qOverP(); }
58
59 static float dphi(const xAOD::Muon& m) { return std::sqrt(m.trackParticle(muontype())->definingParametersCovMatrix()(Trk::phi0,Trk::phi0)); }
60 static float dtheta(const xAOD::Muon& m) { return std::sqrt(m.trackParticle(muontype())->definingParametersCovMatrix()(Trk::theta,Trk::theta)); }
61 static float dqOverP(const xAOD::Muon& m) { return std::sqrt(m.trackParticle(muontype())->definingParametersCovMatrix()(Trk::qOverP,Trk::qOverP)); }
62
63 static float deta(const xAOD::Muon& m) { return 0.5*dtheta(m)/(std::cos(0.5*theta(m))*std::cos(0.5*theta(m))*std::tan(0.5*theta(m))); } // ???? CHECK THIS <<--
64
65 static float dz0(const xAOD::Muon& m) { return std::sqrt(m.trackParticle(muontype())->definingParametersCovMatrix()(Trk::z0,Trk::z0)); }
66 static float dd0(const xAOD::Muon& m) { return std::sqrt(m.trackParticle(muontype())->definingParametersCovMatrix()(Trk::d0,Trk::d0)); }
67
68 static float dpt(const xAOD::Muon& m) {
69 double th = theta(m);
70 double dth = dtheta(m);
71 double sintheta = std::sin(th);
72 double costheta = std::cos(th);
73 double p_ = p(m);
74 double dqovp = dqOverP(m);
75 double dpt2 = (p_*p_*sintheta)*(p_*p_*sintheta)*dqovp*dqovp + (p_*costheta)*(p_*costheta)*dth*dth - 2*(p_*p_*sintheta)*(p_*costheta)*covthetaOvP(m);
76 if ( dpt2>0 ) return std::sqrt( dpt2 );
77 return 0;
78 }
79
80 static float covthetaOvP(const xAOD::Muon& m) { return m.trackParticle(muontype())->definingParametersCovMatrix()(Trk::qOverP,Trk::theta); };
81
82 static float charge(const xAOD::Muon& m) { return m.charge(); }
83
84 static float chi2(const xAOD::Muon& m) { return m.trackParticle(muontype())->chiSquared(); }
85 static float ndof(const xAOD::Muon& m) { return m.trackParticle(muontype())->numberDoF(); }
86
87 static uint8_t hasValidTime(const xAOD::Muon& m) { return m.trackParticle(muontype())->hasValidTime(); }
88 static float time(const xAOD::Muon& m) { return m.trackParticle(muontype())->time(); }
89
91 // static float pTsig(const xAOD::Muon& t) { return t.charge() ? std::copysign( t.pt(), t.charge() ) : 0.; }
92 // static float z0SinTheta(const xAOD::Muon& t) { return z0( p ) * std::sin( theta( p ) ); }
93
94 static int nPixels( const xAOD::Muon& m ) { return summary_value( m, xAOD::numberOfPixelHits ); }
96 static int nPixelHoles( const xAOD::Muon& m ) { return summary_value( m, xAOD::numberOfPixelHoles ); }
99
102
105
106
107 static int nSCT( const xAOD::Muon& m ) { return summary_value( m, xAOD::numberOfSCTHits ); }
109 static int nSCTHoles( const xAOD::Muon& m ) { return summary_value( m, xAOD::numberOfSCTHoles ); }
110
111 static int nSi( const xAOD::Muon& m ) { return nPixels(m)+nSCT(m); }
112 static int nSiHoles( const xAOD::Muon& m ) { return nPixelHoles(m)+nSCTHoles(m); }
113
114 static int nTRT( const xAOD::Muon& m ) { return summary_value( m, xAOD::numberOfTRTHits ); }
116
117 template<typename U>
118 static void addChildren( const xAOD::Muon& m, std::vector<U>& v ) { v.emplace_back( m.trackParticle(muontype()) ); }
119
120};
121
122
123
124
125#endif // IDTPM2_MUONTRAITS_H
126
127
128
129
130
131
132
Scalar theta() const
theta method
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
@ phi0
Definition ParamDefs.h:65
@ theta
Definition ParamDefs.h:66
@ qOverP
perigee
Definition ParamDefs.h:67
@ d0
Definition ParamDefs.h:63
@ z0
Definition ParamDefs.h:64
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Muon_v1 Muon
Reference the current persistent version:
Definition Muon.h:13
SummaryType
Enumerates the different types of information stored in Summary.
@ numberOfInnermostPixelLayerSharedEndcapHits
number of Pixel 0th layer endcap hits shared by several tracks.
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
@ numberOfInnermostPixelLayerEndcapHits
these are the hits in the 0th pixel layer endcap [unit8_t].
@ numberOfInnermostPixelLayerSharedHits
number of Pixel 0th layer barrel hits shared by several tracks.
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ numberOfNextToInnermostPixelLayerHits
these are the hits in the 1st pixel barrel layer
@ numberOfTRTHighThresholdHitsTotal
total number of TRT hits which pass the high threshold [unit8_t].
@ numberOfNextToInnermostPixelLayerEndcapHits
these are the hits in the 0.5th and 1st pixel layer endcap rings [unit8_t].
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfPixelSharedHits
number of Pixel all-layer hits shared by several tracks [unit8_t].
@ numberOfSCTSharedHits
number of SCT hits shared by several tracks [unit8_t].
@ numberOfSCTHoles
number of SCT holes [unit8_t].
raw track traits - use for the TrackParticle by default, specialise for anything else,...
Definition TrackTraits.h:47
static int nPixels(const T &)
Definition TrackTraits.h:89
static int nPixelHoles(const T &)
Definition TrackTraits.h:91
static int nSCT(const T &)
static float dqOverP(const T &)
Definition TrackTraits.h:66
static int nSCTHoles(const T &)
static float p(const T &)
Definition TrackTraits.h:56
static float qOverP(const T &)
Definition TrackTraits.h:55
static float dtheta(const T &)
Definition TrackTraits.h:65
static float covthetaOvP(const T &)
Definition TrackTraits.h:75
static int nPixelsBlayer(const xAOD::Muon &m)
Definition MuonTraits.h:103
static int nTRT(const xAOD::Muon &m)
Definition MuonTraits.h:114
static float ndof(const xAOD::Muon &m)
Definition MuonTraits.h:85
static int nPixelsBlayerEndcap(const xAOD::Muon &m)
Definition MuonTraits.h:104
static float qOverP(const xAOD::Muon &m)
Definition MuonTraits.h:57
static int nSi(const xAOD::Muon &m)
Definition MuonTraits.h:111
static float chi2(const xAOD::Muon &m)
Definition MuonTraits.h:84
static float m(const xAOD::Muon &m)
Definition MuonTraits.h:45
static float time(const xAOD::Muon &m)
Definition MuonTraits.h:88
static float d0(const xAOD::Muon &m)
Definition MuonTraits.h:43
static uint8_t summary_value(const xAOD::Muon &m, xAOD::SummaryType type)
do we instead really want the combined muon ???
Definition MuonTraits.h:31
static uint8_t hasValidTime(const xAOD::Muon &m)
not an integer ???
Definition MuonTraits.h:87
static float theta(const xAOD::Muon &m)
Definition MuonTraits.h:39
static int nPixelsInnerShared(const xAOD::Muon &m)
Definition MuonTraits.h:100
static float dd0(const xAOD::Muon &m)
Definition MuonTraits.h:66
static int nPixelsShared(const xAOD::Muon &m)
Definition MuonTraits.h:95
static constexpr xAOD::Muon::TrackParticleType muontype()
Definition MuonTraits.h:27
static float dpt(const xAOD::Muon &m)
Definition MuonTraits.h:68
static int nPixelsInner(const xAOD::Muon &m)
Definition MuonTraits.h:97
static float eta(const xAOD::Muon &m)
Definition MuonTraits.h:38
static float charge(const xAOD::Muon &m)
a covariance not an error
Definition MuonTraits.h:82
static float dqOverP(const xAOD::Muon &m)
Definition MuonTraits.h:61
static float deta(const xAOD::Muon &m)
Definition MuonTraits.h:63
static int nSCT(const xAOD::Muon &m)
Definition MuonTraits.h:107
static float dz0(const xAOD::Muon &m)
Definition MuonTraits.h:65
static int nPixelsInnerEndcap(const xAOD::Muon &m)
Definition MuonTraits.h:98
static float p(const xAOD::Muon &m)
Definition MuonTraits.h:52
static float z0(const xAOD::Muon &m)
Definition MuonTraits.h:41
static float phi(const xAOD::Muon &m)
Definition MuonTraits.h:37
static float dphi(const xAOD::Muon &m)
Definition MuonTraits.h:59
static float pt(const xAOD::Muon &m)
Definition MuonTraits.h:36
static int nPixelsInnerSharedEndcap(const xAOD::Muon &m)
Definition MuonTraits.h:101
static int nSCTShared(const xAOD::Muon &m)
Definition MuonTraits.h:108
static float covthetaOvP(const xAOD::Muon &m)
Definition MuonTraits.h:80
static float E(const xAOD::Muon &m)
Definition MuonTraits.h:47
static int nSiHoles(const xAOD::Muon &m)
Definition MuonTraits.h:112
static int nSCTHoles(const xAOD::Muon &m)
Definition MuonTraits.h:109
static float dtheta(const xAOD::Muon &m)
Definition MuonTraits.h:60
static void addChildren(const xAOD::Muon &m, std::vector< U > &v)
Definition MuonTraits.h:118
static int nTRTHi(const xAOD::Muon &m)
Definition MuonTraits.h:115
static float ET(const xAOD::Muon &m)
Definition MuonTraits.h:49
static int nPixels(const xAOD::Muon &m)
do we want to keep these ??
Definition MuonTraits.h:94
static int nPixelHoles(const xAOD::Muon &m)
Definition MuonTraits.h:96