#include <TFile.h>
#include <TH1.h>
#include <TH2.h>
+#include <TProfile.h>
+#include <THnSparse.h>
#include <TF1.h>
#include <TGraph.h>
#include <TGraphErrors.h>
#include <Gtypes.h> // color, line style and so on
#include <TArrayF.h>
-#include "AliESDCaloCluster.h"
-#include "AliEMCALRecPoint.h"
-#include "AliRunLoader.h"
+//#include "AliESDCaloCluster.h"
+//#include "AliEMCALRecPoint.h"
+//#include "AliRunLoader.h"
#include "AliHeader.h"
#include "AliGenEventHeader.h"
#include "AliGenPythiaEventHeader.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;
}
-void AliEMCALHistoUtilities::FillH1(TList *l, Int_t ind, Double_t x, Double_t w)
+void AliEMCALHistoUtilities::FillH1(TList *l, Int_t ind, Double_t x, Double_t w, Double_t error)
{
//fill 1d histogram
static TH1* hid=0;
+ static int bin=0;
if(l == 0) return;
+
if(ind>=0 && ind < l->GetSize()){
- hid = (TH1*)l->At(ind);
- hid->Fill(x,w);
+ hid = dynamic_cast<TH1 *>(l->At(ind));
+ if (hid==0) return;
+
+ if(error <= 0.0) { // standard way
+ hid->Fill(x,w);
+ } 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
TGraphErrors *AliEMCALHistoUtilities::DrawGraphErrors(const Int_t n,Double_t *x,Double_t *y,Double_t *ex,
Double_t *ey, Int_t markerColor, Int_t markerStyle, const char* opt, const char* tit,
-const char* xTit,char* yTit, Int_t ifun, const char *optFit, const char *fun)
+const char* xTit,const char* yTit, Int_t ifun, const char *optFit, const char *fun)
{
// Oct 15, 2007
printf("AliEMCALHistoUtilities::drawGraphErrors started \n");
// chain->Lookup();
}
-AliRunLoader* AliEMCALHistoUtilities::InitKinematics(const Int_t nev, const char* galiceName)
-{
- // Oct 15, 2007
- // nev == 0 - new file
- static AliRunLoader *rl = 0;
-
- if((rl == 0 || nev==0) && galiceName) {
- //printf("<I> AliEMCALHistoUtilities::InitKinematics() : nev %i : rl %p : %s (IN)\n",
- // nev, rl, galiceName);
- if(rl) {
- rl->UnloadgAlice();
- delete rl;
- }
- rl = AliRunLoader::Open(galiceName,AliConfig::GetDefaultEventFolderName(),"read");
- rl->LoadgAlice(); // obligatory
- //printf("<I> AliEMCALHistoUtilities::InitKinematics() : nev %i : rl %p : %s (OUT)\n",
- //nev, rl, galiceName);
- }
- if(rl) {
- rl->GetEvent(nev);
- rl->LoadKinematics();
- /* Get what you need after that
- rl->LoadHits();
- AliStack *stack=rl->Stack();
- AliESDCaloCluster * clus = esd->GetCaloCluster(n);
- Int_t label = clus->GetLabel(); // what is this
- TParticle *primary=stack->Particle(label);
- */
- }
- return rl;
-}
-
-AliRunLoader* AliEMCALHistoUtilities::GetRunLoader(const Int_t nev, const Char_t* galiceName,
- const Char_t* eventFolderName, AliRunLoader* rlOld)
-{
- // Nov 26, 2007
- // nev == 0 - new file
- AliRunLoader *rl = 0;
-
- if(nev==0 && galiceName) {
- printf("<I> AliEMCALHistoUtilities::GetLoader() : nev %i : %s (IN)\n",
- nev, galiceName);
- if(rlOld) {
- rlOld->UnloadgAlice();
- delete rlOld;
- }
- TString folderName(eventFolderName);
- if(folderName.Length() == 0) folderName = AliConfig::GetDefaultEventFolderName();
- rl = AliRunLoader::Open(galiceName, folderName.Data(),"read");
- rl->LoadgAlice(); // obligatory
- printf("<I> AliEMCALHistoUtilities::GetLoader() : nev %i : %s : %s (OUT)\n",
- nev, galiceName, folderName.Data());
- } else {
- rl = rlOld;
- }
- if(rl) rl->LoadgAlice(); // obligatory
- // if(rl) rl->GetEvent(nev);
- return rl;
-}
+//AliRunLoader* AliEMCALHistoUtilities::InitKinematics(const Int_t nev, const char* galiceName)
+//{
+// // Oct 15, 2007
+// // nev == 0 - new file
+// static AliRunLoader *rl = 0;
+//
+// if((rl == 0 || nev==0) && galiceName) {
+// //printf("<I> AliEMCALHistoUtilities::InitKinematics() : nev %i : rl %p : %s (IN)\n",
+// // nev, rl, galiceName);
+// if(rl) {
+// rl->UnloadgAlice();
+// delete rl;
+// }
+// rl = AliRunLoader::Open(galiceName,AliConfig::GetDefaultEventFolderName(),"read");
+// rl->LoadgAlice(); // obligatory
+// //printf("<I> AliEMCALHistoUtilities::InitKinematics() : nev %i : rl %p : %s (OUT)\n",
+// //nev, rl, galiceName);
+// }
+// if(rl) {
+// rl->GetEvent(nev);
+// rl->LoadKinematics();
+// /* Get what you need after that
+// rl->LoadHits();
+// AliStack *stack=rl->Stack();
+// AliESDCaloCluster * clus = esd->GetCaloCluster(n);
+// Int_t label = clus->GetLabel(); // what is this
+// TParticle *primary=stack->Particle(label);
+// */
+// }
+// return rl;
+//}
+
+//AliRunLoader* AliEMCALHistoUtilities::GetRunLoader(const Int_t nev, const Char_t* galiceName,
+// const Char_t* eventFolderName, AliRunLoader* rlOld)
+//{
+// // Nov 26, 2007
+// // nev == 0 - new file
+// AliRunLoader *rl = 0;
+//
+// if(nev==0 && galiceName) {
+// printf("<I> AliEMCALHistoUtilities::GetLoader() : nev %i : %s (IN)\n",
+// nev, galiceName);
+// if(rlOld) {
+// rlOld->UnloadgAlice();
+// delete rlOld;
+// }
+// TString folderName(eventFolderName);
+// if(folderName.Length() == 0) folderName = AliConfig::GetDefaultEventFolderName();
+// rl = AliRunLoader::Open(galiceName, folderName.Data(),"read");
+// rl->LoadgAlice(); // obligatory
+// printf("<I> AliEMCALHistoUtilities::GetLoader() : nev %i : %s : %s (OUT)\n",
+// nev, galiceName, folderName.Data());
+// } else {
+// rl = rlOld;
+// }
+// if(rl) rl->LoadgAlice(); // obligatory
+// // if(rl) rl->GetEvent(nev);
+// return rl;
+//}
Double_t AliEMCALHistoUtilities::GetMomentum(const char* nameListOfFiles)
{
}
// Analysis utilites
-Bool_t AliEMCALHistoUtilities::GetLorentzVectorFromESDCluster(TLorentzVector &v, const AliESDCaloCluster* cl)
-{
- // May 8, 2007
- static Double_t e=0.0;
- static Float_t pos[3];
- static TVector3 gpos;
- if(cl==0) return kFALSE;
-
- e = Double_t(cl->E());
- if(e<=0.0) {
- printf(" negative cluster energy : %f \n", e);
- return kFALSE;
- }
- cl->GetPosition(pos);
- gpos.SetXYZ(Double_t(pos[0]), Double_t(pos[1]), Double_t(pos[2]));
- gpos.SetMag(e);
- v.SetVectM(gpos, 0.0);
-
- return kTRUE;
-}
-
-Bool_t AliEMCALHistoUtilities::GetLorentzVectorFromRecPoint(TLorentzVector &v, const AliEMCALRecPoint *rp)
-{
- // Jun 20, 2007
- static Double_t e=0.0;
- static TVector3 gpos;
- if(rp==0) return kFALSE;
-
- e = Double_t(rp->GetPointEnergy());
- if(e<=0.0) {
- printf(" negative rec.point energy : %f \n", e);
- return kFALSE;
- }
- rp->GetGlobalPosition(gpos);
- gpos.SetMag(e);
- v.SetVectM(gpos, 0.0);
-
- return kTRUE;
-}
+//Bool_t AliEMCALHistoUtilities::GetLorentzVectorFromESDCluster(TLorentzVector &v, const AliESDCaloCluster* cl)
+//{
+// // May 8, 2007
+// static Double_t e=0.0;
+// static Float_t pos[3];
+// static TVector3 gpos;
+// if(cl==0) return kFALSE;
+//
+// e = Double_t(cl->E());
+// if(e<=0.0) {
+// printf(" negative cluster energy : %f \n", e);
+// return kFALSE;
+// }
+// cl->GetPosition(pos);
+// gpos.SetXYZ(Double_t(pos[0]), Double_t(pos[1]), Double_t(pos[2]));
+// gpos.SetMag(e);
+// v.SetVectM(gpos, 0.0);
+//
+// return kTRUE;
+//}
+
+//Bool_t AliEMCALHistoUtilities::GetLorentzVectorFromRecPoint(TLorentzVector &v, const AliEMCALRecPoint *rp)
+//{
+// // Jun 20, 2007
+// static Double_t e=0.0;
+// static TVector3 gpos;
+// if(rp==0) return kFALSE;
+//
+// e = Double_t(rp->GetPointEnergy());
+// if(e<=0.0) {
+// printf(" negative rec.point energy : %f \n", e);
+// return kFALSE;
+// }
+// rp->GetGlobalPosition(gpos);
+// gpos.SetMag(e);
+// v.SetVectM(gpos, 0.0);
+//
+// return kTRUE;
+//}
//
//// Drawing:
//
return MoveHistsToList("JetLiOfHists", toBrowser);
}
-void AliEMCALHistoUtilities::FillJetKineListOfHists(TList *l, AliRunLoader* rl, TLorentzVector &goodJet)
-{
- // Oct 30, 2007; Nov 07;
- // goodJet - output; only one jet with EMCAL acceptance
-
- // Bad case
- goodJet.SetPxPyPzE(0., 0., 0., 0.);
-
- if(l==0 || rl==0) return;
- //try to get trigger jet info
- AliHeader* alih = rl->GetHeader();
- if (alih == 0) return;
-
- AliGenEventHeader * genh = alih->GenEventHeader();
- if (genh == 0) return;
-
- AliGenPythiaEventHeader* genhpy = dynamic_cast<AliGenPythiaEventHeader *>(genh);
- if(genhpy==0) return; // Not Pythia
-
- Int_t nj = genhpy->NTriggerJets();
- FillH1(l, 0, double(nj));
-
- TLorentzVector* jets[4];
- nj = nj>4?4:nj;
-
- int ic=1;
- for (Int_t i=0; i< nj; i++) {
- Float_t p[4];
- genhpy->TriggerJet(i,p);
- jets[i] = new TLorentzVector(p);
- FillH1(l, ic++, jets[i]->Eta());
- FillH1(l, ic++, jets[i]->Theta()*TMath::RadToDeg());
- FillH1(l, ic++, TVector2::Phi_0_2pi(jets[i]->Phi())*TMath::RadToDeg());
- FillH1(l, ic++, jets[i]->Pt());
- FillH1(l, ic++, jets[i]->E());
-
- //printf(" %i pj %f %f %f %f : ic %i\n", i, p[0], p[1], p[2], p[3], ic);
- if(ic >= l->GetSize()) break;
- }
- if(nj==1) {
- Double_t eta=jets[0]->Eta(), phi=TVector2::Phi_0_2pi(jets[0]->Phi())*TMath::RadToDeg();
- if(TMath::Abs(eta)<0.5 && (phi>90.&&phi<180.)) {
- goodJet = (*jets[0]);
- }
- }
-}
+//void AliEMCALHistoUtilities::FillJetKineListOfHists(TList *l, AliRunLoader* rl, TLorentzVector &goodJet)
+//{
+// // Oct 30, 2007; Nov 07;
+// // goodJet - output; only one jet with EMCAL acceptance
+//
+// // Bad case
+// goodJet.SetPxPyPzE(0., 0., 0., 0.);
+//
+// if(l==0 || rl==0) return;
+// //try to get trigger jet info
+// AliHeader* alih = rl->GetHeader();
+// if (alih == 0) return;
+//
+// AliGenEventHeader * genh = alih->GenEventHeader();
+// if (genh == 0) return;
+//
+// AliGenPythiaEventHeader* genhpy = dynamic_cast<AliGenPythiaEventHeader *>(genh);
+// if(genhpy==0) return; // Not Pythia
+//
+// Int_t nj = genhpy->NTriggerJets();
+// FillH1(l, 0, double(nj));
+//
+// TLorentzVector* jets[4];
+// nj = nj>4?4:nj;
+//
+// int ic=1;
+// for (Int_t i=0; i< nj; i++) {
+// Float_t p[4];
+// genhpy->TriggerJet(i,p);
+// jets[i] = new TLorentzVector(p);
+// FillH1(l, ic++, jets[i]->Eta());
+// FillH1(l, ic++, jets[i]->Theta()*TMath::RadToDeg());
+// FillH1(l, ic++, TVector2::Phi_0_2pi(jets[i]->Phi())*TMath::RadToDeg());
+// FillH1(l, ic++, jets[i]->Pt());
+// FillH1(l, ic++, jets[i]->E());
+//
+// //printf(" %i pj %f %f %f %f : ic %i\n", i, p[0], p[1], p[2], p[3], ic);
+// if(ic >= l->GetSize()) break;
+// }
+// if(nj==1) {
+// Double_t eta=jets[0]->Eta(), phi=TVector2::Phi_0_2pi(jets[0]->Phi())*TMath::RadToDeg();
+// if(TMath::Abs(eta)<0.5 && (phi>90.&&phi<180.)) {
+// goodJet = (*jets[0]);
+// }
+// }
+//}