]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/SPECTRA/PiKaPr/TOF/pPb502/macros/TZEROcalib.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / PiKaPr / TOF / pPb502 / macros / TZEROcalib.C
CommitLineData
59e49925 1#include "CommonDefs.C"
2
3Int_t ncentbins = 5;
4Int_t nvertexbins = 20;
5
6TZEROcalib(const Char_t *filename = "data.root", const Char_t *calibfilename = NULL, Int_t evMax = kMaxInt)
7{
8
9 /* include path for ACLic */
10 gSystem->AddIncludePath("-I$ALICE_ROOT/include");
11 gSystem->AddIncludePath("-I$ALICE_ROOT/TOF");
12 /* load libraries */
13 gSystem->Load("libANALYSIS");
14 gSystem->Load("libANALYSISalice");
15 /* build analysis task class */
16 gROOT->LoadMacro("AliAnalysisParticle.cxx+g");
17 gROOT->LoadMacro("AliAnalysisEvent.cxx+g");
18 gROOT->LoadMacro("AliAnalysisTrack.cxx+g");
19
20 /* open file, get tree and connect */
21 TFile *filein = TFile::Open(filename);
22 TTree *treein = (TTree *)filein->Get("aodTree");
23 printf("got \"aodTree\": %d entries\n", treein->GetEntries());
24 AliAnalysisEvent *analysisEvent = new AliAnalysisEvent();
25 TClonesArray *analysisTrackArray = new TClonesArray("AliAnalysisTrack");
26 AliAnalysisTrack *analysisTrack = NULL;
27 treein->SetBranchAddress("AnalysisEvent", &analysisEvent);
28 treein->SetBranchAddress("AnalysisTrack", &analysisTrackArray);
29
30 /* open calibfile */
31 TH1 *hCentrality_TZEROA_mean = NULL;
32 TH1 *hCentrality_TZEROA_sigma = NULL;
33 TH1 *hCentrality_TZEROC_mean = NULL;
34 TH1 *hCentrality_TZEROC_sigma = NULL;
35 TH1 *hCentrality_TOF_mean = NULL;
36 TH1 *hCentrality_TOF_TZEROA_mean = NULL;
37 TH1 *hCentrality_TOF_TZEROC_mean = NULL;
38 TH1 *hCentrality_TOF_TZEROTOF_mean = NULL;
39 if (calibfilename) {
40 TFile *calibfile = TFile::Open(calibfilename);
41 hCentrality_TZEROA_mean = (TH1 *)calibfile->Get("hCentrality_TZEROA_mean");
42 hCentrality_TZEROA_sigma = (TH1 *)calibfile->Get("hCentrality_TZEROA_sigma");
43 hCentrality_TZEROC_mean = (TH1 *)calibfile->Get("hCentrality_TZEROC_calib");
44 hCentrality_TZEROC_sigma = (TH1 *)calibfile->Get("hCentrality_TZEROC_sigma");
45 hCentrality_TOF_mean = (TH1 *)calibfile->Get("hCentrality_TOF_mean");
46 hCentrality_TOF_TZEROA_mean = (TH1 *)calibfile->Get("hCentrality_TOF_TZEROA_mean");
47 hCentrality_TOF_TZEROC_mean = (TH1 *)calibfile->Get("hCentrality_TOF_TZEROC_mean");
48 hCentrality_TOF_TZEROTOF_mean = (TH1 *)calibfile->Get("hCentrality_TOF_TZEROTOF_mean");
49 }
50
51 /* histos */
52 TH1F *hCentrality = new TH1F("hCentrality", "", NcentralityBins, centralityBin);
53 TH1F *hCentrality_AC = new TH1F("hCentrality_AC", "", NcentralityBins, centralityBin);
54 TH1F *hCentrality_A = new TH1F("hCentrality_A", "", NcentralityBins, centralityBin);
55 TH1F *hCentrality_C = new TH1F("hCentrality_C", "", NcentralityBins, centralityBin);
56 TH1F *hCentrality_NONE = new TH1F("hCentrality_NONE", "", NcentralityBins, centralityBin);
57
58 TH2F *hCentrality_TZEROA = new TH2F("hCentrality_TZEROA", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
59 TH2F *hCentrality_TZEROC = new TH2F("hCentrality_TZEROC", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
60 TH2F *hCentrality_TZEROOR = new TH2F("hCentrality_TZEROOR", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
61 TH2F *hCentrality_TZEROAND = new TH2F("hCentrality_TZEROAND", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
62 TH2F *hCentrality_TZEROTOF = new TH2F("hCentrality_TZEROTOF", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
63 TH2F *hCentrality_TZERODIFF = new TH2F("hCentrality_TZERODIFF", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
64
65 TH2F *hCentrality_TZEROTOF_TZEROA = new TH2F("hCentrality_TZEROTOF_TZEROA", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
66 TH2F *hCentrality_TZEROTOF_TZEROC = new TH2F("hCentrality_TZEROTOF_TZEROC", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
67 TH2F *hCentrality_TZEROTOF_TZEROAND = new TH2F("hCentrality_TZEROTOF_TZEROAND", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
68 TH2F *hCentrality_TZEROA_TZEROC = new TH2F("hCentrality_TZEROA_TZEROC", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
69
70 TH2F *hVertex_TZEROA = new TH2F("hVertex_TZEROA", "", nvertexbins, -10., 10., 200, -2440., 2440.);
71 TH2F *hVertex_TZEROC = new TH2F("hVertex_TZEROC", "", nvertexbins, -10., 10., 200, -2440., 2440.);
72 TH2F *hVertex_TZEROOR = new TH2F("hVertex_TZEROOR", "", nvertexbins, -10., 10., 200, -2440., 2440.);
73 TH2F *hVertex_TZEROAND = new TH2F("hVertex_TZEROAND", "", nvertexbins, -10., 10., 200, -2440., 2440.);
74 TH2F *hVertex_TZEROTOF = new TH2F("hVertex_TZEROTOF", "", nvertexbins, -10., 10., 200, -2440., 2440.);
75 TH2F *hVertex_TZERODIFF = new TH2F("hVertex_TZERODIFF", "", nvertexbins, -10., 10., 200, -2440., 2440.);
76
77
78 TH2F *hCentrality_TOF = new TH2F("hCentrality_TOF", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
79 TH2F *hCentrality_TOF_TZEROA = new TH2F("hCentrality_TOF_TZEROA", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
80 TH2F *hCentrality_TOF_TZEROC = new TH2F("hCentrality_TOF_TZEROC", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
81 TH2F *hCentrality_TOF_TZEROAND = new TH2F("hCentrality_TOF_TZEROAND", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
82 TH2F *hCentrality_TOF_TZEROTOF = new TH2F("hCentrality_TOF_TZEROTOF", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
83 TH2F *hCentrality_Resolution = new TH2F("hCentrality_Resolution", "", NcentralityBins, centralityBin, 20, 0., 100.);
84
85 TH2F *hResolution_TZERODIFF = new TH2F("hResolution_TZERODIFF", "", 20, 0., 100., 200, -2440., 2440.);
86 TH2F *hResolution_TOF_TZEROA = new TH2F("hResolution_TOF_TZEROA", "", 20, 0., 100., 200, -2440., 2440.);
87 TH2F *hResolution_TOF_TZEROC = new TH2F("hResolution_TOF_TZEROC", "", 20, 0., 100., 200, -2440., 2440.);
88 TH2F *hResolution_TOF_TZEROAND = new TH2F("hResolution_TOF_TZEROAND", "", 20, 0., 100., 200, -2440., 2440.);
89 TH2F *hResolution_TOF_TZEROTOF = new TH2F("hResolution_TOF_TZEROTOF", "", 20, 0., 100., 200, -2440., 2440.);
90
91 TH2F *hVertex_TOF = new TH2F("hVertex_TOF", "", nvertexbins, -10., 10., 200, -2440., 2440.);
92 TH2F *hVertex_TOF_TZEROA = new TH2F("hVertex_TOF_TZEROA", "", nvertexbins, -10., 10., 200, -2440., 2440.);
93 TH2F *hVertex_TOF_TZEROC = new TH2F("hVertex_TOF_TZEROC", "", nvertexbins, -10., 10., 200, -2440., 2440.);
94 TH2F *hVertex_TOF_TZEROOR = new TH2F("hVertex_TOF_TZEROOR", "", nvertexbins, -10., 10., 200, -2440., 2440.);
95 TH2F *hVertex_TOF_TZEROAND = new TH2F("hVertex_TOF_TZEROAND", "", nvertexbins, -10., 10., 200, -2440., 2440.);
96 TH2F *hVertex_TOF_TZEROTOF = new TH2F("hVertex_TOF_TZEROTOF", "", nvertexbins, -10., 10., 200, -2440., 2440.);
97
98 TH2F *hDiffDiff = new TH2F("hDiffDiff", "", 200, -2440., 2440., 200, -2440., 2440.);
99
100 /* loop over events */
101 for (Int_t iev = 0; iev < treein->GetEntries() && iev < evMax; iev++) {
102 /* get event */
103 treein->GetEvent(iev);
104 if (iev % 100000 == 0) printf("iev = %d\n", iev);
105 /* check event */
106 if (!analysisEvent->AcceptEvent(acceptEventType)) continue;
107
108 /*** ACCEPTED EVENT ***/
109
110 /* get vertex position */
111 Double_t vertexz = analysisEvent->GetVertexZ();
112
113 /* get centrality */
114 Double_t cent = analysisEvent->GetCentralityPercentile(centralityEstimator);
115 hCentrality->Fill(cent);
116
117 Int_t icent;
118 for (icent = 0; icent < NcentralityBins; icent++)
119 if (cent < centralityBin[icent + 1])
120 break;
121
122 Double_t TZEROA_mean = hCentrality_TZEROA_mean ? hCentrality_TZEROA_mean->GetBinContent(icent + 1) : 0.;
123 Double_t TZEROA_sigma = hCentrality_TZEROA_sigma ? hCentrality_TZEROA_sigma->GetBinContent(icent + 1) : 1000.;
124 Double_t TZEROC_mean = hCentrality_TZEROC_mean ? hCentrality_TZEROC_mean->GetBinContent(icent + 1) : 0.;
125 Double_t TZEROC_sigma = hCentrality_TZEROC_sigma ? hCentrality_TZEROC_sigma->GetBinContent(icent + 1) : 1000.;
126
127 Double_t TOF_mean = hCentrality_TOF_mean ? hCentrality_TOF_mean->GetBinContent(icent + 1) : 0.;
128 Double_t TOF_TZEROA_mean = hCentrality_TOF_TZEROA_mean ? hCentrality_TOF_TZEROA_mean->GetBinContent(icent + 1) : 0.;
129 Double_t TOF_TZEROC_mean = hCentrality_TOF_TZEROC_mean ? hCentrality_TOF_TZEROC_mean->GetBinContent(icent + 1) : 0.;
130 Double_t TOF_TZEROTOF_mean = hCentrality_TOF_TZEROTOF_mean ? hCentrality_TOF_TZEROTOF_mean->GetBinContent(icent + 1) : 0.;
131
132
133 /* TZERO */
134 Double_t TZEROA = analysisEvent->GetTimeZeroT0(1) - TZEROA_shift;
135 Bool_t hasTZEROA = TMath::Abs(TZEROA - TZEROA_mean) < 3. * TZEROA_sigma;
136 Double_t TZEROC = analysisEvent->GetTimeZeroT0(2) - TZEROC_shift;
137 Bool_t hasTZEROC = TMath::Abs(TZEROC - TZEROC_mean) < 3. * TZEROC_sigma;
138 /* vertex correction */
139 // TZEROA += -TZEROvertexCorr * vertexz;
140 // TZEROC += TZEROvertexCorr * vertexz;
141 /* alignment to TOF */
142 TZEROA += TOF_TZEROA_mean - TOF_mean;
143 TZEROC += TOF_TZEROC_mean - TOF_mean;
144 /* TZEROAND */
145 Double_t TZEROAND = (TZEROA + TZEROC) * 0.5;
146 Bool_t hasTZEROAND = hasTZEROA && hasTZEROC;
147 /* TZEROTOF */
148 Double_t TZEROTOF = analysisEvent->GetTimeZeroTOF()[9];
149 Bool_t hasTZEROTOF = analysisEvent->GetTimeZeroTOFSigma()[9] < 150.;
150 TZEROTOF += TOF_TZEROTOF_mean - TOF_mean;
151
152 if (hasTZEROA) {
153 hCentrality_TZEROA->Fill(cent, TZEROA);
154 hVertex_TZEROA->Fill(vertexz, TZEROA);
155 }
156 if (hasTZEROC) {
157 hCentrality_TZEROC->Fill(cent, TZEROC);
158 hVertex_TZEROC->Fill(vertexz, TZEROC);
159 }
160 if (hasTZEROAND) {
161 hCentrality_TZEROAND->Fill(cent, TZEROAND);
162 hVertex_TZEROAND->Fill(vertexz, TZEROAND);
163 }
164 if (hasTZEROTOF) {
165 hCentrality_TZEROTOF->Fill(cent, TZEROTOF);
166 hVertex_TZEROTOF->Fill(vertexz, TZEROTOF);
167 }
168
169 if (hasTZEROA && hasTZEROC && hasTZEROAND && hasTZEROTOF) {
170 hCentrality_TZEROTOF_TZEROA->Fill(cent, TZEROTOF - TZEROA);
171 hCentrality_TZEROTOF_TZEROC->Fill(cent, TZEROTOF - TZEROC);
172 hCentrality_TZEROTOF_TZEROAND->Fill(cent, TZEROTOF - TZEROAND);
173 hCentrality_TZEROA_TZEROC->Fill(cent, TZEROA - TZEROC);
174 }
175
176 /* loop over tracks */
177 for (Int_t itrk = 0; itrk < analysisTrackArray->GetEntries(); itrk++) {
178 /* get track */
179 AliAnalysisTrack *analysisTrack = (AliAnalysisTrack *)analysisTrackArray->At(itrk);
180 if (!analysisTrack) continue;
181 /* check accepted track */
182 if (!analysisTrack->AcceptTrack()) continue;
183 /* check momentum */
184 if (analysisTrack->GetP() < 0.9 || analysisTrack->GetP() > 1.1) continue;
185 /* check TOF pid */
186 if (!analysisTrack->HasTOFPID()) continue;
187
188 TZEROTOF = analysisEvent->GetTimeZeroTOF(analysisTrack->GetP());
189 TZEROTOF += TOF_TZEROTOF_mean - TOF_mean;
190 hasTZEROTOF = analysisEvent->GetTimeZeroTOFSigma(analysisTrack->GetP()) < 150.;
191
192 Double_t time = analysisTrack->GetTOFTime() - TOF_mean;
193 Double_t texp = analysisTrack->GetTOFExpTime(2);
194 Double_t deltat = time - texp;
195
196
197 hCentrality_TOF->Fill(cent, deltat);
198 hVertex_TOF->Fill(vertexz, deltat);
199 if (hasTZEROA) {
200 hCentrality_TOF_TZEROA->Fill(cent, deltat - TZEROA);
201 hVertex_TOF_TZEROA->Fill(vertexz, deltat - TZEROA);
202 }
203 if (hasTZEROC) {
204 hCentrality_TOF_TZEROC->Fill(cent, deltat - TZEROC);
205 hVertex_TOF_TZEROC->Fill(vertexz, deltat - TZEROC);
206 }
207 if (hasTZEROAND) {
208 hCentrality_TOF_TZEROAND->Fill(cent, deltat - TZEROAND);
209 hVertex_TOF_TZEROAND->Fill(vertexz, deltat - TZEROAND);
210 }
211 if (hasTZEROTOF) {
212 hCentrality_TOF_TZEROTOF->Fill(cent, deltat - TZEROTOF);
213 hVertex_TOF_TZEROTOF->Fill(vertexz, deltat - TZEROTOF);
214 }
215
216 }
217
218 } /* end of loop over events */
219
220 /* output */
221 if (!calibfilename) TFile *fileout = TFile::Open(Form("TZEROcalib.%s", filename), "RECREATE");
222 else TFile *fileout = TFile::Open(Form("TZEROcheck.%s", filename), "RECREATE");
223
224 hCentrality->Write();
225 hCentrality_TZEROA->Write();
226 hCentrality_TZEROC->Write();
227 hCentrality_TZEROAND->Write();
228 hCentrality_TZEROTOF->Write();
229 hCentrality_TZERODIFF->Write();
230
231 hVertex_TZEROA->Write();
232 hVertex_TZEROC->Write();
233 hVertex_TZEROAND->Write();
234 hVertex_TZEROTOF->Write();
235 hVertex_TZERODIFF->Write();
236
237 hCentrality_TOF->Write();
238 hCentrality_TOF_TZEROA->Write();
239 hCentrality_TOF_TZEROC->Write();
240 hCentrality_TOF_TZEROAND->Write();
241 hCentrality_TOF_TZEROTOF->Write();
242 hCentrality_Resolution->Write();
243
244 hCentrality_TZEROTOF_TZEROA->Write();
245 hCentrality_TZEROTOF_TZEROC->Write();
246 hCentrality_TZEROTOF_TZEROAND->Write();
247 hCentrality_TZEROA_TZEROC->Write();
248
249 hVertex_TOF->Write();
250 hVertex_TOF_TZEROA->Write();
251 hVertex_TOF_TZEROC->Write();
252 hVertex_TOF_TZEROAND->Write();
253 hVertex_TOF_TZEROTOF->Write();
254
255 hResolution_TZERODIFF->Write();
256 hResolution_TOF_TZEROA->Write();
257 hResolution_TOF_TZEROC->Write();
258 hResolution_TOF_TZEROAND->Write();
259
260 hDiffDiff->Write();
261
262 fileout->Close();
263
264 if (!calibfilename) {
265 TZEROcalibration(Form("TZEROcalib.%s", filename));
266 TZEROcalib(filename, "TZEROcalibration.root");
267 TZEROresolution(Form("TZEROcheck.%s", filename));
268 }
269
270}
271
272TZEROcalibration(const Char_t *filename = "TZEROcalib.data.root", Float_t min = 2., Float_t max = 1.)
273{
274
275 gROOT->LoadMacro("FitPeak.C");
276
277 TFile *fin = TFile::Open(filename);
278 TH2 *hCentrality_TOF = (TH2 *)fin->Get("hCentrality_TOF");
279 TH2 *hCentrality_TZEROA = (TH2 *)fin->Get("hCentrality_TZEROA");
280 TH2 *hCentrality_TZEROC = (TH2 *)fin->Get("hCentrality_TZEROC");
281
282 TH2 *hCentrality_TOF_TZEROTOF = (TH2 *)fin->Get("hCentrality_TOF_TZEROTOF");
283 TH2 *hCentrality_TOF_TZEROA = (TH2 *)fin->Get("hCentrality_TOF_TZEROA");
284 TH2 *hCentrality_TOF_TZEROC = (TH2 *)fin->Get("hCentrality_TOF_TZEROC");
285 TH2 *hCentrality_TOF_TZEROTOF = (TH2 *)fin->Get("hCentrality_TOF_TZEROTOF");
286
287 TFile *fout = TFile::Open("TZEROcalibration.root", "RECREATE");
288 FitPeak(hCentrality_TOF, 200., 2., 1., "hCentrality_TOF")->Write();
289 FitPeak(hCentrality_TZEROA, 200., 2., 1., "hCentrality_TZEROA")->Write();
290 FitPeak(hCentrality_TZEROC, 200., 2., 1., "hCentrality_TZEROC")->Write();
291
292 FitPeak(hCentrality_TOF_TZEROA, 200., 2., 1., "hCentrality_TOF_TZEROA")->Write();
293 FitPeak(hCentrality_TOF_TZEROC, 200., 2., 1., "hCentrality_TOF_TZEROC")->Write();
294 FitPeak(hCentrality_TOF_TZEROTOF, 200., 2., 1., "hCentrality_TOF_TZEROTOF")->Write();
295
296 fout->Close();
297}
298
299TZEROresolution(const Char_t *filename, Float_t min = 2., Float_t max = 2., Char_t *what = "Centrality")
300{
301
302 TFile *fin = TFile::Open(filename);
303 hdiff = (TH2 *)fin->Get(Form("h%s_TZEROA_TZEROC", what));
304 hA = (TH2 *)fin->Get(Form("h%s_TZEROTOF_TZEROA", what));
305 hC = (TH2 *)fin->Get(Form("h%s_TZEROTOF_TZEROC", what));
306 hAND = (TH2 *)fin->Get(Form("h%s_TZEROTOF_TZEROAND", what));
307
308 gROOT->LoadMacro("FitPeak.C");
309
310
311 TH1 *hdiff_sigma = (TH1 *)FitPeak(hdiff, 100., min, max, "sigma1")->At(1);
312
313 TH1 *hA_sigma = (TH1 *)FitPeak(hA, 100., min, max, "sigma2")->At(1);
314
315 TH1 *hC_sigma = (TH1 *)FitPeak(hC, 100., min, max, "sigma3")->At(1);
316
317 TH1 *hAND_sigma = (TH1 *)FitPeak(hAND, 100., min, max, "sigma4")->At(1);
318
319 TH1 *hTZEROTOF_reso = (TH1 *)hdiff_sigma->Clone("hTZEROTOF_reso");
320 hTZEROTOF_reso->Reset();
321 hTZEROTOF_reso->SetMarkerStyle(20);
322 hTZEROTOF_reso->SetMarkerColor(2);
323 hTZEROTOF_reso->SetLineColor(2);
324 hTZEROTOF_reso->SetTitle("T0-TOF");
325 TH1 *hTZEROA_reso = (TH1 *)hdiff_sigma->Clone("hTZEROA_reso");
326 hTZEROA_reso->Reset();
327 hTZEROA_reso->SetMarkerStyle(21);
328 hTZEROA_reso->SetMarkerColor(8);
329 hTZEROA_reso->SetLineColor(8);
330 hTZEROA_reso->SetTitle("T0-TZEROA");
331 TH1 *hTZEROC_reso = (TH1 *)hdiff_sigma->Clone("hTZEROC_reso");
332 hTZEROC_reso->Reset();
333 hTZEROC_reso->SetMarkerStyle(22);
334 hTZEROC_reso->SetMarkerColor(4);
335 hTZEROC_reso->SetLineColor(4);
336 hTZEROC_reso->SetTitle("T0-TZEROC");
337 TH1 *hTZEROAND_reso = (TH1 *)hdiff_sigma->Clone("hTZEROAND_reso");
338 hTZEROAND_reso->Reset();
339 hTZEROAND_reso->SetMarkerStyle(23);
340 hTZEROAND_reso->SetMarkerColor(kYellow+1);
341 hTZEROAND_reso->SetLineColor(kYellow+1);
342 hTZEROAND_reso->SetTitle("T0-TZEROAND");
343
344 for (Int_t i = 0; i < hTZEROTOF_reso->GetNbinsX(); i++) {
345
346 Double_t diff = hdiff_sigma->GetBinContent(i+1);
347 Double_t diff_e = hdiff_sigma->GetBinError(i+1);
348 Double_t diff2 = diff*diff;
349 Double_t diff2_e = 2.*diff*diff_e;
350 Double_t a = hA_sigma->GetBinContent(i+1);
351 Double_t a_e = hA_sigma->GetBinError(i+1);
352 Double_t a2 = a*a;
353 Double_t a2_e = 2.*a*a_e;
354 Double_t c = hC_sigma->GetBinContent(i+1);
355 Double_t c_e = hC_sigma->GetBinError(i+1);
356 Double_t c2 = c*c;
357 Double_t c2_e = 2.*c*c_e;
358 Double_t ac = hAND_sigma->GetBinContent(i+1);
359 Double_t ac_e = hAND_sigma->GetBinError(i+1);
360 Double_t ac2 = ac*ac;
361 Double_t ac2_e = 2.*ac*ac_e;
362
363 if (diff == 0.) continue;
364 if (a2 + c2 - diff2 < 0.) continue;
365
366 printf("a=%f, c=%f, diff=%f, ac=%f\n", a, c, diff, ac);
367
368 Double_t tofreso2 = (a2 + c2 - diff2) * 0.5;
369 Double_t tofreso2_e = (a2_e + c2_e + diff2_e) * 0.5;
370 Double_t tofreso = TMath::Sqrt(tofreso2);
371 Double_t tofreso_e = tofreso2_e / (2. * tofreso);
372 hTZEROTOF_reso->SetBinContent(i+1, tofreso);
373 hTZEROTOF_reso->SetBinError(i+1, tofreso_e);
374
375 if (a2 - tofreso*tofreso < 0.) continue;
376 if (c2 - tofreso*tofreso < 0.) continue;
377 if (ac2 - tofreso*tofreso < 0.) continue;
378
379 Double_t tzeroareso2 = a2 - tofreso2;
380 Double_t tzeroareso2_e = a2_e + tofreso2_e;
381 Double_t tzeroareso = TMath::Sqrt(tzeroareso2);
382 Double_t tzeroareso_e = tzeroareso2_e / (2. * tzeroareso);
383 hTZEROA_reso->SetBinContent(i+1, tzeroareso);
384 hTZEROA_reso->SetBinError(i+1, tzeroareso_e);
385
386 Double_t tzerocreso2 = c2 - tofreso2;
387 Double_t tzerocreso2_e = c2_e + tofreso2_e;
388 Double_t tzerocreso = TMath::Sqrt(tzerocreso2);
389 Double_t tzerocreso_e = tzerocreso2_e / (2. * tzerocreso);
390 hTZEROC_reso->SetBinContent(i+1, tzerocreso);
391 hTZEROC_reso->SetBinError(i+1, tzerocreso_e);
392
393 Double_t tzeroacreso2 = ac2 - tofreso2;
394 Double_t tzeroacreso2_e = ac2_e + tofreso2_e;
395 Double_t tzeroacreso = TMath::Sqrt(tzeroacreso2);
396 Double_t tzeroacreso_e = tzeroacreso2_e / (2. * tzeroacreso);
397 hTZEROAND_reso->SetBinContent(i+1, tzeroacreso);
398 hTZEROAND_reso->SetBinError(i+1, tzeroacreso_e);
399
400 // Double_t tzerocreso = TMath::Sqrt(c2 - tofreso*tofreso);
401 // hTZEROC_reso->SetBinContent(i+1, tzerocreso);
402
403 // Double_t tzeroacreso = TMath::Sqrt(ac2 - tofreso*tofreso);
404 // hTZEROAND_reso->SetBinContent(i+1, tzeroacreso);
405
406 printf("TOF=%f, TZEROA=%f, TZEROC=%f, TZEROAND=%f\n", tofreso, tzeroareso, tzerocreso, tzeroacreso);
407 }
408
409 hTZEROTOF_reso->Draw();
410 hTZEROA_reso->Draw("same");
411 hTZEROC_reso->Draw("same");
412 hTZEROAND_reso->Draw("same");
413
414 TFile *fout = TFile::Open("TZEROresolution.root", "RECREATE");
415 hTZEROTOF_reso->Write();
416 hTZEROA_reso->Write();
417 hTZEROC_reso->Write();
418 hTZEROAND_reso->Write();
419 fout->Close();
420}