1 #if !defined(__CINT__) || defined(__MAKECINT__)
7 #include <TLegendEntry.h>
11 #include <TGraphErrors.h>
14 #include <TObjArray.h>
15 #include "AliCDBEntry.h"
16 #include "AliITSDriftSpeedArraySDD.h"
17 #include "AliITSgeomTGeo.h"
23 // Macro to plot the drift speed vs. time from the OCDB files
24 // created from INJECTOR runs (OCDB/ITS/Calib/DriftSpeedSDD)
25 // Origin: F. Prino (prino@to.infn.it)
27 void FillErrors(Float_t errSpeed[260]);
29 void PlotDriftSpeedSDDVsTime(Int_t firstRun=76172,
30 Int_t lastRun=999999999,
33 TGrid::Connect("alien:",0,0,"t");
35 Float_t errSpeed[260];
38 gSystem->Exec("gbbox find \"/alice/data/2009/OCDB/ITS/Calib/DriftSpeedSDD\" \"Run*.root\" > runSpeedAlien.txt");
39 FILE* listruns=fopen("runSpeedAlien.txt","r");
40 Char_t filnam[200],filnamalien[200];
41 TGraphErrors** gvdrvstime=new TGraphErrors*[520];
42 TGraphErrors** gvdrvsrun=new TGraphErrors*[520];
44 for(Int_t iMod=0; iMod<260;iMod++){
45 gvdrvstime[iMod]=new TGraphErrors(0);
46 gvdrvstime[iMod]->SetTitle(Form("Module %d",iMod+240));
47 gvdrvstime[iMod]->SetName(Form("gspmod%dt",iMod+240));
48 gvdrvsrun[iMod]=new TGraphErrors(0);
49 gvdrvsrun[iMod]->SetTitle(Form("Module %d",iMod+240));
50 gvdrvsrun[iMod]->SetName(Form("gspmod%dr",iMod+240));
53 Float_t Edrift=(1800-45)/291/0.012;
56 while(!feof(listruns)){
57 fscanf(listruns,"%s\n",filnam);
58 if(!strstr(filnam,"/alice/data/2009")) continue;
59 sscanf(filnam,"/alice/data/2009/OCDB/ITS/Calib/DriftSpeedSDD/Run%d_%d_v%d_s%d.root",&nrun,&nrun2,&dum,&dum);
60 if(nrun<85639 && nrun2> 85639) continue;
61 if(nrun<firstRun) continue;
62 if(nrun>lastRun) continue;
63 sprintf(filnamalien,"alien://%s",filnam);
64 printf("Open file: %s\n",filnam);
65 TFile *f= TFile::Open(filnamalien);
66 AliCDBEntry *ent=(AliCDBEntry*)f->Get("AliCDBEntry");
67 TObjArray *drspSDD = (TObjArray *)ent->GetObject();
69 AliITSDriftSpeedArraySDD *vdriftarr;
70 for(Int_t iMod=0; iMod<260;iMod++){
72 if(anode<256) index=2*iMod;
74 vdriftarr=(AliITSDriftSpeedArraySDD*)drspSDD->At(index);
76 if(anode>256) iAn=anode-256;
77 Float_t vdrift=vdriftarr->GetDriftSpeed(0,iAn);
78 UInt_t timest=vdriftarr->GetTimestamp(0);
79 if(timest==0) continue;
80 Float_t timeday=float(timest-1247762992)/60./60./24.;
81 Float_t mob=vdrift*1.E5/Edrift;
82 Float_t temper=293.15*TMath::Power((mob/1350.),-1/2.4);
83 if(iMod==497-240) printf("Run %s Time %d Day %f Speed=%f Temp=%f\n",filnam,timest,timeday,vdrift,temper);
84 gvdrvstime[iMod]->SetPoint(iPt[iMod],timeday,vdrift);
85 gvdrvstime[iMod]->SetPointError(iPt[iMod],0,errSpeed[iMod]);
86 gvdrvsrun[iMod]->SetPoint(iPt[iMod],(Float_t)nrun,vdrift);
87 gvdrvsrun[iMod]->SetPointError(iPt[iMod],0,errSpeed[iMod]);
99 // Int_t mod4=497-240;
100 Int_t lay1,lad1,det1;
101 Int_t lay2,lad2,det2;
102 Int_t lay3,lad3,det3;
103 Int_t lay4,lad4,det4;
104 AliITSgeomTGeo::GetModuleId(mod1+240,lay1,lad1,det1);
105 AliITSgeomTGeo::GetModuleId(mod2+240,lay2,lad2,det2);
106 AliITSgeomTGeo::GetModuleId(mod3+240,lay3,lad3,det3);
107 AliITSgeomTGeo::GetModuleId(mod4+240,lay4,lad4,det4);
109 TFile *ofil=new TFile("DriftSp2009VsTime.root","recreate");
110 for(Int_t iMod=0; iMod<260;iMod++){
111 gvdrvstime[iMod]->Write();
112 gvdrvsrun[iMod]->Write();
116 gStyle->SetOptTitle(0);
117 TCanvas* c0=new TCanvas();
120 gvdrvstime[mod1]->SetMarkerStyle(20);
121 gvdrvstime[mod2]->SetMarkerStyle(22);
122 gvdrvstime[mod2]->SetMarkerColor(2);
123 gvdrvstime[mod2]->SetLineColor(2);
124 gvdrvstime[mod3]->SetMarkerStyle(29);
125 gvdrvstime[mod3]->SetMarkerColor(3);
126 gvdrvstime[mod3]->SetLineColor(3);
127 gvdrvstime[mod4]->SetMarkerStyle(27);
128 gvdrvstime[mod4]->SetMarkerColor(4);
129 gvdrvstime[mod4]->SetLineColor(4);
130 gvdrvstime[mod1]->Draw("AP");
131 gvdrvstime[mod1]->SetMinimum(6.3);
132 gvdrvstime[mod1]->SetMaximum(6.75);
134 gvdrvstime[mod1]->GetXaxis()->SetTitle("Time (days since July 16th 2009)");
135 gvdrvstime[mod1]->GetYaxis()->SetTitle("Drift speed (#mum/ns)");
136 gvdrvstime[mod2]->Draw("PSAME");
137 gvdrvstime[mod3]->Draw("PSAME");
138 gvdrvstime[mod4]->Draw("PSAME");
139 TLegend* leg=new TLegend(0.6,0.7,0.89,0.89);
140 leg->SetBorderSize(0);
141 leg->SetFillColor(0);
142 leg->SetFillStyle(0);
143 TLegendEntry* lent=leg->AddEntry(gvdrvstime[mod1],Form("Lay %d Lad %d Det %d",lay1,lad1,det1),"P");
144 lent=leg->AddEntry(gvdrvstime[mod2],Form("Lay %d Lad %d Det %d",lay2,lad2,det2),"P");
145 lent->SetTextColor(2);
146 lent=leg->AddEntry(gvdrvstime[mod3],Form("Lay %d Lad %d Det %d",lay3,lad3,det3),"P");
147 lent->SetTextColor(3);
148 lent=leg->AddEntry(gvdrvstime[mod4],Form("Lay %d Lad %d Det %d",lay4,lad4,det4),"P");
149 lent->SetTextColor(4);
152 TCanvas* c1=new TCanvas();
155 gvdrvsrun[mod1]->SetMarkerStyle(20);
156 gvdrvsrun[mod2]->SetMarkerStyle(22);
157 gvdrvsrun[mod2]->SetMarkerColor(2);
158 gvdrvsrun[mod2]->SetLineColor(2);
159 gvdrvsrun[mod3]->SetMarkerStyle(29);
160 gvdrvsrun[mod3]->SetMarkerColor(3);
161 gvdrvsrun[mod3]->SetLineColor(3);
162 gvdrvsrun[mod4]->SetMarkerStyle(27);
163 gvdrvsrun[mod4]->SetMarkerColor(4);
164 gvdrvsrun[mod4]->SetLineColor(4);
165 gvdrvsrun[mod1]->Draw("AP");
166 gvdrvsrun[mod1]->SetMinimum(6.3);
167 gvdrvsrun[mod1]->SetMaximum(6.75);
169 gvdrvsrun[mod1]->GetXaxis()->SetTitle("Run number");
170 gvdrvsrun[mod1]->GetYaxis()->SetTitle("Drift speed (#mum/ns)");
171 gvdrvsrun[mod2]->Draw("PSAME");
172 gvdrvsrun[mod3]->Draw("PSAME");
173 gvdrvsrun[mod4]->Draw("PSAME");
177 void FillErrors(Float_t errSpeed[260]){
179 0.002308,0.005120,0.004632,0.001000,0.001735,
180 0.001000,0.001000,0.002667,0.004237,0.005297,
181 0.001000,0.005460,0.005149,0.003921,0.001000,
182 0.003906,0.001000,0.004871,0.001000,0.001000,
183 0.001000,0.001000,0.002261,0.002986,0.002056,
184 0.002848,0.001000,0.001777,0.002822,0.004651,
185 0.001000,0.003551,0.006466,0.001000,0.002083,
186 0.004531,0.001000,0.002213,0.001000,0.001000,
187 0.001000,0.001000,0.001000,0.003223,0.002800,
188 0.002147,0.001000,0.003364,0.001000,0.001000,
189 0.002515,0.003229,0.002552,0.005765,0.002368,
190 0.003473,0.002363,0.001000,0.003413,0.001000,
191 0.004906,0.001000,0.004346,0.004887,0.007138,
192 0.007242,0.004289,0.003970,0.002914,0.002199,
193 0.001000,0.003483,0.002154,0.002914,0.003097,
194 0.006034,0.003101,0.001000,0.002425,0.002651,
195 0.002771,0.002409,0.002260,0.003109,0.001000,
196 0.003384,0.003374,0.002212,0.004441,0.001000,
197 0.001000,0.001000,0.003578,0.001000,0.001000,
198 0.003517,0.003590,0.001787,0.003329,0.001000,
199 0.002770,0.001000,0.004032,0.003059,0.001000,
200 0.001000,0.001000,0.001000,0.001000,0.001000,
201 0.001000,0.004556,0.001000,0.001000,0.001000,
202 0.001000,0.001000,0.001000,0.004819,0.002100,
203 0.002624,0.003784,0.003772,0.002483,0.002792,
204 0.001000,0.004713,0.003214,0.003180,0.002145,
205 0.002470,0.003078,0.001000,0.007131,0.002770,
206 0.002533,0.001000,0.004362,0.002819,0.001000,
207 0.003630,0.004215,0.002975,0.001000,0.003790,
208 0.002345,0.001000,0.003999,0.004555,0.003989,
209 0.001000,0.001000,0.001000,0.003136,0.002426,
210 0.005144,0.002844,0.002310,0.002467,0.002503,
211 0.003811,0.003440,0.004773,0.003114,0.001000,
212 0.000583,0.001000,0.001000,0.003385,0.001000,
213 0.001000,0.001000,0.001000,0.003108,0.002109,
214 0.005325,0.003750,0.002810,0.003559,0.001000,
215 0.001000,0.003262,0.003903,0.001000,0.003622,
216 0.002533,0.002121,0.003733,0.005353,0.002221,
217 0.004767,0.003267,0.004892,0.002152,0.003398,
218 0.001000,0.003146,0.001000,0.002952,0.003310,
219 0.002644,0.002573,0.001000,0.003989,0.001000,
220 0.005294,0.003095,0.003479,0.002250,0.001000,
221 0.001000,0.005221,0.001000,0.001653,0.004330,
222 0.013188,0.007375,0.003226,0.003875,0.001000,
223 0.003653,0.001000,0.002655,0.001000,0.001000,
224 0.001000,0.001000,0.004718,0.001000,0.001000,
225 0.001000,0.002780,0.003680,0.001000,0.002787,
226 0.001000,0.004617,0.001000,0.001000,0.003231,
227 0.001887,0.002090,0.003326,0.129970,0.004907,
228 0.004334,0.001000,0.001000,0.003489,0.002573,
229 0.002566,0.002982,0.001000,0.001000,0.003436,
230 0.004016,0.003736,0.001784,0.004775,0.008090};
231 for(Int_t i=0;i<260;i++) errSpeed[i]=err[i];