CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CaloCluster.h
Go to the documentation of this file.
1 #ifndef DataFormats_CaloRecHit_CaloCluster_h
2 #define DataFormats_CaloRecHit_CaloCluster_h
3 
20 
22 
23 #include <vector>
24 #include <string>
25 #include <iostream>
26 
27 namespace reco {
28 
29 
30  class CaloCluster {
31  public:
32 
33  enum AlgoId { island = 0, hybrid = 1, fixedMatrix = 2, dynamicHybrid = 3, multi5x5 = 4, particleFlow = 5, undefined = 1000};
34 
35  // super-cluster flags
36  enum SCFlags { cleanOnly = 0, common = 100, uncleanOnly = 200 };
37 
38  //FIXME:
39  //temporary fix... to be removed before 310 final
40  typedef AlgoId AlgoID ;
41 
44  energy_(0),
45  algoID_( undefined ), flags_(0) {}
46 
49  energy_(0),
50  algoID_( algoID ), flags_(0) {}
51 
53  const math::XYZPoint& position,
54  const CaloID& caloID) :
55  energy_ (energy), position_ (position), caloID_(caloID),algoID_( undefined ), flags_(0) {}
56 
57 
59  void reset();
60 
62  CaloCluster( double energy,
63  const math::XYZPoint& position ) :
64  energy_ (energy), position_ (position),algoID_( undefined ), flags_(0) {}
65 
66 
68  const math::XYZPoint& position,
69  const CaloID& caloID,
70  const AlgoID& algoID,
71  uint32_t flags = 0) :
72  energy_ (energy), position_ (position),
73  caloID_(caloID), algoID_(algoID) {
75  }
76 
78  const math::XYZPoint& position,
79  const CaloID& caloID,
80  const std::vector< std::pair< DetId, float > > &usedHitsAndFractions,
81  const AlgoId algoId,
82  const DetId seedId = DetId(0),
83  uint32_t flags = 0) :
84  energy_ (energy), position_ (position), caloID_(caloID),
85  hitsAndFractions_(usedHitsAndFractions), algoID_(algoId),seedId_(seedId){
87  }
88 
89  //FIXME:
91  CaloCluster( double energy,
92  const math::XYZPoint& position,
93  float chi2,
94  const std::vector<DetId > &usedHits,
95  const AlgoId algoId,
96  uint32_t flags = 0) :
97  energy_ (energy), position_ (position), algoID_(algoId)
98  {
99  hitsAndFractions_.reserve(usedHits.size());
100  for(size_t i = 0; i < usedHits.size(); i++) hitsAndFractions_.push_back(std::pair< DetId, float > ( usedHits[i],1.));
102  }
103 
104 
106  virtual ~CaloCluster() {}
107 
109  double energy() const { return energy_; }
110 
112  const math::XYZPoint & position() const { return position_; }
113 
115  bool operator >=(const CaloCluster& rhs) const {
116  return (energy_>=rhs.energy_);
117  }
118 
120  bool operator > (const CaloCluster& rhs) const {
121  return (energy_> rhs.energy_);
122  }
123 
125  bool operator <=(const CaloCluster& rhs) const {
126  return (energy_<=rhs.energy_);
127  }
128 
130  bool operator < (const CaloCluster& rhs) const {
131  return (energy_< rhs.energy_);
132  }
133 
135  bool operator==(const CaloCluster& rhs) const {
136  return (energy_ == rhs.energy_);
137  };
138 
140  double x() const { return position_.x(); }
141 
143  double y() const { return position_.y(); }
144 
146  double z() const { return position_.z(); }
147 
149  double eta() const { return position_.eta(); }
150 
152  double phi() const { return position_.phi(); }
153 
155  size_t size() const { return hitsAndFractions_.size(); }
156 
158  AlgoId algo() const { return algoID_; }
159  AlgoID algoID() const { return algo(); }
160 
161  uint32_t flags() const { return flags_&flagsMask_; }
162  void setFlags( uint32_t flags) {
163  uint32_t reserved = (flags_ & ~flagsMask_);
164  flags_ = (reserved ) | (flags & flagsMask_);
165  }
166  bool isInClean() const { return flags() < uncleanOnly; }
167  bool isInUnclean() const { return flags() >= common; }
168 
169  const CaloID& caloID() const {return caloID_;}
170 
171  void addHitAndFraction( DetId id, float fraction ) {
172  hitsAndFractions_.push_back( std::pair<DetId, float>(id, fraction) );
173  }
174 
178  const std::vector< std::pair<DetId, float> > & hitsAndFractions() const { return hitsAndFractions_; }
179 
181  std::string printHitAndFraction(unsigned i) const;
182 
184  friend std::ostream& operator<<(std::ostream& out,
185  const CaloCluster& cluster);
186 
188  DetId seed() const { return seedId_; }
189 
190  protected:
191 
193  double energy_;
194 
197 
200 
201  // used hits by detId
202  std::vector< std::pair<DetId, float> > hitsAndFractions_;
203 
204  // cluster algorithm Id
206 
209 
213  uint32_t flags_;
214 
215  static const uint32_t flagsMask_ =0x0FFFFFFF;
216  static const uint32_t flagsOffset_=28;
217  };
218 
219 }
220 
221 #endif
const math::XYZPoint & position() const
cluster centroid position
Definition: CaloCluster.h:112
int i
Definition: DBlmapReader.cc:9
math::XYZPoint position_
cluster centroid position
Definition: CaloCluster.h:196
static const uint32_t flagsOffset_
Definition: CaloCluster.h:216
CaloID caloID_
bitmask for detector information
Definition: CaloCluster.h:199
bool isInUnclean() const
Definition: CaloCluster.h:167
void addHitAndFraction(DetId id, float fraction)
Definition: CaloCluster.h:171
double energy_
cluster energy
Definition: CaloCluster.h:193
AlgoID algoID() const
Definition: CaloCluster.h:159
friend std::ostream & operator<<(std::ostream &out, const CaloCluster &cluster)
print me
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:178
std::vector< std::pair< DetId, float > > hitsAndFractions_
Definition: CaloCluster.h:202
double z() const
z coordinate of cluster centroid
Definition: CaloCluster.h:146
bool operator>(const CaloCluster &rhs) const
comparison &gt; operator
Definition: CaloCluster.h:120
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:149
bool operator<(const CaloCluster &rhs) const
comparison &lt; operator
Definition: CaloCluster.h:130
AlgoId algo() const
algorithm identifier
Definition: CaloCluster.h:158
void setFlags(uint32_t flags)
Definition: CaloCluster.h:162
const CaloID & caloID() const
Definition: CaloCluster.h:169
uint32_t flags() const
Definition: CaloCluster.h:161
DetId seedId_
DetId of seed.
Definition: CaloCluster.h:208
double x() const
x coordinate of cluster centroid
Definition: CaloCluster.h:140
double energy() const
cluster energy
Definition: CaloCluster.h:109
bool operator>=(const CaloCluster &rhs) const
comparison &gt;= operator
Definition: CaloCluster.h:115
std::string printHitAndFraction(unsigned i) const
print hitAndFraction
Definition: CaloCluster.cc:17
bool isInClean() const
Definition: CaloCluster.h:166
CaloCluster(double energy, const math::XYZPoint &position)
constructor from values
Definition: CaloCluster.h:62
tuple out
Definition: dbtoconf.py:99
Definition: DetId.h:20
CaloCluster(double energy, const math::XYZPoint &position, const CaloID &caloID, const AlgoID &algoID, uint32_t flags=0)
Definition: CaloCluster.h:67
DetId seed() const
return DetId of seed
Definition: CaloCluster.h:188
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:13
CaloCluster()
default constructor. Sets energy and position to zero
Definition: CaloCluster.h:43
bool operator<=(const CaloCluster &rhs) const
comparison &lt;= operator
Definition: CaloCluster.h:125
size_t size() const
size in number of hits (e.g. in crystals for ECAL)
Definition: CaloCluster.h:155
CaloCluster(double energy, const math::XYZPoint &position, const CaloID &caloID, const std::vector< std::pair< DetId, float > > &usedHitsAndFractions, const AlgoId algoId, const DetId seedId=DetId(0), uint32_t flags=0)
Definition: CaloCluster.h:77
static const uint32_t flagsMask_
Definition: CaloCluster.h:215
double y() const
y coordinate of cluster centroid
Definition: CaloCluster.h:143
virtual ~CaloCluster()
destructor
Definition: CaloCluster.h:106
double phi() const
azimuthal angle of cluster centroid
Definition: CaloCluster.h:152
CaloCluster(AlgoID algoID)
constructor with algoId, to be used in all child classes
Definition: CaloCluster.h:48
CaloCluster(double energy, const math::XYZPoint &position, float chi2, const std::vector< DetId > &usedHits, const AlgoId algoId, uint32_t flags=0)
temporary compatibility constructor
Definition: CaloCluster.h:91
void reset()
resets the CaloCluster (position, energy, hitsAndFractions)
Definition: CaloCluster.cc:11
CaloCluster(double energy, const math::XYZPoint &position, const CaloID &caloID)
Definition: CaloCluster.h:52
bool operator==(const CaloCluster &rhs) const
comparison == operator
Definition: CaloCluster.h:135