]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/PlotDriftSpeedSDDVsTime.C
Improve kITSrefit efficiency at low pt (A. Dainese)
[u/mrichter/AliRoot.git] / ITS / PlotDriftSpeedSDDVsTime.C
1 #if !defined(__CINT__) || defined(__MAKECINT__)
2 #include <TFile.h>
3 #include <TH1F.h>
4 #include <TGraph.h>
5 #include <TStyle.h>
6 #include <TLegend.h>
7 #include <TLegendEntry.h>
8 #include <TSystem.h>
9 #include <TGrid.h>
10 #include <TMath.h>
11 #include <TGraphErrors.h>
12 #include <TCanvas.h>
13 #include <TLatex.h>
14 #include <TObjArray.h>
15 #include "AliCDBEntry.h"
16 #include "AliITSDriftSpeedArraySDD.h"
17 #include "AliITSgeomTGeo.h"
18 #endif
19
20 /*  $Id$    */
21
22
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)
26
27 void FillErrors(Float_t errSpeed[260]);
28
29 void PlotDriftSpeedSDDVsTime(Int_t firstRun=76172, 
30                              Int_t lastRun=999999999, 
31                              Int_t anode=128){
32
33   TGrid::Connect("alien:",0,0,"t");
34
35   Float_t errSpeed[260];
36   FillErrors(errSpeed);
37
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];
43   Int_t iPt[260];
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));
51     iPt[iMod]=0;
52   }
53   Float_t Edrift=(1800-45)/291/0.012;  
54   Int_t nrun,nrun2,nv,ns;
55
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,&nv,&ns);
60     if(nrun<85639 && nrun2> 85639) continue;// protection for files with swapped ladders 4-5 of layer 3 
61     if(nrun>100000 && nv< 271) continue; // protection for files with swapped ladder 0-1 of layer 4
62     if(nrun<firstRun) continue;
63     if(nrun>lastRun) continue;
64     sprintf(filnamalien,"alien://%s",filnam);
65     printf("Open file: %s\n",filnam);
66     TFile *f= TFile::Open(filnamalien);
67     AliCDBEntry *ent=(AliCDBEntry*)f->Get("AliCDBEntry");
68     TObjArray *drspSDD = (TObjArray *)ent->GetObject();
69     
70     AliITSDriftSpeedArraySDD *vdriftarr;
71     for(Int_t iMod=0; iMod<260;iMod++){
72       Int_t index=-1;
73       if(anode<256) index=2*iMod;
74       else index=2*iMod+1;
75       vdriftarr=(AliITSDriftSpeedArraySDD*)drspSDD->At(index);
76       Int_t iAn=anode;
77       if(anode>256) iAn=anode-256;
78       Float_t vdrift=vdriftarr->GetDriftSpeed(0,iAn);
79       UInt_t timest=vdriftarr->GetTimestamp(0);
80       if(timest==0) continue;
81       Float_t timeday=float(timest-1247762992)/60./60./24.;
82       Float_t mob=vdrift*1.E5/Edrift;  
83       Float_t temper=293.15*TMath::Power((mob/1350.),-1/2.4); 
84       if(iMod==497-240) printf("Run %s   Time %d Day %f Speed=%f Temp=%f\n",filnam,timest,timeday,vdrift,temper);
85       gvdrvstime[iMod]->SetPoint(iPt[iMod],timeday,vdrift);
86       gvdrvstime[iMod]->SetPointError(iPt[iMod],0,errSpeed[iMod]);
87       gvdrvsrun[iMod]->SetPoint(iPt[iMod],(Float_t)nrun,vdrift);
88       gvdrvsrun[iMod]->SetPointError(iPt[iMod],0,errSpeed[iMod]);
89       ++iPt[iMod];
90     }
91     f->Close();
92   }
93
94   Int_t mod1=244-240;
95   Int_t mod2=277-240;
96   //Int_t mod1=268-240;
97   //Int_t mod2=274-240;
98   Int_t mod3=327-240;
99   Int_t mod4=453-240;
100   //  Int_t mod4=497-240;
101   Int_t lay1,lad1,det1;
102   Int_t lay2,lad2,det2;
103   Int_t lay3,lad3,det3;
104   Int_t lay4,lad4,det4;
105   AliITSgeomTGeo::GetModuleId(mod1+240,lay1,lad1,det1);
106   AliITSgeomTGeo::GetModuleId(mod2+240,lay2,lad2,det2);
107   AliITSgeomTGeo::GetModuleId(mod3+240,lay3,lad3,det3);
108   AliITSgeomTGeo::GetModuleId(mod4+240,lay4,lad4,det4);
109
110   TFile *ofil=new TFile("DriftSp2009VsTime.root","recreate");
111   for(Int_t iMod=0; iMod<260;iMod++){
112     gvdrvstime[iMod]->Write();
113     gvdrvsrun[iMod]->Write();
114   }
115   ofil->Close();
116
117   gStyle->SetOptTitle(0);
118   TCanvas* c0=new TCanvas();
119   c0->SetGridx();
120   c0->SetGridy();
121   gvdrvstime[mod1]->SetMarkerStyle(20);
122   gvdrvstime[mod2]->SetMarkerStyle(22);
123   gvdrvstime[mod2]->SetMarkerColor(2);
124   gvdrvstime[mod2]->SetLineColor(2);
125   gvdrvstime[mod3]->SetMarkerStyle(29);
126   gvdrvstime[mod3]->SetMarkerColor(3);
127   gvdrvstime[mod3]->SetLineColor(3);
128   gvdrvstime[mod4]->SetMarkerStyle(27);
129   gvdrvstime[mod4]->SetMarkerColor(4);
130   gvdrvstime[mod4]->SetLineColor(4);
131   gvdrvstime[mod1]->Draw("AP");
132   gvdrvstime[mod1]->SetMinimum(6.3);
133   gvdrvstime[mod1]->SetMaximum(6.75);
134
135   gvdrvstime[mod1]->GetXaxis()->SetTitle("Time (days since July 16th 2009)");
136   gvdrvstime[mod1]->GetYaxis()->SetTitle("Drift speed (#mum/ns)");
137   gvdrvstime[mod2]->Draw("PSAME");
138   gvdrvstime[mod3]->Draw("PSAME");
139   gvdrvstime[mod4]->Draw("PSAME");
140   TLegend* leg=new TLegend(0.6,0.7,0.89,0.89);
141   leg->SetBorderSize(0);
142   leg->SetFillColor(0);
143   leg->SetFillStyle(0);
144   TLegendEntry* lent=leg->AddEntry(gvdrvstime[mod1],Form("Lay %d Lad %d Det %d",lay1,lad1,det1),"P");
145   lent=leg->AddEntry(gvdrvstime[mod2],Form("Lay %d Lad %d Det %d",lay2,lad2,det2),"P");
146   lent->SetTextColor(2);
147   lent=leg->AddEntry(gvdrvstime[mod3],Form("Lay %d Lad %d Det %d",lay3,lad3,det3),"P");
148   lent->SetTextColor(3);
149   lent=leg->AddEntry(gvdrvstime[mod4],Form("Lay %d Lad %d Det %d",lay4,lad4,det4),"P");
150   lent->SetTextColor(4);
151   leg->Draw();
152
153   TCanvas* c1=new TCanvas();
154   c1->SetGridx();
155   c1->SetGridy();
156   gvdrvsrun[mod1]->SetMarkerStyle(20);
157   gvdrvsrun[mod2]->SetMarkerStyle(22);
158   gvdrvsrun[mod2]->SetMarkerColor(2);
159   gvdrvsrun[mod2]->SetLineColor(2);
160   gvdrvsrun[mod3]->SetMarkerStyle(29);
161   gvdrvsrun[mod3]->SetMarkerColor(3);
162   gvdrvsrun[mod3]->SetLineColor(3);
163   gvdrvsrun[mod4]->SetMarkerStyle(27);
164   gvdrvsrun[mod4]->SetMarkerColor(4);
165   gvdrvsrun[mod4]->SetLineColor(4);
166   gvdrvsrun[mod1]->Draw("AP");
167   gvdrvsrun[mod1]->SetMinimum(6.3);
168   gvdrvsrun[mod1]->SetMaximum(6.75);
169
170   gvdrvsrun[mod1]->GetXaxis()->SetTitle("Run number");
171   gvdrvsrun[mod1]->GetYaxis()->SetTitle("Drift speed (#mum/ns)");
172   gvdrvsrun[mod2]->Draw("PSAME");
173   gvdrvsrun[mod3]->Draw("PSAME");
174   gvdrvsrun[mod4]->Draw("PSAME");
175   leg->Draw();
176 }
177
178 void FillErrors(Float_t errSpeed[260]){
179   Float_t err[260]={
180     0.002308,0.005120,0.004632,0.001000,0.001735,
181     0.001000,0.001000,0.002667,0.004237,0.005297,
182     0.001000,0.005460,0.005149,0.003921,0.001000,
183     0.003906,0.001000,0.004871,0.001000,0.001000,
184     0.001000,0.001000,0.002261,0.002986,0.002056,
185     0.002848,0.001000,0.001777,0.002822,0.004651,
186     0.001000,0.003551,0.006466,0.001000,0.002083,
187     0.004531,0.001000,0.002213,0.001000,0.001000,
188     0.001000,0.001000,0.001000,0.003223,0.002800,
189     0.002147,0.001000,0.003364,0.001000,0.001000,
190     0.002515,0.003229,0.002552,0.005765,0.002368,
191     0.003473,0.002363,0.001000,0.003413,0.001000,
192     0.004906,0.001000,0.004346,0.004887,0.007138,
193     0.007242,0.004289,0.003970,0.002914,0.002199,
194     0.001000,0.003483,0.002154,0.002914,0.003097,
195     0.006034,0.003101,0.001000,0.002425,0.002651,
196     0.002771,0.002409,0.002260,0.003109,0.001000,
197     0.003384,0.003374,0.002212,0.004441,0.001000,
198     0.001000,0.001000,0.003578,0.001000,0.001000,
199     0.003517,0.003590,0.001787,0.003329,0.001000,
200     0.002770,0.001000,0.004032,0.003059,0.001000,
201     0.001000,0.001000,0.001000,0.001000,0.001000,
202     0.001000,0.004556,0.001000,0.001000,0.001000,
203     0.001000,0.001000,0.001000,0.004819,0.002100,
204     0.002624,0.003784,0.003772,0.002483,0.002792,
205     0.001000,0.004713,0.003214,0.003180,0.002145,
206     0.002470,0.003078,0.001000,0.007131,0.002770,
207     0.002533,0.001000,0.004362,0.002819,0.001000,
208     0.003630,0.004215,0.002975,0.001000,0.003790,
209     0.002345,0.001000,0.003999,0.004555,0.003989,
210     0.001000,0.001000,0.001000,0.003136,0.002426,
211     0.005144,0.002844,0.002310,0.002467,0.002503,
212     0.003811,0.003440,0.004773,0.003114,0.001000,
213     0.000583,0.001000,0.001000,0.003385,0.001000,
214     0.001000,0.001000,0.001000,0.003108,0.002109,
215     0.005325,0.003750,0.002810,0.003559,0.001000,
216     0.001000,0.003262,0.003903,0.001000,0.003622,
217     0.002533,0.002121,0.003733,0.005353,0.002221,
218     0.004767,0.003267,0.004892,0.002152,0.003398,
219     0.001000,0.003146,0.001000,0.002952,0.003310,
220     0.002644,0.002573,0.001000,0.003989,0.001000,
221     0.005294,0.003095,0.003479,0.002250,0.001000,
222     0.001000,0.005221,0.001000,0.001653,0.004330,
223     0.013188,0.007375,0.003226,0.003875,0.001000,
224     0.003653,0.001000,0.002655,0.001000,0.001000,
225     0.001000,0.001000,0.004718,0.001000,0.001000,
226     0.001000,0.002780,0.003680,0.001000,0.002787,
227     0.001000,0.004617,0.001000,0.001000,0.003231,
228     0.001887,0.002090,0.003326,0.129970,0.004907,
229     0.004334,0.001000,0.001000,0.003489,0.002573,
230     0.002566,0.002982,0.001000,0.001000,0.003436,
231     0.004016,0.003736,0.001784,0.004775,0.008090};
232   for(Int_t i=0;i<260;i++) errSpeed[i]=err[i];
233   
234   
235 }