StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StEtaPhiCell.cxx
1 // -*- mode: c++;-*-
2 // $Id: StEtaPhiCell.cxx,v 1.3 2008/05/06 03:06:11 tai Exp $
3 #include "StEtaPhiCell.h"
4 
5 #include <cmath>
6 #include <algorithm>
7 
8 StEtaPhiCell::StEtaPhiCell(double etaMin, double etaMax, double phiMin, double phiMax)
9  : mNtimesUsed(0)
10  , mEt(0.)
11  , mUpToDate(false)
12  , mEtaMin(etaMin)
13  , mEtaMax(etaMax)
14  , mPhiMin(phiMin)
15  , mPhiMax(phiMax)
16 {
17 
18 }
19 
20 StEtaPhiCell::StEtaPhiCell()
21  : mNtimesUsed(0)
22  , mEt(0)
23  , mUpToDate(false)
24  , mEtaMin(0)
25  , mEtaMax(0)
26  , mPhiMin(0)
27  , mPhiMax(0)
28 {
29 
30 }
31 
32 StEtaPhiCell::~StEtaPhiCell()
33 {
34 
35 }
36 
37 void StEtaPhiCell::addProtoJet(const StProtoJet& pj)
38 {
39  mEt += pj.eT();
40  mProtoJet.add(pj);
41  mUpToDate = false;
42 }
43 
44 void StEtaPhiCell::clear()
45 {
46  mEt = 0;
47  mNtimesUsed = 0;
48  mCells.clear();
49  mProtoJet.clear();
50  mUpToDate = false;
51 }
52 
53 void StEtaPhiCell::addCell(StEtaPhiCell* cell)
54 {
55  mEt += cell->eT();
56  mCells.push_back(cell);
57  cell->setNtimesUsed( cell->nTimesUsed() + 1 );
58  mUpToDate=false;
59 }
60 
61 double StEtaPhiCell::distance(const StEtaPhiCell& rhs) const
62 {
63  double dEta = deltaEta(rhs);
64  double dPhi = deltaPhi(rhs);
65  return ::sqrt(dEta*dEta + dPhi*dPhi);
66 }
67 
68 const StProtoJet& StEtaPhiCell::centroid()
69 {
70  if (!mUpToDate) {
71 
72  mUpToDate = true;
73  mCentroid.clear();
74 
75  //make sure that we're up-to-date
76  mProtoJet.update();
77  //don't forget to add self-contribution
78  mCentroid = mProtoJet;
79 
80  //loop on daughter cells:
81  for (CellList::iterator it1 = mCells.begin(); it1 != mCells.end(); ++it1) {
82 
83  if (!isSamePosition(**it1)) { //don't add to self!
84 
85  //for each cell, get proto-jet four-list
86  StProtoJet& pj = (*it1)->protoJet();
87  const StProtoJet::FourVecList& l = pj.list();
88 
89  //loop on four-list
90  for (StProtoJet::FourVecList::const_iterator it2=l.begin(); it2!=l.end(); ++it2) {
91  // add 4-momenta
92  const AbstractFourVec* vec = *it2;
93  mCentroid.add(*vec);
94  }
95  }
96  }
97  }
98  return mCentroid;
99 }
100 
101