1 void GetData(TString fname,
double *
y,
double *dy,
double &
min,
double &
max) {
4 for (
int i = 0; i < N; i++) {
5 char sep;
int n;
double stats, t, dt,
sigma;
6 fin >> n >> sep >> n >> sep >> stats >> sep >> t >> sep >> dt >> sep >>
sigma;
7 if (dt < 0.01) dt = 0.01;
11 if (sigma < 0.06) {y[i] = 0.0; dy[i] = 0.0;}
12 if (i < 5 && t < 0.1) {y[i] = 0.0; dy[i] = 0.0;}
16 double func(
double *
x,
double *par) {
17 if (x[0] < par[3] && x[0] >= 200.0)
18 return par[0]+par[1]/pow(x[0],par[2]);
19 else if (x[0] >= par[3])
20 return par[0]+par[1]*(1.0+par[2])/pow(par[3],par[2])-x[0]*par[1]*par[2]/pow(par[3],par[2]+1.0);
24 double na = 0.0; TString sep =
",";
25 fout << counter << sep << na << sep << na << sep << na;
26 fout << sep << na << sep << na << sep << na;
27 fout << sep << na << sep << na << sep << na << sep << na << endl; sep =
" ";
28 fout_ccdb << counter << sep << 0.0 << sep << 0.0 << sep << 0.0 << sep << 0.0 << endl;
31 if (min == 0.0 && max == 0.0) {
WriteNA(fout,fout_ccdb,counter);
return;}
34 TCanvas
c(
"c",
"c",800,500);
36 double x[N];
double dx[N];
37 for (
int i = 0; i < N; i++) {
38 x[i] = 50.0 + i*100.0;
41 TGraphErrors
gr(N,x,y,dx,dy);
42 TF1
f(
"f",
func,200.0,4000.0,4);
43 f.SetParameter(0,min); f.SetParLimits(0,min-10.0,0.0);
44 f.SetParameter(1,25.0); f.SetParLimits(1,1.0,90.0);
45 f.SetParameter(2,0.5); f.SetParLimits(2,0.02,0.85);
46 f.SetParameter(3,2250.0); f.SetParLimits(3,1400.0,4000.0);
47 gr.SetTitle(
"TAGH counter "+TString(ss.str()));
48 gr.GetXaxis()->SetTitle(
"pulse-height [fADC counts]");
49 gr.GetYaxis()->SetTitle(
"Gaussian mean of time(TDC) - time(RF) [ns]");
51 gr.GetYaxis()->SetRangeUser(min-0.2,max+0.2);
53 if (f.GetNDF() == 0 || f.GetChisquare()/f.GetNDF() > 15.0) {
54 WriteNA(fout,fout_ccdb,counter);
57 system(
"mkdir -p fits_timewalk");
58 c.Print(
"fits_timewalk/counter_"+TString(ss.str())+
".gif");
60 fout << counter << sep << f.GetNDF() << sep << f.GetChisquare() << sep << f.GetParameter(0);
61 fout << sep << f.GetParameter(1) << sep << f.GetParameter(2) << sep << f.GetParameter(3);
62 fout << sep << f.GetParError(0) << sep << f.GetParError(1) << sep << f.GetParError(2) << sep << f.GetParError(3) << endl; sep =
" ";
63 fout_ccdb << counter << sep << f.GetParameter(0) << sep << f.GetParameter(1) << sep << f.GetParameter(2) << sep << f.GetParameter(3) << endl;
66 gStyle->SetOptStat(
"eimr");
67 TCanvas
c(
"c",
"c",800,500);
69 system(
"mkdir -p parms_timewalk");
70 c.Print(
"parms_timewalk/"+TString(h.GetName())+
".gif");
73 TH1D *
h[4]; TH1D *he[4];
74 double min[] = {-8.0,1.0,0.0,1400.0};
double max[] = {2.0,91.0,1.0,4000.0};
75 double emin[] = {0.0,0.0,0.0,0.0};
double emax[] = {0.5,10.0,0.05,100.0};
76 for (
int i = 0; i < 4; i++) {
77 stringstream ss; ss << i; TString name =
"c" + TString(ss.str());
78 h[i] =
new TH1D(name,
"TAGH timewalk: "+name+
";"+name+
";counters",100,min[i],max[i]);
79 name =
"e_c" + TString(ss.str());
80 he[i] =
new TH1D(name,
"TAGH timewalk: "+name+
";"+name+
";counters"+
";"+name+
";counters",100,emin[i],emax[i]);
82 TH1D hChisq(
"Chisq",
"TAGH timewalk: chi-square / Ndf;chi-square / Ndf;counters",150,0.0,15.0);
84 for (
int i = 0; i < 274; i++) {
85 char sep;
int n, ndf;
double chisq,
c[4], dc[4];
86 fin >> n >> sep >> ndf >> sep >> chisq;
87 for (
int j = 0; j < 4; j++) fin >> sep >> c[j];
88 for (
int j = 0; j < 4; j++) fin >> sep >> dc[j];
89 if (chisq == 0.0)
continue;
90 for (
int j = 0; j < 4; j++) h[j]->
Fill(c[j]);
91 for (
int j = 0; j < 4; j++) he[j]->
Fill(dc[j]);
92 hChisq.Fill(chisq/ndf);
95 for (
int i = 0; i < 4; i++) {
97 delete h[i];
delete he[i];
102 gStyle->SetOptFit(111);
103 TString fname =
"timewalk-fits.txt";
104 ofstream fout; fout.open(fname);
105 ofstream fout_ccdb; fout_ccdb.open(
"tdc_timewalk.txt");
106 for (
int i = 1; i <= 274; i++) {
107 stringstream ss; ss << i;
109 double y[N];
double dy[N];
110 double max = -10.0;
double min = 10.0;
111 GetData(dir+
"/counter_"+TString(ss.str())+
".txt",y,dy,min,max);
114 fout.close(); fout_ccdb.close();
int timewalk_fits(TString dir)
void PrintHistogram(TH1D h)
void WriteTimewalkFitResults(ofstream &fout, ofstream &fout_ccdb, int counter, double *y, double *dy, double min, double max)
Double_t sigma[NCHANNELS]
void GetData(TString fname, double *y, double &mean, const int N)
void PrintHistograms(TString fname)
void WriteNA(ofstream &fout, ofstream &fout_ccdb, int counter)
double func(double *x, double *par)