00001 #include <string.h>
00002 #include <stdio.h>
00003 #include <assert.h>
00004 #include <cmath>
00005
00006 #include <math_constants.h>
00007 #include <StMessMgr.h>
00008
00009 #include "BemcHitList.h"
00010
00011 #include "StMaker.h"
00012 #include "StEmcRawMaker/StBemcTables.h"
00013 #include "StEmcRawMaker/defines.h"
00014 #include "StEmcUtil/geometry/StEmcGeom.h"
00015 #include "StEmcDetector.h"
00016 #include "StEmcModule.h"
00017 #include "StEmcRawHit.h"
00018
00019
00020
00021
00022
00023 BemcHitList::BemcHitList() :
00024 ScintHitList(0.,C_PI/60,120, -1.,0.05,40,"Bemc",4,0.75) {
00025 myTable = new StBemcTables();
00026 geomB = StEmcGeom::instance("bemc");
00027 kSigPed=5.0;
00028
00029 gMessMgr->Message("","I")
00030 <<" BemcHitList::use kSigPed="<<kSigPed
00031 <<endm;
00032 }
00033
00034
00035
00036
00037 void
00038 BemcHitList::initRun() {
00039 LOG_DEBUG <<Form("BemcHitList::initRun() start")<<endm;
00040 ScintHitList::initRun();
00041
00042 int i,j,k;
00043 for(i=0;i<mxm;i++)
00044 for(j=0;j<mxe;j++)
00045 for(k=0;k<mxs;k++)
00046 mes2bin[i][j][k]=-1;
00047
00048
00049 StMaker*mk=(StMaker*)StMaker::GetChain()->GetMaker("GenericVertex");
00050 assert(mk);
00051 myTable->loadTables(mk );
00052
00053 int nB=0,nA=0;
00054 int id;
00055 for(id=1; id<=BTOWSIZE; id++) {
00056
00057
00058 int status;
00059 myTable->getStatus(BTOW, id, status);
00060 int m,e,s;
00061 geomB->getBin(id,m,e,s);
00062 float eta,phi;
00063 geomB->getEta(m,e,eta);
00064 geomB->getPhi(m,s,phi);
00065 if( phi<0) phi+=2*C_PI;
00066
00067
00068 int iEta=etaBin(eta);
00069 int iPhi=phiBin(phi);
00070 assert( iEta>=0);
00071 assert( iPhi>=0);
00072 int iBin=iPhiEta2bin(iPhi,iEta);
00073
00074
00075
00076
00077 assert(mes2bin[m-1][e-1][s-1]==-1);
00078 mes2bin[m-1][e-1][s-1]=iBin;
00079
00080 nB++;
00081 if( status!= 1) continue;
00082
00083 setActive(iBin);
00084 nA++;
00085 }
00086
00087 LOG_INFO <<" BemcHitList::initRun() done, active="<<nA<<" of "<<nB<<" BTOW towers" <<endm;
00088
00089 }
00090
00091
00092
00093 void
00094 BemcHitList::clear(){
00095 ScintHitList::clear();
00096
00097 }
00098
00099
00100
00101 int
00102 BemcHitList::etaBin(float eta){
00103 if(fabs(eta)>0.99) return -1;
00104 int iEta=(int)((eta-eta0)/dEta);
00105 if(iEta<0 || iEta>=nEta) return -1;
00106 return iEta;
00107 }
00108
00109
00110
00111 float
00112 BemcHitList::bin2EtaLeft(int iEta){
00113 assert(iEta>=0);
00114 assert(iEta<nEta);
00115 float etaF= eta0+iEta*dEta ;
00116 if(etaF<-0.99) etaF=0.99;
00117 return etaF;
00118 }
00119
00120
00121
00122
00123 BemcHitList::~BemcHitList(){
00124
00125 }
00126
00127
00128
00129 void
00130 BemcHitList::build ( StEmcDetector*det, float adcMin){
00131 for(int m = 1; m<=BEMCMODULES;m++) {
00132 StEmcModule* module = det->module(m);
00133 assert(module);
00134 StSPtrVecEmcRawHit& rawHit=module->hits();
00135 for(UInt_t k=0;k<rawHit.size();k++) {
00136
00137 int m=rawHit[k]->module();
00138 int e=rawHit[k]->eta();
00139 int s=abs(rawHit[k]->sub());
00140 int iBin=mes2bin[m-1][e-1][s-1];
00141
00142 if ( getActive(iBin)<0) continue;
00143
00144 int id;
00145 geomB->getId(m,e,s,id);
00146 Float_t ped,sig;
00147 myTable->getPedestal(BTOW, id, 0, ped,sig);
00148 float rawAdc = rawHit[k]->adc();
00149 if( rawAdc<ped+ kSigPed*sig ) continue;
00150 float adc= rawAdc -ped;
00151 if(adc< adcMin) continue;
00152 setFired(iBin);
00153 }
00154 }
00155
00156 };
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166