BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EmcESum.cxx
Go to the documentation of this file.
1//---------------------------------------------------------------------------//
2//// BOOST --- BESIII Object_Oriented Simulation Tool /
3////
4////---------------------------------------------------------------------------/
5////
6////Description:
7////Author: Caogf
8////Created: Feb, 2006
9////Modified:
10////Comment:
11////
12//
13#include "Trigger/EmcESum.h"
14#include "CLHEP/Random/RandGauss.h"
15#include "CLHEP/Units/PhysicalConstants.h"
16#include "Trigger/TrigPara.h"
17#include <iostream>
18
19#include "GaudiKernel/Bootstrap.h"
20#include "GaudiKernel/IDataProviderSvc.h"
21#include "GaudiKernel/ISvcLocator.h"
24
25using namespace std;
26using namespace TrigConf;
27using namespace CLHEP;
28
29EmcESum::EmcESum() { m_EmcTCFinder = EmcTCFinder::get_Emc(); }
32 // reset values
33 _TotE = 0;
34 _RTotE = 0;
35 _LTotE = 0;
36 _BTotE = 0;
37 _ETotE = 0;
38 _LBTotE = 0;
39 _RBTotE = 0;
40 _WETotE = 0;
41 _EETotE = 0;
42 /*
43 double L1TC_GATE = double (m_pIBGT->getL1TC_GATE());
44
45 for(int i=0;i<12;i++) BLK[i] = 0;
46 for(int i = 0; i < 2; i++) { WEBLK[i] = 0; EEBLK[i] = 0; }
47 /////////////////////////////////////////////////////////////////////////////////////////////////
48 //Get total energy ,energy of right part and left part divided by z=0.The energy threshold
49 of each trigger cell is 30*MeV. for(int i=0;i<TrigConf::TCTHETANO_B;i++) for(int
50 j=0;j<TrigConf::TCPHINO_B;j++)
51 {
52 double BEnergy = m_EmcTCFinder->getBTC_ADC(i,j);
53
54 //set each barrel trigger cell energy to service
55 m_pIBGT->setBTCEnergy(i,j,BEnergy);
56
57 int blkId = m_EmcTCFinder->getBLKId(i,j);
58 //low energy threshold of trigger cell
59 if(m_EmcTCFinder->getBTCEnergy(i,j) < L1TC_GATE) BEnergy = 0.;
60
61 BLK[blkId] +=BEnergy;//Get each block energy for babar trigger
62 }
63
64 for(int i =0;i<TrigConf::TCTHETANO_E;i++)
65 for(int j =0;j<TrigConf::TCPHINO_E;j++)
66 {
67 double EEnergy = m_EmcTCFinder->getEETC_ADC(i,j);
68 //set each barrel trigger cell energy to service
69 m_pIBGT->setEETCEnergy(i,j,EEnergy);
70 //low energy threshold of trigger cell
71 if(m_EmcTCFinder->getEETCEnergy(i,j) < L1TC_GATE) EEnergy = 0.;
72
73 if(j >= 0 && j < TrigConf::TCPHINO_E/2) EEBLK[0] += EEnergy; // north energy block
74 else EEBLK[1] += EEnergy; // south energy block
75
76 double WEnergy = m_EmcTCFinder->getWETC_ADC(i,j);
77 //set each barrel trigger cell energy to service
78 m_pIBGT->setWETCEnergy(i,j,WEnergy);
79 //low energy threshold of trigger cell
80 if(m_EmcTCFinder->getWETCEnergy(i,j) < L1TC_GATE) WEnergy = 0.;
81
82 if(j >= 0 && j < TrigConf::TCPHINO_E/2) WEBLK[0] += WEnergy; // north energy block
83 else WEBLK[1] += WEnergy;
84 }
85
86 std::vector<double> BlockE;
87 BlockE.clear();
88
89 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};
90 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};
91 double bratio[12] =
92 {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
93
94 for(int i = 0; i < 12; i++) {
95 //double block_E = (BLK[i]/bratio[i] - 0xa +
96 RandGauss::shoot(bmean[i],bsigma[i]))*m_pIBGT->getEnergy_Ratio(); //mv convert to adc double
97 block_E = (BLK[i] - 0xa); //mv convert to adc if(block_E < 0) block_E = 0; _TotE += block_E;
98 //Total energy of emc including barrel and endcaps _BTotE += block_E;//Total energy of barrel
99 emc
100
101 if(i >= 6)
102 {
103 _LTotE += block_E;//Total energy of left part emc(left barrel and west endcap)
104 _LBTotE += block_E;//Total energy of left part emc (only barrel)
105 }
106 else
107 {
108 _RTotE += block_E;//Total energy of right part emc(right barrel and east endcap)
109 _RBTotE += block_E;//Total energy of right part emc (only barrel)
110 }
111 //BlockE.push_back(block_E);
112 BlockE.push_back(BLK[i]);
113 }
114
115 double emean[2] = {11.8,12.4};
116 double esigma[2] = {0.77,0.43};
117 double eratio[2] = {3.19,3.19};
118
119 double wmean[2] = {19.9,8.89};
120 double wsigma[2] = {0.63,0.51};
121 double wratio[2] = {3.19,3.19};
122
123 for(int i = 0; i < 2; i++) {
124 //double wblock_E = (WEBLK[i]/wratio[i] - 0xa +
125 RandGauss::shoot(wmean[i],wsigma[i]))*m_pIBGT->getEnergy_Ratio(); double wblock_E = (WEBLK[i]
126 - 0xa);
127 //double wblock_E = WEBLK[i]*0.51 - 14.4 - 0xa + RandGauss::shoot(wmean[i],wsigma[i]);
128 double eblock_E = (EEBLK[i] - 0xa);
129 //double eblock_E = (EEBLK[i]/eratio[i] - 0xa +
130 RandGauss::shoot(emean[i],esigma[i]))*m_pIBGT->getEnergy_Ratio();
131 //double eblock_E = EEBLK[i]*0.51 - 14.4 - 0xa + RandGauss::shoot(emean[i],esigma[i]);
132 if(wblock_E < 0) wblock_E = 0;
133 if(eblock_E < 0) eblock_E = 0;
134
135 _TotE += eblock_E;//Total energy of emc including barrel and endcaps
136 _RTotE += eblock_E;//Total energy of right part emc(right barrel and east endcap)
137 _ETotE += eblock_E;//Total energy of west and east endcaps
138 _EETotE += eblock_E;//Total energy of east endcap
139 //_EETotE += EEBLK[i];//Total energy of east endcap
140
141 _TotE += wblock_E;//Total energy of emc including barrel and endcaps
142 _LTotE += wblock_E;//Total energy of left part emc(left barrel and west endcap)
143 _ETotE += wblock_E;//Total energy of west and east endcaps
144 _WETotE += wblock_E;//Total energy of west endcap
145 //_WETotE += WEBLK[i];//Total energy of west endcap
146 }
147 */
148
149 for ( int i = 0; i < 12; i++ ) BLK[i] = 0;
150 for ( int i = 0; i < 2; i++ )
151 {
152 WEBLK[i] = 0;
153 EEBLK[i] = 0;
154 }
155 /////////////////////////////////////////////////////////////////////////////////////////////////
156 // Get total energy ,energy of right part and left part divided by z=0.The energy threshold
157 // of each trigger cell is 30*MeV.
158 for ( int i = 0; i < 12; i++ ) { BLK[i] = m_EmcTCFinder->getBLKE( i + 2 ); }
159
160 for ( int i = 0; i < 2; i++ )
161 {
162 EEBLK[i] = m_EmcTCFinder->getBLKE( i );
163 WEBLK[i] = m_EmcTCFinder->getBLKE( i + 14 );
164 }
165
166 std::vector<double> BlockE;
167 BlockE.clear();
168
169 double bmean[12] = { 8.02, 10.1, 12.3, 7.43, 14.8, 13.0,
170 12.5, 13.2, 10.9, 12.3, 14.7, 15.7 };
171 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 };
172
173 for ( int i = 0; i < 12; i++ )
174 {
175 double block_E = ( BLK[i] * 0.333 - 0xa +
176 RandGauss::shoot( bmean[i], bsigma[i] ) ); // mv convert to adc
177 if ( block_E < 0 ) block_E = 0;
178 _TotE += block_E; // Total energy of emc including barrel and endcaps
179 _BTotE += block_E; // Total energy of barrel emc
180
181 if ( i >= 6 )
182 {
183 _LTotE += block_E; // Total energy of left part emc(left barrel and west endcap)
184 _LBTotE += block_E; // Total energy of left part emc (only barrel)
185 }
186 else
187 {
188 _RTotE += block_E; // Total energy of right part emc(right barrel and east endcap)
189 _RBTotE += block_E; // Total energy of right part emc (only barrel)
190 }
191 BlockE.push_back( block_E );
192 }
193
194 double emean[2] = { 11.8, 12.4 };
195 double esigma[2] = { 0.77, 0.43 };
196
197 double wmean[2] = { 19.9, 8.89 };
198 double wsigma[2] = { 0.63, 0.51 };
199
200 for ( int i = 0; i < 2; i++ )
201 {
202 double wblock_E = ( WEBLK[i] * 0.333 - 0xa + RandGauss::shoot( wmean[i], wsigma[i] ) );
203 double eblock_E = ( EEBLK[i] * 0.333 - 0xa + RandGauss::shoot( emean[i], esigma[i] ) );
204 if ( wblock_E < 0 ) wblock_E = 0;
205 if ( eblock_E < 0 ) eblock_E = 0;
206
207 _TotE += eblock_E; // Total energy of emc including barrel and endcaps
208 _RTotE += eblock_E; // Total energy of right part emc(right barrel and east endcap)
209 _ETotE += eblock_E; // Total energy of west and east endcaps
210 _EETotE += eblock_E; // Total energy of east endcap
211
212 _TotE += wblock_E; // Total energy of emc including barrel and endcaps
213 _LTotE += wblock_E; // Total energy of left part emc(left barrel and west endcap)
214 _ETotE += wblock_E; // Total energy of west and east endcaps
215 _WETotE += wblock_E; // Total energy of west endcap
216 }
217
218 ISvcLocator* svcLocator = Gaudi::svcLocator();
219 StatusCode sc = svcLocator->service( "BesGlobalTrigSvc", m_tmpSvc );
220 m_pIBGT = dynamic_cast<BesGlobalTrigSvc*>( m_tmpSvc );
221
222 // set energy information related to emc in service
223 m_pIBGT->setEmcTotE( _TotE );
224 m_pIBGT->setEmcLTotE( _LTotE );
225 m_pIBGT->setEmcRTotE( _RTotE );
226 m_pIBGT->setEmcBTotE( _BTotE );
227 m_pIBGT->setEmcETotE( _ETotE );
228 m_pIBGT->setEmcLBTotE( _LBTotE );
229 m_pIBGT->setEmcRBTotE( _RBTotE );
230 m_pIBGT->setEmcWETotE( _WETotE );
231 m_pIBGT->setEmcEETotE( _EETotE );
232 m_pIBGT->setEmcBlockE( BlockE );
233}
void setEmcTotE(double i)
EmcESum()
Definition EmcESum.cxx:29
void getESum()
Definition EmcESum.cxx:31
~EmcESum()
Definition EmcESum.cxx:30
static EmcTCFinder * get_Emc(void)