38{
39
40 B2INFO("createHisto");
44
45 TChain* tree = new TChain("tree");
48 if (!tree->GetBranch("ndf")) {
49 B2FATAL("input data do not exits, please check!");
50 gSystem->Exec("echo rootfile do not exits or something wrong >> error");
51 return;
52 }
53
54 int lay;
55 double w;
56 double x_u;
57 double x_b;
58 double x_mea;
59 double Pval;
60 double alpha;
61 double theta;
62 double ndf;
63 double absRes_u;
64 double absRes_b;
65 tree->SetBranchAddress("lay", &lay);
66 tree->SetBranchAddress("ndf", &ndf);
67 tree->SetBranchAddress("Pval", &Pval);
68 tree->SetBranchAddress("x_u", &x_u);
69 tree->SetBranchAddress("x_b", &x_b);
70 tree->SetBranchAddress("x_mea", &x_mea);
71 tree->SetBranchAddress("weight", &w);
72 tree->SetBranchAddress("alpha", &alpha);
73 tree->SetBranchAddress("theta", &theta);
74
75
76 std::vector<TString> list_vars = {"lay", "ndf", "Pval", "x_u", "x_b", "x_mea", "weight", "alpha", "theta"};
77 tree->SetBranchStatus("*", 0);
78
79 for (TString brname : list_vars) {
80 tree->SetBranchStatus(brname, 1);
81 }
82
83
84 vector<double> yu;
85 vector <double> yb;
86 for (int i = 0; i < 50; ++i) {
87 yb.push_back(-0.07 + i * (0.14 / 50));
88 }
89 for (int i = 0; i < 50; ++i) {
90 yu.push_back(-0.08 + i * (0.16 / 50));
91 }
92
93 vector<double> xbin;
94 xbin.push_back(0.);
95 xbin.push_back(0.02);
96 for (int i = 1; i < m_np; ++i) {
98 }
99
100 for (int il = 0; il < 56; ++il) {
101 for (int lr = 0; lr < 2; ++lr) {
102 for (
int al = 0; al <
m_nalpha; ++al) {
103 for (
int th = 0; th <
m_ntheta; ++th) {
104 hist_b[il][lr][al][th] =
new TH2F(Form(
"hb_%d_%d_%d_%d", il, lr, al, th),
105 Form(
"lay_%d_lr%d_al_%3.0f_th_%3.0f;Drift Length [cm];#DeltaX", il, lr,
ialpha[al],
itheta[th]),
106 xbin.size() - 1, &xbin.at(0), yb.size() - 1, &yb.at(0));
107 hist_u[il][lr][al][th] =
new TH2F(Form(
"hu_%d_%d_%d_%d", il, lr, al, th),
108 Form(
"lay_%d_lr%d_al_%3.0f_th_%3.0f;Drift Length [cm];#DeltaX", il, lr,
ialpha[al],
itheta[th]),
109 xbin.size() - 1, &xbin.at(0), yu.size() - 1, &yu.at(0));
110 }
111 }
112 }
113 }
114
115
116 const int nEntries = tree->GetEntries();
117 B2INFO("Number of entries: " << nEntries);
118 int ith = -99;
119 int ial = -99;
120 int ilr = -99;
121 for (int i = 0; i < nEntries; ++i) {
122 tree->GetEntry(i);
123
124 if (std::fabs(x_b) < 0.02 || std::fabs(x_u) < 0.02) continue;
127 for (
int k = 0; k <
m_nalpha; ++k) {
129 ial = k;
130 break;
131 }
132 }
133
134 for (
int j = 0; j <
m_ntheta; ++j) {
136 ith = j;
137 break;
138 }
139 }
140
141 ilr = x_u > 0 ? 1 : 0;
142
143 if (ial == -99 || ith == -99 || ilr == -99) {
144 TString command = Form("Error in alpha=%3.2f and theta = %3.2f>> error", alpha, theta);
145
146 B2FATAL("ERROR" << command);
147 }
148 absRes_u = fabs(x_mea) - fabs(x_u);
149 absRes_b = fabs(x_mea) - fabs(x_b);
150
151 hist_u[lay][ilr][ial][ith]->Fill(fabs(x_u), absRes_u, w);
152 hist_b[lay][ilr][ial][ith]->Fill(fabs(x_b), absRes_b, w);
153
154 }
155
156 B2INFO("Finish reading data");
157
158 TF1* gb = new TF1("gb", "gaus", -0.05, 0.05);
159 TF1* gu = new TF1("gu", "gaus", -0.06, 0.06);
160 TF1* g0b = new TF1("g0b", "gaus", -0.015, 0.07);
161 TF1* g0u = new TF1("g0u", "gaus", -0.015, 0.08);
162 g0b->SetParLimits(1, -0.01, 0.004);
163 g0u->SetParLimits(1, -0.01, 0.004);
164
165 std::vector<double> sigma;
166 std::vector<double> dsigma;
167 std::vector<double> s2;
168 std::vector<double> ds2;
169 std::vector<double> xl;
170 std::vector<double> dxl;
171 std::vector<double> dxl0;
172
174 int firstbin = 1;
175 int minEntry = 10;
176 for (int il = 0; il < 56; ++il) {
177 for (int lr = 0; lr < 2; ++lr) {
178 for (
int al = 0; al <
m_nalpha; ++al) {
179 for (
int th = 0; th <
m_ntheta; ++th) {
180
181 B2DEBUG(199, "layer-lr-al-th " << il << " - " << lr << " - " << al << " - " << th);
182 if (
hist_b[il][lr][al][th]->GetEntries() < 20000) {
184 continue;
185 }
186 B2DEBUG(199,
"Nentries: " <<
hist_b[il][lr][al][th]->GetEntries());
187 hist_b[il][lr][al][th]->SetDirectory(0);
188 hist_u[il][lr][al][th]->SetDirectory(0);
189
190 hist_b[il][lr][al][th]->FitSlicesY(g0b, firstbin, ib1, minEntry);
191
192 TH1F* hm1 = (TH1F*)gDirectory->Get(Form("hb_%d_%d_%d_%d_1", il, lr, al, th));
193 TH1F* hs1 = (TH1F*)gDirectory->Get(Form("hb_%d_%d_%d_%d_2", il, lr, al, th));
194 if (!hm1 || !hs1) {
196 continue;
197 }
198
199 hb_m[il][lr][al][th] = (TH1F*)hm1->Clone(Form(
"hb_%d_%d_%d_%d_m", il, lr, al, th));
200 hb_s[il][lr][al][th] = (TH1F*)hs1->Clone(Form(
"hb_%d_%d_%d_%d_s", il, lr, al, th));
201
202 hb_m[il][lr][al][th]->SetDirectory(0);
203 hb_s[il][lr][al][th]->SetDirectory(0);
204
205
206
207 hist_b[il][lr][al][th]->FitSlicesY(gb, ib1 + 1, m_np, minEntry);
208 hb_m[il][lr][al][th]->Add((TH1F*)gDirectory->Get(Form(
"hb_%d_%d_%d_%d_1", il, lr, al, th)));
209 hb_s[il][lr][al][th]->Add((TH1F*)gDirectory->Get(Form(
"hb_%d_%d_%d_%d_2", il, lr, al, th)));
210 B2DEBUG(199,
"entries (2nd): " <<
hb_s[il][lr][al][th]->GetEntries());
211
212
213 hist_u[il][lr][al][th]->FitSlicesY(g0u, firstbin, ib1, minEntry);
214 hu_m[il][lr][al][th] = (TH1F*)gDirectory->Get(Form(
"hu_%d_%d_%d_%d_1", il, lr, al, th))->Clone(Form(
"hu_%d_%d_%d_%d_m", il, lr, al,
215 th));
216 hu_s[il][lr][al][th] = (TH1F*)gDirectory->Get(Form(
"hu_%d_%d_%d_%d_2", il, lr, al, th))->Clone(Form(
"hu_%d_%d_%d_%d_s", il, lr, al,
217 th));
218 hu_m[il][lr][al][th]->SetDirectory(0);
219 hu_s[il][lr][al][th]->SetDirectory(0);
220
221
222 hist_u[il][lr][al][th]->FitSlicesY(gu, ib1 + 1, m_np, minEntry);
223 hu_m[il][lr][al][th]->Add((TH1F*)gDirectory->Get(Form(
"hu_%d_%d_%d_%d_1", il, lr, al, th)));
224 hu_s[il][lr][al][th]->Add((TH1F*)gDirectory->Get(Form(
"hu_%d_%d_%d_%d_2", il, lr, al, th)));
225 if (!
hu_s[il][lr][al][th] || !
hb_s[il][lr][al][th]) {
226 B2WARNING("slice histo do not found");
228 continue;
229 }
230
231 xl.clear(); dxl.clear(); dxl0.clear(); sigma.clear(); dsigma.clear(); s2.clear(); ds2.clear();
232 for (Int_t j = 1; j <
hu_s[il][lr][al][th]->GetNbinsX(); j++) {
233 if (
hu_s[il][lr][al][th]->GetBinContent(j) == 0)
continue;
234 if (
hb_s[il][lr][al][th]->GetBinContent(j) == 0)
continue;
235 double sb =
hb_s[il][lr][al][th]->GetBinContent(j);
236 double su =
hu_s[il][lr][al][th]->GetBinContent(j);
237
238 double dsb =
hb_s[il][lr][al][th]->GetBinError(j);
239 double dsu =
hu_s[il][lr][al][th]->GetBinError(j);
240 double XL =
hb_s[il][lr][al][th]->GetXaxis()->GetBinCenter(j);
241 double dXL = (
hb_s[il][lr][al][th]->GetXaxis()->GetBinWidth(j)) / 2;
242 double s_int = std::sqrt(sb * su);
243 double ds_int = 0.5 * s_int * (dsb / sb + dsu / su);
244 if (ds_int > 0.02) continue;
245 xl.push_back(XL);
246 dxl.push_back(dXL);
247 dxl0.push_back(0.);
248 sigma.push_back(s_int);
249 dsigma.push_back(ds_int);
250 s2.push_back(s_int * s_int);
251 ds2.push_back(2 * s_int * ds_int);
252 }
253
254 if (xl.size() < 7 || xl.size() >
Max_np) {
256 B2WARNING("number of element might out of range"); continue;
257 }
258
259
260 B2DEBUG(199, "Create Histo for layer-lr: " << il << " " << lr);
261 gr[il][lr][al][th] =
new TGraphErrors(xl.size(), &xl.at(0), &sigma.at(0), &dxl.at(0), &dsigma.at(0));
262 gr[il][lr][al][th]->SetMarkerSize(0.5);
263 gr[il][lr][al][th]->SetMarkerStyle(8);
264
265
266 gr[il][lr][al][th]->SetTitle(Form(
"Layer_%d_lr%d | #alpha = %3.0f | #theta = %3.0f", il, lr,
ialpha[al],
itheta[th]));
267 gr[il][lr][al][th]->SetName(Form(
"lay%d_lr%d_al%d_th%d", il, lr, al, th));
268
269
270 gfit[il][lr][al][th] =
new TGraphErrors(xl.size(), &xl.at(0), &s2.at(0), &dxl0.at(0), &ds2.at(0));
271 gfit[il][lr][al][th]->SetMarkerSize(0.5);
272 gfit[il][lr][al][th]->SetMarkerStyle(8);
273
274
275 gfit[il][lr][al][th]->SetTitle(Form(
"L%d-lr%d | #alpha = %3.0f | #theta = %3.0f ", il, lr,
ialpha[al],
itheta[th]));
276 gfit[il][lr][al][th]->SetName(Form(
"sigma2_lay%d_lr%d_al%d_th%d", il, lr, al, th));
277
278
279 gDirectory->Delete("hu_%d_%d_%d_%d_0");
280 }
281 }
282 }
283 }
284}
double ialpha[18]
represented alphas of alpha bins.
std::string m_inputRootFileNames
Input root file names.
TH1F * hb_s[56][2][Max_nalpha][Max_ntheta]
sigma histogram of ubiased residual
TGraphErrors * gr[56][2][18][7]
sigma graph.
TH2F * hist_u[56][2][Max_nalpha][Max_ntheta]
2D histogram of unbiased residual
TH1F * hu_m[56][2][Max_nalpha][Max_ntheta]
mean histogram biased residual
double u_alpha[18]
Upper boundaries of alpha bins.
virtual void readProfile()
read sigma bining (alpha, theta bining)
double m_ndfmin
Minimum NDF.
double m_binWidth
width of each bin, unit cm
TH2F * hist_b[56][2][Max_nalpha][Max_ntheta]
2D histogram of biased residual
TH1F * hu_s[56][2][Max_nalpha][Max_ntheta]
sigma histogram of biased residual
TH1F * hb_m[56][2][Max_nalpha][Max_ntheta]
mean histogram of unbiased residual
static const unsigned short Max_np
Maximum number of point =1/binwidth.
double itheta[7]
represented alphas of theta bins.
double m_Pvalmin
Minimum Prob(chi2) of track.
virtual void readSigma()
read sigma from previous calibration, (input sigma)
double u_theta[7]
Upper boundaries of theta bins.