Go to the documentation of this file.00001 #ifndef CastorReco_CastorTower_h
00002 #define CastorReco_CastorTower_h
00003
00012 #include <vector>
00013 #include <memory>
00014 #include "DataFormats/Math/interface/Point3D.h"
00015
00016 #include "DataFormats/Common/interface/RefProd.h"
00017 #include "DataFormats/Common/interface/Ref.h"
00018 #include "DataFormats/Common/interface/RefVector.h"
00019 #include "DataFormats/Common/interface/SortedCollection.h"
00020
00021 #include "DataFormats/HcalRecHit/interface/CastorRecHit.h"
00022
00023 #include "DataFormats/Candidate/interface/LeafCandidate.h"
00024
00025 namespace reco {
00026
00027 class CastorTower : public LeafCandidate {
00028 public:
00029
00030 typedef edm::SortedCollection<CastorRecHit> CastorRecHitCollection;
00031 typedef edm::Ref<CastorRecHitCollection> CastorRecHitRef;
00032 typedef edm::RefVector<CastorRecHitCollection> CastorRecHitRefs;
00033
00034
00035
00036 CastorTower() : energy_(0.), position_(ROOT::Math::XYZPoint(0.,0.,0.)), emEnergy_(0.), hadEnergy_(0.), fem_(0.), depth_(0.), fhot_(0.) { }
00037
00038
00039 CastorTower(const double energy, const ROOT::Math::XYZPoint& position, const double emEnergy, const double hadEnergy, const double fem,
00040 const double depth, const double fhot, const CastorRecHitRefs& usedRecHits);
00041
00043 virtual ~CastorTower();
00044
00046 ROOT::Math::XYZPoint position() const { return position_; }
00047
00049 double emEnergy() const { return emEnergy_; }
00050
00052 double hadEnergy() const { return hadEnergy_; }
00053
00055 double fem() const { return fem_; }
00056
00058 double depth() const { return depth_; }
00059
00061 double fhot() const { return fhot_; }
00062
00064 CastorRecHitRefs getUsedRecHits() const { return usedRecHits_; }
00065
00067 CastorRecHitRefs::iterator rechitsBegin() const { return usedRecHits_.begin(); }
00068
00070 CastorRecHitRefs::iterator rechitsEnd() const { return usedRecHits_.end(); }
00071
00073 size_t rechitsSize() const { return usedRecHits_.size(); }
00074
00076 void add( const CastorRecHitRef& rechit ) { usedRecHits_.push_back( rechit ); }
00077
00079 bool operator >=(const CastorTower& rhs) const { return (energy_>=rhs.energy_); }
00080
00082 bool operator > (const CastorTower& rhs) const { return (energy_> rhs.energy_); }
00083
00085 bool operator <=(const CastorTower& rhs) const { return (energy_<=rhs.energy_); }
00086
00088 bool operator < (const CastorTower& rhs) const { return (energy_< rhs.energy_); }
00089
00091 double xPos() const { return position_.x(); }
00092
00094 double yPos() const { return position_.y(); }
00095
00097 double rho() const { return position_.rho(); }
00098
00099 private:
00100
00102 double energy_;
00103
00105 ROOT::Math::XYZPoint position_;
00106
00108 double emEnergy_;
00109
00111 double hadEnergy_;
00112
00114 double fem_;
00115
00117 double depth_;
00118
00120 double fhot_;
00121
00123 CastorRecHitRefs usedRecHits_;
00124 };
00125
00127 typedef std::vector<CastorTower> CastorTowerCollection;
00128
00129
00130 typedef edm::Ref<CastorTowerCollection> CastorTowerRef;
00131
00133 typedef edm::RefVector<CastorTowerCollection> CastorTowerRefVector;
00134
00136 typedef CastorTowerRefVector::iterator CastorTower_iterator;
00137
00138 }
00139
00140 #endif