1 #if !defined(__CINT__) || defined(__MAKECINT__)
9 #include <TLegendEntry.h>
14 #include <TGraphErrors.h>
17 #include <TObjArray.h>
18 #include "AliCDBEntry.h"
19 #include "AliITSDriftSpeedArraySDD.h"
20 #include "AliITSgeomTGeo.h"
26 // Macro to plot the drift speed vs. time from the OCDB files
27 // created from INJECTOR runs (OCDB/ITS/Calib/DriftSpeedSDD)
28 // Origin: F. Prino (prino@to.infn.it)
30 void FillErrors(Float_t errSpeed[260]);
32 void PlotDriftSpeedSDDVsTime(Int_t year=2010, Int_t firstRun=62840,
33 Int_t lastRun=999999999,
35 TGrid::Connect("alien:",0,0,"t");
36 Float_t errSpeed[260];
38 TString cmd=Form("gbbox find \"/alice/data/%d/OCDB/ITS/Calib/DriftSpeedSDD\" \"Run*.root\" > runSpeedAlien.txt",year);
39 gSystem->Exec(cmd.Data());
40 FILE* listruns=fopen("runSpeedAlien.txt","r");
41 Char_t filnam[200],filnamalien[200];
42 TGraphErrors** gvdrvstime=new TGraphErrors*[520];
43 TGraphErrors** gvdrvsrun=new TGraphErrors*[520];
44 TGraph* gGoodInjVsRun=new TGraph(0);
45 gGoodInjVsRun->SetName("gGoodInjVsRun");
46 TGraph* gAverSpeedVsRun=new TGraph(0);
47 gAverSpeedVsRun->SetName("gAverSpeedVsRun");
48 TGraph* gGoodInjVsTime=new TGraph(0);
49 gGoodInjVsTime->SetName("gGoodInjVsTime");
50 TGraph* gAverSpeedVsTime=new TGraph(0);
51 gAverSpeedVsTime->SetName("gAverSpeedVsIime");
53 for(Int_t iMod=0; iMod<260;iMod++){
54 gvdrvstime[iMod]=new TGraphErrors(0);
55 gvdrvstime[iMod]->SetTitle(Form("Module %d",iMod+240));
56 gvdrvstime[iMod]->SetName(Form("gspmod%dt",iMod+240));
57 gvdrvsrun[iMod]=new TGraphErrors(0);
58 gvdrvsrun[iMod]->SetTitle(Form("Module %d",iMod+240));
59 gvdrvsrun[iMod]->SetName(Form("gspmod%dr",iMod+240));
61 Float_t Edrift=(1800-45)/291/0.012;
62 Int_t nrun,nrun2,nv,ns;
63 while(!feof(listruns)){
64 fscanf(listruns,"%s\n",filnam);
65 Char_t directory[100];
66 sprintf(directory,"/alice/data/%d",year);
67 if(!strstr(filnam,directory)) continue;
68 sscanf(filnam,"/alice/data/%d/OCDB/ITS/Calib/DriftSpeedSDD/Run%d_%d_v%d_s%d.root",&year,&nrun,&nrun2,&nv,&ns);
70 if(year==2009 && (nrun<85639 && nrun2> 85639)) continue;// protection for files with swapped ladders 4-5 of layer 3
71 if(year==2009 && (nrun>100000 && nv< 325)) continue; // protection for files with swapped ladder 0-1 of layer 4
73 if(nrun<firstRun) continue;
74 if(nrun>lastRun) continue;
75 sprintf(filnamalien,"alien://%s",filnam);
76 printf("Open file: %s\n",filnam);
77 TFile *f= TFile::Open(filnamalien);
78 AliCDBEntry *ent=(AliCDBEntry*)f->Get("AliCDBEntry");
79 TObjArray *drspSDD = (TObjArray *)ent->GetObject();
85 AliITSDriftSpeedArraySDD *vdriftarr;
86 AliITSDriftSpeedArraySDD *vdriftarr0;
87 AliITSDriftSpeedArraySDD *vdriftarr1;
89 for(Int_t iMod=0; iMod<260;iMod++){
91 if(anode<256) index=2*iMod;
93 vdriftarr=(AliITSDriftSpeedArraySDD*)drspSDD->At(index);
97 vdriftarr0=(AliITSDriftSpeedArraySDD*)drspSDD->At(i0);
98 vdriftarr1=(AliITSDriftSpeedArraySDD*)drspSDD->At(i1);
100 Int_t statusInj0=vdriftarr0->GetInjectorStatus();
101 Int_t statusInj1=vdriftarr1->GetInjectorStatus();
102 if(statusInj0>0) iGoodInj++;
104 if(statusInj1>0) iGoodInj++;
108 if(anode>256) iAn=anode-256;
109 Float_t vdrift=vdriftarr->GetDriftSpeed(0,iAn);
110 if(vdrift<4. || vdrift > 8.) continue;
111 UInt_t timest=vdriftarr->GetTimestamp(0);
112 if(timest==0) continue;
113 Int_t npt=gvdrvsrun[iMod]->GetN();
114 gvdrvsrun[iMod]->SetPoint(npt,(Float_t)nrun,vdrift);
115 gvdrvsrun[iMod]->SetPointError(npt,0,errSpeed[iMod]);
118 if(year==2009) timeZero=1247762992;
119 else timeZero=1262300400;
120 if(timest<timeZero) continue;
121 timeday=float(timest-timeZero)/60./60./24.;
122 Float_t mob=vdrift*1.E5/Edrift;
123 Float_t temper=293.15*TMath::Power((mob/1350.),-1/2.4);
124 if(iMod==497-240) printf("Run %s Time %d Day %f Speed=%f Temp=%f\n",filnam,timest,timeday,vdrift,temper);
125 npt=gvdrvstime[iMod]->GetN();
126 gvdrvstime[iMod]->SetPoint(npt,timeday,vdrift);
127 gvdrvstime[iMod]->SetPointError(npt,0,errSpeed[iMod]);
129 Int_t npt=gGoodInjVsRun->GetN();
130 gGoodInjVsRun->SetPoint(npt,(Float_t)nrun,iGoodInj);
131 gAverSpeedVsRun->SetPoint(npt,(Float_t)nrun,iAverSpeed);
133 npt=gGoodInjVsTime->GetN();
134 gGoodInjVsTime->SetPoint(npt,timeday,iGoodInj);
135 gAverSpeedVsTime->SetPoint(npt,timeday,iAverSpeed);
137 printf("Number of half-modules with drift speed from injectors = %d\n",iGoodInj);
138 printf("Number of half-modules with average drift speed = %d\n",iAverSpeed);
144 // Int_t mod1=268-240;
145 // Int_t mod2=274-240;
148 // Int_t mod4=497-240;
149 Int_t lay1,lad1,det1;
150 Int_t lay2,lad2,det2;
151 Int_t lay3,lad3,det3;
152 Int_t lay4,lad4,det4;
153 AliITSgeomTGeo::GetModuleId(mod1+240,lay1,lad1,det1);
154 AliITSgeomTGeo::GetModuleId(mod2+240,lay2,lad2,det2);
155 AliITSgeomTGeo::GetModuleId(mod3+240,lay3,lad3,det3);
156 AliITSgeomTGeo::GetModuleId(mod4+240,lay4,lad4,det4);
158 sprintf(filout,"DriftSpVsTime_%d.root",year);
159 TFile *ofil=new TFile(filout,"recreate");
160 for(Int_t iMod=0; iMod<260;iMod++){
161 gvdrvstime[iMod]->Write();
162 gvdrvsrun[iMod]->Write();
164 gGoodInjVsRun->Write();
165 gGoodInjVsTime->Write();
166 gAverSpeedVsRun->Write();
167 gAverSpeedVsTime->Write();
170 gStyle->SetOptTitle(0);
171 TCanvas* c0=new TCanvas("c0","Vdrift vs. time");
174 gvdrvstime[mod1]->SetMarkerStyle(20);
175 gvdrvstime[mod2]->SetMarkerStyle(22);
176 gvdrvstime[mod2]->SetMarkerColor(2);
177 gvdrvstime[mod2]->SetLineColor(2);
178 gvdrvstime[mod3]->SetMarkerStyle(29);
179 gvdrvstime[mod3]->SetMarkerColor(3);
180 gvdrvstime[mod3]->SetLineColor(3);
181 gvdrvstime[mod4]->SetMarkerStyle(27);
182 gvdrvstime[mod4]->SetMarkerColor(4);
183 gvdrvstime[mod4]->SetLineColor(4);
184 gvdrvstime[mod1]->Draw("AP");
185 gvdrvstime[mod1]->SetMinimum(6.3);
186 gvdrvstime[mod1]->SetMaximum(6.75);
189 sprintf(title,"Time (days since July 16th 2009)");
190 }else if (year==2010){
191 sprintf(title,"Time (days since January 1st 2010)");
193 gvdrvstime[mod1]->GetXaxis()->SetTitle(title);
194 gvdrvstime[mod1]->GetYaxis()->SetTitle("Drift speed (#mum/ns)");
195 gvdrvstime[mod2]->Draw("PSAME");
196 gvdrvstime[mod3]->Draw("PSAME");
197 gvdrvstime[mod4]->Draw("PSAME");
198 TLegend* leg=new TLegend(0.6,0.7,0.89,0.89);
199 leg->SetBorderSize(0);
200 leg->SetFillColor(0);
201 leg->SetFillStyle(0);
202 TLegendEntry* lent=leg->AddEntry(gvdrvstime[mod1],Form("Lay %d Lad %d Det %d",lay1,lad1,det1),"P");
203 lent=leg->AddEntry(gvdrvstime[mod2],Form("Lay %d Lad %d Det %d",lay2,lad2,det2),"P");
204 lent->SetTextColor(2);
205 lent=leg->AddEntry(gvdrvstime[mod3],Form("Lay %d Lad %d Det %d",lay3,lad3,det3),"P");
206 lent->SetTextColor(3);
207 lent=leg->AddEntry(gvdrvstime[mod4],Form("Lay %d Lad %d Det %d",lay4,lad4,det4),"P");
208 lent->SetTextColor(4);
211 TCanvas* c1=new TCanvas("c1","Vdrift vs. run");
214 gvdrvsrun[mod1]->SetMarkerStyle(20);
215 gvdrvsrun[mod2]->SetMarkerStyle(22);
216 gvdrvsrun[mod2]->SetMarkerColor(2);
217 gvdrvsrun[mod2]->SetLineColor(2);
218 gvdrvsrun[mod3]->SetMarkerStyle(29);
219 gvdrvsrun[mod3]->SetMarkerColor(3);
220 gvdrvsrun[mod3]->SetLineColor(3);
221 gvdrvsrun[mod4]->SetMarkerStyle(27);
222 gvdrvsrun[mod4]->SetMarkerColor(4);
223 gvdrvsrun[mod4]->SetLineColor(4);
224 gvdrvsrun[mod1]->Draw("AP");
225 gvdrvsrun[mod1]->SetMinimum(6.3);
226 gvdrvsrun[mod1]->SetMaximum(6.75);
228 gvdrvsrun[mod1]->GetXaxis()->SetTitle("Run number");
229 gvdrvsrun[mod1]->GetYaxis()->SetTitle("Drift speed (#mum/ns)");
230 gvdrvsrun[mod2]->Draw("PSAME");
231 gvdrvsrun[mod3]->Draw("PSAME");
232 gvdrvsrun[mod4]->Draw("PSAME");
236 TH2F* hlay3=new TH2F("hlay3","Variation of the drift speed (%) Layer 3",6,-0.5,5.5,14,-0.5,13.5);
237 hlay3->GetXaxis()->SetTitle("Detector");
238 hlay3->GetYaxis()->SetTitle("Ladder");
239 hlay3->GetXaxis()->SetTickLength(0);
240 hlay3->GetYaxis()->SetTickLength(0);
243 TH2F* hlay4=new TH2F("hlay4","Variation of the drift speed (%) Layer 4",8,-0.5,7.5,22,-0.5,21.5);
244 hlay4->GetXaxis()->SetTitle("Detector");
245 hlay4->GetYaxis()->SetTitle("Ladder");
246 hlay4->GetXaxis()->SetTickLength(0);
247 hlay4->GetYaxis()->SetTickLength(0);
248 hlay4->GetYaxis()->SetTitle("Ladder");
251 Double_t run1,run2,vdr1,vdr2;
253 for(Int_t iMod=0; iMod<260; iMod++){
254 Int_t lastPoint=gvdrvsrun[iMod]->GetN()-1;
255 gvdrvsrun[iMod]->GetPoint(lastPoint,run2,vdr2);
256 gvdrvsrun[iMod]->GetPoint(lastPoint-1,run1,vdr1);
258 if(vdr1>0.) diff=100*(vdr2-vdr1)/vdr1;
259 AliITSgeomTGeo::GetModuleId(iMod+240,lay,lad,det);
260 if(lay==3) hlay3->SetBinContent(det,lad,diff);
261 if(lay==4) hlay4->SetBinContent(det,lad,diff);
263 TLine* lin=new TLine(0,0,0,23);
264 gStyle->SetPalette(1);
266 TCanvas *c0b=new TCanvas("c0b","Percent difference Last Run - Previous Run",900,600);
269 hlay3->DrawCopy("colz");
270 for(Int_t i=0;i<6;i++){
277 for(Int_t i=0;i<14;i++){
285 hlay4->DrawCopy("colz");
286 for(Int_t i=0;i<8;i++){
293 for(Int_t i=0;i<22;i++){
301 TCanvas* c4=new TCanvas("c4","GoodMod vs. run");
304 gGoodInjVsRun->SetMarkerStyle(20);
305 gGoodInjVsRun->SetMarkerColor(2);
306 gGoodInjVsRun->GetXaxis()->SetTitle("Run number");
307 gGoodInjVsRun->GetYaxis()->SetTitle("Half-modules with drift speed from injectors");
308 gGoodInjVsRun->Draw("AP");
310 TCanvas* c5=new TCanvas("c5","GoodMod vs. time");
313 gGoodInjVsTime->SetMarkerStyle(20);
314 gGoodInjVsTime->SetMarkerColor(2);
315 gGoodInjVsTime->GetXaxis()->SetTitle(title);
316 gGoodInjVsTime->GetYaxis()->SetTitle("Half-modules with drift speed from injectors");
317 gGoodInjVsTime->Draw("AP");
320 void FillErrors(Float_t errSpeed[260]){
322 0.002308,0.005120,0.004632,0.001000,0.001735,
323 0.001000,0.001000,0.002667,0.004237,0.005297,
324 0.001000,0.005460,0.005149,0.003921,0.001000,
325 0.003906,0.001000,0.004871,0.001000,0.001000,
326 0.001000,0.001000,0.002261,0.002986,0.002056,
327 0.002848,0.001000,0.001777,0.002822,0.004651,
328 0.001000,0.003551,0.006466,0.001000,0.002083,
329 0.004531,0.001000,0.002213,0.001000,0.001000,
330 0.001000,0.001000,0.001000,0.003223,0.002800,
331 0.002147,0.001000,0.003364,0.001000,0.001000,
332 0.002515,0.003229,0.002552,0.005765,0.002368,
333 0.003473,0.002363,0.001000,0.003413,0.001000,
334 0.004906,0.001000,0.004346,0.004887,0.007138,
335 0.007242,0.004289,0.003970,0.002914,0.002199,
336 0.001000,0.003483,0.002154,0.002914,0.003097,
337 0.006034,0.003101,0.001000,0.002425,0.002651,
338 0.002771,0.002409,0.002260,0.003109,0.001000,
339 0.003384,0.003374,0.002212,0.004441,0.001000,
340 0.001000,0.001000,0.003578,0.001000,0.001000,
341 0.003517,0.003590,0.001787,0.003329,0.001000,
342 0.002770,0.001000,0.004032,0.003059,0.001000,
343 0.001000,0.001000,0.001000,0.001000,0.001000,
344 0.001000,0.004556,0.001000,0.001000,0.001000,
345 0.001000,0.001000,0.001000,0.004819,0.002100,
346 0.002624,0.003784,0.003772,0.002483,0.002792,
347 0.001000,0.004713,0.003214,0.003180,0.002145,
348 0.002470,0.003078,0.001000,0.007131,0.002770,
349 0.002533,0.001000,0.004362,0.002819,0.001000,
350 0.003630,0.004215,0.002975,0.001000,0.003790,
351 0.002345,0.001000,0.003999,0.004555,0.003989,
352 0.001000,0.001000,0.001000,0.003136,0.002426,
353 0.005144,0.002844,0.002310,0.002467,0.002503,
354 0.003811,0.003440,0.004773,0.003114,0.001000,
355 0.000583,0.001000,0.001000,0.003385,0.001000,
356 0.001000,0.001000,0.001000,0.003108,0.002109,
357 0.005325,0.003750,0.002810,0.003559,0.001000,
358 0.001000,0.003262,0.003903,0.001000,0.003622,
359 0.002533,0.002121,0.003733,0.005353,0.002221,
360 0.004767,0.003267,0.004892,0.002152,0.003398,
361 0.001000,0.003146,0.001000,0.002952,0.003310,
362 0.002644,0.002573,0.001000,0.003989,0.001000,
363 0.005294,0.003095,0.003479,0.002250,0.001000,
364 0.001000,0.005221,0.001000,0.001653,0.004330,
365 0.013188,0.007375,0.003226,0.003875,0.001000,
366 0.003653,0.001000,0.002655,0.001000,0.001000,
367 0.001000,0.001000,0.004718,0.001000,0.001000,
368 0.001000,0.002780,0.003680,0.001000,0.002787,
369 0.001000,0.004617,0.001000,0.001000,0.003231,
370 0.001887,0.002090,0.003326,0.129970,0.004907,
371 0.004334,0.001000,0.001000,0.003489,0.002573,
372 0.002566,0.002982,0.001000,0.001000,0.003436,
373 0.004016,0.003736,0.001784,0.004775,0.008090};
374 for(Int_t i=0;i<260;i++) errSpeed[i]=err[i];