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
00016 class StMuEmcCollection;
00017 class StEmcCollection;
00018
00019 class StEEmcA2EMaker : public StMaker {
00020 public:
00021 StEEmcA2EMaker( const Char_t *name="mEEanalysis" );
00022 virtual ~StEEmcA2EMaker();
00023
00025 virtual Int_t Init();
00027 virtual Int_t Make();
00029 virtual void Clear(Option_t *opts="");
00030
00035 void threshold(Float_t cut, Int_t layer) { mSigmaPed[layer]=cut; }
00036
00038 void database(const Char_t * ) { }
00039
00043 void source(const Char_t * , Int_t = 0) { }
00044
00049 StEEmcTowerVec_t &towers(Int_t layer=0){ return mHitTowers[layer]; }
00050 const StEEmcTowerVec_t &towers(Int_t layer=0) const { return mHitTowers[layer]; }
00051
00053 StEEmcStripVec_t &strips(Int_t sec, Int_t pln ){ return mHitStrips[sec][pln]; }
00054 const StEEmcStripVec_t &strips(Int_t sec, Int_t pln ) const { return mHitStrips[sec][pln]; }
00055
00058 Int_t numberOfHitTowers(Int_t layer) const { return (Int_t)mHitTowers[layer].size(); }
00059
00063 StEEmcTower &hittower(Int_t hit, Int_t layer){ return mHitTowers[layer][hit]; }
00064 const StEEmcTower &hittower(Int_t hit, Int_t layer) const { return mHitTowers[layer][hit]; }
00065
00069 StEEmcTower &tower(Int_t index, Int_t layer=0) { return mTowers[index][layer]; }
00070 const StEEmcTower &tower(Int_t index, Int_t layer=0) const { return mTowers[index][layer]; }
00071
00077 StEEmcTower &tower(Int_t sector, Int_t subsector, Int_t etabin, Int_t layer=0 ){return tower(index(sector,subsector,etabin),layer);}
00078 const StEEmcTower &tower(Int_t sector, Int_t subsector, Int_t etabin, Int_t layer=0) const {return tower(index(sector,subsector,etabin),layer);}
00079
00083 StEEmcTower *tower(TVector3 &r, Int_t layer);
00084 const StEEmcTower *tower(TVector3 &r, Int_t layer) const;
00085
00087 Int_t phibin( Int_t sector, Int_t subsector) const { return sector * 5 + subsector; }
00089 Int_t index( Int_t sector, Int_t subsector, Int_t etabin) const { return 12 * phibin(sector, subsector) + etabin; }
00090
00091
00094 StEEmcTower &hightower(Int_t layer=0) { return *mHighTower[layer]; }
00095 const StEEmcTower &hightower(Int_t layer=0) const { return *mHighTower[layer]; }
00096
00100 Int_t numberOfHitStrips(Int_t sector, Int_t plane) const { return (Int_t)mHitStrips[sector][plane].size(); }
00101
00106 StEEmcStrip &hitstrip(Int_t sec,Int_t pl, Int_t hit){ return mHitStrips[sec][pl][hit]; }
00107 const StEEmcStrip &hitstrip(Int_t sec,Int_t pl, Int_t hit) const { return mHitStrips[sec][pl][hit]; }
00108
00113 StEEmcStrip &strip(Int_t sector, Int_t plane, Int_t strip) { return mStrips[sector][plane][strip]; }
00114 const StEEmcStrip &strip(Int_t sector, Int_t plane, Int_t strip) const { return mStrips[sector][plane][strip]; }
00115
00120 Float_t energy(Int_t sector, Int_t layer) const { return mEnergy[sector][layer]; }
00122 Float_t energy(Int_t layer) const;
00123
00128 Int_t numberOfHits(Int_t sector, Int_t layer) const { return mHits[sector][layer]; }
00129
00132 void scale(Float_t s){ mScale=s; }
00133
00134 virtual const char* GetCVS() const
00135 {static const char cvs[]="Tag $Name: $ $Id: StEEmcA2EMaker.h,v 1.6 2011/04/11 19:35:40 fisyak Exp $ built "__DATE__" "__TIME__; return cvs;}
00136
00137 protected:
00138
00139 Float_t mScale;
00140 Float_t mSigmaPed[6];
00142 const StEEmcDb *mDbMaker;
00144 const EEmcGeomSimple *mEEgeom;
00146
00147
00148
00149 Bool_t readData();
00151
00152
00153 Bool_t fillFromMuDst( const StMuEmcCollection *emc );
00155 Bool_t fillFromSt( const StEmcCollection *emc );
00156
00163 void addTowerHit(Int_t sec, Int_t sub, Int_t eta, Float_t adc, Int_t layer);
00169 void addSmdHit(Int_t sec, Int_t plane, Int_t str, Float_t adc );
00170
00172 StEEmcTower mTowers[kEEmcNumSectors*kEEmcNumSubSectors*kEEmcNumEtas][4];
00174 StEEmcStrip mStrips[kEEmcNumSectors][kEEmcNumSmdUVs][kEEmcNumStrips];
00175
00184 std::vector< StEEmcTowerVec_t > mHitTowers;
00185
00186 StEEmcTower *mHighTower[4];
00188
00189
00190
00191
00192 std::vector< std::vector< StEEmcStripVec_t > > mHitStrips;
00193
00194
00197 Float_t mEnergy[kEEmcNumSectors][6];
00199 Int_t mHits[kEEmcNumSectors][6];
00200
00202 ClassDef(StEEmcA2EMaker,1);
00203
00204 };
00205
00206 #endif