Corrections for CINT compilation
[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
25 void AliPHOSSetCDB()
26 {
27   TControlBar *menu = new TControlBar("vertical","PHOS CDB");
28   menu->AddButton("Help to run PHOS CDB","Help()",
29                   "Explains how to use PHOS CDS menus");
30   menu->AddButton("Equal CC","SetCC(0)",
31                   "Set equal calibration coefficients");
32   menu->AddButton("Decalibrate","SetCC(1)",
33                   "Set random decalibration calibration coefficients");
34   menu->AddButton("Read equal CC","GetCC(0)",
35                   "Read initial equal calibration coefficients");
36   menu->AddButton("Read random CC","GetCC(1)",
37                   "Read random decalibration calibration coefficients");
38   menu->Show();
39 }
40
41 //------------------------------------------------------------------------
42 void Help()
43 {
44   char *string =
45     "\nSet calibration parameters and write them into ALICE CDB.
46 Press button \"Equal CC\" to create equal pedestals and gain factors.
47 Press button \"Decalibrate\" to create random pedestals and gain factors to imitate decalibrated detector\n";
48   printf(string);
49 }
50
51 //------------------------------------------------------------------------
52 void SetCC(Int_t flag=0)
53 {
54   // Writing calibration coefficients into the Calibration DB
55   // Arguments:
56   //   flag=0: all calibration coefficients are equal
57   //   flag=1: all calibration coefficients random (decalibration)
58   // Author: Boris Polishchuk (Boris.Polichtchouk at cern.ch)
59
60   TString DBFolder;
61   Int_t firstRun   =  0;
62   Int_t lastRun    = 10;
63   Int_t beamPeriod =  1;
64   char* objFormat  = "";
65
66   if      (flag == 0) {
67     DBFolder  ="local://InitCalibDB";
68     firstRun  =  0;
69     lastRun   =  0;
70     objFormat = "PHOS initial gain factors and pedestals";
71   }
72   else if (flag == 1) {
73     DBFolder  ="local://DeCalibDB";
74     firstRun  =  0;
75     lastRun   = 10;
76     objFormat = "PHOS random pedestals and ADC gain factors (5x64x56)";
77   }
78   
79   AliPHOSCalibData *calibda=new AliPHOSCalibData("PHOS");
80   
81   Float_t fADCpedestalEmc = 0.005;
82   Float_t fADCchanelEmc   = 0.0015;
83   
84   TRandom rn;
85   
86   for(Int_t module=1; module<6; module++) {
87     for(Int_t column=1; column<57; column++) {
88       for(Int_t row=1; row<65; row++) {
89         if (flag == 1) {
90           // Decalibration:
91           // Spread calibration coefficients uniformly with
92           // Cmax/Cmin = 5, (Cmax-Cmin)/2 = 0.0015
93           // and pedestals 0.005 +-10%
94           fADCchanelEmc  =rn.Uniform(0.00075,0.00375);
95           fADCpedestalEmc=rn.Uniform(0.0045,0.0055);
96         }
97         calibda->SetADCchannelEmc (module,column,row,fADCchanelEmc);
98         calibda->SetADCpedestalEmc(module,column,row,fADCpedestalEmc);
99       }
100     }
101   }
102
103   //Store calibration data into database
104   
105   AliCDBMetaData md;
106   md.SetComment(objFormat);
107   md.SetBeamPeriod(beamPeriod);
108   md.SetResponsible("Boris Polichtchouk");
109   
110   AliCDBId id("PHOS/Calib/GainFactors_and_Pedestals",firstRun,lastRun);
111
112   AliCDBManager* man = AliCDBManager::Instance();  
113   AliCDBStorage* loc = man->GetStorage(DBFolder.Data());
114   loc->Put(calibda, id, &md);
115
116 }
117
118 //------------------------------------------------------------------------
119 void GetCC(Int_t flag=0)
120 {
121   // Read calibration coefficients into the Calibration DB
122   // Arguments:
123   //   flag=0: all calibration coefficients are equal
124   //   flag=1: all calibration coefficients random (decalibration)
125   // Author: Yuri.Kharlov at cern.ch
126
127   TString DBFolder;
128
129   if      (flag == 0) {
130     DBFolder  ="local://InitCalibDB";
131   }
132   else if (flag == 1) {
133     DBFolder  ="local://DeCalibDB";
134   }
135
136   AliPHOSCalibData* clb  = (AliPHOSCalibData*)
137     (AliCDBManager::Instance()
138      ->GetStorage(DBFolder.Data())
139      ->Get("PHOS/Calib/GainFactors_and_Pedestals",
140            gAlice->GetRunNumber())->GetObject());
141
142   static const Int_t nMod =  5;
143   static const Int_t nCol = 56;
144   static const Int_t nRow = 64;
145
146   TH2F *hPed[nMod], *hGain[nMod];
147   TCanvas *cPed  = new TCanvas("cPed" ,"Pedestals"   , 10,10,400,800);
148   TCanvas *cGain = new TCanvas("cGain","Gain factors",410,10,400,800);
149   cPed ->Divide(1,5);
150   cGain->Divide(1,5);
151
152   for (Int_t module=1; module<=nMod; module++) {
153     TString namePed="hPed";
154     namePed+=module;
155     TString titlePed="Pedestals in module ";
156     titlePed+=module;
157     hPed[module-1] = new TH2F(namePed.Data(),titlePed.Data(),
158                             nCol,1.,1.*nCol,nRow,1.,1.*nRow);
159
160     TString nameGain="hGain";
161     nameGain+=module;
162     TString titleGain="Gain factors in module ";
163     titleGain+=module;
164     hGain[module-1] = new TH2F(nameGain.Data(),titleGain.Data(),
165                             nCol,1.,1.*nCol,nRow,1.,1.*nRow);
166
167     for (Int_t column=1; column<=nCol; column++) {
168       for (Int_t row=1; row<=nRow; row++) {
169         Float_t ped  = clb->GetADCpedestalEmc(module,column,row);
170         Float_t gain = clb->GetADCchannelEmc (module,column,row);
171         hPed[module-1] ->SetBinContent(column,row,ped);
172         hGain[module-1]->SetBinContent(column,row,gain);
173       }
174     }
175     cPed ->cd(module);
176     hPed[module-1] ->Draw("lego2");
177     cGain->cd(module);
178     hGain[module-1]->Draw("lego2");
179   }
180   cPed ->Print("pedestals.eps");
181   cGain->Print("gains.eps");
182 }