00001 #ifndef __StEEmcIUClusterMaker_h__
00002 #define __StEEmcIUClusterMaker_h__
00003
00004 #include "StMaker.h"
00005 #include "StEEmcIUCluster.h"
00006 #include "StEEmcIUSmdCluster.h"
00007 #include "StEEmcPool/StEEmcA2EMaker/StEEmcA2EMaker.h"
00008 #include "TString.h"
00009 #include "StEEmcUtil/EEmcGeom/EEmcGeomSimple.h"
00010 #include "StEEmcUtil/EEmcSmdMap/EEmcSmdMap.h"
00011 #include "StEEmcUtil/StEEmcSmd/EEmcSmdGeom.h"
00012
00013
00014
00015 #include <map>
00016
00017 class StEEmcIUClusterMaker : public StMaker {
00018
00019 public:
00020
00021 StEEmcIUClusterMaker( const Char_t *name = "mEEclusters" );
00022 ~StEEmcIUClusterMaker(){ };
00023
00025 Int_t Init();
00027 Int_t Make();
00029 void Clear(Option_t *opts="");
00030
00032 void analysis ( const Char_t *name );
00033
00036 void seedEnergy( Float_t energy, Int_t layer=0 );
00037
00039 void setMaxExtent( Int_t m );
00040
00042 void setMinStrips( Int_t m ){ mMinStrips=m; }
00043
00046 void setSeedFloor( Float_t f=2.0 );
00047
00049 Int_t numberOfClusters(Int_t sec, Int_t layer);
00051 Int_t numberOfSmdClusters(Int_t sec, Int_t plane);
00052 Int_t TnumberOfSmdClusters(Int_t sec, Int_t plane);
00053
00054
00055
00056
00057 int numberOfUseed();
00058 int numberOfVseed();
00059 int UStripWidth();
00060 int VStripWidth();
00061 float Tenergyoftower();
00062 float Tenergyofp1();
00063 float Tenergyofp2();
00064 float Tenergyofp3();
00065 float Tenergyofsmdu();
00066 float Tenergyofsmdv();
00067 float UAmplitude();
00068 float VAmplitude();
00069
00071 StEEmcIUCluster cluster(Int_t sec, Int_t layer, Int_t index);
00073 StEEmcIUSmdCluster smdcluster(Int_t sec, Int_t plane, Int_t index);
00074
00075
00078 StEEmcIUCluster cluster( StEmcCluster *cl ){ return mEtoEE[ cl ]; }
00081 StEEmcIUSmdCluster smdcluster( StEmcCluster *cl ){ return mEtoEEsmd[ cl ]; }
00082
00084 StEEmcIUClusterVec_t clusters( Int_t sec, Int_t layer );
00086 StEEmcIUSmdClusterVec_t smdclusters( Int_t sec, Int_t plane );
00087
00090 void setFillStEvent(){ mFillStEvent=true; }
00091
00094 void suppress(Int_t n=0){ mSuppress=n; }
00095
00097 void skip(Bool_t s=true){ mSkip=s; }
00098
00100 void loose(Bool_t l=true){ mLoose=l; }
00101
00103 void print();
00104
00105 private:
00106 protected:
00107
00108 TH1D *clusize;
00109 TH1D *tclusize;
00110 TH1D *cludis;
00112 Int_t mClusterId;
00113
00115 Int_t mSuppress;
00117 Bool_t mSkip;
00119 Bool_t mLoose;
00120
00123 std::vector< std::vector< StEEmcTowerVec_t > > mSeedTowers;
00124
00128 std::vector< std::vector< StEEmcIUClusterVec_t > > mTowerClusters;
00131 std::vector< std::vector< StEEmcIUSmdClusterVec_t > > mSmdClusters;
00132 std::vector< std::vector< StEEmcIUSmdClusterVec_t > > TmSmdClusters;
00133
00135 Int_t mNumberOfClusters[6];
00136 Int_t TmNumberOfClusters[6];
00137
00139 Float_t mSeedEnergy[6];
00141 Int_t mMaxExtent;
00143 Int_t mMinStrips;
00145 Float_t mSeedFloor;
00146
00147
00148 int countUseed;
00149 int uswidth;
00150 int vswidth;
00151 float eeen;
00152 int countVseed;
00153 float uamp;
00154 float vamp;
00155 float ep1;
00156 float ep2;
00157 float ep3;
00158 float esmdu;
00159 float esmdv;
00161 Bool_t buildTowerClusters();
00162
00164 Bool_t buildSmdClusters();
00165
00167 void fillStEvent();
00168
00171 Bool_t verifyStEvent();
00172
00173 FILE *fout;
00174 FILE *fout2;
00175
00176
00177 EEmcGeomSimple *mEEtow;
00178 EEmcSmdGeom *mEEsmd;
00179 EEmcSmdMap *mEEmap;
00181
00182 TString mAnalysisName;
00184 StEEmcA2EMaker *mEEanalysis;
00185
00187 Bool_t mFillStEvent;
00188
00190 std::map< StEmcCluster *, StEEmcIUCluster > mEtoEE;
00191
00192 std::map< StEmcCluster *, StEEmcIUSmdCluster > mEtoEEsmd;
00193
00195 ClassDef(StEEmcIUClusterMaker,1);
00196
00197 };
00198
00199 inline void StEEmcIUClusterMaker::analysis( const Char_t *name ){ mAnalysisName=name; }
00200 inline void StEEmcIUClusterMaker::seedEnergy(Float_t energy, Int_t layer){ mSeedEnergy[layer]=energy; }
00201
00202 inline void StEEmcIUClusterMaker::setMaxExtent(Int_t m){ mMaxExtent=m; }
00203 inline void StEEmcIUClusterMaker::setSeedFloor(Float_t f){ mSeedFloor=f; }
00204
00205 inline Int_t StEEmcIUClusterMaker::numberOfClusters(Int_t s, Int_t l)
00206 { return (Int_t)mTowerClusters[s][l].size(); }
00207 inline Int_t StEEmcIUClusterMaker::numberOfSmdClusters(Int_t s, Int_t p)
00208 { return (Int_t)mSmdClusters[s][p].size(); }
00209 inline Int_t StEEmcIUClusterMaker::TnumberOfSmdClusters(Int_t s, Int_t p)
00210 { return (Int_t)TmSmdClusters[s][p].size(); }
00211
00212 inline StEEmcIUCluster StEEmcIUClusterMaker::cluster(Int_t s, Int_t l, Int_t i)
00213 { return mTowerClusters[s][l][i]; }
00214 inline StEEmcIUSmdCluster StEEmcIUClusterMaker::smdcluster(Int_t s,Int_t p,Int_t i)
00215 { return mSmdClusters[s][p][i]; }
00216
00217 inline StEEmcIUClusterVec_t StEEmcIUClusterMaker::clusters(Int_t s, Int_t l)
00218 { return mTowerClusters[s][l]; }
00219
00220 inline StEEmcIUSmdClusterVec_t StEEmcIUClusterMaker::smdclusters(Int_t s, Int_t l)
00221 { return mSmdClusters[s][l]; }
00222
00223
00224 inline int StEEmcIUClusterMaker::numberOfUseed() { return (int) countUseed; }
00225 inline int StEEmcIUClusterMaker::numberOfVseed() { return (int) countVseed; }
00226 inline float StEEmcIUClusterMaker::Tenergyoftower() { return (float) eeen; }
00227 inline int StEEmcIUClusterMaker::UStripWidth() { return (int) uswidth; }
00228 inline int StEEmcIUClusterMaker::VStripWidth() { return (int) vswidth; }
00229 inline float StEEmcIUClusterMaker::UAmplitude() { return (float) uamp; }
00230 inline float StEEmcIUClusterMaker::VAmplitude() { return (float) vamp; }
00231 inline float StEEmcIUClusterMaker::Tenergyofp1() { return (float) ep1; }
00232 inline float StEEmcIUClusterMaker::Tenergyofp2() { return (float) ep2; }
00233 inline float StEEmcIUClusterMaker::Tenergyofp3() { return (float) ep3; }
00234 inline float StEEmcIUClusterMaker::Tenergyofsmdu() { return (float) esmdu; }
00235 inline float StEEmcIUClusterMaker::Tenergyofsmdv() { return (float) esmdv; }
00236 #endif