EmcTCFinder Class Reference

#include <EmcTCFinder.h>

List of all members.

Public Member Functions

 EmcTCFinder ()
 ~EmcTCFinder ()
void setEmcDigi (EmcDigiCol *emcDigiCol)
void setEmcTC (std::vector< uint32_t > vTC)
void setEmcBE (std::vector< double > vBE)
int getTCPhiId (int partId, int ThetaNb, int PhiNb)
int getTCThetaId (int partId, int ThetaNb, int PhiNb)
int getBLKId (int TCTheta, int TCPhi) const
double & getBTCEnergy (int i, int j)
double & getEETCEnergy (int i, int j)
double & getWETCEnergy (int i, int j)
int & getBTC (int i, int j)
int & getEETC (int i, int j)
int & getWETC (int i, int j)
double & getBTC_ADC (int i, int j)
double & getEETC_ADC (int i, int j)
double & getWETC_ADC (int i, int j)
double getBLKE (int i)

Static Public Member Functions

static EmcTCFinderget_Emc (void)

Private Attributes

int TCThetaNb
int TCPhiNb
double BTCEnergy [TrigConf::TCTHETANO_B][TrigConf::TCPHINO_B]
double EETCEnergy [TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E]
double WETCEnergy [TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E]
int WETC [TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E]
int EETC [TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E]
int BTC [TrigConf::TCTHETANO_B][TrigConf::TCPHINO_B]
double BTCEnergy_adc [TrigConf::TCTHETANO_B][TrigConf::TCPHINO_B]
double EETCEnergy_adc [TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E]
double WETCEnergy_adc [TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E]
double BlkE [16]
RealizationSvcm_RealizationSvc
IEmcCalibConstSvcemcCalibConstSvc

Static Private Attributes

static EmcTCFinderemc_Pointer = 0


Detailed Description

Definition at line 11 of file EmcTCFinder.h.


Constructor & Destructor Documentation

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 (  ) 

Definition at line 55 of file EmcTCFinder.cxx.

00056 {
00057 }


Member Function Documentation

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]

Definition at line 35 of file EmcTCFinder.h.

References BlkE.

Referenced by EmcESum::getESum().

00035 { return BlkE[i]; }

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().

00027 { return BTC[i][j];}

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().

00023 { return BTCEnergy[i][j];}

int& EmcTCFinder::getEETC ( int  i,
int  j 
) [inline]

Definition at line 28 of file EmcTCFinder.h.

References EETC.

Referenced by EmcCCount::findCluster().

00028 { return EETC[i][j];}

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().

00029 { return WETC[i][j];}

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 }


Member Data Documentation

double EmcTCFinder::BlkE[16] [private]

Definition at line 54 of file EmcTCFinder.h.

Referenced by getBLKE(), and setEmcBE().

int EmcTCFinder::BTC[TrigConf::TCTHETANO_B][TrigConf::TCPHINO_B] [private]

Definition at line 48 of file EmcTCFinder.h.

Referenced by getBTC(), and setEmcTC().

double EmcTCFinder::BTCEnergy[TrigConf::TCTHETANO_B][TrigConf::TCPHINO_B] [private]

Definition at line 42 of file EmcTCFinder.h.

Referenced by getBTCEnergy(), and setEmcDigi().

double EmcTCFinder::BTCEnergy_adc[TrigConf::TCTHETANO_B][TrigConf::TCPHINO_B] [private]

Definition at line 50 of file EmcTCFinder.h.

Referenced by getBTC_ADC(), and setEmcDigi().

int EmcTCFinder::EETC[TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E] [private]

Definition at line 47 of file EmcTCFinder.h.

Referenced by getEETC(), and setEmcTC().

double EmcTCFinder::EETCEnergy[TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E] [private]

Definition at line 43 of file EmcTCFinder.h.

Referenced by getEETCEnergy(), and setEmcDigi().

double EmcTCFinder::EETCEnergy_adc[TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E] [private]

Definition at line 51 of file EmcTCFinder.h.

Referenced by getEETC_ADC(), and setEmcDigi().

EmcTCFinder * EmcTCFinder::emc_Pointer = 0 [static, private]

Definition at line 56 of file EmcTCFinder.h.

Referenced by get_Emc().

IEmcCalibConstSvc* EmcTCFinder::emcCalibConstSvc [private]

Definition at line 59 of file EmcTCFinder.h.

Referenced by EmcTCFinder(), and setEmcDigi().

RealizationSvc* EmcTCFinder::m_RealizationSvc [private]

Definition at line 58 of file EmcTCFinder.h.

Referenced by EmcTCFinder(), and setEmcDigi().

int EmcTCFinder::TCPhiNb [private]

Definition at line 41 of file EmcTCFinder.h.

Referenced by getTCPhiId().

int EmcTCFinder::TCThetaNb [private]

Definition at line 40 of file EmcTCFinder.h.

Referenced by getTCThetaId().

int EmcTCFinder::WETC[TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E] [private]

Definition at line 46 of file EmcTCFinder.h.

Referenced by getWETC(), and setEmcTC().

double EmcTCFinder::WETCEnergy[TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E] [private]

Definition at line 44 of file EmcTCFinder.h.

Referenced by getWETCEnergy(), and setEmcDigi().

double EmcTCFinder::WETCEnergy_adc[TrigConf::TCTHETANO_E][TrigConf::TCPHINO_E] [private]

Definition at line 52 of file EmcTCFinder.h.

Referenced by getWETC_ADC(), and setEmcDigi().


Generated on Tue Nov 29 23:18:47 2016 for BOSS_7.0.2 by  doxygen 1.4.7