3 |
|
|
4 |
|
#include "Particle.h" |
5 |
|
|
6 |
+ |
/** |
7 |
+ |
* @short electron class |
8 |
+ |
* @author Thomas Peiffer |
9 |
+ |
*/ |
10 |
+ |
|
11 |
|
class Electron : public Particle{ |
12 |
|
|
13 |
|
public: |
41 |
|
m_EcalEnergy=0; |
42 |
|
m_mvaTrigV0=0; |
43 |
|
m_mvaNonTrigV0=0; |
44 |
+ |
m_AEff=0; |
45 |
|
}; |
46 |
|
|
47 |
|
~Electron(){ |
48 |
|
}; |
49 |
|
|
50 |
< |
float vertex_x(){return m_vertex_x;} |
51 |
< |
float vertex_y(){return m_vertex_y;} |
52 |
< |
float vertex_z(){return m_vertex_z;} |
53 |
< |
float supercluster_eta(){return m_supercluster_eta;} |
54 |
< |
float supercluster_phi(){return m_supercluster_phi;} |
55 |
< |
float dB(){return m_dB;} |
56 |
< |
//float particleIso(){return m_particleIso;} |
57 |
< |
float neutralHadronIso(){return m_neutralHadronIso;} |
58 |
< |
float chargedHadronIso(){return m_chargedHadronIso;} |
59 |
< |
float photonIso(){return m_photonIso;} |
60 |
< |
float trackIso(){return m_trackIso;} |
61 |
< |
float puChargedHadronIso(){return m_puChargedHadronIso;} |
62 |
< |
int gsfTrack_trackerExpectedHitsInner_numberOfLostHits(){return m_gsfTrack_trackerExpectedHitsInner_numberOfLostHits;} |
63 |
< |
float gsfTrack_px(){return m_gsfTrack_px;} |
64 |
< |
float gsfTrack_py(){return m_gsfTrack_py;} |
65 |
< |
float gsfTrack_pz(){return m_gsfTrack_pz;} |
66 |
< |
float gsfTrack_vx(){return m_gsfTrack_vx;} |
67 |
< |
float gsfTrack_vy(){return m_gsfTrack_vy;} |
68 |
< |
float gsfTrack_vz(){return m_gsfTrack_vz;} |
69 |
< |
bool passconversionveto(){return m_passconversionveto;} |
70 |
< |
float dEtaIn(){return m_dEtaIn;} |
71 |
< |
float dPhiIn(){return m_dPhiIn;} |
72 |
< |
float sigmaIEtaIEta(){return m_sigmaIEtaIEta;} |
73 |
< |
float HoverE(){return m_HoverE;} |
74 |
< |
float fbrem(){return m_fbrem;} |
75 |
< |
float EoverPIn(){return m_EoverPIn;} |
76 |
< |
float EcalEnergy(){return m_EcalEnergy;} |
77 |
< |
float mvaTrigV0(){return m_mvaTrigV0;} |
78 |
< |
float mvaNonTrigV0(){return m_mvaNonTrigV0;} |
50 |
> |
float vertex_x() const{return m_vertex_x;} |
51 |
> |
float vertex_y() const{return m_vertex_y;} |
52 |
> |
float vertex_z() const{return m_vertex_z;} |
53 |
> |
float supercluster_eta() const{return m_supercluster_eta;} |
54 |
> |
float supercluster_phi() const{return m_supercluster_phi;} |
55 |
> |
float dB() const{return m_dB;} |
56 |
> |
//float particleIso() const{return m_particleIso;} |
57 |
> |
float neutralHadronIso() const{return m_neutralHadronIso;} |
58 |
> |
float chargedHadronIso() const{return m_chargedHadronIso;} |
59 |
> |
float photonIso() const{return m_photonIso;} |
60 |
> |
float trackIso() const{return m_trackIso;} |
61 |
> |
float puChargedHadronIso() const{return m_puChargedHadronIso;} |
62 |
> |
int gsfTrack_trackerExpectedHitsInner_numberOfLostHits() const{return m_gsfTrack_trackerExpectedHitsInner_numberOfLostHits;} |
63 |
> |
float gsfTrack_px() const{return m_gsfTrack_px;} |
64 |
> |
float gsfTrack_py() const{return m_gsfTrack_py;} |
65 |
> |
float gsfTrack_pz() const{return m_gsfTrack_pz;} |
66 |
> |
float gsfTrack_vx() const{return m_gsfTrack_vx;} |
67 |
> |
float gsfTrack_vy() const{return m_gsfTrack_vy;} |
68 |
> |
float gsfTrack_vz() const{return m_gsfTrack_vz;} |
69 |
> |
bool passconversionveto() const{return m_passconversionveto;} |
70 |
> |
float dEtaIn() const{return m_dEtaIn;} |
71 |
> |
float dPhiIn() const{return m_dPhiIn;} |
72 |
> |
float sigmaIEtaIEta() const{return m_sigmaIEtaIEta;} |
73 |
> |
float HoverE() const{return m_HoverE;} |
74 |
> |
float fbrem() const{return m_fbrem;} |
75 |
> |
float EoverPIn() const{return m_EoverPIn;} |
76 |
> |
float EcalEnergy() const{return m_EcalEnergy;} |
77 |
> |
float mvaTrigV0() const{return m_mvaTrigV0;} |
78 |
> |
float mvaNonTrigV0() const{return m_mvaNonTrigV0;} |
79 |
> |
float AEff() const{return m_AEff;} |
80 |
|
|
81 |
|
|
82 |
|
void set_vertex_x(float x){m_vertex_x=x;} |
108 |
|
void set_EcalEnergy(float x){m_EcalEnergy=x;} |
109 |
|
void set_mvaTrigV0(float x){m_mvaTrigV0=x;} |
110 |
|
void set_mvaNonTrigV0(float x){m_mvaNonTrigV0=x;} |
111 |
+ |
void set_AEff(float x){m_AEff=x;} |
112 |
|
|
113 |
< |
float gsfTrack_dxy_vertex(const float point_x, const float point_y){ |
113 |
> |
float gsfTrack_dxy_vertex(const float point_x, const float point_y) const{ |
114 |
|
return ( - (m_gsfTrack_vx-point_x) * m_gsfTrack_py + (m_gsfTrack_vy-point_y) * m_gsfTrack_px ) / sqrt(m_gsfTrack_px*m_gsfTrack_px+m_gsfTrack_py*m_gsfTrack_py); |
115 |
|
}; |
116 |
< |
float gsfTrack_dz_vertex(const float point_x, const float point_y, const float point_z){ |
116 |
> |
float gsfTrack_dz_vertex(const float point_x, const float point_y, const float point_z) const{ |
117 |
|
return (m_gsfTrack_vz-point_z) - ((m_gsfTrack_vx-point_x)*m_gsfTrack_px+(m_gsfTrack_vy-point_y)*m_gsfTrack_py)/(m_gsfTrack_px*m_gsfTrack_px+m_gsfTrack_py*m_gsfTrack_py) * m_gsfTrack_pz; |
118 |
|
} |
119 |
< |
float relIso(){ |
119 |
> |
float relIso() const{ |
120 |
> |
return ( m_chargedHadronIso + m_neutralHadronIso + m_photonIso ) / pt(); |
121 |
> |
} |
122 |
> |
float relIsodb() const{ |
123 |
|
return ( m_chargedHadronIso + std::max( 0.0, m_neutralHadronIso + m_photonIso - 0.5*m_puChargedHadronIso ) ) / pt(); |
124 |
|
} |
125 |
+ |
float relIsorho(const double rho) const{ |
126 |
+ |
return ( m_chargedHadronIso + std::max( 0.0, m_neutralHadronIso + m_photonIso - rho*m_AEff ) ) / pt(); |
127 |
+ |
} |
128 |
+ |
|
129 |
+ |
enum E_eleIDType{ |
130 |
+ |
e_Tight, |
131 |
+ |
e_Medium, |
132 |
+ |
e_Loose, |
133 |
+ |
e_Veto |
134 |
+ |
}; |
135 |
+ |
|
136 |
+ |
|
137 |
+ |
bool eleID(E_eleIDType type){ |
138 |
+ |
|
139 |
+ |
bool pass=false; |
140 |
+ |
|
141 |
+ |
|
142 |
+ |
float cuts_barrel[5]={0,0,0,0,0}; |
143 |
+ |
float cuts_endcap[5]={0,0,0,0,0}; |
144 |
+ |
|
145 |
+ |
if(type==e_Tight){ |
146 |
+ |
cuts_barrel[0]=0.004; cuts_barrel[1]=0.03; cuts_barrel[2]=0.01; cuts_barrel[3]=0.12; cuts_barrel[4]=0.05; |
147 |
+ |
cuts_endcap[0]=0.005; cuts_endcap[1]=0.02; cuts_endcap[2]=0.03; cuts_endcap[3]=0.10; cuts_endcap[4]=0.05; |
148 |
+ |
} |
149 |
+ |
if(type==e_Medium){ |
150 |
+ |
cuts_barrel[0]=0.004; cuts_barrel[1]=0.06; cuts_barrel[2]=0.01; cuts_barrel[3]=0.12; cuts_barrel[4]=0.05; |
151 |
+ |
cuts_endcap[0]=0.007; cuts_endcap[1]=0.03; cuts_endcap[2]=0.03; cuts_endcap[3]=0.10; cuts_endcap[4]=0.05; |
152 |
+ |
} |
153 |
+ |
if(type==e_Loose){ |
154 |
+ |
cuts_barrel[0]=0.007; cuts_barrel[1]=0.15; cuts_barrel[2]=0.01; cuts_barrel[3]=0.12; cuts_barrel[4]=0.05; |
155 |
+ |
cuts_endcap[0]=0.009; cuts_endcap[1]=0.10; cuts_endcap[2]=0.03; cuts_endcap[3]=0.10; cuts_endcap[4]=0.05; |
156 |
+ |
} |
157 |
+ |
if(type==e_Veto){ |
158 |
+ |
cuts_barrel[0]=0.007; cuts_barrel[1]=0.8; cuts_barrel[2]=0.01; cuts_barrel[3]=0.15; cuts_barrel[4]=std::numeric_limits<float>::infinity(); |
159 |
+ |
cuts_endcap[0]=0.01; cuts_endcap[1]=0.7; cuts_endcap[2]=0.03; cuts_endcap[3]=std::numeric_limits<float>::infinity(); cuts_endcap[4]=std::numeric_limits<float>::infinity(); |
160 |
+ |
} |
161 |
+ |
|
162 |
+ |
float trackMomentumAtVtx = EcalEnergy()/EoverPIn(); |
163 |
+ |
|
164 |
+ |
if(fabs(supercluster_eta())<1.4442){ |
165 |
+ |
if(dEtaIn()<cuts_barrel[0] && dPhiIn()<cuts_barrel[1] && sigmaIEtaIEta()<cuts_barrel[2] && HoverE()<cuts_barrel[3] && fabs(1./EcalEnergy()-1./trackMomentumAtVtx)<cuts_barrel[4]) pass=true; |
166 |
+ |
} |
167 |
+ |
else if( fabs(supercluster_eta())>1.5660){ |
168 |
+ |
if(dEtaIn()<cuts_endcap[0] && dPhiIn()<cuts_endcap[1] && sigmaIEtaIEta()<cuts_endcap[2] && HoverE()<cuts_endcap[3] && fabs(1./EcalEnergy()-1./trackMomentumAtVtx)<cuts_endcap[4]) pass=true; |
169 |
+ |
} |
170 |
+ |
|
171 |
+ |
return pass; |
172 |
+ |
|
173 |
+ |
} |
174 |
|
|
175 |
|
private: |
176 |
|
float m_vertex_x; |
202 |
|
float m_EcalEnergy; |
203 |
|
float m_mvaTrigV0; |
204 |
|
float m_mvaNonTrigV0; |
205 |
+ |
float m_AEff; |
206 |
|
|
207 |
|
}; |
208 |
|
|