00001 #ifndef __StEEmcClusterMaker_h__
00002 #define __StEEmcClusterMaker_h__
00003
00004 #include "StMaker.h"
00005 #include "StEEmcCluster.h"
00006 #include "StEEmcSmdCluster.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 StEEmcClusterMaker : public StMaker {
00018 public:
00019
00020 StEEmcClusterMaker( const Char_t *name = "mEEclusters" );
00021 virtual ~StEEmcClusterMaker(){ };
00022
00024 virtual Int_t Init();
00026 virtual Int_t Make();
00028 virtual void Clear(Option_t *opts="");
00029
00031 void analysis ( const Char_t *name ) { mAnalysisName=name; }
00032
00035 void seedEnergy( Float_t energy, Int_t layer=0 ) { mSeedEnergy[layer]=energy; }
00036
00038 void setMaxExtent( Int_t m ) { mMaxExtent=m; }
00039
00041 void setMinStrips( Int_t m ){ mMinStrips=m; }
00042
00045 void setSeedFloor( Float_t f=2.0 ) { mSeedFloor=f; }
00046
00048 Int_t numberOfClusters(Int_t sec, Int_t layer) const { return (Int_t)mTowerClusters[sec][layer].size(); }
00050 Int_t numberOfSmdClusters(Int_t sec, Int_t plane) const { return (Int_t)mSmdClusters[sec][plane].size(); }
00051
00053 StEEmcCluster &cluster(Int_t sec, Int_t layer, Int_t index) { return mTowerClusters[sec][layer][index]; }
00054 const StEEmcCluster &cluster(Int_t sec, Int_t layer, Int_t index) const { return mTowerClusters[sec][layer][index]; }
00056 StEEmcSmdCluster &smdcluster(Int_t sec, Int_t plane, Int_t index) { return mSmdClusters[sec][plane][index]; }
00057 const StEEmcSmdCluster &smdcluster(Int_t sec, Int_t plane, Int_t index) const { return mSmdClusters[sec][plane][index]; }
00058
00060 StEEmcCluster &cluster(const StEmcCluster *cl ){ return (*(mEtoEE.find(cl))).second; }
00061 const StEEmcCluster &cluster(const StEmcCluster *cl ) const { return (*(mEtoEE.find(cl))).second; }
00063 StEEmcSmdCluster &smdcluster(const StEmcCluster *cl ){ return (*(mEtoEEsmd.find(cl))).second; }
00064 const StEEmcSmdCluster &smdcluster(const StEmcCluster *cl ) const { return (*(mEtoEEsmd.find(cl))).second; }
00065
00067 StEEmcClusterVec_t &clusters( Int_t sec, Int_t layer ) { return mTowerClusters[sec][layer]; }
00068 const StEEmcClusterVec_t &clusters( Int_t sec, Int_t layer ) const { return mTowerClusters[sec][layer]; }
00070 StEEmcSmdClusterVec_t &smdclusters( Int_t sec, Int_t plane ) { return mSmdClusters[sec][plane]; }
00071 const StEEmcSmdClusterVec_t &smdclusters( Int_t sec, Int_t plane ) const { return mSmdClusters[sec][plane]; }
00072
00075 void setFillStEvent(){ mFillStEvent=true; }
00076
00079 void suppress(Int_t n=2){ mSuppress=n; }
00080
00082 void skip(Bool_t s=true){ mSkip=s; }
00083
00085 void loose(Bool_t l=true){ mLoose=l; }
00086
00088 void print() const;
00089
00090 protected:
00091
00093 Int_t mClusterId;
00094
00096 Int_t mSuppress;
00098 Bool_t mSkip;
00100 Bool_t mLoose;
00101
00104 std::vector< std::vector< StEEmcTowerVec_t > > mSeedTowers;
00105
00109 std::vector< std::vector< StEEmcClusterVec_t > > mTowerClusters;
00112 std::vector< std::vector< StEEmcSmdClusterVec_t > > mSmdClusters;
00113
00115 Int_t mNumberOfClusters[6];
00116
00118 Float_t mSeedEnergy[6];
00120 Int_t mMaxExtent;
00122 Int_t mMinStrips;
00124 Float_t mSeedFloor;
00125
00127 virtual Bool_t buildTowerClusters();
00128
00130 virtual Bool_t buildSmdClusters();
00131
00133 void fillStEvent();
00134
00137 Bool_t verifyStEvent() const;
00138
00139
00140 const EEmcGeomSimple *mEEtow;
00141 const EEmcSmdGeom *mEEsmd;
00142 const EEmcSmdMap *mEEmap;
00144
00145 TString mAnalysisName;
00147 const StEEmcA2EMaker *mEEanalysis;
00148
00150 Bool_t mFillStEvent;
00151
00153 std::map<const StEmcCluster *, StEEmcCluster > mEtoEE;
00154
00155 std::map<const StEmcCluster *, StEEmcSmdCluster > mEtoEEsmd;
00156
00157 ClassDef(StEEmcClusterMaker,1);
00158 };
00159
00160 #endif