00001 #ifndef __StEEmcIUPointMaker_h__
00002 #define __StEEmcIUPointMaker_h__
00003
00004 #include "StMaker.h"
00005 #include "TString.h"
00006 #include "StEEmcIUCluster.h"
00007 #include "StEEmcIUSmdCluster.h"
00008 #include "StEEmcIUPoint.h"
00009
00010
00011 #include <map>
00012
00013 class StEEmcA2EMaker;
00014 class StEEmcIUClusterMaker;
00015 class TH1F;
00016 class TH2F;
00017 class EEmcGeomSimple;
00018 class EEmcSmdMap;
00019 class EEmcSmdGeom;
00020
00021 class StEEmcIUPointMaker : public StMaker {
00022
00023 public:
00024
00025 StEEmcIUPointMaker( const Char_t *name );
00026 ~StEEmcIUPointMaker(){ };
00027
00029 Int_t Init();
00031 Int_t Make();
00033 void Clear(Option_t *opts="");
00035 void analysis(const Char_t *name);
00037 void clusters(const Char_t *name);
00038
00043 void towerThreshold( Float_t t) { mTowerThreshold=t; }
00044
00046 void smdMatch( Float_t s ){ mSmdMatch = s; }
00048
00050
00051
00055
00056
00058 StEEmcIUPointVec_t points();
00060 Int_t numberOfPoints();
00062 StEEmcIUPoint point(Int_t ipoint);
00063
00067 StEEmcIUPointVec_t smdPoints();
00069 Int_t numberOfSmdPoints();
00071 StEEmcIUPoint smdPoint(Int_t ip);
00072
00074 Float_t energySeen(){ return mEseen; }
00075
00078 void setFillStEvent(){ mFillStEvent=true; }
00079
00082 void setEnergyMode(Int_t mode){ mEnergyMode=mode; }
00084 void setLimit(Int_t l){ mLimit=l; }
00085
00086
00089 StEEmcIUPoint point( StEmcPoint *p ){ return mEtoEE[p]; }
00090
00091
00092 private:
00093 protected:
00094 Int_t ukey;
00095 Int_t vkey;
00096
00097 TString mNameAnalysis;
00098 TString mNameClusters;
00100
00101 StEEmcA2EMaker *mEEanalysis;
00102
00103 StEEmcIUClusterMaker *mEEclusters;
00104
00106 EEmcGeomSimple *mEEtow;
00107
00108 EEmcSmdGeom *mEEsmd;
00109
00110 EEmcSmdMap *mEEmap;
00111 TH1F *hZEratio;
00112 TH1F *pointet;
00113 TH2F *pointgeo;
00115 void fillStEvent();
00117 void verifyStEvent();
00118
00120 StEEmcIUPointVec_t mPoints;
00121
00123 StEEmcIUPointVec_t mSmdPoints;
00124
00126 std::map< StEEmcIUSmdCluster, StEEmcIUPointVec_t > mUclusters2points;
00127
00128 std::map< StEEmcIUSmdCluster, StEEmcIUPointVec_t > mVclusters2points;
00129
00131 StEEmcIUPointVec_t buildSmdPoints( Int_t sector, StEEmcIUSmdClusterVec_t &u, StEEmcIUSmdClusterVec_t &v );
00133 Bool_t findPoints ( Int_t sector,
00134 StEEmcIUSmdClusterVec_t u,
00135 StEEmcIUSmdClusterVec_t v,
00136 StEEmcIUPointVec_t &p );
00137
00139 void shareEnergy();
00141 void shareEnergySimple();
00143 void shareEnergySmd();
00145 void countRelatives();
00147 void removeCluster( StEEmcIUSmdClusterVec_t &clusters, Int_t key );
00148
00152 Float_t fracp2t( StEEmcIUPoint &p, StEEmcTower &t );
00153
00157 Float_t mTowerThreshold;
00161 Float_t mSmdMatch;
00163 Float_t mEseen;
00165 Bool_t mFillStEvent;
00167 Int_t mEnergyMode;
00169 Int_t mLimit;
00170
00172 std::map<StEmcPoint *, StEEmcIUPoint> mEtoEE;
00173
00175 ClassDef(StEEmcIUPointMaker,1);
00176
00177 };
00178
00179 inline void StEEmcIUPointMaker::analysis(const Char_t *n){ mNameAnalysis=n; }
00180 inline void StEEmcIUPointMaker::clusters(const Char_t *n){ mNameClusters=n; }
00181
00182 inline StEEmcIUPointVec_t StEEmcIUPointMaker::points(){ return mPoints ; }
00183 inline Int_t StEEmcIUPointMaker::numberOfPoints(){ return mPoints.size(); }
00184 inline StEEmcIUPoint StEEmcIUPointMaker::point(Int_t ip){ return mPoints[ip]; }
00185
00186 inline StEEmcIUPointVec_t StEEmcIUPointMaker::smdPoints(){ return mSmdPoints; }
00187 inline Int_t StEEmcIUPointMaker::numberOfSmdPoints(){ return mSmdPoints.size(); }
00188 inline StEEmcIUPoint StEEmcIUPointMaker::smdPoint(Int_t ip){ return mSmdPoints[ip]; }
00189 #endif