proper linking for libHLTrec.so
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALHistoUtilities.cxx
index 76be738..5a5cf02 100644 (file)
@@ -34,6 +34,7 @@
 #include <TFile.h>
 #include <TH1.h>
 #include <TH2.h>
+#include <TProfile.h>
 #include <THnSparse.h>
 #include <TF1.h>
 #include <TGraph.h>
@@ -78,13 +79,17 @@ TList* AliEMCALHistoUtilities::MoveHistsToList(const char* name, Bool_t putToBro
   TList *list = new TList;
   list->SetName(name);
   if(setOwner) list->SetOwner(setOwner);
-  TObject *objHist;
+  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;
 }
@@ -97,10 +102,12 @@ void AliEMCALHistoUtilities::FillH1(TList *l, Int_t ind, Double_t x, Double_t w,
   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);
@@ -114,8 +121,19 @@ void AliEMCALHistoUtilities::FillH2(TList *l, Int_t ind, Double_t x, Double_t y,
   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);
   }
 }
 
@@ -210,6 +228,45 @@ void AliEMCALHistoUtilities::Titles(TH1 *hid, const char *titx,const char *tity)
   }
 }
 
+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