]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/ShowCalibrationSDD.C
Read data format and sampling frequency from CDH in SDD DAs (F. Prino)
[u/mrichter/AliRoot.git] / ITS / ShowCalibrationSDD.C
CommitLineData
40b3a8c7 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
b3ba5bd1 21void ShowCalibrationSDD(Int_t iMod=0, Char_t *filnam="$ALICE_ROOT/ITS/Calib/CalibSDD/Run0_9999999_v0_s0.root"){
40b3a8c7 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;
b3ba5bd1 35 Int_t badModCounter3=0;
36 Int_t badModCounter4=0;
37 Int_t badAnodeCounter3=0;
38 Int_t badAnodeCounter4=0;
39 Int_t badAnodeCounterGoodMod3=0;
40 Int_t badAnodeCounterGoodMod4=0;
41 Int_t badAnodeCounterGoodModAndChip3=0;
42 Int_t badAnodeCounterGoodModAndChip4=0;
43 Int_t badChipCounter3=0;
44 Int_t badChipCounter4=0;
40b3a8c7 45 for(Int_t i=0; i<260; i++){
46 cal=(AliITSCalibrationSDD*)calSDD->At(i);
47 if(cal==0) continue;
48 printf("Module %d (%d) status = ",i,i+240);
b3ba5bd1 49 if(cal->IsBad()){
50 printf("BAD\t");
51 if(i<84) badModCounter3++;
52 else badModCounter4++;
53 hmodstatus->SetBinContent(i+1,0);
54 }
55 else{
56 printf("OK\t");
57 hmodstatus->SetBinContent(i+1,1);
58 if(i<84) badAnodeCounterGoodMod3+=cal->GetDeadChannels();
59 else badAnodeCounterGoodMod4+=cal->GetDeadChannels();
60 }
40b3a8c7 61 printf(" Chip Status (0=OK, 1=BAD): ");
b3ba5bd1 62 for(Int_t ic=0; ic<8;ic++){
63 printf("%d ",cal->IsChipBad(ic));
64 if(cal->IsChipBad(ic) && !cal->IsBad()){
65 if(i<84) badChipCounter3++;
66 else badChipCounter4++;
67 }
68 }
40b3a8c7 69 if(cal->IsAMAt20MHz()) printf(" 20 MHz sampling");
70 else printf(" 40 MHz sampling");
71 printf("\n");
b3ba5bd1 72 if(i<84) badAnodeCounter3+=cal->GetDeadChannels();
73 else badAnodeCounter4+=cal->GetDeadChannels();
40b3a8c7 74 hnbadch->SetBinContent(i+1,cal->GetDeadChannels());
75 for(Int_t iAn=0; iAn<512; iAn++){
b3ba5bd1 76 Int_t ic=cal->GetChip(iAn);
77 if(!cal->IsChipBad(ic) && !cal->IsBad() && cal->IsBadChannel(iAn)){
78 if(i<84) badAnodeCounterGoodModAndChip3++;
79 else badAnodeCounterGoodModAndChip4++;
80 }
40b3a8c7 81 Float_t base=cal->GetBaseline(iAn);
82 Float_t noise=cal->GetNoiseAfterElectronics(iAn);
83 Float_t gain=cal->GetChannelGain(iAn);
84 if(cal->IsBadChannel(iAn)) hchstatus->Fill(0);
85 if(!cal->IsBadChannel(iAn)){
86 hbase->Fill(base);
87 hchstatus->Fill(1);
88 hnoise->Fill(noise);
89 hgain->Fill(gain);
90 }
91 }
92 }
b3ba5bd1 93 Int_t totbad3=badModCounter3*512+badChipCounter3*64+badAnodeCounterGoodModAndChip3;
94 Int_t tot3=6*14*512;
95 Float_t fracbad3=(Float_t)totbad3/(Float_t)tot3;
96 Int_t totbad4=badModCounter4*512+badChipCounter4*64+badAnodeCounterGoodModAndChip4;
97 Int_t tot4=8*22*512;
98 Float_t fracbad4=(Float_t)totbad4/(Float_t)tot4;
99 Float_t fractot=(Float_t)(totbad3+totbad4)/(Float_t)(tot3+tot4);
100 printf("----------------------Summary----------------------\n");
101 printf("---- Layer 3 ----\n");
102 printf("# of bad modules = %d\n",badModCounter3);
103 printf("# of bad chips in good modules = %d\n",badChipCounter3);
104 printf("# of bad anodes in good modules+chips = %d\n",badAnodeCounterGoodModAndChip3);
105 printf("Fraction of bads (anodes+chips+mod) = %f\n",fracbad3);
106 printf("---- Layer 4 ----\n");
107 printf("# of bad modules = %d\n",badModCounter4);
108 printf("# of bad chips in good modules = %d\n",badChipCounter4);
109 printf("# of bad anodes in good modules+chips = %d\n",badAnodeCounterGoodModAndChip4);
110 printf("Fraction of bads (anodes+chips+mod) = %f\n",fracbad4);
111 printf("---- Total ----\n");
112 printf("# of bad modules = %d\n",badModCounter3+badModCounter4);
113 printf("# of bad chips in good modules = %d\n",badChipCounter3+badChipCounter4);
114 printf("# of bad anodes in good modules+chips = %d\n",badAnodeCounterGoodModAndChip3+badAnodeCounterGoodModAndChip4);
115 printf("Fraction of bads (anodes+chips+mod) = %f\n",fractot);
116 printf("---------------------------------------------------\n");
117
118
40b3a8c7 119 TCanvas *c0=new TCanvas("c0","Module status",800,800);
120 c0->Divide(1,2);
121 c0->cd(1);
122 hmodstatus->Draw();
123 hmodstatus->GetXaxis()->SetTitle("Module number");
124 hmodstatus->GetYaxis()->SetTitle("Module status (1=OK, 0=BAD)");
125 c0->cd(2);
126 hnbadch->Draw();
127 hnbadch->GetXaxis()->SetTitle("Module number");
128 hnbadch->GetYaxis()->SetTitle("Number of bad anodes");
129
130 TCanvas *c1=new TCanvas("c1","Anode calibration",800,800);
131 c1->Divide(2,2);
132 c1->cd(1);
133 hbase->Draw();
134 hbase->GetXaxis()->SetTitle("Baseline after equalization");
135 hbase->GetXaxis()->CenterTitle();
136 c1->cd(2);
137 hnoise->Draw();
138 hnoise->GetXaxis()->SetTitle("Noise");
139 hnoise->GetXaxis()->CenterTitle();
140 c1->cd(3);
141 hgain->Draw();
142 hgain->GetXaxis()->SetTitle("Gain");
143 hgain->GetXaxis()->CenterTitle();
144 c1->cd(4);
145 hchstatus->Draw();
146 hchstatus->GetXaxis()->SetTitle("Anode status (0=bad, 1=OK)");
147 hchstatus->GetXaxis()->CenterTitle();
148
b3ba5bd1 149
150 // Plot quantities for specified module
151
40b3a8c7 152 cal=(AliITSCalibrationSDD*)calSDD->At(iMod);
153 if(cal==0) return;
154 printf("-----------------------------------\n");
155 printf("Module %d status = ",iMod);
156 if(cal->IsBad()) printf("BAD\n");
157 else printf("OK\n");
158 printf(" Chip Status (0=OK, 1=BAD): ");
159 for(Int_t ic=0; ic<8;ic++) printf("%d ",cal->IsChipBad(ic));
160 printf("\n");
b3ba5bd1 161 printf(" Number of bad anodes =%d\n",cal->GetDeadChannels());
40b3a8c7 162 printf("-----------------------------------\n");
163 Int_t ipt=0;
164 TGraph *gbad=new TGraph(0);
165 gbad->SetTitle("Bad Channels");
166 TGraph *gbase=new TGraph(0);
167 gbase->SetTitle("Baselines");
168 TGraph *gnoi=new TGraph(0);
169 gnoi->SetTitle("Noise");
170 TGraph *ggain=new TGraph(0);
171 ggain->SetTitle("Gain");
172 for(Int_t iAn=0; iAn<512; iAn++){
173 Float_t bad=1;
174 if(cal->IsBadChannel(iAn)) bad=0;
175 Float_t base=cal->GetBaseline(iAn);
176 Float_t noise=cal->GetNoiseAfterElectronics(iAn);
177 Float_t gain=cal->GetChannelGain(iAn);
178 gbad->SetPoint(ipt,(Float_t)iAn,bad);
179 gbase->SetPoint(ipt,(Float_t)iAn,base);
180 ggain->SetPoint(ipt,(Float_t)iAn,gain);
181 gnoi->SetPoint(ipt,(Float_t)iAn,noise);
182 ipt++;
183 }
184 Char_t ctit[100];
185 sprintf(ctit,"Module %d",iMod);
186
187 TCanvas *c2=new TCanvas("c2",ctit,1200,800);
188 c2->Divide(2,2);
189
190 c2->cd(1);
191 gbase->SetMarkerStyle(7);
192 gbase->Draw("AP");
193 gbase->GetXaxis()->SetTitle("Anode Number");
194 gbase->GetYaxis()->SetTitle("Baseline after equalization");
195 c2->cd(2);
196 gnoi->SetMarkerStyle(7);
197 gnoi->Draw("AP");
198 gnoi->GetXaxis()->SetTitle("Anode Number");
199 gnoi->GetYaxis()->SetTitle("Noise");
200 c2->cd(3);
201 ggain->SetMarkerStyle(7);
202 ggain->Draw("AP");
203 ggain->GetXaxis()->SetTitle("Anode Number");
204 ggain->GetYaxis()->SetTitle("Gain");
205 c2->cd(4);
206 gbad->SetMarkerStyle(7);
207 gbad->Draw("AP");
208 gbad->SetMinimum(-0.1);
209 gbad->GetXaxis()->SetTitle("Anode Number");
210 gbad->GetYaxis()->SetTitle("Anode Status (1=OK, 0=bad)");
211}
212
04adc89c 213void ShowCalibrationSDD(Int_t nrun, Int_t nv, Char_t* dir="LHC08d", Int_t nmod=0){
40b3a8c7 214 TGrid::Connect("alien:",0,0,"t");
215 Char_t filnam[200];
04adc89c 216 sprintf(filnam,"alien:///alice/data/2008/%s/OCDB/ITS/Calib/CalibSDD/Run%d_999999999_v%d_s0.root",dir,nrun,nv);
40b3a8c7 217 printf("Open file: %s\n",filnam);
b3ba5bd1 218 ShowCalibrationSDD(nmod,filnam);
40b3a8c7 219}