00001
00002 #include "StjEEMCMuDst.h"
00003
00004 #include "StMaker.h"
00005 #include "StMuDSTMaker/COMMON/StMuDst.h"
00006 #include "StMuDSTMaker/COMMON/StMuEvent.h"
00007 #include "StMuDSTMaker/COMMON/StMuEmcCollection.h"
00008
00009 #include "StEEmcUtil/database/StEEmcDb.h"
00010 #include "StEEmcUtil/database/EEmcDbItem.h"
00011 #include "StEEmcUtil/EEmcGeom/EEmcGeomSimple.h"
00012
00013
00014 StjEEMCMuDst::StjEEMCMuDst() : mEeDb((StEEmcDb*)StMaker::GetChain()->GetDataSet("StEEmcDb"))
00015 {
00016 _setVertex = false;
00017 }
00018
00019 void StjEEMCMuDst::Init()
00020 {
00021 if (mEeDb) mEeDb->setThreshold(3);
00022 }
00023
00024 StjTowerEnergyList StjEEMCMuDst::getEnergyList()
00025 {
00026 StMuEmcCollection* muEmc = StMuDst::muEmcCollection();
00027
00028 StjTowerEnergyList ret;
00029
00030 for (int id = 0; id < muEmc->getNEndcapTowerADC(); ++id) {
00031
00032 int rawadc, sec, sub, etabin;
00033 muEmc->getEndcapTowerADC(id, rawadc, sec, sub, etabin);
00034
00035
00036 if (rawadc < 0 || rawadc >= 4095) continue;
00037
00038 assert(1 <= sec && sec <= 12);
00039 assert(1 <= sub && sub <= 5);
00040 assert(1 <= etabin && etabin <= 12);
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 const EEmcDbItem *dbItem = mEeDb->getT(sec,sub-1+'A',etabin);
00071
00072 if(dbItem->fail) continue;
00073 if(dbItem->stat) continue;
00074 if(dbItem->gain<=0.) continue;
00075 if(rawadc<dbItem->thr) continue;
00076
00077 double adc = rawadc - (dbItem->ped);
00078 double energy = adc/(dbItem->gain);
00079
00080 StjTowerEnergy energyDeposit;
00081 energyDeposit.runNumber = StMuDst::event()->runId();
00082 energyDeposit.eventId = StMuDst::event()->eventId();
00083 energyDeposit.detectorId = kEndcapEmcTowerId;
00084 energyDeposit.towerId = (sec-1)*60+(sub-1)*12+(etabin-1);
00085
00086 const EEmcGeomSimple& geom = EEmcGeomSimple::Instance();
00087 TVector3 towerLocation = geom.getTowerCenter(sec-1,sub-1,etabin-1);
00088
00089 energyDeposit.towerR = towerLocation.Perp();
00090 energyDeposit.towerEta = towerLocation.Eta();
00091 energyDeposit.towerPhi = towerLocation.Phi();
00092
00093 if (_setVertex) {
00094 energyDeposit.vertexX = _vx;
00095 energyDeposit.vertexY = _vy;
00096 energyDeposit.vertexZ = _vz;
00097 }
00098 else {
00099 StThreeVectorF vertex = StMuDst::event()->primaryVertexPosition();
00100
00101 energyDeposit.vertexX = vertex.x();
00102 energyDeposit.vertexY = vertex.y();
00103 energyDeposit.vertexZ = vertex.z();
00104 }
00105
00106 energyDeposit.energy = energy;
00107 energyDeposit.adc = rawadc;
00108 energyDeposit.pedestal = dbItem->ped;
00109 energyDeposit.rms = dbItem->sigPed;
00110 energyDeposit.status = dbItem->stat == 0;
00111
00112 if(energyDeposit.energy < 0.01) continue;
00113
00114 ret.push_back(energyDeposit);
00115
00116 }
00117
00118 return ret;
00119 }