/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/EmcRec/EmcRec-01-02-57/src/EmcRecTofDigitCalib.cxx

Go to the documentation of this file.
00001 //
00002 //  Tof digit to hit
00003 //
00004 //  He Miao 2006, 9,26 
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;   //-0.05 --> 0.05
00037     double rand1 = (double)(rand()%100)/1000.-0.05;   //-0.05 --> 0.05
00038 
00039     //smear 5%
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     //ADC->energy
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; //zpos: m->mm
00074     HepPoint3D pos(r*cos(phi), r*sin(phi), zpos);
00075      
00076     tofHitMap[im+layer*88] = RecEmcTofHit(id, energy, pos);
00077   }
00078 }

Generated on Tue Nov 29 23:13:19 2016 for BOSS_7.0.2 by  doxygen 1.4.7