]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TPC/CalibMacros/CalibTimeGain.C
doxy: TPC/CalibMacros
[u/mrichter/AliRoot.git] / TPC / CalibMacros / CalibTimeGain.C
CommitLineData
35d81915 1/// \file CalibTimeGain.C
2///
3/// Macro to generate and update OCDB entries for a given run:
4/// this is a TObjArray which has at 0 the MIP-Spline and at 1 the Fermi-Plateau-Spline ...
5///
6/// \author marian.ivanov@cern.ch
7/// \author A.Kalweit@gsi.de
8///
9/// How to use it locally:
10///
11/// ~~~{.cpp}
12/// // Load libraries
13/// gSystem->Load("libANALYSIS");
14/// gSystem->Load("libSTAT");
15/// gSystem->Load("libTPCcalib");
16/// gSystem->AddIncludePath("-I$ALICE_ROOT/TPC");
17/// .L $ALICE_ROOT/TPC/CalibMacros/CalibTimeGain.C+
18///
19/// //Make calibration
20/// CalibTimeGain("CalibObjectsTrain1.root",0,120000);
21/// TBrowser b;
22/// b.Add(gainArray);
23/// ~~~
24
12068303 25#if !defined(__CINT__) || defined(__MAKECINT__)
b6d506d5 26#include "TObjArray.h"
27#include "TGraphErrors.h"
28#include "THnSparse.h"
29#include "TCanvas.h"
12068303 30#include "TFile.h"
b6d506d5 31
32#include "AliTPCcalibTimeGain.h"
33#include "AliSplineFit.h"
34#include "AliCDBMetaData.h"
35#include "AliCDBId.h"
36#include "AliCDBManager.h"
37#include "AliCDBStorage.h"
12068303 38#endif
39
40
41
42
43TGraphErrors * graphMIP = 0; // graph time dependence of MIP
44TGraphErrors * graphCosmic = 0; // graph time dependence at Plateu
45AliSplineFit * fitMIP = 0; // fit of dependence - MIP
46AliSplineFit * fitCosmic = 0; // fit of dependence - Plateu
47TObjArray * gainArray = new TObjArray(4); // array to be stored in the OCDB
48AliTPCcalibTimeGain * gainMIP =0; // calibration component for MIP
49AliTPCcalibTimeGain * gainCosmic =0; // calibration component for cosmic
50
51
52void UpdateOCDBGain(Int_t startRunNumber, Int_t endRunNumber, const char* storagePath);
53void ReadGainGlobal(Char_t* fileName="CalibObjectsTrain1.root");
54void MakeQAPlot(Float_t FPtoMIPratio);
55Bool_t AnalyzeGain(Int_t startRunNumber, Int_t endRunNumber, Int_t minEntriesGaussFit = 500, Float_t FPtoMIPratio = 1.43);
56
57
58
bade7d8d 59void CalibTimeGain(Char_t* fileName="CalibObjectsTrain1.root", Int_t startRunNumber=0, Int_t endRunNumber=AliCDBRunRange::Infinity(), TString ocdbStorage=""){
35d81915 60 /// Update OCDB gain
61
12068303 62 ReadGainGlobal(fileName);
63 AnalyzeGain(startRunNumber,endRunNumber, 1000,1.43);
64 MakeQAPlot(1.43);
65 if (ocdbStorage.Length()==0) ocdbStorage+="local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
66 UpdateOCDBGain( startRunNumber, endRunNumber, ocdbStorage.Data());
67}
b6d506d5 68
69
b6d506d5 70
b6d506d5 71
12068303 72void ReadGainGlobal(Char_t* fileName){
35d81915 73 /// read calibration entries from file
74
12068303 75 TFile fcalib(fileName);
76 TObjArray * array = (TObjArray*)fcalib.Get("TPCCalib");
77 if (array){
78 gainMIP = ( AliTPCcalibTimeGain *)array->FindObject("calibTimeGain");
79 gainCosmic = ( AliTPCcalibTimeGain *)array->FindObject("calibTimeGainCosmic");
80 }else{
81 gainMIP = ( AliTPCcalibTimeGain *)fcalib.Get("calibTimeGain");
82 gainCosmic = ( AliTPCcalibTimeGain *)fcalib.Get("calibTimeGainCosmic");
83 }
84 TH1 * hisT=0;
85 Int_t firstBinA =0, lastBinA=0;
86
87 if (gainCosmic){
88 hisT= gainCosmic->GetHistGainTime()->Projection(1);
89 firstBinA = hisT->FindFirstBinAbove(2);
90 lastBinA = hisT->FindLastBinAbove(2);
91 gainCosmic->GetHistGainTime()->GetAxis(1)->SetRange(firstBinA,lastBinA);
92 delete hisT;
93 }
94
95 if (gainMIP){
96 hisT= gainCosmic->GetHistGainTime()->Projection(1);
97 firstBinA = hisT->FindFirstBinAbove(2);
98 lastBinA = hisT->FindLastBinAbove(2);
99 gainMIP->GetHistGainTime()->GetAxis(1)->SetRange(firstBinA,lastBinA);
100 delete hisT;
101 }
102
103}
104
105
106
107Bool_t AnalyzeGain(Int_t startRunNumber, Int_t endRunNumber, Int_t minEntriesGaussFit, Float_t FPtoMIPratio){
35d81915 108 ///
109
12068303 110 gainMIP->GetHistGainTime()->GetAxis(5)->SetRangeUser(startRunNumber, endRunNumber);
b6d506d5 111 // 1.) try to create MIP spline
12068303 112 gainMIP->GetHistGainTime()->GetAxis(2)->SetRangeUser(1.51,2.49); // only beam data
113 gainMIP->GetHistGainTime()->GetAxis(4)->SetRangeUser(0.39,0.51); // only MIP pions
b6d506d5 114 //
12068303 115 graphMIP = AliTPCcalibBase::FitSlices(gainMIP->GetHistGainTime(),0,1,minEntriesGaussFit,10,0.1,0.7);
b6d506d5 116 if (graphMIP->GetN()==0) graphMIP = 0x0;
b6d506d5 117 if (graphMIP) fitMIP = AliTPCcalibTimeGain::MakeSplineFit(graphMIP);
118 if (graphMIP) graphMIP->SetName("TGRAPHERRORS_MEAN_GAIN_BEAM_ALL");// set proper names according to naming convention
12068303 119 gainArray->AddAt(fitMIP,0);
b6d506d5 120
12068303 121
b6d506d5 122 // 2.) try to create Cosmic spline
12068303 123 gainCosmic->GetHistGainTime()->GetAxis(2)->SetRangeUser(0.51,1.49); // only cosmics
124 gainCosmic->GetHistGainTime()->GetAxis(4)->SetRangeUser(20,100); // only Fermi-Plateau muons
b6d506d5 125 //
12068303 126 graphCosmic = AliTPCcalibBase::FitSlices(gainCosmic->GetHistGainTime(),0,1,minEntriesGaussFit,10);
b6d506d5 127 if (graphCosmic->GetN()==0) graphCosmic = 0x0;
12068303 128 //
129 if (graphCosmic) {
130 for(Int_t i=0; i < graphCosmic->GetN(); i++) {
131 graphCosmic->GetY()[i] /= FPtoMIPratio;
132 graphCosmic->GetEY()[i] /= FPtoMIPratio;
133 }
134 }
135 //
b6d506d5 136 if (graphCosmic) fitCosmic = AliTPCcalibTimeGain::MakeSplineFit(graphCosmic);
137 if (graphCosmic) graphCosmic->SetName("TGRAPHERRORS_MEAN_GAIN_COSMIC_ALL"); // set proper names according to naming convention
12068303 138 gainArray->AddAt(fitCosmic,1);
b6d506d5 139 // with naming convention and backward compatibility
12068303 140 gainArray->AddAt(graphMIP,2);
141 gainArray->AddAt(graphCosmic,3);
b6d506d5 142 cout << "graphCosmic: " << graphCosmic << " graphMIP " << graphMIP << endl;
12068303 143 return kTRUE;
144
145}
146
147
148
149void UpdateOCDBGain(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
35d81915 150 /// Update OCDB entry
151
b6d506d5 152 AliCDBMetaData *metaData= new AliCDBMetaData();
153 metaData->SetObjectClassName("TObjArray");
154 metaData->SetResponsible("Alexander Kalweit");
155 metaData->SetBeamPeriod(1);
156 metaData->SetAliRootVersion("05-24-00"); //root version
157 metaData->SetComment("Calibration of the time dependence of the gain due to pressure and temperature changes.");
158 AliCDBId id1("TPC/Calib/TimeGain", startRunNumber, endRunNumber);
159 AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(storagePath);
12068303 160 gStorage->Put(gainArray, id1, metaData);
161}
b6d506d5 162
12068303 163void MakeQAPlot(Float_t FPtoMIPratio) {
35d81915 164 /// Make QA plot to visualize results
165
12068303 166 if (graphCosmic) {
167 TCanvas * canvasCosmic = new TCanvas("gain Cosmic", "time dependent gain QA histogram cosmic");
168 canvasCosmic->cd();
169 TH2D * gainHistoCosmic = gainCosmic->GetHistGainTime()->Projection(0,1);
170 gainHistoCosmic->SetDirectory(0);
171 gainHistoCosmic->SetName("GainHistoCosmic");
172 gainHistoCosmic->GetXaxis()->SetTimeDisplay(kTRUE);
173 gainHistoCosmic->GetXaxis()->SetTimeFormat("#splitline{%d/%m}{%H:%M}");
174 gainHistoCosmic->Draw("colz");
175 graphCosmic->SetMarkerStyle(25);
176 graphCosmic->Draw("lp");
177 graphCosmic->SetMarkerStyle(25);
178 TGraph * grfitCosmic = fitCosmic->MakeGraph(graphCosmic->GetX()[0],graphCosmic->GetX()[graphCosmic->GetN()-1],50000,0);
179 if (grfitCosmic) {
180 for(Int_t i=0; i < grfitCosmic->GetN(); i++) {
181 grfitCosmic->GetY()[i] *= FPtoMIPratio;
182 }
183 for(Int_t i=0; i < graphCosmic->GetN(); i++) {
184 graphCosmic->GetY()[i] *= FPtoMIPratio;
185 }
b6d506d5 186 }
12068303 187 graphCosmic->Draw("lp");
188 grfitCosmic->SetLineColor(2);
189 grfitCosmic->Draw("lu");
190 gainArray->AddLast(gainHistoCosmic);
191 gainArray->AddLast(canvasCosmic->Clone());
192 delete canvasCosmic;
b6d506d5 193 }
12068303 194 if (fitMIP) {
195 TCanvas * canvasMIP = new TCanvas("gain MIP", "time dependent gain QA histogram MIP");
196 canvasMIP->cd();
197 TH2D * gainHistoMIP = gainMIP->GetHistGainTime()->Projection(0,1);
198 gainHistoMIP->SetName("GainHistoCosmic");
199 gainHistoMIP->SetDirectory(0);
200 gainHistoMIP->GetXaxis()->SetTimeDisplay(kTRUE);
201 gainHistoMIP->GetXaxis()->SetTimeFormat("#splitline{%d/%m}{%H:%M}");
202 gainHistoMIP->Draw("colz");
203 graphMIP->SetMarkerStyle(25);
204 graphMIP->Draw("lp");
205 TGraph * grfitMIP = fitMIP->MakeGraph(graphMIP->GetX()[0],graphMIP->GetX()[graphMIP->GetN()-1],50000,0);
206 grfitMIP->SetLineColor(2);
207 grfitMIP->Draw("lu");
208 gainArray->AddLast(gainHistoMIP);
209 gainArray->AddLast(canvasMIP->Clone());
210 delete canvasMIP;
211 }
b6d506d5 212}
213
214