1 | #include <fstream> |
---|
2 | #include <iostream> |
---|
3 | #include "TH1D.h" |
---|
4 | #include "TH2D.h" |
---|
5 | #include "TCanvas.h" |
---|
6 | #include "TF1.h" |
---|
7 | #include "TPad.h" |
---|
8 | #include "TGraphErrors.h" |
---|
9 | #include "TGraph.h" |
---|
10 | #include "TLine.h" |
---|
11 | #include "PlotScurvesAll-diffFitConst.h" |
---|
12 | |
---|
13 | // for format of EC_ASIC Scurves_all_ASIC data |
---|
14 | // ASIC A,B,C,.... : i=0,1,2,... ch 0,1,...,63 : j=0,1,...,63 |
---|
15 | // % cat scurves_PC_inj_run5.lvm |awk '{i=2;j=37;print($1,$(i*64+j+1+1))}' |
---|
16 | // > scurves_PC_inj_run5-C-ch37.data |
---|
17 | // => % cd $datadir |
---|
18 | // => % sh $srcdir/makeDataFile.sh with assigining proper fname |
---|
19 | // PlotScurvesAll-diffFit-v6.6.C: dac_sfit[ch]=-1; in the case of fitting failure. |
---|
20 | |
---|
21 | |
---|
22 | void PlotScurve( |
---|
23 | Int_t kDrawCh=31, |
---|
24 | TString fname=kFname, |
---|
25 | TString fname_ped=kFnamePed, //ASIC_D ped_file |
---|
26 | Double_t dac_half_spe_fix = -1, |
---|
27 | TString fname_gain="gain-org.txt", |
---|
28 | Int_t fit_min=kFitMin, |
---|
29 | Int_t fit_max=kFitMax, |
---|
30 | Int_t fit_min_scurve=kFitMinS, |
---|
31 | Int_t fit_max_scurve=kFitMaxS, |
---|
32 | Bool_t kBoard=1, //0:ASIC_C, 1:ASIC_D |
---|
33 | Int_t kChRef=kRefCh,//ASIC_C |
---|
34 | Bool_t checkAve=0 //0:use ref pix, 1:check average |
---|
35 | ){ |
---|
36 | //NOTE |
---|
37 | //Double_t dac_half_spe_fix = 177; //for EC_ASICb N101(asic N158). |
---|
38 | //check DAC value corresponds to voltage to 160fC input |
---|
39 | //(depends on DAC linearity) |
---|
40 | //Double_t dac_half_spe_fix = -1 //set gain to DAC average (default) |
---|
41 | |
---|
42 | /******************* Readout data file *********************/ |
---|
43 | |
---|
44 | /*********************** SIGNAL RUN ********************/ |
---|
45 | TString *input = new TString[kNch]; |
---|
46 | TString *input_ped = new TString[kNch]; |
---|
47 | Int_t ch; |
---|
48 | Float_t dac_half_sum = 0; |
---|
49 | Float_t dac_ped_sum = 0; |
---|
50 | Float_t dac_spe_sum = 0; |
---|
51 | Float_t dac_sfit_sum = 0; |
---|
52 | Float_t diff_sum = 0; |
---|
53 | Float_t mean_sum = 0; |
---|
54 | Float_t maxBinSum = 0; |
---|
55 | Double_t dac_half[kNch]; |
---|
56 | Double_t dac_ped[kNch]; |
---|
57 | Double_t dac_spe[kNch]; |
---|
58 | Double_t dac_sfit[kNch]; |
---|
59 | Double_t mean_diff[kNch]; |
---|
60 | Double_t gain_org[kNch]; |
---|
61 | Double_t sfit_chiS[kNch]; |
---|
62 | Double_t flag_fit[kNch]; |
---|
63 | |
---|
64 | TCanvas *c1 = new TCanvas("c1","c1",200,20,1100,600); |
---|
65 | c1->Divide(11,6); |
---|
66 | TCanvas *c2 = new TCanvas("c2","c2",300,50,1100,600); |
---|
67 | c2->Divide(11,6); |
---|
68 | TCanvas *c5 = new TCanvas("c5","c5",400,70,1100,600); |
---|
69 | c5->Divide(11,6); |
---|
70 | TCanvas *c3 = new TCanvas("c3","c3",500,100,1200,300); |
---|
71 | c3->Divide(4,1); |
---|
72 | /*TCanvas *c6 = new TCanvas("c6","c6",450,150,1000,500); |
---|
73 | c6->Divide(4,2); |
---|
74 | TCanvas *c7 = new TCanvas("c7","c7",470,200,1000,500); |
---|
75 | c7->Divide(4,2);*/ |
---|
76 | TCanvas *c4 = new TCanvas("c4","c4",900,400,300,300); |
---|
77 | |
---|
78 | TString name_hist[kNch]; |
---|
79 | TString name_hist_ped[kNch]; |
---|
80 | TString name_hist_diff[kNch]; |
---|
81 | TString name_hist_diff_fit[kNch]; |
---|
82 | TString name_fit_diff[kNch]; |
---|
83 | TH1D *hist_scurve = new TH1D[kNch]; |
---|
84 | TH1D *hist_scurve_ped = new TH1D[kNch]; |
---|
85 | TH1D *hist_diff = new TH1D[kNch]; |
---|
86 | TH1D *hist_diff_fit = new TH1D[kNch]; |
---|
87 | TF1 *fit_sdiff = new TF1[kNch]; |
---|
88 | |
---|
89 | TString input_gain(fname_gain); |
---|
90 | ifstream in_gain(input_gain.Data()); |
---|
91 | if(!in_gain.good()){ |
---|
92 | cerr << "File " << input_gain << " open failed!" << endl; |
---|
93 | return; |
---|
94 | } |
---|
95 | |
---|
96 | for(ch=0;ch<kNch;ch++){ |
---|
97 | dac_half[ch]=0; |
---|
98 | dac_ped[ch]=0; |
---|
99 | dac_spe[ch]=0; |
---|
100 | dac_sfit[ch]=0; |
---|
101 | gain_org[ch]=0; |
---|
102 | mean_diff[ch]=0; |
---|
103 | sfit_chiS[ch]=0; |
---|
104 | flag_fit[ch]=0; |
---|
105 | name_hist[ch] ="hist"; |
---|
106 | name_hist[ch] +=ch; |
---|
107 | name_hist_ped[ch] ="hist_ped"; |
---|
108 | name_hist_ped[ch] +=ch; |
---|
109 | name_hist_diff[ch] ="hist_diff"; |
---|
110 | name_hist_diff[ch] +=ch; |
---|
111 | name_hist_diff_fit[ch] ="hist_diff_fit"; |
---|
112 | name_hist_diff_fit[ch] +=ch; |
---|
113 | name_fit_diff[ch] ="fit_diff"; |
---|
114 | name_fit_diff[ch] +=ch; |
---|
115 | } |
---|
116 | |
---|
117 | Double_t da; |
---|
118 | Int_t count=0; |
---|
119 | ch=0; |
---|
120 | while(in_gain >> da){ |
---|
121 | if(!kBoard && (count>=128 && count<192)){ |
---|
122 | gain_org[ch]=da; |
---|
123 | cerr << "!kBoard, count, gain_org[" << ch << "] " |
---|
124 | << !kBoard << " " << count << " " << gain_org[ch] << endl; |
---|
125 | ch++; |
---|
126 | } |
---|
127 | if(kBoard && (count>=192 && count<256)){ |
---|
128 | gain_org[ch]=da; |
---|
129 | cerr << "kBoard, count, gain_org[" << ch << "] " |
---|
130 | << kBoard << " " << count << " " << gain_org[ch] << endl; |
---|
131 | ch++; |
---|
132 | } |
---|
133 | count++; |
---|
134 | } |
---|
135 | in_gain.close(); |
---|
136 | in_gain.clear(); |
---|
137 | |
---|
138 | |
---|
139 | Int_t trigger=0, trigger_fit=0, trigger_mean=0, trigger_sfit=0; |
---|
140 | for(ch=0;ch<kNch;ch++){ |
---|
141 | input[ch] += fname; |
---|
142 | input[ch] += "-ch"; |
---|
143 | input[ch] += ch; |
---|
144 | input[ch] += ".dat"; |
---|
145 | ifstream in(input[ch].Data()); |
---|
146 | if(!in.good()){ |
---|
147 | cerr << "File " << input[ch] << " open failed!" << endl; |
---|
148 | return; |
---|
149 | } |
---|
150 | |
---|
151 | input_ped[ch] += fname_ped; |
---|
152 | input_ped[ch] += "-ch"; |
---|
153 | input_ped[ch] += ch; |
---|
154 | input_ped[ch] += ".dat"; |
---|
155 | ifstream in_ped(input_ped[ch].Data()); |
---|
156 | if(!in_ped.good()){ |
---|
157 | cerr << "File " << input_ped[ch] << " open failed!" << endl; |
---|
158 | return; |
---|
159 | } |
---|
160 | |
---|
161 | |
---|
162 | |
---|
163 | //10DAC~10mV |
---|
164 | |
---|
165 | Double_t da, dat, dac_min, dac_max, step_dac; |
---|
166 | count = 0; |
---|
167 | while (in >> da >> dat ){ |
---|
168 | if(count==0) dac_min = da; |
---|
169 | if(count==1) step_dac = da - dac_min; |
---|
170 | dac_max=da; |
---|
171 | count++; |
---|
172 | } |
---|
173 | in.close(); |
---|
174 | in.clear(); |
---|
175 | |
---|
176 | /* |
---|
177 | if(ch==43 || ch==47){//for T1 ASIC_C |
---|
178 | cerr << "CHECK " << ch << " " << fit_min_scurve << endl; |
---|
179 | Int_t fit_min_scurve=140; |
---|
180 | } else { |
---|
181 | Int_t fit_min_scurve=kFitMinS; |
---|
182 | } |
---|
183 | */ |
---|
184 | |
---|
185 | if(kXmin<dac_min)kXmin=dac_min; |
---|
186 | const Int_t kNdata = count; |
---|
187 | count = (fit_max_scurve-fit_min_scurve)/step_dac; |
---|
188 | const Int_t kNdataFit = count; |
---|
189 | if(ch==0){ |
---|
190 | cerr << "kNdata, dac_min, dac_max, step_dac: " |
---|
191 | << kNdata << " " << dac_min << " " << dac_max << " " |
---|
192 | << step_dac << endl; |
---|
193 | } |
---|
194 | |
---|
195 | Double_t dac_min_ped, dac_max_ped, step_dac_ped; |
---|
196 | count = 0; |
---|
197 | while (in_ped >> da >> dat ){ |
---|
198 | if(count==0) dac_min_ped = da; |
---|
199 | if(count==1) step_dac_ped = da - dac_min_ped; |
---|
200 | dac_max_ped=da; |
---|
201 | count++; |
---|
202 | } |
---|
203 | in_ped.close(); |
---|
204 | in_ped.clear(); |
---|
205 | |
---|
206 | |
---|
207 | const Int_t kNdataPed = count; |
---|
208 | if(ch==0){ |
---|
209 | cerr << "kNdataPed, dac_min_ped, dac_max_ped, step_dac_ped: " |
---|
210 | << kNdataPed << " " << dac_min_ped << " " << dac_max_ped |
---|
211 | << " " << step_dac_ped << endl; |
---|
212 | } |
---|
213 | |
---|
214 | hist_scurve[ch] = TH1D(name_hist[ch],name_hist[ch],kNdata-1, |
---|
215 | dac_min,dac_max); |
---|
216 | hist_scurve_ped[ch] = TH1D(name_hist_ped[ch],name_hist_ped[ch], |
---|
217 | kNdataPed-1,dac_min_ped,dac_max_ped); |
---|
218 | hist_diff[ch] = TH1D(name_hist_diff[ch],name_hist_diff[ch], |
---|
219 | kNdata-2,dac_min,dac_max); |
---|
220 | hist_diff_fit[ch] = TH1D(name_hist_diff_fit[ch],name_hist_diff_fit[ch], |
---|
221 | kNdataFit,fit_min_scurve,fit_max_scurve); |
---|
222 | |
---|
223 | in.open(input[ch].Data()); |
---|
224 | Double_t data[kNdata], dac[kNdata], dac_fit[kNdataFit], data_fit[kNdataFit]; |
---|
225 | while (in >> da >> dat ){ |
---|
226 | hist_scurve[ch].Fill(da,dat); |
---|
227 | } |
---|
228 | in.close(); |
---|
229 | in.clear(); |
---|
230 | |
---|
231 | in_ped.open(input_ped[ch].Data()); |
---|
232 | while (in_ped >> da >> dat ){ |
---|
233 | hist_scurve_ped[ch].Fill(da,dat); |
---|
234 | } |
---|
235 | in_ped.close(); |
---|
236 | in_ped.clear(); |
---|
237 | |
---|
238 | //dac_ped[ch] = hist_scurve_ped[ch].GetMaximumBin()+dac_min_ped; //absolute value |
---|
239 | dac_ped[ch] = hist_scurve_ped[ch].GetBinCenter(hist_scurve_ped[ch].GetMaximumBin()); //absolute value |
---|
240 | dac_ped_sum += dac_ped[ch]; //absolute value |
---|
241 | //cerr << "dac_ped[" << ch << "] dac_ped_sum " << dac_ped[ch] |
---|
242 | //<< " " << dac_ped_sum << endl; |
---|
243 | |
---|
244 | |
---|
245 | hist_scurve[ch].Smooth(3); |
---|
246 | Int_t binx=0; |
---|
247 | //hist_scurve[ch].GetBinWithContent(kHalfMax,binx,kXmin-dac_min+1, |
---|
248 | // dac_max-dac_min+1,kHalfMax/2.); |
---|
249 | hist_scurve[ch].GetBinWithContent(kHalfMax,binx,kXmin-dac_min+1, |
---|
250 | dac_max-dac_min+1,2000); |
---|
251 | dac_half[ch] = hist_scurve[ch].GetBinCenter(binx); //absolute value |
---|
252 | if(dac_half[ch]<kXmin)dac_half[ch]=-1; |
---|
253 | |
---|
254 | Int_t i=0; |
---|
255 | for(i=0;i<kNdata;i++){ |
---|
256 | dac[i] = hist_scurve[ch].GetBinCenter(i+1); |
---|
257 | data[i] = hist_scurve[ch].GetBinContent(i+1); |
---|
258 | } |
---|
259 | |
---|
260 | /*** derive diff ***/ |
---|
261 | Double_t diff[kNdata-1], dac_diff[kNdata-1]; |
---|
262 | Int_t trigger_diff=0; |
---|
263 | for(i=0;i<kNdata-1;i++){ |
---|
264 | diff[i] = (data[i]-data[i+1])/step_dac; |
---|
265 | dac_diff[i] = dac[i]+step_dac/2; |
---|
266 | hist_diff[ch].Fill(dac_diff[i],diff[i]); |
---|
267 | if(dac_diff[i]>=fit_min){ |
---|
268 | diff_sum += diff[i]*dac_diff[i]; |
---|
269 | //cerr << "diff[" << i << "], dac_diff[" << i << "] " |
---|
270 | //<< diff[i] << " " << dac_diff[i] << endl; |
---|
271 | trigger_diff+=diff[i]; |
---|
272 | } |
---|
273 | } |
---|
274 | //mean_diff[ch] = diff_sum/trigger_diff; |
---|
275 | hist_diff[ch].GetXaxis()->SetRangeUser(fit_min,fit_max); |
---|
276 | mean_diff[ch] = hist_diff[ch].GetMean(); |
---|
277 | //cerr << "trigger_diff, mean_diff[" << ch << "] " |
---|
278 | //<< trigger_diff << " " << mean_diff[ch] << endl; |
---|
279 | |
---|
280 | |
---|
281 | /******************* GRAPHICS *****************/ |
---|
282 | c1->cd(ch+1); |
---|
283 | /*** fit scurves ***/ |
---|
284 | cerr << "ch " << ch; |
---|
285 | //if(ch==43 || ch==47){ |
---|
286 | if(ch==170){ |
---|
287 | TF1 *fit_pol = new TF1("fit_pol","pol4",150,fit_max_scurve); |
---|
288 | hist_scurve[ch].Fit(fit_pol,"","",150,fit_max_scurve); |
---|
289 | }else{ |
---|
290 | TF1 *fit_pol = new TF1("fit_pol","pol4",fit_min_scurve,fit_max_scurve); |
---|
291 | hist_scurve[ch].Fit(fit_pol,"","",fit_min_scurve,fit_max_scurve); |
---|
292 | } |
---|
293 | Double_t fit_par_pol4[5]; |
---|
294 | fit_pol->GetParameters(fit_par_pol4); |
---|
295 | sfit_chiS[ch] = fit_pol->GetChisquare(); |
---|
296 | TF1 *func = hist_scurve[ch].GetFunction("fit_pol"); |
---|
297 | Double_t data_diff_fit; |
---|
298 | for(i=0;i<kNdataFit;i++){ |
---|
299 | //if(ch==43 || ch==47){ |
---|
300 | if(ch==170){ |
---|
301 | dac_fit[i] = hist_scurve[ch].GetBinCenter(i)+150-dac_min; |
---|
302 | data_fit[i] = func->Eval(hist_scurve[ch].GetBinCenter(i)+150-dac_min); |
---|
303 | }else{ |
---|
304 | dac_fit[i] = hist_scurve[ch].GetBinCenter(i)+fit_min_scurve-dac_min; |
---|
305 | data_fit[i] = func->Eval(hist_scurve[ch].GetBinCenter(i)+fit_min_scurve-dac_min); |
---|
306 | //cerr << "dac_fit[" << i << "], data_fit[" << i << "] " |
---|
307 | //<< dac_fit[i] << " " << data_fit[i] << endl; |
---|
308 | } |
---|
309 | } |
---|
310 | Double_t dac_diff_fit; |
---|
311 | for(i=0;i<kNdataFit-1;i++){ |
---|
312 | data_diff_fit = (data_fit[i]-data_fit[i+1])/step_dac; |
---|
313 | hist_diff_fit[ch].Fill(dac_fit[i],data_diff_fit); |
---|
314 | } |
---|
315 | |
---|
316 | TLine *lhalf_max = new TLine(dac[0],kHalfMax,dac[kNdata-1],kHalfMax); |
---|
317 | TLine *ldac_half = new TLine(dac_half[ch],0,dac_half[ch], |
---|
318 | (Double_t)kDrawMax); |
---|
319 | hist_scurve[ch].SetMaximum(kDrawMax); |
---|
320 | hist_scurve[ch].GetXaxis()->SetRangeUser(kDrawDacMin,kDrawDacMax); |
---|
321 | hist_scurve[ch].Draw(); |
---|
322 | lhalf_max->Draw("same"); |
---|
323 | ldac_half->Draw("same"); |
---|
324 | if(dac_half[ch]>0){ |
---|
325 | dac_half_sum += dac_half[ch]-dac_ped[ch]; //relative absolute value |
---|
326 | trigger++; |
---|
327 | } |
---|
328 | |
---|
329 | /*** Differential plot from scurve fitting function ***/ |
---|
330 | c5->cd(ch+1); |
---|
331 | hist_diff_fit[ch].GetXaxis()->SetRangeUser(fit_min_scurve,fit_max_scurve-2*step_dac); |
---|
332 | Double_t dac_sfit_max=hist_diff_fit[ch].GetBinCenter(hist_diff_fit[ch].GetMaximumBin()); |
---|
333 | //if(dac_sfit_max<=fit_min_scurve+4*step_dac){ |
---|
334 | if(dac_sfit_max<=fit_min_scurve+2*step_dac){ |
---|
335 | hist_diff_fit[ch].GetXaxis()->SetRangeUser(fit_min_scurve+kFitSadj,fit_max_scurve-2*step_dac); |
---|
336 | dac_sfit[ch] = hist_diff_fit[ch].GetBinCenter(hist_diff_fit[ch].GetMaximumBin()); |
---|
337 | //if(dac_sfit[ch]<=fit_min_scurve+kFitSadj+4*step_dac)dac_sfit[ch]=-1; |
---|
338 | if(dac_sfit[ch]<fit_min_scurve+kFitSadj+step_dac){ |
---|
339 | dac_sfit[ch]=-1; |
---|
340 | //dac_sfit[ch]=dac_half[ch]; |
---|
341 | flag_fit[ch] = -1; |
---|
342 | cerr << "flag_fit[" << ch << "] " << flag_fit[ch] << endl; |
---|
343 | } |
---|
344 | }else { |
---|
345 | dac_sfit[ch] = hist_diff_fit[ch].GetBinCenter(hist_diff_fit[ch].GetMaximumBin()); |
---|
346 | } |
---|
347 | |
---|
348 | if(dac_sfit[ch]>fit_min_scurve+5){ |
---|
349 | dac_sfit_sum += dac_sfit[ch]-dac_ped[ch]; |
---|
350 | trigger_sfit++; |
---|
351 | }else{ |
---|
352 | //dac_sfit[ch] = fit_min_scurve+10; |
---|
353 | dac_sfit[ch] = -1; |
---|
354 | } |
---|
355 | //cerr << "dac_sfit[" << ch << "] " << dac_sfit[ch] << endl; |
---|
356 | TLine *ldac_sfit = new TLine(dac_sfit[ch],0,dac_sfit[ch],kDrawMaxFit); |
---|
357 | TLine *ldac_sfit_copy = new TLine(dac_sfit[ch],0,dac_sfit[ch],kDrawMax); |
---|
358 | ldac_sfit->SetLineColor(kMagenta); |
---|
359 | ldac_sfit_copy->SetLineColor(kMagenta); |
---|
360 | hist_diff_fit[ch].SetMaximum(kDrawMaxFit); |
---|
361 | hist_diff_fit[ch].SetMinimum(0); |
---|
362 | hist_diff_fit[ch].Draw(); |
---|
363 | ldac_sfit->Draw("same"); |
---|
364 | |
---|
365 | /**** differential plot ****/ |
---|
366 | c2->cd(ch+1); |
---|
367 | //hist_diff[ch].Rebin(8); |
---|
368 | hist_diff[ch].Rebin(3); |
---|
369 | fit_sdiff = new TF1("fit_sdiff","gaus",dac_min,dac_max); |
---|
370 | //fit_sdiff->SetLineWidth(1); |
---|
371 | //if(ch==8 || ch==18 || ch==44 || ch==56) |
---|
372 | mean_sum += mean_diff[ch]-dac_ped[ch]; |
---|
373 | trigger_mean++; |
---|
374 | |
---|
375 | Double_t fit_par[3]; |
---|
376 | //hist_diff[ch].Fit(fit_sdiff,"RQ0","",fit_min,fit_max); |
---|
377 | hist_diff[ch].Fit(fit_sdiff,"","",fit_min,fit_max); |
---|
378 | hist_diff[ch].GetXaxis()->SetRangeUser(kDrawDacMin,kDrawDacMax); |
---|
379 | hist_diff[ch].SetMinimum(0); |
---|
380 | hist_diff[ch].SetMaximum(kDrawMaxDiff); |
---|
381 | //hist_diff[ch].Rebin(); |
---|
382 | hist_diff[ch].Draw(); |
---|
383 | fit_sdiff->GetParameters(fit_par); |
---|
384 | dac_spe[ch] = fit_par[1]; |
---|
385 | if(dac_spe[ch]>fit_min){ |
---|
386 | dac_spe_sum += dac_spe[ch]-dac_ped[ch]; |
---|
387 | //cerr << "dac_spe[" << ch << "] " << dac_spe[ch] << endl; |
---|
388 | trigger_fit++; |
---|
389 | }else{ |
---|
390 | dac_spe[ch] = fit_min+10; |
---|
391 | } |
---|
392 | //cerr << "dac_spe[" << ch << "] " << dac_spe[ch] << endl; |
---|
393 | TLine *ldac_spe = new TLine(dac_spe[ch],0,dac_spe[ch], |
---|
394 | (Double_t)kDrawMaxDiff); |
---|
395 | ldac_spe->SetLineColor(kRed); |
---|
396 | TLine *lmean_diff = new TLine(mean_diff[ch],0,mean_diff[ch], |
---|
397 | (Double_t)kDrawMaxDiff); |
---|
398 | lmean_diff->SetLineColor(kCyan); |
---|
399 | TLine *lfit_min = new TLine(fit_min,0,fit_min,kDrawMaxDiff); |
---|
400 | lfit_min->SetLineColor(kGray); |
---|
401 | |
---|
402 | ldac_spe->Draw(); |
---|
403 | lmean_diff->Draw("same"); |
---|
404 | lfit_min->Draw("same"); |
---|
405 | |
---|
406 | c3->cd(1); |
---|
407 | if(ch==0){ |
---|
408 | hist_scurve[ch].SetMaximum(kDrawMax); |
---|
409 | hist_scurve[ch].Draw(); |
---|
410 | }else{ |
---|
411 | /*if(ch==8 || ch==18 || ch==44 || ch==56)*/ |
---|
412 | hist_scurve[ch].Draw("same"); |
---|
413 | } |
---|
414 | if(ch==kDrawCh){ |
---|
415 | c3->cd(2); |
---|
416 | hist_scurve[ch].SetMaximum(kDrawMax); |
---|
417 | hist_scurve[kDrawCh].Draw(); |
---|
418 | lhalf_max->Draw("same"); |
---|
419 | ldac_half->Draw("same"); |
---|
420 | ldac_sfit_copy->Draw("same"); |
---|
421 | c3->cd(3); |
---|
422 | hist_diff[kDrawCh].Draw(); |
---|
423 | ldac_spe->Draw(); |
---|
424 | lmean_diff->Draw("same"); |
---|
425 | lfit_min->Draw("same"); |
---|
426 | c3->cd(4); |
---|
427 | hist_diff_fit[kDrawCh].Draw(); |
---|
428 | ldac_sfit->Draw("same"); |
---|
429 | } |
---|
430 | /* |
---|
431 | if(ch<32){ |
---|
432 | c6->cd(ch/4+1); |
---|
433 | hist_scurve[ch].SetMaximum(kDrawMax); |
---|
434 | if(ch%4==0){ |
---|
435 | hist_scurve[ch].Draw(); |
---|
436 | }else{ |
---|
437 | hist_scurve[ch].Draw("same"); |
---|
438 | } |
---|
439 | ldac_sfit_copy->Draw("same"); |
---|
440 | }else{ |
---|
441 | c7->cd(ch/4-7); |
---|
442 | hist_scurve[ch].SetMaximum(kDrawMax); |
---|
443 | if(ch%4==0){ |
---|
444 | hist_scurve[ch].Draw(); |
---|
445 | }else{ |
---|
446 | hist_scurve[ch].Draw("same"); |
---|
447 | } |
---|
448 | ldac_sfit_copy->Draw("same"); |
---|
449 | } |
---|
450 | */ |
---|
451 | |
---|
452 | c4->cd(); |
---|
453 | if(ch==0){ |
---|
454 | hist_scurve_ped[ch].SetMaximum(kDrawMaxPed); |
---|
455 | hist_scurve_ped[ch].Draw("l"); |
---|
456 | }else{ |
---|
457 | hist_scurve_ped[ch].Draw("lsame"); |
---|
458 | } |
---|
459 | |
---|
460 | } |
---|
461 | |
---|
462 | if(!checkAve){ |
---|
463 | Float_t dac_ped_ave = dac_ped[kChRef]; //absolute value |
---|
464 | Float_t dac_half_ave = dac_half[kChRef]; |
---|
465 | Float_t dac_spe_ave = dac_spe[kChRef]; |
---|
466 | Float_t dac_sfit_ave = dac_sfit[kChRef]; |
---|
467 | //Float_t dac_sfit_ave = 252.5; //dac_sfit of ch31 of ASIC_C with the 180 for lower gain pixels |
---|
468 | Float_t mean_diff_ave = mean_diff[kChRef]; |
---|
469 | }else{ |
---|
470 | Float_t dac_ped_ave = dac_ped_sum/(Float_t)kNch; //absolute value |
---|
471 | Float_t dac_half_ave = dac_half_sum/(Float_t)trigger+dac_ped_ave; |
---|
472 | Float_t dac_spe_ave = dac_spe_sum/(Float_t)trigger_fit+dac_ped_ave; |
---|
473 | Float_t mean_diff_ave = mean_sum/(Float_t)trigger_mean+dac_ped_ave; |
---|
474 | Float_t dac_sfit_ave = dac_sfit_sum/(Float_t)trigger_sfit+dac_ped_ave; |
---|
475 | } |
---|
476 | //trigger_mean=4; |
---|
477 | if(dac_half_spe_fix!=-1) { |
---|
478 | Double_t dac_half_spe = dac_half_spe_fix; |
---|
479 | } else { |
---|
480 | //Double_t dac_half_spe = dac_half_ave; |
---|
481 | Double_t dac_half_spe = dac_spe_ave; |
---|
482 | } |
---|
483 | |
---|
484 | TLine *ldac_ped_ave = new TLine(dac_ped_ave,0,dac_ped_ave, |
---|
485 | (Double_t)kDrawMax); |
---|
486 | TLine *ldac_ped_ave_copy = new TLine(dac_ped_ave,0,dac_ped_ave, |
---|
487 | (Double_t)kDrawMaxDiff); |
---|
488 | TLine *ldac_half_ave = new TLine(dac_half_ave,0,dac_half_ave, |
---|
489 | (Double_t)kDrawMax); |
---|
490 | TLine *ldac_half_spe = new TLine(dac_half_spe,0,dac_half_spe, |
---|
491 | (Double_t)kDrawMax); |
---|
492 | TLine *lmean_diff_ave = new TLine(mean_diff_ave,0,mean_diff_ave, |
---|
493 | (Double_t)kDrawMax); |
---|
494 | TLine *ldac_sfit_ave = new TLine(dac_sfit_ave,0,dac_sfit_ave, |
---|
495 | (Double_t)kDrawMax); |
---|
496 | ldac_ped_ave->SetLineColor(kOrange); |
---|
497 | ldac_half_ave->SetLineColor(kRed); |
---|
498 | lmean_diff_ave->SetLineColor(kCyan); |
---|
499 | //ldac_half_spe->SetLineColor(kGreen); |
---|
500 | ldac_sfit_ave->SetLineColor(kMagenta); |
---|
501 | |
---|
502 | c3->cd(1); |
---|
503 | ldac_ped_ave->Draw("same"); |
---|
504 | ldac_half_ave->Draw("same"); |
---|
505 | lhalf_max->Draw("same"); |
---|
506 | ldac_half_spe->Draw("same"); |
---|
507 | lmean_diff_ave->Draw("same"); |
---|
508 | ldac_sfit_ave->Draw("same"); |
---|
509 | |
---|
510 | c3->cd(3); |
---|
511 | ldac_ped_ave_copy->SetLineColor(kOrange); |
---|
512 | ldac_ped_ave_copy->Draw("same"); |
---|
513 | |
---|
514 | Int_t gain_asic_diff, gain_asic_dacHalf, gain_asic_diff_mean, gain_asic_sfit; |
---|
515 | cerr << "title ch g_asic_dacHalf g_asic_diff g_asic_diff_mean g_asic_sfit dac_half[ch] dac_ped[ch] dac_spe[ch] dac_half_ave dac_half_spe dac_ped_ave dac_sfit_ave" |
---|
516 | << endl; |
---|
517 | for(ch=0;ch<kNch;ch++){ |
---|
518 | /* |
---|
519 | if(ch==8 || ch==44 || ch==56 || ch==18){ |
---|
520 | gain_asic_diff_mean=(Int_t)((mean_diff_ave-dac_ped_ave)/ |
---|
521 | (mean_diff[ch]-dac_ped[ch])*gain_org[ch]); |
---|
522 | }else{ |
---|
523 | gain_asic_diff_mean=0; |
---|
524 | } |
---|
525 | */ |
---|
526 | if(dac_half[ch]<0){ |
---|
527 | gain_asic_dacHalf = 0; |
---|
528 | gain_asic_diff = 0; |
---|
529 | gain_asic_diff_mean = 0; |
---|
530 | gain_asic_sfit = 0; |
---|
531 | }else{ |
---|
532 | gain_asic_dacHalf =(Int_t)((dac_half_ave-dac_ped_ave)/ |
---|
533 | (dac_half[ch]-dac_ped[ch])*gain_org[ch]); |
---|
534 | gain_asic_diff =(Int_t)((dac_half_spe-dac_ped_ave)/ |
---|
535 | (dac_spe[ch]-dac_ped[ch])*gain_org[ch]); |
---|
536 | gain_asic_diff_mean=(Int_t)((mean_diff_ave-dac_ped_ave)/ |
---|
537 | (mean_diff[ch]-dac_ped[ch])*gain_org[ch]); |
---|
538 | gain_asic_sfit =(Int_t)((dac_sfit_ave-dac_ped_ave)/ |
---|
539 | (dac_sfit[ch]-dac_ped[ch])*gain_org[ch]); |
---|
540 | //cerr << ch << " " << gain_org[ch] << endl; |
---|
541 | } |
---|
542 | cout << "OUT_TABLE " |
---|
543 | << ch << " " |
---|
544 | << gain_asic_dacHalf << " " |
---|
545 | << gain_asic_diff << " " |
---|
546 | << gain_asic_diff_mean << " " |
---|
547 | << gain_asic_sfit << " " |
---|
548 | << dac_half[ch] << " " |
---|
549 | << dac_ped[ch] << " " |
---|
550 | << (Int_t)dac_spe[ch] << " " |
---|
551 | << dac_half_ave << " " |
---|
552 | << dac_half_spe << " " |
---|
553 | << dac_ped_ave << " " |
---|
554 | << dac_sfit_ave << " " |
---|
555 | << sfit_chiS[ch] << " " |
---|
556 | << ch << " " |
---|
557 | << flag_fit[ch] |
---|
558 | << endl; |
---|
559 | } |
---|
560 | /* |
---|
561 | for(ch=kNch-1;ch>=0;ch--){ |
---|
562 | cout << "OUT_TABLE_INV " |
---|
563 | << (Int_t)(dac_half_ave/(dac_half[ch]-dac_ped)*64) |
---|
564 | << endl; |
---|
565 | } |
---|
566 | */ |
---|
567 | |
---|
568 | |
---|
569 | } |
---|
570 | |
---|
571 | |
---|
572 | |
---|
573 | |
---|
574 | |
---|
575 | |
---|
576 | |
---|
577 | |
---|