00001
00104 #ifndef STAR_StEEmcAssociationMaker_HH
00105 #define STAR_StEEmcAssociationMaker_HH
00106
00107 #define NDETECTORS 4
00108
00109 #ifndef StMaker_H
00110 #include "StMaker.h"
00111 #include "StMcEvent/StMcCalorimeterHit.hh"
00112 #include "TMatrix.h"
00113 #endif
00114
00115 #include <map>
00116 #include <utility>
00117 #if !defined(ST_NO_NAMESPACES)
00118 using std::multimap;
00119 using std::pair;
00120 #endif
00121
00122 class StEvent;
00123 class StEmcRawHit;
00124 class StEmcCluster;
00125 class StEmcPoint;
00126 class StMcTrack;
00127
00128 class StEEmcAssociation
00129 {
00130 private:
00131 StMcTrack *mTrack;
00132 public:
00133 StEEmcAssociation(StMcTrack *t);
00134 virtual ~StEEmcAssociation();
00135 const StMcTrack* getTrack() const { return mTrack; }
00136 ClassDef(StEEmcAssociation, 1)
00137 };
00138
00139 class StEEmcClusterAssociation:public StEEmcAssociation
00140 {
00141 private:
00142 StEmcCluster *mCluster;
00143 float mFTrack;
00144 float mFEmc;
00145 public:
00146 StEEmcClusterAssociation(StMcTrack*, StEmcCluster*, float,float);
00147 virtual ~StEEmcClusterAssociation();
00148 const StEmcCluster* getCluster() const { return mCluster; }
00149 float getFractionTrack() const { return mFTrack; }
00150 float getFractionCluster() const { return mFEmc; }
00151 ClassDef(StEEmcClusterAssociation, 1)
00152 };
00153 class StEEmcPointAssociation:public StEEmcAssociation
00154 {
00155 private:
00156 StEmcPoint *mPoint;
00157 int mAssocType;
00158 public:
00159 StEEmcPointAssociation(StMcTrack*, StEmcPoint*, int);
00160 virtual ~StEEmcPointAssociation();
00161 const StEmcPoint*getPoint() const { return mPoint; }
00162 int getAssociation() const { return mAssocType; }
00163 int getAssociation(int det) { return (det>0 && det<=NDETECTORS) ? ((mAssocType&(1<<(det-1)))!=0): 0; }
00164 ClassDef(StEEmcPointAssociation, 1)
00165 };
00166
00167
00168
00169 #ifndef __CINT__
00170 struct compEEmcTrack { bool operator()(const StMcTrack* a, const StMcTrack* b) const {return a<b; } };
00171 struct compEEmcHit { bool operator()(const StEmcRawHit* a, const StEmcRawHit* b) const {return a<b; }};
00172 struct compEEmcCluster { bool operator()(const StEmcCluster* a, const StEmcCluster* b) const {return a<b; }};
00173 struct compEEmcPoint { bool operator()(const StEmcPoint* a, const StEmcPoint* b) const {return a<b; }};
00174
00175 typedef multimap<const StMcTrack*, const StEEmcClusterAssociation*, compEEmcTrack> multiEEmcTrackCluster;
00176 typedef multimap<const StEmcCluster*, const StEEmcClusterAssociation*, compEEmcCluster> multiEEmcClusterTrack;
00177 typedef multimap<const StMcTrack*, const StEEmcPointAssociation*, compEEmcTrack> multiEEmcTrackPoint;
00178 typedef multimap<const StEmcPoint*, const StEEmcPointAssociation*, compEEmcPoint> multiEEmcPointTrack;
00179
00180 typedef multiEEmcTrackCluster::iterator multiEEmcTrackClusterIter;
00181 typedef multiEEmcClusterTrack::iterator multiEEmcClusterTrackIter;
00182 typedef multiEEmcTrackPoint::iterator multiEEmcTrackPointIter;
00183 typedef multiEEmcPointTrack::iterator multiEEmcPointTrackIter;
00184 typedef multiEEmcTrackCluster::value_type multiEEmcTrackClusterValue;
00185 typedef multiEEmcClusterTrack::value_type multiEEmcClusterTrackValue;
00186 typedef multiEEmcTrackPoint::value_type multiEEmcTrackPointValue;
00187 typedef multiEEmcPointTrack::value_type multiEEmcPointTrackValue;
00188 #else
00189 class multiEEmcTrackCluster;
00190 class multiEEmcClusterTrack;
00191 class multiEEmcTrackPoint;
00192 class multiEEmcPointTrack;
00193 class multiEEmcTrackClusterIter;
00194 class multiEEmcClusterTrackIter;
00195 class multiEEmcTrackPointIter;
00196 class multiEEmcPointTrackIter;
00197 class multiEEmcTrackClusterValue;
00198 class multiEEmcClusterTrackValue;
00199 class multiEEmcTrackPointValue;
00200 class multiEEmcPointTrackValue;
00201 #endif
00202
00203
00204 class StEEmcAssociationMaker : public StMaker
00205 {
00206 public:
00207 StEEmcAssociationMaker(const char* name="EEmcAssoc");
00208 virtual ~StEEmcAssociationMaker();
00209 Int_t Init();
00210 Int_t Make();
00211 Int_t Finish();
00212 void Clear(const char*);
00213
00214 void printMaps();
00215
00216 multiEEmcTrackCluster* getTrackClusterMap(Int_t i) { if(i>0 && i<=NDETECTORS) return mTrackCluster[i-1]; else return NULL; }
00217 multiEEmcTrackCluster* getTrackClusterMap(const char*);
00218 multiEEmcClusterTrack* getClusterTrackMap(Int_t i) { if(i>0 && i<=NDETECTORS) return mClusterTrack[i-1]; else return NULL; }
00219 multiEEmcClusterTrack* getClusterTrackMap(const char*);
00220 multiEEmcTrackPoint* getTrackPointMap() { return mTrackPoint;}
00221 multiEEmcPointTrack* getPointTrackMap() { return mPointTrack;}
00222 Int_t getDetNum(const char*);
00223
00224 void setPrint(Bool_t a) {mPrint = a;};
00225 void printHits(StEvent*);
00226
00227
00228
00229 protected:
00230 Bool_t mPrint;
00231
00232 multiEEmcTrackCluster* mTrackCluster[NDETECTORS];
00233 multiEEmcClusterTrack* mClusterTrack[NDETECTORS];
00234 multiEEmcTrackPoint* mTrackPoint;
00235 multiEEmcPointTrack* mPointTrack;
00236 ClassDef(StEEmcAssociationMaker, 1)
00237 };
00238
00239 #endif
00240
00241
00243
00244
00245
00246
00247
00248
00249