New EMC ideal calibration with all gains=0.005
[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 CDB menus");
33   menu->AddButton("Create ideal calibration","SetCC(0)",
34                   "Set equal CC");
35   menu->AddButton("Create full decalibration","SetCC(1)",
36                   "Set random decalibration CC");
37   menu->AddButton("Create residual decalibration","SetCC(2)",
38                   "Set residual decalibration calibration coefficients");
39
40   menu->AddButton("Read ideal calibration","GetCC(0)",
41                   "Read equal calibration coefficients");
42   menu->AddButton("Read full decalibration","GetCC(1)",
43                   "Read random decalibration calibration coefficients");
44   menu->AddButton("Read residual calibration","GetCC(2)",
45                   "Read residial calibration coefficients");
46   menu->AddButton("Exit","gApplication->Terminate(0)","Quit aliroot session");
47   menu->Show();
48 }
49
50 //-----------------------------------------------------------------------
51 void Help()
52 {
53   TString string="\nSet calibration parameters and write them into ALICE OCDB:";
54   string += "\n\tPress button \"Equal CC\" to create equal calibration coefficients;";
55   string += "\n\tPress button \"Full decalibration\" to create \n\t random calibration coefficients with 20\% spread \n\t to imitate fully decalibrated detector;";
56   string += "\n\tPress button \"Residual decalibration\" to create \n\t random calibration coefficients with +-2\% spread\n\t to imitate decalibrated detector after initial calibration.\n";
57   printf("%s",string.Data());
58 }
59
60 //------------------------------------------------------------------------
61 void SetCC(Int_t flag=0)
62 {
63   // Writing calibration coefficients into the Calibration DB
64   // Arguments:
65   //   flag=0: all calibration coefficients are equal
66   //   flag=1: decalibration coefficients
67   //   flag=2: calibration coefficients equal to inverse decalibration ones
68   // Author: Boris Polishchuk (Boris.Polichtchouk at cern.ch)
69
70   TString DBFolder;
71   Int_t firstRun   =  0;
72   Int_t lastRun    =  0;
73   Int_t beamPeriod =  1;
74   char* objFormat  = "";
75
76   AliPHOSCalibData* cdb = 0;
77
78   if      (flag == 0) {
79     // Ideal calibration with all channels at nominal value 0.005
80     DBFolder  ="local://InitCalibDB";
81     firstRun  =  0;
82     lastRun   =  999999;
83     objFormat = "PHOS ideal pedestals and ADC gain factors (5x64x56)";
84     cdb = new AliPHOSCalibData();
85     cdb->CreateNew();
86   }
87
88   else if (flag == 1) {
89     // Full decalibration is +-10% of the nominal value
90     DBFolder  ="local://FullDecalibDB";
91     firstRun  =  0;
92     lastRun   =  999999;
93     objFormat = "PHOS fully decalibrated calibration coefficients (5x64x56)";
94  
95     cdb = new AliPHOSCalibData();    
96     cdb->RandomEmc(0.045,0.055);
97     cdb->RandomCpv(0.0008,0.0016);
98   }
99   
100   else if (flag == 2) {
101     // Residual decalibration is +-1% of the nominal value
102     DBFolder  ="local://ResidualCalibDB";
103     firstRun  =  0;
104     lastRun   =  999999;
105     objFormat = "PHOS residual calibration coefficients (5x64x56)";
106     
107     cdb = new AliPHOSCalibData();    
108     cdb->RandomEmc(0.00495,0.00505);
109     cdb->RandomCpv(0.00115,0.00125);
110   }
111   
112   //Store calibration data into database
113   
114   AliCDBMetaData md;
115   md.SetComment(objFormat);
116   md.SetBeamPeriod(beamPeriod);
117   md.SetResponsible("Boris Polichtchouk");
118   
119   AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT");
120   if(gSystem->Getenv("STORAGE")){
121     cout << "Setting specific storage" << endl;
122     AliCDBManager::Instance()->SetSpecificStorage("PHOS/*",DBFolder.Data());
123   }
124
125   cdb->WriteEmc(firstRun,lastRun,&md);
126   cdb->WriteCpv(firstRun,lastRun,&md);
127   cdb->WriteEmcBadChannelsMap(firstRun,lastRun,&md);
128
129 }
130
131 //------------------------------------------------------------------------
132 void GetCC(Int_t flag=0)
133 {
134   // Read calibration coefficients into the Calibration DB
135   // Arguments:
136   //   flag=0: all calibration coefficients are equal
137   //   flag=1: decalibration coefficients
138   //   flag=2: calibration coefficients equal to inverse decalibration ones
139   // Author: Yuri.Kharlov at cern.ch
140
141   gStyle->SetPalette(1);
142   gStyle->SetOptStat(0);
143   TString DBFolder;
144   Int_t runNumber;
145
146   if      (flag == 0) {
147     DBFolder  ="local://InitCalibDB";
148     runNumber = 0;
149   }
150   else if (flag == 1) {
151     DBFolder  ="local://FullDecalibDB";
152     runNumber = 0;
153   }
154   else if (flag == 2) {
155     DBFolder  ="local://ResidualCalibDB";
156     runNumber = 0;
157   }
158
159   AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT");
160   if(gSystem->Getenv("STORAGE")){
161     cout << "Setting specific storage" << endl;
162     AliCDBManager::Instance()->SetSpecificStorage("PHOS/*",DBFolder.Data());
163   }
164
165   AliPHOSCalibData* clb  = new AliPHOSCalibData(runNumber);
166
167   TH2::AddDirectory(kFALSE);
168
169   TH2F* hGain[5];
170
171   TCanvas *cGain = new TCanvas("cGain","PHOS EMC Gain factors",10,10,700,500);
172   cGain->Divide(3,2);
173
174   for (Int_t module=1; module<=nMod; module++) {
175     TString nameGain="hGain";
176     nameGain+=module;
177     TString titleGain="Gain factors in module ";
178     titleGain+=module;
179     hGain[module-1] = new TH2F(nameGain.Data(),titleGain.Data(),
180                             nCol,1.,1.*nCol,nRow,1.,1.*nRow);
181
182     for (Int_t column=1; column<=nCol; column++) {
183       for (Int_t row=1; row<=nRow; row++) {
184         Float_t gain = clb->GetADCchannelEmc (module,column,row);
185         hGain[module-1]->SetBinContent(column,row,gain);
186       }
187     }
188     cGain->cd(module);
189     hGain[module-1]->SetMinimum(0);
190     hGain[module-1]->Draw("colz");
191   }
192   cGain->Print("gains.eps");
193 }