StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StEtaPhiCell.h
1 // -*- mode: c++;-*-
2 // $Id: StEtaPhiCell.h,v 1.5 2008/05/06 03:06:11 tai Exp $
3 #ifndef STETAPHICELL_H
4 #define STETAPHICELL_H
5 
6 #include "StProtoJet.h"
7 
8 #include <vector>
9 #include <list>
10 #include <iostream>
11 
12 double deltaphi(double p1, double p2);
13 
14 class StEtaPhiCell {
15 
16 public:
17 
18  typedef std::list<StProtoJet> JetList;
19  typedef StProtoJet::FourVecList FourList;
20  typedef std::list<StEtaPhiCell*> CellList;
21 
22  StEtaPhiCell();
23  StEtaPhiCell(double etaMin, double etaMax, double phiMin, double phiMax);
24  virtual ~StEtaPhiCell();
25 
26  virtual StEtaPhiCell* clone() const = 0;
27 
28  bool isSamePosition(const StEtaPhiCell& other) const {
29  return (mEtaMin == other.mEtaMin
30  && mEtaMax == other.mEtaMax
31  && mPhiMin == other.mPhiMin
32  && mPhiMax == other.mPhiMax);
33  }
34 
35  virtual double eT() const { return mEt; }
36 
37  StProtoJet& protoJet() {return mProtoJet;}
38 
39  bool empty() const {return mProtoJet.size() == 0;}
40 
41  void setNtimesUsed(int v) { mNtimesUsed = v; }
42  int nTimesUsed() const { return mNtimesUsed; }
43 
44  const StProtoJet& centroid();
45 
46  double eta() const { return (mEtaMax+mEtaMin)/2.; }
47  double phi() const { return (mPhiMax+mPhiMin)/2.; }
48 
49  virtual void clear();
50 
51  void setEt(double v) { mEt = v; }
52  double Et() const { return mEt; }
53 
54  void update() {
55  protoJet().update();
56  mEt = protoJet().eT();
57  }
58 
59  CellList& cellList() { return mCells; }
60  const CellList& cellList() const { return mCells; }
61 
62  virtual void addCell(StEtaPhiCell* cell);
63 
64  virtual void addProtoJet(const StProtoJet&);
65 
66  double distance(const StEtaPhiCell& rhs) const;
67 
68 protected:
69 
70  int mNtimesUsed;
71  double mEt;
72  bool mUpToDate;
73  CellList mCells;
74  StProtoJet mProtoJet;
75 
76 private:
77 
78  double deltaPhi(const StEtaPhiCell& rhs) const { return deltaphi( phi(), rhs.phi() ); }
79  double deltaEta(const StEtaPhiCell& rhs) const { return eta()-rhs.eta(); }
80 
81  friend std::ostream& operator<<(std::ostream& os, const StEtaPhiCell& cell);
82  friend struct PostMergeUpdater;
83 
84  double mEtaMin;
85  double mEtaMax;
86  double mPhiMin;
87  double mPhiMax;
88 
89  StProtoJet mCentroid;
90 
91 };
92 
94 
95  bool operator()(StEtaPhiCell* lhs, StEtaPhiCell* rhs)
96  {
97  return lhs->eT() > rhs->eT();
98  }
99 
100 };
101 
102 inline std::ostream& operator<<(std::ostream& os, const StEtaPhiCell& cell)
103 {
104  os <<"eta: "<<cell.eta()<<"\tphi: "<<cell.phi()<<"\tet: "<<cell.eT()
105  //<<"\tsize: "<<cell.size()<<"\tnUsed: "<<cell.nTimesUsed();
106  <<"\tcells:"<< std::endl;
107  const StEtaPhiCell::CellList& l = cell.cellList();
108  for (StEtaPhiCell::CellList::const_iterator it=l.begin(); it!=l.end(); ++it) {
109  std::cout <<**it;
110  }
111 
112  return os;
113 }
114 
115 #endif // STETAPHICELL_H