BOSS 7.0.9
BESIII Offline Software System
Loading...
Searching...
No Matches
CheckRung/check/gainVsEangle.cxx File Reference
#include <vector>
#include <string>
#include "TStyle.h"
#include "TString.h"

Go to the source code of this file.

Functions

void pushNo ()
 
void gainVsEangle ()
 

Variables

vector< string > file
 
const int PadNo1 = 0
 
const int PadNo2 = 40
 
const int TotalNo = 1600
 
const int NumSlices = 40
 
const int gainmin = 0
 
const int gainmax = 3
 
TString LegendName = "gain vs eangle"
 
const int Ipadx = 1
 
const int Ipady = 1
 
const int CanvasX = 800
 
const int CanvasY = 600
 
bool NormFlag = false
 
const double histmin = 0.7
 
const double histmax = 1.3
 
const double delta = 0.15
 

Function Documentation

◆ gainVsEangle()

void gainVsEangle ( )

Definition at line 34 of file CheckRung/check/gainVsEangle.cxx.

35{
36 pushNo();
37 const int FileNo = file.size();
38 TH2F*** h = new TH2F**[PadNo2];
39 TCanvas*** c = new TCanvas**[PadNo2];
40 TLegend*** lgd = new TLegend**[PadNo2];
41 gStyle->SetOptStat(0);
42 gStyle->SetCanvasColor(10);
43 for(int i=0;i<PadNo2;i++)
44 {
45 h[i] = new TH2F*[FileNo/2];
46 c[i] = new TCanvas*[FileNo/2];
47 lgd[i] = new TLegend*[FileNo/2];
48 }
49
50
51 TFile* f1;
52 TFile* f2;
53 TTree* tree1;
54 TTree* tree2;
55 double gain1[TotalNo],gain2[TotalNo],Id_doca1[TotalNo],Id_doca2[TotalNo],Norm1,Norm2;
56
57 stringstream histname; //histogram name
58 stringstream ss_file1; //file name
59 stringstream ss_file2;
60 stringstream ss1; //picture's drawing content
61 stringstream ss2;
62 stringstream cut;
63 stringstream legendheader;
64
65 for(int k=0;k<FileNo;k+=2)
66 {
67 ss_file1.str("");
68 ss_file1<<file[k];
69 f1=new TFile(ss_file1.str().c_str());
70 tree1=(TTree*)f1->Get("ddgcalib");
71 tree1->SetBranchAddress("Out_gain", gain1);
72 tree1->SetBranchAddress("Id_doca", Id_doca1);
73 tree1->GetEntry(0);
74 tree1->SetMarkerStyle(22);
75 tree1->SetMarkerColor(4);
76 tree1->SetLineColor(4);
77
78 ss_file2.str("");
79 ss_file2<<file[k+1];
80 f2=new TFile(ss_file2.str().c_str());
81 tree2=(TTree*)f2->Get("ddgcalib");
82 tree2->SetBranchAddress("Out_gain", gain2);
83 tree2->SetBranchAddress("Id_doca", Id_doca2);
84 tree2->GetEntry(0);
85 tree2->SetMarkerStyle(20);
86 tree2->SetMarkerColor(2);
87 tree2->SetLineColor(2);
88
89 for(int i=PadNo1;i<PadNo2;i++)
90 {
91 Norm1=0;
92 Norm2=0;
93 int k1=0;
94 int k2=0;
95
96 for(int j=0;j<TotalNo;j++)
97 {
98 if(Id_doca1[j]!=i) continue;
99 if(gain1[j]>gainmin && gain1[j]<gainmax) {Norm1 += gain1[j];k1++;}
100 if(gain2[j]>gainmin && gain2[j]<gainmax) {Norm2 += gain2[j];k2++;}
101 }
102 if(k1==0 || k2==0) {Norm1=1; Norm2=1;}
103 else {Norm1/= k1; Norm2/= k2;}
104 cout<<"Norm1= "<<Norm1<<" Norm2= "<<Norm2<<endl;
105
106 legendheader.str("");
107 legendheader<<"doca"<<i<<": "<<LegendName;
108 cout<<"legendheader: "<<legendheader.str().c_str()<<endl;
109 lgd[i][k/2] = new TLegend(.3, .75, .89, .89);
110 lgd[i][k/2] ->SetFillColor(10);
111 lgd[i][k/2] ->SetBorderSize(1);
112 lgd[i][k/2] ->SetHeader(legendheader.str().c_str());
113 lgd[i][k/2] ->AddEntry(tree1, ss_file1.str().c_str() , "p");
114 lgd[i][k/2] ->AddEntry(tree2, ss_file2.str().c_str() , "p");
115 lgd[i][k/2] ->Draw();
116
117 histname.str("");
118 histname<<"doca"<<i<<"_"<<file[k]<<"-"<<file[k+1];
119 //cout<<"histname: "<<histname.str().c_str()<<endl;
120 if(NormFlag) h[i][k/2] = new TH2F(histname.str().c_str(),"",100,0,NumSlices,100,histmin,histmax);
121 else h[i][k/2] = new TH2F(histname.str().c_str(),"",100,0,NumSlices,100,(Norm1+Norm2)/2-delta,(Norm1+Norm2)/2+delta);
122 h[i][k/2] -> GetYaxis()->SetTitle("gain");
123 h[i][k/2] -> GetYaxis()->SetTitleOffset(1.);
124 h[i][k/2] -> GetXaxis()->SetTitle("eangle");
125 c[i][k/2] = new TCanvas(histname.str().c_str(),histname.str().c_str(),800,600);
126 h[i][k/2] -> Draw();
127
128 cut.str("");
129 cut<<"Id_doca=="<<i;
130 cout<<"cut: "<<cut.str().c_str()<<endl;
131
132 ss1.str("");
133 if(NormFlag) ss1<<"Out_gain/"<<Norm1<<":Ip_eangle";
134 else ss1<<"Out_gain"<<":Ip_eangle";
135 tree1->Draw(ss1.str().c_str(),cut.str().c_str(),"sameLP");
136 ss2.str("");
137 if(NormFlag) ss2<<"Out_gain/"<<Norm2<<":Ip_eangle";
138 else ss2<<"Out_gain"<<":Ip_eangle";
139 tree2->Draw(ss2.str().c_str(),cut.str().c_str(),"sameLP");
140 }
141 }
142
143 TFile* g = new TFile("gainVsEangle.root","RECREATE");
144 for(int i=PadNo1;i<PadNo2;i++)
145 {
146 for(int k=0;k<FileNo;k+=2)
147 {
148 c[i][k/2] -> Write();
149 }
150 }
151 g->Close();
152
153 TCanvas* cc = new TCanvas("cc", "canvas", CanvasX, CanvasY);
154 cc->Divide(Ipadx,Ipady);
155 cc->Print("gainVsEangle.ps[");
156 for(int i=PadNo1;i<PadNo2;i++)
157 {
158 for(int k=0;k<FileNo;k+=2)
159 {
160 cc->cd(k/2+1);
161 gPad->Clear();
162 c[i][k/2]->DrawClonePad();
163 c[i][k/2] -> Close();
164 lgd[i][k/2] ->Delete();
165 }
166 cc->Update();
167 cc->Print("gainVsEangle.ps");
168 }
169 cc->Print("gainVsEangle.ps]");
170 cc->Close();
171
172 delete cc;
173 for(int i=PadNo1;i<PadNo2;i++)
174 {
175 for(int k=0;k<FileNo;k+=2)
176 {
177 delete h[i][k/2];
178 delete c[i][k/2];
179 }
180 }
181}
const int NumSlices
vector< string > file
const int PadNo2
const int CanvasX
const int Ipadx
const double delta
const int Ipady
const double histmax
const double histmin
const int gainmin
const int PadNo1
const int CanvasY
const int gainmax
const int TotalNo
TString LegendName
f1 Close()
curve Write()
legend Draw()
mg GetYaxis() -> SetRangeUser(0.8, 1.02)
mg GetXaxis() -> SetRangeUser(0.5, 1.9)
TFile * f1

◆ pushNo()

void pushNo ( )

Definition at line 8 of file CheckRung/check/gainVsEangle.cxx.

9{
10 file.push_back("../../DocaEangle/docaeangle.root");
11 file.push_back("docaeangle.root");
12}

Referenced by gainVsEangle().

Variable Documentation

◆ CanvasX

const int CanvasX = 800

Definition at line 26 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ CanvasY

const int CanvasY = 600

Definition at line 27 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ delta

const double delta = 0.15

Definition at line 31 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ file

vector<string> file

Definition at line 7 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle(), and pushNo().

◆ gainmax

const int gainmax = 3

Definition at line 22 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ gainmin

const int gainmin = 0

Definition at line 21 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ histmax

const double histmax = 1.3

Definition at line 30 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ histmin

const double histmin = 0.7

Definition at line 29 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ Ipadx

const int Ipadx = 1

Definition at line 24 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ Ipady

const int Ipady = 1

Definition at line 25 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ LegendName

TString LegendName = "gain vs eangle"

Definition at line 23 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ NormFlag

bool NormFlag = false

Definition at line 28 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ NumSlices

const int NumSlices = 40

Definition at line 20 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ PadNo1

const int PadNo1 = 0

Definition at line 17 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ PadNo2

const int PadNo2 = 40

Definition at line 18 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().

◆ TotalNo

const int TotalNo = 1600

Definition at line 19 of file CheckRung/check/gainVsEangle.cxx.

Referenced by gainVsEangle().