]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG0/AliCorrectionMatrix.cxx
updating particle composition systematic study
[u/mrichter/AliRoot.git] / PWG0 / AliCorrectionMatrix.cxx
CommitLineData
bf21645b 1/* $Id$ */
2
3// ------------------------------------------------------
4//
5// Class to handle corrections.
6//
7// ------------------------------------------------------
8//
9
10#include <TFile.h>
11#include <TCanvas.h>
12#include <TH2F.h>
13
14#include <AliLog.h>
15
16#include "AliCorrectionMatrix.h"
17
18//____________________________________________________________________
19ClassImp(AliCorrectionMatrix)
20
21//____________________________________________________________________
22AliCorrectionMatrix::AliCorrectionMatrix() : TNamed(),
23 fhMeas(0),
24 fhGene(0),
25 fhCorr(0)
26{
27 // default constructor
28}
29
61385583 30//____________________________________________________________________
bf21645b 31AliCorrectionMatrix::AliCorrectionMatrix(const Char_t* name, const Char_t* title) : TNamed(name, title),
32 fhMeas(0),
33 fhGene(0),
34 fhCorr(0)
35{
36 // constructor initializing tnamed
37}
38
39//____________________________________________________________________
61385583 40AliCorrectionMatrix::AliCorrectionMatrix(const AliCorrectionMatrix& c) : TNamed(c),
41 fhMeas(0),
42 fhGene(0),
43 fhCorr(0)
bf21645b 44{
45 // copy constructor
46 ((AliCorrectionMatrix &)c).Copy(*this);
47}
48
49//____________________________________________________________________
50AliCorrectionMatrix::~AliCorrectionMatrix()
51{
52 //
53 // destructor
54 //
55
56 if (fhMeas)
57 {
58 delete fhMeas;
59 fhMeas = 0;
60 }
61
62 if (fhGene)
63 {
64 delete fhGene;
65 fhGene = 0;
66 }
67
68 if (fhCorr)
69 {
70 delete fhCorr;
71 fhCorr = 0;
72 }
73}
74
75//____________________________________________________________________
76AliCorrectionMatrix &AliCorrectionMatrix::operator=(const AliCorrectionMatrix &c)
77{
78 // assigment operator
79
61385583 80 if (this != &c)
bf21645b 81 ((AliCorrectionMatrix &) c).Copy(*this);
82
83 return *this;
84}
85
86//____________________________________________________________________
87void AliCorrectionMatrix::Copy(TObject& c) const
88{
89 // copy function
90
91 AliCorrectionMatrix& target = (AliCorrectionMatrix &) c;
92
93 if (fhMeas)
94 target.fhMeas = dynamic_cast<TH1*> (fhMeas->Clone());
95
96 if (fhGene)
97 target.fhGene = dynamic_cast<TH1*> (fhGene->Clone());
98
99 if (fhCorr)
100 target.fhCorr = dynamic_cast<TH1*> (fhCorr->Clone());
101}
102
103//________________________________________________________________________
104void AliCorrectionMatrix::SetAxisTitles(const Char_t* titleX, const Char_t* titleY, const Char_t* titleZ)
0ab29cfa 105{
bf21645b 106 //
107 // method for setting the axis titles of the histograms
108 //
109
110 fhMeas ->SetXTitle(titleX); fhMeas ->SetYTitle(titleY); fhMeas ->SetZTitle(titleZ);
111 fhGene ->SetXTitle(titleX); fhGene ->SetYTitle(titleY); fhGene ->SetZTitle(titleZ);
112 fhCorr ->SetXTitle(titleX); fhCorr ->SetYTitle(titleY); fhCorr ->SetZTitle(titleZ);
113}
114
115//____________________________________________________________________
116Long64_t AliCorrectionMatrix::Merge(TCollection* list)
117{
118 // Merge a list of AliCorrectionMatrix objects with this (needed for
119 // PROOF).
120 // Returns the number of merged objects (including this).
121
122 if (!list)
123 return 0;
124
125 if (list->IsEmpty())
126 return 1;
127
128 TIterator* iter = list->MakeIterator();
129 TObject* obj;
130
131 // collections of measured and generated histograms
132 TList* collectionMeas = new TList;
133 TList* collectionGene = new TList;
134
135 Int_t count = 0;
136 while ((obj = iter->Next())) {
137
138 AliCorrectionMatrix* entry = dynamic_cast<AliCorrectionMatrix*> (obj);
139 if (entry == 0)
140 continue;
141
142 collectionMeas->Add(entry->GetMeasuredHistogram());
143 collectionGene->Add(entry->GetGeneratedHistogram());
144
145 count++;
146 }
147 fhMeas->Merge(collectionMeas);
148 fhGene->Merge(collectionGene);
149
150 delete collectionMeas;
151 delete collectionGene;
152
153 return count+1;
154}
155
156//____________________________________________________________________
157void AliCorrectionMatrix::Divide()
158{
159 //
160 // divide the histograms to get the correction
161 //
162
163 if (!fhMeas || !fhGene)
164 return;
165
166 fhCorr->Divide(fhGene, fhMeas, 1, 1, "B");
167
1afae8ff 168 Int_t emptyBins = 0;
169 for (Int_t x=1; x<=fhCorr->GetNbinsX(); ++x)
170 for (Int_t y=1; y<=fhCorr->GetNbinsY(); ++y)
171 for (Int_t z=1; z<=fhCorr->GetNbinsZ(); ++z)
172 if (fhCorr->GetBinContent(x, y, z) == 0)
173 ++emptyBins;
174
175 if (emptyBins > 0)
176 printf("INFO: In %s we have %d empty bins (of %d) in the correction map\n", GetName(), emptyBins, fhCorr->GetNbinsX() * fhCorr->GetNbinsY() * fhCorr->GetNbinsZ());
bf21645b 177}
178
179//____________________________________________________________________
0ab29cfa 180Bool_t AliCorrectionMatrix::LoadHistograms(const Char_t* fileName, const Char_t* dir)
bf21645b 181{
182 //
183 // loads the histograms from a file
184 //
1afae8ff 185
186 TFile* fin = TFile::Open(fileName);
187
bf21645b 188 if(!fin) {
189 //Info("LoadHistograms",Form(" %s file does not exist",fileName));
190 return kFALSE;
191 }
192
193 if(fhGene) {delete fhGene; fhGene=0;}
194 if(fhCorr) {delete fhCorr; fhCorr=0;}
195 if(fhMeas) {delete fhMeas; fhMeas=0;}
196
0ab29cfa 197 fhMeas = dynamic_cast<TH1*> (fin->Get(Form("%s/meas_%s", dir,GetName())));
bf21645b 198 if(!fhMeas) Info("LoadHistograms","No meas hist available");
0ab29cfa 199
200 fhGene = dynamic_cast<TH1*> (fin->Get(Form("%s/gene_%s",dir, GetName())));
bf21645b 201 if(!fhGene) Info("LoadHistograms","No gene hist available");
0ab29cfa 202
203 fhCorr = dynamic_cast<TH1*> (fin->Get(Form("%s/corr_%s",dir, GetName())));
bf21645b 204 if(!fhCorr)
205 {
206 Info("LoadHistograms","No corr hist available");
207 return kFALSE;
208 }
209
210 return kTRUE;
211}
212
213//____________________________________________________________________
214void AliCorrectionMatrix::SaveHistograms()
215{
216 //
217 // saves the histograms
218 //
219
220 fhMeas ->Write();
221 fhGene ->Write();
222
223 if (fhCorr)
224 fhCorr->Write();
225}
226
227//____________________________________________________________________
228void AliCorrectionMatrix::DrawHistograms()
229{
230 //
231 // draws all the four histograms on one TCanvas
232 //
233
234 TCanvas* canvas = new TCanvas(Form("correction_%s",fName.Data()),
235 Form("correction_%s",fName.Data()), 800, 800);
236 canvas->Divide(2, 2);
237
238 canvas->cd(1);
239 if (fhMeas)
240 fhMeas->Draw("COLZ");
241
242 canvas->cd(2);
243 if (fhGene)
244 fhGene->Draw("COLZ");
245
246 canvas->cd(3);
247 if (fhCorr)
248 fhCorr->Draw("COLZ");
249
250 canvas->cd(4);
251
252 // add: draw here the stat. errors of the correction histogram
253}
0ab29cfa 254
255//____________________________________________________________________
256void AliCorrectionMatrix::ReduceInformation()
257{
258 // this function deletes the measured and generated histograms to reduce the amount of data
259 // in memory
260
261 if (fhMeas)
262 {
263 delete fhMeas;
264 fhMeas = 0;
265 }
266
267 if (fhGene)
268 {
269 delete fhGene;
270 fhGene = 0;
271 }
272}