StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
getY0.C
1 #include <stdio>
2 #include "iomanip.h"
3 
4 void getY0(TString align_file)
5 {
6  gROOT->Reset();
7  gROOT->LoadMacro("fitfun.C"); // fit function for localY, local Z
8 
9  const Int_t N = 120;
10 
11  //histograms to check the par2 and par3 distributions
12  TH1D *hPar2 = new TH1D("Par2","",500,0., 5.);
13  TH1D *hPar3 = new TH1D("Par3","",500,0., 1.);
14 
15  TFile *fin = new TFile(align_file.Data());
16  TH2D *yLocal2D = (TH2D *)fin->Get("yLocal_all");
17  yLocal2D->RebinY(5);
18  TH1D *yLocal[N];
19  for(int i=0;i<N;i++) {
20  char hisname[100];
21  sprintf(hisname,"Tray_%d",i+1);
22  yLocal[i] = yLocal2D->ProjectionY(hisname,i+1,i+1);
23  yLocal[i]->Sumw2();
24  }
25 
26  TF1 *fitfun = new TF1("fitfun",fitfun,-5.,5.,5);
27 
28  double t[N];
29  double y0[N], ye[N];
30 
31  gStyle->SetOptStat(101);
32  gStyle->SetOptFit(100);
33  gStyle->SetTextSize(0.06);
34  gStyle->SetTextFont(42);
35  TCanvas *c1 = new TCanvas("c1","c1",0,0,800,600);
36  c1->SetFillColor(10);
37  c1->SetBorderMode(0);
38  c1->SetBorderSize(2);
39  c1->Divide(4,3);
40 
41  TPostScript *ps = new TPostScript("fig/yLocalFit.ps",112);
42 
43  for(int i=0;i<N;i++) {
44  t[i] = i+1; // tray number
45 
46  if(i%12==0) ps->NewPage(); // 12 trays per page
47  c1->cd(i%12+1);
48 
49  double par[5], err[5];
50  fitfun->SetParameters(0., yLocal[i]->GetBinContent(50), 0.1, 1., 0.);
51  fitfun->SetLineWidth(2);
52  yLocal[i]->Draw("e");
53  double entries = yLocal[i]->Integral(1,100);
54  if(entries>10) {
55  fitfun->SetParLimits(2, 1.55, 1.7);
56  fitfun->SetParLimits(3, 0.1, 0.3);
57  yLocal[i]->Fit("fitfun","R");
58  fitfun->GetParameters(&par[0]);
59  err[0] = fitfun->GetParError(0);
60  } else {
61  par[0] = 0.;
62  err[0] = 0.;
63  }
64 
65  hPar2->Fill(par[2]);
66  hPar3->Fill(par[3]);
67 
68  char text[100];
69  sprintf(text, "Y0 = %5.3f #pm %5.3f", par[0], err[0]);
70 
71  TLatex *tex = new TLatex(-3, par[1]/3., text);
72  tex->SetTextSize(0.07);
73  tex->SetTextFont(12);
74  tex->Draw("same");
75 
76  y0[i] = par[0];
77  ye[i] = err[0];
78 
79  c1->Update();
80  }
81 
82  ps->NewPage();
83 
84  gStyle->SetOptStat(0);
85  gStyle->SetOptFit(0);
86  gStyle->SetEndErrorSize(0.01);
87 
88  TCanvas *c1 = new TCanvas("c1","c1",0,0,800,600);
89  c1->SetFillColor(10);
90  c1->SetBorderMode(0);
91  c1->SetBorderSize(2);
92  c1->SetLeftMargin(0.14);
93  c1->SetBottomMargin(0.15);
94  c1->SetTopMargin(0.02);
95  c1->SetRightMargin(0.04);
96  c1->Draw();
97 
98  double x1 = 0.5;
99  double x2 = 120.5;
100  double y1 = -2.;
101  double y2 = 2.;
102  TH1D *h0 = new TH1D("h0","",1, x1, x2);
103  h0->SetMinimum(y1);
104  h0->SetMaximum(y2);
105  h0->GetXaxis()->SetNdivisions(208);
106  h0->GetXaxis()->CenterTitle();
107  h0->GetXaxis()->SetTitle("Tray #");
108  h0->GetXaxis()->SetTitleOffset(1.0);
109  h0->GetXaxis()->SetTitleSize(0.07);
110  h0->GetXaxis()->SetLabelOffset(0.01);
111  h0->GetXaxis()->SetLabelSize(0.05);
112  h0->GetXaxis()->SetLabelFont(42);
113  h0->GetXaxis()->SetTitleFont(42);
114  h0->GetYaxis()->SetNdivisions(210);
115  h0->GetYaxis()->SetTitle("yLocal Offset");
116  h0->GetYaxis()->SetTitleOffset(1.0);
117  h0->GetYaxis()->SetTitleSize(0.07);
118  h0->GetYaxis()->SetLabelOffset(0.01);
119  h0->GetYaxis()->SetLabelSize(0.045);
120  h0->GetYaxis()->SetLabelFont(42);
121  h0->GetYaxis()->SetTitleFont(42);
122  h0->Draw();
123 
124  TLine *l1 = new TLine(x1,y1,x2,y1);
125  l1->SetLineWidth(3);
126  l1->Draw("same");
127  TLine *l2 = new TLine(x1,y2,x2,y2);
128  l2->SetLineWidth(3);
129  l2->Draw("same");
130  TLine *l3 = new TLine(x1,y1,x1,y2);
131  l3->SetLineWidth(3);
132  l3->Draw("same");
133  TLine *l4 = new TLine(x2,y1,x2,y2);
134  l4->SetLineWidth(3);
135  l4->Draw("same");
136 
137  TGraphErrors *gr = new TGraphErrors(N, t, y0, 0, ye);
138  gr->SetMarkerStyle(20);
139  gr->SetMarkerSize(1.5);
140  gr->SetLineWidth(2);
141  gr->Draw("p");
142 
143  c1->Update();
144 
145  ps->Close();
146 
147  ofstream outData;
148  outData.open("yOffset.dat");
149  for(int i=0;i<N;i++) {
150  outData << setw(15) << y0[i] << setw(15) << ye[i] << endl;
151  }
152  outData.close();
153 
154  TFile *fout = new TFile("yFitPar.root","recreate");
155  hPar2->Write();
156  hPar3->Write();
157  fout->Close();
158 }