00001 #ifndef XANAElectronCandidate_h
00002 #define XANAElectronCandidate_h
00003
00012 class XANASuperCluster;
00013 class XANACluster;
00014 class XANAElectronTrack;
00015 #include <CLHEP/Vector/LorentzVector.h>
00016 #include <CLHEP/Geometry/Point3D.h>
00017 #include <CLHEP/Matrix/SymMatrix.h>
00018 #include <TRefArray.h>
00019 #include <TRef.h>
00020 #include <TObject.h>
00021 #include <Rtypes.h>
00022
00023 using namespace CLHEP;
00024 using namespace HepGeom;
00025
00026 class XANAElectronCandidate : public TObject {
00027
00028 public:
00029
00030 XANAElectronCandidate();
00031
00033 XANAElectronCandidate(HepLorentzVector momentum,
00034 HepLorentzVector superClusterMomentum, HepLorentzVector trackMomentumAtCalo,
00035 Float_t superClusterEnergy, HepPoint3D superClusterPosition, HepPoint3D trackPositionAtCalo,
00036 Float_t eSuperClusterOverP, Float_t eSeedClusterOverP, Float_t deltaEtaSuperCluster,
00037 Float_t deltaPhiSuperCluster, Float_t deltaEtaSeedCluster, Float_t deltaPhiSeedCluster,
00038 Float_t trackIsolation, Float_t caloIsolation, Float_t hadOverEm, std::string algoName);
00039
00040 virtual ~XANAElectronCandidate();
00041
00042
00043
00044
00046
00048
00050
00052
00054
00055
00056
00058
00060
00062
00064
00066
00068
00070
00072
00074
00076
00078
00080
00082
00083
00084 Float_t getTrackIsolation() const {return trackIsolation_;}
00086 Float_t getCaloIsolation() const {return caloIsolation_;}
00088 Float_t getHadronicOverEm() const {return hadOverEm_;}
00089
00091 std::string getAlgoName() const {return std::string(algoName_);}
00092 char *getCharAlgoName() const {return algoName_;}
00093
00094
00095 void setMomentumAtVertex(HepLorentzVector momentum) {momentum_=momentum;}
00096 void setCharge(Short_t q) {charge_=q;}
00097 void setSuperClusterMomentum(HepLorentzVector momentum) {clusterMomentum_=momentum;}
00098 void setTrackMomentumAtCalo(HepLorentzVector momentum) {trackMomentumAtCalo_=momentum;}
00099 void setSuperClusterEnergy(Float_t superClusterEnergy) {superClusterEnergy_=superClusterEnergy;}
00100 void setSuperClusterPosition(HepPoint3D superClusterPosition) {superClusterPosition_=superClusterPosition;}
00101 void setTrackPositionAtCalo(HepPoint3D trackPositionAtCalo) {trackPositionAtCalo_=trackPositionAtCalo;}
00102 void setESuperClusterOverP(Float_t eSuperClusterOverP) {eSuperClusterOverP_=eSuperClusterOverP;}
00103 void setESeedClusterOverP(Float_t eSeedClusterOverP) {eSeedClusterOverP_=eSeedClusterOverP;}
00104 void setDeltaEtaSuperClusterAtVtx(Float_t deltaEtaSuperCluster) {deltaEtaSuperClusterAtVtx_=deltaEtaSuperCluster;}
00105 void setDeltaEtaSuperClusterAtCalo(Float_t deltaEtaSuperCluster) {deltaEtaSuperClusterAtCalo_=deltaEtaSuperCluster;}
00106 void setDeltaEtaSeedClusterAtCalo(Float_t deltaEtaSeedCluster) {deltaEtaSeedClusterAtCalo_=deltaEtaSeedCluster;}
00107 void setDeltaPhiSuperClusterAtVtx(Float_t deltaPhiSuperCluster) {deltaPhiSuperClusterAtVtx_=deltaPhiSuperCluster;}
00108 void setDeltaPhiSuperClusterAtCalo(Float_t deltaPhiSuperCluster) {deltaPhiSuperClusterAtCalo_=deltaPhiSuperCluster;}
00109 void setDeltaPhiSeedClusterAtCalo(Float_t deltaPhiSeedCluster) {deltaPhiSeedClusterAtCalo_=deltaPhiSeedCluster;}
00110 void setTrackIsolation(Float_t trackIsolation) {trackIsolation_=trackIsolation;}
00111 void setCaloIsolation(Float_t caloIsolation) {caloIsolation_=caloIsolation;}
00112 void setHadronicOverEm(Float_t hadOverEm) {hadOverEm_=hadOverEm;}
00113 void setAlgoName(std::string algoName) {sprintf(algoName_,algoName.c_str());}
00114
00115 void clear();
00116
00117
00118 XANAElectronCandidate(const XANAElectronCandidate &right);
00119
00120
00121 const XANAElectronCandidate &operator=(const XANAElectronCandidate &right);
00122
00123
00124 bool operator==(const XANAElectronCandidate&) const;
00125 bool operator<(const XANAElectronCandidate&) const;
00126
00127
00128 void setSuperCluster(XANASuperCluster *clu);
00130 XANASuperCluster *getSuperCluster() const {return (XANASuperCluster *)(superCluster_.GetObject());}
00132 XANACluster *getSeedCluster() const {return (XANACluster *)(seedCluster_.GetObject());}
00134 Short_t getNumberOfBrems() {return numberOfBrems_;}
00136 TRefArray *getBremClusters() const {return brems_;}
00137 void setElectronTrack(XANAElectronTrack *track);
00139 XANAElectronTrack *getElectronTrack() const {return (XANAElectronTrack *)(track_.GetObject());}
00140
00142 Bool_t IsUsed() const {return locked_;}
00143
00144 protected:
00145
00146
00148
00150
00151
00152
00154
00156
00158
00160
00162
00163
00164
00166
00168
00169
00171 Float_t deltaEtaSuperClusterAtCalo_;
00173 Float_t deltaEtaSuperClusterAtVtx_;
00175 Float_t deltaEtaSeedClusterAtCalo_;
00177 Float_t deltaPhiSuperClusterAtCalo_;
00179 Float_t deltaPhiSuperClusterAtVtx_;
00181 Float_t deltaPhiSeedClusterAtCalo_;
00182
00183
00184
00185 Float_t trackIsolation_;
00187 Float_t caloIsolation_;
00189 Float_t hadOverEm_;
00190
00191
00193
00195
00197
00199
00201
00203
00204 char *algoName_;
00205
00206 private:
00207
00208 const static Int_t strLen_;
00209 Bool_t locked_;
00210 void lock() {locked_ = true;}
00211 void unlock() { locked_ = false;}
00212
00213 ClassDef(XANAElectronCandidate,1)
00214
00215 };
00216
00217 #endif
00218
00219
00220
00221
00222
00223
00224