]>
Commit | Line | Data |
---|---|---|
eeca88a1 | 1 | /* |
2 | Make a TPC basic calibration trend plots: | |
3 | Input - calibTime.root tree with summary info per run expected to be in the local directory | |
4 | - optional parameters run range can be specified - startRun -endRun | |
5 | Output - default plots are saved in the pwd/pic/ | |
6 | macro to define the picture style (NimStyle.C) expected to be in the current directory | |
7 | ||
8 | ||
9 | Example usage: | |
10 | ||
11 | aliroot -b -q /u/miranov/AliRoot/trunk/TPC/scripts/OCDBscan/makeTPCTrendPlots.C | |
12 | ||
13 | */ | |
14 | ||
15 | TTree * tree=0; | |
16 | const Double_t kmin=0.01; | |
17 | const Double_t kmax=0.99; | |
18 | const Double_t kEpsilon=0.0000001; | |
19 | Int_t run0=0; // value to set from outside | |
20 | Int_t run1=10000000; // vaue to set from outside | |
21 | ||
22 | void makeTPCTrendPlots(Int_t startRun=0, Int_t endRun=1000000){ | |
23 | // | |
24 | // make trend plots of the basic TPC calibration parameters | |
25 | // | |
26 | run0=startRun; | |
27 | run1=endRun; | |
28 | gROOT->Macro("NimStyle.C"); | |
29 | TFile f("calibTime.root"); | |
30 | tree = (TTree*)f.Get("dcs"); | |
31 | tree->SetMarkerStyle(25); | |
32 | tree->SetMarkerSize(0.4); | |
33 | gStyle->SetMarkerSize(0.4); | |
34 | tree->SetAlias("isValidITS","abs(dits)<3600"); | |
35 | tree->SetAlias("isValidCE","min(abs(dcea),abs(dcec))<3600&&max(tdriftCE.fElements[72],tdriftCE.fElements[73])>100"); | |
36 | tree->SetAlias("isValidCEB","max(abs(dcea),abs(dcec))<3600&&min(tdriftCE.fElements[72],tdriftCE.fElements[73])>100"); | |
37 | printf("makeTPCTrendPlots.C\n\n"); | |
38 | printf("Processing DrawDriftTime();\n\n"); | |
39 | DrawDriftTime(); | |
40 | printf("DrawDriftRun();\n\n"); | |
41 | DrawDriftRun(); | |
42 | printf("DrawDriftCorel();\n\n"); | |
43 | DrawDriftCorel(); | |
44 | } | |
45 | ||
46 | ||
47 | ||
48 | void DrawDriftTime(){ | |
49 | // | |
50 | // Draw drift velocity trend grapsh - as function of time | |
51 | // | |
52 | TCut cutRun=Form("run>%d&&run<%d",run0,run1); | |
53 | TCut cutCE="(tdriftCE.fElements[72]>100||tdriftCE.fElements[72]>100)&&min(abs(dcea),abs(dcec))<3600"; | |
54 | TCut cutITS="abs(dits)<3600"; | |
55 | ||
56 | Int_t entries=0; | |
57 | Double_t max=6; | |
58 | Double_t min= -6; | |
59 | Double_t maxT=0,minT=0; | |
60 | Double_t dmaxmin= 200000; | |
61 | TCanvas * canvasDrift = new TCanvas("canvasDriftTime","canvasDriftTime",2000,900); | |
62 | canvasDrift->Divide(1,3); | |
63 | // P/T part | |
64 | entries=tree->Draw("100*ptrel0:time",cutRun,"goff"); | |
65 | TGraph * graphPTA = new TGraph(entries,tree->GetV2(),tree->GetV1()); | |
66 | graphPTA->SetTitle("P/T correction A side"); | |
67 | graphPTA->SetName("PTcorrectionAside"); | |
68 | // | |
69 | entries=tree->Draw("100*ptrel1:time",cutRun,"goff"); | |
70 | TGraph * graphPTC = new TGraph(entries,tree->GetV2(),tree->GetV1()); | |
71 | graphPTC->SetTitle("P/T correction C side"); | |
72 | graphPTC->SetName("PTcorrectionCside"); | |
73 | // | |
74 | entries=tree->Draw("1000*(ptrel0-ptrel1):time",cutRun,"goff"); | |
75 | TGraph * graphPTAMC = new TGraph(entries,tree->GetV2(),tree->GetV1()); | |
76 | graphPTAMC->SetTitle("P/T correction A-C side"); | |
77 | graphPTAMC->SetName("PTcorrectionAMCside"); | |
78 | // | |
79 | // | |
80 | entries=tree->Draw("isValidCE*(-tdriftCE.fElements[72]+990)/10:time",cutRun,"goff"); | |
81 | TGraph * graphCEA = new TGraph(entries,tree->GetV2(),tree->GetV1()); | |
82 | graphCEA->SetName("CEAside"); | |
83 | // | |
84 | entries=tree->Draw("isValidCE*(-tdriftCE.fElements[73]+990)/10:time",cutRun,"goff"); | |
85 | TGraph * graphCEC = new TGraph(entries,tree->GetV2(),tree->GetV1()); | |
86 | graphCEC->SetName("CECside"); | |
87 | // | |
88 | entries=tree->Draw("isValidCE*(tdriftCE.fElements[73]-tdriftCE.fElements[72]):time",cutRun,"goff"); | |
89 | TGraph * graphCEAMC = new TGraph(entries,tree->GetV2(),tree->GetV1()); | |
90 | graphCEAMC->SetName("CEAMCside"); | |
91 | // | |
92 | entries=tree->Draw("isValidITS*vdriftITS*100:time",cutRun,"goff"); | |
93 | TGraph * graphITSTPCA = new TGraph(entries,tree->GetV2(),tree->GetV1()); | |
94 | graphITSTPCA->SetName("ITSTPCAside"); | |
95 | // | |
96 | entries=tree->Draw("isValidITS*vdriftITS*100:time",cutRun,"goff"); | |
97 | TGraph * graphITSTPCC = new TGraph(entries,tree->GetV2(),tree->GetV1()); | |
98 | graphITSTPCC->SetName("ITSTPCCside"); | |
99 | // | |
100 | // Drawing part | |
101 | // | |
102 | min=-6; | |
103 | max=6; | |
104 | graphCEA->SetMinimum(min); | |
105 | graphCEA->SetMaximum(max); | |
106 | graphPTA->SetMinimum(min); | |
107 | graphPTA->SetMaximum(max); | |
108 | graphITSTPCA->SetMinimum(min); | |
109 | graphITSTPCA->SetMaximum(max); | |
110 | graphPTA->GetXaxis()->SetRangeUser(minT,maxT); | |
111 | graphCEA->GetXaxis()->SetRangeUser(minT,maxT); | |
112 | graphITSTPCA->GetXaxis()->SetRangeUser(minT,maxT); | |
113 | // | |
114 | // | |
115 | canvasDrift->cd(1); | |
116 | graphPTA->GetXaxis()->SetTimeDisplay(kTRUE); | |
117 | graphPTA->GetYaxis()->SetTitle("#Delta P/T (%)"); | |
118 | graphPTA->SetMarkerColor(2);graphPTA->SetMarkerStyle(25); | |
119 | graphPTC->SetMarkerColor(4);graphPTC->SetMarkerStyle(27); | |
120 | graphPTA->Draw("alp"); | |
121 | graphPTC->Draw("lp"); | |
122 | graphPTAMC->SetMarkerColor(3);graphPTAMC->SetMarkerStyle(25); | |
123 | graphPTAMC->Draw("lp"); | |
124 | TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"P/T correction"); | |
125 | legend->AddEntry(graphPTA,"A side (%)"); | |
126 | legend->AddEntry(graphPTC,"C side (%)"); | |
127 | legend->AddEntry(graphPTAMC,"A-C side (0.1%)"); | |
128 | legend->Draw(); | |
129 | // | |
130 | canvasDrift->cd(2); | |
131 | graphITSTPCA->GetXaxis()->SetTimeDisplay(kTRUE); | |
132 | graphITSTPCA->GetYaxis()->SetTitle("v_{dcorr} (%)"); | |
133 | graphITSTPCA->SetMarkerColor(2);graphITSTPCA->SetMarkerStyle(25); | |
134 | graphITSTPCC->SetMarkerColor(4);graphITSTPCC->SetMarkerStyle(27); | |
135 | graphITSTPCA->Draw("ap"); | |
136 | graphITSTPCC->Draw("p"); | |
137 | TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"Drift correction (TPC-ITS)"); | |
138 | legend->AddEntry(graphITSTPCA,"A side (%)"); | |
139 | legend->AddEntry(graphITSTPCC,"C side (%)"); | |
140 | legend->Draw(); | |
141 | // | |
142 | canvasDrift->cd(3); | |
143 | graphCEA->GetXaxis()->SetTimeDisplay(kTRUE); | |
144 | graphCEA->GetYaxis()->SetTitle("(T_{CE0}-T_{CE})/T_{CE0}"); | |
145 | graphCEA->SetMarkerColor(2);graphCEA->SetMarkerStyle(25); | |
146 | graphCEC->SetMarkerColor(4);graphCEC->SetMarkerStyle(27); | |
147 | graphCEA->Draw("ap"); | |
148 | graphCEC->Draw("p"); | |
149 | graphCEAMC->SetMarkerColor(3);graphCEAMC->SetMarkerStyle(25); | |
150 | graphCEAMC->Draw("p"); | |
151 | TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"CE laser time (T_{CE0}=990)"); | |
152 | legend->AddEntry(graphCEA,"A side (%)"); | |
153 | legend->AddEntry(graphCEC,"C side (%)"); | |
154 | legend->AddEntry(graphCEAMC,"A-C side (0.1%)"); | |
155 | legend->Draw(); | |
156 | // | |
157 | canvasDrift->SaveAs("pic/canvasDriftTime.gif"); | |
158 | } | |
159 | ||
160 | ||
161 | void DrawDriftRun(){ | |
162 | // | |
163 | // | |
164 | TCut cutRun=Form("run>%d&&run<%d",run0,run1); | |
165 | TCut cutCE="(tdriftCE.fElements[72]>100||tdriftCE.fElements[72]>100)&&min(abs(dcea),abs(dcec))<3600"; | |
166 | TCut cutITS="abs(dits)<3600"; | |
167 | ||
168 | Int_t entries=0; | |
169 | Double_t max=-100000; | |
170 | Double_t min= 100000; | |
171 | Double_t maxT=0,minT=0; | |
172 | Double_t dmaxmin= 200000; | |
173 | TCanvas * canvasDrift = new TCanvas("canvasDriftRun","canvasDriftRun",2000,900); | |
174 | canvasDrift->Divide(1,3); | |
175 | // | |
176 | // P/T part | |
177 | TGraph * graphPTA = TStatToolkit::MakeGraphSparse(tree,"100*ptrel0:run",cutRun); | |
178 | graphPTA->SetTitle("P/T correction A side"); | |
179 | graphPTA->SetName("PTcorrectionAside"); | |
180 | TGraph * graphPTC = TStatToolkit::MakeGraphSparse(tree,"100*ptrel1:run",cutRun); | |
181 | graphPTC->SetTitle("P/T correction C side"); | |
182 | graphPTC->SetName("PTcorrectionCside"); | |
183 | TGraph * graphPTAMC = TStatToolkit::MakeGraphSparse(tree,"1000*(ptrel0-ptrel1):run",cutRun); | |
184 | graphPTAMC->SetTitle("P/T correction A-C side"); | |
185 | graphPTAMC->SetName("PTcorrectionAMCside"); | |
186 | // | |
187 | TGraph * graphCEA = TStatToolkit::MakeGraphSparse(tree,"isValidCE*(-tdriftCE.fElements[72]+990)/10:run",cutRun+cutITS); | |
188 | graphCEA->SetTitle("P/T correction A side"); | |
189 | graphCEA->SetName("CEcorrectionAside"); | |
190 | TGraph * graphCEC = TStatToolkit::MakeGraphSparse(tree,"isValidCE*(-tdriftCE.fElements[73]+990)/10:run",cutRun+cutITS); | |
191 | graphCEC->SetTitle("P/T correction C side"); | |
192 | graphCEC->SetName("CEcorrectionCside"); | |
193 | TGraph * graphCEAMC = TStatToolkit::MakeGraphSparse(tree,"(tdriftCE.fElements[73]-tdriftCE.fElements[72]):run",cutRun+cutITS); | |
194 | graphCEAMC->SetTitle("P/T correction A-C side"); | |
195 | graphCEAMC->SetName("CEcorrectionAMCside"); | |
196 | // | |
197 | TGraph * graphITSTPCA = TStatToolkit::MakeGraphSparse(tree,"isValidITS*vdriftITS*100:run",cutRun+cutITS); | |
198 | graphITSTPCA->SetTitle("P/T correction A side"); | |
199 | graphITSTPCA->SetName("ITSTPCcorrectionAside"); | |
200 | TGraph * graphITSTPCC = TStatToolkit::MakeGraphSparse(tree,"isValidITS*vdriftITS*100:run",cutRun+cutITS); | |
201 | graphITSTPCC->SetTitle("P/T correction C side"); | |
202 | graphITSTPCC->SetName("ITSTPCcorrectionCside"); | |
203 | // | |
204 | // Drawing part | |
205 | // | |
206 | min=-6; | |
207 | max=6; | |
208 | graphCEA->SetMinimum(min); | |
209 | graphCEA->SetMaximum(max); | |
210 | graphPTA->SetMinimum(min); | |
211 | graphPTA->SetMaximum(max); | |
212 | graphITSTPCA->SetMinimum(min); | |
213 | graphITSTPCA->SetMaximum(max); | |
214 | // | |
215 | // | |
216 | canvasDrift->cd(1); | |
217 | graphPTA->GetXaxis()->SetTimeDisplay(kTRUE); | |
218 | graphPTA->GetYaxis()->SetTitle("#Delta P/T (%)"); | |
219 | graphPTA->SetMarkerColor(2);graphPTA->SetMarkerStyle(25); | |
220 | graphPTC->SetMarkerColor(4);graphPTC->SetMarkerStyle(27); | |
221 | graphPTA->Draw("alp"); | |
222 | graphPTC->Draw("lp"); | |
223 | graphPTAMC->SetMarkerColor(3);graphPTAMC->SetMarkerStyle(25); | |
224 | graphPTAMC->Draw("lp"); | |
225 | TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"P/T correction"); | |
226 | legend->AddEntry(graphPTA,"A side (%)"); | |
227 | legend->AddEntry(graphPTC,"C side (%)"); | |
228 | legend->AddEntry(graphPTAMC,"A-C side (0.1%)"); | |
229 | legend->Draw(); | |
230 | // | |
231 | canvasDrift->cd(2); | |
232 | graphITSTPCA->GetXaxis()->SetTimeDisplay(kTRUE); | |
233 | graphITSTPCA->GetYaxis()->SetTitle("v_{dcorr} (%)"); | |
234 | graphITSTPCA->SetMarkerColor(2);graphITSTPCA->SetMarkerStyle(25); | |
235 | graphITSTPCC->SetMarkerColor(4);graphITSTPCC->SetMarkerStyle(27); | |
236 | graphITSTPCA->Draw("ap"); | |
237 | graphITSTPCC->Draw("p"); | |
238 | TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"Drift correction (TPC-ITS)"); | |
239 | legend->AddEntry(graphITSTPCA,"A side (%)"); | |
240 | legend->AddEntry(graphITSTPCC,"C side (%)"); | |
241 | legend->Draw(); | |
242 | // | |
243 | canvasDrift->cd(3); | |
244 | graphCEA->GetXaxis()->SetTimeDisplay(kTRUE); | |
245 | graphCEA->GetYaxis()->SetTitle("(T_{CE0}-T_{CE})/T_{CE0}"); | |
246 | graphCEA->SetMarkerColor(2);graphCEA->SetMarkerStyle(25); | |
247 | graphCEC->SetMarkerColor(4);graphCEC->SetMarkerStyle(27); | |
248 | graphCEA->Draw("ap"); | |
249 | graphCEC->Draw("p"); | |
250 | graphCEAMC->SetMarkerColor(3);graphCEAMC->SetMarkerStyle(25); | |
251 | graphCEAMC->Draw("p"); | |
252 | TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"CE laser time (T_{CE0}=990)"); | |
253 | legend->AddEntry(graphCEA,"A side (%)"); | |
254 | legend->AddEntry(graphCEC,"C side (%)"); | |
255 | legend->AddEntry(graphCEAMC,"A-C side (0.1%)"); | |
256 | legend->Draw(); | |
257 | // | |
258 | canvasDrift->SaveAs("pic/canvasDriftRun.gif"); | |
259 | } | |
260 | ||
261 | void DrawDriftCorel(){ | |
262 | // | |
263 | // | |
264 | // | |
265 | TStatToolkit toolkit; | |
266 | Double_t chi2=0; | |
267 | Int_t npoints=0; | |
268 | TVectorD param; | |
269 | TMatrixD covar; | |
270 | TString *strDelta=0; | |
271 | Int_t npointsMax=100000; | |
272 | // | |
273 | tree->SetAlias("tCEB","(tdriftCE.fElements[72]+tdriftCE.fElements[73]-2000)/2000"); | |
274 | tree->SetAlias("tCEA","(tdriftCE.fElements[72]-1000)/1000"); | |
275 | tree->SetAlias("tCEC","(tdriftCE.fElements[73]-1000)/1000"); | |
276 | ||
277 | tree->SetAlias("tCEE","1-((1+(ptrel0+ptrel1)*0.5)*(1+vdriftITS))"); | |
278 | strDelta= TStatToolkit::FitPlaneConstrain(tree,"tCEB", "tCEE","isValidCEB&&isValidITS", chi2,npoints,param,covar,-1,0, npointsMax, 20); | |
279 | // | |
280 | strDelta->Tokenize("++")->Print(); | |
281 | tree->SetAlias("tCEF",strDelta->Data()); | |
282 | ||
283 | TGraph * graphLT = TStatToolkit::MakeGraphSparse(tree,"2.64*1000*(tCEB-tCEF):run","isValidCEB&&isValidITS"); | |
284 | TGraph * graphLTA = TStatToolkit::MakeGraphSparse(tree,"2.64*1000*(tCEA-tCEF):run","isValidCEB&&isValidITS"); | |
285 | TGraph * graphLTC = TStatToolkit::MakeGraphSparse(tree,"2.64*1000*(tCEC-tCEF):run","isValidCEB&&isValidITS"); | |
286 | graphLT->GetYaxis()->SetTitle("#Delta (mm)"); | |
287 | graphLT->SetMarkerStyle(25); | |
288 | graphLTA->SetMarkerStyle(26); graphLTA->SetMarkerColor(2); | |
289 | graphLTC->SetMarkerStyle(27); graphLTC->SetMarkerColor(4); | |
290 | graphLT->SetMaximum(10); | |
291 | graphLT->SetMinimum(-10); | |
292 | ||
293 | TCanvas * canvasDrift = new TCanvas("canvasDriftDiff","canvasDriftDiff",2000,500); | |
294 | graphLT->Draw("alp"); | |
295 | graphLTA->Draw("lp"); | |
296 | graphLTC->Draw("lp"); | |
297 | TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"CE plane - corrected with tracks"); | |
298 | legend->AddEntry(graphLT,"AC side mean (mm)"); | |
299 | legend->AddEntry(graphLTA,"A side (mm)"); | |
300 | legend->AddEntry(graphLTC,"C side (mm)"); | |
301 | legend->Draw(); | |
302 | // | |
303 | canvasDrift->SaveAs("pic/canvasDriftDiffRun.gif"); | |
304 | } |