#if !defined(__CINT__) || defined(__MAKECINT__)
+#include <Riostream.h>
#include <TFile.h>
#include <TH1F.h>
+#include <TH2F.h>
#include <TGraph.h>
#include <TStyle.h>
#include <TLegend.h>
#include <TLegendEntry.h>
+#include <TLine.h>
#include <TSystem.h>
#include <TGrid.h>
#include <TMath.h>
void FillErrors(Float_t errSpeed[260]);
-void PlotDriftSpeedSDDVsTime(Int_t firstRun=76172,
- Int_t lastRun=999999999,
+void PlotDriftSpeedSDDVsTime(Int_t year=2010, Int_t firstRun=62840,
+ Int_t lastRun=999999999,
Int_t anode=128){
-
TGrid::Connect("alien:",0,0,"t");
-
Float_t errSpeed[260];
FillErrors(errSpeed);
-
- gSystem->Exec("gbbox find \"/alice/data/2009/OCDB/ITS/Calib/DriftSpeedSDD\" \"Run*.root\" > runSpeedAlien.txt");
+ TString cmd=Form("gbbox find \"/alice/data/%d/OCDB/ITS/Calib/DriftSpeedSDD\" \"Run*.root\" > runSpeedAlien.txt",year);
+ gSystem->Exec(cmd.Data());
FILE* listruns=fopen("runSpeedAlien.txt","r");
Char_t filnam[200],filnamalien[200];
TGraphErrors** gvdrvstime=new TGraphErrors*[520];
TGraphErrors** gvdrvsrun=new TGraphErrors*[520];
- Int_t iPt[260];
+ TGraph* gGoodInjVsRun=new TGraph(0);
+ gGoodInjVsRun->SetName("gGoodInjVsRun");
+ TGraph* gAverSpeedVsRun=new TGraph(0);
+ gAverSpeedVsRun->SetName("gAverSpeedVsRun");
+ TGraph* gGoodInjVsTime=new TGraph(0);
+ gGoodInjVsTime->SetName("gGoodInjVsTime");
+ TGraph* gAverSpeedVsTime=new TGraph(0);
+ gAverSpeedVsTime->SetName("gAverSpeedVsIime");
+
for(Int_t iMod=0; iMod<260;iMod++){
gvdrvstime[iMod]=new TGraphErrors(0);
gvdrvstime[iMod]->SetTitle(Form("Module %d",iMod+240));
gvdrvsrun[iMod]=new TGraphErrors(0);
gvdrvsrun[iMod]->SetTitle(Form("Module %d",iMod+240));
gvdrvsrun[iMod]->SetName(Form("gspmod%dr",iMod+240));
- iPt[iMod]=0;
}
Float_t Edrift=(1800-45)/291/0.012;
Int_t nrun,nrun2,nv,ns;
-
while(!feof(listruns)){
fscanf(listruns,"%s\n",filnam);
- if(!strstr(filnam,"/alice/data/2009")) continue;
- sscanf(filnam,"/alice/data/2009/OCDB/ITS/Calib/DriftSpeedSDD/Run%d_%d_v%d_s%d.root",&nrun,&nrun2,&nv,&ns);
- if(nrun<85639 && nrun2> 85639) continue;// protection for files with swapped ladders 4-5 of layer 3
- if(nrun>100000 && nv< 271) continue; // protection for files with swapped ladder 0-1 of layer 4
+ Char_t directory[100];
+ sprintf(directory,"/alice/data/%d",year);
+ if(!strstr(filnam,directory)) continue;
+ sscanf(filnam,"/alice/data/%d/OCDB/ITS/Calib/DriftSpeedSDD/Run%d_%d_v%d_s%d.root",&year,&nrun,&nrun2,&nv,&ns);
+
+ if(year==2009 && (nrun<85639 && nrun2> 85639)) continue;// protection for files with swapped ladders 4-5 of layer 3
+ if(year==2009 && (nrun>100000 && nv< 325)) continue; // protection for files with swapped ladder 0-1 of layer 4
+
if(nrun<firstRun) continue;
if(nrun>lastRun) continue;
sprintf(filnamalien,"alien://%s",filnam);
AliCDBEntry *ent=(AliCDBEntry*)f->Get("AliCDBEntry");
TObjArray *drspSDD = (TObjArray *)ent->GetObject();
+ Int_t iGoodInj=0;
+ Int_t iAverSpeed=0;
+ Float_t timeday=0;
+
AliITSDriftSpeedArraySDD *vdriftarr;
+ AliITSDriftSpeedArraySDD *vdriftarr0;
+ AliITSDriftSpeedArraySDD *vdriftarr1;
+
for(Int_t iMod=0; iMod<260;iMod++){
Int_t index=-1;
if(anode<256) index=2*iMod;
else index=2*iMod+1;
vdriftarr=(AliITSDriftSpeedArraySDD*)drspSDD->At(index);
+
+ Int_t i0=2*iMod;
+ Int_t i1=1+2*iMod;
+ vdriftarr0=(AliITSDriftSpeedArraySDD*)drspSDD->At(i0);
+ vdriftarr1=(AliITSDriftSpeedArraySDD*)drspSDD->At(i1);
+
+ Int_t statusInj0=vdriftarr0->GetInjectorStatus();
+ Int_t statusInj1=vdriftarr1->GetInjectorStatus();
+ if(statusInj0>0) iGoodInj++;
+ else iAverSpeed++;
+ if(statusInj1>0) iGoodInj++;
+ else iAverSpeed++;
+
Int_t iAn=anode;
if(anode>256) iAn=anode-256;
Float_t vdrift=vdriftarr->GetDriftSpeed(0,iAn);
+ if(vdrift<4. || vdrift > 8.) continue;
+ if(statusInj0==0) continue;
+ Int_t npt=gvdrvsrun[iMod]->GetN();
+ gvdrvsrun[iMod]->SetPoint(npt,(Float_t)nrun,vdrift);
+ gvdrvsrun[iMod]->SetPointError(npt,0,errSpeed[iMod]);
+
UInt_t timest=vdriftarr->GetTimestamp(0);
if(timest==0) continue;
- Float_t timeday=float(timest-1247762992)/60./60./24.;
+ Float_t timeZero;
+ if(year==2009) timeZero=1247762992;
+ else timeZero=1262300400;
+ if(timest<timeZero) continue;
+ timeday=float(timest-timeZero)/60./60./24.;
Float_t mob=vdrift*1.E5/Edrift;
Float_t temper=293.15*TMath::Power((mob/1350.),-1/2.4);
if(iMod==497-240) printf("Run %s Time %d Day %f Speed=%f Temp=%f\n",filnam,timest,timeday,vdrift,temper);
- gvdrvstime[iMod]->SetPoint(iPt[iMod],timeday,vdrift);
- gvdrvstime[iMod]->SetPointError(iPt[iMod],0,errSpeed[iMod]);
- gvdrvsrun[iMod]->SetPoint(iPt[iMod],(Float_t)nrun,vdrift);
- gvdrvsrun[iMod]->SetPointError(iPt[iMod],0,errSpeed[iMod]);
- ++iPt[iMod];
+ npt=gvdrvstime[iMod]->GetN();
+ gvdrvstime[iMod]->SetPoint(npt,timeday,vdrift);
+ gvdrvstime[iMod]->SetPointError(npt,0,errSpeed[iMod]);
}
+ Int_t npt=gGoodInjVsRun->GetN();
+ gGoodInjVsRun->SetPoint(npt,(Float_t)nrun,iGoodInj);
+ gAverSpeedVsRun->SetPoint(npt,(Float_t)nrun,iAverSpeed);
+
+ npt=gGoodInjVsTime->GetN();
+ gGoodInjVsTime->SetPoint(npt,timeday,iGoodInj);
+ gAverSpeedVsTime->SetPoint(npt,timeday,iAverSpeed);
+
+ printf("Number of half-modules with drift speed from injectors = %d\n",iGoodInj);
+ printf("Number of half-modules with average drift speed = %d\n",iAverSpeed);
f->Close();
}
Int_t mod1=244-240;
Int_t mod2=277-240;
- //Int_t mod1=268-240;
- //Int_t mod2=274-240;
+ // Int_t mod2=259-240;
+// Int_t mod2=274-240;
Int_t mod3=327-240;
- Int_t mod4=453-240;
- // Int_t mod4=497-240;
+ Int_t mod4=453-240;
+ // Int_t mod4=497-240;
Int_t lay1,lad1,det1;
Int_t lay2,lad2,det2;
Int_t lay3,lad3,det3;
AliITSgeomTGeo::GetModuleId(mod2+240,lay2,lad2,det2);
AliITSgeomTGeo::GetModuleId(mod3+240,lay3,lad3,det3);
AliITSgeomTGeo::GetModuleId(mod4+240,lay4,lad4,det4);
-
- TFile *ofil=new TFile("DriftSp2009VsTime.root","recreate");
+ Char_t filout[100];
+ sprintf(filout,"DriftSpVsTime_%d.root",year);
+ TFile *ofil=new TFile(filout,"recreate");
for(Int_t iMod=0; iMod<260;iMod++){
gvdrvstime[iMod]->Write();
gvdrvsrun[iMod]->Write();
}
+ gGoodInjVsRun->Write();
+ gGoodInjVsTime->Write();
+ gAverSpeedVsRun->Write();
+ gAverSpeedVsTime->Write();
ofil->Close();
gStyle->SetOptTitle(0);
- TCanvas* c0=new TCanvas();
+ TCanvas* c0=new TCanvas("c0","Vdrift vs. time");
c0->SetGridx();
c0->SetGridy();
gvdrvstime[mod1]->SetMarkerStyle(20);
gvdrvstime[mod1]->Draw("AP");
gvdrvstime[mod1]->SetMinimum(6.3);
gvdrvstime[mod1]->SetMaximum(6.75);
-
- gvdrvstime[mod1]->GetXaxis()->SetTitle("Time (days since July 16th 2009)");
+ Char_t title[100];
+ if(year==2009){
+ sprintf(title,"Time (days since July 16th 2009)");
+ }else if (year==2010){
+ sprintf(title,"Time (days since January 1st 2010)");
+ }
+ gvdrvstime[mod1]->GetXaxis()->SetTitle(title);
gvdrvstime[mod1]->GetYaxis()->SetTitle("Drift speed (#mum/ns)");
gvdrvstime[mod2]->Draw("PSAME");
gvdrvstime[mod3]->Draw("PSAME");
lent->SetTextColor(4);
leg->Draw();
- TCanvas* c1=new TCanvas();
+ TCanvas* c1=new TCanvas("c1","Vdrift vs. run");
c1->SetGridx();
c1->SetGridy();
gvdrvsrun[mod1]->SetMarkerStyle(20);
gvdrvsrun[mod3]->Draw("PSAME");
gvdrvsrun[mod4]->Draw("PSAME");
leg->Draw();
+
+
+ TH2F* hlay3=new TH2F("hlay3","Variation of the drift speed (%) Layer 3",6,-0.5,5.5,14,-0.5,13.5);
+ hlay3->GetXaxis()->SetTitle("Detector");
+ hlay3->GetYaxis()->SetTitle("Ladder");
+ hlay3->GetXaxis()->SetTickLength(0);
+ hlay3->GetYaxis()->SetTickLength(0);
+ hlay3->SetStats(0);
+
+ TH2F* hlay4=new TH2F("hlay4","Variation of the drift speed (%) Layer 4",8,-0.5,7.5,22,-0.5,21.5);
+ hlay4->GetXaxis()->SetTitle("Detector");
+ hlay4->GetYaxis()->SetTitle("Ladder");
+ hlay4->GetXaxis()->SetTickLength(0);
+ hlay4->GetYaxis()->SetTickLength(0);
+ hlay4->GetYaxis()->SetTitle("Ladder");
+ hlay4->SetStats(0);
+
+ Double_t run1,run2,vdr1,vdr2;
+ Int_t lay,lad,det;
+ for(Int_t iMod=0; iMod<260; iMod++){
+ Int_t lastPoint=gvdrvsrun[iMod]->GetN()-1;
+ gvdrvsrun[iMod]->GetPoint(lastPoint,run2,vdr2);
+ gvdrvsrun[iMod]->GetPoint(lastPoint-1,run1,vdr1);
+ Float_t diff=0.;
+ if(vdr1>0.) diff=100*(vdr2-vdr1)/vdr1;
+ AliITSgeomTGeo::GetModuleId(iMod+240,lay,lad,det);
+ if(lay==3) hlay3->SetBinContent(det,lad,diff);
+ if(lay==4) hlay4->SetBinContent(det,lad,diff);
+ }
+ TLine* lin=new TLine(0,0,0,23);
+ gStyle->SetPalette(1);
+
+ TCanvas *c0b=new TCanvas("c0b","Percent difference Last Run - Previous Run",900,600);
+ c0b->Divide(2,1);
+ c0b->cd(1);
+ hlay3->DrawCopy("colz");
+ for(Int_t i=0;i<6;i++){
+ lin->SetY1(-0.5);
+ lin->SetY2(13.5);
+ lin->SetX1(i+0.5);
+ lin->SetX2(i+0.5);
+ lin->DrawClone();
+ }
+ for(Int_t i=0;i<14;i++){
+ lin->SetX1(-0.5);
+ lin->SetX2(5.5);
+ lin->SetY1(i+0.5);
+ lin->SetY2(i+0.5);
+ lin->DrawClone();
+ }
+ c0b->cd(2);
+ hlay4->DrawCopy("colz");
+ for(Int_t i=0;i<8;i++){
+ lin->SetY1(-0.5);
+ lin->SetY2(21.5);
+ lin->SetX1(i+0.5);
+ lin->SetX2(i+0.5);
+ lin->DrawClone();
+ }
+ for(Int_t i=0;i<22;i++){
+ lin->SetX1(-0.5);
+ lin->SetX2(7.5);
+ lin->SetY1(i+0.5);
+ lin->SetY2(i+0.5);
+ lin->DrawClone();
+ }
+
+ TCanvas* c4=new TCanvas("c4","GoodMod vs. run");
+ c4->SetGridx();
+ c4->SetGridy();
+ gGoodInjVsRun->SetMarkerStyle(20);
+ gGoodInjVsRun->SetMarkerColor(2);
+ gGoodInjVsRun->GetXaxis()->SetTitle("Run number");
+ gGoodInjVsRun->GetYaxis()->SetTitle("Half-modules with drift speed from injectors");
+ gGoodInjVsRun->Draw("AP");
+
+ TCanvas* c5=new TCanvas("c5","GoodMod vs. time");
+ c5->SetGridx();
+ c5->SetGridy();
+ gGoodInjVsTime->SetMarkerStyle(20);
+ gGoodInjVsTime->SetMarkerColor(2);
+ gGoodInjVsTime->GetXaxis()->SetTitle(title);
+ gGoodInjVsTime->GetYaxis()->SetTitle("Half-modules with drift speed from injectors");
+ gGoodInjVsTime->Draw("AP");
}
void FillErrors(Float_t errSpeed[260]){