CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/DataFormats/EgammaReco/interface/SuperCluster.h

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     // to be merged in the previous one? -- FIXME
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     //Assign new variables to supercluster
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     //std::vector<DetId> getHitsByDetId() const { return usedHits_; }
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     //std::vector<DetId> usedHits_;
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