#include <TFile.h>
#include <TCanvas.h>
#include <TH2F.h>
#include <AliLog.h>
#include "AliCorrectionMatrix.h"
ClassImp(AliCorrectionMatrix)
AliCorrectionMatrix::AliCorrectionMatrix() : TNamed(),
fhMeas(0),
fhGene(0),
fhCorr(0)
{
}
AliCorrectionMatrix::AliCorrectionMatrix(const Char_t* name, const Char_t* title) : TNamed(name, title),
fhMeas(0),
fhGene(0),
fhCorr(0)
{
}
AliCorrectionMatrix::AliCorrectionMatrix(const AliCorrectionMatrix& c) : TNamed(c),
fhMeas(0),
fhGene(0),
fhCorr(0)
{
((AliCorrectionMatrix &)c).Copy(*this);
}
AliCorrectionMatrix::~AliCorrectionMatrix()
{
if (fhMeas)
{
delete fhMeas;
fhMeas = 0;
}
if (fhGene)
{
delete fhGene;
fhGene = 0;
}
if (fhCorr)
{
delete fhCorr;
fhCorr = 0;
}
}
AliCorrectionMatrix &AliCorrectionMatrix::operator=(const AliCorrectionMatrix &c)
{
if (this != &c)
((AliCorrectionMatrix &) c).Copy(*this);
return *this;
}
void AliCorrectionMatrix::Copy(TObject& c) const
{
AliCorrectionMatrix& target = (AliCorrectionMatrix &) c;
if (fhMeas)
target.fhMeas = dynamic_cast<TH1*> (fhMeas->Clone());
if (fhGene)
target.fhGene = dynamic_cast<TH1*> (fhGene->Clone());
if (fhCorr)
target.fhCorr = dynamic_cast<TH1*> (fhCorr->Clone());
}
void AliCorrectionMatrix::SetAxisTitles(const Char_t* titleX, const Char_t* titleY, const Char_t* titleZ)
{
fhMeas ->SetXTitle(titleX); fhMeas ->SetYTitle(titleY); fhMeas ->SetZTitle(titleZ);
fhGene ->SetXTitle(titleX); fhGene ->SetYTitle(titleY); fhGene ->SetZTitle(titleZ);
fhCorr ->SetXTitle(titleX); fhCorr ->SetYTitle(titleY); fhCorr ->SetZTitle(titleZ);
}
Long64_t AliCorrectionMatrix::Merge(TCollection* list)
{
if (!list)
return 0;
if (list->IsEmpty())
return 1;
TIterator* iter = list->MakeIterator();
TObject* obj;
TList* collectionMeas = new TList;
TList* collectionGene = new TList;
Int_t count = 0;
while ((obj = iter->Next())) {
AliCorrectionMatrix* entry = dynamic_cast<AliCorrectionMatrix*> (obj);
if (entry == 0)
continue;
collectionMeas->Add(entry->GetMeasuredHistogram());
collectionGene->Add(entry->GetGeneratedHistogram());
count++;
}
fhMeas->Merge(collectionMeas);
fhGene->Merge(collectionGene);
delete collectionMeas;
delete collectionGene;
return count+1;
}
void AliCorrectionMatrix::Divide()
{
if (!fhMeas || !fhGene || !fhCorr) {
AliDebug(AliLog::kError, "measured or generated histograms not available");
return;
}
fhCorr->Divide(fhGene, fhMeas, 1, 1, "B");
Int_t emptyBins = 0;
for (Int_t x=1; x<=fhCorr->GetNbinsX(); ++x)
for (Int_t y=1; y<=fhCorr->GetNbinsY(); ++y)
for (Int_t z=1; z<=fhCorr->GetNbinsZ(); ++z)
if (fhCorr->GetBinContent(x, y, z) == 0)
++emptyBins;
if (emptyBins > 0)
printf("INFO: In %s we have %d empty bins (of %d) in the correction map\n", GetTitle(), emptyBins, fhCorr->GetNbinsX() * fhCorr->GetNbinsY() * fhCorr->GetNbinsZ());
}
void AliCorrectionMatrix::Multiply()
{
if (!fhMeas || !fhGene || !fhCorr)
return;
fhGene->Multiply(fhMeas, fhCorr, 1, 1, "B");
}
void AliCorrectionMatrix::Add(AliCorrectionMatrix* aMatrixToAdd, Float_t c) {
fhMeas->Add(aMatrixToAdd->GetMeasuredHistogram(), c);
fhGene->Add(aMatrixToAdd->GetGeneratedHistogram(), c);
}
Bool_t AliCorrectionMatrix::LoadHistograms(const Char_t* dir)
{
if (!dir)
dir = GetName();
if (!gDirectory->cd(dir))
return kFALSE;
if (fhGene)
{
delete fhGene;
fhGene=0;
}
if (fhCorr)
{
delete fhCorr;
fhCorr=0;
}
if (fhMeas)
{
delete fhMeas;
fhMeas=0;
}
fhMeas = dynamic_cast<TH1*> (gDirectory->Get("measured"));
if (!fhMeas)
Info("LoadHistograms", "No measured hist available");
fhGene = dynamic_cast<TH1*> (gDirectory->Get("generated"));
if (!fhGene)
Info("LoadHistograms", "No generated hist available");
fhCorr = dynamic_cast<TH1*> (gDirectory->Get("correction"));
Bool_t success = kTRUE;
if (!fhCorr)
{
Info("LoadHistograms", "No correction hist available");
success = kFALSE;
}
gDirectory->cd("..");
return success;
}
void AliCorrectionMatrix::SaveHistograms()
{
gDirectory->mkdir(GetName());
gDirectory->cd(GetName());
if (fhMeas)
fhMeas ->Write();
if (fhGene)
fhGene ->Write();
if (fhCorr)
fhCorr->Write();
gDirectory->cd("..");
}
void AliCorrectionMatrix::DrawHistograms(const Char_t* canvasName)
{
if (!canvasName)
canvasName = Form("%s_canvas", GetName());
TCanvas* canvas = new TCanvas(canvasName, GetTitle(), 1200, 400);
canvas->Divide(3, 1);
canvas->cd(1);
if (fhMeas)
fhMeas->Draw("COLZ");
canvas->cd(2);
if (fhGene)
{
if (fhGene->GetEntries() == 0)
fhGene->SetEntries(1);
fhGene->Draw("COLZ");
}
canvas->cd(3);
if (fhCorr)
fhCorr->Draw("COLZ");
}
void AliCorrectionMatrix::ReduceInformation()
{
if (fhMeas)
{
delete fhMeas;
fhMeas = 0;
}
if (fhGene)
{
delete fhGene;
fhGene = 0;
}
}
void AliCorrectionMatrix::Reset(Option_t* option)
{
if (fhGene)
fhGene->Reset(option);
if (fhMeas)
fhMeas->Reset(option);
if (fhCorr)
fhCorr->Reset(option);
}
void AliCorrectionMatrix::SetCorrectionToUnity()
{
if (!fhCorr)
return;
for (Int_t x=0; x<=fhCorr->GetNbinsX()+1; ++x)
for (Int_t y=0; y<=fhCorr->GetNbinsY()+1; ++y)
for (Int_t z=0; z<=fhCorr->GetNbinsZ()+1; ++z)
{
fhCorr->SetBinContent(x, y, z, 1);
fhCorr->SetBinError(x, y, z, 0);
}
}
void AliCorrectionMatrix::Scale(Double_t factor)
{
Printf("Scaling histograms with %f", factor);
fhMeas->Scale(factor);
fhGene->Scale(factor);
}
void AliCorrectionMatrix::ResetErrorsOnCorrections()
{
if (!fhCorr)
return;
for (Int_t x=0; x<=fhCorr->GetNbinsX()+1; ++x)
for (Int_t y=0; y<=fhCorr->GetNbinsY()+1; ++y)
for (Int_t z=0; z<=fhCorr->GetNbinsZ()+1; ++z)
fhCorr->SetBinError(x, y, z, 0);
}
AliCorrectionMatrix.cxx:1 AliCorrectionMatrix.cxx:2 AliCorrectionMatrix.cxx:3 AliCorrectionMatrix.cxx:4 AliCorrectionMatrix.cxx:5 AliCorrectionMatrix.cxx:6 AliCorrectionMatrix.cxx:7 AliCorrectionMatrix.cxx:8 AliCorrectionMatrix.cxx:9 AliCorrectionMatrix.cxx:10 AliCorrectionMatrix.cxx:11 AliCorrectionMatrix.cxx:12 AliCorrectionMatrix.cxx:13 AliCorrectionMatrix.cxx:14 AliCorrectionMatrix.cxx:15 AliCorrectionMatrix.cxx:16 AliCorrectionMatrix.cxx:17 AliCorrectionMatrix.cxx:18 AliCorrectionMatrix.cxx:19 AliCorrectionMatrix.cxx:20 AliCorrectionMatrix.cxx:21 AliCorrectionMatrix.cxx:22 AliCorrectionMatrix.cxx:23 AliCorrectionMatrix.cxx:24 AliCorrectionMatrix.cxx:25 AliCorrectionMatrix.cxx:26 AliCorrectionMatrix.cxx:27 AliCorrectionMatrix.cxx:28 AliCorrectionMatrix.cxx:29 AliCorrectionMatrix.cxx:30 AliCorrectionMatrix.cxx:31 AliCorrectionMatrix.cxx:32 AliCorrectionMatrix.cxx:33 AliCorrectionMatrix.cxx:34 AliCorrectionMatrix.cxx:35 AliCorrectionMatrix.cxx:36 AliCorrectionMatrix.cxx:37 AliCorrectionMatrix.cxx:38 AliCorrectionMatrix.cxx:39 AliCorrectionMatrix.cxx:40 AliCorrectionMatrix.cxx:41 AliCorrectionMatrix.cxx:42 AliCorrectionMatrix.cxx:43 AliCorrectionMatrix.cxx:44 AliCorrectionMatrix.cxx:45 AliCorrectionMatrix.cxx:46 AliCorrectionMatrix.cxx:47 AliCorrectionMatrix.cxx:48 AliCorrectionMatrix.cxx:49 AliCorrectionMatrix.cxx:50 AliCorrectionMatrix.cxx:51 AliCorrectionMatrix.cxx:52 AliCorrectionMatrix.cxx:53 AliCorrectionMatrix.cxx:54 AliCorrectionMatrix.cxx:55 AliCorrectionMatrix.cxx:56 AliCorrectionMatrix.cxx:57 AliCorrectionMatrix.cxx:58 AliCorrectionMatrix.cxx:59 AliCorrectionMatrix.cxx:60 AliCorrectionMatrix.cxx:61 AliCorrectionMatrix.cxx:62 AliCorrectionMatrix.cxx:63 AliCorrectionMatrix.cxx:64 AliCorrectionMatrix.cxx:65 AliCorrectionMatrix.cxx:66 AliCorrectionMatrix.cxx:67 AliCorrectionMatrix.cxx:68 AliCorrectionMatrix.cxx:69 AliCorrectionMatrix.cxx:70 AliCorrectionMatrix.cxx:71 AliCorrectionMatrix.cxx:72 AliCorrectionMatrix.cxx:73 AliCorrectionMatrix.cxx:74 AliCorrectionMatrix.cxx:75 AliCorrectionMatrix.cxx:76 AliCorrectionMatrix.cxx:77 AliCorrectionMatrix.cxx:78 AliCorrectionMatrix.cxx:79 AliCorrectionMatrix.cxx:80 AliCorrectionMatrix.cxx:81 AliCorrectionMatrix.cxx:82 AliCorrectionMatrix.cxx:83 AliCorrectionMatrix.cxx:84 AliCorrectionMatrix.cxx:85 AliCorrectionMatrix.cxx:86 AliCorrectionMatrix.cxx:87 AliCorrectionMatrix.cxx:88 AliCorrectionMatrix.cxx:89 AliCorrectionMatrix.cxx:90 AliCorrectionMatrix.cxx:91 AliCorrectionMatrix.cxx:92 AliCorrectionMatrix.cxx:93 AliCorrectionMatrix.cxx:94 AliCorrectionMatrix.cxx:95 AliCorrectionMatrix.cxx:96 AliCorrectionMatrix.cxx:97 AliCorrectionMatrix.cxx:98 AliCorrectionMatrix.cxx:99 AliCorrectionMatrix.cxx:100 AliCorrectionMatrix.cxx:101 AliCorrectionMatrix.cxx:102 AliCorrectionMatrix.cxx:103 AliCorrectionMatrix.cxx:104 AliCorrectionMatrix.cxx:105 AliCorrectionMatrix.cxx:106 AliCorrectionMatrix.cxx:107 AliCorrectionMatrix.cxx:108 AliCorrectionMatrix.cxx:109 AliCorrectionMatrix.cxx:110 AliCorrectionMatrix.cxx:111 AliCorrectionMatrix.cxx:112 AliCorrectionMatrix.cxx:113 AliCorrectionMatrix.cxx:114 AliCorrectionMatrix.cxx:115 AliCorrectionMatrix.cxx:116 AliCorrectionMatrix.cxx:117 AliCorrectionMatrix.cxx:118 AliCorrectionMatrix.cxx:119 AliCorrectionMatrix.cxx:120 AliCorrectionMatrix.cxx:121 AliCorrectionMatrix.cxx:122 AliCorrectionMatrix.cxx:123 AliCorrectionMatrix.cxx:124 AliCorrectionMatrix.cxx:125 AliCorrectionMatrix.cxx:126 AliCorrectionMatrix.cxx:127 AliCorrectionMatrix.cxx:128 AliCorrectionMatrix.cxx:129 AliCorrectionMatrix.cxx:130 AliCorrectionMatrix.cxx:131 AliCorrectionMatrix.cxx:132 AliCorrectionMatrix.cxx:133 AliCorrectionMatrix.cxx:134 AliCorrectionMatrix.cxx:135 AliCorrectionMatrix.cxx:136 AliCorrectionMatrix.cxx:137 AliCorrectionMatrix.cxx:138 AliCorrectionMatrix.cxx:139 AliCorrectionMatrix.cxx:140 AliCorrectionMatrix.cxx:141 AliCorrectionMatrix.cxx:142 AliCorrectionMatrix.cxx:143 AliCorrectionMatrix.cxx:144 AliCorrectionMatrix.cxx:145 AliCorrectionMatrix.cxx:146 AliCorrectionMatrix.cxx:147 AliCorrectionMatrix.cxx:148 AliCorrectionMatrix.cxx:149 AliCorrectionMatrix.cxx:150 AliCorrectionMatrix.cxx:151 AliCorrectionMatrix.cxx:152 AliCorrectionMatrix.cxx:153 AliCorrectionMatrix.cxx:154 AliCorrectionMatrix.cxx:155 AliCorrectionMatrix.cxx:156 AliCorrectionMatrix.cxx:157 AliCorrectionMatrix.cxx:158 AliCorrectionMatrix.cxx:159 AliCorrectionMatrix.cxx:160 AliCorrectionMatrix.cxx:161 AliCorrectionMatrix.cxx:162 AliCorrectionMatrix.cxx:163 AliCorrectionMatrix.cxx:164 AliCorrectionMatrix.cxx:165 AliCorrectionMatrix.cxx:166 AliCorrectionMatrix.cxx:167 AliCorrectionMatrix.cxx:168 AliCorrectionMatrix.cxx:169 AliCorrectionMatrix.cxx:170 AliCorrectionMatrix.cxx:171 AliCorrectionMatrix.cxx:172 AliCorrectionMatrix.cxx:173 AliCorrectionMatrix.cxx:174 AliCorrectionMatrix.cxx:175 AliCorrectionMatrix.cxx:176 AliCorrectionMatrix.cxx:177 AliCorrectionMatrix.cxx:178 AliCorrectionMatrix.cxx:179 AliCorrectionMatrix.cxx:180 AliCorrectionMatrix.cxx:181 AliCorrectionMatrix.cxx:182 AliCorrectionMatrix.cxx:183 AliCorrectionMatrix.cxx:184 AliCorrectionMatrix.cxx:185 AliCorrectionMatrix.cxx:186 AliCorrectionMatrix.cxx:187 AliCorrectionMatrix.cxx:188 AliCorrectionMatrix.cxx:189 AliCorrectionMatrix.cxx:190 AliCorrectionMatrix.cxx:191 AliCorrectionMatrix.cxx:192 AliCorrectionMatrix.cxx:193 AliCorrectionMatrix.cxx:194 AliCorrectionMatrix.cxx:195 AliCorrectionMatrix.cxx:196 AliCorrectionMatrix.cxx:197 AliCorrectionMatrix.cxx:198 AliCorrectionMatrix.cxx:199 AliCorrectionMatrix.cxx:200 AliCorrectionMatrix.cxx:201 AliCorrectionMatrix.cxx:202 AliCorrectionMatrix.cxx:203 AliCorrectionMatrix.cxx:204 AliCorrectionMatrix.cxx:205 AliCorrectionMatrix.cxx:206 AliCorrectionMatrix.cxx:207 AliCorrectionMatrix.cxx:208 AliCorrectionMatrix.cxx:209 AliCorrectionMatrix.cxx:210 AliCorrectionMatrix.cxx:211 AliCorrectionMatrix.cxx:212 AliCorrectionMatrix.cxx:213 AliCorrectionMatrix.cxx:214 AliCorrectionMatrix.cxx:215 AliCorrectionMatrix.cxx:216 AliCorrectionMatrix.cxx:217 AliCorrectionMatrix.cxx:218 AliCorrectionMatrix.cxx:219 AliCorrectionMatrix.cxx:220 AliCorrectionMatrix.cxx:221 AliCorrectionMatrix.cxx:222 AliCorrectionMatrix.cxx:223 AliCorrectionMatrix.cxx:224 AliCorrectionMatrix.cxx:225 AliCorrectionMatrix.cxx:226 AliCorrectionMatrix.cxx:227 AliCorrectionMatrix.cxx:228 AliCorrectionMatrix.cxx:229 AliCorrectionMatrix.cxx:230 AliCorrectionMatrix.cxx:231 AliCorrectionMatrix.cxx:232 AliCorrectionMatrix.cxx:233 AliCorrectionMatrix.cxx:234 AliCorrectionMatrix.cxx:235 AliCorrectionMatrix.cxx:236 AliCorrectionMatrix.cxx:237 AliCorrectionMatrix.cxx:238 AliCorrectionMatrix.cxx:239 AliCorrectionMatrix.cxx:240 AliCorrectionMatrix.cxx:241 AliCorrectionMatrix.cxx:242 AliCorrectionMatrix.cxx:243 AliCorrectionMatrix.cxx:244 AliCorrectionMatrix.cxx:245 AliCorrectionMatrix.cxx:246 AliCorrectionMatrix.cxx:247 AliCorrectionMatrix.cxx:248 AliCorrectionMatrix.cxx:249 AliCorrectionMatrix.cxx:250 AliCorrectionMatrix.cxx:251 AliCorrectionMatrix.cxx:252 AliCorrectionMatrix.cxx:253 AliCorrectionMatrix.cxx:254 AliCorrectionMatrix.cxx:255 AliCorrectionMatrix.cxx:256 AliCorrectionMatrix.cxx:257 AliCorrectionMatrix.cxx:258 AliCorrectionMatrix.cxx:259 AliCorrectionMatrix.cxx:260 AliCorrectionMatrix.cxx:261 AliCorrectionMatrix.cxx:262 AliCorrectionMatrix.cxx:263 AliCorrectionMatrix.cxx:264 AliCorrectionMatrix.cxx:265 AliCorrectionMatrix.cxx:266 AliCorrectionMatrix.cxx:267 AliCorrectionMatrix.cxx:268 AliCorrectionMatrix.cxx:269 AliCorrectionMatrix.cxx:270 AliCorrectionMatrix.cxx:271 AliCorrectionMatrix.cxx:272 AliCorrectionMatrix.cxx:273 AliCorrectionMatrix.cxx:274 AliCorrectionMatrix.cxx:275 AliCorrectionMatrix.cxx:276 AliCorrectionMatrix.cxx:277 AliCorrectionMatrix.cxx:278 AliCorrectionMatrix.cxx:279 AliCorrectionMatrix.cxx:280 AliCorrectionMatrix.cxx:281 AliCorrectionMatrix.cxx:282 AliCorrectionMatrix.cxx:283 AliCorrectionMatrix.cxx:284 AliCorrectionMatrix.cxx:285 AliCorrectionMatrix.cxx:286 AliCorrectionMatrix.cxx:287 AliCorrectionMatrix.cxx:288 AliCorrectionMatrix.cxx:289 AliCorrectionMatrix.cxx:290 AliCorrectionMatrix.cxx:291 AliCorrectionMatrix.cxx:292 AliCorrectionMatrix.cxx:293 AliCorrectionMatrix.cxx:294 AliCorrectionMatrix.cxx:295 AliCorrectionMatrix.cxx:296 AliCorrectionMatrix.cxx:297 AliCorrectionMatrix.cxx:298 AliCorrectionMatrix.cxx:299 AliCorrectionMatrix.cxx:300 AliCorrectionMatrix.cxx:301 AliCorrectionMatrix.cxx:302 AliCorrectionMatrix.cxx:303 AliCorrectionMatrix.cxx:304 AliCorrectionMatrix.cxx:305 AliCorrectionMatrix.cxx:306 AliCorrectionMatrix.cxx:307 AliCorrectionMatrix.cxx:308 AliCorrectionMatrix.cxx:309 AliCorrectionMatrix.cxx:310 AliCorrectionMatrix.cxx:311 AliCorrectionMatrix.cxx:312 AliCorrectionMatrix.cxx:313 AliCorrectionMatrix.cxx:314 AliCorrectionMatrix.cxx:315 AliCorrectionMatrix.cxx:316 AliCorrectionMatrix.cxx:317 AliCorrectionMatrix.cxx:318 AliCorrectionMatrix.cxx:319 AliCorrectionMatrix.cxx:320 AliCorrectionMatrix.cxx:321 AliCorrectionMatrix.cxx:322 AliCorrectionMatrix.cxx:323 AliCorrectionMatrix.cxx:324 AliCorrectionMatrix.cxx:325 AliCorrectionMatrix.cxx:326 AliCorrectionMatrix.cxx:327 AliCorrectionMatrix.cxx:328 AliCorrectionMatrix.cxx:329 AliCorrectionMatrix.cxx:330 AliCorrectionMatrix.cxx:331 AliCorrectionMatrix.cxx:332 AliCorrectionMatrix.cxx:333 AliCorrectionMatrix.cxx:334 AliCorrectionMatrix.cxx:335 AliCorrectionMatrix.cxx:336 AliCorrectionMatrix.cxx:337 AliCorrectionMatrix.cxx:338 AliCorrectionMatrix.cxx:339 AliCorrectionMatrix.cxx:340 AliCorrectionMatrix.cxx:341 AliCorrectionMatrix.cxx:342 AliCorrectionMatrix.cxx:343 AliCorrectionMatrix.cxx:344 AliCorrectionMatrix.cxx:345 AliCorrectionMatrix.cxx:346 AliCorrectionMatrix.cxx:347 AliCorrectionMatrix.cxx:348 AliCorrectionMatrix.cxx:349 AliCorrectionMatrix.cxx:350 AliCorrectionMatrix.cxx:351 AliCorrectionMatrix.cxx:352 AliCorrectionMatrix.cxx:353 AliCorrectionMatrix.cxx:354 AliCorrectionMatrix.cxx:355 AliCorrectionMatrix.cxx:356 AliCorrectionMatrix.cxx:357 AliCorrectionMatrix.cxx:358 AliCorrectionMatrix.cxx:359 AliCorrectionMatrix.cxx:360 AliCorrectionMatrix.cxx:361 AliCorrectionMatrix.cxx:362 AliCorrectionMatrix.cxx:363 AliCorrectionMatrix.cxx:364 AliCorrectionMatrix.cxx:365 AliCorrectionMatrix.cxx:366 AliCorrectionMatrix.cxx:367 AliCorrectionMatrix.cxx:368 AliCorrectionMatrix.cxx:369 AliCorrectionMatrix.cxx:370 AliCorrectionMatrix.cxx:371 AliCorrectionMatrix.cxx:372 AliCorrectionMatrix.cxx:373 AliCorrectionMatrix.cxx:374 AliCorrectionMatrix.cxx:375 AliCorrectionMatrix.cxx:376 AliCorrectionMatrix.cxx:377 AliCorrectionMatrix.cxx:378 AliCorrectionMatrix.cxx:379 AliCorrectionMatrix.cxx:380 AliCorrectionMatrix.cxx:381 AliCorrectionMatrix.cxx:382 AliCorrectionMatrix.cxx:383 AliCorrectionMatrix.cxx:384 AliCorrectionMatrix.cxx:385 AliCorrectionMatrix.cxx:386 AliCorrectionMatrix.cxx:387 AliCorrectionMatrix.cxx:388