00001 #ifndef _MANTREE_MELECTRON_H__
00002 #define _MANTREE_MELECTRON_H__
00003
00004 #include "manTree/MParticle.h"
00005
00006 #include <iosfwd>
00007 #include <string>
00008
00009 #ifdef _ATHENA_CLASSES__
00010 #include "egammaEvent/Electron.h"
00011 class IPAUcaloIsolationTool;
00012 #endif
00013
00014 namespace manchester {
00015
00016 class MInDetTrack;
00017
00018 const unsigned int AuthorUnknown = 0x0;
00019 const unsigned int AuthorElectron = 0x1;
00020 const unsigned int AuthorSofte = 0x2;
00021 const unsigned int AuthorPhoton = 0x4;
00022 const unsigned int AuthorFrwd = 0x8;
00023
00025 class MElectron : public MParticle {
00026 public:
00028 MElectron();
00029
00031 MElectron(const MElectron& em);
00032
00033 #ifdef _ATHENA_CLASSES__
00035 MElectron(const Analysis::Electron& em, IPAUcaloIsolationTool* isotool=0);
00037 MElectron(const Analysis::Electron& em, std::vector<double> isovalues);
00038 #endif
00039
00040 virtual ~MElectron();
00041
00043 Double_t EoverP() const;
00044
00046 void SetEoverP(const double ep);
00047
00049 Bool_t IsLoose() const;
00050
00052 Bool_t IsMedium() const;
00053
00055 Bool_t IsTight() const;
00056
00058 Bool_t IsRobustLoose() const;
00059
00061 Bool_t IsRobustMedium() const;
00062
00064 Bool_t IsRobusterTight() const;
00065
00067 Bool_t IsLoosePlusPlus() const;
00068
00070 Bool_t IsMediumPlusPlus() const;
00071
00073 Bool_t IsTightPlusPlus() const;
00074
00076 unsigned int Author() const;
00077
00079 UInt_t IsEM() const;
00080
00082 UInt_t GoodOQ() const;
00083
00085 void SetAuthor(unsigned int author);
00086
00088 Double_t Et20Cone() const;
00090 Double_t CorrectedEt20Cone() const;
00092 Double_t DataCorrectedEt20Cone() const;
00093
00095 Double_t Et30Cone() const;
00097 Double_t CorrectedEt30Cone() const;
00099 Double_t DataCorrectedEt30Cone() const;
00100
00102 Double_t Et40Cone() const;
00104 Double_t CorrectedEt40Cone() const;
00106 Double_t DataCorrectedEt40Cone() const;
00107
00109 Double_t Et45Cone() const;
00110
00112 Bool_t TopTriggerMatched() const;
00113
00115 void SetTopTriggerMatched(bool matched);
00116
00118 const MInDetTrack* InDetTrack() const;
00119
00121 const TLorentzVector* Cluster() const;
00122
00124 void SetCluster(const TLorentzVector& newclus);
00125
00127 const TLorentzVector ClusTrkVec() const;
00128
00130 Float_t EtaS2() const;
00131
00133 Float_t EtaP() const;
00134
00136 Float_t METWpx() const {return m_met_weights[0];}
00137
00139 Float_t METWpy() const {return m_met_weights[1];}
00140
00142 Float_t METWet() const {return m_met_weights[2];}
00143
00145 void SetMETWeights(const float wpx, const float wpy, const float wet);
00147 void SetMETWeights(const std::vector<double>& weights);
00148
00150 virtual std::string Type() const;
00151
00152 MElectron& operator=(const MElectron& p);
00153
00155 void SetIDTrkVtxParams(const float d0, const float theta, const float phi, const float z0);
00156
00158 void SetIDTrkBSParams(const float d0, const float theta, const float phi, const float z0);
00159
00160 protected:
00162 virtual void Reset();
00163
00164 private:
00166 double m_eoverp;
00167
00169 bool m_isLoose;
00170
00172 bool m_isMedium;
00173
00175 bool m_isTight;
00176
00178 bool m_isRobustLoose;
00179
00181 bool m_isRobustMedium;
00182
00184 bool m_isRobusterTight;
00185
00187 bool m_isLoosePlusPlus;
00188
00190 bool m_isMediumPlusPlus;
00191
00193 bool m_isTightPlusPlus;
00194
00196 unsigned int m_author;
00197
00199 unsigned int m_isem;
00200
00202 unsigned int m_goodoq;
00203
00205 Double_t m_etcone20;
00206 Double_t m_etcone30;
00207 Double_t m_etcone40;
00208 Double_t m_etcone45;
00210 Double_t m_ptcorr_etcone20;
00211 Double_t m_ptcorr_etcone30;
00212 Double_t m_ptcorr_etcone40;
00213
00215 MInDetTrack* m_indetTrack;
00216
00218 TLorentzVector* m_caloCluster;
00219
00221 Float_t m_etas2;
00222
00224 Float_t m_etap;
00225
00227 bool m_toptrigger_match;
00228
00230 Float_t m_met_weights[3];
00231
00232 #ifndef DOXYGEN_IGNORE
00233 ClassDef(MElectron, 18);
00234 #endif
00235
00236 };
00237
00238 }
00239
00240 #endif