00001
00002
00003
00004
00005
00006 #include "EmcRec/EmcRecTofDigitCalib.h"
00007 #include "Identifier/TofID.h"
00008 #include "RawEvent/RawDataUtil.h"
00009
00010 EmcRecTofDigitCalib::EmcRecTofDigitCalib()
00011 {}
00012
00013 EmcRecTofDigitCalib::~EmcRecTofDigitCalib()
00014 {}
00015
00016 void EmcRecTofDigitCalib::Convert(TofDigiCol* tofDigiCol,
00017 RecEmcTofHitMap& tofHitMap)
00018 {
00019 TofDigiCol::iterator iter2;
00020 for(iter2=tofDigiCol->begin();
00021 iter2!=tofDigiCol->end();
00022 iter2++,iter2++) {
00023
00024 Identifier id=(*iter2)->identify();
00025 bool is_barrel = TofID::is_barrel(id);
00026 int layer = TofID::layer(id);
00027 int im = TofID::phi_module(id);
00028
00029 if(!is_barrel) return;
00030
00031 double adc0 = RawDataUtil::TofCharge((*iter2)->getChargeChannel())*2;
00032 double tdc0 = RawDataUtil::TofTime((*iter2)->getTimeChannel());
00033 double adc1 = RawDataUtil::TofCharge((*(iter2+1))->getChargeChannel())*2;
00034 double tdc1 = RawDataUtil::TofTime((*(iter2+1))->getTimeChannel());
00035
00036 double rand0 = (double)(rand()%100)/1000.-0.05;
00037 double rand1 = (double)(rand()%100)/1000.-0.05;
00038
00039
00040 adc0 *= (1+rand0);
00041 adc1 *= (1+rand1);
00042
00043 double zpos, energy, e0, e1;
00044 zpos = 0.08331*(tdc1-tdc0);
00045 if(fabs(zpos)>1.15) continue;
00046
00047
00048 if((adc0>46.&&adc0<920.) && (adc1<=46.||adc1>=920.)) {
00049 energy = adc0/exp(2.783+0.3133*zpos);
00050 } else if((adc1>46.&&adc1<920.) && (adc0<=46.||adc0>=920.)) {
00051 energy = adc1/exp(2.784-0.3079*zpos);
00052 } else if((adc0>46.&&adc0<920.) && (adc1>46.&&adc1<920.)) {
00053 e0 = adc0/exp(2.783+0.3133*zpos);
00054 e1 = adc1/exp(2.784-0.3079*zpos);
00055 energy = (e0+e1)/2;
00056 } else if(adc0>=920.&&adc1>=920.) {
00057 e0 = 920./exp(2.783+0.3133*zpos);
00058 e1 = 920./exp(2.784-0.3079*zpos);
00059 energy = e0>e1?e0:e1;
00060 } else {
00061 continue;
00062 }
00063
00064 double phi,r;
00065 if(layer==0) {
00066 phi=(im+0.5)*CLHEP::twopi/88.;
00067 r=838.5;
00068 } else {
00069 phi=im*CLHEP::twopi/88.;
00070 r=895.5;
00071 }
00072
00073 zpos*=1000;
00074 HepPoint3D pos(r*cos(phi), r*sin(phi), zpos);
00075
00076 tofHitMap[im+layer*88] = RecEmcTofHit(id, energy, pos);
00077 }
00078 }