]>
Commit | Line | Data |
---|---|---|
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 | ||
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 | ||
04adc89c | 152 | void ShowCalibrationSDD(Int_t nrun, Int_t nv, Char_t* dir="LHC08d", Int_t nmod=0){ |
40b3a8c7 | 153 | TGrid::Connect("alien:",0,0,"t"); |
154 | Char_t filnam[200]; | |
04adc89c | 155 | sprintf(filnam,"alien:///alice/data/2008/%s/OCDB/ITS/Calib/CalibSDD/Run%d_999999999_v%d_s0.root",dir,nrun,nv); |
40b3a8c7 | 156 | printf("Open file: %s\n",filnam); |
157 | ShowCalibrationSDD(filnam,nmod); | |
158 | } |