25 #include <THnSparse.h>
26 #include <THashList.h>
27 #include <TObjArray.h>
28 #include <TObjString.h>
47 TNamed(name, Form(
"Histogram container %s", name)),
52 fHistos->SetName(Form(
"histos%s", name));
61 THashList *parentgroup =
FindGroup(parent);
63 Fatal(
"THistManager::CreateHistoGroup",
"Parent group %s does not exist", parent);
66 THashList *childgroup =
new THashList();
67 childgroup->SetName(groupname);
68 parentgroup->Add(childgroup);
74 THashList *parent(
FindGroup(dirname.Data()));
76 Fatal(
"THistManager::CreateTH1",
"Parent %s does not exist", dirname.Data());
79 if(parent->FindObject(hname.Data())){
80 Fatal(
"THistManager::CreateTH1",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
85 optionstring.ToLower();
86 if(optionstring.Contains(
"s"))
96 Fatal(
"THistManager::CreateTH1",
"Parent %s does not exist", dirname.Data());
99 if(parent->FindObject(hname.Data())){
100 Fatal(
"THistManager::CreateTH1",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
105 optionstring.ToLower();
106 if(optionstring.Contains(
"s"))
116 Fatal(
"THistManager::CreateTH1",
"Parent %s does not exist", dirname.Data());
119 if(parent->FindObject(hname.Data())){
120 Fatal(
"THistManager::CreateTH1",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
123 TH1* h =
new TH1D(hname.Data(),
title, xbins.GetSize()-1, xbins.GetArray());
125 optionstring.ToLower();
126 if(optionstring.Contains(
"s"))
136 }
catch(std::exception &e){
137 Fatal(
"THistManager::CreateTH1",
"Exception raised: %s", e.what());
139 return CreateTH1(name, title, myxbins, opt);
144 THashList *parent(
FindGroup(dirname.Data()));
146 Fatal(
"THistManager::CreateTH2",
"Parent %s does not exist", dirname.Data());
149 if(parent->FindObject(hname.Data())){
150 Fatal(
"THistManager::CreateTH2",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
155 optionstring.ToLower();
156 if(optionstring.Contains(
"s"))
164 THashList *parent(
FindGroup(dirname.Data()));
166 Fatal(
"THistManager::CreateTH2",
"Parent %s does not exist", dirname.Data());
169 if(parent->FindObject(hname.Data())){
170 Fatal(
"THistManager::CreateTH2",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
175 optionstring.ToLower();
176 if(optionstring.Contains(
"s"))
184 THashList *parent(
FindGroup(dirname.Data()));
186 Fatal(
"THistManager::CreateTH2",
"Parent %s does not exist", dirname.Data());
189 if(parent->FindObject(hname.Data())){
190 Fatal(
"THistManager::CreateTH2",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
193 TH2* h =
new TH2D(hname.Data(),
title, xbins.GetSize() - 1, xbins.GetArray(), ybins.GetSize() - 1, ybins.GetArray());
195 optionstring.ToLower();
196 if(optionstring.Contains(
"s"))
206 }
catch (std::exception &e) {
207 Fatal(
"THistManager::CreateTH2 (x-dir)",
"Exception raised: %s", e.what());
211 }
catch (std::exception &e) {
212 Fatal(
"THistManager::CreateTH2 (y-dir)",
"Exception raised: %s", e.what());
215 return CreateTH2(name, title, myxbins, myybins, opt);
218 TH3*
THistManager::CreateTH3(
const char* name,
const char*
title,
int nbinsx,
double xmin,
double xmax,
int nbinsy,
double ymin,
double ymax,
int nbinsz,
double zmin,
double zmax,
Option_t *opt) {
220 THashList *parent(
FindGroup(dirname.Data()));
222 Fatal(
"THistManager::CreateTH3",
"Parent %s does not exist", dirname.Data());
225 if(parent->FindObject(hname.Data())){
226 Fatal(
"THistManager::CreateTH3",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
229 TH3* h =
new TH3D(hname.Data(),
title,
nbinsx, xmin, xmax,
nbinsy,
ymin,
ymax, nbinsz,
zmin,
zmax);
231 optionstring.ToLower();
232 if(optionstring.Contains(
"s"))
240 THashList *parent(
FindGroup(dirname.Data()));
242 Fatal(
"THistManager::CreateTH3",
"Parent %s does not exist", dirname.Data());
245 if(parent->FindObject(hname.Data())){
246 Fatal(
"THistManager::CreateTH3",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
251 optionstring.ToLower();
252 if(optionstring.Contains(
"s"))
260 THashList *parent(
FindGroup(dirname.Data()));
262 Fatal(
"THistManager::CreateTH3",
"Parent %s does not exist", dirname.Data());
265 if(parent->FindObject(hname.Data())){
266 Fatal(
"THistManager::CreateTH3",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
269 TH3* h =
new TH3D(hname.Data(),
title, xbins.GetSize()-1, xbins.GetArray(), ybins.GetSize()-1, ybins.GetArray(), zbins.GetSize()-1, zbins.GetArray());
271 optionstring.ToLower();
272 if(optionstring.Contains(
"s"))
279 TArrayD myxbins, myybins, myzbins;
282 }
catch (std::exception &e) {
283 Fatal(
"THistManager::CreateTH2 (x-dir)",
"Exception raised: %s", e.what());
287 }
catch (std::exception &e) {
288 Fatal(
"THistManager::CreateTH2 (y-dir)",
"Exception raised: %s", e.what());
292 }
catch (std::exception &e) {
293 Fatal(
"THistManager::CreateTH2 (z-dir)",
"Exception raised: %s", e.what());
296 return CreateTH3(name, title, myxbins, myybins, myzbins);
301 THashList *parent(
FindGroup(dirname.Data()));
303 Fatal(
"THistManager::CreateTHnSparse",
"Parent %s does not exist", dirname.Data());
306 if(parent->FindObject(hname.Data())){
307 Fatal(
"THistManager::CreateTHnSparse",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
310 THnSparse* h =
new THnSparseD(hname.Data(),
title, ndim,
nbins, min, max);
312 optionstring.ToLower();
313 if(optionstring.Contains(
"s"))
321 THashList *parent(
FindGroup(dirname.Data()));
323 Fatal(
"THistManager::CreateTHnSparse",
"Parent %s does not exist", dirname.Data());
326 if(parent->FindObject(hname)){
327 Fatal(
"THistManager::CreateTHnSparse",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
330 TArrayD xmin(ndim), xmax(ndim);
332 for(
int idim = 0; idim < ndim; ++idim){
333 const TAxis &myaxis = *(axes[idim]);
334 nbins[idim] = myaxis.GetNbins();
335 xmin[idim] = myaxis.GetXmin();
336 xmax[idim] = myaxis.GetXmax();
338 THnSparseD *hsparse =
new THnSparseD(hname.Data(),
title, ndim, nbins.GetArray(), xmin.GetArray(), xmax.GetArray());
339 for(
int id = 0;
id < ndim; ++id)
340 *(hsparse->GetAxis(
id)) = *(axes[
id]);
342 optionstring.ToLower();
343 if(optionstring.Contains(
"s"))
345 parent->Add(hsparse);
353 Fatal(
"THistManager::CreateTProfile",
"Parent %s does not exist", dirname.Data());
354 if(parent->FindObject(hname.Data()))
355 Fatal(
"THistManager::CreateTProfile",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
356 TProfile *hist =
new TProfile(hname.Data(),
title, nbinsX, xmin, xmax, opt);
364 Fatal(
"THistManager::CreateTHnSparse",
"Parent %s does not exist", dirname.Data());
365 if(parent->FindObject(hname.Data()))
366 Fatal(
"THistManager::CreateTHnSparse",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
367 TProfile *hist =
new TProfile(hname.Data(),
title, nbinsX, xbins, opt);
375 Fatal(
"THistManager::CreateTHnSparse",
"Parent %s does not exist", dirname.Data());
376 if(parent->FindObject(hname.Data()))
377 Fatal(
"THistManager::CreateTHnSparse",
"Object %s already exists in group %s", hname.Data(), dirname.Data());
378 TProfile *hist =
new TProfile(hname.Data(),
title, xbins.GetSize()-1, xbins.GetArray(), opt);
386 }
catch (std::exception &e){
387 Fatal(
"THistManager::CreateProfile",
"Exception raised: %s", e.what());
395 Fatal(
"THistManager::SetObject",
"Parent %s does not exist", strcmp(group,
"/") ? group :
"");
398 if(parent->FindObject(o->GetName())){
399 Fatal(
"THistManager::SetObject",
"Parent %s does not exist", strcmp(group,
"/") ? group :
"");
402 if(!(dynamic_cast<THnBase *>(o) || dynamic_cast<TH1 *>(o))){
403 Fatal(
"THistManager::SetObject",
"Object %s is not of a histogram type",o->GetName());
411 THashList *parent(
FindGroup(dirname.Data()));
413 Fatal(
"THistManager::FillTH1",
"Parnt group %s does not exist", dirname.Data());
416 TH1 *hist =
dynamic_cast<TH1 *
>(parent->FindObject(hname.Data()));
418 Fatal(
"THistManager::FillTH1",
"Histogram %s not found in parent group %s", hname.Data(), dirname.Data());
422 if(optionstring.Contains(
"w")){
424 Int_t bin = hist->GetXaxis()->FindBin(x);
426 if(bin != 0 && bin != hist->GetXaxis()->GetNbins())
427 weight = 1./hist->GetXaxis()->GetBinWidth(bin);
429 hist->Fill(x, weight);
434 THashList *parent(
FindGroup(dirname.Data()));
436 Fatal(
"THistManager::FillTH1",
"Parnt group %s does not exist", dirname.Data());
439 TH1 *hist =
dynamic_cast<TH1 *
>(parent->FindObject(hname.Data()));
441 Fatal(
"THistManager::FillTH1",
"Histogram %s not found in parent group %s", hname.Data(), dirname.Data());
445 if(optionstring.Contains(
"w")){
448 Int_t bin = hist->GetXaxis()->FindBin(label);
450 if(bin != 0 && bin != hist->GetXaxis()->GetNbins())
451 weight = 1./hist->GetXaxis()->GetBinWidth(bin);
453 hist->Fill(label, weight);
458 THashList *parent(
FindGroup(dirname.Data()));
460 Fatal(
"THistManager::FillTH2",
"Parent group %s does not exist", dirname.Data());
463 TH2 *hist =
dynamic_cast<TH2 *
>(parent->FindObject(hname.Data()));
465 Fatal(
"THistManager::FillTH2",
"Histogram %s not found in parent group %s", hname.Data(), dirname.Data());
469 Double_t myweight = optstring.Contains(
"w") ? 1. : weight;
470 if(optstring.Contains(
"wx")){
471 Int_t binx = hist->GetXaxis()->FindBin(x);
472 if(binx != 0 && binx != hist->GetXaxis()->GetNbins()) myweight *= 1./hist->GetXaxis()->GetBinWidth(binx);
474 if(optstring.Contains(
"wy")){
475 Int_t biny = hist->GetYaxis()->FindBin(y);
476 if(biny != 0 && biny != hist->GetYaxis()->GetNbins()) myweight *= 1./hist->GetYaxis()->GetBinWidth(biny);
478 hist->Fill(x, y, myweight);
483 THashList *parent(
FindGroup(dirname.Data()));
485 Fatal(
"THistManager::FillTH2",
"Parent group %s does not exist", dirname.Data());
488 TH2 *hist =
dynamic_cast<TH2 *
>(parent->FindObject(hname.Data()));
490 Fatal(
"THistManager::FillTH2",
"Histogram %s not found in parent group %s", hname.Data(), dirname.Data());
494 Double_t myweight = optstring.Contains(
"w") ? 1. : weight;
495 if(optstring.Contains(
"wx")){
496 Int_t binx = hist->GetXaxis()->FindBin(point[0]);
497 if(binx != 0 && binx != hist->GetXaxis()->GetNbins()) myweight *= 1./hist->GetXaxis()->GetBinWidth(binx);
499 if(optstring.Contains(
"wy")){
500 Int_t biny = hist->GetYaxis()->FindBin(point[1]);
501 if(biny != 0 && biny != hist->GetYaxis()->GetNbins()) myweight *= 1./hist->GetYaxis()->GetBinWidth(biny);
503 hist->Fill(point[0], point[1], weight);
508 THashList *parent(
FindGroup(dirname.Data()));
510 Fatal(
"THistManager::FillTH3",
"Parent group %s does not exist", dirname.Data());
513 TH3 *hist =
dynamic_cast<TH3 *
>(parent->FindObject(hname.Data()));
515 Fatal(
"THistManager::FillTH3",
"Histogram %s not found in parent group %s", hname.Data(), dirname.Data());
519 Double_t myweight = optstring.Contains(
"w") ? 1. : weight;
520 if(optstring.Contains(
"wx")){
521 Int_t binx = hist->GetXaxis()->FindBin(x);
522 if(binx != 0 && binx != hist->GetXaxis()->GetNbins()) myweight *= 1./hist->GetXaxis()->GetBinWidth(binx);
524 if(optstring.Contains(
"wy")){
525 Int_t biny = hist->GetYaxis()->FindBin(y);
526 if(biny != 0 && biny != hist->GetYaxis()->GetNbins()) myweight *= 1./hist->GetYaxis()->GetBinWidth(biny);
528 if(optstring.Contains(
"wz")){
529 Int_t binz = hist->GetZaxis()->FindBin(z);
530 if(binz != 0 && binz != hist->GetZaxis()->GetNbins()) myweight *= 1./hist->GetZaxis()->GetBinWidth(binz);
532 hist->Fill(x, y, z, weight);
537 THashList *parent(
FindGroup(dirname.Data()));
539 Fatal(
"THistManager::FillTH3",
"Parent group %s does not exist", dirname.Data());
542 TH3 *hist =
dynamic_cast<TH3 *
>(parent->FindObject(hname.Data()));
544 Fatal(
"THistManager::FillTH3",
"Histogram %s not found in parent group %s", hname.Data(), dirname.Data());
548 Double_t myweight = optstring.Contains(
"w") ? 1. : weight;
549 if(optstring.Contains(
"wx")){
550 Int_t binx = hist->GetXaxis()->FindBin(point[0]);
551 if(binx != 0 && binx != hist->GetXaxis()->GetNbins()) myweight *= 1./hist->GetXaxis()->GetBinWidth(binx);
553 if(optstring.Contains(
"wy")){
554 Int_t biny = hist->GetYaxis()->FindBin(point[1]);
555 if(biny != 0 && biny != hist->GetYaxis()->GetNbins()) myweight *= 1./hist->GetYaxis()->GetBinWidth(biny);
557 if(optstring.Contains(
"wz")){
558 Int_t binz = hist->GetZaxis()->FindBin(point[2]);
559 if(binz != 0 && binz != hist->GetZaxis()->GetNbins()) myweight *= 1./hist->GetZaxis()->GetBinWidth(binz);
561 hist->Fill(point[0], point[1], point[2], weight);
566 THashList *parent(
FindGroup(dirname.Data()));
568 Fatal(
"THistManager::FillTHnSparse",
"Parent group %s does not exist", dirname.Data());
571 THnSparseD *hist =
dynamic_cast<THnSparseD *
>(parent->FindObject(hname.Data()));
573 Fatal(
"THistManager::FillTHnSparse",
"Histogram %s not found in parent group %s", hname.Data(), dirname.Data());
577 Double_t myweight = optstring.Contains(
"w") ? 1. : weight;
578 for(
Int_t iaxis = 0; iaxis < hist->GetNdimensions(); iaxis++){
579 std::stringstream weighthandler;
580 weighthandler <<
"w" << iaxis;
581 if(optstring.Contains(weighthandler.str().c_str())){
582 Int_t bin = hist->GetAxis(iaxis)->FindBin(x[iaxis]);
583 if(bin != 0 && bin != hist->GetAxis(iaxis)->GetNbins()) myweight *= hist->GetAxis(iaxis)->GetBinWidth(bin);
587 hist->Fill(x, weight);
592 THashList *parent(
FindGroup(dirname.Data()));
594 Fatal(
"THistManager::FillTProfile",
"Parent group %s does not exist", dirname.Data());
595 TProfile *hist =
dynamic_cast<TProfile *
>(parent->FindObject(hname.Data()));
597 Fatal(
"THistManager::FillTProfile",
"Histogram %s not found in parent group %s", hname.Data(), dirname.Data());
598 hist->Fill(x, y, weight);
603 THashList *parent(
FindGroup(dirname.Data()));
604 if(!parent)
return NULL;
605 return parent->FindObject(hname);
610 THashList *parent(
FindGroup(dirname.Data()));
611 if(!parent)
return NULL;
612 return parent->FindObject(hname);
616 if(!strlen(dirname) || !strcmp(dirname,
"/"))
return fHistos;
617 std::vector<std::string> tokens;
619 THashList *currentdir(
fHistos);
620 for(std::vector<std::string>::iterator it = tokens.begin(); it != tokens.end(); ++it){
621 currentdir =
dynamic_cast<THashList *
>(currentdir->FindObject(it->c_str()));
622 if(!currentdir)
break;
630 TObjString *ostr(NULL);
632 while((ostr = dynamic_cast<TObjString *>(toks()))){
633 listoftokens.push_back(std::string(ostr->String().Data()));
640 int index = s.Last(
'/');
641 if(index < 0)
return "";
642 return TString(s(0, index)).Data();
647 int index = s.Last(
'/');
648 if(index < 0)
return path;
649 return TString(s(index+1, s.Length() - (index+1))).
Data();
666 fkArray(ref.fkArray),
667 fCurrentPos(ref.fCurrentPos),
669 fDirection(ref.fDirection)
687 if(fDirection == kTHMIforward)
701 if(fDirection == kTHMIforward)
716 return fkArray->GetListOfHistograms()->At(fCurrentPos);
iterator & operator=(const iterator &rhs)
bool fIsOwner
Set the ownership.
THashList * FindGroup(const char *dirname) const
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
void FillTH3(const char *hname, double x, double y, double z, double weight=1., Option_t *opt="")
virtual void CreateBinEdges(TArrayD &binedges) const =0
void TokenizeFilename(const char *name, const char *delim, std::vector< std::string > &listoftokens) const
const THistManager * fkArray
void SetObject(TObject *const o, const char *group="/")
Interface for binnings used by the histogram handler.
THMIDirection_t fDirection
TString histname(const char *path) const
THashList * CreateHistoGroup(const char *groupname, const char *parent="/")
Bool_t operator!=(const iterator &aIter) const
void FillTHnSparse(const char *name, const double *x, double weight=1., Option_t *opt="")
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
TObject * FindObject(const char *name) const
void CreateTProfile(const char *name, const char *title, int nbinsX, double xmin, double xmax, Option_t *opt="")
THashList * GetListOfHistograms() const
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
void FillProfile(const char *name, double x, double y, double weight=1.)
THMIDirection_t
Direction for the iteration.
TString basename(const char *path) const
stl-iterator for the histogram manager
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
TObject * operator*() const
Container class for histograms for the high- charged particle analysis.
THnSparse * CreateTHnSparse(const char *name, const char *title, int ndim, const int *nbins, const double *min, const double *max, Option_t *opt="")
THashList * fHistos
List of histograms.
TH3 * CreateTH3(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, int nbinsz, double zmin, double zmax, Option_t *opt="")