ATLAS Offline Software
Loading...
Searching...
No Matches
ElectronTraits.h
Go to the documentation of this file.
1// emacs: this is -*- c++ -*-
14
15#ifndef IDTPM2_ELECTRONTRAITS_H
16#define IDTPM2_ELECTRONTRAITS_H
17
19
20#include "TrackTraits.h"
21
22
23template<>
24struct TrackTraits<xAOD::Electron> : public TrackTraitsBase<xAOD::Electron> {
25
26public:
27
28 static uint8_t summary_value( const xAOD::Electron& e, xAOD::SummaryType type ) {
29 uint8_t n(0); e.trackParticle()->summaryValue(n, type); return n;
30 }
31
32 static float pt(const xAOD::Electron& e) { return e.pt(); }
33 static float eta(const xAOD::Electron& e) { return e.eta(); }
34 static float theta(const xAOD::Electron& e) { return 2*std::atan(std::exp(-e.eta())); }
35 static float phi(const xAOD::Electron& e) { return e.phi(); }
36
37 static float m(const xAOD::Electron& e) { return e.m(); }
38
39 static float z0(const xAOD::Electron& e) { return e.trackParticle()->z0() + e.trackParticle()->vz(); }
40 static float d0(const xAOD::Electron& e) { return e.trackParticle()->d0(); }
41
42 static float qOverP(const xAOD::Electron& e) { return e.trackParticle()->qOverP(); }
43
46 static float p(const xAOD::Electron& e) {
47 if ( e.trackParticle()->qOverP()==0 ) throw std::runtime_error( "divide by 0 - track qOverP() is 0" );
48 return 1/e.trackParticle()->qOverP();
49 }
50
51 static float E(const xAOD::Electron& e) { return e.e(); }
52
53 static float ET(const xAOD::Electron& e) { return e.e()*std::sin(theta(e)); }
54
55
56#if 0
60 static float dphi(const xAOD::Electron& e) { return std::sqrt(e.trackParticle()->definingParametersCovMatrix()(Trk::phi0,Trk::phi0)); }
61 static float dtheta(const xAOD::Electron& e) { return std::sqrt(e.trackParticle()->definingParametersCovMatrix()(Trk::theta,Trk::theta)); }
62 static float dqOverP(const xAOD::Electron& e) { return std::sqrt(e.trackParticle()->definingParametersCovMatrix()(Trk::qOverP,Trk::qOverP)); }
63
64 static float deta(const xAOD::Electron& e) { return 0.5*dtheta(e)/(std::cos(0.5*theta(e))*std::cos(0.5*theta(e))*std::tan(0.5*theta(e))); } // ???? CHECK THIS <<--
65
66 static float dz0(const xAOD::Electron& e) { return std::sqrt(e.trackParticle()->definingParametersCovMatrix()(Trk::z0,Trk::z0)); }
67 static float dd0(const xAOD::Electron& e) { return std::sqrt(e.trackParticle()->definingParametersCovMatrix()(Trk::d0,Trk::d0)); }
68
69 static float dpt(const xAOD::Electron& e) {
70 double th = theta(e);
71 double dth = dtheta(e);
72 double sintheta = std::sin(th);
73 double costheta = std::cos(th);
74 double p_ = p(e);
75 double dqovp = dqOverP(e);
76 double dpt2 = (p_*p_*sintheta)*(p_*p_*sintheta)*dqovp*dqovp + (p_*costheta)*(p_*costheta)*dth*dth - 2*(p_*p_*sintheta)*(p_*costheta)*covthetaOvP(e);
77 if ( dpt2>0 ) return std::sqrt( dpt2 );
78 return 0;
79 }
80
81 static float covthetaOvP(const xAOD::Electron& e) { return e.trackParticle()->definingParametersCovMatrix()(Trk::qOverP,Trk::theta); };
82
83 static float chi2(const xAOD::Electron& e) { return e.trackParticle()->chiSquared(); }
84 static float ndof(const xAOD::Electron& e) { return e.trackParticle()->numberDoF(); }
85
86 static uint8_t hasValidTime(const xAOD::Electron& e) { return e.trackParticle()->hasValidTime(); }
87 static float time(const xAOD::Electron& e) { return e.trackParticle()->time(); }
88
89 // static float pTsig(const xAOD::Electron& t) { return t.charge() ? std::copysign( t.pt(), t.charge() ) : 0.; }
90 // static float z0SinTheta(const xAOD::Electron& t) { return z0( p ) * std::sin( theta( p ) ); }
91
92#endif
93
94 template<typename U>
95 static void addChildren( const xAOD::Electron& e, std::vector<U>& v ) { v.emplace_back( e.trackParticle() ); }
96
97};
98
99
100
101
102#endif // IDTPM2_ELECTRONTRAITS_H
103
104
105
106
107
108
109
Scalar theta() const
theta method
Class describing an electron.
@ 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.
SummaryType
Enumerates the different types of information stored in Summary.
Electron_v1 Electron
Definition of the current "egamma version".
Definition Electron.h:17
raw track traits - use for the TrackParticle by default, specialise for anything else,...
Definition TrackTraits.h:47
static uint8_t hasValidTime(const T &)
Definition TrackTraits.h:82
static float deta(const T &)
Definition TrackTraits.h:68
static float time(const T &)
Definition TrackTraits.h:83
static float chi2(const T &)
Definition TrackTraits.h:79
static float dqOverP(const T &)
Definition TrackTraits.h:66
static float p(const T &)
Definition TrackTraits.h:56
static float dphi(const T &)
Definition TrackTraits.h:64
static float dz0(const T &)
Definition TrackTraits.h:70
static float dpt(const T &)
Definition TrackTraits.h:73
static float ndof(const T &)
Definition TrackTraits.h:80
static float dd0(const T &)
Definition TrackTraits.h:71
static float dtheta(const T &)
Definition TrackTraits.h:65
static float covthetaOvP(const T &)
Definition TrackTraits.h:75
static float z0(const xAOD::Electron &e)
static uint8_t summary_value(const xAOD::Electron &e, xAOD::SummaryType type)
static float m(const xAOD::Electron &e)
static float theta(const xAOD::Electron &e)
static float E(const xAOD::Electron &e)
static float ET(const xAOD::Electron &e)
static float eta(const xAOD::Electron &e)
static void addChildren(const xAOD::Electron &e, std::vector< U > &v)
static float p(const xAOD::Electron &e)
is this really the best way to do it ?
static float pt(const xAOD::Electron &e)
static float qOverP(const xAOD::Electron &e)
static float phi(const xAOD::Electron &e)
static float d0(const xAOD::Electron &e)