]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/ShowCalibrationSDD.C
### files: AliTPCTempMap.h (.cxx)
[u/mrichter/AliRoot.git] / ITS / ShowCalibrationSDD.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 <TGrid.h>
7 #include <TCanvas.h>
8 #include <TObjArray.h>
9 #include "AliCDBEntry.h"
10 #include "AliITSCalibrationSDD.h"
11 #endif
12
13 // Macro to plot the calibration parameters from the OCDB file 
14 // created from PEDESTAL and PULSER runs (OCDB/ITS/Calib/CalibSDD)
15 // Two methods ShowCalibrationSDD:
16 //  - the first takes the name of the file to be displayed
17 //  - the second builds the alien path+name from run number and file version
18 //
19 // Origin: F. Prino (prino@to.infn.it)
20
21 void ShowCalibrationSDD(Char_t *filnam="$ALICE_ROOT/ITS/Calib/CalibSDD/Run0_9999999_v0_s0.root", Int_t iMod=0){
22
23
24   TFile *f=TFile::Open(filnam);
25   AliCDBEntry *ent=(AliCDBEntry*)f->Get("AliCDBEntry");
26   TObjArray *calSDD = (TObjArray *)ent->GetObject();
27   printf("Entries in array=%d\n",calSDD->GetEntriesFast());
28   TH1F* hmodstatus=new TH1F("hmodstatus","",260,0.5,260.5);
29   TH1F* hnbadch=new TH1F("hnbadch","",260,0.5,260.5);
30   TH1F* hbase=new TH1F("hbase","",60,0.5,120.5);
31   TH1F* hnoise=new TH1F("hnoise","",100,0.,7.);
32   TH1F* hgain=new TH1F("hgain","",100,0.,4.);
33   TH1F* hchstatus=new TH1F("hchstatus","",2,-0.5,1.5);
34   AliITSCalibrationSDD *cal;
35   for(Int_t i=0; i<260; i++){
36     cal=(AliITSCalibrationSDD*)calSDD->At(i);
37     if(cal==0) continue;
38     printf("Module %d (%d)   status = ",i,i+240);
39     if(cal->IsBad()) printf("BAD\t");
40     else printf("OK\t");
41     printf("   Chip Status (0=OK, 1=BAD): ");  
42     for(Int_t ic=0; ic<8;ic++) printf("%d ",cal->IsChipBad(ic));
43     if(cal->IsAMAt20MHz()) printf("      20 MHz sampling");
44     else printf("      40 MHz sampling");
45     printf("\n");
46     if(cal->IsBad()) hmodstatus->SetBinContent(i+1,0);
47     else hmodstatus->SetBinContent(i+1,1);
48     hnbadch->SetBinContent(i+1,cal->GetDeadChannels());
49     for(Int_t iAn=0; iAn<512; iAn++){
50       Float_t base=cal->GetBaseline(iAn);
51       Float_t noise=cal->GetNoiseAfterElectronics(iAn);
52       Float_t gain=cal->GetChannelGain(iAn);
53       if(cal->IsBadChannel(iAn)) hchstatus->Fill(0);
54       if(!cal->IsBadChannel(iAn)){
55         hbase->Fill(base);
56         hchstatus->Fill(1);
57         hnoise->Fill(noise);
58         hgain->Fill(gain);
59       }
60     }
61   }
62   TCanvas *c0=new TCanvas("c0","Module status",800,800);
63   c0->Divide(1,2);
64   c0->cd(1);
65   hmodstatus->Draw();
66   hmodstatus->GetXaxis()->SetTitle("Module number");
67   hmodstatus->GetYaxis()->SetTitle("Module status (1=OK, 0=BAD)");
68   c0->cd(2);
69   hnbadch->Draw();
70   hnbadch->GetXaxis()->SetTitle("Module number");
71   hnbadch->GetYaxis()->SetTitle("Number of bad anodes");
72
73   TCanvas *c1=new TCanvas("c1","Anode calibration",800,800);
74   c1->Divide(2,2);
75   c1->cd(1);
76   hbase->Draw();
77   hbase->GetXaxis()->SetTitle("Baseline after equalization");
78   hbase->GetXaxis()->CenterTitle();  
79   c1->cd(2);
80   hnoise->Draw();
81   hnoise->GetXaxis()->SetTitle("Noise");
82   hnoise->GetXaxis()->CenterTitle();  
83   c1->cd(3);
84   hgain->Draw();
85   hgain->GetXaxis()->SetTitle("Gain");
86   hgain->GetXaxis()->CenterTitle();  
87   c1->cd(4);
88   hchstatus->Draw();
89   hchstatus->GetXaxis()->SetTitle("Anode status (0=bad, 1=OK)");
90   hchstatus->GetXaxis()->CenterTitle();
91
92   cal=(AliITSCalibrationSDD*)calSDD->At(iMod);
93   if(cal==0) return;
94   printf("-----------------------------------\n");
95   printf("Module %d    status = ",iMod);
96   if(cal->IsBad()) printf("BAD\n");
97   else printf("OK\n");
98   printf("   Chip Status (0=OK, 1=BAD): ");  
99   for(Int_t ic=0; ic<8;ic++) printf("%d ",cal->IsChipBad(ic));
100   printf("\n");
101   printf("-----------------------------------\n");
102   Int_t ipt=0;
103   TGraph *gbad=new TGraph(0);
104   gbad->SetTitle("Bad Channels");
105   TGraph *gbase=new TGraph(0);
106   gbase->SetTitle("Baselines");
107   TGraph *gnoi=new TGraph(0);
108   gnoi->SetTitle("Noise");
109   TGraph *ggain=new TGraph(0);
110   ggain->SetTitle("Gain");
111   for(Int_t iAn=0; iAn<512; iAn++){
112     Float_t bad=1;
113     if(cal->IsBadChannel(iAn)) bad=0;
114     Float_t base=cal->GetBaseline(iAn);
115     Float_t noise=cal->GetNoiseAfterElectronics(iAn);
116     Float_t gain=cal->GetChannelGain(iAn);
117     gbad->SetPoint(ipt,(Float_t)iAn,bad);
118     gbase->SetPoint(ipt,(Float_t)iAn,base);
119     ggain->SetPoint(ipt,(Float_t)iAn,gain);
120     gnoi->SetPoint(ipt,(Float_t)iAn,noise);
121     ipt++;
122   }
123   Char_t ctit[100];
124   sprintf(ctit,"Module %d",iMod);
125
126   TCanvas *c2=new TCanvas("c2",ctit,1200,800);
127   c2->Divide(2,2);
128   
129   c2->cd(1);
130   gbase->SetMarkerStyle(7);
131   gbase->Draw("AP");
132   gbase->GetXaxis()->SetTitle("Anode Number");
133   gbase->GetYaxis()->SetTitle("Baseline after equalization");  
134   c2->cd(2);
135   gnoi->SetMarkerStyle(7);
136   gnoi->Draw("AP");
137   gnoi->GetXaxis()->SetTitle("Anode Number");
138   gnoi->GetYaxis()->SetTitle("Noise");  
139   c2->cd(3);
140   ggain->SetMarkerStyle(7);
141   ggain->Draw("AP");
142   ggain->GetXaxis()->SetTitle("Anode Number");
143   ggain->GetYaxis()->SetTitle("Gain");
144   c2->cd(4);
145   gbad->SetMarkerStyle(7);
146   gbad->Draw("AP");
147   gbad->SetMinimum(-0.1);
148   gbad->GetXaxis()->SetTitle("Anode Number");
149   gbad->GetYaxis()->SetTitle("Anode Status (1=OK, 0=bad)");
150 }
151
152 void ShowCalibrationSDD(Int_t nrun, Int_t nv, Char_t* dir="LHC08d", Int_t nmod=0){
153   TGrid::Connect("alien:",0,0,"t");
154   Char_t filnam[200];
155   sprintf(filnam,"alien:///alice/data/2008/%s/OCDB/ITS/Calib/CalibSDD/Run%d_999999999_v%d_s0.root",dir,nrun,nv);
156   printf("Open file: %s\n",filnam);
157   ShowCalibrationSDD(filnam,nmod);
158 }