/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Trigger/Trigger/Trigger-00-01-05/src/EmcESum.cxx

Go to the documentation of this file.
00001 //---------------------------------------------------------------------------//
00012 //
00013 #include "Trigger/EmcESum.h"
00014 #include "Trigger/TrigPara.h"
00015 #include "CLHEP/Units/PhysicalConstants.h"
00016 #include "CLHEP/Random/RandGauss.h"
00017 #include <iostream>
00018 
00019 #include "Trigger/IBesGlobalTrigSvc.h"
00020 #include "Trigger/BesGlobalTrigSvc.h"
00021 #include "GaudiKernel/ISvcLocator.h"
00022 #include "GaudiKernel/Bootstrap.h"
00023 #include "GaudiKernel/IDataProviderSvc.h"
00024 
00025 using namespace std;
00026 using namespace TrigConf;
00027 using namespace CLHEP;
00028 
00029 EmcESum::EmcESum()
00030 {
00031   m_EmcTCFinder = EmcTCFinder::get_Emc();
00032 }
00033 EmcESum::~EmcESum()
00034 {
00035 }
00036 void EmcESum::getESum()
00037 {
00038   //reset values
00039   _TotE = 0;
00040   _RTotE = 0;
00041   _LTotE = 0;
00042   _BTotE = 0;
00043   _ETotE = 0;
00044   _LBTotE = 0;
00045   _RBTotE = 0;
00046   _WETotE = 0;
00047   _EETotE = 0;
00048 /*
00049   double L1TC_GATE = double (m_pIBGT->getL1TC_GATE());
00050   
00051   for(int i=0;i<12;i++) BLK[i] = 0;
00052   for(int i = 0; i < 2; i++) { WEBLK[i] = 0; EEBLK[i] = 0; }
00054   //Get total energy ,energy of right part and left part divided by z=0.The energy threshold of each trigger cell is 30*MeV. 
00055   for(int i=0;i<TrigConf::TCTHETANO_B;i++)
00056     for(int j=0;j<TrigConf::TCPHINO_B;j++)
00057     {
00058       double BEnergy = m_EmcTCFinder->getBTC_ADC(i,j);
00059    
00060       //set each barrel trigger cell energy to service
00061       m_pIBGT->setBTCEnergy(i,j,BEnergy);
00062    
00063       int blkId = m_EmcTCFinder->getBLKId(i,j);
00064       //low energy threshold of trigger cell
00065       if(m_EmcTCFinder->getBTCEnergy(i,j) < L1TC_GATE) BEnergy = 0.;
00066 
00067       BLK[blkId] +=BEnergy;//Get each block energy for babar trigger    
00068     }
00069 
00070   for(int i =0;i<TrigConf::TCTHETANO_E;i++)
00071     for(int j =0;j<TrigConf::TCPHINO_E;j++)
00072     {
00073       double EEnergy = m_EmcTCFinder->getEETC_ADC(i,j);
00074       //set each barrel trigger cell energy to service
00075       m_pIBGT->setEETCEnergy(i,j,EEnergy);
00076       //low energy threshold of trigger cell
00077       if(m_EmcTCFinder->getEETCEnergy(i,j) < L1TC_GATE) EEnergy = 0.;
00078 
00079       if(j >= 0 && j < TrigConf::TCPHINO_E/2) EEBLK[0] += EEnergy; // north energy block
00080       else EEBLK[1] += EEnergy; // south energy block
00081 
00082       double WEnergy = m_EmcTCFinder->getWETC_ADC(i,j);
00083       //set each barrel trigger cell energy to service
00084       m_pIBGT->setWETCEnergy(i,j,WEnergy);    
00085       //low energy threshold of trigger cell
00086       if(m_EmcTCFinder->getWETCEnergy(i,j) < L1TC_GATE) WEnergy = 0.;
00087 
00088       if(j >= 0 && j < TrigConf::TCPHINO_E/2) WEBLK[0] += WEnergy; // north energy block
00089       else WEBLK[1] += WEnergy;
00090     }
00091 
00092     std::vector<double> BlockE;
00093     BlockE.clear();
00094 
00095     double bmean[12]  = {8.02,10.1,12.3,7.43,14.8,13.0,12.5,13.2,10.9,12.3,14.7,15.7};
00096     double bsigma[12] = {0.88,0.52,0.9,0.72,0.7,0.82,0.64,0.78,0.72,0.76,0.54,0.64};
00097     double bratio[12] = {3.28,3.15,3.01,3.12,3.09,3.22,2.90,2.89,2.97,3.00,3.02,3.15};//run10584
00098 
00099     for(int i = 0; i < 12; i++) {
00100       //double block_E = (BLK[i]/bratio[i] - 0xa + RandGauss::shoot(bmean[i],bsigma[i]))*m_pIBGT->getEnergy_Ratio(); //mv convert to adc
00101       double block_E = (BLK[i] - 0xa); //mv convert to adc
00102       if(block_E < 0) block_E = 0;
00103       _TotE += block_E; //Total energy of emc including barrel and endcaps
00104       _BTotE += block_E;//Total energy of barrel emc
00105 
00106       if(i >= 6)
00107       {
00108         _LTotE += block_E;//Total energy of left part emc(left barrel and west endcap)
00109         _LBTotE += block_E;//Total energy of left part emc (only barrel)
00110       }
00111       else
00112       {
00113         _RTotE += block_E;//Total energy of right part emc(right barrel and east endcap)
00114         _RBTotE += block_E;//Total energy of right part emc (only barrel)
00115       }
00116       //BlockE.push_back(block_E);
00117       BlockE.push_back(BLK[i]);
00118     }
00119 
00120     double emean[2]  = {11.8,12.4};
00121     double esigma[2] = {0.77,0.43};
00122     double eratio[2] = {3.19,3.19};
00123 
00124     double wmean[2]  = {19.9,8.89};
00125     double wsigma[2] = {0.63,0.51};
00126     double wratio[2] = {3.19,3.19};
00127 
00128     for(int i = 0; i < 2; i++) {
00129       //double wblock_E = (WEBLK[i]/wratio[i] - 0xa + RandGauss::shoot(wmean[i],wsigma[i]))*m_pIBGT->getEnergy_Ratio();
00130       double wblock_E = (WEBLK[i] - 0xa);
00131       //double wblock_E = WEBLK[i]*0.51 - 14.4 - 0xa + RandGauss::shoot(wmean[i],wsigma[i]);
00132       double eblock_E = (EEBLK[i] - 0xa);
00133       //double eblock_E = (EEBLK[i]/eratio[i] - 0xa + RandGauss::shoot(emean[i],esigma[i]))*m_pIBGT->getEnergy_Ratio();
00134       //double eblock_E = EEBLK[i]*0.51 - 14.4 - 0xa + RandGauss::shoot(emean[i],esigma[i]);
00135       if(wblock_E < 0) wblock_E = 0;
00136       if(eblock_E < 0) eblock_E = 0;
00137 
00138       _TotE   += eblock_E;//Total energy of emc including barrel and endcaps
00139       _RTotE  += eblock_E;//Total energy of right part emc(right barrel and east endcap)
00140       _ETotE  += eblock_E;//Total energy of west and east endcaps
00141       _EETotE += eblock_E;//Total energy of east endcap
00142       //_EETotE += EEBLK[i];//Total energy of east endcap
00143 
00144       _TotE   += wblock_E;//Total energy of emc including barrel and endcaps
00145       _LTotE  += wblock_E;//Total energy of left part emc(left barrel and west endcap)
00146       _ETotE  += wblock_E;//Total energy of west and east endcaps
00147       _WETotE += wblock_E;//Total energy of west endcap
00148       //_WETotE += WEBLK[i];//Total energy of west endcap
00149     }
00150 */
00151 
00152   for(int i=0;i<12;i++) BLK[i] = 0;
00153   for(int i = 0; i < 2; i++) { WEBLK[i] = 0; EEBLK[i] = 0; }
00155   //Get total energy ,energy of right part and left part divided by z=0.The energy threshold of each trigger cell is 30*MeV. 
00156   for(int i = 0; i < 12; i++) {
00157     BLK[i] = m_EmcTCFinder->getBLKE(i+2);
00158   }
00159 
00160   for(int i = 0; i < 2; i++) {
00161     EEBLK[i] = m_EmcTCFinder->getBLKE(i);
00162     WEBLK[i] = m_EmcTCFinder->getBLKE(i+14);
00163   }
00164 
00165   std::vector<double> BlockE;
00166   BlockE.clear();
00167 
00168   double bmean[12]  = {8.02,10.1,12.3,7.43,14.8,13.0,12.5,13.2,10.9,12.3,14.7,15.7};
00169   double bsigma[12] = {0.88,0.52,0.9,0.72,0.7,0.82,0.64,0.78,0.72,0.76,0.54,0.64};
00170 
00171   for(int i = 0; i < 12; i++) {
00172     double block_E = (BLK[i]*0.333 - 0xa + RandGauss::shoot(bmean[i],bsigma[i])); //mv convert to adc
00173     if(block_E < 0) block_E = 0;
00174     _TotE += block_E; //Total energy of emc including barrel and endcaps
00175     _BTotE += block_E;//Total energy of barrel emc
00176 
00177     if(i >= 6)
00178     {
00179       _LTotE += block_E;//Total energy of left part emc(left barrel and west endcap)
00180       _LBTotE += block_E;//Total energy of left part emc (only barrel)
00181     }
00182     else
00183     {
00184       _RTotE += block_E;//Total energy of right part emc(right barrel and east endcap)
00185       _RBTotE += block_E;//Total energy of right part emc (only barrel)
00186     }
00187     BlockE.push_back(block_E);
00188   }
00189 
00190   double emean[2]  = {11.8,12.4};
00191   double esigma[2] = {0.77,0.43};
00192 
00193   double wmean[2]  = {19.9,8.89};
00194   double wsigma[2] = {0.63,0.51};
00195 
00196   for(int i = 0; i < 2; i++) {
00197     double wblock_E = (WEBLK[i]*0.333 - 0xa + RandGauss::shoot(wmean[i],wsigma[i]));
00198     double eblock_E = (EEBLK[i]*0.333 - 0xa + RandGauss::shoot(emean[i],esigma[i]));
00199     if(wblock_E < 0) wblock_E = 0;
00200     if(eblock_E < 0) eblock_E = 0;
00201 
00202     _TotE   += eblock_E;//Total energy of emc including barrel and endcaps
00203     _RTotE  += eblock_E;//Total energy of right part emc(right barrel and east endcap)
00204     _ETotE  += eblock_E;//Total energy of west and east endcaps
00205     _EETotE += eblock_E;//Total energy of east endcap
00206 
00207     _TotE   += wblock_E;//Total energy of emc including barrel and endcaps
00208     _LTotE  += wblock_E;//Total energy of left part emc(left barrel and west endcap)
00209     _ETotE  += wblock_E;//Total energy of west and east endcaps
00210     _WETotE += wblock_E;//Total energy of west endcap
00211   }
00212 
00213   ISvcLocator* svcLocator = Gaudi::svcLocator();
00214   StatusCode sc = svcLocator->service("BesGlobalTrigSvc", m_tmpSvc);
00215   m_pIBGT = dynamic_cast<BesGlobalTrigSvc* >(m_tmpSvc);
00216 
00217   //set energy information related to emc in service
00218   m_pIBGT->setEmcTotE(_TotE);
00219   m_pIBGT->setEmcLTotE(_LTotE);
00220   m_pIBGT->setEmcRTotE(_RTotE);
00221   m_pIBGT->setEmcBTotE(_BTotE);
00222   m_pIBGT->setEmcETotE(_ETotE); 
00223   m_pIBGT->setEmcLBTotE(_LBTotE);
00224   m_pIBGT->setEmcRBTotE(_RBTotE);
00225   m_pIBGT->setEmcWETotE(_WETotE);
00226   m_pIBGT->setEmcEETotE(_EETotE);
00227   m_pIBGT->setEmcBlockE(BlockE);
00228 }

Generated on Tue Nov 29 23:14:40 2016 for BOSS_7.0.2 by  doxygen 1.4.7