9 gROOT->SetStyle(
"Plain");
10 gROOT->LoadMacro(
"$VMCWORKDIR/gconfig/rootlogon.C");
11 gROOT->LoadMacro(
"$VMCWORKDIR/gconfig/basiclibs.C");
15 TH2F *
h2phi=
new TH2F(
"h2phi",
"Phi difference",70,0.,7.,100,-2.,2.);
16 TH2F *h2x=
new TH2F(
"h2x",
"X difference",70,0.,7.,100,-2.,2.);
17 TH2F *h2y=
new TH2F(
"h2y",
"Y difference",70,0.,7.,100,-2.,2.);
18 TH2F *h2z=
new TH2F(
"h2z",
"Z difference",70,0.,7.,100,-2.,2.);
19 TH2F *h2energy=
new TH2F(
"h2energy",
"Energy difference",70,0.,7.,100,-0.2,0.2);
21 TH1F *h1energy_1=
new TH1F(
"h1energy_1",
"Cluster energy",70,0.,7.);
22 TH1F *h1energy_2=
new TH1F(
"h1energy_2",
"Cluster energy",70,0.,7.);
23 TH1F *h1energy_3=
new TH1F(
"h1energy_3",
"Cluster energy",70,0.,7.);
24 TH1F *h1energy_4=
new TH1F(
"h1energy_4",
"Cluster energy",70,0.,7.);
27 TH1F *h1phi=
new TH1F(
"hphi",
"Phi difference",70,0.,7.);
28 TH1F *h1z=
new TH1F(
"hz",
"Z difference",70,0.,7.);
31 TH1F *h1x_2=
new TH1F(
"hx_2",
"X difference",70,0.,7.);
32 TH1F *h1y_2=
new TH1F(
"hy_2",
"Y difference",70,0.,7.);
33 TH1F *h1x_3=
new TH1F(
"hx_3",
"X difference",70,0.,7.);
34 TH1F *h1y_3=
new TH1F(
"hy_3",
"Y difference",70,0.,7.);
35 TH1F *h1x_4=
new TH1F(
"hx_4",
"X difference",70,0.,7.);
36 TH1F *h1y_4=
new TH1F(
"hy_4",
"Y difference",70,0.,7.);
43 double x_diff, y_diff, z_diff,
phi_diff, e_diff;
46 double sigma_e, sigma_x, sigma_y, sigma_z, sigma_phi, sigma_e_e;
47 double sigma_e_error, sigma_x_error, sigma_y_error, sigma_z_error, sigma_phi_error, sigma_e_e_error;
48 TH1D *h_phi, *h_x, *h_y, *h_z, *h_energy;
51 Bool_t barrel_flag=
false, fwcap_flag=
false, bwcap_flag=
false, fsc_flag=
false;
53 Double_t pars1[10]={0.}, pars2[10]={0.}, pars3[10]={0.}, pars4[10]={0.};
62 outFile+=emc_component;
65 TFile* file1 =
new TFile(outFile);
66 if (!file1->IsZombie())
69 h2phi->Reset();h2x->Reset();h2y->Reset();h2z->Reset();h2energy->Reset();
70 TTree *
t=(TTree *) file1->Get(
"pndsim") ;
71 TClonesArray*
cluster_array=
new TClonesArray(
"PndEmcCluster");
72 t->SetBranchAddress(
"EmcCluster",&cluster_array);
74 t->SetBranchAddress(
"MCTrack",&mctrack_array);
77 for (Int_t j=0; j< t->GetEntriesFast(); j++)
83 energy=photon_momentum.Mag();
84 theta=photon_momentum.Theta();
85 phi=photon_momentum.Phi();
100 for (Int_t
i=0;
i<cluster_array->GetEntriesFast();
i++)
103 cluster_energy=cluster->
energy();
104 if (cluster_energy>max_energy)
107 TVector3 cluster_pos=cluster->
where();
108 cluster_phi=cluster_pos.Phi();
109 cluster_theta=cluster_pos.Theta();
110 if (emc_component==1)
112 cluster_z=100*
cos(cluster_theta);
114 cluster_x=100*
sin(cluster_theta)*
cos(cluster_phi);
115 cluster_y=100*
sin(cluster_theta)*
sin(cluster_phi);
121 h2energy->Fill(energy,e_diff);
123 if (emc_component==1)
126 h2phi->Fill(energy,phi_diff);
128 h2z->Fill(energy,z_diff);
131 h2x->Fill(energy,x_diff);
133 h2y->Fill(energy,y_diff);
137 for (
int i=0;
i<h2energy->GetNbinsX();
i++)
139 h_energy = h2energy->ProjectionY(
"hp_energy_1",
i,
i);
140 sigma_e=h_energy->GetRMS();
141 sigma_e_error=h_energy->GetRMSError();
142 energy=h2energy->GetXaxis()->GetBinCenter(
i);
145 sigma_e_e_error=sigma_e_error/
energy;
151 h1energy_1->SetBinContent(
i,sigma_e_e);
152 h1energy_1->SetBinError(
i,sigma_e_e_error);
155 for (
int i=0;
i<h2phi->GetNbinsX();
i++)
157 h_phi = h2phi->ProjectionY(
"hp_phi",
i,
i);
158 sigma_phi=h_phi->GetRMS()*
TMath::Pi()/180.;
159 sigma_phi_error=h_phi->GetRMSError()*
TMath::Pi()/180.;
160 h1phi->SetBinContent(
i,sigma_phi);
161 h1phi->SetBinError(
i,sigma_phi_error);
163 for (
int i=0;
i<h2z->GetNbinsX();
i++)
165 h_z = h2z->ProjectionY(
"hp_z",
i,
i);
166 sigma_z=h_z->GetRMS();
167 sigma_z_error=h_z->GetRMSError();
168 h1z->SetBinContent(
i,sigma_z);
169 h1z->SetBinError(
i,sigma_z_error);
171 std::cout<<
"emc_component "<<emc_component<<
" done."<<std::endl;
173 std::cout<<
"EMC data file for component "<<emc_component<<
" for gemetry "<<emcGeometry<<
" does not exist"<<std::endl;
181 outFile+=emcGeometry;
183 outFile+=emc_component;
186 TFile* file2 =
new TFile(outFile);
187 if (!file2->IsZombie())
190 h2phi->Reset();h2x->Reset();h2y->Reset();h2z->Reset();h2energy->Reset();
191 TTree *t=(TTree *) file2->Get(
"pndsim") ;
192 TClonesArray* cluster_array=
new TClonesArray(
"PndEmcCluster");
193 t->SetBranchAddress(
"EmcCluster",&cluster_array);
194 TClonesArray* mctrack_array=
new TClonesArray(
"PndMCTrack");
195 t->SetBranchAddress(
"MCTrack",&mctrack_array);
198 for (Int_t j=0; j< t->GetEntriesFast(); j++)
204 energy=photon_momentum.Mag();
205 theta=photon_momentum.Theta();
206 phi=photon_momentum.Phi();
208 if (emc_component==1)
215 x=100*
sin(theta)*
cos(phi);
216 y=100*
sin(theta)*
sin(phi);
221 for (Int_t
i=0;
i<cluster_array->GetEntriesFast();
i++)
224 cluster_energy=cluster->
energy();
225 if (cluster_energy>max_energy)
228 TVector3 cluster_pos=cluster->
where();
229 cluster_phi=cluster_pos.Phi();
230 cluster_theta=cluster_pos.Theta();
231 if (emc_component==1)
233 cluster_z=100*
cos(cluster_theta);
235 cluster_x=100*
sin(cluster_theta)*
cos(cluster_phi);
236 cluster_y=100*
sin(cluster_theta)*
sin(cluster_phi);
242 h2energy->Fill(energy,e_diff);
244 if (emc_component==1)
247 h2phi->Fill(energy,phi_diff);
249 h2z->Fill(energy,z_diff);
252 h2x->Fill(energy,x_diff);
254 h2y->Fill(energy,y_diff);
259 for (
int i=0;
i<h2energy->GetNbinsX();
i++)
261 h_energy = h2energy->ProjectionY(
"hp_energy_2",
i,
i);
262 sigma_e=h_energy->GetRMS();
263 sigma_e_error=h_energy->GetRMSError();
264 energy=h2energy->GetXaxis()->GetBinCenter(
i);
267 sigma_e_e_error=sigma_e_error/
energy;
273 h1energy_2->SetBinContent(
i,sigma_e_e);
274 h1energy_2->SetBinError(
i,sigma_e_e_error);
277 for (
int i=0;
i<h2x->GetNbinsX();
i++)
279 h_x = h2x->ProjectionY(
"hp_x_2",
i,
i);
280 sigma_x=h_x->GetRMS();
281 sigma_x_error=h_x->GetRMSError();
282 h1x_2->SetBinContent(
i,sigma_x);
283 h1x_2->SetBinError(
i,sigma_x_error);
285 for (
int i=0;
i<h2y->GetNbinsX();
i++)
287 h_y = h2y->ProjectionY(
"hp_y_2",
i,
i);
288 sigma_y=h_y->GetRMS();
289 sigma_y_error=h_y->GetRMSError();
290 h1y_2->SetBinContent(
i,sigma_y);
291 h1y_2->SetBinError(
i,sigma_y_error);
294 std::cout<<
"emc_component "<<emc_component<<
" done."<<std::endl;
296 std::cout<<
"EMC data file for component "<<emc_component<<
" for gemetry "<<emcGeometry<<
" does not exist"<<std::endl;
304 outFile+=emcGeometry;
306 outFile+=emc_component;
309 TFile* file3 =
new TFile(outFile);
310 if (!file3->IsZombie())
313 h2phi->Reset();h2x->Reset();h2y->Reset();h2z->Reset();h2energy->Reset();
314 TTree *t=(TTree *) file3->Get(
"pndsim") ;
315 TClonesArray* cluster_array=
new TClonesArray(
"PndEmcCluster");
316 t->SetBranchAddress(
"EmcCluster",&cluster_array);
317 TClonesArray* mctrack_array=
new TClonesArray(
"PndMCTrack");
318 t->SetBranchAddress(
"MCTrack",&mctrack_array);
321 for (Int_t j=0; j< t->GetEntriesFast(); j++)
327 energy=photon_momentum.Mag();
328 theta=photon_momentum.Theta();
329 phi=photon_momentum.Phi();
331 if (emc_component==1)
338 x=100*
sin(theta)*
cos(phi);
339 y=100*
sin(theta)*
sin(phi);
344 for (Int_t
i=0;
i<cluster_array->GetEntriesFast();
i++)
347 cluster_energy=cluster->
energy();
348 if (cluster_energy>max_energy)
351 TVector3 cluster_pos=cluster->
where();
352 cluster_phi=cluster_pos.Phi();
353 cluster_theta=cluster_pos.Theta();
354 if (emc_component==1)
356 cluster_z=100*
cos(cluster_theta);
358 cluster_x=100*
sin(cluster_theta)*
cos(cluster_phi);
359 cluster_y=100*
sin(cluster_theta)*
sin(cluster_phi);
365 h2energy->Fill(energy,e_diff);
367 if (emc_component==1)
370 h2phi->Fill(energy,phi_diff);
372 h2z->Fill(energy,z_diff);
375 h2x->Fill(energy,x_diff);
377 h2y->Fill(energy,y_diff);
382 for (
int i=0;
i<h2energy->GetNbinsX();
i++)
384 h_energy = h2energy->ProjectionY(
"hp_energy_3",
i,
i);
385 sigma_e=h_energy->GetRMS();
386 sigma_e_error=h_energy->GetRMSError();
387 energy=h2energy->GetXaxis()->GetBinCenter(
i);
390 sigma_e_e_error=sigma_e_error/
energy;
396 h1energy_3->SetBinContent(
i,sigma_e_e);
397 h1energy_3->SetBinError(
i,sigma_e_e_error);
400 for (
int i=0;
i<h2x->GetNbinsX();
i++)
402 h_x = h2x->ProjectionY(
"hp_x_3",
i,
i);
403 sigma_x=h_x->GetRMS();
404 sigma_x_error=h_x->GetRMSError();
405 h1x_3->SetBinContent(
i,sigma_x);
406 h1x_3->SetBinError(
i,sigma_x_error);
408 for (
int i=0;
i<h2y->GetNbinsX();
i++)
410 h_y = h2y->ProjectionY(
"hp_y_3",
i,
i);
411 sigma_y=h_y->GetRMS();
412 sigma_y_error=h_y->GetRMSError();
413 h1y_3->SetBinContent(
i,sigma_y);
414 h1y_3->SetBinError(
i,sigma_y_error);
416 std::cout<<
"emc_component "<<emc_component<<
" done."<<std::endl;
418 std::cout<<
"EMC data file for component "<<emc_component<<
" for gemetry "<<emcGeometry<<
" does not exist"<<std::endl;
426 outFile+=emcGeometry;
428 outFile+=emc_component;
431 TFile* file4 =
new TFile(outFile);
432 if (!file4->IsZombie())
435 h2phi->Reset();h2x->Reset();h2y->Reset();h2z->Reset();h2energy->Reset();
436 TTree *t=(TTree *) file4->Get(
"pndsim") ;
437 TClonesArray* cluster_array=
new TClonesArray(
"PndEmcCluster");
438 t->SetBranchAddress(
"EmcCluster",&cluster_array);
439 TClonesArray* mctrack_array=
new TClonesArray(
"PndMCTrack");
440 t->SetBranchAddress(
"MCTrack",&mctrack_array);
443 for (Int_t j=0; j< t->GetEntriesFast(); j++)
449 energy=photon_momentum.Mag();
450 theta=photon_momentum.Theta();
451 phi=photon_momentum.Phi();
453 if (emc_component==1)
460 x=100*
sin(theta)*
cos(phi);
461 y=100*
sin(theta)*
sin(phi);
466 for (Int_t
i=0;
i<cluster_array->GetEntriesFast();
i++)
469 cluster_energy=cluster->
energy();
470 if (cluster_energy>max_energy)
473 TVector3 cluster_pos=cluster->
where();
474 cluster_phi=cluster_pos.Phi();
475 cluster_theta=cluster_pos.Theta();
476 if (emc_component==1)
478 cluster_z=100*
cos(cluster_theta);
480 cluster_x=100*
sin(cluster_theta)*
cos(cluster_phi);
481 cluster_y=100*
sin(cluster_theta)*
sin(cluster_phi);
487 h2energy->Fill(energy,e_diff);
489 if (emc_component==1)
492 h2phi->Fill(energy,phi_diff);
494 h2z->Fill(energy,z_diff);
497 h2x->Fill(energy,x_diff);
499 h2y->Fill(energy,y_diff);
504 for (
int i=0;
i<h2energy->GetNbinsX();
i++)
506 h_energy = h2energy->ProjectionY(
"hp_energy_4",
i,
i);
507 sigma_e=h_energy->GetRMS();
508 sigma_e_error=h_energy->GetRMSError();
509 energy=h2energy->GetXaxis()->GetBinCenter(
i);
512 sigma_e_e_error=sigma_e_error/
energy;
518 h1energy_4->SetBinContent(
i,sigma_e_e);
519 h1energy_4->SetBinError(
i,sigma_e_e_error);
522 for (
int i=0;
i<h2x->GetNbinsX();
i++)
524 h_x = h2x->ProjectionY(
"hp_x_4",
i,
i);
525 sigma_x=h_x->GetRMS();
526 sigma_x_error=h_x->GetRMSError();
527 h1x_4->SetBinContent(
i,sigma_x);
528 h1x_4->SetBinError(
i,sigma_x_error);
530 for (
int i=0;
i<h2y->GetNbinsX();
i++)
532 h_y = h2y->ProjectionY(
"hp_y_4",
i,
i);
533 sigma_y=h_y->GetRMS();
534 sigma_y_error=h_y->GetRMSError();
535 h1y_4->SetBinContent(
i,sigma_y);
536 h1y_4->SetBinError(
i,sigma_y_error);
538 std::cout<<
"emc_component "<<emc_component<<
" done."<<std::endl;
550 std::cout<<
"EMC data file for component "<<emc_component<<
" for gemetry "<<emcGeometry<<
" does not exist"<<std::endl;
561 TCanvas*
c1 =
new TCanvas(
"c1",
"Energy-position resolution vs Energy", 100, 100, 800, 800);
564 h1energy_1->Draw(
"E1");
566 TF1 *
f1 =
new TF1(
"f1",
fit1, 0., 7.,4);
568 h1energy_1->Fit(
"f1");
569 f1->GetParameters(pars1);
573 TF1 *
f2 =
new TF1(
"f2",
fit2, 0., 7.,3);
576 f2->GetParameters(pars1+4);
580 TF1 *
f3 =
new TF1(
"f3",
fit2, 0., 7.,3);
583 f3->GetParameters(pars1+7);
589 TCanvas*
c2 =
new TCanvas(
"c2",
"Energy-position resolution vs Energy", 100, 100, 800, 800);
592 h1energy_2->Draw(
"E1");
594 TF1 *
f4 =
new TF1(
"f4",
fit1, 0., 7.,4);
596 h1energy_2->Fit(
"f4");
597 f4->GetParameters(pars2);
601 TF1 *f5 =
new TF1(
"f5",
fit2, 0., 7.,3);
604 f5->GetParameters(pars2+4);
608 TF1 *f6 =
new TF1(
"f6",
fit2, 0., 7.,3);
611 f6->GetParameters(pars2+7);
617 TCanvas*
c3 =
new TCanvas(
"c3",
"Energy-position resolution vs Energy", 100, 100, 800, 800);
620 h1energy_3->Draw(
"E1");
622 TF1 *f7 =
new TF1(
"f7",
fit1, 0., 7.,4);
624 h1energy_3->Fit(
"f7");
625 f7->GetParameters(pars3);
629 TF1 *f8 =
new TF1(
"f8",
fit2, 0., 7.,3);
632 f8->GetParameters(pars3+4);
636 TF1 *f9 =
new TF1(
"f9",
fit2, 0., 7.,3);
639 f9->GetParameters(pars3+7);
645 TCanvas*
c4 =
new TCanvas(
"c4",
"Energy-position resolution vs Energy", 100, 100, 800, 800);
648 h1energy_4->Draw(
"E1");
650 TF1 *
f10 =
new TF1(
"f10",
fit1, 0., 7.,4);
651 f10->SetLineColor(2);
652 h1energy_4->Fit(
"f10");
653 f10->GetParameters(pars4);
657 TF1 *f11 =
new TF1(
"f11",
fit2, 0., 7.,3);
658 f11->SetLineColor(2);
660 f11->GetParameters(pars4+4);
664 TF1 *f12 =
new TF1(
"f12",
fit2, 0., 7.,3);
665 f12->SetLineColor(2);
667 f12->GetParameters(pars4+7);
671 TString fileName=
"emc_error_matrix_";
672 fileName+=fileVersion;
674 TFile *errorfile =
new TFile(fileName,
"RECREATE");
677 enum {barrel, fwcap, bwcap, fsc};
friend F32vec4 cos(const F32vec4 &a)
friend F32vec4 sin(const F32vec4 &a)
Container class for EMC error matrix parameter class is inherited from FairParGenericSet.
TVector3 GetMomentum() const
TClonesArray * cluster_array
Double_t fit2(Double_t *x, Double_t *par)
a cluster (group of neighboring crystals) of hit emc crystals
Double_t fit1(Double_t *x, Double_t *par)
virtual Double_t energy() const
TClonesArray * mctrack_array
void SetErrorMatrix(Int_t detectorComponent, Double_t *pars)