#if !defined (__CINT__) || defined (__MAKECINT__) #include "TH1.h" #include "TH2.h" #include "TProfile.h" #include #include #include #include #include #endif //static int TETTYP[TENETA] = { 11,10,9,8,7,6,6,6,5,5,5,5,5,5,4,3,2,2, // 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, // 2,2,3,4,5,5,5,5,5,5,6,6,6,7,8,9,10,11 }; class EmTimingTower{ public: friend class TEmTimingModule; enum{azimuth_mask=0x0000001f, azimuth_shift=6}; enum{rapidity_mask=0x0000001f,rapidity_shift = 1}; enum{westeast_mask=0x00000001,westeast_shift = 11}; enum{phototube_mask=0x00000001,phototube_shift=0}; enum{NHITS=8}; EmTimingTower(int calor,int iEta,int iPhi){ _iEta = iEta; _iPhi = iPhi; _calor = calor; _nHits = 0; _pmt0 = _pmt1 = 0.; _energy = 0.; memset(&_t0[0],0,sizeof(float)*NHITS); memset(&_status[0],0,sizeof(int)*NHITS); memset(&_wt0[0],0,sizeof(float)*NHITS); } void Reset(){ _nHits = 0; _pmt0 = _pmt1 = 0.; _energy = 0.; memset(&_t0[0],0,sizeof(float)*NHITS); memset(&_status[0],0,sizeof(int)*NHITS); memset(&_wt0[0],0,sizeof(float)*NHITS); } inline float getT0(int i){return _t0[i];} inline float getWidth(int i){ return _wt0[i];} inline float getPmt0(){ return _pmt0;} inline float getPmt1(){ return _pmt1;} inline float getEnergy(){ return _energy;} inline int getStatus(int i) {return _status[i];} inline int nHits(){return _nHits;} inline int iEta(){return _iEta;} inline int iPhi(){return _iPhi;} inline int Calor(){return _calor;} int side(){return (_iEta < TENETA/2) ? 0:1;} int wedge() { return (TETTYP[_iEta] == 5) ? _iPhi/2 : _iPhi; } int rapidity() { return (_iEta >= TENETA/2) ? _iEta - TENETA/2 : -(TENETA/2 - 1 - _iEta); } int geomid(){ int se = this->side(); int we = this->wedge(); int rap = rapidity(); int ipmt = 0; if(TETTYP[_iEta] == 5){ we = _iPhi/2; if(_calor == 4){ if( (we % 2) == 0) ipmt = 0; else ipmt = 1; } } return make_chid(se,we,rap,ipmt); } static int get_phi(const int dat) { return ((dat >> azimuth_shift) & azimuth_mask); } static int get_eta(const int dat) { return ((dat >> rapidity_shift) & rapidity_mask) ; } static int get_we(const int dat) { return ((dat >> westeast_shift) & westeast_mask) ; } static int get_pmt(const int dat) { return ((dat >> phototube_shift) & phototube_mask); } static int make_chid(const int ew,const int phi, const int eta,const int pmt) { int dat = 0; dat += ( (ew & westeast_mask)<< westeast_shift) ; dat += ( (phi & azimuth_mask)<< azimuth_shift) ; dat += ( (eta & rapidity_mask)<< rapidity_shift) ; dat += ( (pmt & phototube_mask)<< phototube_shift) ; return dat; } protected: EmTimingTower(){}; float _t0[NHITS]; float _wt0[NHITS]; float _width[NHITS]; float _pmt0, _pmt1, _energy; int _status[NHITS]; int _nHits; int _iEta, _iPhi; int _calor; }; //EmTimingTower* _allTowers[5][TENETA][TENPHI]; class TEmTimingModule: public TStnModule { public: typedef std::vector TTowersArray; typedef std::vector::iterator TTowersArrayI; struct Hist_t { TH1* hist1; }; protected: TStnHeaderBlock* fHeaderBlock; TCalDataBlock* fCalDataBlock; TStnEmTimingBlock* fTimingBlock; // pointers to the data blocks used, // header block is always available via // TStnModule::GetHeaderBlock() // histograms filled Hist_t fHist; // stub finder public: TEmTimingModule(const char* name="EmTimingAna", const char* title="EmTimingAna"); ~TEmTimingModule(); // ****** accessors Hist_t* GetHist () { return &fHist; } TStnHeaderBlock* GetHeaderBlock() { return fHeaderBlock; } TCalDataBlock* GetCalDataBlock() { return fCalDataBlock; } TStnEmTimingBlock* getTimingBlock() {return fTimingBlock;} // ****** setters // ****** overloaded methods of // TStnModule int BeginJob(); int BeginRun(); int Event (int ientry); int EndJob (); // ****** other methods void BookHistograms(); EmTimingTower* _allTowers[5][TENETA][TENPHI]; EmTimingTower* getTimingTower(int calor,int iEta, int iPhi){ return _allTowers[calor][iEta][iPhi]; } void getTimeTowers(int,TTowersArray*); void resetAllTowers(); ClassDef(TEmTimingModule,1) };