00001 #ifndef __StEEmcA2EMaker_h__
00002 #define __StEEmcA2EMaker_h__
00003
00004 #include <StMaker.h>
00005 #include <TString.h>
00006 #include <vector>
00007
00008 #include "StEEmcUtil/EEmcGeom/EEmcGeomDefs.h"
00009 #include "StEEmcUtil/EEmcGeom/EEmcGeomSimple.h"
00010
00011 #include "StEEmcTower.h"
00012 #include "StEEmcStrip.h"
00013
00014 class StEEmcDb;
00015 class StMuDstMaker;
00016 class StEventMaker;
00017
00018 class StMuEmcCollection;
00019 class StEmcCollection;
00020
00021 class StEEmcA2EMaker : public StMaker {
00022
00023 public:
00024
00025 StEEmcA2EMaker( const Char_t *name="mEEanalysis" );
00026 ~StEEmcA2EMaker(){ };
00027
00028 Int_t Init();
00029 Int_t Make();
00030 void Clear(Option_t *opts="");
00031
00035 void threshold( Float_t cut, Int_t layer );
00036
00038 void database( const Char_t *dbname );
00039
00045 void source( const Char_t *name, Int_t type=0 );
00046
00051 StEEmcTowerVec_t towers(Int_t layer=0){ return mHitTowers[layer]; }
00052
00054 StEEmcStripVec_t strips(Int_t sec, Int_t pln ){ return mHitStrips[sec][pln]; }
00055
00058 Int_t numberOfHitTowers(Int_t layer) { return (Int_t)mHitTowers[layer].size(); }
00059
00063 StEEmcTower hittower( Int_t hit, Int_t layer ){ return mHitTowers[layer][hit]; }
00064
00068 StEEmcTower tower(Int_t index, Int_t layer=0) { return mTowers[index][layer]; }
00069
00075 StEEmcTower tower(Int_t sector, Int_t subsector, Int_t etabin, Int_t layer=0){return tower(index(sector,subsector,etabin),layer);}
00076
00080 StEEmcTower *tower( TVector3 &r, Int_t layer );
00081
00083 Int_t phibin( Int_t sector, Int_t subsector ) { return sector * 5 + subsector; }
00085 Int_t index( Int_t sector, Int_t subsector, Int_t etabin ) { return 12 * phibin(sector, subsector) + etabin; }
00086
00087
00090 StEEmcTower hightower(Int_t layer=0);
00091
00095 Int_t numberOfHitStrips(Int_t sector, Int_t plane ) { return (Int_t)mHitStrips[sector][plane].size(); }
00096
00097 StEEmcStrip hitstrip(Int_t sec,Int_t pl, Int_t hit){ return (mHitStrips[sec][pl])[hit]; }
00098
00103 StEEmcStrip strip(Int_t sector, Int_t plane, Int_t strip) { return mStrips[sector][plane][strip]; }
00104
00109 Float_t energy(Int_t sec, Int_t layer) { return mEnergy[sec][layer]; }
00111 Float_t energy(Int_t layer);
00112
00117 Int_t numberOfHits(Int_t sec, Int_t layer){ return mHits[sec][layer]; }
00118
00121 void scale(Float_t s){ mScale=s; }
00122
00123 private:
00124 protected:
00125
00126 Float_t mScale;
00127 Float_t mSigmaPed[6];
00128 TString mDbName;
00129 TString mInputName;
00130 Int_t mInputType;
00131
00132 StEEmcDb *mDbMaker;
00133 StMuDstMaker *mMuDstMaker;
00134 StEventMaker *mEventMaker;
00135
00136 EEmcGeomSimple *mEEgeom;
00137
00140 Bool_t readData();
00141 Bool_t readMuDst();
00142 Bool_t readStEvent();
00143 Bool_t readEzt();
00144
00147 Bool_t fillFromMuDst( StMuEmcCollection *emc );
00149 Bool_t fillFromSt( StEmcCollection *emc );
00150
00151
00152
00153 void addTowerHit(Int_t sec, Int_t sub, Int_t eta, Float_t adc, Int_t layer);
00154 void addSmdHit(Int_t sec, Int_t plane, Int_t str, Float_t adc );
00155
00157 StEEmcTower mTowers[kEEmcNumSectors*kEEmcNumSubSectors*kEEmcNumEtas][4];
00158 StEEmcStrip mStrips[kEEmcNumSectors][kEEmcNumSmdUVs][kEEmcNumStrips];
00159
00168 std::vector< StEEmcTowerVec_t > mHitTowers;
00169
00170 StEEmcTower *mHighTower[4];
00171
00176 std::vector< std::vector< StEEmcStripVec_t > > mHitStrips;
00177
00178
00181 Float_t mEnergy[kEEmcNumSectors][6];
00182 Int_t mHits[kEEmcNumSectors][6];
00183
00184 ClassDef(StEEmcA2EMaker,1);
00185
00186 };
00187
00188 inline void StEEmcA2EMaker::threshold(Float_t c, Int_t l){ mSigmaPed[l]=c; }
00189 inline void StEEmcA2EMaker::database(const Char_t *name){ mDbName=name; }
00190 inline void StEEmcA2EMaker::source(const Char_t *name, Int_t type){ mInputName=name; mInputType=type; }
00191
00192 inline StEEmcTower StEEmcA2EMaker::hightower(Int_t layer){ return *mHighTower[layer]; }
00193
00194
00195 #endif