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