]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - PHOS/macros/CalibrationDB/AliPHOSSetCDB.C
Change ECM calibration due to modifications in EMC amplitude units
[u/mrichter/AliRoot.git] / PHOS / macros / CalibrationDB / AliPHOSSetCDB.C
... / ...
CommitLineData
1/* $Id$ */
2
3// Script to create calibration parameters and store them into CDB
4// Two sets of calibration parameters can be created:
5// 1) equal parameters
6// 2) randomly distributed parameters for decalibrated detector silumations
7
8#if !defined(__CINT__)
9#include "TControlBar.h"
10#include "TString.h"
11#include "TRandom.h"
12#include "TH2F.h"
13#include "TCanvas.h"
14
15#include "AliRun.h"
16#include "AliPHOSCalibData.h"
17#include "AliCDBMetaData.h"
18#include "AliCDBId.h"
19#include "AliCDBEntry.h"
20#include "AliCDBManager.h"
21#include "AliCDBStorage.h"
22#endif
23
24static const Int_t nMod = 5;
25static const Int_t nCol = 56;
26static const Int_t nRow = 64;
27
28void AliPHOSSetCDB()
29{
30 TControlBar *menu = new TControlBar("vertical","PHOS CDB");
31 menu->AddButton("Help to run PHOS CDB","Help()",
32 "Explains how to use PHOS CDS menus");
33 menu->AddButton("Equal CC","SetCC(0)",
34 "Set equal calibration coefficients");
35 menu->AddButton("Decalibrate","SetCC(1)",
36 "Set random decalibration calibration coefficients");
37 menu->AddButton("Set calibration equal to invers decalibration coefficients","SetCC(2)",
38 "Set calibration coefficients inverse to decalibration ones");
39 menu->AddButton("Read equal CC","GetCC(0)",
40 "Read initial equal calibration coefficients");
41 menu->AddButton("Read random CC","GetCC(1)",
42 "Read random decalibration calibration coefficients");
43 menu->AddButton("Read inverse CC","GetCC(2)",
44 "Read calibration coefficients inverse to decalibration ones");
45 menu->Show();
46}
47
48//------------------------------------------------------------------------
49void Help()
50{
51 char *string =
52 "\nSet calibration parameters and write them into ALICE CDB.
53Press button \"Equal CC\" to create equal pedestals and gain factors.
54Press button \"Decalibrate\" to create random pedestals and gain factors to imitate decalibrated detector\n";
55 printf(string);
56}
57
58//------------------------------------------------------------------------
59void SetCC(Int_t flag=0)
60{
61 // Writing calibration coefficients into the Calibration DB
62 // Arguments:
63 // flag=0: all calibration coefficients are equal
64 // flag=1: decalibration coefficients
65 // flag=2: calibration coefficients equal to inverse decalibration ones
66 // Author: Boris Polishchuk (Boris.Polichtchouk at cern.ch)
67
68 TString DBFolder;
69 Int_t firstRun = 0;
70 Int_t lastRun = 0;
71 Int_t beamPeriod = 1;
72 char* objFormat = "";
73
74 AliPHOSCalibData* cdb = 0;
75
76 if (flag == 0) {
77 DBFolder ="local://InitCalibDB";
78 firstRun = 0;
79 lastRun = 0;
80 objFormat = "PHOS initial pedestals and ADC gain factors (5x64x56)";
81 cdb = new AliPHOSCalibData();
82 cdb->CreateNew();
83 }
84
85 else if (flag == 1) {
86 DBFolder ="local://DeCalibDB";
87 firstRun = 100;
88 lastRun = 100;
89 objFormat = "PHOS decalibration pedestals and ADC gain factors (5x64x56)";
90
91 cdb = new AliPHOSCalibData();
92 cdb->RandomEmc();
93 cdb->RandomCpv();
94 }
95
96 else if (flag == 2) {
97 // First read decalibration DB
98 AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT");
99 AliCDBManager::Instance()->SetSpecificStorage("PHOS","local://DeCalibDB");
100 AliPHOSCalibData* cdbDecalib = new AliPHOSCalibData(100);
101
102 DBFolder ="local://InverseCalibDB";
103 firstRun = 200;
104 lastRun = 200;
105 objFormat = "PHOS calibration parameters equal to inverse decalibration ones (5x64x56)";
106 cdb = new AliPHOSCalibData();
107
108 // Read EMC decalibration parameters and put inverse values to a new artificial CDB
109
110 for (Int_t module=1; module<=nMod; module++) {
111 for (Int_t column=1; column<=nCol; column++) {
112 for (Int_t row=1; row<=nRow; row++) {
113 Float_t valueGain = cdbDecalib->GetADCchannelEmc (module,column,row);
114 Float_t valuePed = cdbDecalib->GetADCpedestalEmc(module,column,row);
115 cdb->SetADCchannelEmc(module,column,row,1./valueGain);
116 cdb->SetADCpedestalEmc(module,column,row,valuePed);
117 }
118 }
119 }
120
121 // Read CPV decalibration parameters and put inverse values to a new artificial CDB
122
123 for (Int_t module=1; module<=nMod; module++) {
124 for (Int_t column=1; column<=nCol*2; column++) {
125 for (Int_t row=1; row<=nRow; row++) {
126 Float_t valueGain = cdbDecalib->GetADCchannelCpv (module,column,row);
127 Float_t valuePed = cdbDecalib->GetADCpedestalCpv(module,column,row);
128 cdb->SetADCchannelCpv(module,column,row,1./valueGain);
129 cdb->SetADCpedestalCpv(module,column,row,valuePed);
130 }
131 }
132 }
133 }
134 else if (flag == 3) {
135 // First read decalibration DB
136 DBFolder ="local://DeCalibDB";
137 firstRun = 0;
138 lastRun = 10;
139 objFormat = "PHOS decalibration pedestals and ADC gain factors (5x64x56)";
140
141 cdb = new AliPHOSCalibData();
142
143 for (Int_t module=1; module<=nMod; module++) {
144 for (Int_t column=1; column<=nCol; column++) {
145 for (Int_t row=1; row<=nRow; row++) {
146 cdb->SetADCchannelEmc(module,column,row,2.);
147 cdb->SetADCpedestalEmc(module,column,row,0.5);
148 }
149 }
150 }
151
152 for (Int_t module=1; module<=nMod; module++) {
153 for (Int_t column=1; column<=nCol*2; column++) {
154 for (Int_t row=1; row<=nRow; row++) {
155 cdb->SetADCchannelCpv(module,column,row,3.);
156 cdb->SetADCpedestalCpv(module,column,row,1.5);
157 }
158 }
159 }
160 }
161
162 //Store calibration data into database
163
164 AliCDBMetaData md;
165 md.SetComment(objFormat);
166 md.SetBeamPeriod(beamPeriod);
167 md.SetResponsible("Boris Polichtchouk");
168
169 AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT");
170 AliCDBManager::Instance()->SetSpecificStorage("PHOS",DBFolder.Data());
171
172 cdb->WriteEmc(firstRun,lastRun,&md);
173 cdb->WriteCpv(firstRun,lastRun,&md);
174
175}
176
177//------------------------------------------------------------------------
178void GetCC(Int_t flag=0)
179{
180 // Read calibration coefficients into the Calibration DB
181 // Arguments:
182 // flag=0: all calibration coefficients are equal
183 // flag=1: decalibration coefficients
184 // flag=2: calibration coefficients equal to inverse decalibration ones
185 // Author: Yuri.Kharlov at cern.ch
186
187 TString DBFolder;
188 Int_t runNumber;
189
190 if (flag == 0) {
191 DBFolder ="local://InitCalibDB";
192 runNumber = 0;
193 }
194 else if (flag == 1) {
195 DBFolder ="local://DeCalibDB";
196 runNumber = 100;
197 }
198 else if (flag == 2) {
199 DBFolder ="local://InverseCalibDB";
200 runNumber = 200;
201 }
202
203 AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT");
204 AliCDBManager::Instance()->SetSpecificStorage("PHOS",DBFolder.Data());
205
206 AliPHOSCalibData* clb = new AliPHOSCalibData(runNumber);
207
208 TH2::AddDirectory(kFALSE);
209
210 TH2F* hPed[5];
211 TH2F* hGain[5];
212
213 TCanvas *cPed = new TCanvas("cPed" ,"PHOS EMC Pedestals" , 10,10,400,800);
214 TCanvas *cGain = new TCanvas("cGain","PHOS EMC Gain factors",410,10,400,800);
215 cPed ->Divide(1,5);
216 cGain->Divide(1,5);
217
218// for (Int_t module=1; module<=nMod; module++) {
219 for (Int_t module=1; module<=1; module++) {
220 TString namePed="hPed";
221 namePed+=module;
222 TString titlePed="Pedestals in module ";
223 titlePed+=module;
224 hPed[module-1] = new TH2F(namePed.Data(),titlePed.Data(),
225 nCol,1.,1.*nCol,nRow,1.,1.*nRow);
226
227 TString nameGain="hGain";
228 nameGain+=module;
229 TString titleGain="Gain factors in module ";
230 titleGain+=module;
231 hGain[module-1] = new TH2F(nameGain.Data(),titleGain.Data(),
232 nCol,1.,1.*nCol,nRow,1.,1.*nRow);
233
234 for (Int_t column=1; column<=nCol; column++) {
235 for (Int_t row=1; row<=nRow; row++) {
236 Float_t ped = clb->GetADCpedestalEmc(module,column,row);
237 Float_t gain = clb->GetADCchannelEmc (module,column,row);
238 hPed[module-1]->SetBinContent(column,row,ped);
239 hGain[module-1]->SetBinContent(column,row,gain);
240 }
241 }
242 cPed ->cd(module);
243 hPed[module-1]->Draw("lego2");
244 cGain->cd(module);
245 hGain[module-1]->Draw("lego2");
246 }
247 cPed ->Print("pedestals.eps");
248 cGain->Print("gains.eps");
249}