Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

EmcTCFinder Class Reference

#include <EmcTCFinder.h>

List of all members.

Public Member Functions

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

Static Public Member Functions

EmcTCFinderget_Emc (void)
EmcTCFinderget_Emc (void)

Private Attributes

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

Static Private Attributes

EmcTCFinderemc_Pointer
EmcTCFinderemc_Pointer = 0


Constructor & Destructor Documentation

EmcTCFinder::EmcTCFinder  ) 
 

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  ) 
 

00056 {
00057 }

EmcTCFinder::EmcTCFinder  ) 
 

EmcTCFinder::~EmcTCFinder  ) 
 


Member Function Documentation

EmcTCFinder* EmcTCFinder::get_Emc void   )  [static]
 

EmcTCFinder * EmcTCFinder::get_Emc void   )  [static]
 

00032                                       {
00033   if(!emc_Pointer) emc_Pointer = new EmcTCFinder();
00034   return emc_Pointer;
00035 }

double EmcTCFinder::getBLKE int  i  )  [inline]
 

00035 { return BlkE[i]; }

double EmcTCFinder::getBLKE int  i  )  [inline]
 

00035 { return BlkE[i]; }

int EmcTCFinder::getBLKId int  TCTheta,
int  TCPhi
const
 

int EmcTCFinder::getBLKId int  TCTheta,
int  TCPhi
const
 

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]
 

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

int& EmcTCFinder::getBTC int  i,
int  j
[inline]
 

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

double& EmcTCFinder::getBTC_ADC int  i,
int  j
[inline]
 

00031 { return BTCEnergy_adc[i][j];}

double& EmcTCFinder::getBTC_ADC int  i,
int  j
[inline]
 

00031 { return BTCEnergy_adc[i][j];}

double& EmcTCFinder::getBTCEnergy int  i,
int  j
[inline]
 

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

double& EmcTCFinder::getBTCEnergy int  i,
int  j
[inline]
 

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

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

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

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

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

double& EmcTCFinder::getEETC_ADC int  i,
int  j
[inline]
 

00032 { return EETCEnergy_adc[i][j];}

double& EmcTCFinder::getEETC_ADC int  i,
int  j
[inline]
 

00032 { return EETCEnergy_adc[i][j];}

double& EmcTCFinder::getEETCEnergy int  i,
int  j
[inline]
 

00024 { return EETCEnergy[i][j];}

double& EmcTCFinder::getEETCEnergy int  i,
int  j
[inline]
 

00024 { return EETCEnergy[i][j];}

int EmcTCFinder::getTCPhiId int  partId,
int  ThetaNb,
int  PhiNb
 

int EmcTCFinder::getTCPhiId int  partId,
int  ThetaNb,
int  PhiNb
 

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
 

int EmcTCFinder::getTCThetaId int  partId,
int  ThetaNb,
int  PhiNb
 

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]
 

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

int& EmcTCFinder::getWETC int  i,
int  j
[inline]
 

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

double& EmcTCFinder::getWETC_ADC int  i,
int  j
[inline]
 

00033 { return WETCEnergy_adc[i][j];}

double& EmcTCFinder::getWETC_ADC int  i,
int  j
[inline]
 

00033 { return WETCEnergy_adc[i][j];}

double& EmcTCFinder::getWETCEnergy int  i,
int  j
[inline]
 

00025 { return WETCEnergy[i][j];}

double& EmcTCFinder::getWETCEnergy int  i,
int  j
[inline]
 

00025 { return WETCEnergy[i][j];}

void EmcTCFinder::setEmcBE std::vector< double >  vBE  ) 
 

void EmcTCFinder::setEmcBE std::vector< double >  vBE  ) 
 

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  ) 
 

void EmcTCFinder::setEmcDigi EmcDigiCol emcDigiCol  ) 
 

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  ) 
 

void EmcTCFinder::setEmcTC std::vector< uint32_t >  vTC  ) 
 

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 [private]
 

int EmcTCFinder::BTC [private]
 

double EmcTCFinder::BTCEnergy [private]
 

double EmcTCFinder::BTCEnergy_adc [private]
 

int EmcTCFinder::EETC [private]
 

double EmcTCFinder::EETCEnergy [private]
 

double EmcTCFinder::EETCEnergy_adc [private]
 

EmcTCFinder* EmcTCFinder::emc_Pointer [static, private]
 

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

IEmcCalibConstSvc* EmcTCFinder::emcCalibConstSvc [private]
 

IEmcCalibConstSvc* EmcTCFinder::emcCalibConstSvc [private]
 

RealizationSvc* EmcTCFinder::m_RealizationSvc [private]
 

RealizationSvc* EmcTCFinder::m_RealizationSvc [private]
 

int EmcTCFinder::TCPhiNb [private]
 

int EmcTCFinder::TCThetaNb [private]
 

int EmcTCFinder::WETC [private]
 

double EmcTCFinder::WETCEnergy [private]
 

double EmcTCFinder::WETCEnergy_adc [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 16:02:20 2011 for BOSS6.5.5 by  doxygen 1.3.9.1