New default calibration parameters (Yu.Kharlov)
[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   AliPHOSCalibData* cdb = 0;
67
68   if      (flag == 0) {
69     DBFolder  ="local://InitCalibDB";
70     firstRun  =  0;
71     lastRun   = 10;
72     objFormat = "PHOS initial pedestals and ADC gain factors (5x64x56)";
73     cdb = new AliPHOSCalibData();
74     cdb->CreateNew();
75   }
76
77   else if (flag == 1) {
78     DBFolder  ="local://DeCalibDB";
79     firstRun  =  0;
80     lastRun   = 10;
81     objFormat = "PHOS random pedestals and ADC gain factors (5x64x56)";
82  
83     cdb = new AliPHOSCalibData();    
84     cdb->RandomEmc();
85     cdb->RandomCpv();
86   }
87   
88   //Store calibration data into database
89   
90   AliCDBMetaData md;
91   md.SetComment(objFormat);
92   md.SetBeamPeriod(beamPeriod);
93   md.SetResponsible("Boris Polichtchouk");
94   
95   AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT");
96   AliCDBManager::Instance()->SetSpecificStorage("PHOS",DBFolder.Data());
97
98   cdb->WriteEmc(firstRun,lastRun,&md);
99   cdb->WriteCpv(firstRun,lastRun,&md);
100
101 }
102
103 //------------------------------------------------------------------------
104 void GetCC(Int_t flag=0)
105 {
106   // Read calibration coefficients into the Calibration DB
107   // Arguments:
108   //   flag=0: all calibration coefficients are equal
109   //   flag=1: all calibration coefficients random (decalibration)
110   // Author: Yuri.Kharlov at cern.ch
111
112   TString DBFolder;
113
114   if      (flag == 0) {
115     DBFolder  ="local://InitCalibDB";
116   }
117   else if (flag == 1) {
118     DBFolder  ="local://DeCalibDB";
119   }
120
121   AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT");
122 //   AliCDBManager::Instance()->SetSpecificStorage("PHOS",DBFolder.Data());
123
124   AliPHOSCalibData* clb  = new AliPHOSCalibData(gAlice->GetRunNumber());
125
126   static const Int_t nMod =  5;
127   static const Int_t nCol = 56;
128   static const Int_t nRow = 64;
129
130   TH2::AddDirectory(kFALSE);
131
132   TH2F* hPed[5];
133   TH2F* hGain[5];
134
135   TCanvas *cPed  = new TCanvas("cPed" ,"PHOS EMC Pedestals"   , 10,10,400,800);
136   TCanvas *cGain = new TCanvas("cGain","PHOS EMC Gain factors",410,10,400,800);
137   cPed ->Divide(1,5);
138   cGain->Divide(1,5);
139
140   for (Int_t module=1; module<=nMod; module++) {
141     TString namePed="hPed";
142     namePed+=module;
143     TString titlePed="Pedestals in module ";
144     titlePed+=module;
145     hPed[module-1] = new TH2F(namePed.Data(),titlePed.Data(),
146                             nCol,1.,1.*nCol,nRow,1.,1.*nRow);
147
148     TString nameGain="hGain";
149     nameGain+=module;
150     TString titleGain="Gain factors in module ";
151     titleGain+=module;
152     hGain[module-1] = new TH2F(nameGain.Data(),titleGain.Data(),
153                             nCol,1.,1.*nCol,nRow,1.,1.*nRow);
154
155     for (Int_t column=1; column<=nCol; column++) {
156       for (Int_t row=1; row<=nRow; row++) {
157         Float_t ped  = clb->GetADCpedestalEmc(module,column,row);
158         Float_t gain = clb->GetADCchannelEmc (module,column,row);
159         hPed[module-1]->SetBinContent(column,row,ped);
160         hGain[module-1]->SetBinContent(column,row,gain);
161       }
162     }
163     cPed ->cd(module);
164     hPed[module-1]->Draw("lego2");
165     cGain->cd(module);
166     hGain[module-1]->Draw("lego2");
167   }
168   cPed ->Print("pedestals.eps");
169   cGain->Print("gains.eps");
170 }