]>
Commit | Line | Data |
---|---|---|
1 | #if !defined(__CINT__) || defined(__MAKECINT__) | |
2 | #include <TF1.h> | |
3 | #include <TFile.h> | |
4 | #include <TH1F.h> | |
5 | #include <TGraph.h> | |
6 | #include <TStyle.h> | |
7 | #include <TSystem.h> | |
8 | #include <TString.h> | |
9 | #include <TGrid.h> | |
10 | #include <TCanvas.h> | |
11 | #include <TLatex.h> | |
12 | #include <TObjArray.h> | |
13 | #include "AliCDBEntry.h" | |
14 | #include "AliITSDriftSpeedArraySDD.h" | |
15 | #include "AliITSDriftSpeedSDD.h" | |
16 | #endif | |
17 | ||
18 | // Macro to plot the calibration parameters from the OCDB file | |
19 | // created from an INJECTOR run (OCDB/ITS/Calib/DriftSpeedSDD) | |
20 | // Two methods ShowDriftSpeedSDD: | |
21 | // - the first takes the name of the file to be displayed | |
22 | // - the second builds the alien path+name from run number and file version | |
23 | // | |
24 | // Origin: F. Prino (prino@to.infn.it) | |
25 | ||
26 | Bool_t kNoDraw = kFALSE; // set to kTRUE to eliminate module dependent plots | |
27 | ||
28 | ||
29 | void ShowDriftSpeedSDD(Char_t filnam[150]="$ALICE_ROOT/ITS/Calib/DriftSpeedSDD/Run0_9999999_v0_s0.root", Int_t firstmod=0, Int_t lastmod=260,Int_t nrun=0){ | |
30 | TFile *f= TFile::Open(filnam); | |
31 | AliCDBEntry *ent=(AliCDBEntry*)f->Get("AliCDBEntry"); | |
32 | TObjArray *drspSDD = (TObjArray *)ent->GetObject(); | |
33 | AliITSDriftSpeedArraySDD *vdriftarr0; | |
34 | AliITSDriftSpeedArraySDD *vdriftarr1; | |
35 | TGraph **gvdr0=new TGraph*[260]; | |
36 | TGraph **gvdr1=new TGraph*[260]; | |
37 | TCanvas *c0=0x0; | |
38 | if(!kNoDraw)c0=new TCanvas("c0","Module Drift Speed",700,1000); | |
39 | ||
40 | TGraph *vvsmod0=new TGraph(0); | |
41 | TGraph *vvsmod1=new TGraph(0); | |
42 | TGraph *poldegvsmod0=new TGraph(0); | |
43 | TGraph *poldegvsmod1=new TGraph(0); | |
44 | TGraph *anmaxvsmod0=new TGraph(0); | |
45 | TGraph *anmaxvsmod1=new TGraph(0); | |
46 | TGraph *dvcevsmod0=new TGraph(0); | |
47 | TGraph *dvcevsmod1=new TGraph(0); | |
48 | TGraph *dveevsmod0=new TGraph(0); | |
49 | TGraph *dveevsmod1=new TGraph(0); | |
50 | ||
51 | char tit0[100]; | |
52 | sprintf(tit0,"Drift Speed vs. mod. number"); | |
53 | if(nrun!=0)sprintf(tit0,"Drift Speed vs. mod. number - Run %d",nrun); | |
54 | vvsmod0->SetTitle(tit0); | |
55 | vvsmod1->SetTitle(tit0); | |
56 | ||
57 | sprintf(tit0,"Degree of poly fit vs. mod. number"); | |
58 | if(nrun!=0)sprintf(tit0,"Degree of poly fit vs. mod. number - Run %d",nrun); | |
59 | poldegvsmod0->SetTitle(tit0); | |
60 | poldegvsmod1->SetTitle(tit0); | |
61 | ||
62 | sprintf(tit0,"Anode with max. vdrift vs. mod. number"); | |
63 | if(nrun!=0)sprintf(tit0,"Anode with max. vdrift vs. mod. number - Run %d",nrun); | |
64 | anmaxvsmod0->SetTitle(tit0); | |
65 | anmaxvsmod1->SetTitle(tit0); | |
66 | ||
67 | sprintf(tit0,"Delta Vdrift 128-0 vs. mod. number"); | |
68 | if(nrun!=0)sprintf(tit0,"Delta Vdrift 128-0 vs. mod. number - Run %d",nrun); | |
69 | dvcevsmod0->SetTitle(tit0); | |
70 | dvcevsmod1->SetTitle(tit0); | |
71 | ||
72 | sprintf(tit0,"Delta Vdrift 256-0 vs. mod. number"); | |
73 | if(nrun!=0)sprintf(tit0,"Delta Vdrift 256-0 vs. mod. number - Run %d",nrun); | |
74 | dveevsmod0->SetTitle(tit0); | |
75 | dveevsmod1->SetTitle(tit0); | |
76 | ||
77 | TF1* fPoly=new TF1("fPoly","pol3",0.,256.); | |
78 | Char_t tit[100]; | |
79 | TString psnm0 = "vdriftSDD.ps["; | |
80 | TString psnm1 = "vdriftSDD.ps"; | |
81 | TString psnm2 = "vdriftSDD.ps]"; | |
82 | if(!kNoDraw) c0->Print(psnm0.Data()); | |
83 | Int_t cntpad = 0; | |
84 | Int_t iGoodInj=0; | |
85 | Int_t iAverSpeed=0; | |
86 | TLatex* tleft=new TLatex(0.2,0.82,"Side 0"); | |
87 | tleft->SetNDC(); | |
88 | tleft->SetTextColor(1); | |
89 | TLatex* tright=new TLatex(0.2,0.75,"Side 1"); | |
90 | tright->SetNDC(); | |
91 | tright->SetTextColor(2); | |
92 | ||
93 | for(Int_t i=firstmod; i<lastmod; i++){ | |
94 | Int_t iMod=i+240; | |
95 | Int_t i0=2*i; | |
96 | Int_t i1=1+2*i; | |
97 | vdriftarr0=(AliITSDriftSpeedArraySDD*)drspSDD->At(i0); | |
98 | vdriftarr1=(AliITSDriftSpeedArraySDD*)drspSDD->At(i1); | |
99 | AliITSDriftSpeedSDD* vdrift0=0x0; | |
100 | if(vdriftarr0) vdrift0=vdriftarr0->GetDriftSpeedObject(0); | |
101 | AliITSDriftSpeedSDD* vdrift1=0x0; | |
102 | if(vdriftarr1) vdrift1=vdriftarr1->GetDriftSpeedObject(0); | |
103 | ||
104 | gvdr0[i]=new TGraph(0); | |
105 | gvdr1[i]=new TGraph(0); | |
106 | gvdr0[i]->SetMarkerStyle(7); | |
107 | gvdr1[i]->SetMarkerStyle(7); | |
108 | gvdr0[i]->SetMarkerColor(kBlack); | |
109 | gvdr0[i]->SetLineColor(kBlack); | |
110 | gvdr0[i]->SetMinimum(5.); | |
111 | gvdr1[i]->SetMinimum(5.); | |
112 | gvdr0[i]->SetMaximum(7.5); | |
113 | gvdr1[i]->SetMaximum(7.5); | |
114 | sprintf(tit,"Mod %d\n",iMod); | |
115 | gvdr0[i]->SetTitle(tit); | |
116 | gvdr1[i]->SetTitle(tit); | |
117 | gvdr1[i]->SetMarkerColor(kRed); | |
118 | gvdr1[i]->SetLineColor(kRed); | |
119 | ||
120 | for(Int_t iAn=0; iAn<256; iAn++){ | |
121 | Float_t vel0=0; | |
122 | if(vdrift0) vel0=vdrift0->GetDriftSpeedAtAnode(iAn); | |
123 | Float_t vel1=0; | |
124 | if(vdrift1) vel1=vdrift1->GetDriftSpeedAtAnode(iAn); | |
125 | gvdr0[i]->SetPoint(iAn,(Float_t)iAn,vel0); | |
126 | gvdr1[i]->SetPoint(iAn,(Float_t)iAn,vel1); | |
127 | } | |
128 | if(vdriftarr0->GetInjectorStatus()>0) iGoodInj++; | |
129 | else iAverSpeed++; | |
130 | if(vdriftarr1->GetInjectorStatus()>0) iGoodInj++; | |
131 | else iAverSpeed++; | |
132 | ||
133 | printf(" Mod. %d \tStatusLR=%X %X \t v(an 128l)= %f",iMod,vdriftarr0->GetInjectorStatus(),vdriftarr1->GetInjectorStatus(),vdriftarr0->GetDriftSpeed(0,128)); | |
134 | printf(" \t v(an 128r)= %f Degree=%d %d\n",vdriftarr1->GetDriftSpeed(0,128),vdrift0->GetDegreeofPoly(),vdrift1->GetDegreeofPoly()); | |
135 | ||
136 | if(!kNoDraw){ | |
137 | if (i%12==0 ) { | |
138 | c0->cd(); | |
139 | c0->Modified(); | |
140 | c0->Update(); | |
141 | if (i) c0->Print(psnm1.Data()); | |
142 | c0->Clear(); | |
143 | c0->Divide(3,4); | |
144 | cntpad = 0; | |
145 | } | |
146 | c0->cd(++cntpad); | |
147 | gvdr0[i]->Draw("AP"); | |
148 | gvdr0[i]->GetXaxis()->SetTitle("Anode"); | |
149 | gvdr0[i]->GetYaxis()->SetTitle("Vdrift (#mum/ns)"); | |
150 | gvdr1[i]->Draw("P same"); | |
151 | gvdr1[i]->GetXaxis()->SetTitle("Anode"); | |
152 | gvdr1[i]->GetYaxis()->SetTitle("Vdrift (#mum/ns)"); | |
153 | tleft->Draw(); | |
154 | tright->Draw(); | |
155 | } | |
156 | ||
157 | Float_t vel0=0; | |
158 | Float_t pd0=0; | |
159 | if(vdrift0){ | |
160 | vel0=vdrift0->GetDriftSpeedAtAnode(128); | |
161 | pd0=vdrift0->GetDegreeofPoly(); | |
162 | } | |
163 | Float_t vel1=0; | |
164 | Float_t pd1=0; | |
165 | if(vdrift1){ | |
166 | vel1=vdrift1->GetDriftSpeedAtAnode(128); | |
167 | pd1=vdrift1->GetDegreeofPoly(); | |
168 | } | |
169 | vvsmod0->SetPoint(vvsmod0->GetN(),(Float_t)iMod,vel0); | |
170 | vvsmod1->SetPoint(vvsmod1->GetN(),(Float_t)iMod,vel1); | |
171 | poldegvsmod0->SetPoint(poldegvsmod0->GetN(),(Float_t)iMod,pd0); | |
172 | poldegvsmod1->SetPoint(poldegvsmod1->GetN(),(Float_t)iMod,pd1); | |
173 | ||
174 | for(Int_t ipar=0; ipar<=vdrift0->GetDegreeofPoly(); ipar++){ | |
175 | fPoly->SetParameter(ipar,vdrift0->GetDriftSpeedParameter(ipar)); | |
176 | } | |
177 | if(vdrift0->GetDegreeofPoly()<3){ | |
178 | for(Int_t ipar=vdrift0->GetDegreeofPoly()+1; ipar<=3; ipar++) fPoly->SetParameter(ipar,0.); | |
179 | } | |
180 | ||
181 | anmaxvsmod0->SetPoint(anmaxvsmod0->GetN(),(Float_t)iMod,fPoly->GetMaximumX(0.,256.)); | |
182 | dvcevsmod0->SetPoint(dvcevsmod0->GetN(),(Float_t)iMod,fPoly->Eval(128)-fPoly->Eval(0)); | |
183 | dveevsmod0->SetPoint(dveevsmod0->GetN(),(Float_t)iMod,fPoly->Eval(256)-fPoly->Eval(0)); | |
184 | ||
185 | for(Int_t ipar=0; ipar<=vdrift1->GetDegreeofPoly(); ipar++){ | |
186 | fPoly->SetParameter(ipar,vdrift1->GetDriftSpeedParameter(ipar)); | |
187 | } | |
188 | if(vdrift1->GetDegreeofPoly()<3){ | |
189 | for(Int_t ipar=vdrift1->GetDegreeofPoly()+1; ipar<=3; ipar++) fPoly->SetParameter(ipar,0.); | |
190 | } | |
191 | anmaxvsmod1->SetPoint(anmaxvsmod1->GetN(),(Float_t)iMod,fPoly->GetMaximumX(0.,256.)); | |
192 | dvcevsmod1->SetPoint(dvcevsmod1->GetN(),(Float_t)iMod,fPoly->Eval(128)-fPoly->Eval(0)); | |
193 | dveevsmod1->SetPoint(dveevsmod1->GetN(),(Float_t)iMod,fPoly->Eval(256)-fPoly->Eval(0)); | |
194 | // getchar(); | |
195 | } | |
196 | ||
197 | if(!kNoDraw){ | |
198 | c0->cd(); | |
199 | c0->Modified(); | |
200 | c0->Update(); | |
201 | c0->Print(psnm2.Data()); | |
202 | } | |
203 | printf("Number of half-modules with drift speed from injectors = %d\n",iGoodInj); | |
204 | printf("Number of half-modules with average drift speed = %d\n",iAverSpeed); | |
205 | ||
206 | TCanvas* c2; | |
207 | c2=new TCanvas("c2","",1000,700); | |
208 | vvsmod0->SetMarkerStyle(20); | |
209 | vvsmod0->Draw("AP"); | |
210 | vvsmod0->GetXaxis()->SetTitle("Module Number"); | |
211 | vvsmod0->GetYaxis()->SetTitle("Vdrift (#mum/ns)"); | |
212 | vvsmod1->SetMarkerStyle(21); | |
213 | vvsmod1->SetMarkerColor(2); | |
214 | vvsmod1->Draw("SAMEP"); | |
215 | tleft->Draw(); | |
216 | tright->Draw(); | |
217 | ||
218 | TCanvas* c3; | |
219 | c3=new TCanvas("c3","",900,900); | |
220 | c3->Divide(2,2); | |
221 | ||
222 | c3->cd(1); | |
223 | gPad->SetLeftMargin(0.14); | |
224 | poldegvsmod0->SetMarkerStyle(20); | |
225 | poldegvsmod0->Draw("AP"); | |
226 | poldegvsmod0->GetXaxis()->SetTitle("Module Number"); | |
227 | poldegvsmod0->GetYaxis()->SetTitle("Degree of Polynomial fit"); | |
228 | poldegvsmod0->GetYaxis()->SetTitleOffset(1.4); | |
229 | poldegvsmod1->SetMarkerStyle(21); | |
230 | poldegvsmod1->SetMarkerColor(2); | |
231 | poldegvsmod1->Draw("SAMEP"); | |
232 | tleft->Draw(); | |
233 | tright->Draw(); | |
234 | c3->cd(2); | |
235 | gPad->SetLeftMargin(0.14); | |
236 | anmaxvsmod0->SetMarkerStyle(20); | |
237 | anmaxvsmod0->Draw("AP"); | |
238 | anmaxvsmod0->GetXaxis()->SetTitle("Module Number"); | |
239 | anmaxvsmod0->GetYaxis()->SetTitle("Anode with max. drift speed"); | |
240 | anmaxvsmod0->GetYaxis()->SetTitleOffset(1.4); | |
241 | anmaxvsmod1->SetMarkerStyle(21); | |
242 | anmaxvsmod1->SetMarkerColor(2); | |
243 | anmaxvsmod1->Draw("SAMEP"); | |
244 | tleft->Draw(); | |
245 | tright->Draw(); | |
246 | c3->cd(3); | |
247 | gPad->SetLeftMargin(0.14); | |
248 | dvcevsmod0->SetMarkerStyle(20); | |
249 | dvcevsmod0->Draw("AP"); | |
250 | dvcevsmod0->GetXaxis()->SetTitle("Module Number"); | |
251 | dvcevsmod0->GetYaxis()->SetTitle("vdrift(anode128)-vdrift(anode0)"); | |
252 | dvcevsmod0->GetYaxis()->SetTitleOffset(1.4); | |
253 | dvcevsmod1->SetMarkerStyle(21); | |
254 | dvcevsmod1->SetMarkerColor(2); | |
255 | dvcevsmod1->Draw("SAMEP"); | |
256 | tleft->Draw(); | |
257 | tright->Draw(); | |
258 | c3->cd(4); | |
259 | gPad->SetLeftMargin(0.14); | |
260 | dveevsmod0->SetMarkerStyle(20); | |
261 | dveevsmod0->Draw("AP"); | |
262 | dveevsmod0->GetYaxis()->SetTitleOffset(1.4); | |
263 | dveevsmod0->GetXaxis()->SetTitle("Module Number"); | |
264 | dveevsmod0->GetYaxis()->SetTitle("vdrift(anode256)-vdrift(anode0)"); | |
265 | dveevsmod1->SetMarkerStyle(21); | |
266 | dveevsmod1->SetMarkerColor(2); | |
267 | dveevsmod1->Draw("SAMEP"); | |
268 | tleft->Draw(); | |
269 | tright->Draw(); | |
270 | ||
271 | ||
272 | } | |
273 | ||
274 | ||
275 | ||
276 | void ShowDriftSpeedSDD(Int_t nrun, Int_t year=2010, Int_t nv=-1){ | |
277 | TGrid::Connect("alien:",0,0,"t"); | |
278 | TString cmd=Form("gbbox find \"/alice/data/%d/OCDB/ITS/Calib/DriftSpeedSDD\" \"Run%d*.root\" > run.txt",year,nrun); | |
279 | if(nv>0){ | |
280 | cmd.Form("gbbox find \"/alice/data/%d/OCDB/ITS/Calib/DriftSpeedSDD\" \"Run%d_999999999_v%d_s0.root\" > run.txt",year,nrun,nv); | |
281 | } | |
282 | gSystem->Exec(cmd.Data()); | |
283 | ||
284 | Char_t filnam[200],filnamalien[200]; | |
285 | FILE* runtxt=fopen("run.txt","r"); | |
286 | fscanf(runtxt,"%s\n",filnam); | |
287 | if(!strstr(filnam,"/alice/data/")){ | |
288 | printf("Bad run number\n"); | |
289 | gSystem->Exec("rm run.txt"); | |
290 | return; | |
291 | } | |
292 | sprintf(filnamalien,"alien://%s",filnam); | |
293 | ||
294 | printf("Open file: %s\n",filnamalien); | |
295 | ShowDriftSpeedSDD(filnamalien,0,260,nrun); | |
296 | fclose(runtxt); | |
297 | gSystem->Exec("rm run.txt"); | |
298 | ||
299 | } |