#include <EmcTCFinder.h>
Definition at line 11 of file EmcTCFinder.h.
EmcTCFinder::EmcTCFinder | ( | ) |
Definition at line 37 of file EmcTCFinder.cxx.
References emcCalibConstSvc, and m_RealizationSvc.
Referenced by get_Emc().
00038 { 00039 ISvcLocator* svcLocator = Gaudi::svcLocator(); 00040 IRealizationSvc *tmpReal; 00041 StatusCode status = svcLocator->service("RealizationSvc",tmpReal); 00042 if (!status.isSuccess()) 00043 { 00044 cout << "FATAL: Could not initialize Realization Service" << endl; 00045 } else { 00046 m_RealizationSvc=dynamic_cast<RealizationSvc*>(tmpReal); 00047 } 00048 00049 // Get EmcCalibConstSvc. 00050 status = svcLocator->service("EmcCalibConstSvc", emcCalibConstSvc); 00051 if(status != StatusCode::SUCCESS) { 00052 cout << "EmcRecDigit2Hit Error: Can't get EmcCalibConstSvc." << endl; 00053 } 00054 }
EmcTCFinder::~EmcTCFinder | ( | ) |
EmcTCFinder * EmcTCFinder::get_Emc | ( | void | ) | [static] |
Definition at line 32 of file EmcTCFinder.cxx.
References emc_Pointer, and EmcTCFinder().
Referenced by EmcCCount::EmcCCount(), EmcESum::EmcESum(), and BesTrigL1::initialize().
00032 { 00033 if(!emc_Pointer) emc_Pointer = new EmcTCFinder(); 00034 return emc_Pointer; 00035 }
double EmcTCFinder::getBLKE | ( | int | i | ) | [inline] |
int EmcTCFinder::getBLKId | ( | int | TCTheta, | |
int | TCPhi | |||
) | const |
Definition at line 283 of file EmcTCFinder.cxx.
Referenced by BesTrigL1::getEmcAnalogSig().
00284 { 00285 int id,parity; 00286 parity = (int)TCPhi/5; 00287 if(parity%2==0) 00288 { 00289 if(TCTheta<6) id = parity; 00290 if(TCTheta>=6) id = parity+6; 00291 } 00292 if(parity%2!=0) 00293 { 00294 if(TCTheta<5) id = parity; 00295 if(TCTheta>=5) id = parity+6; 00296 } 00297 00298 return id; 00299 }
int& EmcTCFinder::getBTC | ( | int | i, | |
int | j | |||
) | [inline] |
Definition at line 27 of file EmcTCFinder.h.
References BTC.
Referenced by EmcCCount::findCluster().
double& EmcTCFinder::getBTC_ADC | ( | int | i, | |
int | j | |||
) | [inline] |
Definition at line 31 of file EmcTCFinder.h.
References BTCEnergy_adc.
00031 { return BTCEnergy_adc[i][j];}
double& EmcTCFinder::getBTCEnergy | ( | int | i, | |
int | j | |||
) | [inline] |
Definition at line 23 of file EmcTCFinder.h.
References BTCEnergy.
Referenced by EmcCCount::getClusterId().
int& EmcTCFinder::getEETC | ( | int | i, | |
int | j | |||
) | [inline] |
Definition at line 28 of file EmcTCFinder.h.
References EETC.
Referenced by EmcCCount::findCluster().
double& EmcTCFinder::getEETC_ADC | ( | int | i, | |
int | j | |||
) | [inline] |
Definition at line 32 of file EmcTCFinder.h.
References EETCEnergy_adc.
00032 { return EETCEnergy_adc[i][j];}
double& EmcTCFinder::getEETCEnergy | ( | int | i, | |
int | j | |||
) | [inline] |
Definition at line 24 of file EmcTCFinder.h.
References EETCEnergy.
Referenced by EmcCCount::getClusterId().
00024 { return EETCEnergy[i][j];}
int EmcTCFinder::getTCPhiId | ( | int | partId, | |
int | ThetaNb, | |||
int | PhiNb | |||
) |
Definition at line 222 of file EmcTCFinder.cxx.
References TCPhiNb.
Referenced by BesTrigL1::getEmcAnalogSig(), and setEmcDigi().
00223 { 00224 if(partId==1) 00225 TCPhiNb = int(PhiNb/4); 00226 /* 00227 //trigger cell in endcaps theta*phi = 2*16 00228 if(partId==0) 00229 { 00230 if(ThetaNb<2) TCPhiNb = int(PhiNb/4); 00231 if(ThetaNb>=2&&ThetaNb<4) TCPhiNb = int(PhiNb/5); 00232 if(ThetaNb>=4) TCPhiNb = int(PhiNb/6); 00233 } 00234 if(partId==2) 00235 { 00236 if(ThetaNb<2) TCPhiNb = int(PhiNb/4); 00237 if(ThetaNb>=2&&ThetaNb<4) TCPhiNb = int(PhiNb/5); 00238 if(ThetaNb>=4) TCPhiNb = int(PhiNb/6); 00239 } 00240 */ 00241 // trigger cell in endcaps theta*phi = 1*32 00242 if(partId==0) 00243 { 00244 if(ThetaNb<2) TCPhiNb = int(PhiNb/2); 00245 if(ThetaNb==2) 00246 { 00247 int quot = int(PhiNb/5); 00248 int rema = PhiNb%5; 00249 if(rema <= 1) TCPhiNb = 2*quot; 00250 if(rema > 1) TCPhiNb = 2*quot + 1; 00251 } 00252 if(ThetaNb==3) 00253 { 00254 int quot = int(PhiNb/5); 00255 int rema = PhiNb%5; 00256 if(rema <= 2) TCPhiNb = 2*quot; 00257 if(rema > 2) TCPhiNb = 2*quot + 1; 00258 } 00259 if(ThetaNb>=4) TCPhiNb = int(PhiNb/3); 00260 } 00261 if(partId==2) 00262 { 00263 if(ThetaNb<2) TCPhiNb = int(PhiNb/2); 00264 if(ThetaNb==2) 00265 { 00266 int quot = int(PhiNb/5); 00267 int rema = PhiNb%5; 00268 if(rema <= 1) TCPhiNb = 2*quot; 00269 if(rema > 1) TCPhiNb = 2*quot + 1; 00270 } 00271 if(ThetaNb==3) 00272 { 00273 int quot = int(PhiNb/5); 00274 int rema = PhiNb%5; 00275 if(rema <= 2) TCPhiNb = 2*quot; 00276 if(rema > 2) TCPhiNb = 2*quot + 1; 00277 } 00278 if(ThetaNb>=4) TCPhiNb = int(PhiNb/3); 00279 } 00280 00281 return TCPhiNb; 00282 }
int EmcTCFinder::getTCThetaId | ( | int | partId, | |
int | ThetaNb, | |||
int | PhiNb | |||
) |
Definition at line 179 of file EmcTCFinder.cxx.
References TCThetaNb.
Referenced by BesTrigL1::getEmcAnalogSig(), and setEmcDigi().
00180 { 00181 //Note: There are 44*120(theta*phi) crystals and they are divided 11*30 trigger cell in 00182 //barrel emc. So each trigger cell includes 4*4 crystals 00183 if(partId==1) 00184 { 00185 //if(ThetaNb<2) 00186 //TCThetaNb = 0; 00187 //else if(ThetaNb>41) 00188 // TCThetaNb = 11; 00189 //else 00190 //TCThetaNb = int((ThetaNb+2)/4); 00191 TCThetaNb = (int)ThetaNb/4; 00192 } 00193 /* if(partId==0) 00194 { 00195 if(ThetaNb<3) TCThetaNb = 0; 00196 if(ThetaNb>3) TCThetaNb = 1; 00197 if(ThetaNb==3) 00198 { 00199 int n = PhiNb%10; 00200 if(n>2&&n<7) 00201 TCThetaNb = 0; 00202 else TCThetaNb = 1; 00203 } 00204 } 00205 if(partId==2) 00206 { 00207 if(ThetaNb<3) TCThetaNb = 0; 00208 if(ThetaNb>3) TCThetaNb = 1; 00209 if(ThetaNb==3) 00210 { 00211 int n = PhiNb%10; 00212 if(n>2&&n<7) 00213 TCThetaNb = 0; 00214 else TCThetaNb = 1; 00215 } 00216 } 00217 */ 00218 if(partId==0) TCThetaNb = 0; 00219 if(partId==2) TCThetaNb = 0; 00220 return TCThetaNb; 00221 }
int& EmcTCFinder::getWETC | ( | int | i, | |
int | j | |||
) | [inline] |
Definition at line 29 of file EmcTCFinder.h.
References WETC.
Referenced by EmcCCount::findCluster().
double& EmcTCFinder::getWETC_ADC | ( | int | i, | |
int | j | |||
) | [inline] |
Definition at line 33 of file EmcTCFinder.h.
References WETCEnergy_adc.
00033 { return WETCEnergy_adc[i][j];}
double& EmcTCFinder::getWETCEnergy | ( | int | i, | |
int | j | |||
) | [inline] |
Definition at line 25 of file EmcTCFinder.h.
References WETCEnergy.
Referenced by EmcCCount::getClusterId().
00025 { return WETCEnergy[i][j];}
void EmcTCFinder::setEmcBE | ( | std::vector< double > | vBE | ) |
Definition at line 166 of file EmcTCFinder.cxx.
References BlkE, and genRecEmupikp::i.
Referenced by BesTrigL1::runAclock_emc().
00166 { 00167 //reset block energy 00168 for(int i = 0; i < 16; i++) { 00169 BlkE[i] = 0; 00170 } 00171 if(vBE.size() != 0) { 00172 if(vBE.size() != 16 ) std::cerr << "The number of block is not equal 16, please check it (in EmcTCFinder::setEmcBE() )" << std::endl; 00173 for(int i = 0; i < vBE.size(); i++) { 00174 BlkE[i] = vBE[i]; 00175 } 00176 } 00177 }
void EmcTCFinder::setEmcDigi | ( | EmcDigiCol * | emcDigiCol | ) |
Definition at line 58 of file EmcTCFinder.cxx.
References EmcID::barrel_ec(), BTCEnergy, BTCEnergy_adc, EETCEnergy, EETCEnergy_adc, emcCalibConstSvc, IEmcCalibConstSvc::getIndex(), getTCPhiId(), getTCThetaId(), RealizationSvc::getTrgGain(), genRecEmupikp::i, ganga-rec::j, m_RealizationSvc, EmcID::phi_module(), TrigConf::TCPHINO_B, TrigConf::TCPHINO_E, TrigConf::TCTHETANO_B, TrigConf::TCTHETANO_E, EmcID::theta_module(), WETCEnergy, and WETCEnergy_adc.
00059 { 00060 //double energy; 00061 double tot_adc = 0.; 00062 double adc = 0., adc1 = 0., tdc = 0.; 00063 unsigned int measure; 00064 //reset tc energy of barrel and endcap 00065 for(int i=0;i<TrigConf::TCTHETANO_B;i++) 00066 for(int j=0;j<TrigConf::TCPHINO_B;j++) { 00067 BTCEnergy[i][j] = 0; 00068 BTCEnergy_adc[i][j] = 0; 00069 } 00070 for(int i=0;i<TrigConf::TCTHETANO_E;i++) 00071 for(int j=0;j<TrigConf::TCPHINO_E;j++) 00072 { 00073 EETCEnergy[i][j] = 0; 00074 WETCEnergy[i][j] = 0; 00075 EETCEnergy_adc[i][j] = 0; 00076 WETCEnergy_adc[i][j] = 0; 00077 } 00078 EmcDigiCol::iterator iter3; 00079 Identifier id; 00080 for (iter3=emcDigiCol->begin();iter3!= emcDigiCol->end();iter3++) { 00081 id=(*iter3)->identify(); 00082 00083 unsigned int module; 00084 unsigned int theta; 00085 unsigned int phi; 00086 module = EmcID::barrel_ec(id); 00087 theta = EmcID::theta_module(id); 00088 phi = EmcID::phi_module(id); 00089 adc = double ((*iter3)->getChargeChannel()); 00090 adc1 = double ((*iter3)->getChargeChannel()); 00091 measure = (*iter3)->getMeasure(); 00092 tdc = (*iter3)->getTimeChannel(); 00093 00094 int index = emcCalibConstSvc->getIndex(module,theta,phi); 00095 //divided by electronics calibration constants and times trigger gain 00096 //double trgGain = ((50./255.)*(m_RealizationSvc->getTrgGain(index))/60.)*5*0.5; 00097 double trgGain = m_RealizationSvc->getTrgGain(index); 00098 std::cout <<"partId, thetaId, phiId, trgGain: " << module << ", " << theta << ", " << phi << ", " << trgGain << std::endl; 00099 //if((*iter3)->getMeasure()==0) adc = adc*(m_RealizationSvc->getEleCalib(index,7))*(trgGain)*800.*2/65535; 00100 //else if((*iter3)->getMeasure()==1) adc = adc*(m_RealizationSvc->getEleCalib(index,4))*(trgGain)*800.*2/65535; 00101 //else adc = adc*(m_RealizationSvc->getEleCalib(index,1))*(trgGain)*800.*2/65535; 00102 if((*iter3)->getMeasure()==0) adc = adc*2*800.*2/65535.*(trgGain); 00103 else if((*iter3)->getMeasure()==1) adc = adc*16*800.*2/65535*(trgGain); 00104 else adc = adc*64*800.*2/65535*(trgGain); 00105 00106 //double trgConst = m_RealizationSvc->getTrgConst(index); 00107 //if((*iter3)->getMeasure()==0) adc1 = adc1*2*800.*2/65535.*(trgConst)*0.333; 00108 //else if((*iter3)->getMeasure()==1) adc1 = adc1*16*800.*2/65535*(trgConst)*0.333; 00109 //else adc1 = adc1*64*800.*2/65535*(trgConst)*0.333; 00110 00111 //std::cout << "eCalib: " << m_RealizationSvc->getEleCalib(index,7) << "," << m_RealizationSvc->getEleCalib(index,4) << "," << m_RealizationSvc->getEleCalib(index,1) << " TrigGain: " << m_RealizationSvc->getTrgGain(index) << std::endl; 00112 //std::cout << " TrgGain: " << trgGain << " adc: " << adc << std::endl; 00113 //adc = RawDataUtil::EmcCharge(measure,adc); //MeV 00114 //energy = RandGauss::shoot(energy,0.1*energy); //add 10% smear in each ADC channel 00115 00116 int TCThetaId = getTCThetaId(module,theta,phi); 00117 int TCPhiId = getTCPhiId(module,theta,phi); 00118 //Get energy of each trigger cell 00119 if(module==1) BTCEnergy[TCThetaId][TCPhiId] += adc; 00120 if(module==0) EETCEnergy[TCThetaId][TCPhiId] += adc; 00121 if(module==2) WETCEnergy[TCThetaId][TCPhiId] += adc; 00122 if(module==1) BTCEnergy_adc[TCThetaId][TCPhiId] += adc; 00123 if(module==0) EETCEnergy_adc[TCThetaId][TCPhiId] += adc; 00124 if(module==2) WETCEnergy_adc[TCThetaId][TCPhiId] += adc; 00125 } 00126 00127 //subtract ped 00128 /* 00129 for(int i=0;i<TrigConf::TCTHETANO_B;i++) 00130 for(int j=0;j<TrigConf::TCPHINO_B;j++) { 00131 if((BTCEnergy[i][j] - 0x0a) < 0) BTCEnergy[i][j] = 0; 00132 else BTCEnergy[i][j] = BTCEnergy[i][j] - 0x0a; 00133 } 00134 for(int i=0;i<TrigConf::TCTHETANO_E;i++) 00135 for(int j=0;j<TrigConf::TCPHINO_E;j++) 00136 { 00137 if((EETCEnergy[i][j] - 0x0a) < 0) EETCEnergy[i][j] = 0; 00138 else EETCEnergy[i][j] = EETCEnergy[i][j] - 0x0a; 00139 if((WETCEnergy[i][j] - 0x0a) < 0) WETCEnergy[i][j] = 0; 00140 else WETCEnergy[i][j] = WETCEnergy[i][j] - 0x0a; 00141 }*/ 00142 }
void EmcTCFinder::setEmcTC | ( | std::vector< uint32_t > | vTC | ) |
Definition at line 144 of file EmcTCFinder.cxx.
References BTC, EETC, genRecEmupikp::i, iter(), ganga-rec::j, TrigConf::TCPHINO_B, TrigConf::TCPHINO_E, TrigConf::TCTHETANO_B, TrigConf::TCTHETANO_E, and WETC.
Referenced by BesTrigL1::runAclock_emc().
00144 { 00145 //reset tc energy of barrel and endcap 00146 for(int i=0;i<TrigConf::TCTHETANO_B;i++) 00147 for(int j=0;j<TrigConf::TCPHINO_B;j++) { 00148 BTC[i][j] = 0; 00149 } 00150 for(int i=0;i<TrigConf::TCTHETANO_E;i++) 00151 for(int j=0;j<TrigConf::TCPHINO_E;j++) 00152 { 00153 EETC[i][j] = 0; 00154 WETC[i][j] = 0; 00155 } 00156 for(std::vector<uint32_t>::iterator iter = vTC.begin(); iter != vTC.end(); iter++) { 00157 int par_TC = (*iter & 0xFF0000) >> 16; 00158 int the_TC = (*iter & 0xFF00) >> 8; 00159 int phi_TC = (*iter & 0xFF); 00160 if(par_TC == 0) EETC[the_TC][phi_TC] = 1; 00161 if(par_TC == 1) BTC[the_TC][phi_TC] = 1; 00162 if(par_TC == 2) WETC[the_TC][phi_TC] = 1; 00163 } 00164 }
double EmcTCFinder::BlkE[16] [private] |
int EmcTCFinder::BTC[TrigConf::TCTHETANO_B][TrigConf::TCPHINO_B] [private] |
double EmcTCFinder::BTCEnergy[TrigConf::TCTHETANO_B][TrigConf::TCPHINO_B] [private] |
double EmcTCFinder::BTCEnergy_adc[TrigConf::TCTHETANO_B][TrigConf::TCPHINO_B] [private] |
int EmcTCFinder::EETC[TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E] [private] |
double EmcTCFinder::EETCEnergy[TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E] [private] |
double EmcTCFinder::EETCEnergy_adc[TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E] [private] |
EmcTCFinder * EmcTCFinder::emc_Pointer = 0 [static, private] |
IEmcCalibConstSvc* EmcTCFinder::emcCalibConstSvc [private] |
RealizationSvc* EmcTCFinder::m_RealizationSvc [private] |
int EmcTCFinder::TCPhiNb [private] |
int EmcTCFinder::TCThetaNb [private] |
int EmcTCFinder::WETC[TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E] [private] |
double EmcTCFinder::WETCEnergy[TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E] [private] |
double EmcTCFinder::WETCEnergy_adc[TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E] [private] |