Subversion Repositories f9daq

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
291 f9daq 1
#include "TROOT.h"
2
#include "TFile.h"
3
#include "TBenchmark.h"
4
#include "TH1F.h"
5
#include "TH2F.h"
6
gROOT->Reset();
7
 
8
#include "TCanvas.h"
9
#include "TStyle.h"
10
#include "TPad.h"
11
#include "TF1.h"
12
#include "TGraph.h"
13
#include "TSpectrum.h"
14
 
15
#include "DrootHelper.cpp"
16
 
17
 
18
#define NCH 2
19
 
20
//-------------------------------------------------------------------------------------
21
 
22
void SetGS() {
23
  const UInt_t Number = 2;
24
  Double_t Red[Number]   = {0.00, 1.00};
25
  Double_t Green[Number] = {0.00, 1.00};
26
  Double_t Blue[Number]  = {0.00, 1.00};
27
  Double_t Stops[Number] = {0.00, 1.00};
28
 
29
  Int_t nb=50;
30
  TColor::CreateGradientColorTable(Number, Stops, Red, Green, Blue, nb);
31
}
32
 
33
 
34
//-------------------------------------------------------------------------------------
35
Double_t ConstantStep(Double_t x)
36
{
37
        if(x<=0) return 0.;
38
        else return 1.;
39
}
40
 
41
// =======================================================================================================
42
 
43
void plotCorTDC(TH1F *hp1d, char *hTitle, double fitmin, double fitmax, double drawmin, double drawmax)
44
{
45
        char sbuff[256];
46
 
47
        TLegend *leg1 = new TLegend(0.57,0.76,0.88,0.88);      
48
        leg1->SetFillColor(0);
49
        leg1->SetBorderSize(1);
50
        leg1->SetTextSize(0.05);
51
        leg1->SetTextAlign(22);
52
 
53
        //gStyle->SetOptFit(111);
54
        sprintf(sbuff, "%s;Time[ns];", hTitle);
55
        hp1d->SetTitle(sbuff);
56
        //~ hp1d->GetXaxis()->SetRangeUser(2*fitmin, 2*fitmax);
57
        hp1d->GetXaxis()->SetRangeUser(drawmin, drawmax);
58
        //~ hcTDC->DrawClone();
59
 
60
        //~ TF1 *fs = new TF1("fs","pol0(0) + gaus(1)");
61
 
62
        TF1 *fs = new TF1("fs","gaus(0) + ([3]*exp((x)/[4]) + [5]) * (0.5+0.5*TMath::Erf((x-[6])/[7]))");
63
        fs->SetParName(0, "G_Const"); fs->SetParName(1, "G_Mean"); fs->SetParName(2, "G_Sigma");
64
        fs->SetParName(3, "Exp_p0"); fs->SetParName(4, "Exp_p1"); fs->SetParName(5, "Exp_p2");
65
        fs->SetParName(6, "Erf_p0"); fs->SetParName(7, "Erf_p1");
66
//~ 
67
        TF1 *fg1 = new TF1("fg1", "gaus(0)"); fg1->SetNpx(400);
68
        TF1 *fe1 = new TF1("fe1", "[0]*exp((x)/[1]) + [2]");
69
        TF1 *ferf1 = new TF1("ferf1", "[0]*(0.5+0.5*TMath::Erf((x-[1])/[2]))");
70
        TF1 *fe1erf = new TF1("fe1erf", "([0]*exp((x)/[1]) + [2]) * (0.5+0.5*TMath::Erf((x-[3])/[4]))"); fe1erf->SetNpx(400);
71
 
72
        double fitampl = hp1d->GetMaximum();
73
        double fitcenter = hp1d->GetBinCenter(hp1d->GetMaximumBin());
74
 
75
        fs->SetNpx(400);
76
        fs->SetParameters(fitampl, fitcenter, 0.01,   1e2, -0.1, 1e1,   0, 0.05);
77
 
78
        // G + Er + Ex                  
79
        //fs->SetParLimits( 1, -0.1, 0.1);
80
        //fs->SetParLimits( 2, 0.018, 0.5);
81
        fs->SetParLimits( 4, -0.3, 0);
82
        //fs->SetParLimits( 6, -1e-1, 1e-1);
83
        fs->SetParLimits( 7, 0.04, 0.6);
84
 
85
        //~ // G
86
        //~ fs->SetParameters(fitampl/100., fitampl, fitcenter, 0.01);
87
 
88
        hp1d->Fit(fs,"Q","",fitmin, fitmax);
89
 
90
        //~ printf("Chi / NDF = %lf/%lf\n", fs->GetChisquare(), fs->GetNDF());
91
 
92
        fg1->SetParameters(fs->GetParameter(0), fs->GetParameter(1), fs->GetParameter(2));
93
        //~ fe1->SetParameters(fs->GetParameter(3), fs->GetParameter(4), fs->GetParameter(5));
94
        //~ ferf1->SetParameters(1e4, fs->GetParameter(6), fs->GetParameter(7));
95
        fe1erf->SetParameters(fs->GetParameter(3), fs->GetParameter(4), fs->GetParameter(5), fs->GetParameter(6), fs->GetParameter(7));
96
 
97
        fg1->SetLineColor(kRed);    fg1->SetLineWidth(1); fg1->SetLineStyle(1); fg1->SetRange(fitmin, fitmax); fg1->DrawCopy("SAME");
98
        //~ fe1->SetLineColor(kBlue);   fe1->SetLineWidth(1); fe1->SetLineStyle(1); fe1->SetRange(fitmin, fitmax); fe1->DrawCopy("SAME");
99
        //~ ferf1->SetLineColor(kYellow); ferf1->SetLineWidth(1);ferf1->SetLineStyle(1);ferf1->SetRange(fitmin, fitmax);ferf1->DrawCopy("SAME");
100
        fe1erf->SetLineColor(kBlue); fe1erf->SetLineWidth(1);fe1erf->SetLineStyle(1);fe1erf->SetRange(fitmin, fitmax);fe1erf->DrawCopy("SAME");
101
 
102
        double HalfMax = fitampl/2.0;
103
        double MinHalfMax = fs->GetX(HalfMax, -0.5, fitcenter);
104
        double MaxHalfMax = fs->GetX(HalfMax, fitcenter, 1.5);
105
        double FWHM = MaxHalfMax - MinHalfMax;
106
        double sigmaFWHM = fs->GetParameter(2);
107
        printf("Corrected %s resolution FWHM = %.1lf [ps]\n", hTitle, FWHM*1000);
108
        //~ fprintf(fp,"%lf ", FWHM*1000);
109
 
110
        sprintf(sbuff, "FWHM = %.0lf ps", FWHM*1000);
111
        leg1->AddEntry((TF1*)fs->Clone(),sbuff, "L");
112
        leg1->Draw();
113
}
114
 
115
// =======================================================================================================
116
 
117
void plots2(char *fname="480", char *plopt="d", double fitcenter = 1190., double fitw = 70., double comhi_range_hi = 2100., int batch_q=0)
118
{
119
    char sbuff[256];
120
 
121
        char *fitopt="crystal1";
122
        double inmin=-10;
123
         double inmax=10;
124
        double Ecut_lo = 450.;
125
  double Ecut_hi = 625.;
126
 
127
 
128
        int printeps = 0;
129
        int printgif=-1, double fitlo=1.0, double fithi=1.0;
130
        int ch=0;
131
        char fullname[256];
132
 
133
        //get ROOT file with histograms
134
        char fnameroot[1024];
135
        TFile * rootfile;
136
        TDirectory *dir;
137
 
138
        sprintf(fnameroot, "root/%s.root", fname);
139
        rootfile = (TFile *) gROOT->FindObject(fname);
140
        if(rootfile==NULL) rootfile = new TFile(fnameroot);
141
        if(rootfile==NULL) {
142
          printf("Cannot open root file %s!!!\n",fnameroot);
143
          return;
144
        }
145
        dir = (TDirectory*) rootfile;
146
 
147
        DrSetDrawStyle();
148
 
149
  TCanvas *c[64];
150
  int cc=-1;
151
  char hname[256], htitle[256];
152
  TH1F *hp1d, *hp1dcut; TH2F *hp2d;
153
 
154
  TLegend *leg[64];
155
  int legi = -1;
156
  TH1F *legentry[64];
157
  int legentryi = -1;
158
 
159
  TGraph *graph[16];
160
        int igraph=-1;
161
 
162
  int colarr[20] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, kOrange, 10,11,12,13,14,15,16,17,18,19};
163
  int legsty[] = {1,7,2,3,9,6,9,5,6};
164
 
165
  TF1 *fg = new TF1("fg", "gaus"); fg->SetNpx(300);
166
 
167
        TF1 *fgg = new TF1("fgg", "gaus(0)+gaus(3)"); fg->SetNpx(300);
168
        fgg->SetParName(0,"G1_Const"); fgg->SetParName(3,"G2_Const");
169
        fgg->SetParName(1,"G1_Mean" ); fgg->SetParName(4,"G2_Mean" );
170
        fgg->SetParName(2,"G1_Sigma"); fgg->SetParName(5,"G2_Sigma");
171
 
172
        TF1 *fg3 = new TF1("fg3", "gaus(0)+gaus(3)+gaus(6)"); fg3->SetNpx(300);
173
        fg3->SetParName(0,"G1_Const"); fg3->SetParName(3,"G2_Const"); fg3->SetParName(6,"G3_Const");
174
        fg3->SetParName(1,"G1_Mean" ); fg3->SetParName(4,"G2_Mean" ); fg3->SetParName(7,"G3_Mean" );
175
        fg3->SetParName(2,"G1_Sigma"); fg3->SetParName(5,"G2_Sigma"); fg3->SetParName(8,"G3_Sigma");
176
 
177
        TF1 *fg4 = new TF1("fg4", "gaus(0)+gaus(3)+gaus(6)+gaus(9)"); fg4->SetNpx(300);
178
        fg4->SetParName(0,"G1_Const"); fg4->SetParName(3,"G2_Const"); fg4->SetParName(6,"G3_Const"); fg4->SetParName(9,"G4_Const");
179
        fg4->SetParName(1,"G1_Mean" ); fg4->SetParName(4,"G2_Mean" ); fg4->SetParName(7,"G3_Mean" ); fg4->SetParName(10,"G4_Mean" );
180
        fg4->SetParName(2,"G1_Sigma"); fg4->SetParName(5,"G2_Sigma"); fg4->SetParName(8,"G3_Sigma"); fg4->SetParName(11,"G4_Sigma");
181
 
182
        TF1 *fg5 = new TF1("fg5", "gaus(0)+gaus(3)+gaus(6)+gaus(9)+gaus(12)"); fg5->SetNpx(300);
183
        fg5->SetParName(0,"G1_Const"); fg5->SetParName(3,"G2_Const"); fg5->SetParName(6,"G3_Const"); fg5->SetParName(9,"G4_Const");  fg5->SetParName(12,"G5_Const");
184
        fg5->SetParName(1,"G1_Mean" ); fg5->SetParName(4,"G2_Mean" ); fg5->SetParName(7,"G3_Mean" ); fg5->SetParName(10,"G4_Mean" ); fg5->SetParName(13,"G5_Mean" );
185
        fg5->SetParName(2,"G1_Sigma"); fg5->SetParName(5,"G2_Sigma"); fg5->SetParName(8,"G3_Sigma"); fg5->SetParName(11,"G4_Sigma"); fg5->SetParName(14,"G5_Sigma");
186
 
187
// -------------------------------------------------------------------  
188
 
189
    if( strchr(plopt, 'a') != NULL ) {
190
 
191
        //~ gStyle->SetOptStat(1111);   
192
        gStyle->SetOptStat(0); 
193
        gStyle->SetOptFit(0);  
194
 
195
        c[++cc] = new TCanvas("a", "a", 0, 0, 1200, 700);
196
                c[cc]->Divide(2,2);
197
 
198
        int draw_cuts = 1;
199
        int rebin_tdcs = 0;
200
 
201
        int ccccdi = 0;
202
        int ich;
203
 
204
//  -------------------------- qdc 0 ----------------------------------              
205
        ich = 0;    
206
                (c[cc]->cd(++ccccdi))->SetLogy(1);
207
            sprintf(hname, "hadc%d", ich);
208
            hp1d = DrTH1F(dir, hname, "");
209
            hp1d->SetTitle("MPPC 1;Charge [200 fC/bin]");
210
            hp1d->GetXaxis()->SetRangeUser(0,2000);
211
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
212
            hp1d->SetLineColor(kBlack);
213
            hp1d->DrawClone();
214
 
215
            if(draw_cuts) {
216
                sprintf(hname, "hadc_cut%d", ich);
217
                hp1dcut = DrTH1F(dir, hname, "");
218
                hp1dcut->SetLineColor(kRed);
219
                hp1dcut->DrawClone("SAME");
220
 
221
                //~ sprintf(hname, "hadc_cut_2%d", ich);
222
                //~ hp1dcut = DrTH1F(dir, hname, "");
223
                //~ hp1dcut->SetLineColor(kGreen);
224
                //~ hp1dcut->DrawClone("SAME");
225
            }
226
 
227
//  -------------------------- TDC 0 ----------------------------------   
228
                (c[cc]->cd(++ccccdi))->SetLogy(1);
229
            sprintf(hname, "htdc%d", ich);
230
            hp1d = DrTH1F(dir, hname, "");
231
            hp1d->SetTitle("MPPC 1;Time [ns]");
232
            if(rebin_tdcs) hp1d->Rebin(rebin_tdcs);
233
            //~ hp1d->GetXaxis()->SetRangeUser(0,22);
234
            hp1d->GetXaxis()->SetRangeUser(20,34);
235
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
236
            hp1d->SetLineColor(kBlack);
237
            hp1d->DrawClone();
238
 
239
            if(draw_cuts) {
240
                sprintf(hname, "htdc_cut%d", ich);
241
                hp1dcut = DrTH1F(dir, hname, "");
242
                if(rebin_tdcs) hp1dcut->Rebin(rebin_tdcs);
243
                hp1dcut->SetLineColor(kRed);
244
                hp1dcut->DrawClone("SAME");
245
 
246
                //~ sprintf(hname, "htdc_cut_2%d", ich);
247
                //~ hp1dcut = DrTH1F(dir, hname, "");
248
                //~ if(rebin_tdcs) hp1dcut->Rebin(rebin_tdcs);
249
                //~ hp1dcut->SetLineColor(kGreen);
250
                //~ hp1dcut->DrawClone("SAME");
251
            }
252
 
253
 //  -------------------------- qdc 1 ----------------------------------              
254
        ich = 1;  
255
                (c[cc]->cd(++ccccdi))->SetLogy(1);
256
            sprintf(hname, "hadc%d", ich);
257
            hp1d = DrTH1F(dir, hname, "");
258
            hp1d->SetTitle("MPPC 2;Charge [200 fC/bin]");
259
            hp1d->GetXaxis()->SetRangeUser(0,2000);
260
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
261
            hp1d->SetLineColor(kBlack);
262
            hp1d->DrawClone();
263
 
264
            if(draw_cuts) {
265
                sprintf(hname, "hadc_cut%d", ich);
266
                hp1dcut = DrTH1F(dir, hname, "");
267
                hp1dcut->SetLineColor(kRed);
268
                hp1dcut->DrawClone("SAME");
269
 
270
                //~ sprintf(hname, "hadc_cut_2%d", ich);
271
                //~ hp1dcut = DrTH1F(dir, hname, "");
272
                //~ hp1dcut->SetLineColor(kGreen);
273
                //~ hp1dcut->DrawClone("SAME");
274
            }
275
 
276
//  -------------------------- TDC 1 ----------------------------------   
277
                (c[cc]->cd(++ccccdi))->SetLogy(1);
278
            sprintf(hname, "htdc%d", ich);
279
            hp1d = DrTH1F(dir, hname, "");
280
            hp1d->SetTitle("MPPC 2;Time [ns]");
281
            if(rebin_tdcs) hp1d->Rebin(rebin_tdcs);
282
            //~ hp1d->GetXaxis()->SetRangeUser(0,22);
283
            hp1d->GetXaxis()->SetRangeUser(20,34);
284
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
285
            hp1d->SetLineColor(kBlack);
286
            hp1d->DrawClone();
287
 
288
            if(draw_cuts) {
289
                sprintf(hname, "htdc_cut%d", ich);
290
                hp1dcut = DrTH1F(dir, hname, "");
291
                if(rebin_tdcs) hp1dcut->Rebin(rebin_tdcs);
292
                hp1dcut->SetLineColor(kRed);
293
                hp1dcut->DrawClone("SAME");
294
 
295
                //~ sprintf(hname, "htdc_cut_2%d", ich);
296
                //~ hp1dcut = DrTH1F(dir, hname, "");
297
                //~ if(rebin_tdcs) hp1dcut->Rebin(rebin_tdcs);
298
                //~ hp1dcut->SetLineColor(kGreen);
299
                //~ hp1dcut->DrawClone("SAME");
300
            }
301
 
302
        sprintf(fullname, "gif/a_%s.gif", fname);  c[cc]->SaveAs(fullname);
303
    }
304
 
305
// -------------------------------------------------------------------  
306
 
307
    if( strchr(plopt, 'q') != NULL ) {
308
 
309
        gStyle->SetOptStat(1111);      
310
        gStyle->SetOptFit(0);  
311
 
312
        c[++cc] = new TCanvas("q", "q", 0, 0, 1200, 700);
313
                c[cc]->Divide(3,2);
314
 
315
        int draw_cuts = 1;
316
        int rebin_tdcs = 1;
317
 
318
        int ccccdi = 0;
319
        int ich;
320
/*        
321
        ich = 2;
322
//  -------------------------- qdc ref ----------------------------------          
323
                (c[cc]->cd(++ccccdi))->SetLogy(1);
324
            sprintf(hname, "hadc%d", ich);
325
            hp1d = DrTH1F(dir, hname, "");
326
            //~ hp1d->GetXaxis()->SetRangeUser(0,100);
327
            hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
328
            hp1d->DrawClone();
329
 
330
            sprintf(hname, "hadc_cut%d", ich);
331
            hp1dcut = DrTH1F(dir, hname, "");
332
            hp1dcut->SetLineColor(kRed);
333
            hp1dcut->DrawClone("SAME");
334
 
335
            sprintf(hname, "hadc_cut_2%d", ich);
336
            hp1dcut = DrTH1F(dir, hname, "");
337
            hp1dcut->SetLineColor(kGreen);
338
            hp1dcut->DrawClone("SAME");
339
 
340
//  -------------------------- TDC ref ----------------------------------              
341
                (c[cc]->cd(++ccccdi))->SetLogy(1);
342
            sprintf(hname, "htdc%d", ich);
343
            hp1d = DrTH1F(dir, hname, "");
344
            hp1d->Rebin(8);
345
            hp1d->GetXaxis()->SetRangeUser(5,105);
346
            hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
347
            hp1d->DrawClone();
348
 
349
            sprintf(hname, "htdc_cut%d", ich);
350
            hp1dcut = DrTH1F(dir, hname, "");
351
            hp1dcut->Rebin(8);
352
            hp1dcut->SetLineColor(kRed);
353
            hp1dcut->DrawClone("SAME");
354
 
355
            sprintf(hname, "htdc_cut_2%d", ich);
356
            hp1dcut = DrTH1F(dir, hname, "");
357
            hp1dcut->Rebin(8);
358
            hp1dcut->SetLineColor(kGreen);
359
            hp1dcut->DrawClone("SAME");
360
*/
361
 
362
//  -------------------------- TDC DIFF ----------------------------------              
363
        (c[cc]->cd(++ccccdi))->SetLogy(0);
364
            sprintf(hname, "htdcdiff");
365
            hp1d = DrTH1F(dir, hname, "");
366
            hp1d->Rebin(rebin_tdcs);
367
            hp1d->GetXaxis()->SetRangeUser(-15,15);
368
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*2);
369
            hp1d->GetYaxis()->SetRangeUser(0.,hp1d->GetMaximum()*1.1);
370
            hp1d->DrawClone();
371
 
372
            if(draw_cuts) {
373
                sprintf(hname, "htdcdiff_cut");
374
                hp1dcut = DrTH1F(dir, hname, "");
375
                hp1dcut->Rebin(rebin_tdcs);
376
                hp1dcut->SetLineColor(kRed);
377
                hp1dcut->DrawClone("SAME");
378
 
379
                sprintf(hname, "htdcdiff_cut_2");
380
                hp1dcut = DrTH1F(dir, hname, "");
381
                hp1dcut->Rebin(rebin_tdcs);
382
                hp1dcut->SetLineColor(kGreen);
383
                hp1dcut->DrawClone("SAME");  
384
            }
385
 
386
//  -------------------------- qdc MPPC ----------------------------------              
387
        ich = 0;    
388
                (c[cc]->cd(++ccccdi))->SetLogy(1);
389
            sprintf(hname, "hadc%d", ich);
390
            hp1d = DrTH1F(dir, hname, "");
391
            hp1d->GetXaxis()->SetRangeUser(0,1500);
392
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
393
            hp1d->DrawClone();
394
 
395
            if(draw_cuts) {
396
                sprintf(hname, "hadc_cut%d", ich);
397
                hp1dcut = DrTH1F(dir, hname, "");
398
                hp1dcut->SetLineColor(kRed);
399
                hp1dcut->DrawClone("SAME");
400
 
401
                sprintf(hname, "hadc_cut_2%d", ich);
402
                hp1dcut = DrTH1F(dir, hname, "");
403
                hp1dcut->SetLineColor(kGreen);
404
                hp1dcut->DrawClone("SAME");
405
            }
406
 
407
//  -------------------------- TDC MPPC ----------------------------------   
408
                (c[cc]->cd(++ccccdi))->SetLogy(1);
409
            sprintf(hname, "htdc%d", ich);
410
            hp1d = DrTH1F(dir, hname, "");
411
            hp1d->Rebin(rebin_tdcs);
412
            hp1d->GetXaxis()->SetRangeUser(0,20);
413
            hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
414
            hp1d->DrawClone();
415
 
416
            if(draw_cuts) {
417
                sprintf(hname, "htdc_cut%d", ich);
418
                hp1dcut = DrTH1F(dir, hname, "");
419
                hp1dcut->Rebin(rebin_tdcs);
420
                hp1dcut->SetLineColor(kRed);
421
                hp1dcut->DrawClone("SAME");
422
 
423
                sprintf(hname, "htdc_cut_2%d", ich);
424
                hp1dcut = DrTH1F(dir, hname, "");
425
                hp1dcut->Rebin(rebin_tdcs);
426
                hp1dcut->SetLineColor(kGreen);
427
                hp1dcut->DrawClone("SAME");
428
            }
429
 
430
 //  -------------------------- qdc MPPC ----------------------------------              
431
        ich = 1;  
432
        ccccdi++;  
433
                (c[cc]->cd(++ccccdi))->SetLogy(1);
434
            sprintf(hname, "hadc%d", ich);
435
            hp1d = DrTH1F(dir, hname, "");
436
            hp1d->GetXaxis()->SetRangeUser(0,1500);
437
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
438
            hp1d->DrawClone();
439
 
440
            if(draw_cuts) {
441
                sprintf(hname, "hadc_cut%d", ich);
442
                hp1dcut = DrTH1F(dir, hname, "");
443
                hp1dcut->SetLineColor(kRed);
444
                hp1dcut->DrawClone("SAME");
445
 
446
                sprintf(hname, "hadc_cut_2%d", ich);
447
                hp1dcut = DrTH1F(dir, hname, "");
448
                hp1dcut->SetLineColor(kGreen);
449
                hp1dcut->DrawClone("SAME");
450
            }
451
 
452
//  -------------------------- TDC MPPC ----------------------------------   
453
                (c[cc]->cd(++ccccdi))->SetLogy(1);
454
            sprintf(hname, "htdc%d", ich);
455
            hp1d = DrTH1F(dir, hname, "");
456
            hp1d->Rebin(rebin_tdcs);
457
            hp1d->GetXaxis()->SetRangeUser(0,20);
458
            hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
459
            hp1d->DrawClone();
460
 
461
            if(draw_cuts) {
462
                sprintf(hname, "htdc_cut%d", ich);
463
                hp1dcut = DrTH1F(dir, hname, "");
464
                hp1dcut->Rebin(rebin_tdcs);
465
                hp1dcut->SetLineColor(kRed);
466
                hp1dcut->DrawClone("SAME");
467
 
468
                sprintf(hname, "htdc_cut_2%d", ich);
469
                hp1dcut = DrTH1F(dir, hname, "");
470
                hp1dcut->Rebin(rebin_tdcs);
471
                hp1dcut->SetLineColor(kGreen);
472
                hp1dcut->DrawClone("SAME");
473
            }
474
 
475
        sprintf(fullname, "gif/q_%s.gif", fname);  c[cc]->SaveAs(fullname);
476
        //~ sprintf(fullname, "%s_j2.eps", fname);  c[cc]->SaveAs(fullname);
477
 
478
        if(batch_q) gSystem->Exit(1);
479
    }
480
// -------------------------------------------------------------------  
481
 
482
    if( strchr(plopt, 'n') != NULL ) {
483
 
484
        gStyle->SetOptStat("e");       
485
        //~ gStyle->SetOptFit(1);       
486
 
487
        c[++cc] = new TCanvas("d", "d", 0, 0, 900, 600);
488
                //~ c[cc]->Divide(2,2);
489
 
490
        int draw_cuts = 0;
491
        int rebin_tdcs = 1;
492
 
493
        double drawmin = -17;
494
        double drawmax = +17;
495
        double fitmin = -10;
496
        double fitmax =  10;
497
        double fitcenter = 0.0;
498
        double HalfMax, MinHalfMax, MaxHalfMax, FWHM, FWHMc;
499
 
500
        int ccccdi = 0;
501
        int ich = 0;
502
 
503
        TF1 *f_fit;
504
 
505
        TF1 *fcg = new TF1("fcg", "pol0(0)+gaus(1)"); fcg->SetNpx(300);
506
        fcg->SetParName(0,"Const"); fcg->SetParName(1,"G_Const");
507
        fcg->SetParName(2,"G_Mean" ); fcg->SetParName(3,"G_Sigma" );
508
 
509
        TF1 *fcgg = new TF1("fcgg", "pol0(0)+gaus(1)+gaus(4)"); fcgg->SetNpx(300);
510
        fcgg->SetParName(0,"Const");
511
        fcgg->SetParName(1,"G1_Const"); fcgg->SetParName(2,"G1_Mean" ); fcgg->SetParName(3,"G1_Sigma" );
512
        fcgg->SetParName(4,"G2_Const"); fcgg->SetParName(5,"G2_Mean" ); fcgg->SetParName(6,"G2_Sigma" );
513
 
514
                (c[cc]->cd(++ccccdi))->SetLogy(0);
515
            sprintf(hname, "htdcdiff");
516
            hp1d = DrTH1F(dir, hname, "");
517
            //~ hp1d->Rebin(rebin_tdcs);
518
            hp1d->SetLineColor(kBlack);
519
            hp1d->GetXaxis()->SetRangeUser(drawmin,drawmax);
520
            hp1d->GetYaxis()->SetRangeUser(0.0,hp1d->GetMaximum()*1.1);
521
            hp1d->SetTitle(";Coincidence Time [ns];Counts");
522
 
523
 
524
            f_fit = fcgg;
525
            f_fit->SetParameters(hp1d->GetMaximum()*0.25,
526
                                hp1d->GetMaximum()*0.7, 0, 0.4,
527
                                hp1d->GetMaximum()*0.05, 0, 0.05);
528
            f_fit->SetParLimits(0, 0, hp1d->GetMaximum());
529
            f_fit->SetParLimits(1, 0, hp1d->GetMaximum());
530
            f_fit->SetParLimits(2, fitmin,fitmax);
531
            f_fit->SetParLimits(3, 0.2, 1);
532
            f_fit->SetParLimits(4, 0, hp1d->GetMaximum());
533
            f_fit->SetParLimits(5, fitmin,fitmax);
534
            f_fit->SetParLimits(6, 0.02, 0.3);
535
 
536
            //~ f_fit = fcgg;
537
            //~ f_fit->SetParameters(hp1d->GetMaximum()*0.1, 
538
                                //~ hp1d->GetMaximum()*0.5, 0, 0.05,
539
                                //~ hp1d->GetMaximum()*0.4, 0, 0.5);
540
 
541
            //~ f_fit = fcg;
542
            //~ f_fit->SetParameters(hp1d->GetMaximum()*0.1, 
543
                                //~ hp1d->GetMaximum()*0.9, 0, 0.05);
544
 
545
            f_fit->SetRange(fitmin,fitmax);
546
            f_fit->SetLineWidth(1);
547
            hp1d->Fit(f_fit, "Q", "", fitmin,fitmax);
548
 
549
 
550
            HalfMax = f_fit->GetMaximum(fitmin, fitmax)/2.0;
551
            MinHalfMax = f_fit->GetX(HalfMax, fitmin, fitcenter);
552
            MaxHalfMax = f_fit->GetX(HalfMax, fitcenter, fitmax);
553
            FWHM = MaxHalfMax - MinHalfMax;
554
 
555
            HalfMax = (f_fit->GetMaximum(fitmin, fitmax) + f_fit->GetParameter(0))/2.0;
556
            MinHalfMax = f_fit->GetX(HalfMax, fitmin, fitcenter);
557
            MaxHalfMax = f_fit->GetX(HalfMax, fitcenter, fitmax);
558
            FWHMc = MaxHalfMax - MinHalfMax;
559
 
560
            //~ printf("FWHM = %lf ns | FWHMc = %lf ns\n", FWHM, FWHMc);
561
            printf("FWHM (peak only) = %.3lf ns\n", FWHMc);
562
 
563
 
564
            leg[++legi] = new TLegend(0.122768, 0.740418, 0.420759, 0.878049);
565
            leg[legi]->SetFillColor(0); leg[legi]->SetBorderSize(1); leg[legi]->SetTextSize(0.03); leg[legi]->SetTextAlign(22);
566
 
567
 
568
            for(int i=0; i<6; i++) fgg->SetParameter(i, f_fit->GetParameter(i+1));
569
            //~ fgg->SetRange(drawmin, drawmax); fgg->SetNpx(300); fgg->SetLineColor(kBlue); fgg->SetLineWidth(1); fgg->DrawClone("LSAME");
570
            double Icherenkovs = fgg->Integral(drawmin, drawmax);
571
 
572
            double Iall = f_fit->Integral(fitmin, fitmax);
573
            double Rsn = Icherenkovs/(Iall-Icherenkovs);
574
 
575
            double Ientr = hp1d->GetEntries()*hp1d->GetBinWidth(1);
576
            double Rsne = Icherenkovs/(Ientr-Icherenkovs);
577
 
578
            double Ihist = hp1d->Integral(1, hp1d->GetNbinsX()-1)*hp1d->GetBinWidth(1);
579
            double Rsnh = Icherenkovs/(Ihist-Icherenkovs);
580
 
581
            //~ printf("ICherenkov = %lf | IAll = %lf | Ientr = %lf | Ihist = %lf\n", Icherenkovs, Iall, Ientr, Ihist);
582
            //~ printf("TF1 -> S/N = %lf || TH1F(e) -> S/N = %lf || TH1F(i) -> S/N = %lf\n", Rsn, Rsne, Rsnh);
583
            printf("S/N (vs. All) = %lf\n", Rsnh);
584
 
585
            if(draw_cuts) {
586
                sprintf(hname, "htdcdiff_cut");
587
                hp1dcut = DrTH1F(dir, hname, "");
588
                hp1dcut->Rebin(rebin_tdcs);
589
                hp1dcut->SetLineColor(kRed);
590
                hp1dcut->DrawClone("SAME");
591
 
592
                sprintf(hname, "htdcdiff_cut_2");
593
                hp1dcut = DrTH1F(dir, hname, "");
594
                hp1dcut->Rebin(rebin_tdcs);
595
                hp1dcut->SetLineColor(kGreen);
596
                hp1dcut->DrawClone("SAME");
597
            }
598
 
599
//~ #define USE_NOISE_FILE
600
 
601
#ifdef USE_NOISE_FILE
602
        //get ROOT file with histograms
603
        char fnameroot[1024];
604
        TFile * rootfile2;
605
        TDirectory *dir2;
606
 
607
        sprintf(fname, "run054");
608
        sprintf(fnameroot, "root/%s.root", fname);
609
        rootfile2 = (TFile *) gROOT->FindObject(fname);
610
        if(rootfile2==NULL) rootfile2 = new TFile(fnameroot);
611
        if(rootfile2==NULL) {
612
          printf("Cannot open root file 2 %s!!!\n",fnameroot);
613
          return;
614
        }
615
        dir2 = (TDirectory*) rootfile2;
616
 
617
        sprintf(hname, "htdcdiff");
618
        hp1dcut = DrTH1F(dir2, hname, "");
619
        hp1dcut->SetLineColor(kMagenta);
620
        hp1dcut->DrawClone("SAME");
621
 
622
        leg[legi]->AddEntry((TH1F*)hp1d->Clone(), "With source (30 min)", "L");
623
        leg[legi]->AddEntry((TH1F*)hp1dcut->Clone(), "W/o source (30 min)", "L");
624
        sprintf(fullname, "Fit FWHM = %.3lf ns", FWHMc);
625
        leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "L");
626
        leg[legi]->Draw();
627
#endif        
628
 
629
        sprintf(fullname, "gif/n_%s.gif", fname);  c[cc]->SaveAs(fullname);
630
 
631
        if(batch_q) gSystem->Exit(1);
632
    }
633
// -------------------------------------------------------------------  
634
 
635
        if( strchr(plopt, 'f') != NULL ) {
636
 
637
        DrSetDrawStyle(0.05);
638
 
639
        gStyle->SetOptStat("e");       
640
        //~ gStyle->SetOptFit(1);       
641
 
642
        gStyle->SetPadRightMargin(0.03);
643
        gStyle->SetPadTopMargin(0.05);
644
        gStyle->SetPadBottomMargin(0.12);
645
        gStyle->SetStatFontSize(0.05);
646
        gStyle->SetStatX(0.97);
647
        gStyle->SetStatY(0.95);
648
 
649
        c[++cc] = new TCanvas("f", "f", 0, 460, 720, 400);
650
                //~ c[cc]->Divide(2,2);
651
 
652
        int draw_cuts = 0;
653
        int rebin_tdcs = 1;
654
 
655
        double drawmin = -10;
656
        double drawmax = +10;
657
        //~ double fitmin = inmin;
658
        //~ double fitmax =  inmax;
659
        double fitmin = -10;
660
        double fitmax =  10;
661
        double fitcenter = 0.0;
662
        double HalfMax, MinHalfMax, MaxHalfMax, FWHM, FWHMc;
663
 
664
        int ccccdi = 0;
665
        int ich = 0;
666
 
667
        TF1 *f_fit;
668
        TF1 *f_integrate;
669
 
670
        TF1 *fc = new TF1("fc", "pol0(0)");
671
 
672
        TF1 *fcg = new TF1("fcg", "pol0(0)+gaus(1)"); fcg->SetNpx(300);
673
        fcg->SetParName(0,"Const"); fcg->SetParName(1,"G_Const");
674
        fcg->SetParName(2,"G_Mean" ); fcg->SetParName(3,"G_Sigma" );
675
 
676
        TF1 *fcgg = new TF1("fcgg", "pol0(0)+gaus(1)+gaus(4)"); fcgg->SetNpx(300);
677
        fcgg->SetParName(0,"Const");
678
        fcgg->SetParName(1,"G1_Const"); fcgg->SetParName(2,"G1_Mean" ); fcgg->SetParName(3,"G1_Sigma" );
679
        fcgg->SetParName(4,"G2_Const"); fcgg->SetParName(5,"G2_Mean" ); fcgg->SetParName(6,"G2_Sigma" );
680
 
681
        TF1 *fcggg = new TF1("fcggg", "pol0(0)+gaus(1)+gaus(4)+gaus(7)"); fcggg->SetNpx(300);
682
        fcggg->SetParName(0,"Const");
683
        fcggg->SetParName(1,"G1_Const"); fcggg->SetParName(2,"G1_Mean" ); fcggg->SetParName(3,"G1_Sigma" );
684
        fcggg->SetParName(4,"G2_Const"); fcggg->SetParName(5,"G2_Mean" ); fcggg->SetParName(6,"G2_Sigma" );
685
        fcggg->SetParName(7,"G3_Const"); fcggg->SetParName(8,"G3_Mean" ); fcggg->SetParName(9,"G3_Sigma" );
686
 
687
        //~ TF1 *f_nocrystal = new TF1("f_nocrystal", "[0]*exp(-0.5*((x-[1])/(sqrt(2)*[2]))**2)+[3]*exp(-0.5*((x-[4])/(sqrt(2)*[5]))**2)+[6]*exp(-1*((x-[7])**2)/(2*(([2])**2+([5])**2)))+[8]*exp(-1*(((x-[9])**2)/(2*(([2])**2+([5])**2))))+[10]");
688
                TF1 *f_nocrystal = new TF1("f_nocrystal", "[0]*([1]**2*TMath::Gaus(x,[2],sqrt(2)*[3],1)+(1-[1])**2*TMath::Gaus(x,[4],sqrt(2)*[5],1)+[1]*(1-[1])*TMath::Gaus(x,[6],sqrt([3]**2+[5]**2),1)+[1]*(1-[1])*TMath::Gaus(x,[7],sqrt([3]**2+[5]**2),1))+[8]");
689
                f_nocrystal->SetParName(0, "const");
690
        f_nocrystal->SetParName(1, "ratio");
691
        f_nocrystal->SetParName(2, "WW_mean");
692
                f_nocrystal->SetParName(3, "Window_sigma");
693
                f_nocrystal->SetParName(4, "MM_mean");
694
        f_nocrystal->SetParName(5, "MCP_sigma");
695
                f_nocrystal->SetParName(6, "WM1_mean");
696
        f_nocrystal->SetParName(7, "WM2_mean");
697
        f_nocrystal->SetParName(8, "Constant");
698
 
699
        //~ TF1 *f_crystal = new TF1("f_crystal", "[0]+[1]*([2]**2*(TMath::Gaus(x,[3],sqrt(2)*[4],1))+([5])**2*(TMath::Gaus(x,[6],sqrt(2)*[7],1))+(4*[5]/6)**2*(TMath::Gaus(x,[8],sqrt(2)*[9],1))+[2]*[5]*(TMath::Gaus(x,[10],sqrt([2]**2+[5]**2),1))+[5]*[2]*(TMath::Gaus(x,[11],sqrt([2]**2+[5]**2),1))+[2]*(4/6*[5])*(TMath::Gaus(x,[12],sqrt([2]**2+(4/6*[5])**2),1))+[2]*(4/6*[5])*(TMath::Gaus(x,[13],sqrt([2]**2+(4/6*[5])**2),1))+[5]*(4/6*[5])*(TMath::Gaus(x,[14],sqrt([5]**2+(4/6*[5])**2),1))+[5]*(4/6*[5])*(TMath::Gaus(x,[15],sqrt([5]**2+(4/6*[5])**2),1)))");
700
                TF1 *f_crystal = new TF1("f_crystal", "[0]+[1]*([2]**2*(TMath::Gaus(x,[3],sqrt(2)*[4],1))+([5])**2*(TMath::Gaus(x,[6],sqrt(2)*[7],1))+(4*[5]/6)**2*(TMath::Gaus(x,[8],sqrt(2)*[9],1))+[2]*[5]*(TMath::Gaus(x,[10],sqrt([4]**2+[7]**2),1))+[5]*[2]*(TMath::Gaus(x,[11],sqrt([4]**2+[7]**2),1))+[2]*(4/6*[5])*(TMath::Gaus(x,[12],sqrt([4]**2+[9]**2),1))+[2]*(4/6*[5])*(TMath::Gaus(x,[13],sqrt([4]**2+[9]**2),1))+[5]*(4/6*[5])*(TMath::Gaus(x,[14],sqrt([7]**2+[9]**2),1))+[5]*(4/6*[5])*(TMath::Gaus(x,[15],sqrt([7]**2+[9]**2),1)))");
701
                f_crystal->SetParName(0, "dark");
702
                f_crystal->SetParName(1, "const");
703
                f_crystal->SetParName(2, "Prob_Crystal");
704
                f_crystal->SetParName(3, "CC_mean");
705
                f_crystal->SetParName(4, "Crystal_sigma");
706
                f_crystal->SetParName(5, "Prob_window");
707
                f_crystal->SetParName(6, "WW_mean");
708
                f_crystal->SetParName(7, "WW_sigma");
709
                f_crystal->SetParName(8, "MM_mean");
710
                f_crystal->SetParName(9, "MM_sigma");
711
                f_crystal->SetParName(10, "CW1_mean");
712
                f_crystal->SetParName(11, "CW2_mean");
713
                f_crystal->SetParName(12, "CM1_mean");
714
                f_crystal->SetParName(13, "CM2_mean");
715
                f_crystal->SetParName(14, "WM1_mean");
716
                f_crystal->SetParName(15, "WM2_mean");
717
 
718
                //~ TF1 *f_crystal1 = new TF1("f_crystal1", "[0]+[1]*([2]**2*TMath::Gaus(x,[3],sqrt(2)*[4],1)+(1.-5./3*[2])**2*TMath::Gaus(x,[5],sqrt(2)*[6],1)+(4.*[2]/6.)**2*TMath::Gaus(x,[7],sqrt(2)*[8],1)+[2]*(1.-(5./3)*[2])*TMath::Gaus(x,[9],sqrt([4]**2+[6]**2),1)+(1.-(5./3)*[2])*[2]*TMath::Gaus(x,[10],sqrt([4]**2+[6]**2),1)+[2]*4./6.*[2]*TMath::Gaus(x,[11],sqrt([4]**2+[8]**2),1)+[2]*4/6.*[2]*TMath::Gaus(x,[12],sqrt([4]**2+[8]**2),1)+4./6*[2]*(1.-5./3*[2])*TMath::Gaus(x,[13],sqrt([6]**2+[8]**2),1)+(1.-5./3*[2])*4./6*[2]*TMath::Gaus(x,[14],sqrt([8]**2+[6]**2),1))");
719
                TF1 *f_crystal1 = new TF1("f_crystal1", "[0]+[1]*([2]**2*TMath::Gaus(x,[3],sqrt(2)*[4],1)+(1.-(1.+[15])*[2])**2*TMath::Gaus(x,[5],sqrt(2)*[6],1)+([15]*[2])**2*TMath::Gaus(x,[7],sqrt(2)*[8],1)+[16]**2*[2]*(1.-(1+[15])*[2])*TMath::Gaus(x,[9],sqrt([4]**2+[6]**2),1)+[16]**2*(1.-(1+[15])*[2])*[2]*TMath::Gaus(x,[10],sqrt([4]**2+[6]**2),1)+[2]*[15]*[2]*TMath::Gaus(x,[11],sqrt([4]**2+[8]**2),1)+[2]*[15]*[2]*TMath::Gaus(x,[12],sqrt([4]**2+[8]**2),1)+[15]*[2]*(1.-(1+[15])*[2])*TMath::Gaus(x,[13],sqrt([6]**2+[8]**2),1)+(1.-(1.+[15])*[2])*[15]*[2]*TMath::Gaus(x,[14],sqrt([8]**2+[6]**2),1))");
720
                f_crystal1->SetParName(0, "dark");
721
                f_crystal1->SetParName(1, "const");
722
                f_crystal1->SetParName(2, "Prob_Window");
723
                f_crystal1->SetParName(3, "WW_mean");
724
                f_crystal1->SetParName(4, "Window_sigma");
725
                f_crystal1->SetParName(5, "CC_mean");
726
                f_crystal1->SetParName(6, "Crystal_sigma");
727
                f_crystal1->SetParName(7, "MM_mean");
728
                f_crystal1->SetParName(8, "MCP_sigma");
729
                f_crystal1->SetParName(9, "CW1_mean");
730
                f_crystal1->SetParName(10, "CW2_mean");
731
                f_crystal1->SetParName(11, "WM1_mean");
732
                f_crystal1->SetParName(12, "WM2_mean");
733
                f_crystal1->SetParName(13, "CM1_mean");
734
                f_crystal1->SetParName(14, "CM2_mean");
735
                f_crystal1->SetParName(15, "ratio_mcp/window");
736
                f_crystal1->SetParName(16, "Sup._CW");
737
 
738
                double ratio_r=0;
739
 
740
                (c[cc]->cd(++ccccdi))->SetLogy(0);
741
            sprintf(hname, "htdcdiff_cut");
742
            hp1d = DrTH1F(dir, hname, "");
743
            //~ hp1d->Rebin(rebin_tdcs);
744
            hp1d->SetLineColor(kBlack);
745
            hp1d->GetXaxis()->SetRangeUser(drawmin,drawmax);
746
            hp1d->GetYaxis()->SetRangeUser(0.0,hp1d->GetMaximum()*1.1);
747
            sprintf(fullname, ";Coincidence Time [ns];Counts");
748
            hp1d->SetTitle(fullname);
749
 
750
            if( strcmp(fitopt, "cgg")==0 ) {
751
                                f_fit = fcgg;
752
                                f_fit->SetParameters(hp1d->GetMaximum()*0.1,
753
                                                                        hp1d->GetMaximum()*0.4, 0, 0.8,
754
                                                                        hp1d->GetMaximum()*0.5, 0, 0.05);
755
                                f_fit->SetParLimits(0, 0, hp1d->GetMaximum());
756
                                f_fit->SetParLimits(1, 0, hp1d->GetMaximum());
757
                                f_fit->SetParLimits(2, fitmin,fitmax);
758
                                f_fit->SetParLimits(3, 0.05, 1);
759
                                f_fit->SetParLimits(4, 0, hp1d->GetMaximum());
760
                                f_fit->SetParLimits(5, fitmin,fitmax);
761
                                f_fit->SetParLimits(6, 0.01, 1);
762
            } else if(strcmp(fitopt, "cggg")==0) {
763
                                f_fit = fcggg;
764
                                f_fit->SetParameters(hp1d->GetMaximum()*0.1,
765
                                                                        hp1d->GetMaximum()*0.4, 0, 0.4,
766
                                                                        hp1d->GetMaximum()*0.4, 0, 0.2,
767
                                                                        hp1d->GetMaximum()*0.1, 0, 0.05);
768
                                f_fit->SetParLimits(0, 0, hp1d->GetMaximum());
769
                                f_fit->SetParLimits(1, 0, hp1d->GetMaximum());
770
                                f_fit->SetParLimits(2, fitmin,fitmax);
771
                                f_fit->SetParLimits(3, 0.01, 1);
772
                                f_fit->SetParLimits(4, 0, hp1d->GetMaximum());
773
                                f_fit->SetParLimits(5, fitmin,fitmax);
774
                                f_fit->SetParLimits(6, 0.05, 1);
775
                                f_fit->SetParLimits(7, 0, hp1d->GetMaximum());
776
                                f_fit->SetParLimits(8, fitmin,fitmax);
777
                                f_fit->SetParLimits(9, 0.2, 1);
778
                        } else if(strcmp(fitopt, "nocrystal")==0)
779
                        {                               f_fit = f_nocrystal;
780
 
781
                                //~ f_fit->SetParameters(4000,0.87,0.03,0.03,0.28,0.1,200,200,0.01);
782
                                f_fit->SetParameters(200,0.8,0.0,0.03,0.0,0.1,-0.13,0.13,10.16);
783
                                f_fit->SetParLimits(0,0,10000);
784
                                f_fit->SetParLimits(1,0,1);
785
                                f_fit->SetParLimits(2,-0.02,0.02);
786
                                f_fit->SetParLimits(3,0.01,0.3);
787
                                f_fit->SetParLimits(4,-0.02,0.02);
788
                                f_fit->SetParLimits(5,0,0.8);
789
                                f_fit->SetParLimits(6,-0.5,0.0);
790
                                f_fit->SetParLimits(7,0.0,0.5);
791
                                f_fit->SetParLimits(8,0.00,9000.5);
792
                                //~ f_fit->FixParameter(6, 100);
793
                                //~ f_fit->FixParameter(7, 100);
794
                                //~ 
795
 
796
                        } else if(strcmp(fitopt, "crystal")==0)
797
            {
798
                                f_fit = f_crystal;
799
                                //~ f_fit->SetParameters(0.1,300,0.8,0,0.07,0.01,0,0.028,0,0.15,0,0,-0.2,0.2,-0.2,0.2);
800
                                f_fit->SetParameter(0, 0.1);
801
                                f_fit->SetParameter(1, 300);
802
                                f_fit->SetParameter(2, 0.8);
803
                                f_fit->SetParameter(3, 0.);
804
                                f_fit->SetParameter(4, 0.07);
805
                                f_fit->SetParameter(5, 0.01);
806
                                f_fit->SetParameter(6, 0.0);
807
                                f_fit->SetParameter(7, 0.028);
808
                                f_fit->SetParameter(8, 0.0);
809
                                f_fit->SetParameter(9, 0.15);
810
                                f_fit->SetParameter(10, 0.0);
811
                                f_fit->SetParameter(11, 0.0);
812
                                f_fit->SetParameter(12, -0.2);
813
                                f_fit->SetParameter(13, 0.2);
814
                                f_fit->SetParameter(14, -0.2);
815
                                f_fit->SetParameter(15, 0.2);
816
                                f_fit->SetParameter(15, 0.2);
817
 
818
                                f_fit->SetParLimits(0, 0, 10);
819
                                f_fit->SetParLimits(1, 0, 1000);
820
                                f_fit->SetParLimits(2, 0, 1);
821
                                f_fit->SetParLimits(3, -0.02, 0.02); f_fit->SetParLimits(4, 0, 0.3);
822
                                f_fit->SetParLimits(5, 0, 1); f_fit->SetParLimits(6, -0.02, 0.02);
823
                                f_fit->SetParLimits(7, 0, 0.035);
824
                                f_fit->SetParLimits(8, -0.02, 0.02);
825
                                f_fit->SetParLimits(9, 0, 0.2);
826
                                f_fit->SetParLimits(10, -0.02, 0.02);
827
                                f_fit->SetParLimits(11, -0.02, 0.02);
828
                                f_fit->SetParLimits(12, -0.04, 0);
829
                                f_fit->SetParLimits(13, 0, 0.04);
830
                                f_fit->SetParLimits(14, -0.04, 0);
831
                                f_fit->SetParLimits(15, 0, 0.04);
832
 
833
                        } else if(strcmp(fitopt, "crystal1")==0)
834
            {
835
                                f_fit = f_crystal1;
836
                                //~ f_fit->SetParameters(0.1,300,0.8,0,0.07,0.01,0,0.028,0,0.15,0,0,-0.2,0.2,-0.2,0.2);
837
                                f_fit->SetParameter(0, 100.1);
838
                                f_fit->SetParameter(1, 1);
839
                                f_fit->SetParameter(2, 0.2); //prob. window
840
                                f_fit->SetParameter(3, 0.0);
841
                                f_fit->SetParameter(4, 0.02);  // window sigma
842
                                f_fit->SetParameter(5, 0.0);
843
                                f_fit->SetParameter(6, 120/3.3/1000); //crystal sigma
844
                                f_fit->SetParameter(7, 0.0);
845
                                f_fit->SetParameter(8, 0.15);  // mcp sigma
846
                                f_fit->SetParameter(9, -0.1825); //cw
847
                                f_fit->SetParameter(10, 0.1825);
848
                                f_fit->SetParameter(11, -0.2);  //wm
849
                                f_fit->SetParameter(12, 0.2);
850
                                f_fit->SetParameter(13, -0.3);  //cm
851
                                f_fit->SetParameter(14, 0.3);
852
                                f_fit->SetParameter(15, 1/0.6795 -1.);
853
                                f_fit->SetParameter(16, 0.1);
854
                                f_fit->SetParameter(1, hp1d->GetMaximum()/(f_fit->Eval(0)-f_fit->GetParameter(0)));
855
 
856
 
857
                                f_fit->SetParLimits(0, 0, 400);
858
                                f_fit->SetParLimits(1, 0, 100000);
859
                                f_fit->SetParLimits(2, 0, 1.);
860
                                f_fit->SetParLimits(3, -0.025, 0.025);
861
                                f_fit->SetParLimits(4, 0.02, 0.08);
862
                                f_fit->SetParLimits(5, -0.025, 0.025);
863
                                f_fit->SetParLimits(6, 0.01, 0.2);
864
                                f_fit->SetParLimits(7, -0.025, 0.025);
865
                                f_fit->SetParLimits(8, 0, 0.5);
866
                                f_fit->SetParLimits(9, -0.6, 0.02);
867
                                f_fit->SetParLimits(10, -0.02, 0.6);
868
                                f_fit->SetParLimits(11, -0.3, -0.1);
869
                                f_fit->SetParLimits(12, 0.1, 0.3);
870
                                f_fit->SetParLimits(13, -0.7, -0.1);
871
                                f_fit->SetParLimits(14, 0.1, 0.7);
872
                                f_fit->SetParLimits(15, 0, 0.999);
873
                                f_fit->SetParLimits(16, 0, 1);
874
                                f_fit->FixParameter(4,0.02668);
875
                                //~ f_fit->FixParameter(6,0.048);
876
                                f_fit->FixParameter(8,0.0877);
877
                                f_fit->FixParameter(11,-0.19);
878
                                f_fit->FixParameter(12,0.19);
879
                                //~ 
880
                                ratio_r = 1/0.6795 -1.;
881
                                //~ ratio_r = 1/0.8089 -1.;
882
                                f_fit->FixParameter(15,ratio_r);
883
                                //~ f_fit->FixParameter(16,1);
884
                                //~ f_fit->FixParameter(2,0.52);
885
                                //~ f_fit->FixParameter(6,170/3.3/1000);
886
                                //~ f_fit->FixParameter(3,0);
887
                                //~ f_fit->FixParameter(5,0);
888
                                //~ f_fit->FixParameter(7,0);
889
 
890
                                //~ cout<<"hogeeeeeeeeeeee   "<<f_fit->GetParameter(1)*((1.-5./3.*(f_fit->GetParameter(2)))*(4./6.*(f_fit->GetParameter(2))))<<endl;
891
                        }
892
            //~ f_fit->SetRange(fitmin,fitmax);
893
            f_fit->SetRange(-10,10);
894
            f_fit->SetLineWidth(1); f_fit->SetLineStyle(2);
895
            f_fit->SetNpx(300);
896
            //~ hp1d->Fit(f_fit, "QWW", "", fitmin,fitmax);
897
                           //~ hp1d->Fit(f_fit, "ILM+", "", -0.4,0.4);
898
                           //~ 
899
                        hp1d->Fit(f_fit, "LM+", "", -.5,.5);
900
            //~ hp1d->Draw();
901
            //~ f_fit->Draw("same"); //f_fit->SetLineColor(6);
902
 
903
            f_fit->SetLineColor(1);
904
            hp1d->GetXaxis()->SetRangeUser(-1.5,2);
905
 
906
            gStyle->SetOptFit(1111);
907
                        double wmsigma = sqrt(f_fit->GetParameter(3)**2 + f_fit->GetParameter(5)**2);
908
 
909
            double cm1sigma = sqrt(f_fit->GetParameter(6)**2 + f_fit->GetParameter(8)**2);
910
            double wm1sigma = sqrt(f_fit->GetParameter(4)**2 + f_fit->GetParameter(8)**2);
911
            double cw1sigma = sqrt(f_fit->GetParameter(6)**2 + f_fit->GetParameter(4)**2);
912
 
913
 
914
            //kobayashi
915
            TPaveStats* st1 = (TPaveStats*) hp1d->FindObject("stats");
916
            st1->SetX1NDC(0.63); st1->SetX2NDC(0.99);
917
            st1->SetY1NDC(0.24); st1->SetY2NDC(0.99);
918
 
919
            double pw = f_fit->GetParameter(2);
920
            double pm = f_fit->GetParameter(15)*f_fit->GetParameter(2);
921
            double pc = 1-pw - pm;
922
 
923
            double rate = pw**2 + pm**2 + 2*pw*pm;
924
            double sumrate = pw**2+pm**2+pc**2+2*pw*pm+2*pm*pc+2*pc*pw*f_fit->GetParameter(16)**2;
925
 
926
            cout<<"pw = "<<pw<<" pm = "<<pm<<" pc = "<<pc<<endl;
927
            cout<<"rate = "<<rate<<" sumrate = "<<sumrate<<" rate/sumrate = "<<rate/sumrate<<endl;
928
            cout<<" FWHM_sim = "<<f_fit->GetParameter(6)*sqrt(2)*2.35<<endl;
929
 
930
            if(strcmp(fitopt, "nocrystal")==0)
931
                        {      
932
                                //~ TF1 *fg_WW = new TF1("fg_WW","[0]*exp(-(x-[1])**2/2/([3]**2))/sqrt(2*3.141592*[2]*[2])");
933
                                //~ TF1 *fg_MM = new TF1("fg_MM","[0]*exp(-(x-[1])**2/2/([3]**2))/sqrt(2*3.141592*[2]*[2])");
934
                                //~ TF1 *fg_WM1 = new TF1("fg_WM1","[0]*exp(-(x-[1])**2/2/([3]**2))/sqrt(2*3.141592*[2]*[2])");
935
                                //~ TF1 *fg_WM2 = new TF1("fg_WM2","[0]*exp(-(x-[1])**2/2/([3]**2))/sqrt(2*3.141592*[2]*[2])");
936
                                TF1 *fg_WW = new TF1("fg_WW","[0]*TMath::Gaus(x,[1],[2],1)");fg_WW->SetNpx(300);
937
                                TF1 *fg_MM = new TF1("fg_MM","[0]*TMath::Gaus(x,[1],[2],1)");fg_MM->SetNpx(300);
938
                                TF1 *fg_WM1 = new TF1("fg_WM1","[0]*TMath::Gaus(x,[1],[2],1)"); fg_WM1->SetNpx(300);
939
                                TF1 *fg_WM2 = new TF1("fg_WM2","[0]*TMath::Gaus(x,[1],[2],1)"); fg_WM2->SetNpx(300);
940
                                fg_WW -> SetParameters(f_fit->GetParameter(1)**2*f_fit->GetParameter(0),f_fit->GetParameter(2),sqrt(2)*f_fit->GetParameter(3));
941
                                fg_MM -> SetParameters((1-f_fit->GetParameter(1))**2*f_fit->GetParameter(0),f_fit->GetParameter(4),sqrt(2)*f_fit->GetParameter(5));
942
                                fg_WM1 -> SetParameters(f_fit->GetParameter(0)*(1-f_fit->GetParameter(1))*f_fit->GetParameter(1),f_fit->GetParameter(6),wmsigma);
943
                                fg_WM2 -> SetParameters(f_fit->GetParameter(0)*(1-f_fit->GetParameter(1))*f_fit->GetParameter(1),f_fit->GetParameter(7),wmsigma);
944
 
945
                                fg_WW->Draw("sames"); fg_WW->SetLineColor(kYellow+1); fg_WW->SetRange(-10,10);
946
                                fg_MM->Draw("sames"); fg_MM->SetLineColor(kMagenta-7); fg_MM->SetRange(-10,10);
947
                                fg_WM1->Draw("sames"); fg_WM1->SetLineColor(kRed-4); fg_WM1->SetRange(-10,10);
948
                                fg_WM2->Draw("sames"); fg_WM2->SetLineColor(kRed-4); fg_WM2->SetRange(-10,10);
949
 
950
                                double integ_WW, integ_MM, integ_WM1, integ_WM2;
951
                                integ_WW = fg_WW->Integral(-4,4);
952
                        }
953
                        if(strcmp(fitopt, "crystal1")==0)
954
                        {
955
                                TF1 *fg_CC = new TF1("fg_CC","[0]*TMath::Gaus(x,[1],[2],1)"); fg_CC->SetNpx(300);
956
                                TF1 *fg_WW = new TF1("fg_WW","[0]*TMath::Gaus(x,[1],[2],1)"); fg_WW->SetNpx(300);
957
                                TF1 *fg_MM = new TF1("fg_MM","[0]*TMath::Gaus(x,[1],[2],1)"); fg_MM->SetNpx(300);
958
                                TF1 *fg_WM1 = new TF1("fg_WM1","[0]*TMath::Gaus(x,[1],[2],1)"); fg_WM1->SetNpx(300);
959
                                TF1 *fg_WM2 = new TF1("fg_WM2","[0]*TMath::Gaus(x,[1],[2],1)"); fg_WM2->SetNpx(300);
960
                                TF1 *fg_CW1 = new TF1("fg_CW1","[0]*TMath::Gaus(x,[1],[2],1)"); fg_CW1->SetNpx(300);
961
                                TF1 *fg_CW2 = new TF1("fg_CW2","[0]*TMath::Gaus(x,[1],[2],1)"); fg_CW2->SetNpx(300);
962
                                TF1 *fg_CM1 = new TF1("fg_CM1","[0]*TMath::Gaus(x,[1],[2],1)"); fg_CM1->SetNpx(300);
963
                                TF1 *fg_CM2 = new TF1("fg_CM2","[0]*TMath::Gaus(x,[1],[2],1)"); fg_CM2->SetNpx(300);
964
 
965
 
966
                        //      normalize
967
                                fg_CC -> SetParameters((1.-(1+f_fit->GetParameter(15))*f_fit->GetParameter(2))**2*f_fit->GetParameter(1),f_fit->GetParameter(5),sqrt(2)*f_fit->GetParameter(6));
968
                                fg_WW -> SetParameters(f_fit->GetParameter(2)**2*f_fit->GetParameter(1),f_fit->GetParameter(3),sqrt(2)*f_fit->GetParameter(4));
969
                                fg_MM -> SetParameters((f_fit->GetParameter(15)*f_fit->GetParameter(2))**2*f_fit->GetParameter(1),f_fit->GetParameter(7),sqrt(2)*f_fit->GetParameter(8));
970
                                fg_WM1 -> SetParameters(f_fit->GetParameter(1)*(f_fit->GetParameter(15)*f_fit->GetParameter(2))*f_fit->GetParameter(2),f_fit->GetParameter(11),wm1sigma);
971
                                fg_WM2 -> SetParameters(f_fit->GetParameter(1)*(f_fit->GetParameter(15)*f_fit->GetParameter(2))*f_fit->GetParameter(2),f_fit->GetParameter(12),wm1sigma);
972
                                fg_CW1 -> SetParameters(f_fit->GetParameter(1)*f_fit->GetParameter(16)*(1.-(1+f_fit->GetParameter(15))*f_fit->GetParameter(2))*f_fit->GetParameter(2),f_fit->GetParameter(9),cw1sigma);
973
                                fg_CW2 -> SetParameters(f_fit->GetParameter(1)*f_fit->GetParameter(16)*(1.-(1+f_fit->GetParameter(15))*f_fit->GetParameter(2))*f_fit->GetParameter(2),f_fit->GetParameter(10),cw1sigma);
974
                                fg_CM1 -> SetParameters(f_fit->GetParameter(1)*(ratio_r*f_fit->GetParameter(2))*(1.-(1+f_fit->GetParameter(15))*f_fit->GetParameter(2)),f_fit->GetParameter(13),cm1sigma);
975
                                fg_CM2 -> SetParameters(f_fit->GetParameter(1)*(ratio_r*f_fit->GetParameter(2))*(1.-(1+f_fit->GetParameter(15))*f_fit->GetParameter(2)),f_fit->GetParameter(14),cm1sigma);
976
 
977
                                //non normalize
978
                                //~ fg_CC -> SetParameters((1.-5./3.*f_fit->GetParameter(2))**2*f_fit->GetParameter(1),f_fit->GetParameter(5),sqrt(2)*f_fit->GetParameter(6));
979
                                //~ fg_WW -> SetParameters(f_fit->GetParameter(2)**2*f_fit->GetParameter(1),f_fit->GetParameter(3),sqrt(2)*f_fit->GetParameter(4));
980
                                //~ fg_MM -> SetParameters((4./6.*f_fit->GetParameter(2))**2*f_fit->GetParameter(1),f_fit->GetParameter(7),sqrt(2)*f_fit->GetParameter(8));
981
                                //~ fg_WM1 -> SetParameters(f_fit->GetParameter(1)*(4./6.*f_fit->GetParameter(2))*f_fit->GetParameter(2),f_fit->GetParameter(11),wm1sigma);
982
                                //~ fg_WM2 -> SetParameters(f_fit->GetParameter(1)*(4./6.*f_fit->GetParameter(2))*f_fit->GetParameter(2),f_fit->GetParameter(12),wm1sigma);
983
                                //~ fg_CW1 -> SetParameters(f_fit->GetParameter(1)*(1.-5./3*f_fit->GetParameter(2))*f_fit->GetParameter(2),f_fit->GetParameter(9),cw1sigma);
984
                                //~ fg_CW2 -> SetParameters(f_fit->GetParameter(1)*(1.-5./3*f_fit->GetParameter(2))*f_fit->GetParameter(2),f_fit->GetParameter(10),cw1sigma);
985
                                //~ fg_CM1 -> SetParameters(f_fit->GetParameter(1)*(4./6.*f_fit->GetParameter(2))*(1.-5./3*f_fit->GetParameter(2)),f_fit->GetParameter(13),cm1sigma);
986
                                //~ fg_CM2 -> SetParameters(f_fit->GetParameter(1)*(4./6.*f_fit->GetParameter(2))*(1.-5./3*f_fit->GetParameter(2)),f_fit->GetParameter(14),cm1sigma);
987
 
988
 
989
                                fg_CC->Draw("sames"); fg_CC->SetLineColor(kCyan-5); fg_CC->SetRange(-10,10);
990
                                fg_WW->Draw("sames"); fg_WW->SetLineColor(kYellow+1); fg_WW->SetRange(-10,10);
991
                                fg_MM->Draw("sames"); fg_MM->SetLineColor(kMagenta-7); fg_MM->SetRange(-10,10);
992
                                fg_CW1->Draw("sames"); fg_CW1->SetLineColor(kGreen+2); fg_CW1->SetRange(-10,10);
993
                                fg_CW2->Draw("sames"); fg_CW2->SetLineColor(kGreen+2); fg_CW2->SetRange(-10,10);
994
                                fg_WM1->Draw("sames"); fg_WM1->SetLineColor(kRed-4); fg_WM1->SetRange(-10,10);
995
                                fg_WM2->Draw("sames"); fg_WM2->SetLineColor(kRed-4); fg_WM2->SetRange(-10,10);
996
                                fg_CM1->Draw("sames"); fg_CM1->SetLineColor(kBlue+2); fg_CM1->SetRange(-10,10);
997
                                fg_CM2->Draw("sames"); fg_CM2->SetLineColor(kBlue+2); fg_CM2->SetRange(-10,10);
998
                        }
999
 
1000
            HalfMax = f_fit->GetMaximum(fitmin, fitmax)/2.0;
1001
            MinHalfMax = f_fit->GetX(HalfMax, fitmin, fitcenter);
1002
            MaxHalfMax = f_fit->GetX(HalfMax, fitcenter, fitmax);
1003
            FWHM = MaxHalfMax - MinHalfMax;
1004
 
1005
            HalfMax = (f_fit->GetMaximum(fitmin, fitmax) + f_fit->GetParameter(0))/2.0;
1006
            MinHalfMax = f_fit->GetX(HalfMax, fitmin, f_fit->GetMaximumX(fitmin, fitmax));
1007
            MaxHalfMax = f_fit->GetX(HalfMax, f_fit->GetMaximumX(fitmin, fitmax), fitmax);
1008
            FWHMc = MaxHalfMax - MinHalfMax;
1009
 
1010
            printf("(f) HalfMax = %.3lf ns | MinHalfMax = %.3lf ns | MaxHalfMax = %.3lf ns\n", HalfMax, MinHalfMax, MaxHalfMax);
1011
            printf("(f) FWHM (peak only) = %.3lf ns\n", FWHMc);
1012
 
1013
            f_integrate = fgg;
1014
            for(int i=0; i<6; i++) f_integrate->SetParameter(i, f_fit->GetParameter(i+1));
1015
            //~ for(int i=0; i<9; i++) f_integrate->SetParameter(i, f_fit->GetParameter(i+1));
1016
            //~ fgg->SetRange(drawmin, drawmax); fgg->SetNpx(300); fgg->SetLineColor(kBlue); fgg->SetLineWidth(1); fgg->DrawClone("LSAME");
1017
            double Icherenkovs = f_integrate->Integral(drawmin, drawmax)/hp1d->GetBinWidth(1);
1018
 
1019
            double Iall = f_fit->Integral(fitmin, fitmax)/hp1d->GetBinWidth(1);
1020
            double Rsn = Icherenkovs/(Iall-Icherenkovs);
1021
 
1022
            //~ double Ientr = hp1d->GetEntries()*hp1d->GetBinWidth(1);
1023
            double Ientr = hp1d->GetEntries();
1024
            double Rsne = Icherenkovs/(Ientr-Icherenkovs);
1025
 
1026
            //~ double Ihist = hp1d->Integral(1, hp1d->GetNbinsX()-1)*hp1d->GetBinWidth(1);
1027
            double Ihist = hp1d->Integral(1, hp1d->GetNbinsX()-1);
1028
            double Rsnh = Icherenkovs/(Ihist-Icherenkovs);
1029
 
1030
            double Icherenkovs_10ns = f_integrate->Integral(-10, 10)/hp1d->GetBinWidth(1);
1031
            fc->SetParameter(0, f_fit->GetParameter(0));
1032
            double Inoise_10ns = fc->Integral(-10, 10)/hp1d->GetBinWidth(1);
1033
            double R10ns = Icherenkovs_10ns/Inoise_10ns;
1034
 
1035
            double Icherenkovs_4ns = f_integrate->Integral(-4, 4)/hp1d->GetBinWidth(1);
1036
            fc->SetParameter(0, f_fit->GetParameter(0));
1037
            double Inoise_4ns = fc->Integral(-4, 4)/hp1d->GetBinWidth(1);
1038
            double R4ns = Icherenkovs_4ns/Inoise_4ns;
1039
 
1040
            double Icherenkovs_2ns = f_integrate->Integral(-2, 2)/hp1d->GetBinWidth(1);
1041
            fc->SetParameter(0, f_fit->GetParameter(0));
1042
            double Inoise_2ns = fc->Integral(-2, 2)/hp1d->GetBinWidth(1);
1043
            double R2ns = Icherenkovs_2ns/Inoise_2ns;
1044
 
1045
            //~ printf("ICherenkov = %lf | IAll = %lf | Ientr = %lf | Ihist = %lf\n", Icherenkovs, Iall, Ientr, Ihist);
1046
            printf("Icherenkovs_4ns = %.0lf\n", Icherenkovs_4ns);
1047
            //~ printf("TF1 -> S/N = %lf || TH1F(e) -> S/N = %lf || TH1F(i) -> S/N = %lf\n", Rsn, Rsne, Rsnh);
1048
            //~ printf("S/N (All) = %lf\n", Rsnh);
1049
            printf("S/N (10ns) = %.2lf\n", R10ns);
1050
            printf("S/N (4 ns) = %.2lf\n", R4ns);
1051
            printf("S/N (2 ns) = %.2lf\n", R2ns);
1052
 
1053
            leg[++legi] = new TLegend(0.12,0.4,0.43,0.925);
1054
            leg[legi]->SetFillColor(0); leg[legi]->SetBorderSize(1); leg[legi]->SetTextSize(0.05); leg[legi]->SetTextAlign(12);
1055
 
1056
            sprintf(fullname, "FWHM_fit = %.0lf ps", 1000*FWHMc);
1057
            //~ leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "L");
1058
            leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1059
 
1060
            sprintf(fullname, "FWHM_c = %.0lf ps", 1000*f_fit->GetParameter(6)*2.35*sqrt(2));
1061
            leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1062
 
1063
            //~ sprintf(fullname, "S/N (#pm10ns) = %.1lf", R10ns);
1064
            //~ leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1065
            //~ sprintf(fullname, "S/N (#pm 4ns) = %.1lf", R4ns);
1066
            //~ leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1067
            //~ sprintf(fullname, "S/N (#pm 2ns) = %.1lf", R2ns);
1068
            //~ leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1069
 
1070
            //kobayashi
1071
            sprintf(fullname, "R_w = %.2f" , pw);
1072
            leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1073
            sprintf(fullname, "R_m = %.2f" , pm);
1074
            leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1075
            sprintf(fullname, "R_c = %.2f" , pc);
1076
            leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1077
            sprintf(fullname, "R_w&m = %.2f" , rate);
1078
            leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1079
            sprintf(fullname, "R_sum = %.2f" , sumrate);
1080
            leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1081
            sprintf(fullname, "R_w&m/sum = %.2f" , rate/sumrate);
1082
            leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1083
 
1084
 
1085
            leg[legi]->Draw();
1086
 
1087
            if(draw_cuts) {
1088
                sprintf(hname, "htdcdiff_cut");
1089
                hp1dcut = DrTH1F(dir, hname, "");
1090
                hp1dcut->Rebin(rebin_tdcs);
1091
                hp1dcut->SetLineColor(kRed);
1092
                hp1dcut->DrawClone("SAME");
1093
 
1094
                sprintf(hname, "htdcdiff_cut_2");
1095
                hp1dcut = DrTH1F(dir, hname, "");
1096
                hp1dcut->Rebin(rebin_tdcs);
1097
                hp1dcut->SetLineColor(kGreen);
1098
                hp1dcut->DrawClone("SAME");
1099
            }
1100
 
1101
        sprintf(fullname, "gif/f_%s.gif", fname);  c[cc]->SaveAs(fullname);
1102
        sprintf(fullname, "eps/f_%s.eps", fname);  c[cc]->SaveAs(fullname);
1103
                cout<< "maximum x value = " << hp1d->GetXaxis()->GetBinCenter( hp1d->GetMaximumBin())<<endl;
1104
        if(batch_q) gSystem->Exit(1);
1105
    }
1106
 
1107
// -------------------------------------------------------------------  
1108
 
1109
    if( strchr(plopt, 'd') != NULL ) {
1110
 
1111
        DrSetDrawStyle(0.05);
1112
 
1113
        gStyle->SetOptStat("e");       
1114
        //~ gStyle->SetOptStat(0);      
1115
        gStyle->SetOptFit(1);  
1116
        //~ gStyle->SetOptFit(0);       
1117
 
1118
        gStyle->SetPadRightMargin(0.03);
1119
        gStyle->SetPadTopMargin(0.05);
1120
        gStyle->SetPadBottomMargin(0.12);
1121
        gStyle->SetStatFontSize(0.05);
1122
        gStyle->SetStatX(0.97);
1123
        gStyle->SetStatY(0.95);
1124
 
1125
        c[++cc] = new TCanvas("d", "d", 0, 0, 720, 400);
1126
                //~ c[cc]->Divide(2,2);
1127
 
1128
        int draw_cuts = 0;
1129
        int rebin_tdcs = 1;
1130
 
1131
        double drawmin = -10;
1132
        double drawmax = +10;
1133
        //~ double fitmin = inmin;
1134
        //~ double fitmax =  inmax;
1135
        double fitmin = -10;
1136
        double fitmax =  10;
1137
                double fitcenter = 0.0;
1138
        double HalfMax, MinHalfMax, MaxHalfMax, FWHM, FWHMc;
1139
 
1140
        int ccccdi = 0;
1141
        int ich = 0;
1142
 
1143
        TF1 *f_fit;
1144
        TF1 *f_integrate;
1145
 
1146
        TF1 *fc = new TF1("fc", "pol0(0)");
1147
 
1148
        TF1 *fcg = new TF1("fcg", "pol0(0)+gaus(1)"); fcg->SetNpx(300);
1149
        fcg->SetParName(0,"Const"); fcg->SetParName(1,"G_Const");
1150
        fcg->SetParName(2,"G_Mean" ); fcg->SetParName(3,"G_Sigma" );
1151
 
1152
        TF1 *fcgg = new TF1("fcgg", "pol0(0)+gaus(1)+gaus(4)"); fcgg->SetNpx(300);
1153
        fcgg->SetParName(0,"Const");
1154
        fcgg->SetParName(1,"G1_Const"); fcgg->SetParName(2,"G1_Mean" ); fcgg->SetParName(3,"G1_Sigma" );
1155
        fcgg->SetParName(4,"G2_Const"); fcgg->SetParName(5,"G2_Mean" ); fcgg->SetParName(6,"G2_Sigma" );
1156
 
1157
        TF1 *fcggg = new TF1("fcggg", "pol0(0)+gaus(1)+gaus(4)+gaus(7)"); fcggg->SetNpx(300);
1158
        fcggg->SetParName(0,"Const");
1159
        fcggg->SetParName(1,"G1_Const"); fcggg->SetParName(2,"G1_Mean" ); fcggg->SetParName(3,"G1_Sigma" );
1160
        fcggg->SetParName(4,"G2_Const"); fcggg->SetParName(5,"G2_Mean" ); fcggg->SetParName(6,"G2_Sigma" );
1161
        fcggg->SetParName(7,"G3_Const"); fcggg->SetParName(8,"G3_Mean" ); fcggg->SetParName(9,"G3_Sigma" );
1162
 
1163
                (c[cc]->cd(++ccccdi))->SetLogy(0);
1164
            //~ sprintf(hname, "htdcdiff");
1165
            sprintf(hname, "htdcdiff_cut");
1166
            hp1d = DrTH1F(dir, hname, "");
1167
            //~ hp1d->Rebin(rebin_tdcs);
1168
            hp1d->SetLineColor(kBlack);
1169
            hp1d->GetXaxis()->SetRangeUser(drawmin,drawmax);
1170
            hp1d->GetYaxis()->SetRangeUser(0.0,hp1d->GetMaximum()*1.1);
1171
            //~ hp1d->GetYaxis()->SetRangeUser(0.0,hp1d->GetMaximum()*2);
1172
            sprintf(fullname, ";Coincidence Time [ns];Counts");
1173
            hp1d->SetTitle(fullname);
1174
 
1175
                                //kobayashi
1176
                                //~ fitmin = hp1d->GetXaxis()->GetBinCenter(hp1d->GetMaximumBin()) - hp1d->GetRMS()/15;
1177
                                //~ fitmax = hp1d->GetXaxis()->GetBinCenter(hp1d->GetMaximumBin()) + hp1d->GetRMS()/15;
1178
 
1179
            //~ if( strcmp(fname, "run000")==0 ) {
1180
                //~ f_fit = fcg;
1181
                //~ f_fit->SetParameters(hp1d->GetMaximum()*0.1, 
1182
                                    //~ hp1d->GetMaximum()*0.9, 0, 0.05);
1183
            //~ } else  if( strcmp(fname, "run061")==0 ||
1184
                        //~ strcmp(fname, "run062")==0 ||
1185
                        //~ strcmp(fname, "run063")==0 ||
1186
                        //~ strcmp(fname, "run064")==0 ||
1187
                        //~ strcmp(fname, "run065")==0) {
1188
                //~ f_fit = fcgg;
1189
                //~ f_fit->SetParameters(hp1d->GetMaximum()*0.1, 
1190
                                    //~ hp1d->GetMaximum()*0.5, 0, 0.05,
1191
                                    //~ hp1d->GetMaximum()*0.4, 0, 0.5);
1192
            //~ } else {
1193
                //~ f_fit = fcgg;
1194
                //~ f_fit->SetParameters(hp1d->GetMaximum()*0.25, 
1195
                                    //~ hp1d->GetMaximum()*0.7, 0, 0.4,
1196
                                    //~ hp1d->GetMaximum()*0.05, 0, 0.05);
1197
                //~ f_fit->SetParLimits(0, 0, hp1d->GetMaximum());
1198
                //~ f_fit->SetParLimits(1, 0, hp1d->GetMaximum());
1199
                //~ f_fit->SetParLimits(2, fitmin,fitmax);
1200
                //~ f_fit->SetParLimits(3, 0.2, 1);
1201
                //~ f_fit->SetParLimits(4, 0, hp1d->GetMaximum());
1202
                //~ f_fit->SetParLimits(5, fitmin,fitmax);
1203
                //~ if( strcmp(fname, "run059")==0 ||
1204
                    //~ strcmp(fname, "run060")==0)
1205
                    //~ f_fit->SetParLimits(6, 0.02, 0.3);
1206
                //~ else
1207
                    //~ f_fit->SetParLimits(6, 0.02, 0.2);
1208
                    //~ 
1209
            //~ }
1210
 
1211
            if( strcmp(fitopt, "cgg")==0 ) {
1212
                                f_fit = fcgg;
1213
                                f_fit->SetParameters(hp1d->GetMaximum()*0.1,
1214
                                                                        hp1d->GetMaximum()*0.4, 0, 0.9,
1215
                                                                        hp1d->GetMaximum()*0.5, 0, 0.05);
1216
                                f_fit->SetParLimits(0, 0, hp1d->GetMaximum());
1217
                                f_fit->SetParLimits(1, hp1d->GetMaximum()*0.01, hp1d->GetMaximum());
1218
                                f_fit->SetParLimits(2, fitmin,fitmax);
1219
                                f_fit->SetParLimits(3, 0.05, 1);
1220
                                f_fit->SetParLimits(4, hp1d->GetMaximum()*0.01, hp1d->GetMaximum());
1221
                                f_fit->SetParLimits(5, fitmin,fitmax);
1222
                                f_fit->SetParLimits(6, 0.01, 1);
1223
            } else if(strcmp(fitopt, "cggg")==0) {
1224
                                f_fit = fcggg;
1225
                                //original
1226
                                //~ f_fit->SetParameters(hp1d->GetMaximum()*0.01, 
1227
                                                                //~ hp1d->GetMaximum()*0.4, 0, 0.4,
1228
                                                                        //~ hp1d->GetMaximum()*0.4, 0, 0.2,
1229
                                                                //~ hp1d->GetMaximum()*0.1, 0, 0.05);
1230
                                //kobayashi
1231
                                double init_mean = hp1d->GetXaxis()->GetBinCenter(hp1d->GetMaximumBin());
1232
                                f_fit->SetParameters(hp1d->GetMaximum()*0.0001,  
1233
                                                                        hp1d->GetMaximum()*0.01, init_mean      , 0.04,
1234
                                                                        hp1d->GetMaximum()*0.01, init_mean + 0.2, 0.03,
1235
                                                                        hp1d->GetMaximum()*0.01, init_mean - 0.2, 0.03);
1236
                                f_fit->SetParLimits(0, 0, hp1d->GetMaximum());
1237
                                f_fit->SetParLimits(1, 0, hp1d->GetMaximum());
1238
                                f_fit->SetParLimits(2, fitmin,fitmax);
1239
                                f_fit->SetParLimits(3, 0.001, 1);
1240
                                f_fit->SetParLimits(4, hp1d->GetMaximum()*0.1, hp1d->GetMaximum());
1241
                                f_fit->SetParLimits(5, fitmin,fitmax);
1242
                                f_fit->SetParLimits(6, 0.005, 3);
1243
                                f_fit->SetParLimits(7, hp1d->GetMaximum()*0.1, hp1d->GetMaximum());
1244
                                f_fit->SetParLimits(8, fitmin,fitmax);
1245
                                f_fit->SetParLimits(9, 0.02, 5);
1246
                        } else if(strcmp(fitopt, "gg")==0) {
1247
                                f_fit = fgg;
1248
                                f_fit->SetParameters(hp1d->GetMaximum()*0.4, 0, 0.9,
1249
                                                                        hp1d->GetMaximum()*0.5, 0, 0.05);
1250
                                f_fit->SetParLimits(0, hp1d->GetMaximum()*0.01, hp1d->GetMaximum());
1251
                                f_fit->SetParLimits(1, fitmin,fitmax);
1252
                                f_fit->SetParLimits(2, 0.05, 1);
1253
                                f_fit->SetParLimits(3, hp1d->GetMaximum()*0.01, hp1d->GetMaximum());
1254
                                f_fit->SetParLimits(4, fitmin,fitmax);
1255
                                f_fit->SetParLimits(5, 0.01, 1);
1256
            }
1257
 
1258
            f_fit->SetRange(fitmin,fitmax);
1259
            f_fit->SetLineWidth(1); f_fit->SetLineStyle(9);
1260
            hp1d->Fit(f_fit, "QWW", "", fitmin,fitmax);
1261
                        //~ hp1d->Fit(f_fit, "QWW", "", -0.5,+0.5);
1262
 
1263
            //~ fg->SetRange(fitmin,fitmax); fg->SetLineWidth(1.0);
1264
            //~ fg->SetParameters(f_fit->GetParameter(0+1), f_fit->GetParameter(1+1), f_fit->GetParameter(2+1)); fg->SetLineColor(kMagenta); fg->DrawCopy("LSAME");
1265
            //~ fg->SetParameters(f_fit->GetParameter(0+4), f_fit->GetParameter(1+4), f_fit->GetParameter(2+4)); fg->SetLineColor(kGreen); fg->DrawCopy("LSAME");
1266
            //~ fg->SetParameters(f_fit->GetParameter(0+7), f_fit->GetParameter(1+7), f_fit->GetParameter(2+7)); fg->SetLineColor(kYellow); fg->DrawCopy("LSAME");
1267
 
1268
 
1269
            HalfMax = f_fit->GetMaximum(fitmin, fitmax)/2.0;
1270
            MinHalfMax = f_fit->GetX(HalfMax, fitmin, fitcenter);
1271
            MaxHalfMax = f_fit->GetX(HalfMax, fitcenter, fitmax);
1272
            FWHM = MaxHalfMax - MinHalfMax;
1273
 
1274
            HalfMax = (f_fit->GetMaximum(fitmin, fitmax) + f_fit->GetParameter(0))/2.0;
1275
            MinHalfMax = f_fit->GetX(HalfMax, fitmin, f_fit->GetMaximumX(fitmin, fitmax));
1276
            MaxHalfMax = f_fit->GetX(HalfMax, f_fit->GetMaximumX(fitmin, fitmax), fitmax);
1277
            FWHMc = MaxHalfMax - MinHalfMax;
1278
 
1279
            //~ printf("FWHM = %lf ns | FWHMc = %lf ns\n", FWHM, FWHMc);
1280
            printf("(d) FWHM (peak only) = %.3lf ns\n", FWHMc);
1281
 
1282
            f_integrate = fgg;
1283
            for(int i=0; i<6; i++) f_integrate->SetParameter(i, f_fit->GetParameter(i+1));
1284
            //~ for(int i=0; i<9; i++) f_integrate->SetParameter(i, f_fit->GetParameter(i+1));
1285
            //~ fgg->SetRange(drawmin, drawmax); fgg->SetNpx(300); fgg->SetLineColor(kBlue); fgg->SetLineWidth(1); fgg->DrawClone("LSAME");
1286
            double Icherenkovs = f_integrate->Integral(drawmin, drawmax)/hp1d->GetBinWidth(1);
1287
 
1288
            double Iall = f_fit->Integral(fitmin, fitmax)/hp1d->GetBinWidth(1);
1289
            double Rsn = Icherenkovs/(Iall-Icherenkovs);
1290
 
1291
            //~ double Ientr = hp1d->GetEntries()*hp1d->GetBinWidth(1);
1292
            double Ientr = hp1d->GetEntries();
1293
            double Rsne = Icherenkovs/(Ientr-Icherenkovs);
1294
 
1295
            //~ double Ihist = hp1d->Integral(1, hp1d->GetNbinsX()-1)*hp1d->GetBinWidth(1);
1296
            double Ihist = hp1d->Integral(1, hp1d->GetNbinsX()-1);
1297
            double Rsnh = Icherenkovs/(Ihist-Icherenkovs);
1298
 
1299
            double Icherenkovs_10ns = f_integrate->Integral(-10, 10)/hp1d->GetBinWidth(1);
1300
            fc->SetParameter(0, f_fit->GetParameter(0));
1301
            double Inoise_10ns = fc->Integral(-10, 10)/hp1d->GetBinWidth(1);
1302
            double R10ns = Icherenkovs_10ns/Inoise_10ns;
1303
 
1304
            double Icherenkovs_4ns = f_integrate->Integral(-4, 4)/hp1d->GetBinWidth(1);
1305
            fc->SetParameter(0, f_fit->GetParameter(0));
1306
            double Inoise_4ns = fc->Integral(-4, 4)/hp1d->GetBinWidth(1);
1307
            double R4ns = Icherenkovs_4ns/Inoise_4ns;
1308
 
1309
            double Icherenkovs_2ns = f_integrate->Integral(-2, 2)/hp1d->GetBinWidth(1);
1310
            fc->SetParameter(0, f_fit->GetParameter(0));
1311
            double Inoise_2ns = fc->Integral(-2, 2)/hp1d->GetBinWidth(1);
1312
            double R2ns = Icherenkovs_2ns/Inoise_2ns;
1313
 
1314
            //~ printf("ICherenkov = %lf | IAll = %lf | Ientr = %lf | Ihist = %lf\n", Icherenkovs, Iall, Ientr, Ihist);
1315
            printf("Icherenkovs_4ns = %.0lf\n", Icherenkovs_4ns);
1316
            //~ printf("TF1 -> S/N = %lf || TH1F(e) -> S/N = %lf || TH1F(i) -> S/N = %lf\n", Rsn, Rsne, Rsnh);
1317
            //~ printf("S/N (All) = %lf\n", Rsnh);
1318
            printf("S/N (10ns) = %.2lf\n", R10ns);
1319
            printf("S/N (4 ns) = %.2lf\n", R4ns);
1320
            printf("S/N (2 ns) = %.2lf\n", R2ns);
1321
 
1322
//~ #define USE_NOISE_FILE
1323
 
1324
#ifdef USE_NOISE_FILE
1325
            //get ROOT file with histograms
1326
            char fnameroot[1024];
1327
            TFile * rootfile2;
1328
            TDirectory *dir2;
1329
 
1330
            //~ sprintf(fname, "run054"); 
1331
            sprintf(fname, "run_309");
1332
            sprintf(fnameroot, "root/%s.root", fname);
1333
            rootfile2 = (TFile *) gROOT->FindObject(fname);
1334
            if(rootfile2==NULL) rootfile2 = new TFile(fnameroot);
1335
            if(rootfile2==NULL) {
1336
              printf("Cannot open root file 2 %s!!!\n",fnameroot);
1337
              return;
1338
            }
1339
            dir2 = (TDirectory*) rootfile2;
1340
 
1341
            sprintf(hname, "htdcdiff");
1342
            hp1dcut = DrTH1F(dir2, hname, "");
1343
            hp1dcut->SetLineColor(40);
1344
            hp1dcut->SetLineStyle(2);
1345
            hp1dcut->DrawClone("SAME");
1346
 
1347
            leg[++legi] = new TLegend(0.125,0.5,0.425,0.925);
1348
                leg[legi]->SetFillColor(0); leg[legi]->SetBorderSize(1); leg[legi]->SetTextSize(0.05); leg[legi]->SetTextAlign(12);
1349
 
1350
            leg[legi]->AddEntry((TH1F*)hp1d->Clone(), "With source", "L");
1351
            leg[legi]->AddEntry((TH1F*)hp1dcut->Clone(), "W/o source", "L");
1352
#else
1353
            leg[++legi] = new TLegend(0.125,0.625,0.425,0.925);
1354
            leg[legi]->SetFillColor(0); leg[legi]->SetBorderSize(1); leg[legi]->SetTextSize(0.05); leg[legi]->SetTextAlign(12);
1355
#endif  
1356
 
1357
            sprintf(fullname, "FWHM = %.0lf ps", 1000*FWHMc);
1358
            leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "L");
1359
            sprintf(fullname, "S/N (#pm10ns) = %.1lf", R10ns);
1360
            leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1361
            sprintf(fullname, "S/N (#pm 4ns) = %.1lf", R4ns);
1362
            leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1363
            sprintf(fullname, "S/N (#pm 2ns) = %.1lf", R2ns);
1364
            leg[legi]->AddEntry((TF1*)f_fit->Clone(), fullname, "");
1365
            leg[legi]->Draw();
1366
 
1367
            if(draw_cuts) {
1368
                sprintf(hname, "htdcdiff_cut");
1369
                hp1dcut = DrTH1F(dir, hname, "");
1370
                hp1dcut->Rebin(rebin_tdcs);
1371
                hp1dcut->SetLineColor(kRed);
1372
                hp1dcut->DrawClone("SAME");
1373
 
1374
                sprintf(hname, "htdcdiff_cut_2");
1375
                hp1dcut = DrTH1F(dir, hname, "");
1376
                hp1dcut->Rebin(rebin_tdcs);
1377
                hp1dcut->SetLineColor(kGreen);
1378
                hp1dcut->DrawClone("SAME");
1379
            }
1380
 
1381
        sprintf(fullname, "gif/d_%s.gif", fname);  c[cc]->SaveAs(fullname);
1382
        sprintf(fullname, "eps/d_%s.eps", fname);  c[cc]->SaveAs(fullname);
1383
 
1384
        if(batch_q) gSystem->Exit(1);
1385
    }
1386
 
1387
// -------------------------------------------------------------------  
1388
 
1389
    if( strchr(plopt, 'c') != NULL ) {
1390
 
1391
        //~ gStyle->SetOptStat(1111);   
1392
        //~ gStyle->SetOptFit(0);       
1393
 
1394
        c[++cc] = new TCanvas("c", "c", 0, 0, 900, 700);
1395
                //~ c[cc]->Divide(2,2);
1396
 
1397
        int ccccdi = 0;
1398
 
1399
        (c[cc]->cd(++ccccdi))->SetLogz(1);
1400
            sprintf(hname, "htdccor");
1401
            hp2d = DrTH2F(dir, hname, "");
1402
            //~ hp2d->GetYaxis()->SetRangeUser(0,1500);
1403
            //~ sprintf(fullname, "%s;QDC Reference 1275 keV; QDC Reference Coincidence", fname);
1404
            //~ hp2d->SetTitle(fullname);
1405
            hp2d->DrawClone("COLZ");
1406
 
1407
        //~ (c[cc]->cd(++ccccdi))->SetLogz(1);
1408
            //~ sprintf(hname, "hcor%d",0);
1409
            //~ hp2d = DrTH2F(dir, hname, "");
1410
            //~ hp2d->DrawClone("COLZ");
1411
        //~ 
1412
        //~ (c[cc]->cd(++ccccdi))->SetLogz(1);
1413
            //~ sprintf(hname, "hcor%d",1);
1414
            //~ hp2d = DrTH2F(dir, hname, "");
1415
            //~ hp2d->DrawClone("COLZ");
1416
            //~ 
1417
        //~ 
1418
        //~ (c[cc]->cd(++ccccdi))->SetLogz(1);
1419
            //~ sprintf(hname, "hdiffcor_%d_%d",0,1);
1420
            //~ hp2d = DrTH2F(dir, hname, "");
1421
            //~ hp2d->DrawClone("COLZ");
1422
        //~ 
1423
        //~ (c[cc]->cd(++ccccdi))->SetLogz(1);
1424
            //~ sprintf(hname, "hdiffcor_%d_%d",1,0);
1425
            //~ hp2d = DrTH2F(dir, hname, "");
1426
            //~ hp2d->DrawClone("COLZ");
1427
 
1428
        sprintf(fullname, "gif/c_%s.gif", fname);  c[cc]->SaveAs(fullname);
1429
    }
1430
 
1431
// -------------------------------------------------------------------------------
1432
// -------------------------------------------------------------------  
1433
 
1434
    if( strchr(plopt, 't') != NULL ) {
1435
 
1436
        gStyle->SetOptStat(1111);      
1437
        //~ gStyle->SetOptFit(0);       
1438
 
1439
        c[++cc] = new TCanvas("c", "c", 0, 0, 700, 400);
1440
                //~ c[cc]->Divide(2,2);
1441
 
1442
        double drawmin = -1;
1443
        double drawmax = 2;
1444
        double fitmin = -1;
1445
        double fitmax =  0.75;
1446
        double fitcenter = 0.0;
1447
        double HalfMax, MinHalfMax, MaxHalfMax, FWHM;
1448
 
1449
        int ccccdi = 0;
1450
 
1451
        //~ (c[cc]->cd(++ccccdi))->SetLogy(1);
1452
            sprintf(hname, "hctdc%d", 0);
1453
            hp1d = DrTH1F(dir, hname, "");
1454
            hp1d->SetTitle("Vov = 1.5V; Time [ns];");
1455
            hp1d->GetXaxis()->SetRangeUser(drawmin,drawmax);
1456
 
1457
            f_fit = fgg;
1458
            f_fit->SetParameters(hp1d->GetMaximum()*0.9, 0, 0.1,
1459
                                 hp1d->GetMaximum()*0.1, 0, 0.5);
1460
            //~ f_fit->SetParLimits(1, 0, hp1d->GetMaximum());
1461
            //~ f_fit->SetParLimits(2, fitmin,fitmax);
1462
            //~ f_fit->SetParLimits(3, 0.2, 1);
1463
            //~ f_fit->SetParLimits(4, 0, hp1d->GetMaximum());
1464
            //~ f_fit->SetParLimits(5, fitmin,fitmax);
1465
 
1466
            f_fit->SetRange(fitmin,fitmax);
1467
            f_fit->SetLineWidth(1);
1468
            hp1d->Fit(f_fit, "Q", "", fitmin,fitmax);
1469
 
1470
 
1471
            HalfMax = f_fit->GetMaximum(fitmin, fitmax)/2.0;
1472
            MinHalfMax = f_fit->GetX(HalfMax, fitmin, fitcenter);
1473
            MaxHalfMax = f_fit->GetX(HalfMax, fitcenter, fitmax);
1474
            FWHM = MaxHalfMax - MinHalfMax;
1475
            printf("FWHM = %.3lf ns\n", FWHM);
1476
 
1477
            fg->SetRange(-2,5); fg->SetLineWidth(1.0);
1478
            fg->SetParameters(f_fit->GetParameter(0), f_fit->GetParameter(1), f_fit->GetParameter(2));
1479
            fg->SetLineColor(kGreen); fg->DrawClone("LSAME");
1480
            fg->SetParameters(f_fit->GetParameter(0+3), f_fit->GetParameter(1+3), f_fit->GetParameter(2+3));
1481
            fg->SetLineColor(kMagenta); fg->DrawClone("LSAME");
1482
 
1483
        sprintf(fullname, "gif/t_%s.gif", fname);  c[cc]->SaveAs(fullname);
1484
        sprintf(fullname, "eps/t_%s.eps", fname);  c[cc]->SaveAs(fullname);
1485
    }
1486
 
1487
// -------------------------------------------------------------------------------
1488
// -------------------------------------------------------------------  
1489
 
1490
    if( strchr(plopt, 'e') != NULL ) {
1491
 
1492
 
1493
        DrSetDrawStyle(0.05);
1494
 
1495
        gStyle->SetOptStat("e");       
1496
        gStyle->SetOptFit(0);  
1497
 
1498
        gStyle->SetPadRightMargin(0.03);
1499
        gStyle->SetPadTopMargin(0.05);
1500
        gStyle->SetPadBottomMargin(0.12);
1501
        gStyle->SetStatFontSize(0.05);
1502
        gStyle->SetStatX(0.97);
1503
        gStyle->SetStatY(0.95);
1504
 
1505
        c[++cc] = new TCanvas("e_ref", "e_ref", 0, 0, 720, 400);
1506
 
1507
 
1508
                int spectra_rebin = 0;
1509
                int yaxis_max = 0;
1510
                //~ int yaxis_max = 1200;
1511
                //~ int xaxis_max = 2500;
1512
                int xaxis_max = 3000;
1513
 
1514
        //~ double fitcenter = 1190.;
1515
        //~ double fitw = 70.;
1516
        //~ double Cher_min = 10;
1517
        //~ double Cher_max = 16;
1518
        double Cher_min = -120;
1519
        double Cher_max = -110;
1520
        //~ double const_min = 20;
1521
        //~ double const_max = 80;
1522
        double const_min = -250;
1523
        double const_max = -200;
1524
        int ccccdi = 0;
1525
 
1526
        if( strcmp(fname, "eff003")==0) {fitcenter=760.; fitw=100.;}
1527
        if( strcmp(fname, "eff004")==0) {fitcenter=1220.; fitw=150.; spectra_rebin=8; yaxis_max=3300;}
1528
        if( strcmp(fname, "eff005")==0) {fitcenter=1140.; fitw=60.;}
1529
        if( strcmp(fname, "eff006")==0) {fitcenter=2050.; fitw=60.; xaxis_max=4000;}
1530
 
1531
        if( strcmp(fname, "eff012")==0) {Cher_min=13; Cher_max=15;}
1532
        if( strcmp(fname, "eff013")==0) {Cher_min=12; Cher_max=14;}
1533
        if( strcmp(fname, "eff014")==0) {Cher_min=12; Cher_max=14;}
1534
        if( strcmp(fname, "eff015")==0) {Cher_min=12; Cher_max=14;}
1535
        if( strcmp(fname, "eff016")==0) {Cher_min=12; Cher_max=14;}
1536
        if( strcmp(fname, "eff017")==0) {Cher_min=12; Cher_max=14;}
1537
        if( strcmp(fname, "eff018")==0) {Cher_min=12; Cher_max=14;}
1538
 
1539
        sprintf(hname, "hadc%d", 0);
1540
        hp1d = DrTH1F(dir, hname, "");
1541
        hp1d->SetTitle("; Charge [200 fC/bin];Counts");
1542
        if(spectra_rebin) hp1d->Rebin(spectra_rebin);
1543
        hp1d->SetLineColor(kBlack);
1544
        hp1d->GetXaxis()->SetRangeUser(0,xaxis_max);
1545
        if(yaxis_max) hp1d->GetYaxis()->SetRangeUser(0,yaxis_max);
1546
        hp1d->Draw();
1547
 
1548
        //~ printf("Photofraction ~ %lf\n", hp1d->Integral(1300,1700)/hp1d->Integral(0,1300));
1549
 
1550
        f_fit = fg;
1551
        f_fit->SetParameters(hp1d->GetMaximum()*0.1, fitcenter, fitw);
1552
 
1553
        f_fit->SetRange(fitcenter-fitw, fitcenter+fitw);
1554
        f_fit->SetLineWidth(3);
1555
        hp1d->Fit(f_fit, "0Q", "", fitcenter-fitw, fitcenter+fitw);
1556
        f_fit->DrawClone("LSAME");
1557
 
1558
        double PP_1sigma_min = f_fit->GetParameter(1)-f_fit->GetParameter(2);
1559
        double PP_1sigma_max = f_fit->GetParameter(1)+f_fit->GetParameter(2);
1560
        printf("PPcenter, PPwidth = %.0lf, %.0lf\n", f_fit->GetParameter(1), f_fit->GetParameter(2));
1561
        printf("PP+/-1sigma = [%.0lf, %.0lf]\n", PP_1sigma_min, PP_1sigma_max);
1562
        printf("PP resolution = %.1lf\%% (FWHM = %.1lf\%%)\n", 100*f_fit->GetParameter(2)/f_fit->GetParameter(1), 235*f_fit->GetParameter(2)/f_fit->GetParameter(1));
1563
 
1564
// -------- 1275keV Compton estimation --------
1565
 
1566
// COMPTON EDGE
1567
        //~ TF1 *fcompt = new TF1("fcompt", "[2]*(1 - ConstantStep(((x-[0])/[1]) - (1275.*(2*1275./511./(1+2*1275./511.)))))*(2 + (((x-[0])/[1])/1275.)^2/((1275./511.)^2*(1 - (((x-[0])/[1])/1275.))^2) + (((x-[0])/[1])/1275.)*((((x-[0])/[1])/1275.) - 2/(1275./511.))/(1 - (((x-[0])/[1])/1275.)))/(1275./511.)^2");        
1568
        //~ TF1 *fcomhi = new TF1("fcomhi", "gaus(0)+fcompt");
1569
        //~ fcomhi->SetNpx(500); fcomhi->SetLineWidth(1); fcomhi->SetLineColor(6);
1570
        //~ double comhi_range_low = 1670.;
1571
        //~ //double comhi_range_hi = 2130.;
1572
        //~ double comhi_range_hi = 2070.;
1573
        //~ fcomhi->SetParameters(2000., 1710., 50., 100, 2, 200);
1574
        //~ fcomhi->SetRange(comhi_range_low, comhi_range_hi);
1575
        //~ hp1d->Fit(fcomhi, "0QR");
1576
        //~ //fcomhi->DrawClone("LSAME");
1577
        //~ 
1578
        //~ fcompt->SetNpx(300); fcompt->SetLineWidth(1); fcompt->SetLineColor(kBlue); fcompt->SetLineStyle(9);
1579
        //~ fcompt->SetParameter(0, fcomhi->GetParameter(3));   
1580
        //~ fcompt->SetParameter(1, fcomhi->GetParameter(4));   
1581
        //~ fcompt->SetParameter(2, fcomhi->GetParameter(5));   
1582
        //~ fcompt->SetRange(0, comhi_range_hi);  
1583
        //~ fcompt->DrawClone("LSAME"); 
1584
        //~ 
1585
        //~ double IComHi = fcompt->Integral(PP_1sigma_min, PP_1sigma_max)/hp1d->GetBinWidth(1);
1586
        //~ printf("IComHi = %.0lf\n", IComHi);
1587
 
1588
// G LINEAR G            
1589
        //~ TF1 *fcomhi = new TF1("fcomhi", "gaus(0)+pol0(3)+gaus(4)");
1590
        //~ fcomhi->SetNpx(500); fcomhi->SetLineWidth(1); fcomhi->SetLineColor(kBlue);
1591
        //~ double comhi_range_low = 1700.;
1592
        //~ double comhi_range_hi = 2150.;
1593
        //~ fcomhi->SetParameters(2000., 1710., 50.,
1594
                              //~ 150.,
1595
                              //~ 200., 2150., 100.);
1596
        //~ fcomhi->SetRange(comhi_range_low, comhi_range_hi);
1597
        //~ hp1d->Fit(fcomhi, "0QR");
1598
        //~ fcomhi->DrawClone("LSAME");
1599
        //~ 
1600
        //~ TF1 *fcom_lin = new TF1("fcom_lin", "pol0(0)");
1601
        //~ fcom_lin->SetNpx(300); fcom_lin->SetLineWidth(1); fcom_lin->SetLineColor(6);     
1602
        //~ fcom_lin->SetParameter(0, fcomhi->GetParameter(3));   
1603
        //~ fcom_lin->SetRange(0, 4000);  
1604
        //~ fcom_lin->DrawClone("LSAME"); 
1605
        //~ 
1606
        //~ double IComHi = fcom_lin->Integral(PP_1sigma_min, PP_1sigma_max)/hp1d->GetBinWidth(1);
1607
// G LINEAR EXP            
1608
        TF1 *fcomhi = new TF1("fcomhi", "gaus(0) + [3] + [4]*TMath::Exp((x-[5])/[6])");
1609
        fcomhi->SetNpx(500); fcomhi->SetLineWidth(1); fcomhi->SetLineColor(6);
1610
        //double comhi_range_low = 1250.;
1611
        double comhi_range_low = fitcenter - 1.5*fitw;
1612
        //double comhi_range_hi = 2100.;
1613
        //~ fcomhi->SetParameters(2000., fitcenter, fitw,
1614
                              //~ 170.,
1615
                              //~ 85., 2000., 100.);
1616
        fcomhi->SetParameters(800., fitcenter, fitw,
1617
                              40.,
1618
                              5., comhi_range_hi, 100.);
1619
 
1620
        //~ fcomhi->SetParLimits(2, 50., 2000.);
1621
        fcomhi->SetRange(comhi_range_low, comhi_range_hi);
1622
        hp1d->Fit(fcomhi, "0QR");
1623
        //~ fcomhi->SetRange(0, 4000);  
1624
        fcomhi->DrawClone("LSAME");
1625
 
1626
        TF1 *fcompt = new TF1("fcompt", "[0] + [1]*TMath::Exp((x-[2])/[3])");
1627
        fcompt->SetNpx(300);  fcompt->SetLineWidth(1); fcompt->SetLineColor(kBlue); fcompt->SetLineStyle(9);
1628
        fcompt->SetParameter(0, fcomhi->GetParameter(3));  
1629
        fcompt->SetParameter(1, fcomhi->GetParameter(4));  
1630
        fcompt->SetParameter(2, fcomhi->GetParameter(5));  
1631
        fcompt->SetParameter(3, fcomhi->GetParameter(6));  
1632
        //~ fcompt->SetRange(1000, comhi_range_hi);  
1633
        fcompt->SetRange(400, comhi_range_hi);  
1634
        fcompt->DrawClone("LSAME");
1635
        //~ 
1636
        double IComHi = fcompt->Integral(PP_1sigma_min, PP_1sigma_max)/hp1d->GetBinWidth(1);
1637
        printf("IComHi = %.0lf\n", IComHi);
1638
        //~ 
1639
//~ // EXP            
1640
        //~ TF1 *fcomhi = new TF1("fcomhi", "[0] + [1]*TMath::Exp((x-[2])/[3])");
1641
        //~ fcomhi->SetNpx(500); fcomhi->SetLineWidth(1); fcomhi->SetLineColor(6);
1642
        //~ double comhi_range_low = 1800.;
1643
        //~ double comhi_range_hi = 2000.;
1644
        //~ fcomhi->SetParameters(150., 1., 2000.,1.);
1645
        //~ fcomhi->SetRange(comhi_range_low, comhi_range_hi);
1646
        //~ hp1d->Fit(fcomhi, "R");
1647
        //~ fcomhi->SetRange(0, 4000);  
1648
        //~ fcomhi->DrawClone("LSAME"); 
1649
        //~ 
1650
        //~ double IComHi = fcomhi->Integral(PP_1sigma_min, PP_1sigma_max)/hp1d->GetBinWidth(1);
1651
        //~ printf("IComHi = %.0lf\n", IComHi);
1652
// LIN            
1653
        //~ TF1 *fcomhi = new TF1("fcomhi", "pol0");
1654
        //~ fcomhi->SetNpx(500); fcomhi->SetLineWidth(1); fcomhi->SetLineColor(6);
1655
        //~ double comhi_range_low = 1800.;
1656
        //~ double comhi_range_hi = 1900.;
1657
        //~ fcomhi->SetParameter(0,150);
1658
        //~ fcomhi->SetRange(comhi_range_low, comhi_range_hi);
1659
        //~ hp1d->Fit(fcomhi, "QR");
1660
        //~ fcomhi->SetRange(0, 4000);  
1661
        //~ fcomhi->DrawClone("LSAME");
1662
        //~ 
1663
        //~ double IComHi = fcomhi->Integral(PP_1sigma_min, PP_1sigma_max)/hp1d->GetBinWidth(1);
1664
        //~ printf("IComHi = %.0lf\n", IComHi);
1665
 
1666
// -------- 1275keV Compton estimation --------
1667
 
1668
        sprintf(hname, "hadc_cut%d", 0);
1669
        hp1dcut = DrTH1F(dir, hname, "");
1670
        if(spectra_rebin) hp1dcut->Rebin(spectra_rebin);
1671
        hp1dcut->SetLineColor(kRed);
1672
 
1673
            hp1dcut->SetLineColor(40);
1674
            hp1dcut->SetLineStyle(2);
1675
        hp1dcut->DrawClone("SAME");
1676
        double N511 = hp1dcut->GetEntries();
1677
        //~ double N511 = hp1dcut->Integral(PP_1sigma_min-10, PP_1sigma_max+10);
1678
 
1679
                leg[++legi] = new TLegend(0.124302, 0.65, 0.6, 0.925134);
1680
        leg[legi]->SetFillColor(0); leg[legi]->SetBorderSize(1); leg[legi]->SetTextSize(0.05); leg[legi]->SetTextAlign(22);
1681
        leg[legi]->AddEntry((TH1F*)hp1d->Clone(), "Measurement", "L");
1682
        leg[legi]->AddEntry((TH1F*)hp1dcut->Clone(), "#pm1 #sigma Photopeak Cut", "L");
1683
        leg[legi]->AddEntry((TF1*)fcompt->Clone(), "1275 keV Compton Estimate", "L");
1684
 
1685
        //~ leg[legi]->Draw();
1686
 
1687
        //~ sprintf(hname, "hadc_cut_2%d", 0);
1688
        //~ hp1d = DrTH1F(dir, hname, "");
1689
        //~ hp1d->SetLineColor(kGreen);
1690
        //~ hp1d->DrawClone("SAME");
1691
 
1692
 
1693
        sprintf(fullname, "gif/e_%s.gif", fname);  c[cc]->SaveAs(fullname);
1694
        sprintf(fullname, "eps/e_%s.eps", fname);  c[cc]->SaveAs(fullname);
1695
 
1696
 
1697
 
1698
        c[++cc] = new TCanvas("e_sipm", "e_sipm", 0, 470, 720, 300);
1699
                int ch_Sprttype = 8;
1700
 
1701
        (c[cc]->cd(1))->SetLogy(1);
1702
            sprintf(hname, "htdc%d", ch_Sprttype);
1703
            hp1d = DrTH1F(dir, hname, "");
1704
            hp1d->SetTitle("; Time [ns];Counts");
1705
            //~ hp1d->Rebin(4);
1706
            hp1d->SetLineColor(kBlack);
1707
            //~ hp1d->GetXaxis()->SetRangeUser(0,80);//original
1708
            hp1d->GetXaxis()->SetRangeUser(-400,50);
1709
            hp1d->GetYaxis()->SetRangeUser(0.1,hp1d->GetMaximum()*2);
1710
            hp1d->DrawClone();
1711
 
1712
            sprintf(hname, "htdc_cut%d", ch_Sprttype);
1713
            hp1d = DrTH1F(dir, hname, "");
1714
            //~ hp1d->Rebin(4);
1715
            hp1d->SetLineColor(kRed);
1716
 
1717
            TF1 *fc = new TF1("fc", "pol0"); fc->SetNpx(300);
1718
            fc->SetParameter(0,1);
1719
            //~ fc->SetParameter(1,-0.1);
1720
            fc->SetRange(const_min,const_max);
1721
            hp1d->Fit(fc, "0QWWR");
1722
 
1723
            hp1d->DrawClone("SAME");
1724
            fc->SetLineColor(kBlue);
1725
            fc->DrawClone("LSAME");
1726
 
1727
            double Ntdc = hp1d->Integral(hp1d->FindBin(Cher_min), hp1d->FindBin(Cher_max));
1728
            double Nbckg = fc->Integral(Cher_min,Cher_max)/hp1d->GetBinWidth(1);
1729
            printf("fc par(0) = %lf | Nbckg = %.0lf\n", fc->GetParameter(0), Nbckg);
1730
 
1731
 
1732
            //~ sprintf(hname, "htdc_cut_2%d", 1);
1733
            //~ hp1d = DrTH1F(dir, hname, "");
1734
            //~ hp1d->SetLineColor(kGreen);
1735
            //~ hp1d->DrawClone("SAME");
1736
 
1737
            printf("N511 = %.0lf | Ntdc = %.0lf | R = %.2lf \%% | R_1 = %.2lf \%% | R_2 = %.2lf \%%\n", N511, Ntdc, 100*Ntdc/N511, 100*(Ntdc-Nbckg)/N511, 100*(Ntdc-Nbckg)/(N511-IComHi));
1738
 
1739
        sprintf(fullname, "gif/e2_%s.gif", fname);  c[cc]->SaveAs(fullname);
1740
        sprintf(fullname, "eps/e2_%s.eps", fname);  c[cc]->SaveAs(fullname);    
1741
 
1742
        int kobayashi =1;
1743
        if(kobayashi){
1744
                        double Nnohit = hp1d->Integral(hp1d->FindBin(-715), hp1d->FindBin(-685));
1745
 
1746
                        printf("N511 = %.0lf | Nnohit = %.0lf | R = %.2lf \%% | R_1 = %.2lf \%% | R_2 = %.2lf \%%\n", N511, Nnohit, 100*(N511-Nnohit)/N511, 100*((N511-Nnohit)-Nbckg)/N511, 100*((N511-Nnohit)-Nbckg)/(N511-IComHi));
1747
 
1748
                }
1749
 
1750
        //~ (c[cc]->cd(++ccccdi))->SetLogy(1);
1751
            //~ sprintf(hname, "hadc%d", 1);
1752
            //~ hp1d = DrTH1F(dir, hname, "");
1753
            //~ hp1d->SetLineColor(kBlack);
1754
            //~ hp1d->GetXaxis()->SetRangeUser(0,2000);
1755
            //~ hp1d->DrawClone();
1756
            //~ 
1757
            //~ sprintf(hname, "hadc_cut%d", 1);
1758
            //~ hp1d = DrTH1F(dir, hname, "");
1759
            //~ hp1d->SetLineColor(kRed);
1760
            //~ hp1d->DrawClone("SAME");
1761
            //~ 
1762
            //~ sprintf(hname, "hadc_cut_2%d", 1);
1763
            //~ hp1d = DrTH1F(dir, hname, "");
1764
            //~ hp1d->SetLineColor(kGreen);
1765
            //~ hp1d->DrawClone("SAME");
1766
 
1767
        //~ sprintf(fullname, "gif/e_%s.gif", fname);  c[cc]->SaveAs(fullname);
1768
        //~ sprintf(fullname, "eps/e_%s.eps", fname);  c[cc]->SaveAs(fullname);
1769
    }
1770
// -------------------------------------------------------------------  
1771
 
1772
    if( strchr(plopt, 'r') != NULL ) {
1773
 
1774
        //~ gStyle->SetOptStat(1111);   
1775
        gStyle->SetOptStat(0); 
1776
        gStyle->SetOptFit(0);  
1777
 
1778
        c[++cc] = new TCanvas("e", "e", 0, 0, 1200, 450);
1779
                c[cc]->Divide(3,1);
1780
 
1781
                int spectra_rebin = 0;
1782
                int yaxis_max = 0;
1783
                int xaxis_max = 3000;
1784
 
1785
        double fitcenter = 700.;
1786
        double fitw = 60.;
1787
        double Cher_min = 4;
1788
        double Cher_max = 16;
1789
        double const_min = Cher_max;
1790
        double const_max = 80;
1791
        int ccccdi = 0;
1792
 
1793
        if( strcmp(fname, "eff003")==0) {fitcenter=760.; fitw=100.;}
1794
        if( strcmp(fname, "eff004")==0) {fitcenter=1220.; fitw=150.; spectra_rebin=8; yaxis_max=3300;}
1795
        if( strcmp(fname, "eff005")==0) {fitcenter=1140.; fitw=60.;}
1796
        if( strcmp(fname, "eff006")==0) {fitcenter=2050.; fitw=60.; xaxis_max=4000;}
1797
        if( strcmp(fname, "eff007")==0) {fitcenter=710.; fitw=50.;}
1798
        if( strcmp(fname, "eff009")==0) {fitcenter=900.; fitw=60.; xaxis_max=2000;}
1799
 
1800
        (c[cc]->cd(++ccccdi))->SetLogy(1);
1801
            sprintf(hname, "hadc%d", 0);
1802
            hp1d = DrTH1F(dir, hname, "");
1803
            hp1d->SetTitle("Reference Coincidence; Charge [200 fC/bin];");
1804
            if(spectra_rebin) hp1d->Rebin(spectra_rebin);
1805
            hp1d->SetLineColor(kBlack);
1806
            hp1d->GetXaxis()->SetRangeUser(0,xaxis_max);
1807
            if(yaxis_max) hp1d->GetYaxis()->SetRangeUser(0.5,yaxis_max);
1808
 
1809
            f_fit = fg;
1810
            f_fit->SetParameters(hp1d->GetMaximum()*0.1, fitcenter, fitw);
1811
 
1812
            f_fit->SetRange(fitcenter-fitw, fitcenter+fitw);
1813
            f_fit->SetLineWidth(1);
1814
            hp1d->Fit(f_fit, "Q", "", fitcenter-fitw, fitcenter+fitw);
1815
 
1816
            printf("PP+/-1sigma = [%.0lf, %.0lf]\n", f_fit->GetParameter(1)-f_fit->GetParameter(2), f_fit->GetParameter(1)+f_fit->GetParameter(2));
1817
            printf("PP resolution = %.1lf\%% (FWHM = %.1lf\%%)\n", 100*f_fit->GetParameter(2)/f_fit->GetParameter(1), 235*f_fit->GetParameter(2)/f_fit->GetParameter(1));
1818
 
1819
            sprintf(hname, "hadc_cut%d", 0);
1820
            hp1d = DrTH1F(dir, hname, "");
1821
            if(spectra_rebin) hp1d->Rebin(spectra_rebin);
1822
            hp1d->SetLineColor(kRed);
1823
            hp1d->DrawClone("SAME");
1824
            double N511 = hp1d->GetEntries();
1825
 
1826
            sprintf(hname, "hadc_cut_2%d", 0);
1827
            hp1d = DrTH1F(dir, hname, "");
1828
            hp1d->SetLineColor(kGreen);
1829
          hp1d->DrawClone("SAME");
1830
 
1831
//-----------------------------------------------------------------------
1832
 
1833
                 (c[cc]->cd(++ccccdi))->SetLogy(1);
1834
            sprintf(hname, "hadc%d", 2);
1835
            hp1d = DrTH1F(dir, hname, "");
1836
            hp1d->SetTitle("Reference 1275 keV; Charge [200 fC/bin];");
1837
            //~ if(spectra_rebin) hp1d->Rebin(spectra_rebin);
1838
            hp1d->SetLineColor(kBlack);
1839
            //~ hp1d->GetXaxis()->SetRangeUser(0,xaxis_max);
1840
            //~ if(yaxis_max) hp1d->GetYaxis()->SetRangeUser(0,yaxis_max);
1841
            hp1d->DrawClone();
1842
 
1843
            sprintf(hname, "hadc_cut%d", 2);
1844
            hp1d = DrTH1F(dir, hname, "");
1845
            if(spectra_rebin) hp1d->Rebin(spectra_rebin);
1846
            hp1d->SetLineColor(kRed);
1847
            hp1d->DrawClone("SAME");
1848
 
1849
            sprintf(hname, "hadc_cut_2%d", 2);
1850
            hp1d = DrTH1F(dir, hname, "");
1851
            hp1d->SetLineColor(kGreen);
1852
            hp1d->DrawClone("SAME");
1853
 
1854
//-----------------------------------------------------------------------
1855
 
1856
        (c[cc]->cd(++ccccdi))->SetLogy(1);
1857
            sprintf(hname, "htdc%d", 1);
1858
            hp1d = DrTH1F(dir, hname, "");
1859
            hp1d->SetTitle("MPPC Cherenkov; Time [ns];");
1860
            //~ hp1d->Rebin(4);
1861
            hp1d->SetLineColor(kBlack);
1862
            hp1d->GetXaxis()->SetRangeUser(0,80);
1863
            hp1d->GetYaxis()->SetRangeUser(0.1,hp1d->GetMaximum()*2);
1864
            hp1d->DrawClone();
1865
 
1866
            sprintf(hname, "htdc_cut%d", 1);
1867
            hp1d = DrTH1F(dir, hname, "");
1868
            //~ hp1d->Rebin(4);
1869
            hp1d->SetLineColor(kRed);
1870
 
1871
            TF1 *fc = new TF1("fc", "pol0"); fc->SetNpx(300);
1872
            fc->SetParameter(0,1);
1873
            fc->SetRange(const_min,const_max);
1874
            hp1d->Fit(fc, "0QWWR");
1875
 
1876
            hp1d->DrawClone("SAME");
1877
            fc->SetLineColor(kBlue);
1878
            fc->DrawClone("LSAME");
1879
 
1880
            double Ntdc = hp1d->Integral(hp1d->FindBin(Cher_min), hp1d->FindBin(Cher_max));
1881
            double Nbckg = fc->Integral(Cher_min,Cher_max)/hp1d->GetBinWidth(1);
1882
            printf("fc par(0) = %lf | Nbckg = %.0lf\n", fc->GetParameter(0), Nbckg);
1883
 
1884
 
1885
            sprintf(hname, "htdc_cut_2%d", 1);
1886
            hp1d = DrTH1F(dir, hname, "");
1887
            hp1d->SetLineColor(kGreen);
1888
            hp1d->DrawClone("SAME");
1889
 
1890
            printf("N511 = %.0lf | Ntdc = %.0lf | R = %lf\n", N511, Ntdc, Ntdc/N511);
1891
 
1892
            printf("R_1 = %lf\n", (Ntdc-Nbckg)/N511);
1893
 
1894
        //~ (c[cc]->cd(++ccccdi))->SetLogy(1);
1895
            //~ sprintf(hname, "hadc%d", 1);
1896
            //~ hp1d = DrTH1F(dir, hname, "");
1897
            //~ hp1d->SetLineColor(kBlack);
1898
            //~ hp1d->GetXaxis()->SetRangeUser(0,2000);
1899
            //~ hp1d->DrawClone();
1900
            //~ 
1901
            //~ sprintf(hname, "hadc_cut%d", 1);
1902
            //~ hp1d = DrTH1F(dir, hname, "");
1903
            //~ hp1d->SetLineColor(kRed);
1904
            //~ hp1d->DrawClone("SAME");
1905
            //~ 
1906
            //~ sprintf(hname, "hadc_cut_2%d", 1);
1907
            //~ hp1d = DrTH1F(dir, hname, "");
1908
            //~ hp1d->SetLineColor(kGreen);
1909
            //~ hp1d->DrawClone("SAME");
1910
 
1911
        sprintf(fullname, "gif/e_%s.gif", fname);  c[cc]->SaveAs(fullname);
1912
        sprintf(fullname, "eps/e_%s.eps", fname);  c[cc]->SaveAs(fullname);
1913
    }
1914
 
1915
// -------------------------------------------------------------------------------
1916
  // -------------------------------------------------------------------        
1917
 
1918
    if( strchr(plopt, 'p') != NULL ) {
1919
 
1920
 
1921
        DrSetDrawStyle(0.05);
1922
 
1923
        gStyle->SetOptStat("e");       
1924
        gStyle->SetOptFit(0);  
1925
 
1926
        gStyle->SetPadRightMargin(0.03);
1927
        gStyle->SetPadTopMargin(0.05);
1928
        gStyle->SetPadBottomMargin(0.12);
1929
        gStyle->SetStatFontSize(0.05);
1930
        gStyle->SetStatX(0.97);
1931
        gStyle->SetStatY(0.95);
1932
 
1933
        c[++cc] = new TCanvas("Print", "Print", 0, 0, 720, 400);
1934
 
1935
 
1936
                int spectra_rebin = 0;
1937
                int yaxis_max = 1000;
1938
                int xaxis_max = 1200;
1939
 
1940
 
1941
        double Cher_min = 10;
1942
        double Cher_max = 16;
1943
        double const_min = 20;
1944
        double const_max = 80;
1945
        int ccccdi = 0;
1946
 
1947
        sprintf(hname, "hadc%d", 0);
1948
        hp1d = DrTH1F(dir, hname, "");
1949
        hp1d->SetTitle("; Charge [200 fC/bin];Counts");
1950
        if(spectra_rebin) hp1d->Rebin(spectra_rebin);
1951
        hp1d->SetLineColor(kBlack);
1952
        hp1d->GetXaxis()->SetRangeUser(0,xaxis_max);
1953
        if(yaxis_max) hp1d->GetYaxis()->SetRangeUser(0,yaxis_max);
1954
        hp1d->Draw();
1955
 
1956
        sprintf(hname, "hadc_cut%d", 0);
1957
        hp1dcut = DrTH1F(dir, hname, "");
1958
        if(spectra_rebin) hp1dcut->Rebin(spectra_rebin);
1959
        hp1dcut->SetLineColor(kRed);
1960
        hp1dcut->Draw("SAME");
1961
 
1962
        sprintf(fullname, "gif/p_%s.gif", fname);  c[cc]->SaveAs(fullname);
1963
        sprintf(fullname, "eps/p_%s.eps", fname);  c[cc]->SaveAs(fullname);
1964
        }
1965
 
1966
// -------------------------------------------------------------------  
1967
 
1968
    if( strchr(plopt, 'b') != NULL ) {
1969
        gStyle->SetOptStat(0); 
1970
        gStyle->SetOptFit(0);  
1971
 
1972
        c[++cc] = new TCanvas("b", "b", 0, 0, 1200, 700);
1973
                c[cc]->Divide(2,2);
1974
 
1975
        int ccccdi = 0;
1976
        int ich;
1977
/*        
1978
//  ------------------------------------------------------------              
1979
        ich = 0;    
1980
                (c[cc]->cd(++ccccdi))->SetLogy(1);
1981
            sprintf(hname, "htdc%d", ich);
1982
            hp1d = DrTH1F(dir, hname, "");
1983
            hp1d->SetTitle(hname);
1984
            //~ hp1d->GetXaxis()->SetRangeUser(0,2000);
1985
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
1986
            hp1d->SetLineColor(kBlack);
1987
            hp1d->DrawClone();
1988
 
1989
//  ------------------------------------------------------------              
1990
        ich = 1;    
1991
                (c[cc]->cd(++ccccdi))->SetLogy(1);
1992
            sprintf(hname, "htdc%d", ich);
1993
            hp1d = DrTH1F(dir, hname, "");
1994
            hp1d->SetTitle(hname);
1995
            //~ hp1d->GetXaxis()->SetRangeUser(0,2000);
1996
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
1997
            hp1d->SetLineColor(kBlack);
1998
            hp1d->DrawClone();            
1999
*/            
2000
//  -------------------------- qdc 0 ----------------------------------              
2001
        ich = 0;    
2002
                (c[cc]->cd(++ccccdi))->SetLogy(1);
2003
        /*
2004
            sprintf(hname, "hadc%d", ich);
2005
            hp1d = DrTH1F(dir, hname, "");
2006
            hp1d->SetTitle("SiPM;Charge [200 fC/bin]");
2007
            hp1d->GetXaxis()->SetRangeUser(0,1000);
2008
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
2009
            hp1d->SetLineColor(kBlack);
2010
            hp1d->DrawClone();
2011
            */
2012
 
2013
TLegend *leg0 = new TLegend(0.57,0.66,0.88,0.88);      
2014
        leg0->SetFillColor(0);
2015
        leg0->SetBorderSize(1);
2016
        leg0->SetTextSize(0.05);
2017
        leg0->SetTextAlign(22);
2018
 
2019
        sprintf(hname, "hadc%d", ich);
2020
        TH1F* hADC = DrTH1F(dir, hname, "");
2021
 
2022
        hADC->SetTitle("SiPM;Charge [200 fC/bin]");
2023
        hADC->GetXaxis()->SetRangeUser(0,1000);
2024
                hADC->SetLineColor(kBlack);
2025
        hADC->DrawClone();
2026
 
2027
        int dbgprint=1;
2028
        const int nPeaks=3;
2029
        double pSigma=10;
2030
        double pThr=0.005;
2031
 
2032
        TSpectrum *sADC = new TSpectrum(nPeaks,0.3);
2033
        sADC->Search(hADC, pSigma,"",pThr);
2034
        int foundNPeaks = sADC->GetNPeaks();
2035
        float *foundPeakX = sADC->GetPositionX();
2036
        float *foundPeakY = sADC->GetPositionY();
2037
 
2038
        if(1 < foundNPeaks) {
2039
                        //void Sort(Int_t n1, const Float_t *a, Int_t *index, Bool_t down)
2040
                        int sortedPeakIndex[nPeaks];
2041
                        TMath::Sort(foundNPeaks, foundPeakX, sortedPeakIndex, 0);
2042
                        if(dbgprint) {
2043
                                printf("foundNPeaks = %d\n",foundNPeaks);
2044
                                for(int i=0; i<foundNPeaks; i++) printf("Peak[%d] = %f\n",i, foundPeakX[sortedPeakIndex[i]]);
2045
                        }      
2046
                        float peakMidpointX[nPeaks+1];
2047
                        float peakMidpointY[nPeaks+1];
2048
 
2049
                        peakMidpointX[0] = 0; peakMidpointY[0] = 1;
2050
                        for(int i=1; i<foundNPeaks; i++) {
2051
                                peakMidpointX[i] = (foundPeakX[sortedPeakIndex[i]] + foundPeakX[sortedPeakIndex[i-1]])/2.0;
2052
                                peakMidpointY[i] = 1;
2053
 
2054
                                if(dbgprint) printf("peakMidpointX[%d] = %f\n",i, peakMidpointX[i]);
2055
 
2056
                        }
2057
                        peakMidpointX[foundNPeaks] = 1120; peakMidpointY[foundNPeaks] = 1;
2058
 
2059
                        if(dbgprint) printf("peakMidpointX[%d] = %f\n",foundNPeaks, peakMidpointX[foundNPeaks]);
2060
 
2061
                        TPolyMarker *pmMidpoints = new TPolyMarker(nPeaks+1, peakMidpointX, peakMidpointY);
2062
                        pmMidpoints->SetMarkerStyle(33); pmMidpoints->SetMarkerColor(9); pmMidpoints->SetMarkerSize(2);
2063
                        pmMidpoints->Draw("SAME");
2064
 
2065
                        //~ fprintf(fp,"peakEvents:\n");
2066
 
2067
                        double peakEvents[nPeaks];
2068
                        for(int i=0; i<foundNPeaks-1; i++) {
2069
                                peakEvents[i] = hADC->Integral(hADC->FindBin(peakMidpointX[i]), hADC->FindBin(peakMidpointX[i+1]));
2070
 
2071
                                if(dbgprint) printf("I(%.1f, %.1f) = %.1lf\n", peakMidpointX[i], peakMidpointX[i+1], peakEvents[i]);
2072
                                //~ fprintf(fp,"%lf\n", peakEvents[i]);
2073
 
2074
                        }
2075
                        peakEvents[foundNPeaks-1] = hADC->Integral(hADC->FindBin(peakMidpointX[foundNPeaks-1]), hADC->FindBin(1130.));
2076
 
2077
                        if(dbgprint) printf("I(%.1f, %.1f) = %.1lf\n", peakMidpointX[foundNPeaks-1], 1130., peakEvents[foundNPeaks-1]);
2078
                        //~ fprintf(fp,"%lf\n", peakEvents[foundNPeaks-1]);
2079
 
2080
                        double N0all = -TMath::Log(peakEvents[0]/hADC->GetEntries());
2081
                        double N01 = peakEvents[1]/peakEvents[0];
2082
                        double N02 = 2*peakEvents[2]/peakEvents[1];
2083
 
2084
                        if(dbgprint) printf("Poisson <N>: N0all -> %.3lf | N01 -> %.3lf | N12 -> %.3lf\n", N0all, N01, N02);
2085
 
2086
 
2087
 
2088
                        sprintf(sbuff, "<N> = %.3lf", N0all);
2089
                        leg0->AddEntry((TH1F*)hADC->Clone(),sbuff, "");
2090
                        sprintf(sbuff, "1 CPH = %.0lf", foundPeakX[sortedPeakIndex[1]]);
2091
                        leg0->AddEntry((TH1F*)hADC->Clone(),sbuff, "");
2092
                        leg0->Draw();
2093
                }          
2094
 
2095
                double N_adc_integral = hADC->Integral(hADC->FindBin(peakMidpointX[1]), hADC->FindBin(1000.));
2096
                double N_poisson = (1 - TMath::Exp(-N0all))*hADC->GetEntries();
2097
            printf("hADC->GetEntries() = %.0lf\n", hADC->GetEntries());
2098
            printf("N_adc_integral = %.0lf | N_poisson = %.0lf\n", N_adc_integral, N_poisson);
2099
 
2100
        sprintf(hname, "hadc_cut%d", ich);
2101
                hp1d = DrTH1F(dir, hname, "");
2102
                hp1d->SetLineColor(kRed);
2103
                hp1d->DrawClone("SAME");
2104
 
2105
//  -------------------------- TDC 0 ----------------------------------   
2106
                (c[cc]->cd(++ccccdi))->SetLogy(1);
2107
            sprintf(hname, "htdc%d", ich);
2108
            hp1d = DrTH1F(dir, hname, "");
2109
            hp1d->SetTitle("SiPM;Time [ns]");
2110
            hp1d->GetXaxis()->SetRangeUser(-5,5);
2111
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
2112
            hp1d->SetLineColor(kBlack);
2113
            hp1d->DrawClone();
2114
 
2115
            printf("hTDC->GetEntries() = %.0lf\n", hp1d->GetEntries());
2116
            double N_tdc_integral = hp1d->Integral(hp1d->FindBin(-10), hp1d->FindBin(10));
2117
            printf("N_tdc_integral = %.0lf\n", N_tdc_integral);
2118
 
2119
 //  -----------------------------------------------------------              
2120
 
2121
                (c[cc]->cd(++ccccdi))->SetLogy(0);
2122
            sprintf(hname, "hcor%d", ich);
2123
            hp2d = DrTH2F(dir, hname, "");
2124
            hp2d->SetTitle(";Charge [200 fC/bin];cTime [ns]");
2125
            //~ hp1d->GetXaxis()->SetRangeUser(0,2000);
2126
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
2127
            //~ hp1d->SetLineColor(kBlack);
2128
            hp2d->DrawClone("COLZ");
2129
 
2130
//  -------------------------- cTDC 0 ----------------------------------   
2131
                (c[cc]->cd(++ccccdi))->SetLogy(0);
2132
            sprintf(hname, "hctdc%d", ich);
2133
            hp1d = DrTH1F(dir, hname, "");
2134
            //~ hp1d->SetTitle("SiPM;cTime [ns]");
2135
            //~ hp1d->GetXaxis()->SetRangeUser(-5,5);
2136
            //~ //hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
2137
            hp1d->SetLineColor(kBlack);
2138
            //~ hp1d->DrawClone();
2139
 
2140
                        plotCorTDC(hp1d, "SiPM;cTime [ns]", -0.5, 0.45, -1., 2);
2141
 
2142
            printf("hcTDC->GetEntries() = %.0lf\n", hp1d->GetEntries());
2143
            double N_ctdc_integral = hp1d->Integral(hp1d->FindBin(-2), hp1d->FindBin(2));
2144
            printf("N_ctdc_integral = %.0lf\n", N_ctdc_integral);
2145
 
2146
            printf("N_ctdc_integral/N_poisson = %.3lf\n", N_ctdc_integral/N_poisson);
2147
            printf("N_adc_integral/N_poisson = %.3lf\n", N_adc_integral/N_poisson);
2148
            printf("N_ctdc_integral/N_adc_integral = %.3lf\n", N_ctdc_integral/N_adc_integral);
2149
 
2150
            //~ sprintf(hname, "htdc_cut%d", ich);
2151
            //~ hp1d = DrTH1F(dir, hname, "");
2152
            //~ hp1d->SetLineColor(kRed);
2153
            //~ hp1d->DrawClone("SAME");
2154
 
2155
        sprintf(fullname, "gif/b_%s.gif", fname);  c[cc]->SaveAs(fullname);
2156
    }
2157
 
2158
 
2159
// -------------------------------------------------------------------  
2160
 
2161
    if( strchr(plopt, 'g') != NULL ) {
2162
        gStyle->SetOptStat(0); 
2163
        gStyle->SetOptFit(0);  
2164
 
2165
        c[++cc] = new TCanvas("g", "g", 640, 0, 640, 360);
2166
 
2167
        int ccccdi = 0;
2168
        int ich = 15;
2169
 
2170
        (c[cc]->cd(++ccccdi))->SetLogy(0);
2171
            sprintf(hname, "htdc%d", ich);
2172
            hp1d = DrTH1F(dir, hname, "");
2173
            //~ hp1d->SetTitle("SiPM;cTime [ns]");
2174
            //~ hp1d->GetXaxis()->SetRangeUser(-5,5);
2175
            //~ //hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
2176
            hp1d->SetLineColor(kBlack);
2177
 
2178
            //~ hp1d->DrawClone();
2179
 
2180
            sprintf(hname, "Trigger(ch.%d)-Trigger(ch.31);Time [ns]", ich);
2181
                        plotCorTDC(hp1d, hname, -0.25, 0.25, -0.5, 0.5);
2182
 
2183
        sprintf(fullname, "gif/g_%s.gif", fname);  c[cc]->SaveAs(fullname);
2184
        }
2185
// -------------------------------------------------------------------------------
2186
}