#include <TFile.h>
#include <TH1.h>
#include <TH2.h>
+#include <TProfile.h>
+#include <THnSparse.h>
#include <TF1.h>
#include <TGraph.h>
#include <TGraphErrors.h>
//destructor
}
-TList* AliEMCALHistoUtilities::MoveHistsToList(const char* name, Bool_t putToBrowser)
+TList* AliEMCALHistoUtilities::MoveHistsToList(const char* name, Bool_t putToBrowser, Bool_t setOwner)
{
// Move HIST to list
gROOT->cd();
TIter nextHist(gDirectory->GetList());
TList *list = new TList;
list->SetName(name);
- TObject *objHist;
+ if(setOwner) list->SetOwner(setOwner);
+ TObject *objHist=0;
+ // Move from gROOT to list
while((objHist=nextHist())){
+ //objHist->Dump();
if (!objHist->InheritsFrom("TH1")) continue;
- ((TH1*)objHist)->SetDirectory(0); // Remove from gROOT
+ ((TH1*)objHist)->SetDirectory(0);
list->Add(objHist);
- gDirectory->GetList()->Remove(objHist);
}
+ // Clear gROOT
+ gDirectory->GetList()->Clear();
+
if(putToBrowser) gROOT->GetListOfBrowsables()->Add((TObject*)list);
return list;
}
if(l == 0) return;
if(ind>=0 && ind < l->GetSize()){
- hid = (TH1*)l->At(ind);
+ hid = dynamic_cast<TH1 *>(l->At(ind));
+ if (hid==0) return;
+
if(error <= 0.0) { // standard way
hid->Fill(x,w);
- } else{
+ } else {
bin = hid->FindBin(x);
hid->SetBinContent(bin,w);
hid->SetBinError(bin,error);
static TH2* hid=0;
if(l == 0) return;
if(ind>=0 && ind < l->GetSize()){
- hid = (TH2*)l->At(ind);
- hid->Fill(x,y,w);
+ hid = dynamic_cast<TH2 *>(l->At(ind));
+ if(hid) hid->Fill(x,y,w);
+ }
+}
+
+void AliEMCALHistoUtilities::FillHProf(TList *l, Int_t ind, Double_t x, Double_t y, Double_t w)
+{
+ // fill profile histogram
+ static TProfile* h=0;
+ if(l == 0) return;
+ if(ind>=0 && ind < l->GetSize()){
+ h = dynamic_cast<TProfile *>(l->At(ind));
+ if(h>0) h->Fill(x,y,w);
+ }
+}
+
+void AliEMCALHistoUtilities:: FillHnSparse(TList *l, Int_t ind, Double_t* x, Double_t w)
+{
+ // Nov 02,2010: fill THnSparse hist
+ static THnSparse* hsp=0;
+ if(l==0 || x==0) return;
+ if(ind>=0 && ind < l->GetSize()){
+ hsp = dynamic_cast<THnSparse *>(l->At(ind));
+ if(hsp) hsp->Fill(x,w);
}
}
return save;
}
-void AliEMCALHistoUtilities::AddToNameAndTitle(TH1 *h, const char *name, const char *title)
+void AliEMCALHistoUtilities::AddToNameAndTitle(TNamed *h, const char *name, const char *title)
{
// Oct 15, 2007
if(h==0) return;
if(name || title) {
for(int i=0; i<l->GetSize(); i++) {
TObject *o = l->At(i);
- if(o->InheritsFrom("TH1")) {
- TH1 *h = (TH1*)o;
+ if(o->InheritsFrom("TNamed")) {
+ TNamed *h = dynamic_cast<TNamed *>(o);
AddToNameAndTitle(h, name, title);
}
}
}
}
+void AliEMCALHistoUtilities::Titles(TH1 *hid, const char *titx,const char *tity)
+{
+ if(hid) {
+ hid->SetXTitle(titx);
+ hid->SetYTitle(tity);
+ } else {
+ printf("<W> TAliasPAI::titles() -> hid is 0 !\n");
+ }
+}
+
+TList* AliEMCALHistoUtilities::CreateProjectionsX(TList *l, const Int_t ind, const Char_t* name)
+{
+ // Sep 4 - seperate list for projections
+ TH2F *hid = dynamic_cast<TH2F *>(l->At(ind));
+ if(hid == 0) {
+ printf("<E> Object at ind %i is %s : should ne TH2F \n",
+ ind, l->At(ind)->ClassName());
+ return 0;
+ }
+
+ TList *lpt = new TList;
+ lpt->SetName(Form("%s%s", hid->GetName(), name));
+ l->Add(lpt);
+
+ TAxis* yax = hid->GetYaxis();
+ TString tity = yax->GetTitle();
+ tity.ReplaceAll(" ","");
+ TString name1 = hid->GetName();
+ TString nam = name1(3,name1.Length()-3);
+ TString tit1 = hid->GetTitle(), tit=tit1;
+
+ TH1::AddDirectory(0);
+
+ TH1D *hd = hid->ProjectionX(Form("00_%sProx",nam.Data()), 1, yax->GetNbins());
+ tit += Form(" : %5.2f < %s < %5.2f (GeV/c)", yax->GetXmin(),tity.Data(),yax->GetXmax());
+ hd->SetTitle(tit.Data());
+ lpt->Add(hd);
+
+ for(Int_t iy=1; iy<=yax->GetNbins(); iy++){
+ tit = tit1;
+ tit += Form(" : %5.2f < %s < %5.2f (GeV/c)", yax->GetBinLowEdge(iy), tity.Data(), yax->GetBinUpEdge(iy));
+ hd = hid->ProjectionX(Form("%2.2i_%sProx%i",iy, nam.Data(),iy),iy,iy);
+ hd->SetTitle(tit.Data());
+ lpt->Add(hd);
+ }
+
+ return lpt;
+}
+
TLatex *AliEMCALHistoUtilities::Lat(const char *text, Float_t x,Float_t y, Int_t align, Float_t tsize, short tcolor)
{
// Oct 15, 2007