00001
00105 #ifndef STAR_StEmcAssociationMaker_HH
00106 #define STAR_StEmcAssociationMaker_HH
00107
00108 #define NDETECTORS 4
00109
00110 #ifndef StMaker_H
00111 #include "StMaker.h"
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 StEmcRawHit;
00123 class StEmcCluster;
00124 class StEmcPoint;
00125 class StMcTrack;
00126 class StMcCalorimeterHit;
00127
00128 class StEmcAssociation
00129 {
00130 private:
00131 StMcTrack *mTrack;
00132 public:
00133 StEmcAssociation(StMcTrack *t);
00134 virtual ~StEmcAssociation();
00135 const StMcTrack* getTrack() const { return mTrack; }
00136 ClassDef(StEmcAssociation, 1)
00137 };
00138
00139 class StEmcClusterAssociation:public StEmcAssociation
00140 {
00141 private:
00142 StEmcCluster *mCluster;
00143 float mFTrack;
00144 float mFEmc;
00145 public:
00146 StEmcClusterAssociation(StMcTrack*, StEmcCluster*, float,float);
00147 virtual ~StEmcClusterAssociation();
00148 const StEmcCluster* getCluster() const { return mCluster; }
00149 float getFractionTrack() const { return mFTrack; }
00150 float getFractionCluster() const { return mFEmc; }
00151 ClassDef(StEmcClusterAssociation, 1)
00152 };
00153 class StEmcPointAssociation:public StEmcAssociation
00154 {
00155 private:
00156 StEmcPoint *mPoint;
00157 int mAssocType;
00158 public:
00159 StEmcPointAssociation(StMcTrack*, StEmcPoint*, int);
00160 virtual ~StEmcPointAssociation();
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(StEmcPointAssociation, 1)
00165 };
00166
00167
00168
00169 #ifndef __CINT__
00170 struct compEmcTrack { bool operator()(const StMcTrack* a, const StMcTrack* b) const {return a<b; } };
00171 struct compEmcHit { bool operator()(const StEmcRawHit* a, const StEmcRawHit* b) const {return a<b; }};
00172 struct compEmcCluster { bool operator()(const StEmcCluster* a, const StEmcCluster* b) const {return a<b; }};
00173 struct compEmcPoint { bool operator()(const StEmcPoint* a, const StEmcPoint* b) const {return a<b; }};
00174
00175 typedef multimap<const StMcTrack*, const StEmcClusterAssociation*, compEmcTrack> multiEmcTrackCluster;
00176 typedef multimap<const StEmcCluster*, const StEmcClusterAssociation*, compEmcCluster> multiEmcClusterTrack;
00177 typedef multimap<const StMcTrack*, const StEmcPointAssociation*, compEmcTrack> multiEmcTrackPoint;
00178 typedef multimap<const StEmcPoint*, const StEmcPointAssociation*, compEmcPoint> multiEmcPointTrack;
00179
00180 typedef multiEmcTrackCluster::iterator multiEmcTrackClusterIter;
00181 typedef multiEmcClusterTrack::iterator multiEmcClusterTrackIter;
00182 typedef multiEmcTrackPoint::iterator multiEmcTrackPointIter;
00183 typedef multiEmcPointTrack::iterator multiEmcPointTrackIter;
00184 typedef multiEmcTrackCluster::value_type multiEmcTrackClusterValue;
00185 typedef multiEmcClusterTrack::value_type multiEmcClusterTrackValue;
00186 typedef multiEmcTrackPoint::value_type multiEmcTrackPointValue;
00187 typedef multiEmcPointTrack::value_type multiEmcPointTrackValue;
00188 #else
00189 class multiEmcTrackCluster;
00190 class multiEmcClusterTrack;
00191 class multiEmcTrackPoint;
00192 class multiEmcPointTrack;
00193 class multiEmcTrackClusterIter;
00194 class multiEmcClusterTrackIter;
00195 class multiEmcTrackPointIter;
00196 class multiEmcPointTrackIter;
00197 class multiEmcTrackClusterValue;
00198 class multiEmcClusterTrackValue;
00199 class multiEmcTrackPointValue;
00200 class multiEmcPointTrackValue;
00201 #endif
00202
00203
00204 class StEmcAssociationMaker : public StMaker
00205 {
00206 public:
00207 StEmcAssociationMaker(const char* name="EmcAssoc");
00208 virtual ~StEmcAssociationMaker();
00209 Int_t Init();
00210 Int_t Make();
00211 Int_t Finish();
00212 void Clear(const char*);
00213
00214 void printMaps();
00215 void printTracks();
00216
00217 multiEmcTrackCluster* getTrackClusterMap(Int_t i) { if(i>0 && i<=NDETECTORS) return mTrackCluster[i-1]; else return NULL; }
00218 multiEmcTrackCluster* getTrackClusterMap(const char*);
00219 multiEmcClusterTrack* getClusterTrackMap(Int_t i) { if(i>0 && i<=NDETECTORS) return mClusterTrack[i-1]; else return NULL; }
00220 multiEmcClusterTrack* getClusterTrackMap(const char*);
00221 multiEmcTrackPoint* getTrackPointMap() { return mTrackPoint;}
00222 multiEmcPointTrack* getPointTrackMap() { return mPointTrack;}
00223 Int_t getDetNum(const char*);
00224
00225 void setPrint(Bool_t a) {mPrint = a;}
00226
00227
00228 protected:
00229 virtual Float_t dEToEnergy(StMcCalorimeterHit*,Int_t);
00230 Bool_t mPrint;
00231
00232 multiEmcTrackCluster* mTrackCluster[NDETECTORS];
00233 multiEmcClusterTrack* mClusterTrack[NDETECTORS];
00234 multiEmcTrackPoint* mTrackPoint;
00235 multiEmcPointTrack* mPointTrack;
00236 ClassDef(StEmcAssociationMaker, 1)
00237 };
00238
00239 #endif
00240
00241