]>
Commit | Line | Data |
---|---|---|
5f9ad509 | 1 | /* |
2 | .L AliGenInfo.C+ | |
72008ac9 | 3 | .L TestAnalisys.C+ |
4 | AddChains(868); // AddChains(runNumber); | |
5f9ad509 | 5 | Select(); // make default selection of data |
83532bdf | 6 | MakePictures("pic868"); |
5f9ad509 | 7 | */ |
8 | ||
72008ac9 | 9 | #include "TFile.h" |
10 | #include "TTree.h" | |
11 | #include "TChain.h" | |
12 | #include "TString.h" | |
13 | #include "TLegend.h" | |
83532bdf | 14 | #include "TStyle.h" |
72008ac9 | 15 | #include "TCut.h" |
16 | #include "TF1.h" | |
17 | #include "TProfile.h" | |
18 | #include "TProfile2D.h" | |
19 | #include "TH1F.h" | |
20 | #include "TH2F.h" | |
21 | #include "TPad.h" | |
22 | #include "TCanvas.h" | |
23 | #include "TSystem.h" | |
24 | #include "TParticle.h" | |
25 | #include "TRandom.h" | |
26 | #include "TEventList.h" | |
27 | ||
28 | #include "AliTrackReference.h" | |
29 | #include "AliTPCParam.h" | |
30 | #include "AliDetector.h" | |
902526b1 | 31 | #include "AliStack.h" |
72008ac9 | 32 | #include "AliGenInfo.h" |
33 | ||
34 | ||
35 | ||
5f9ad509 | 36 | |
5f9ad509 | 37 | |
38 | ||
72008ac9 | 39 | void Select(); // make default selection |
83532bdf | 40 | void SelectLaser(); // make default selection for laser tracks |
41 | ||
72008ac9 | 42 | void AddChains(Int_t run); // add all the trees with selected run number to the chain |
43 | void MakePictures(char *dirname); // make default pictures | |
5f9ad509 | 44 | |
72008ac9 | 45 | void PRFYZ(TCut cut0, TCut cut1, char * description); |
46 | void PRFZZ(TCut cut0, TCut cut1, char * description); | |
47 | void P5Z(TCut cut0, TCut cut1, char * description); | |
48 | void P3Z(TCut cut0, TCut cut1, char * description); | |
49 | void ResYZ(TCut cut0, TCut cut1, char * description); | |
50 | void SysYX(TCut cut0, char * description); | |
51 | void SysZX(TCut cut0, char * description); | |
52 | // | |
53 | TProfile * ProfileMaxRow(TCut cut0, char *name, Int_t max); | |
54 | TProfile * ProfileMaxPhi(TCut cut0, char *name, Int_t max); | |
b2c02e7d | 55 | TProfile * ProfileMaxZ(TCut cut0, char *name, Int_t max); |
56 | TProfile * ProfileQRow(TCut cut0, char *name, Int_t max); | |
57 | TProfile * ProfileQPhi(TCut cut0, char *name, Int_t max); | |
72008ac9 | 58 | TProfile * ProfileQZ(TCut cut0, char *name, Int_t max); |
59 | TCanvas * NoiseSector(TCut cut0, char * description, Int_t maxrow, Int_t maxpad); | |
5f9ad509 | 60 | |
61 | // | |
62 | // global variables | |
63 | // | |
64 | TChain chaincl("Tracks","Tracks"); // tpc tracks and clusters | |
72008ac9 | 65 | TChain chaincl2("Tracks","Tracks"); // tpc tracks and clusters |
66 | TChain chainSignal("SignalB","SignalB"); // signals over threshold 50 | |
67 | ||
5f9ad509 | 68 | TChain chainFit("Fit","Fit"); // fitted signals with fit parameters |
69 | TChain chainPed("Fit","Fit"); // fitted pedestal with noise | |
72008ac9 | 70 | TString runDesc="Run "; // run descriptor |
5f9ad509 | 71 | // |
72 | AliComparisonDraw comp; | |
72008ac9 | 73 | AliComparisonDraw compCl; |
5f9ad509 | 74 | AliComparisonDraw compF; |
5f9ad509 | 75 | AliComparisonDraw compP; |
5f9ad509 | 76 | // |
77 | // | |
78 | // selection of data for analysis | |
79 | // | |
80 | TEventList * listTracks = new TEventList("listTracks","listTracks"); | |
81 | TEventList * listFitS = new TEventList("listFitS","listFitS"); | |
82 | TEventList * listFitPed = new TEventList("listFitPed","listFitPed"); | |
83 | ||
84 | ||
72008ac9 | 85 | |
86 | ||
87 | void MakePictures(char *dirname){ | |
88 | // | |
89 | // | |
90 | // | |
83532bdf | 91 | // Define Uli Style |
92 | gROOT->SetStyle("Plain"); | |
93 | gStyle->SetFillColor(10); | |
94 | gStyle->SetPadColor(10); | |
95 | gStyle->SetCanvasColor(10); | |
96 | gStyle->SetStatColor(10); | |
97 | ||
98 | gStyle->SetPalette(1,0); | |
99 | gStyle->SetNumberContours(50); | |
100 | // | |
72008ac9 | 101 | const Int_t kMinCl = 200; |
102 | char chshell[100]; | |
103 | sprintf(chshell,"mkdir %s", dirname); | |
104 | gSystem->Exec(chshell); | |
105 | sprintf(chshell,"cd %s", dirname); | |
106 | gSystem->Exec(chshell); | |
107 | // | |
108 | // | |
109 | // | |
110 | TCanvas c(dirname,dirname); | |
111 | for (Int_t isector=0; isector<36; isector++){ | |
112 | char chcut1[100]; | |
113 | char chcut2[100]; | |
114 | char chdesc[100]; | |
115 | TProfile * prof; | |
116 | sprintf(chshell,"Cl.fX>0&&Cl.fDetector==%d",isector); | |
117 | Int_t ncl = comp.fTree->Draw("Cl.fY",chshell); | |
118 | if (ncl<kMinCl) continue; | |
119 | printf("MakePictures sector %d\n",isector); | |
120 | // | |
121 | // charge pictures | |
122 | // | |
123 | // | |
124 | // charge row | |
125 | // | |
126 | c.cd(); | |
127 | sprintf(chdesc,"%s Sector %d IROC",runDesc.Data(), isector); | |
128 | sprintf(chcut1,"Cl.fDetector==%d", isector); | |
b2c02e7d | 129 | prof = ProfileQRow(chcut1, chdesc, 70); |
72008ac9 | 130 | sprintf(chshell,"%s/qrow_sec%dIROC.eps", dirname,isector); |
131 | prof->Draw(); | |
132 | c.Update(); | |
133 | c.Print(chshell); | |
b2c02e7d | 134 | prof = ProfileMaxRow(chcut1, chdesc, 70); |
135 | sprintf(chshell,"%s/maxrow_sec%dIROC.eps", dirname,isector); | |
136 | prof->Draw(); | |
137 | c.Update(); | |
138 | c.Print(chshell); | |
72008ac9 | 139 | // |
140 | sprintf(chdesc,"%s Sector %d OROC",runDesc.Data(), isector); | |
141 | sprintf(chcut1,"Cl.fDetector==%d", isector+36); | |
b2c02e7d | 142 | prof = ProfileQRow(chcut1, chdesc, 100); |
72008ac9 | 143 | sprintf(chshell,"%s/qrow_sec%dOROC.eps", dirname,isector); |
144 | prof->Draw(); | |
145 | c.Update(); | |
146 | c.Print(chshell); | |
b2c02e7d | 147 | prof = ProfileMaxRow(chcut1, chdesc, 100); |
148 | sprintf(chshell,"%s/maxrow_sec%dOROC.eps", dirname,isector); | |
149 | prof->Draw(); | |
150 | c.Update(); | |
151 | c.Print(chshell); | |
72008ac9 | 152 | // |
153 | // charge phi | |
154 | // | |
155 | sprintf(chdesc,"%s Sector %d IROC",runDesc.Data(), isector); | |
156 | sprintf(chcut1,"Cl.fDetector==%d", isector); | |
157 | prof = ProfileMaxPhi(chcut1, chdesc,20); | |
158 | sprintf(chshell,"%s/qphi_sec%dIROC.eps", dirname,isector); | |
159 | prof->Draw(); | |
160 | c.Update(); | |
161 | c.Print(chshell); | |
162 | // | |
163 | sprintf(chdesc,"%s Sector %d OROC",runDesc.Data(), isector); | |
164 | sprintf(chcut1,"Cl.fDetector==%d", isector+36); | |
165 | prof = ProfileMaxPhi(chcut1, chdesc,20); | |
166 | sprintf(chshell,"%s/qphi_sec%dOROC.eps", dirname,isector); | |
167 | prof->Draw(); | |
168 | c.Update(); | |
169 | c.Print(chshell); | |
170 | // | |
171 | // charge z | |
172 | // | |
3a29db26 | 173 | c.cd(); |
72008ac9 | 174 | sprintf(chdesc,"%s Sector %d IROC",runDesc.Data(), isector); |
175 | sprintf(chcut1,"Cl.fDetector==%d", isector); | |
176 | prof = ProfileQZ(chcut1, chdesc,20); | |
177 | sprintf(chshell,"%s/qz_sec%dIROC.eps", dirname,isector); | |
3a29db26 | 178 | // prof->Draw(); |
72008ac9 | 179 | c.Update(); |
180 | c.Print(chshell); | |
181 | // | |
3a29db26 | 182 | c.cd(); |
72008ac9 | 183 | sprintf(chdesc,"%s Sector %d OROC",runDesc.Data(), isector); |
184 | sprintf(chcut1,"Cl.fDetector==%d", isector+36); | |
185 | prof = ProfileQZ(chcut1, chdesc,20); | |
186 | sprintf(chshell,"%s/qz_sec%dOROC.eps", dirname,isector); | |
3a29db26 | 187 | //prof->Draw(); |
72008ac9 | 188 | c.Update(); |
189 | c.Print(chshell); | |
190 | // | |
191 | // Picture noise | |
192 | // | |
193 | sprintf(chdesc,"%s Sector %d IROC",runDesc.Data(), isector); | |
194 | sprintf(chcut1,"Sector==%d", isector); | |
195 | TCanvas *cnoise = NoiseSector(chcut1, chdesc,70,70); | |
196 | sprintf(chshell,"%s/noise_sec%dIROC.eps", dirname,isector); | |
197 | cnoise->Print(chshell); | |
198 | sprintf(chdesc,"%s Sector %d OROC",runDesc.Data(), isector); | |
199 | sprintf(chcut1,"Sector==%d", isector+36); | |
200 | cnoise = NoiseSector(chcut1, chdesc,70,70); | |
201 | sprintf(chshell,"%s/noise_sec%dOROC.eps", dirname,isector); | |
202 | cnoise->Print(chshell); | |
203 | // | |
204 | // systematic | |
205 | // | |
206 | c.cd(); | |
207 | sprintf(chdesc,"%s Sector %d",runDesc.Data(), isector); | |
208 | sprintf(chcut1,"Cl.fDetector==%d||Cl.fDetector==%d", isector, isector+36); | |
209 | SysYX(chcut1,chdesc); | |
210 | sprintf(chshell,"%s/deltayx_sec%d.eps", dirname,isector); | |
211 | c.Print(chshell); | |
b2c02e7d | 212 | c.cd(); |
72008ac9 | 213 | SysZX(chcut1,chdesc); |
214 | sprintf(chshell,"%s/deltazx_sec%d.eps", dirname,isector); | |
215 | c.Print(chshell); | |
216 | ||
217 | // | |
218 | // picture prf | |
219 | // | |
220 | if (ncl<500) continue; //not enough statistic | |
221 | // | |
222 | sprintf(chdesc,"%s Sector %d",runDesc.Data(), isector); | |
223 | sprintf(chcut1,"Cl.fDetector==%d", isector); | |
224 | sprintf(chcut2,"Cl.fDetector==%d", isector+36); | |
225 | c.cd(); | |
226 | PRFYZ(chcut1, chcut2,chdesc); | |
227 | sprintf(chshell,"%s/prfyz_sec%d.eps", dirname,isector); | |
228 | c.Print(chshell); | |
229 | sprintf(chcut1,"Sector==%d", isector); | |
230 | sprintf(chcut2,"Sector==%d", isector+36); | |
231 | PRFZZ(chcut1, chcut2,chdesc); | |
232 | sprintf(chshell,"%s/prfzz_sec%d.eps", dirname,isector); | |
233 | c.Print(chshell); | |
234 | // | |
235 | // y resolution | |
236 | // | |
237 | sprintf(chdesc,"%s Sector %d",runDesc.Data(), isector); | |
238 | sprintf(chcut1,"Cl.fDetector==%d", isector); | |
239 | sprintf(chcut2,"Cl.fDetector==%d", isector+36); | |
240 | c.cd(); | |
241 | ResYZ(chcut1, chcut2,chdesc); | |
242 | sprintf(chshell,"%s/resyz_sec%d.eps", dirname,isector); | |
243 | c.Print(chshell); | |
244 | // | |
245 | } | |
246 | } | |
247 | ||
248 | ||
249 | ||
250 | ||
251 | ||
252 | ||
5f9ad509 | 253 | void AddChains(Int_t run){ |
254 | // | |
72008ac9 | 255 | // add files to the chains + check consistency |
5f9ad509 | 256 | // |
257 | ifstream in0; | |
258 | ifstream in1; | |
259 | ifstream in2; | |
72008ac9 | 260 | ifstream in3; |
261 | ifstream in4; | |
5f9ad509 | 262 | TString sfile; |
263 | char strcl[100]; | |
72008ac9 | 264 | runDesc+=run; |
5f9ad509 | 265 | // TPC tracks |
266 | // | |
20ff331b | 267 | sprintf(strcl,"ls *%d*/TPCtracks.root > files.txt", run); |
5f9ad509 | 268 | gSystem->Exec(strcl); |
20ff331b | 269 | in0.open("files.txt"); |
5f9ad509 | 270 | for (;in0>>sfile;){ |
271 | if (sfile.Length()==0) break; | |
272 | printf("%s\n",sfile.Data()); | |
72008ac9 | 273 | TFile f(sfile.Data()); |
274 | TTree * tree = (TTree*)f.Get("Tracks"); | |
275 | if (tree){ | |
276 | f.Close(); | |
277 | chaincl.Add(sfile.Data()); | |
278 | } | |
5f9ad509 | 279 | } |
280 | // | |
281 | // Fitted signals | |
20ff331b | 282 | sprintf(strcl,"ls *%d*/FitSignal.root > files.txt", run); |
5f9ad509 | 283 | gSystem->Exec(strcl); |
20ff331b | 284 | in1.open("files.txt"); |
5f9ad509 | 285 | for (;in1>>sfile;){ |
286 | if (sfile.Length()==0) break; | |
72008ac9 | 287 | printf("%s\n",sfile.Data()); |
288 | TFile f(sfile.Data()); | |
289 | TTree * tree =(TTree*)f.Get("Fit"); | |
290 | if (tree){ | |
291 | f.Close(); | |
292 | chainFit.Add(sfile.Data()); | |
293 | } | |
5f9ad509 | 294 | } |
295 | // | |
296 | // Fitted pedestal | |
20ff331b | 297 | sprintf(strcl,"ls *%d*/TPCsignal.root > files.txt", run); |
5f9ad509 | 298 | gSystem->Exec(strcl); |
20ff331b | 299 | in2.open("files.txt"); |
5f9ad509 | 300 | for (;in2>>sfile;){ |
301 | if (sfile.Length()==0) break; | |
302 | printf("%s\n",sfile.Data()); | |
72008ac9 | 303 | TFile f(sfile.Data()); |
304 | TTree * tree =(TTree*)f.Get("Fit"); | |
305 | if (tree){ | |
306 | f.Close(); | |
307 | chainPed.Add(sfile.Data()); | |
308 | } | |
309 | // chainPed.Add(sfile.Data()); | |
310 | } | |
311 | // | |
83532bdf | 312 | // Random signals |
20ff331b | 313 | sprintf(strcl,"ls *%d*/TPCsignal.root > files.txt", run); |
72008ac9 | 314 | gSystem->Exec(strcl); |
20ff331b | 315 | in4.open("files.txt"); |
72008ac9 | 316 | for (;in4>>sfile;){ |
317 | if (sfile.Length()==0) break; | |
318 | printf("%s\n",sfile.Data()); | |
319 | TFile f(sfile.Data()); | |
320 | TTree * tree =(TTree*)f.Get("SignalB"); | |
321 | if (tree){ | |
322 | f.Close(); | |
83532bdf | 323 | chainSignal.Add(sfile.Data()); |
72008ac9 | 324 | } |
325 | // chainPed.Add(sfile.Data()); | |
326 | } | |
327 | // | |
328 | // Rec points trees | |
329 | // | |
330 | printf("\n IMPORT REC points"); | |
20ff331b | 331 | sprintf(strcl,"ls *%d*/*RecPoints* > files.txt", run); |
72008ac9 | 332 | gSystem->Exec(strcl); |
20ff331b | 333 | in3.open("files.txt"); |
72008ac9 | 334 | for (;in3>>sfile;){ |
335 | if (sfile.Length()==0) break; | |
336 | printf("%s\n",sfile.Data()); | |
337 | TFile fcl(sfile.Data()); | |
338 | char tname[100]; | |
339 | sprintf(tname,"%s/%s/TreeR",sfile.Data(),fcl.GetListOfKeys()->At(0)->GetName()); | |
340 | chaincl2.Add(tname); | |
341 | // chainPed.Add(sfile.Data()); | |
5f9ad509 | 342 | } |
72008ac9 | 343 | |
344 | comp.fTree = &chaincl; | |
345 | compF.fTree = &chainFit; | |
346 | compP.fTree = &chainPed; | |
5f9ad509 | 347 | } |
348 | ||
349 | void Select(){ | |
350 | // | |
351 | // base cut on the tracks | |
352 | // | |
20ff331b | 353 | comp.fTree->Draw(">>listTracks","Etrack.fTPCncls>30&&abs(Etrack.fIp.fP[4])<1"); |
5f9ad509 | 354 | comp.fTree->SetEventList(listTracks); |
355 | // | |
72008ac9 | 356 | compF.fTree->Draw(">>listFitS","p2>0&&p2<5&&p1<900&&p0<10000&&p4<1&&p4>0&&p5<p3&&chi2<150"); |
357 | compF.fTree->SetEventList(listFitS); | |
5f9ad509 | 358 | } |
359 | ||
83532bdf | 360 | void SelectLaser(){ |
361 | // | |
362 | // base cut on the tracks | |
363 | // | |
20ff331b | 364 | comp.fTree->Draw(">>listTracks","Etrack.fTPCncls>20&&abs(Etrack.fIp.fP[4])<1&&abs(Etrack.fIp.fP[3])<0.01"); |
83532bdf | 365 | comp.fTree->SetEventList(listTracks); |
366 | // | |
367 | compF.fTree->Draw(">>listFitS","p2>0&&p2<5&&p1<900&&p0<10000&&p4<1&&p4>0&&p5<p3&&chi2<150"); | |
368 | compF.fTree->SetEventList(listFitS); | |
369 | // | |
370 | // make default aliases | |
371 | // | |
372 | // laser z beam | |
20ff331b | 373 | comp.fTree->SetAlias("lz0","abs(Etrack.fIp.fP[1]-20)<5"); |
374 | comp.fTree->SetAlias("lz1","abs(Etrack.fIp.fP[1]-70)<20"); | |
375 | comp.fTree->SetAlias("lz2","abs(Etrack.fIp.fP[1]-150)<20"); | |
376 | comp.fTree->SetAlias("lz3","abs(Etrack.fIp.fP[1]-210)<20"); | |
83532bdf | 377 | |
378 | } | |
379 | ||
5f9ad509 | 380 | |
381 | ||
382 | void PRFYZ(TCut cut0, TCut cut1, char * description){ | |
383 | // | |
384 | // plot Pad response function as funtion of drift z | |
385 | // | |
386 | // | |
387 | TF1 * f1 = new TF1("fdiff","sqrt([0]*[0]+(250-x)*[1]*[1])"); | |
388 | f1->SetParameter(1,0.2); | |
389 | f1->SetParameter(0,0.2); | |
902526b1 | 390 | comp.DrawXY("abs(Cl.fZ)","sqrt(Cl.fSigmaY2)","abs(Track.fTrackPoints.GetAngleY())<0.05","Track.fTrackPoints.fTX>0"+cut0,5,10,240,-0,1); |
5f9ad509 | 391 | TH1F * prfInnerY = (TH1F*)comp.fMean->Clone(); |
392 | ||
902526b1 | 393 | comp.DrawXY("abs(Cl.fZ)","sqrt(Cl.fSigmaY2)","abs(Track.fTrackPoints.GetAngleY())<0.05","Track.fTrackPoints.fTX>0"+cut1,5,10,240,-0,1); |
5f9ad509 | 394 | TH1F * prfOuterY = (TH1F*)comp.fMean->Clone(); |
395 | // | |
396 | // | |
397 | prfOuterY->SetMinimum(0); | |
398 | prfOuterY->SetMarkerStyle(23); | |
399 | prfInnerY->SetMarkerStyle(24); | |
400 | prfOuterY->SetXTitle("Z position (cm)"); | |
401 | prfOuterY->SetYTitle("PRF width (cm)"); | |
402 | char chouter[100]; | |
403 | char chinner[100]; | |
404 | prfOuterY->Fit(f1); | |
405 | sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1)); | |
406 | prfInnerY->Fit(f1); | |
407 | sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1)); | |
408 | prfOuterY->Draw(); | |
409 | prfInnerY->Draw("same"); | |
410 | TString desc = description; | |
411 | TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, desc+"\nTPC cluster shape Fit: #sigma = #sqrt{p_{0}^{2}+(z_{d}-z)p_{1}^{2}}"); | |
412 | legend->SetBorderSize(1); | |
413 | legend->AddEntry(prfOuterY,chouter); | |
414 | legend->AddEntry(prfInnerY,chinner); | |
415 | legend->Draw(); | |
416 | } | |
417 | ||
418 | ||
72008ac9 | 419 | |
420 | void PRFZZ(TCut cut0, TCut cut1, char * description){ | |
421 | TF1 * f1 = new TF1("fdiff","sqrt([0]*[0]+x*[1]*[1])"); | |
422 | f1->SetParameter(1,0.2); | |
423 | f1->SetParameter(0,0.2); | |
424 | compF.DrawXY("p1*0.285","p2*0.285","p2>0",cut0,8,20,250,-0,2); | |
425 | TH1F * prfInnerY = (TH1F*)compF.fMean->Clone(); | |
426 | compF.DrawXY("p1*0.285","p2*0.285","p2>0",cut1,8,20,250,-0,2); | |
427 | TH1F * prfOuterY = (TH1F*)compF.fMean->Clone(); | |
428 | // | |
429 | // | |
430 | prfOuterY->SetMinimum(0); | |
431 | prfOuterY->SetMarkerStyle(23); | |
432 | prfInnerY->SetMarkerStyle(24); | |
433 | prfOuterY->SetXTitle("Drift length(cm)"); | |
434 | prfOuterY->SetYTitle("Z Sigma (cm)"); | |
435 | char chouter[100]; | |
436 | char chinner[100]; | |
437 | prfOuterY->Fit(f1); | |
438 | sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1)); | |
439 | prfInnerY->Fit(f1); | |
440 | sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1)); | |
441 | prfOuterY->Draw(); | |
442 | prfInnerY->Draw("same"); | |
443 | TString desc = description; | |
444 | TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, desc+"TPC signal shape Fit: #sigma = #sqrt{p_{0}^{2}+(z)p_{1}^{2}}"); | |
445 | legend->SetBorderSize(1); | |
446 | legend->AddEntry(prfOuterY,chouter); | |
447 | legend->AddEntry(prfInnerY,chinner); | |
448 | legend->Draw(); | |
449 | } | |
450 | ||
451 | ||
5f9ad509 | 452 | void ResYZ(TCut cut0, TCut cut1, char * description){ |
453 | // | |
454 | // resolution in y coordinate as function of z | |
455 | // | |
456 | TF1 * f1 = new TF1("fdiff","sqrt([0]*[0]+(250-x)*[1]*[1])"); | |
457 | f1->SetParameter(1,0.2); | |
458 | f1->SetParameter(0,0.2); | |
902526b1 | 459 | comp.DrawXY("abs(Cl.fZ)","Track.fTrackPoints.GetY()-Cl.GetY()","abs(Track.fTrackPoints.GetAngleY())<0.05","Track.fTrackPoints.fTX>0"+cut0,5,10,240,-0.5,0.5); |
5f9ad509 | 460 | TH1F * prfInnerY = (TH1F*)comp.fRes->Clone(); |
461 | ||
902526b1 | 462 | comp.DrawXY("abs(Cl.fZ)","Track.fTrackPoints.GetY()-Cl.GetY()","abs(Track.fTrackPoints.GetAngleY())<0.05","Track.fTrackPoints.fTX>0"+cut1,5,10,240,-0.5,0.5); |
5f9ad509 | 463 | TH1F * prfOuterY = (TH1F*)comp.fRes->Clone(); |
464 | // | |
465 | // | |
466 | prfOuterY->SetMinimum(0); | |
467 | prfOuterY->SetMaximum(0.15); | |
468 | prfOuterY->SetMarkerStyle(23); | |
469 | prfInnerY->SetMarkerStyle(24); | |
470 | prfOuterY->SetXTitle("Z position (cm)"); | |
471 | prfOuterY->SetYTitle("Y resolution (cm)"); | |
472 | char chouter[100]; | |
473 | char chinner[100]; | |
474 | prfOuterY->Fit(f1); | |
475 | sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1)); | |
476 | prfInnerY->Fit(f1); | |
477 | sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1)); | |
478 | prfOuterY->Draw(); | |
479 | prfInnerY->Draw("same"); | |
480 | TString desc = description; | |
481 | TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, desc+"TPC cluster resolution: #sigma = #sqrt{p_{0}^{2}+(z_{d}-z)p_{1}^{2}}"); | |
482 | legend->SetBorderSize(1); | |
483 | legend->AddEntry(prfOuterY,chouter); | |
484 | legend->AddEntry(prfInnerY,chinner); | |
485 | legend->Draw(); | |
486 | } | |
487 | ||
72008ac9 | 488 | void SysYX(TCut cut0, char * description){ |
489 | // | |
490 | // | |
491 | // | |
492 | TProfile * profA = new TProfile("profY","profY",70,89,250); | |
493 | comp.fTree->Draw("Cl.fY-Track.fTrackPoints.GetY():Track.fTrackPoints.GetX()>>profY","abs(Cl.fY-Track.fTrackPoints.GetY())<1&&Track.fTrackPoints.fTX>10"+cut0,"prof"); | |
494 | profA->SetXTitle("Local X (cm)"); | |
495 | profA->SetYTitle("Mean #Delta Y (cm)"); | |
496 | TLegend *legend = new TLegend(0.55,0.25,0.85,0.30, description); | |
497 | legend->Draw(); | |
498 | } | |
499 | ||
500 | void SysZX(TCut cut0, char * description){ | |
501 | // | |
502 | // | |
503 | // | |
504 | TProfile * profA = new TProfile("profZ","profZ",70,89,250); | |
902526b1 | 505 | comp.fTree->Draw("abs(Cl.fZ)-abs(Track.fTrackPoints.GetZ()):Track.fTrackPoints.GetX()>>profZ","abs(abs(Cl.fZ)-abs(Track.fTrackPoints.GetZ()))<1&&Track.fTrackPoints.fTX>10"+cut0,"prof"); |
72008ac9 | 506 | profA->SetXTitle("Local X (cm)"); |
507 | profA->SetYTitle("Mean #Delta Z (cm)"); | |
508 | TLegend *legend = new TLegend(0.55,0.25,0.85,0.30, description); | |
509 | legend->Draw(); | |
510 | } | |
5f9ad509 | 511 | |
72008ac9 | 512 | TProfile * ProfileMaxRow(TCut cut0, char *name, Int_t max){ |
5f9ad509 | 513 | // |
514 | // make profile histrogram of amplitudes | |
515 | // | |
516 | TProfile *profA = new TProfile(name,name,max,0,max-1); | |
517 | char expr[100]; | |
518 | sprintf(expr,"Cl.fMax:Cl.fRow>>%s",name); | |
902526b1 | 519 | comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof"); |
5f9ad509 | 520 | profA->SetXTitle("Pad Row"); |
b2c02e7d | 521 | profA->SetYTitle("Amplitude at maxima (ADC)"); |
5f9ad509 | 522 | return profA; |
523 | } | |
72008ac9 | 524 | |
525 | TProfile * ProfileMaxPhi(TCut cut0, char *name, Int_t max){ | |
526 | // | |
527 | // make profile histrogram of amplitudes | |
528 | // | |
529 | TProfile *profA = new TProfile(name,name,max,-0.14,0.14); | |
530 | char expr[100]; | |
531 | sprintf(expr,"Cl.fMax:Cl.fY/Cl.fX>>%s",name); | |
902526b1 | 532 | comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof"); |
72008ac9 | 533 | profA->SetXTitle("Local #phi(rad)"); |
b2c02e7d | 534 | profA->SetYTitle("Amplitude at maxima (ADC)"); |
902526b1 | 535 | return profA; |
b2c02e7d | 536 | } |
537 | ||
538 | TProfile * ProfileQRow(TCut cut0, char *name, Int_t max){ | |
539 | // | |
540 | // make profile histrogram of amplitudes | |
541 | // | |
542 | TProfile *profA = new TProfile(name,name,max,0,max-1); | |
543 | char expr[100]; | |
544 | sprintf(expr,"Cl.fQ:Cl.fRow>>%s",name); | |
902526b1 | 545 | comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof"); |
b2c02e7d | 546 | profA->SetXTitle("Pad Row"); |
547 | profA->SetYTitle("Total charge(ADC)"); | |
548 | return profA; | |
549 | } | |
550 | ||
551 | TProfile * ProfileQPhi(TCut cut0, char *name, Int_t max){ | |
552 | // | |
553 | // make profile histrogram of amplitudes | |
554 | // | |
555 | TProfile *profA = new TProfile(name,name,max,-0.14,0.14); | |
556 | char expr[100]; | |
557 | sprintf(expr,"Cl.fQ:Cl.fY/Cl.fX>>%s",name); | |
902526b1 | 558 | comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof"); |
b2c02e7d | 559 | profA->SetXTitle("Local #phi(rad)"); |
560 | profA->SetYTitle("Total charge (ADC)"); | |
72008ac9 | 561 | return profA; |
562 | } | |
563 | ||
564 | TProfile * ProfileQZ(TCut cut0, char *name, Int_t max){ | |
565 | // | |
566 | // make profile histrogram of amplitudes | |
567 | // | |
3a29db26 | 568 | TF1 * fline = new TF1("fline","[0]+[1]*[0]*(250-x)"); |
569 | TF1 * f1 = new TF1("f1","[0]*exp(-[1]*(250-x))"); | |
72008ac9 | 570 | TProfile *profA = new TProfile(name,name,max,0,250); |
571 | char expr[100]; | |
902526b1 | 572 | sprintf(expr,"Cl.fQ:abs(Cl.fZ)>>%s",name); |
573 | comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof"); | |
72008ac9 | 574 | profA->SetXTitle("Z position (cm)"); |
575 | profA->SetYTitle("Amplitude (ADC)"); | |
576 | char chc[100]; | |
3a29db26 | 577 | profA->Fit(fline); |
578 | f1->SetParameter(0,fline->GetParameter(0)); | |
579 | f1->SetParameter(1,fline->GetParameter(1)); | |
72008ac9 | 580 | profA->Fit(f1); |
3a29db26 | 581 | sprintf(chc,"Exponential fit params: p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1)); |
582 | printf("%s",chc); | |
583 | TLegend *legend = new TLegend(0.25,0.12,0.85,0.25, chc); | |
72008ac9 | 584 | legend->Draw(); |
585 | return profA; | |
586 | } | |
587 | ||
b2c02e7d | 588 | TProfile * ProfileMaxZ(TCut cut0, char *name, Int_t max){ |
589 | // | |
590 | // make profile histrogram of amplitudes | |
591 | // | |
592 | TF1 * f1 = new TF1("f1","[0]+[1]*[0]*(250-x)"); | |
593 | TProfile *profA = new TProfile(name,name,max,0,250); | |
594 | char expr[100]; | |
902526b1 | 595 | sprintf(expr,"Cl.fMax:abs(Cl.fZ)>>%s",name); |
596 | comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof"); | |
b2c02e7d | 597 | profA->SetXTitle("Z position (cm)"); |
598 | profA->SetYTitle("Amplitude at maxima (ADC)"); | |
599 | char chc[100]; | |
600 | profA->Fit(f1); | |
601 | sprintf(chc,"p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1)); | |
602 | TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, chc); | |
603 | legend->Draw(); | |
604 | return profA; | |
605 | } | |
606 | ||
72008ac9 | 607 | |
608 | void P3Z(TCut cut0, TCut cut1, char * description){ | |
609 | // | |
610 | // first exponenent as function of z drift | |
611 | // | |
612 | TF1 * f1 = new TF1("fdiff","[0]+[1]/[0]*x"); | |
613 | f1->SetParameter(1,0.2); | |
614 | f1->SetParameter(0,0.2); | |
615 | compF.DrawXY("p1*0.285","p3","Max>250",cut0,5,20,250,-0,2); | |
616 | TH1F * prfInnerY = (TH1F*)compF.fMean->Clone(); | |
617 | compF.DrawXY("p1*0.285","p3","Max>250",cut1,5,20,250,-0,2); | |
618 | TH1F * prfOuterY = (TH1F*)compF.fMean->Clone(); | |
619 | // | |
620 | // | |
621 | prfOuterY->SetMinimum(0); | |
622 | prfOuterY->SetMaximum(1); | |
623 | prfOuterY->SetMarkerStyle(23); | |
624 | prfInnerY->SetMarkerStyle(24); | |
625 | prfOuterY->SetXTitle("Drift length (cm)"); | |
626 | prfOuterY->SetYTitle("Lambda 0 (Time Bin)"); | |
627 | char chouter[100]; | |
628 | char chinner[100]; | |
629 | prfOuterY->Fit(f1); | |
630 | sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1)); | |
631 | prfInnerY->Fit(f1); | |
632 | sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1)); | |
633 | prfOuterY->Draw(); | |
634 | prfInnerY->Draw("same"); | |
635 | TString desc = description; | |
636 | TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, desc+"TPC cluster shape fit Parameter Lambda0 - P3:"); | |
637 | legend->SetBorderSize(1); | |
638 | legend->AddEntry(prfOuterY,chouter); | |
639 | legend->AddEntry(prfInnerY,chinner); | |
640 | legend->Draw(); | |
641 | } | |
642 | ||
643 | ||
644 | void P5Z(TCut cut0, TCut cut1, char * description){ | |
645 | // | |
646 | // second exponenent as function of z drift | |
647 | // | |
648 | TF1 * f1 = new TF1("fdiff","[0]+[1]/[0]*x"); | |
649 | f1->SetParameter(1,0.2); | |
650 | f1->SetParameter(0,0.2); | |
651 | compF.DrawXY("p1*0.285","p5","Max>250",cut0,5,20,250,-0,0.2); | |
652 | TH1F * prfInnerY = (TH1F*)compF.fMean->Clone(); | |
653 | compF.DrawXY("p1*0.285","p5","Max>250",cut1,5,20,250,-0,0.2); | |
654 | TH1F * prfOuterY = (TH1F*)compF.fMean->Clone(); | |
655 | // | |
656 | // | |
657 | prfOuterY->SetMinimum(0); | |
658 | prfOuterY->SetMaximum(0.15); | |
659 | prfOuterY->SetMarkerStyle(23); | |
660 | prfInnerY->SetMarkerStyle(24); | |
661 | prfOuterY->SetXTitle("Drift length (Time Bin)"); | |
662 | prfOuterY->SetYTitle("Lambda1 (Time bin)"); | |
663 | char chouter[100]; | |
664 | char chinner[100]; | |
665 | prfOuterY->Fit(f1); | |
666 | sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1)); | |
667 | prfInnerY->Fit(f1); | |
668 | sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1)); | |
669 | prfOuterY->Draw(); | |
670 | prfInnerY->Draw("same"); | |
671 | TString desc = description; | |
672 | TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, desc+"TPC cluster shape fit Parameter Lambda1 - P5"); | |
673 | legend->SetBorderSize(1); | |
674 | legend->AddEntry(prfOuterY,chouter); | |
675 | legend->AddEntry(prfInnerY,chinner); | |
676 | legend->Draw(); | |
677 | } | |
678 | ||
679 | TCanvas * NoiseSector(TCut cut0, char * description, Int_t maxrow, Int_t maxpad){ | |
680 | // | |
681 | // draw plots of the noise | |
682 | // | |
683 | TCanvas * c = new TCanvas; | |
684 | c->Divide(2,1); | |
685 | c->Draw(); | |
686 | c->cd(1); | |
687 | compP.fTree->Draw("GSigma","GSigma<5"+cut0); | |
688 | c->cd(2); | |
689 | Float_t rand = gRandom->Rndm(); | |
690 | char name[100]; | |
691 | sprintf(name,"prof%f",rand); | |
692 | TProfile2D * prof= new TProfile2D(name,name,maxrow, 0, maxrow-1, 2*maxpad,-maxpad,maxpad); | |
693 | char expr[100]; | |
694 | sprintf(expr,"GSigma:RPad:Row>>%s",name); | |
695 | prof->SetXTitle("Pad row"); | |
696 | prof->SetYTitle("Pad number"); | |
697 | compP.fTree->Draw(expr,cut0,"profcolz"); | |
698 | c->cd(1); | |
699 | TString desc = description; | |
700 | TLegend *legend = new TLegend(0.25,0.30,0.85,0.85, desc+"Noise map"); | |
701 | legend->Draw(); | |
702 | ||
703 | return c; | |
704 | } | |
83532bdf | 705 | |
706 |