00001 #ifndef __StEEmcGenericPointMaker_h__
00002 #define __StEEmcGenericPointMaker_h__
00003
00043 #include "StMaker.h"
00044
00045 #include <vector>
00046 #include <map>
00047
00048 #include "StEEmcPool/StEEmcA2EMaker/StEEmcA2EMaker.h"
00049 #include "StEEmcPool/StEEmcClusterMaker/StEEmcGenericClusterMaker.h"
00050
00051 #include "StEEmcPoint.h"
00052
00053
00054 #include "StEEmcUtil/EEmcGeom/EEmcGeomSimple.h"
00055 #include "StEEmcUtil/StEEmcSmd/EEmcSmdGeom.h"
00056 #include "StEEmcUtil/EEmcSmdMap/EEmcSmdMap.h"
00057
00058 class TH1F;
00059 class TH2F;
00060
00061 class StEEmcGenericPointMaker : public StMaker
00062 {
00063 public:
00064 StEEmcGenericPointMaker(const Char_t *name="EEmcPointMaker", const StEEmcA2EMaker *a2e=NULL, const StEEmcGenericClusterMaker *cl=NULL );
00065 virtual ~StEEmcGenericPointMaker(){ };
00066
00067 virtual Int_t Init();
00068 virtual Int_t Make();
00069 virtual void Clear(Option_t *opts="");
00070
00072 StEEmcPointVec_t &points() { return mPoints ; }
00073 const StEEmcPointVec_t &points() const { return mPoints ; }
00075 StEEmcPointVec_t &smdPoints() { return mSmdPoints; }
00076 const StEEmcPointVec_t &smdPoints() const { return mSmdPoints; }
00078 StEEmcPointVec_t &towerPoints() { return mTowerPoints;}
00079 const StEEmcPointVec_t &towerPoints() const { return mTowerPoints;}
00080
00082 Int_t numberOfPoints() const { return mPoints.size(); }
00084 Int_t numberOfSmdPoints() const { return mSmdPoints.size(); }
00086 Int_t numberOfTowerPoints() const { return mTowerPoints.size(); }
00087
00090 StEEmcPoint &point( Int_t ipoint ) { return mPoints[ipoint]; }
00091 const StEEmcPoint &point( Int_t ipoint ) const { return mPoints[ipoint]; }
00094 StEEmcPoint &smdPoint( Int_t ipoint ) { return mSmdPoints[ipoint]; }
00095 const StEEmcPoint &smdPoint( Int_t ipoint ) const { return mSmdPoints[ipoint]; }
00098 StEEmcPoint &towerPoint( Int_t ipoint ) { return mTowerPoints[ipoint]; }
00099 const StEEmcPoint &towerPoint( Int_t ipoint ) const { return mTowerPoints[ipoint]; }
00100
00101 void addPoint(const StEEmcPoint &point );
00102 void addSmdPoint(const StEEmcPoint &point );
00103 void addTowerPoint(const StEEmcPoint &point );
00104
00105 StEEmcPointVec_t &points(const StEEmcCluster &cluster ) { return (*(mCluster2points.find(cluster.key()))).second; }
00106 const StEEmcPointVec_t &points(const StEEmcCluster &cluster ) const { return (*(mCluster2points.find(cluster.key()))).second; }
00107 Int_t numberOfPoints(const StEEmcCluster &c ) const { return (Int_t)(*(mCluster2points.find(c.key()))).second.size(); }
00108
00109 StEEmcCluster &cluster(const StEEmcPoint &point ){ return (*(mPoint2cluster.find(point.key()))).second; }
00110
00111 protected:
00112
00113 Int_t mKey;
00114 Int_t nextPointId(){ return mKey++; }
00115
00116 const StEEmcA2EMaker *mEEanalysis;
00117 const StEEmcGenericClusterMaker *mEEclusters;
00119 StEEmcPointVec_t mPoints;
00120 StEEmcPointVec_t mSmdPoints;
00121 StEEmcPointVec_t mTowerPoints;
00123 StEEmcPointVec_t buildSmdPoints(Int_t sector, const StEEmcSmdClusterVec_t &u, const StEEmcSmdClusterVec_t &v);
00124 StEEmcPointVec_t buildTowerPoints(Int_t sector, const StEEmcClusterVec_t &c );
00125 StEEmcPointVec_t buildPoints( const StEEmcClusterVec_t &towerClusters, const StEEmcSmdClusterVec_t &u, const StEEmcSmdClusterVec_t &v );
00127 const EEmcGeomSimple *mEEtow;
00128 const EEmcSmdGeom *mEEsmd;
00129 const EEmcSmdMap *mEEmap;
00131 void fillStEvent();
00132
00133 TH1F *hNumberOfPoints;
00134 TH1F *hEnergyOfPoints;
00135 TH2F *hDistributionOfPoints;
00136
00137 TH1F *hTotalEnergy[6];
00138 TH1F *hTotalPointEnergy[6];
00140 std::map< Int_t, StEEmcPointVec_t > mCluster2points;
00141 std::map< Int_t, StEEmcCluster > mPoint2cluster;
00142
00143 ClassDef(StEEmcGenericPointMaker,1);
00144 };
00145
00146 #endif