00001
00002
00003 #include <assert.h>
00004 #include <stdlib.h>
00005
00006 #include <TClonesArray.h>
00007
00008 #include <TObjArray.h>
00009
00010 #include "EzEEsmdCal.h"
00011
00012 #include "StEEmcUtil/EEfeeRaw/EEfeeRawEvent.h"
00013 #include "StEEmcUtil/EEfeeRaw/EEstarTrig.h"
00014 #include "StEEmcUtil/EEfeeRaw/EEmcEventHeader.h"
00015
00016 #include "StEEmcUtil/EEfeeRaw/EEfeeDataBlock.h"
00017 #include "StEEmcUtil/EEfeeRaw/EEname2Index.h"
00018
00019 #include "StEEmcUtil/database/EEmcDbItem.h"
00020
00021 #include "StEEmcUtil/EEmcGeom/EEmcGeomSimple.h"
00022
00023 #ifdef StRootFREE
00024 #include "EEmcDb/EEmcDb.h"
00025 #else
00026 #include "StEEmcUtil/database/StEEmcDb.h"
00027 #endif
00028
00029
00030 ClassImp(EzEEsmdCal)
00031
00032
00033
00034 EzEEsmdCal::EzEEsmdCal(int sect){
00035 printf("EzEEsmdCal() constructed\n");
00036 eHead=0;
00037 eEve=0;
00038 setSector(sect);
00039 }
00040
00041
00042
00043 void EzEEsmdCal::init (){
00044 EEsmdCal::init();
00045 }
00046
00047
00048
00049 EzEEsmdCal::~EzEEsmdCal() {}
00050
00051
00052
00053
00054 void EzEEsmdCal::make(){
00055
00056 EEsmdCal::clear();
00057 unpackEzTree();
00058 findSectorMip();
00059
00060 }
00061
00062
00063
00064 void EzEEsmdCal::unpackEzTree(){
00065 nInpEve++;
00066
00067
00068 unpackEzTail();
00069 unpackEzSmd();
00070 return ;
00071 }
00072
00073
00074
00075 void EzEEsmdCal:: unpackEzTail(){
00076
00077
00078 int nCr=0;
00079 int ic;
00080 for(ic=0;ic<eEve->block->GetEntries();ic++) {
00081 EEfeeDataBlock *b=(EEfeeDataBlock *)eEve->block->At(ic);
00082 if( !b->isValid() ) continue;
00083
00084 int crateID=b->getCrateID();
00085
00086 nCr++;
00087
00088 int chan;
00089 UShort_t* data=b->getData();
00090 int nd=b->getValidDataLen();
00091
00092 for(chan=0;chan<nd;chan++) {
00093 const EEmcDbItem *x=eeDb->getByCrate(crateID,chan);
00094 if(x==0) continue;
00095 if(x->isSMD()) break;
00096
00097 if(x->fail ) continue;
00098 if(x->stat & killStat) continue;
00099
00100
00101 int iphi=(x->sec-1)*MaxSubSec+(x->sub-'A');
00102 int ieta=x->eta-1;
00103 assert(iphi>=0 && iphi<MaxPhiBins);
00104 assert(ieta>=0 && ieta<MaxEtaBins);
00105
00106 int iT=-1;
00107 if(x->name[2]=='T'){
00108 iT=0;
00109 } else{
00110 iT=x->name[2]-'P'+1;
00111 }
00112 assert(iT>=0 && iT<mxTile);
00113
00114 float rawAdc=data[chan];
00115 float adc=rawAdc-x->ped;
00116 tileAdc[iT][ieta][iphi]=adc;
00117 tileThr[iT][ieta][iphi]=rawAdc>x->thr;
00118 killT[iT][ieta][iphi]=false;
00119 if(x->gain<=0) continue;
00120
00121 tileEne[iT][ieta][iphi]=adc/x->gain;
00122 }
00123 }
00124
00125 return ;
00126
00127 }
00128
00129
00130 void EzEEsmdCal:: unpackEzSmd(){
00131
00132 int nCr=0;
00133 int ic;
00134 for(ic=0;ic<eEve->block->GetEntries();ic++) {
00135 EEfeeDataBlock *b=(EEfeeDataBlock *)eEve->block->At(ic);
00136 if( !b->isValid() ) continue;
00137
00138 int crateID=b->getCrateID();
00139 if(crateID<=MaxTwCrateID) continue;
00140 nCr++;
00141
00142 int chan;
00143 UShort_t* data=b->getData();
00144 int nd=b->getValidDataLen();
00145
00146 for(chan=0;chan<nd;chan++) {
00147 const EEmcDbItem *x=eeDb->getByCrate(crateID,chan);
00148 if(x==0) continue;
00149
00150 if(!x->isSMD()) break;
00151
00152
00153 if(x->fail ) continue;
00154 if(x->stat & killStat) continue;
00155 if(x->sec!=sectID ) continue;
00156
00157 float rawAdc=data[chan];
00158 float adc=rawAdc-x->ped;
00159
00160 if(adc>maxStripAdc) continue;
00161 smdAdc[x->plane-'U'][x->strip-1]=adc;
00162
00163 if(x->gain<=0)continue;
00164 smdEne[x->plane-'U'][x->strip-1]=adc/x->gain;
00165 }
00166 }
00167
00168 return ;
00169
00170 }