Go to the documentation of this file.00001 #ifndef EgammaReco_SuperCluster_h
00002 #define EgammaReco_SuperCluster_h
00003
00013 #include "DataFormats/Math/interface/Point3D.h"
00014 #include "DataFormats/CaloRecHit/interface/CaloCluster.h"
00015 #include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h"
00016 #include "DataFormats/DetId/interface/DetId.h"
00017 #include <Rtypes.h>
00018
00019 namespace reco {
00020 class SuperCluster : public CaloCluster {
00021 public:
00022
00023 typedef math::XYZPoint Point;
00024
00026 SuperCluster() : CaloCluster(0., Point(0.,0.,0.)), preshowerEnergy_(0), rawEnergy_(-1.), phiWidth_(0), etaWidth_(0) {}
00027
00029 SuperCluster( double energy, const Point& position );
00030
00031 SuperCluster( double energy, const Point& position,
00032 const CaloClusterPtr & seed,
00033 const CaloClusterPtrVector& clusters,
00034 double Epreshower=0.,
00035 double phiWidth=0., double etaWidth=0. );
00036
00037
00038 SuperCluster( double energy, const Point& position,
00039 const CaloClusterPtr & seed,
00040 const CaloClusterPtrVector& clusters,
00041 const CaloClusterPtrVector& preshowerClusters,
00042 double Epreshower=0.,
00043 double phiWidth=0., double etaWidth=0. );
00044
00046 double rawEnergy() const;
00047
00049 double preshowerEnergy() const { return preshowerEnergy_; }
00050
00052 double phiWidth() const { return phiWidth_; }
00053 double etaWidth() const { return etaWidth_; }
00054
00055
00056 void setPreshowerEnergy( double preshowerEnergy ) { preshowerEnergy_ = preshowerEnergy; };
00057 void setPhiWidth( double pw ) { phiWidth_ = pw; }
00058 void setEtaWidth( double ew ) { etaWidth_ = ew; }
00059
00061 const CaloClusterPtr & seed() const { return seed_; }
00062
00064 CaloCluster_iterator clustersBegin() const { return clusters_.begin(); }
00065
00067 CaloCluster_iterator clustersEnd() const { return clusters_.end(); }
00068
00070 CaloCluster_iterator preshowerClustersBegin() const { return preshowerClusters_.begin(); }
00071
00073 CaloCluster_iterator preshowerClustersEnd() const { return preshowerClusters_.end(); }
00074
00076 size_t clustersSize() const { return clusters_.size(); }
00077
00079
00080
00082 void setSeed( const CaloClusterPtr & r ) { seed_ = r; }
00083
00085 void addCluster( const CaloClusterPtr & r ) { clusters_.push_back( r ); }
00086
00088 void addPreshowerCluster( const CaloClusterPtr & r ) { preshowerClusters_.push_back( r ); }
00089
00096 void setPreshowerPlanesStatus(const uint32_t& status){
00097 uint32_t flags = flags_ & flagsMask_;
00098 flags_= flags | (status << flagsOffset_);
00099 }
00100
00106 const int getPreshowerPlanesStatus() const {
00107 return (flags_>>flagsOffset_);
00108 }
00109
00110 private:
00111
00113 CaloClusterPtr seed_;
00114
00116 CaloClusterPtrVector clusters_;
00117
00119 CaloClusterPtrVector preshowerClusters_;
00120
00122
00123
00124 double preshowerEnergy_;
00125
00126 mutable Double32_t rawEnergy_;
00127
00128 Double32_t phiWidth_;
00129 Double32_t etaWidth_;
00130
00131 };
00132
00133 }
00134 #endif