#include #include #include "TF1.h" #include "TCanvas.h" #include "Stntuple/loop/TStnAna.hh" #include "Stntuple/obj/TStnTrackBlock.hh" #include "Stntuple/obj/TStnJetBlock.hh" #include "Stntuple/obj/TStnMetBlock.hh" #include "Stntuple/obj/TStnEmTimingBlock.hh" #include "Stntuple/alg/TStntuple.hh" #include "Stntuple/data/TCalTower.hh" #include "TEmTimingModule.hh" //#include "TAlgorithms.hh" //_____________________________________________________________________________ TEmTimingModule::TEmTimingModule(const char* name, const char* title): TStnModule(name,title) { } //_____________________________________________________________________________ TEmTimingModule::~TEmTimingModule() { } //_____________________________________________________________________________ void TEmTimingModule::BookHistograms() { } //_____________________________________________________________________________ int TEmTimingModule::BeginJob() { // register the data block fHeaderBlock = (TStnHeaderBlock*) RegisterDataBlock("HeaderBlock","TStnHeaderBlock"); fCalDataBlock = (TCalDataBlock*) RegisterDataBlock("CalDataBlock","TCalDataBlock"); fTimingBlock = (TStnEmTimingBlock*) RegisterDataBlock("EmTimingBlock","TStnEmTimingBlock"); // book histograms BookHistograms(); memset(&_allTowers[0][0][0],0,sizeof(EmTimingTower*)*TENETA*TENPHI*5); for(int i_we = 0; i_we < 2; i_we++){ for(int i_phi = 0; i_phi < 24; i_phi++){ for(int i_eta = 0; i_eta < 22; i_eta++){ int iEta = (i_we == 1) ? i_eta + TENETA/2 : TENETA/2 - 1 - i_eta; int iPhi = (TETTYP[iEta] == 5) ? i_phi*2 : i_phi; if(i_eta < 10) _allTowers[0][iEta][iPhi] = new EmTimingTower(0,iEta,iPhi); if(i_eta < 8) _allTowers[2][iEta][iPhi] = new EmTimingTower(2,iEta,iPhi); if(i_eta > 5 && i_eta < 13) _allTowers[3][iEta][iPhi] = new EmTimingTower(3,iEta,iPhi); if(i_eta > 9 && i_eta < 18){ _allTowers[1][iEta][iPhi] = new EmTimingTower(1,iEta,iPhi); } if(i_eta > 11 && i_eta < 22){ _allTowers[4][iEta][iPhi] = new EmTimingTower(4,iEta,iPhi); } if(i_eta >11 && i_eta < 18){ _allTowers[4][iEta][iPhi+1] = new EmTimingTower(4,iEta,iPhi+1); } } } } return 0; } //_____________________________________________________________________________ int TEmTimingModule::BeginRun() { return 0; } //_____________________________________________________________________________ int TEmTimingModule::Event(int ientry) { resetAllTowers(); fHeaderBlock->GetEntry(ientry); fTimingBlock->GetEntry(ientry); fCalDataBlock->GetEntry(ientry); int timeHits = fTimingBlock->NHits(); for(Int_t tt = 0; tt < timeHits; tt++){ int iEta = fTimingBlock->IEta(tt); int iPhi = fTimingBlock->IPhi(tt); int calor = fTimingBlock->Det(tt); EmTimingTower* tower = _allTowers[calor][iEta][iPhi]; int nhits = tower->_nHits; tower->_t0[nhits] = fTimingBlock->Time(tt); tower->_status[nhits] = fTimingBlock->Status(tt); tower->_nHits++; TCalTower* ctow = fCalDataBlock->Tower(iEta,iPhi); TCalTower* ctow1 = NULL; if(TETTYP[iEta] == 5) ctow1 = fCalDataBlock->Tower(iEta,iPhi+1); //if(ctow == NULL) continue; if(calor == 0 && ctow){ tower->_pmt0 = ctow->EmPmt(0); tower->_pmt1 = ctow->EmPmt(1); tower->_energy = ctow->EmEnergy(); }else if(calor == 1){ if( (TETTYP[iEta] == 4 || TETTYP[iEta] == 3) && ctow) { tower->_pmt0 = ctow->EmPmt(2); tower->_pmt1 = ctow->EmPmt(3); tower->_energy = ctow->EmEnergy(); } if(TETTYP[iEta] == 5){ if(ctow!= NULL) tower->_pmt0 = ctow->EmPmt(1); if(ctow1!= NULL) tower->_pmt1 = ctow1->EmPmt(1); if(ctow != NULL) tower->_energy = ctow->EmEnergy(); if(ctow1 != NULL) tower->_energy = tower->_energy + ctow1->EmEnergy(); } }else if(ctow){ tower->_pmt0 = ctow->HadPmt(0); tower->_pmt1 = ctow->HadPmt(1); tower->_energy = ctow->HadEnergy(); } } return 0; } //_____________________________________________________________________________ int TEmTimingModule::EndJob() { printf("----- end job: ---- %s\n",GetName()); return 0; } void TEmTimingModule::getTimeTowers(int calor,TTowersArray* tarray){ for (int i = 0; i < TENETA; i++){ for (int j = 0; j < TENPHI; j++){ EmTimingTower* tower = _allTowers[calor][i][j]; if(tower == NULL) continue; if(tower->nHits() < 1) continue; tarray->push_back(tower); } } } void TEmTimingModule::resetAllTowers(){ for(int calor = 0; calor < 5; calor++){ for (int i = 0; i < TENETA; i++){ for (int j = 0; j < TENPHI; j++){ EmTimingTower* tower = _allTowers[calor][i][j]; if(tower == NULL) continue; tower->Reset(); } } } }