00001 #ifndef __StEEmcSmdCluster_h__
00002 #define __StEEmcSmdCluster_h__
00003
00004 #include <TObject.h>
00005 #include "StEEmcStrip.h"
00006 #include "StEEmcTower.h"
00007
00008 class StEmcCluster;
00009
00010 class StEEmcSmdCluster : public TObject {
00011
00012 public:
00013
00014 StEEmcSmdCluster();
00015 ~StEEmcSmdCluster(){ };
00016
00018 StEEmcSmdCluster ( const StEEmcSmdCluster &c );
00019
00022 void add( StEEmcStrip strip, Float_t weight=1.0 );
00023
00025 Int_t key(){ return mKey; }
00026 Int_t key()const { return mKey; }
00027
00031 void key(Int_t k){ mKey=k; }
00032
00034 Float_t energy();
00035 Float_t energy()const;
00037 Float_t mean();
00038 Float_t mean()const;
00040 Float_t sigma();
00041 Float_t sigma()const;
00042
00046 Float_t energy( Int_t nmax, Option_t *opts="mean" );
00048 Float_t sigma( Int_t nmax, Option_t *opts="mean" );
00049
00051 Float_t energy3(){ return energy(3,"seed"); }
00052 Float_t energy5(){ return energy(5,"seed"); }
00053 Float_t sigma3(){ return sigma(3,"seed"); }
00054 Float_t sigma5(){ return sigma(5,"seed"); }
00055
00057 Int_t size();
00058
00060 StEEmcTowerVec_t towers();
00062 Int_t numberOfMatchedTowers();
00064 StEEmcTower tower(Int_t t);
00065
00068 Bool_t operator>( StEEmcSmdCluster &other );
00069
00071 Int_t numberOfStrips(){ return (Int_t)mStrips.size(); }
00072
00074 StEEmcStrip strip(Int_t s){ return mStrips[s]; }
00075
00076 Int_t plane(){ return mStrips[0].plane(); }
00077 Int_t sector(){ return mStrips[0].sector(); }
00078
00080 StEmcCluster *stemc();
00081
00082 void stemc( StEmcCluster *c ){ mEmcCluster = c; }
00083
00084 void print();
00085
00086 private:
00087 protected:
00088
00089 Int_t mKey;
00090
00092 StEEmcStripVec_t mStrips;
00093 std::vector<Float_t> mWeights;
00094
00096 Int_t mSize;
00097
00099 Float_t mEnergy;
00100
00102 Float_t mSumXW;
00103 Float_t mSumX2W;
00104
00106 Float_t mMean;
00107 Float_t mSigma;
00108
00110 StEEmcTowerVec_t mMatchedTowers;
00111
00112 StEmcCluster *mEmcCluster;
00113
00114 ClassDef(StEEmcSmdCluster,1);
00115
00116 };
00117
00118 inline Float_t StEEmcSmdCluster::energy(){ return mEnergy; }
00119 inline Float_t StEEmcSmdCluster::mean(){ return mMean; }
00120 inline Float_t StEEmcSmdCluster::sigma(){ return mSigma; }
00121
00122 inline Float_t StEEmcSmdCluster::energy()const{ return mEnergy; }
00123 inline Float_t StEEmcSmdCluster::mean()const{ return mMean; }
00124 inline Float_t StEEmcSmdCluster::sigma()const{ return mSigma; }
00125
00126 inline Int_t StEEmcSmdCluster::size(){ return (Int_t)mSize; }
00127
00128 inline StEEmcTowerVec_t StEEmcSmdCluster::towers(){ return mMatchedTowers; }
00129 inline Int_t StEEmcSmdCluster::numberOfMatchedTowers(){ return (Int_t)mMatchedTowers.size(); }
00130 inline StEEmcTower StEEmcSmdCluster::tower(Int_t t){ return mMatchedTowers[t]; }
00131 inline Bool_t StEEmcSmdCluster::operator>(StEEmcSmdCluster &other){ return (this->energy() > other.energy()); }
00132
00133
00135 inline Bool_t inner( const StEEmcSmdCluster &me, const StEEmcSmdCluster &you) { return me.mean()<you.mean(); }
00137 inline Bool_t outer( const StEEmcSmdCluster &me, const StEEmcSmdCluster &you) { return me.mean()>you.mean(); }
00139 inline Bool_t Energy( const StEEmcSmdCluster &me, const StEEmcSmdCluster &you) { return me.energy()>you.energy(); }
00141 inline Bool_t Key( const StEEmcSmdCluster &me, const StEEmcSmdCluster &you) { return me.key()<you.key(); }
00142
00143
00144
00145 typedef std::vector<StEEmcSmdCluster> StEEmcSmdClusterVec_t;
00146
00147 #endif