]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/ShowDriftSpeedSDD.C
Updated survey information for ladder 2 of SDD layer 3 (M. Poghosyan)
[u/mrichter/AliRoot.git] / ITS / ShowDriftSpeedSDD.C
CommitLineData
40b3a8c7 1#if !defined(__CINT__) || defined(__MAKECINT__)
2420973e 2#include <TF1.h>
40b3a8c7 3#include <TFile.h>
aa5cbbc5 4#include <TLine.h>
40b3a8c7 5#include <TH1F.h>
aa5cbbc5 6#include <TH2F.h>
40b3a8c7 7#include <TGraph.h>
8#include <TStyle.h>
551eb942 9#include <TSystem.h>
10#include <TString.h>
40b3a8c7 11#include <TGrid.h>
12#include <TCanvas.h>
13#include <TLatex.h>
14#include <TObjArray.h>
15#include "AliCDBEntry.h"
16#include "AliITSDriftSpeedArraySDD.h"
2420973e 17#include "AliITSDriftSpeedSDD.h"
aa5cbbc5 18#include "AliITSgeomTGeo.h"
40b3a8c7 19#endif
20
21// Macro to plot the calibration parameters from the OCDB file
22// created from an INJECTOR run (OCDB/ITS/Calib/DriftSpeedSDD)
23// Two methods ShowDriftSpeedSDD:
24// - the first takes the name of the file to be displayed
25// - the second builds the alien path+name from run number and file version
26//
27// Origin: F. Prino (prino@to.infn.it)
28
b70dd7af 29Bool_t kNoDraw = kFALSE; // set to kTRUE to eliminate module dependent plots
30
e9b71015 31
b70dd7af 32void 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){
40b3a8c7 33 TFile *f= TFile::Open(filnam);
34 AliCDBEntry *ent=(AliCDBEntry*)f->Get("AliCDBEntry");
35 TObjArray *drspSDD = (TObjArray *)ent->GetObject();
36 AliITSDriftSpeedArraySDD *vdriftarr0;
37 AliITSDriftSpeedArraySDD *vdriftarr1;
aa5cbbc5 38
39 TH2F* hlay3=new TH2F("hlay3","Injector Status Layer 3",12,-0.5,5.5,14,-0.5,13.5);
40 hlay3->GetXaxis()->SetTitle("Detector");
41 hlay3->GetYaxis()->SetTitle("Ladder");
42 hlay3->GetXaxis()->SetTickLength(0);
43 hlay3->GetYaxis()->SetTickLength(0);
44 hlay3->SetStats(0);
45 hlay3->SetMinimum(-0.01);
46 hlay3->SetMaximum(7.);
47 TH2F* hlay4=new TH2F("hlay4","Injector Status Layer 4",16,-0.5,7.5,22,-0.5,21.5);
48 hlay4->GetXaxis()->SetTitle("Detector");
49 hlay4->GetYaxis()->SetTitle("Ladder");
50 hlay4->GetXaxis()->SetTickLength(0);
51 hlay4->GetYaxis()->SetTickLength(0);
52 hlay4->GetYaxis()->SetTitle("Ladder");
53 hlay4->SetStats(0);
54 hlay4->SetMinimum(-0.01);
55 hlay4->SetMaximum(7.);
56
40b3a8c7 57 TGraph **gvdr0=new TGraph*[260];
58 TGraph **gvdr1=new TGraph*[260];
e9b71015 59 TCanvas *c0=0x0;
60 if(!kNoDraw)c0=new TCanvas("c0","Module Drift Speed",700,1000);
40b3a8c7 61
62 TGraph *vvsmod0=new TGraph(0);
63 TGraph *vvsmod1=new TGraph(0);
915c0469 64 TGraph *poldegvsmod0=new TGraph(0);
65 TGraph *poldegvsmod1=new TGraph(0);
66 TGraph *anmaxvsmod0=new TGraph(0);
67 TGraph *anmaxvsmod1=new TGraph(0);
68 TGraph *dvcevsmod0=new TGraph(0);
69 TGraph *dvcevsmod1=new TGraph(0);
70 TGraph *dveevsmod0=new TGraph(0);
71 TGraph *dveevsmod1=new TGraph(0);
72
b70dd7af 73 char tit0[100];
74 sprintf(tit0,"Drift Speed vs. mod. number");
75 if(nrun!=0)sprintf(tit0,"Drift Speed vs. mod. number - Run %d",nrun);
76 vvsmod0->SetTitle(tit0);
77 vvsmod1->SetTitle(tit0);
915c0469 78
79 sprintf(tit0,"Degree of poly fit vs. mod. number");
80 if(nrun!=0)sprintf(tit0,"Degree of poly fit vs. mod. number - Run %d",nrun);
81 poldegvsmod0->SetTitle(tit0);
82 poldegvsmod1->SetTitle(tit0);
83
84 sprintf(tit0,"Anode with max. vdrift vs. mod. number");
85 if(nrun!=0)sprintf(tit0,"Anode with max. vdrift vs. mod. number - Run %d",nrun);
86 anmaxvsmod0->SetTitle(tit0);
87 anmaxvsmod1->SetTitle(tit0);
88
89 sprintf(tit0,"Delta Vdrift 128-0 vs. mod. number");
90 if(nrun!=0)sprintf(tit0,"Delta Vdrift 128-0 vs. mod. number - Run %d",nrun);
91 dvcevsmod0->SetTitle(tit0);
92 dvcevsmod1->SetTitle(tit0);
93
94 sprintf(tit0,"Delta Vdrift 256-0 vs. mod. number");
95 if(nrun!=0)sprintf(tit0,"Delta Vdrift 256-0 vs. mod. number - Run %d",nrun);
96 dveevsmod0->SetTitle(tit0);
97 dveevsmod1->SetTitle(tit0);
98
49c59b1d 99 TF1* fPoly=new TF1("fPoly","pol3",0.,256.);
40b3a8c7 100 Char_t tit[100];
e9b71015 101 TString psnm0 = "vdriftSDD.ps[";
102 TString psnm1 = "vdriftSDD.ps";
103 TString psnm2 = "vdriftSDD.ps]";
104 if(!kNoDraw) c0->Print(psnm0.Data());
105 Int_t cntpad = 0;
915c0469 106 Int_t iGoodInj=0;
107 Int_t iAverSpeed=0;
e9b71015 108 TLatex* tleft=new TLatex(0.2,0.82,"Side 0");
109 tleft->SetNDC();
110 tleft->SetTextColor(1);
111 TLatex* tright=new TLatex(0.2,0.75,"Side 1");
112 tright->SetNDC();
113 tright->SetTextColor(2);
114
40b3a8c7 115 for(Int_t i=firstmod; i<lastmod; i++){
266a4b47 116 Int_t iMod=i+240;
aa5cbbc5 117 Int_t lay,lad,det;
118 AliITSgeomTGeo::GetModuleId(iMod,lay,lad,det);
40b3a8c7 119 Int_t i0=2*i;
120 Int_t i1=1+2*i;
121 vdriftarr0=(AliITSDriftSpeedArraySDD*)drspSDD->At(i0);
122 vdriftarr1=(AliITSDriftSpeedArraySDD*)drspSDD->At(i1);
915c0469 123 AliITSDriftSpeedSDD* vdrift0=0x0;
124 if(vdriftarr0) vdrift0=vdriftarr0->GetDriftSpeedObject(0);
125 AliITSDriftSpeedSDD* vdrift1=0x0;
126 if(vdriftarr1) vdrift1=vdriftarr1->GetDriftSpeedObject(0);
127
40b3a8c7 128 gvdr0[i]=new TGraph(0);
129 gvdr1[i]=new TGraph(0);
130 gvdr0[i]->SetMarkerStyle(7);
131 gvdr1[i]->SetMarkerStyle(7);
e9b71015 132 gvdr0[i]->SetMarkerColor(kBlack);
133 gvdr0[i]->SetLineColor(kBlack);
40b3a8c7 134 gvdr0[i]->SetMinimum(5.);
135 gvdr1[i]->SetMinimum(5.);
e9b71015 136 gvdr0[i]->SetMaximum(7.5);
137 gvdr1[i]->SetMaximum(7.5);
266a4b47 138 sprintf(tit,"Mod %d\n",iMod);
40b3a8c7 139 gvdr0[i]->SetTitle(tit);
140 gvdr1[i]->SetTitle(tit);
e9b71015 141 gvdr1[i]->SetMarkerColor(kRed);
142 gvdr1[i]->SetLineColor(kRed);
40b3a8c7 143
144 for(Int_t iAn=0; iAn<256; iAn++){
145 Float_t vel0=0;
915c0469 146 if(vdrift0) vel0=vdrift0->GetDriftSpeedAtAnode(iAn);
40b3a8c7 147 Float_t vel1=0;
915c0469 148 if(vdrift1) vel1=vdrift1->GetDriftSpeedAtAnode(iAn);
40b3a8c7 149 gvdr0[i]->SetPoint(iAn,(Float_t)iAn,vel0);
150 gvdr1[i]->SetPoint(iAn,(Float_t)iAn,vel1);
151 }
aa5cbbc5 152 Int_t statusInj0=vdriftarr0->GetInjectorStatus();
153 Int_t statusInj1=vdriftarr1->GetInjectorStatus();
154 if(statusInj0>0) iGoodInj++;
915c0469 155 else iAverSpeed++;
aa5cbbc5 156 if(statusInj1>0) iGoodInj++;
915c0469 157 else iAverSpeed++;
158
aa5cbbc5 159 printf(" Mod. %d \tStatusLR=%X %X \t v(an 128l)= %f",iMod,statusInj0,statusInj1,vdriftarr0->GetDriftSpeed(0,128));
915c0469 160 printf(" \t v(an 128r)= %f Degree=%d %d\n",vdriftarr1->GetDriftSpeed(0,128),vdrift0->GetDegreeofPoly(),vdrift1->GetDegreeofPoly());
2420973e 161
aa5cbbc5 162 Int_t n7=(statusInj0&(0x1F<<25))>>25;
163 Int_t n6=(statusInj0&(0x1F<<20))>>20;
164 Int_t n5=(statusInj0&(0x1F<<15))>>15;
165 Int_t n4=(statusInj0&(0x1F<<5))>>10;
166 Int_t n3=(statusInj0&(0x1F<<5))>>5;
167 Int_t n2=statusInj0&0x1F;
168 Float_t aveStatus0=(7.*n7+6.*n6+5.*n5+4.*n4+3.*n3+2.*n2)/32.;
169 n7=(statusInj1&(0x1F<<25))>>25;
170 n6=(statusInj1&(0x1F<<20))>>20;
171 n5=(statusInj1&(0x1F<<15))>>15;
172 n4=(statusInj1&(0x1F<<5))>>10;
173 n3=(statusInj1&(0x1F<<5))>>5;
174 n2=statusInj1&0x1F;
175 Float_t aveStatus1=(7.*n7+6.*n6+5.*n5+4.*n4+3.*n3+2.*n2)/32.;
176
177 Int_t index=1+(det-1)*2;
178 if(lay==3){
179 hlay3->SetBinContent(index,lad,aveStatus0);
180 hlay3->SetBinContent(index+1,lad,aveStatus1);
181 }
182 if(lay==4){
183 hlay4->SetBinContent(index,lad,aveStatus0);
184 hlay4->SetBinContent(index+1,lad,aveStatus1);
185 }
186
187
2420973e 188 if(!kNoDraw){
e9b71015 189 if (i%12==0 ) {
190 c0->cd();
191 c0->Modified();
192 c0->Update();
193 if (i) c0->Print(psnm1.Data());
194 c0->Clear();
195 c0->Divide(3,4);
196 cntpad = 0;
197 }
198 c0->cd(++cntpad);
2420973e 199 gvdr0[i]->Draw("AP");
200 gvdr0[i]->GetXaxis()->SetTitle("Anode");
e9b71015 201 gvdr0[i]->GetYaxis()->SetTitle("Vdrift (#mum/ns)");
202 gvdr1[i]->Draw("P same");
2420973e 203 gvdr1[i]->GetXaxis()->SetTitle("Anode");
204 gvdr1[i]->GetYaxis()->SetTitle("Vdrift (#mum/ns)");
e9b71015 205 tleft->Draw();
206 tright->Draw();
2420973e 207 }
208
40b3a8c7 209 Float_t vel0=0;
915c0469 210 Float_t pd0=0;
211 if(vdrift0){
212 vel0=vdrift0->GetDriftSpeedAtAnode(128);
e9b71015 213 pd0=vdrift0->GetDegreeofPoly();
915c0469 214 }
40b3a8c7 215 Float_t vel1=0;
915c0469 216 Float_t pd1=0;
217 if(vdrift1){
218 vel1=vdrift1->GetDriftSpeedAtAnode(128);
219 pd1=vdrift1->GetDegreeofPoly();
220 }
266a4b47 221 vvsmod0->SetPoint(vvsmod0->GetN(),(Float_t)iMod,vel0);
222 vvsmod1->SetPoint(vvsmod1->GetN(),(Float_t)iMod,vel1);
915c0469 223 poldegvsmod0->SetPoint(poldegvsmod0->GetN(),(Float_t)iMod,pd0);
224 poldegvsmod1->SetPoint(poldegvsmod1->GetN(),(Float_t)iMod,pd1);
225
226 for(Int_t ipar=0; ipar<=vdrift0->GetDegreeofPoly(); ipar++){
227 fPoly->SetParameter(ipar,vdrift0->GetDriftSpeedParameter(ipar));
228 }
229 if(vdrift0->GetDegreeofPoly()<3){
230 for(Int_t ipar=vdrift0->GetDegreeofPoly()+1; ipar<=3; ipar++) fPoly->SetParameter(ipar,0.);
231 }
232
233 anmaxvsmod0->SetPoint(anmaxvsmod0->GetN(),(Float_t)iMod,fPoly->GetMaximumX(0.,256.));
234 dvcevsmod0->SetPoint(dvcevsmod0->GetN(),(Float_t)iMod,fPoly->Eval(128)-fPoly->Eval(0));
235 dveevsmod0->SetPoint(dveevsmod0->GetN(),(Float_t)iMod,fPoly->Eval(256)-fPoly->Eval(0));
40b3a8c7 236
915c0469 237 for(Int_t ipar=0; ipar<=vdrift1->GetDegreeofPoly(); ipar++){
238 fPoly->SetParameter(ipar,vdrift1->GetDriftSpeedParameter(ipar));
239 }
240 if(vdrift1->GetDegreeofPoly()<3){
241 for(Int_t ipar=vdrift1->GetDegreeofPoly()+1; ipar<=3; ipar++) fPoly->SetParameter(ipar,0.);
242 }
243 anmaxvsmod1->SetPoint(anmaxvsmod1->GetN(),(Float_t)iMod,fPoly->GetMaximumX(0.,256.));
244 dvcevsmod1->SetPoint(dvcevsmod1->GetN(),(Float_t)iMod,fPoly->Eval(128)-fPoly->Eval(0));
245 dveevsmod1->SetPoint(dveevsmod1->GetN(),(Float_t)iMod,fPoly->Eval(256)-fPoly->Eval(0));
40b3a8c7 246 // getchar();
247 }
915c0469 248
e9b71015 249 if(!kNoDraw){
250 c0->cd();
251 c0->Modified();
252 c0->Update();
253 c0->Print(psnm2.Data());
254 }
915c0469 255 printf("Number of half-modules with drift speed from injectors = %d\n",iGoodInj);
256 printf("Number of half-modules with average drift speed = %d\n",iAverSpeed);
257
aa5cbbc5 258 gStyle->SetPalette(59);
259
260 TCanvas* clay=new TCanvas("clay","Injector Status",900,600);
261 clay->Divide(2,1);
262 clay->cd(1);
263 hlay3->Draw("colz");
264 TLine** linv3=new TLine*[5];
265 for(Int_t i=0;i<5;i++){
266 linv3[i]=new TLine(i+0.5,-0.5,i+0.5,13.5);
267 linv3[i]->SetLineColor(kGray+1);
268 linv3[i]->Draw();
269 }
270 TLine** linh3=new TLine*[13];
271 for(Int_t i=0;i<13;i++){
272 linh3[i]=new TLine(-0.5,i+0.5,5.5,i+0.5);
273 linh3[i]->SetLineColor(kGray+1);
274 linh3[i]->Draw();
275 }
276 clay->cd(2);
277 hlay4->Draw("colz");
278 TLine** linv4=new TLine*[7];
279 for(Int_t i=0;i<7;i++){
280 linv4[i]=new TLine(i+0.5,-0.5,i+0.5,21.5);
281 linv4[i]->SetLineColor(kGray+1);
282 linv4[i]->Draw();
283 }
284 TLine** linh4=new TLine*[21];
285 for(Int_t i=0;i<21;i++){
286 linh4[i]=new TLine(-0.5,i+0.5,7.5,i+0.5);
287 linh4[i]->SetLineColor(kGray+1);
288 linh4[i]->Draw();
289 }
290 clay->Modified();
291
292
40b3a8c7 293 TCanvas* c2;
aa5cbbc5 294 c2=new TCanvas("c2","Vdrift vs. mod",1000,700);
40b3a8c7 295 vvsmod0->SetMarkerStyle(20);
296 vvsmod0->Draw("AP");
297 vvsmod0->GetXaxis()->SetTitle("Module Number");
298 vvsmod0->GetYaxis()->SetTitle("Vdrift (#mum/ns)");
299 vvsmod1->SetMarkerStyle(21);
300 vvsmod1->SetMarkerColor(2);
301 vvsmod1->Draw("SAMEP");
40b3a8c7 302 tleft->Draw();
40b3a8c7 303 tright->Draw();
304
915c0469 305 TCanvas* c3;
aa5cbbc5 306 c3=new TCanvas("c3","Params vs. mod",900,900);
915c0469 307 c3->Divide(2,2);
308
309 c3->cd(1);
310 gPad->SetLeftMargin(0.14);
311 poldegvsmod0->SetMarkerStyle(20);
312 poldegvsmod0->Draw("AP");
313 poldegvsmod0->GetXaxis()->SetTitle("Module Number");
314 poldegvsmod0->GetYaxis()->SetTitle("Degree of Polynomial fit");
315 poldegvsmod0->GetYaxis()->SetTitleOffset(1.4);
316 poldegvsmod1->SetMarkerStyle(21);
317 poldegvsmod1->SetMarkerColor(2);
318 poldegvsmod1->Draw("SAMEP");
319 tleft->Draw();
320 tright->Draw();
321 c3->cd(2);
322 gPad->SetLeftMargin(0.14);
323 anmaxvsmod0->SetMarkerStyle(20);
324 anmaxvsmod0->Draw("AP");
325 anmaxvsmod0->GetXaxis()->SetTitle("Module Number");
326 anmaxvsmod0->GetYaxis()->SetTitle("Anode with max. drift speed");
327 anmaxvsmod0->GetYaxis()->SetTitleOffset(1.4);
328 anmaxvsmod1->SetMarkerStyle(21);
329 anmaxvsmod1->SetMarkerColor(2);
330 anmaxvsmod1->Draw("SAMEP");
331 tleft->Draw();
332 tright->Draw();
333 c3->cd(3);
334 gPad->SetLeftMargin(0.14);
335 dvcevsmod0->SetMarkerStyle(20);
336 dvcevsmod0->Draw("AP");
337 dvcevsmod0->GetXaxis()->SetTitle("Module Number");
338 dvcevsmod0->GetYaxis()->SetTitle("vdrift(anode128)-vdrift(anode0)");
339 dvcevsmod0->GetYaxis()->SetTitleOffset(1.4);
340 dvcevsmod1->SetMarkerStyle(21);
341 dvcevsmod1->SetMarkerColor(2);
342 dvcevsmod1->Draw("SAMEP");
343 tleft->Draw();
344 tright->Draw();
345 c3->cd(4);
346 gPad->SetLeftMargin(0.14);
347 dveevsmod0->SetMarkerStyle(20);
348 dveevsmod0->Draw("AP");
349 dveevsmod0->GetYaxis()->SetTitleOffset(1.4);
350 dveevsmod0->GetXaxis()->SetTitle("Module Number");
351 dveevsmod0->GetYaxis()->SetTitle("vdrift(anode256)-vdrift(anode0)");
352 dveevsmod1->SetMarkerStyle(21);
353 dveevsmod1->SetMarkerColor(2);
354 dveevsmod1->Draw("SAMEP");
355 tleft->Draw();
356 tright->Draw();
357
358
40b3a8c7 359}
360
361
362
e9b71015 363void ShowDriftSpeedSDD(Int_t nrun, Int_t year=2010, Int_t nv=-1){
40b3a8c7 364 TGrid::Connect("alien:",0,0,"t");
551eb942 365 TString cmd=Form("gbbox find \"/alice/data/%d/OCDB/ITS/Calib/DriftSpeedSDD\" \"Run%d*.root\" > run.txt",year,nrun);
e9b71015 366 if(nv>0){
367 cmd.Form("gbbox find \"/alice/data/%d/OCDB/ITS/Calib/DriftSpeedSDD\" \"Run%d_999999999_v%d_s0.root\" > run.txt",year,nrun,nv);
368 }
551eb942 369 gSystem->Exec(cmd.Data());
370
371 Char_t filnam[200],filnamalien[200];
372 FILE* runtxt=fopen("run.txt","r");
373 fscanf(runtxt,"%s\n",filnam);
374 if(!strstr(filnam,"/alice/data/")){
375 printf("Bad run number\n");
376 gSystem->Exec("rm run.txt");
377 return;
378 }
379 sprintf(filnamalien,"alien://%s",filnam);
380
381 printf("Open file: %s\n",filnamalien);
b70dd7af 382 ShowDriftSpeedSDD(filnamalien,0,260,nrun);
551eb942 383 fclose(runtxt);
384 gSystem->Exec("rm run.txt");
385
40b3a8c7 386}