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