82{
83 double p = (5640.0-40.0)/307.0/10.0;
84 double halfLength = 280.0 ;
85 double lambdaIron = 131.9/7.87 ;
86
87 double lambda = 20.5559 ;
89
90 double enterPos = halfLength/lambda +
offset/lambdaIron ;
91
92 int nBCell = 13 ;
93
94
95
96 float xBLow[14] ;
97
98
99 double zBLow[18] {136.0*
p, 116.*
p, 97.5*
p, 79.5*
p, 63*
p, 46.5*
p, 31*
p, 15.58*
p, 0, 0, -15.58*
p, -31*
p, -46.5*
p, -63*
p, -79.5*
p, -97.5*
p, -116.*
p, -136.0*
p};
100
101
102 xBLow[0] =
offset/lambdaIron;
103 int j=0 ;
104
105 for(
int i=0 ;
i<nBCell ;
i++)
106 {
107 xBLow[
i+1] = abs(enterPos-zBLow[i+j]/lambda) ;
108 if(i==8) j=1 ;
109 }
110 for(
int i=0 ;
i<nBCell+1 ;
i++)
111 cout<<xBLow[i]<<endl ;
112
113
114
115
116
117 if(gSystem->AccessPathName("results"))
118 gSystem->Exec("mkdir results") ;
119
120
121 if (gSystem->AccessPathName("plots"))
122 gSystem->Exec("mkdir plots") ;
123
124
125 string Energies[] = {
"20000",
"50000",
"100000",
"180000"} ;
126
128
129 string PhysicsLists[] = {
"FTFP_BERT",
"FTFP_BERT_ATL_VALIDATION",
"QGSP_BERT",
"QGSP_BIC"} ;
130
131
132 string InPath = "/rdata2/dengfeng/QT/20.3.7.4/OutputFlagZ2795/" ;
133
134
135 for(
int i=0 ;
i<
sizeof(
Particles)/
sizeof(string) ;
i++)
136 {
137
138 for(
int j=0 ; j<
sizeof(
Energies)/
sizeof(string) ; j++)
139 {
140
142 {
143
144 TFile*
inputFile =
new TFile((InPath+
"/TileTB90-E"+Energies[j]+
"-"+Particles[i]+
"-"+PhysicsLists[k]+
"/tiletb90-E"+Energies[j]+
"-"+Particles[i]+
"_"+PhysicsLists[k]+
".aant.root").c_str()) ;
145
146 if (!inputFile)
147 {
149 continue ;
150 }
151 cout<<
"In File: "<<
inputFile->GetName()<<endl ;
152
153 TTree* h1000 = (TTree*)
inputFile->Get(
"h1000") ;
154
155 if (!h1000)
156 {
157 cout<< "Tree: h1000 doesn't exist!"<<endl ;
158 continue ;
159 }
160
161
162
163
164
165
166
167
168 float EfitC0[48] ;
169
170 float EfitC1[48] ;
171
172 float EfitA0[48] ;
173
174 float EfitA1[48] ;
175
176
177 float TfitC0[48] ;
178 float TfitC1[48] ;
179 float TfitA0[48] ;
180 float TfitA1[48] ;
181
182
183
184
185
186
187
188 float EfitD0[48] ;
189
190 float EfitE0[48] ;
191
192
193 float TfitD0[48] ;
194 float TfitE0[48] ;
195
196
197 h1000->SetBranchAddress("EfitC0", EfitC0) ;
198 h1000->SetBranchAddress("EfitC1", EfitC1) ;
199 h1000->SetBranchAddress("EfitA0", EfitA0) ;
200 h1000->SetBranchAddress("EfitA1", EfitA1) ;
201 h1000->SetBranchAddress("EfitD0", EfitD0) ;
202 h1000->SetBranchAddress("EfitE0", EfitE0) ;
203 h1000->SetBranchAddress("TfitC0", TfitC0) ;
204 h1000->SetBranchAddress("TfitC1", TfitC1) ;
205 h1000->SetBranchAddress("TfitA0", TfitA0) ;
206 h1000->SetBranchAddress("TfitA1", TfitA1) ;
207 h1000->SetBranchAddress("TfitD0", TfitD0) ;
208 h1000->SetBranchAddress("TfitE0", TfitE0) ;
209
210
211
212
213 TH1F* AllRecoE =
bookTH1F(
"AllRecoE",
"Measured Energy",
"Reconstructed Energy [GeV]",
"Events", 100, 0, std::stoi(Energies[j])/1000.*1.5) ;
214
215 TH1F* RecoE =
bookTH1F(
"RecoE",
"Measured Energy",
"Reconstructed Energy [GeV]",
"Events", 100, 0, std::stoi(Energies[j])/1000.*1.5) ;
216
217 TH1F* RecoEModule0 =
bookTH1F(
"RecoEModule0",
"Deposit Energy in Module0",
"Reconstructed Energy [GeV]",
"Events", 100, 0,std::stoi( Energies[j])/1000.*1.5) ;
218
219 TH1F* RecoECentralModule =
bookTH1F(
"RecoECentralModule",
"Deposit Energy in Central Module",
"Reconstructed Energy [GeV]",
"Events", 100, 0, std::stoi(Energies[j])/1000.*1.5) ;
220
221 TH1F* RecoEEModule =
bookTH1F(
"RecoEEModule",
"Deposit Energy in Extended Module",
"Reconstructed Energy [GeV]",
"Events", 100, 0, std::stoi(Energies[j])/1000.*1.5) ;
222
223 TH1F* LongitudinalProfile =
bookTH1F(
"LongitudinalProfile",
"Longitudinal Profile(Mean Deposit Energy in B, C and A Cells)",
"x[#lambda]",
"dE/dx[GeV/#lambda]", nBCell, xBLow) ;
224
225 cout<<"Entries: "<<h1000->GetEntries()<<endl ;
226
227 for(
int n=0 ;
n<h1000->GetEntries() ;
n++)
228 {
229 h1000->GetEntry(n) ;
230 float totalE = 0. ;
231 for(
int m=0 ;
m<48 ;
m++)
232 {
233 if(m==30||m==31||m==43)
234 {
235 totalE += 0. ;
236 }
237 else
238 {
239
240 totalE +=
Select(EfitC0, TfitC0, m) ;
241 totalE +=
Select(EfitC1, TfitC1, m) ;
242 totalE +=
Select(EfitA0, TfitA0, m) ;
243 totalE +=
Select(EfitA1, TfitA1, m) ;
244 }
245 if(m==18||m==19||(m>=24&&m<=29)||m==33||m==34||(m>=42&&m<=47)||m==12||m==13||m==0||m==1)
246 {
247 totalE += 0. ;
248 }
249 else
250 {
251
252 totalE +=
Select(EfitD0, TfitD0, m) ;
253 totalE +=
Select(EfitE0, TfitE0, m) ;
254 }
255 }
256 AllRecoE->Fill(totalE/1000.) ;
257 }
258
259
260 TF1* func = new TF1("func","gaus",AllRecoE->GetMean()-2*AllRecoE->GetRMS(),AllRecoE->GetMean()+2*AllRecoE->GetRMS()) ;
261 AllRecoE->Fit("func","R") ;
262
263
264
265 float CoreUp = func->GetParameter(1)+3*func->GetParameter(2) ;
266
267 float CoreDown = func->GetParameter(1)-3*func->GetParameter(2) ;
268
270 int AccEntries = 0 ;
271 for(
int n=0 ;
n<h1000->GetEntries() ;
n++)
272 {
273 h1000->GetEntry(n) ;
274 float totalE = 0. ;
275 float EModule0 = 0. ;
276 float ECModule = 0. ;
277 float EEModule = 0. ;
278 float EModule0ABCCell[18] ;
279 float ECModuleABCCell[18] ;
280 for(
int m=0 ;
m<18 ;
m++)
281 {
282 EModule0ABCCell[
m]=0. ;
283 ECModuleABCCell[
m]=0. ;
284 }
285
286
287
288
289
290 ECModuleABCCell[0] =
Select(EfitC1, TfitC1, 44, 45, 46, 47) ;
291
292 EModule0ABCCell[0] +=
Select(EfitC0, TfitC0, 44, 45, 46, 47) ;
293
294 ECModuleABCCell[1] +=
Select(EfitC1, TfitC1, 41, 40, 37, 38) ;
295
296 EModule0ABCCell[1] +=
Select(EfitC0, TfitC0, 41, 40, 37, 38) ;
297
298 ECModuleABCCell[2] +=
Select(EfitC1, TfitC1, 34, 35, 33, 36) ;
299
300 EModule0ABCCell[2] +=
Select(EfitC0, TfitC0, 34, 35, 33, 36) ;
301
302 ECModuleABCCell[3] +=
Select(EfitC1, TfitC1, 28, 29, 27, 30) ;
303
304 EModule0ABCCell[3] +=
Select(EfitC0, TfitC0, 28, 29, 27, 30) ;
305
306 ECModuleABCCell[4] +=
Select(EfitC1, TfitC1, 21, 22, 23, 24, 19, 20) ;
307
308 EModule0ABCCell[4] +=
Select(EfitC0, TfitC0, 21, 22, 23, 24, 19, 20) ;
309
310 ECModuleABCCell[5] +=
Select(EfitC1, TfitC1, 16, 17, 15, 18) ;
311
312 EModule0ABCCell[5] +=
Select(EfitC0, TfitC0, 16, 17, 15, 18) ;
313
314 ECModuleABCCell[6] +=
Select(EfitC1, TfitC1, 11, 12, 9, 10) ;
315
316 EModule0ABCCell[6] +=
Select(EfitC0, TfitC0, 11, 12, 9, 10) ;
317
318 ECModuleABCCell[7] +=
Select(EfitC1, TfitC1, 6, 7, 5, 8) ;
319
320 EModule0ABCCell[7] +=
Select(EfitC0, TfitC0, 6, 7, 5, 8) ;
321
322 ECModuleABCCell[8] +=
Select(EfitC1, TfitC1, 2, 3, 1, 4) ;
323
324 EModule0ABCCell[8] +=
Select(EfitC0, TfitC0, 2, 3, 1, 4) ;
325
326
327
328 ECModuleABCCell[9] +=
Select(EfitA1, TfitA1, 2, 3, 1, 4) ;
329 EModule0ABCCell[9] +=
Select(EfitA0, TfitA0, 2, 3, 1, 4) ;
330 ECModuleABCCell[10] +=
Select(EfitA1, TfitA1, 6, 7, 5, 8) ;
331 EModule0ABCCell[10] +=
Select(EfitA0, TfitA0, 6, 7, 5, 8) ;
332 ECModuleABCCell[11] +=
Select(EfitA1, TfitA1, 11, 12, 9, 10) ;
333 EModule0ABCCell[11] +=
Select(EfitA0, TfitA0, 11, 12, 9, 10) ;
334 ECModuleABCCell[12] +=
Select(EfitA1, TfitA1, 16, 17, 15, 18) ;
335 EModule0ABCCell[12] +=
Select(EfitA0, TfitA0, 16, 17, 15, 18) ;
336 ECModuleABCCell[13] +=
Select(EfitA1, TfitA1, 21, 22, 23, 24, 19, 20) ;
337 EModule0ABCCell[13] +=
Select(EfitA0, TfitA0, 21, 22, 23, 24, 19, 20) ;
338 ECModuleABCCell[14] +=
Select(EfitA1, TfitA1, 28, 29, 27, 30) ;
339 EModule0ABCCell[14] +=
Select(EfitA0, TfitA0, 28, 29, 27, 30) ;
340 ECModuleABCCell[15] +=
Select(EfitA1, TfitA1, 34, 35, 33, 36) ;
341 EModule0ABCCell[15] +=
Select(EfitA0, TfitA0, 34, 35, 33, 36) ;
342 ECModuleABCCell[16] +=
Select(EfitA1, TfitA1, 40, 41, 37, 38) ;
343 EModule0ABCCell[16] +=
Select(EfitA0, TfitA0, 40, 41, 37, 38) ;
344 ECModuleABCCell[17] +=
Select(EfitA1, TfitA1, 44, 45, 46, 47) ;
345 EModule0ABCCell[17] +=
Select(EfitA0, TfitA0, 44, 45, 46, 47) ;
346
348 for(
int m=0 ;
m<18 ;
m++)
349 {
350 All += ECModuleABCCell[
m] ;
351 All += EModule0ABCCell[
m] ;
352 }
353
354
355 for(
int m=0 ;
m<48 ;
m++)
356 {
357
358 if(m==30||m==31||m==43)
359 {
360 totalE += 0. ;
361 ECModule += 0. ;
362 EModule0 += 0. ;
363 }
364 else
365 {
366
367 totalE +=
Select(EfitC0, TfitC0, m) ;
368 totalE +=
Select(EfitC1, TfitC1, m) ;
369 totalE +=
Select(EfitA0, TfitA0, m) ;
370 totalE +=
Select(EfitA1, TfitA1, m) ;
371
372 EModule0 +=
Select(EfitC0, TfitC0, m) ;
373 EModule0 +=
Select(EfitA0, TfitA0, m) ;
374 ECModule +=
Select(EfitC1, TfitC1, m) ;
375 ECModule +=
Select(EfitA1, TfitA1, m) ;
376 }
377
378 if(m==18||m==19||(m>=24&&j<=29)||m==33||m==34||(m>=42&&m<=47)||m==12||m==13||m==0||m==1)
379 {
380 totalE += 0. ;
381 EEModule += 0. ;
382 }
383 else
384 {
385
386
387 totalE +=
Select(EfitD0, TfitD0, m) ;
388 totalE +=
Select(EfitE0, TfitE0, m) ;
389
390 EEModule +=
Select(EfitD0, TfitD0, m) ;
391 EEModule +=
Select(EfitE0, TfitE0, m) ;
392 }
393 }
394
395
396 if(totalE/1000<CoreDown||totalE/1000>CoreUp)
397 continue ;
398
399 RecoEModule0->Fill(EModule0/1000.) ;
400 RecoEEModule->Fill(EEModule/1000.) ;
401 RecoECentralModule->Fill(ECModule/1000.) ;
402 RecoE->Fill(totalE/1000.) ;
403
404 for(
int m=0 ;
m<15 ;
m++)
405 {
406
407
408
409
410 LongitudinalProfile->Fill(LongitudinalProfile->GetBinCenter(m+1), ((ECModuleABCCell[m]+2*EModule0ABCCell[m])/1000.)/LongitudinalProfile->GetBinWidth(m+1)) ;
411 }
412
413 AccEntries++ ;
414 }
415 cout<<"AccEntries: "<<AccEntries<<endl ;
416
417
418 LongitudinalProfile->Scale(1./AccEntries) ;
419
420 for(
int m=0 ;
m<18 ;
m++)
421 {
422
423
424 if(LongitudinalProfile->GetBinContent(m+1)<0.05)
425 {
426 LongitudinalProfile->SetBinContent(m+1, 0.) ;
427 LongitudinalProfile->SetBinError(m+1, 0.) ;
428 }
429 }
430
431
432
433 string Sub_OutPath =
"./results/"+
Particles[
i]+
"/" ;
434 if(gSystem->AccessPathName(Sub_OutPath.c_str()))
435 {
436 cout<<Sub_OutPath<<" doesn't exist! Making......"<<endl ;
437 gSystem->Exec(("mkdir "+Sub_OutPath).c_str()) ;
438 }
439
441 if(PhysicsLists[k]=="FTFP_BERT_ATL_VALIDATION")
442 PhysicsList = "FTFP_BERT_ATL" ;
443
444 TFile*
outputFile =
new TFile((Sub_OutPath+
"/tiletb90-E"+Energies[j]+
"-"+Particles[i]+
"_"+PhysicsList+
".root").c_str(),
"RECREATE") ;
445 cout<<
"outputFile: "<<
outputFile->GetName()<<endl ;
446
447
448 RecoE->Write() ;
449 RecoEModule0->Write() ;
450 RecoEEModule->Write() ;
451 RecoECentralModule->Write() ;
452 LongitudinalProfile->Write() ;
454 }
455
456 }
457
458 }
459
460 return 0 ;
461}
float Select(float *Efit, float *Tfit, int m)
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)