00001 #ifndef __StEEmcPointMaker_h__
00002 #define __StEEmcPointMaker_h__
00003
00004 #include "StMaker.h"
00005 #include "TString.h"
00006 #include "StEEmcPool/StEEmcClusterMaker/StEEmcCluster.h"
00007 #include "StEEmcPool/StEEmcClusterMaker/StEEmcSmdCluster.h"
00008 #include "StEEmcPoint.h"
00009
00010
00011 #include <map>
00012
00013 class StEEmcA2EMaker;
00014 class StEEmcClusterMaker;
00015
00016 class EEmcGeomSimple;
00017 class EEmcSmdMap;
00018 class EEmcSmdGeom;
00019
00020 class StEEmcPointMaker : public StMaker {
00021
00022 public:
00023
00024 StEEmcPointMaker( const Char_t *name );
00025 ~StEEmcPointMaker(){ };
00026
00028 Int_t Init();
00030 Int_t Make();
00032 void Clear(Option_t *opts="");
00034 void analysis(const Char_t *name);
00036 void clusters(const Char_t *name);
00037
00042 void towerThreshold( Float_t t) { mTowerThreshold=t; }
00043
00045 void smdMatch( Float_t s ){ mSmdMatch = s; }
00046
00048 StEEmcPointVec_t points();
00050 Int_t numberOfPoints();
00052 StEEmcPoint point(Int_t ipoint);
00053
00057 StEEmcPointVec_t smdPoints();
00059 Int_t numberOfSmdPoints();
00061 StEEmcPoint smdPoint(Int_t ip);
00062
00064 Float_t energySeen(){ return mEseen; }
00065
00068 void setFillStEvent(){ mFillStEvent=true; }
00069
00072 void setEnergyMode(Int_t mode){ mEnergyMode=mode; }
00074 void setLimit(Int_t l){ mLimit=l; }
00075
00076
00079 StEEmcPoint point( StEmcPoint *p ){ return mEtoEE[p]; }
00080
00081
00082 private:
00083 protected:
00084
00085 TString mNameAnalysis;
00086 TString mNameClusters;
00088
00089 StEEmcA2EMaker *mEEanalysis;
00090
00091 StEEmcClusterMaker *mEEclusters;
00092
00094 EEmcGeomSimple *mEEtow;
00095
00096 EEmcSmdGeom *mEEsmd;
00097
00098 EEmcSmdMap *mEEmap;
00099
00101 void fillStEvent();
00103 void verifyStEvent();
00104
00106 StEEmcPointVec_t mPoints;
00107
00109 StEEmcPointVec_t mSmdPoints;
00110
00112 std::map< StEEmcSmdCluster, StEEmcPointVec_t > mUclusters2points;
00113
00114 std::map< StEEmcSmdCluster, StEEmcPointVec_t > mVclusters2points;
00115
00117 StEEmcPointVec_t buildSmdPoints( Int_t sector, StEEmcSmdClusterVec_t &u, StEEmcSmdClusterVec_t &v );
00119 Bool_t findPoints ( Int_t sector,
00120 StEEmcSmdClusterVec_t u,
00121 StEEmcSmdClusterVec_t v,
00122 StEEmcPointVec_t &p );
00123
00125 void shareEnergy();
00127 void shareEnergySimple();
00129 void shareEnergySmd();
00131 void countRelatives();
00133 void removeCluster( StEEmcSmdClusterVec_t &clusters, Int_t key );
00134
00138 Float_t fracp2t( StEEmcPoint &p, StEEmcTower &t );
00139
00143 Float_t mTowerThreshold;
00147 Float_t mSmdMatch;
00149 Float_t mEseen;
00151 Bool_t mFillStEvent;
00153 Int_t mEnergyMode;
00155 Int_t mLimit;
00156
00158 std::map<StEmcPoint *, StEEmcPoint> mEtoEE;
00159
00161 ClassDef(StEEmcPointMaker,1);
00162
00163 };
00164
00165 inline void StEEmcPointMaker::analysis(const Char_t *n){ mNameAnalysis=n; }
00166 inline void StEEmcPointMaker::clusters(const Char_t *n){ mNameClusters=n; }
00167
00168 inline StEEmcPointVec_t StEEmcPointMaker::points(){ return mPoints ; }
00169 inline Int_t StEEmcPointMaker::numberOfPoints(){ return mPoints.size(); }
00170 inline StEEmcPoint StEEmcPointMaker::point(Int_t ip){ return mPoints[ip]; }
00171
00172 inline StEEmcPointVec_t StEEmcPointMaker::smdPoints(){ return mSmdPoints; }
00173 inline Int_t StEEmcPointMaker::numberOfSmdPoints(){ return mSmdPoints.size(); }
00174 inline StEEmcPoint StEEmcPointMaker::smdPoint(Int_t ip){ return mSmdPoints[ip]; }
00175 #endif