updated drawplots macro
authorjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 26 Jun 2006 09:12:02 +0000 (09:12 +0000)
committerjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 26 Jun 2006 09:12:02 +0000 (09:12 +0000)
checks if header or kinematics file is corruped in AliSelectorRL
new macro to test AliSelector

PWG0/AliPWG0Helper.cxx
PWG0/AliPWG0Helper.h
PWG0/AliSelector.cxx
PWG0/AliSelectorRL.cxx
PWG0/AliSelectorRL.h
PWG0/dNdEta/dNdEtaAnalysis.cxx
PWG0/dNdEta/drawPlots.C
PWG0/testAliSelector.C [new file with mode: 0644]

index 9d02715..655cd45 100644 (file)
@@ -5,7 +5,7 @@
 #include <TParticle.h>
 #include <TParticlePDG.h>
 #include <TH1.h>
-#include <TH3F.h>
+#include <TH3.h>
 
 #include <AliLog.h>
 #include <AliESD.h>
@@ -55,17 +55,20 @@ Bool_t AliPWG0Helper::IsVertexReconstructed(AliESD* aEsd)
 }
 
 //____________________________________________________________________
-Bool_t AliPWG0Helper::IsPrimaryCharged(TParticle* aParticle, Int_t aTotalPrimaries)
+Bool_t AliPWG0Helper::IsPrimaryCharged(TParticle* aParticle, Int_t aTotalPrimaries, Bool_t debug)
 {
   //
-  // Returns if the given particle is a primary particle
+  // this function checks if a particle from the event generator (i.e. among the nPrim particles in the stack)
+  // shall be counted as a primary particle
+  //
   // This function or a equivalent should be available in some common place of AliRoot
   //
 
   // if the particle has a daughter primary, we do not want to count it
   if (aParticle->GetFirstDaughter() != -1 && aParticle->GetFirstDaughter() < aTotalPrimaries)
   {
-    //AliDebug(AliLog::kDebug+1, "Dropping particle because it has a daughter among the primaries.");
+    if (debug)
+      printf("Dropping particle because it has a daughter among the primaries.\n");
     return kFALSE;
   }
 
@@ -74,13 +77,15 @@ Bool_t AliPWG0Helper::IsPrimaryCharged(TParticle* aParticle, Int_t aTotalPrimari
   // skip quarks and gluon
   if (pdgCode <= 10 || pdgCode == 21)
   {
-    //AliDebug(AliLog::kDebug+1, "Dropping particle because it is a quark or gluon.");
+    if (debug)
+      printf("Dropping particle because it is a quark or gluon.\n");
     return kFALSE;
   }
 
   if (strcmp(aParticle->GetName(),"XXX") == 0)
   {
-    //AliDebug(AliLog::kDebug, Form("WARNING: There is a particle named XXX."));
+    if (debug)
+      printf("WARNING: There is a particle named XXX.\n");
     return kFALSE;
   }
 
@@ -88,13 +93,15 @@ Bool_t AliPWG0Helper::IsPrimaryCharged(TParticle* aParticle, Int_t aTotalPrimari
 
   if (strcmp(pdgPart->ParticleClass(),"Unknown") == 0)
   {
-    //AliDebug(AliLog::kDebug, Form("WARNING: There is a particle with an unknown particle class (pdg code %d).", pdgCode));
+    if (debug)
+      printf("WARNING: There is a particle with an unknown particle class (pdg code %d).\n", pdgCode);
     return kFALSE;
   }
 
   if (pdgPart->Charge() == 0)
   {
-    //AliDebug(AliLog::kDebug+1, "Dropping particle because it is not charged.");
+    if (debug)
+      printf("Dropping particle because it is not charged.\n");
     return kFALSE;
   }
 
@@ -102,7 +109,7 @@ Bool_t AliPWG0Helper::IsPrimaryCharged(TParticle* aParticle, Int_t aTotalPrimari
 }
 
 //____________________________________________________________________
-void AliPWG0Helper::CreateProjections(TH3F* hist)
+void AliPWG0Helper::CreateProjections(TH3* hist)
 {
   // create projections of 3d hists to all 2d combinations
   // the histograms are not returned, just use them from memory or use this to create them in a file
@@ -121,7 +128,7 @@ void AliPWG0Helper::CreateProjections(TH3F* hist)
 }
 
 //____________________________________________________________________
-void AliPWG0Helper::CreateDividedProjections(TH3F* hist, TH3F* hist2, const char* axis)
+void AliPWG0Helper::CreateDividedProjections(TH3* hist, TH3* hist2, const char* axis)
 {
   // create projections of the 3d hists divides them
   // axis decides to which plane, if axis is 0 to all planes
@@ -137,19 +144,19 @@ void AliPWG0Helper::CreateDividedProjections(TH3F* hist, TH3F* hist2, const char
   }
 
   TH1* proj = hist->Project3D(axis);
-  proj->SetXTitle(GetAxisTitle(hist, axis[0]));
-  proj->SetYTitle(GetAxisTitle(hist, axis[1]));
+  proj->SetYTitle(GetAxisTitle(hist, axis[0]));
+  proj->SetXTitle(GetAxisTitle(hist, axis[1]));
 
   TH1* proj2 = hist2->Project3D(axis);
-  proj2->SetXTitle(GetAxisTitle(hist2, axis[0]));
-  proj2->SetYTitle(GetAxisTitle(hist2, axis[1]));
+  proj2->SetYTitle(GetAxisTitle(hist2, axis[0]));
+  proj2->SetXTitle(GetAxisTitle(hist2, axis[1]));
 
   TH1* division = dynamic_cast<TH1*> (proj->Clone(Form("%s_div_%s", proj->GetName(), proj2->GetName())));
   division->Divide(proj2);
 }
 
 //____________________________________________________________________
-const char* AliPWG0Helper::GetAxisTitle(TH3F* hist, const char axis)
+const char* AliPWG0Helper::GetAxisTitle(TH3* hist, const char axis)
 {
   // returns the title of the axis given in axis (x, y, z)
 
index d558db7..a897e7b 100644 (file)
@@ -9,18 +9,18 @@
 
 class AliESD;
 class TParticle;
-class TH3F;
+class TH3;
 
 class AliPWG0Helper : public TObject
 {
   public:
     static Bool_t IsEventTriggered(AliESD* aEsd);
     static Bool_t IsVertexReconstructed(AliESD* aEsd);
-    static Bool_t IsPrimaryCharged(TParticle* aParticle, Int_t aTotalPrimaries);
+    static Bool_t IsPrimaryCharged(TParticle* aParticle, Int_t aTotalPrimaries, Bool_t debug = kFALSE);
 
-    static void CreateProjections(TH3F* hist);
-    static void CreateDividedProjections(TH3F* hist, TH3F* hist2, const char* axis = 0);
-    static const char* GetAxisTitle(TH3F* hist, const char axis);
+    static void CreateProjections(TH3* hist);
+    static void CreateDividedProjections(TH3* hist, TH3* hist2, const char* axis = 0);
+    static const char* GetAxisTitle(TH3* hist, const char axis);
     
   protected:
     ClassDef(AliPWG0Helper, 0)
index 7575b75..e6119da 100644 (file)
@@ -70,6 +70,8 @@ void AliSelector::Begin(TTree*)
   // The Begin() function is called at the start of the query.
   // When running with PROOF Begin() is only called on the client.
   // The tree argument is deprecated (on PROOF 0 is passed).
+
+  AliDebug(AliLog::kDebug, "============BEGIN===========");
 }
 
 void AliSelector::SlaveBegin(TTree* tree)
@@ -169,19 +171,9 @@ Bool_t AliSelector::Process(Long64_t entry)
 
   fTree->GetTree()->GetEntry(entry);
 
-  /*
-  // debugging
   if (fESD)
     AliDebug(AliLog::kDebug, Form("ESD: We have %d tracks.", fESD->GetNumberOfTracks()));
 
-  if (fHeader)
-    AliDebug(AliLog::kDebug, Form("Header: We have %d primaries.", fHeader->GetNprimary()));
-
-  TTree* kinematics = GetKinematics();
-  if (kinematics)
-    AliDebug(AliLog::kDebug, Form("Kinematics: We have %lld particles.", kinematics->GetEntries()));
-  */
-
   return kTRUE;
 }
 
@@ -191,6 +183,8 @@ void AliSelector::SlaveTerminate()
   // have been processed. When running with PROOF SlaveTerminate() is called
   // on each slave server.
 
+  AliDebug(AliLog::kDebug, "=======SLAVETERMINATE=======");
+
   DeleteKinematicsFile();
 }
 
index 0255483..127783e 100644 (file)
@@ -18,7 +18,9 @@ ClassImp(AliSelectorRL)
 
 AliSelectorRL::AliSelectorRL() :
   AliSelector(),
-  fRunLoader(0)
+  fRunLoader(0),
+  fKinematicsLoaded(kFALSE),
+  fHeaderLoaded(kFALSE)
 {
   //
   // Constructor. Initialization of pointers
@@ -88,7 +90,12 @@ AliRunLoader* AliSelectorRL::GetRunLoader()
     if (!fRunLoader)
       return 0;
 
-    fRunLoader->LoadgAlice();
+    if (fRunLoader->LoadgAlice() != 0)
+    {
+      delete fRunLoader;
+      fRunLoader = 0;
+      return 0;
+    }
     fRunLoader->GetEvent(fTree->GetTree()->GetReadEntry());
   }
 
@@ -106,6 +113,9 @@ void AliSelectorRL::DeleteRunLoader()
     fRunLoader->Delete();
     fRunLoader = 0;
   }
+
+  fKinematicsLoaded = kFALSE;
+  fHeaderLoaded = kFALSE;
 }
 
 AliHeader* AliSelectorRL::GetHeader()
@@ -116,8 +126,11 @@ AliHeader* AliSelectorRL::GetHeader()
   if (!runLoader)
     return 0;
 
-  if (runLoader->GetHeader() == 0)
-    runLoader->LoadHeader();
+  if (fHeaderLoaded == kFALSE)
+    if (runLoader->LoadHeader() != 0)
+      return 0;
+
+  fHeaderLoaded = kTRUE;
 
   return runLoader->GetHeader();
 }
@@ -130,8 +143,11 @@ AliStack* AliSelectorRL::GetStack()
   if (!runLoader)
     return 0;
 
-  if (runLoader->Stack() == 0)
-    runLoader->LoadKinematics();
+  if (fKinematicsLoaded == kFALSE)
+    if (runLoader->LoadKinematics() != 0)
+      return 0;
+
+  fKinematicsLoaded = kTRUE;
 
   return runLoader->Stack();
 }
index eda5325..4255a48 100644 (file)
@@ -29,6 +29,8 @@ class AliSelectorRL : public AliSelector {
     void DeleteRunLoader();
 
     AliRunLoader* fRunLoader;    //! pointer to the RunLoader if galice.root was opened
+    Bool_t fKinematicsLoaded;    // determines if the stack is properly loaded (AliRunLoader::LoadKinematics() succeeded), this is needed because the GetStack returnes a invalid stack object when the function failed
+    Bool_t fHeaderLoaded;        // determines if the header is properly loaded
 
     ClassDef(AliSelectorRL,0);
 };
index 3e2628f..1167412 100644 (file)
@@ -60,9 +60,9 @@ dNdEtaAnalysis::dNdEtaAnalysis(Char_t* name, Char_t* title) :
 
   fdNdEta[0] = dynamic_cast<TH1D*> (fData->Project3D("y"));
   fdNdEta[0]->SetName(Form("%s_dNdEta", name));
-  fdNdEta[0]->SetTitle("dN/d#eta");
+  fdNdEta[0]->SetTitle("dN_{ch}/d#eta");
   fdNdEta[0]->GetXaxis()->SetTitle(fData->GetYaxis()->GetTitle());
-  fdNdEta[0]->SetYTitle("dN/d#eta");
+  fdNdEta[0]->SetYTitle("dN_{ch}/d#eta");
 
   fdNdEtaPtCutOffCorrected[0] = dynamic_cast<TH1D*> (fdNdEta[0]->Clone(Form("%s_corrected", fdNdEta[0]->GetName())));
 
index d6db866..c938d27 100644 (file)
@@ -1,7 +1,17 @@
 /* $Id$ */
 
+Int_t gMax = 5;
+
 void drawPlots()
 {
+  drawPlots(5);
+  drawPlots(2);
+}
+
+void drawPlots(Int_t max)
+{
+  gMax = max;
+
   ptCutoff();
   TriggerBias();
   VtxRecon();
@@ -94,6 +104,8 @@ void ptSpectrum()
   Prepare1DPlot(histESD);
 
   histESD->SetTitle("");
+  histESD->GetXaxis()->SetTitle("p_{T} [GeV/c]");
+  histESD->GetYaxis()->SetTitle("#frac{dN}{d#eta dp_{T}} [c/GeV]");
 
   histMC->SetLineColor(kBlue);
   histESD->SetLineColor(kRed);
@@ -150,7 +162,7 @@ void TriggerBias()
   InitPadCOLZ();
   corr->DrawCopy("COLZ");
 
-  canvas->SaveAs("TriggerBias.gif");
+  canvas->SaveAs(Form("TriggerBias_%d.gif", gMax));
 
   corr->GetYaxis()->SetRangeUser(0, 5);
 
@@ -158,7 +170,7 @@ void TriggerBias()
   InitPadCOLZ();
   corr->DrawCopy("COLZ");
 
-  canvas->SaveAs("TriggerBiasZoom.gif");
+  canvas->SaveAs(Form("TriggerBiasZoom_%d.gif", gMax));
 }
 
 void VtxRecon()
@@ -172,18 +184,57 @@ void VtxRecon()
 
   TCanvas* canvas = new TCanvas("VtxRecon", "VtxRecon", 500, 500);
   InitPadCOLZ();
-  corr->Draw("COLZ");
+  corr->DrawCopy("COLZ");
+
+  canvas->SaveAs(Form("VtxRecon_%d.gif", gMax));
+
+
+  corr->GetYaxis()->SetRangeUser(0, 5);
+
+  TCanvas* canvas = new TCanvas("VtxReconZoom", "VtxReconZoom", 500, 500);
+  InitPadCOLZ();
+  corr->DrawCopy("COLZ");
 
-  canvas->SaveAs("VtxRecon.gif");
+  canvas->SaveAs(Form("VtxReconZoom_%d.gif", gMax));
 }
 
 void Track2Particle2D()
 {
+  gSystem->Load("libPWG0base");
+
   TFile* file = TFile::Open("correction_map.root");
+  AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection();
+  dNdEtaCorrection->LoadHistograms("correction_map.root","dndeta_correction");
+
+  TH3* gene = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetGeneratedHistogram();
+  TH3* meas = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetMeasuredHistogram();
 
+  gene->GetZaxis()->SetRangeUser(0.3, 10);
+  meas->GetZaxis()->SetRangeUser(0.3, 10);
+  AliPWG0Helper::CreateDividedProjections(gene, meas, "yx");
+  gene->GetZaxis()->UnZoom();
+  meas->GetZaxis()->UnZoom();
+
+  gene->GetYaxis()->SetRangeUser(-0.8, 0.8);
+  meas->GetYaxis()->SetRangeUser(-0.8, 0.8);
+  AliPWG0Helper::CreateDividedProjections(gene, meas, "zx");
+  gene->GetYaxis()->UnZoom();
+  meas->GetYaxis()->UnZoom();
+
+  gene->GetXaxis()->SetRangeUser(-10, 10);
+  meas->GetXaxis()->SetRangeUser(-10, 10);
+  AliPWG0Helper::CreateDividedProjections(gene, meas, "zy");
+  gene->GetXaxis()->UnZoom();
+  meas->GetXaxis()->UnZoom();
+
+  TH2* corrYX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_yx_div_meas_nTrackToNPart_yx"));
+  TH2* corrZX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zx_div_meas_nTrackToNPart_zx"));
+  TH2* corrZY = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zy_div_meas_nTrackToNPart_zy"));
+
+  /* this reads them from the file
   TH2* corrYX = dynamic_cast<TH2*> (file->Get("dndeta_correction/gene_nTrackToNPart_yx_div_meas_nTrackToNPart_yx"));
   TH2* corrZX = dynamic_cast<TH2*> (file->Get("dndeta_correction/gene_nTrackToNPart_zx_div_meas_nTrackToNPart_zx"));
-  TH2* corrZY = dynamic_cast<TH2*> (file->Get("dndeta_correction/gene_nTrackToNPart_zy_div_meas_nTrackToNPart_zy"));
+  TH2* corrZY = dynamic_cast<TH2*> (file->Get("dndeta_correction/gene_nTrackToNPart_zy_div_meas_nTrackToNPart_zy"));*/
 
   Prepare2DPlot(corrYX);
   Prepare2DPlot(corrZX);
@@ -209,7 +260,7 @@ void Track2Particle2D()
   InitPadCOLZ();
   corrZY->Draw("COLZ");
 
-  canvas->SaveAs("Track2Particle2D.gif");
+  canvas->SaveAs(Form("Track2Particle2D_%d.gif", gMax));
 }
 
 void Track2Particle3D()
@@ -236,8 +287,6 @@ void Track2Particle3D()
 
 void Track2Particle3DAll()
 {
-  // get left margin proper
-
   TFile* file = TFile::Open("correction_map.root");
 
   TH3* gene = dynamic_cast<TH3*> (file->Get("dndeta_correction/gene_nTrackToNPart"));
@@ -302,7 +351,7 @@ void Prepare2DPlot(TH2* hist)
   hist->GetYaxis()->SetTitleOffset(1.4);
 
   hist->SetMinimum(0);
-  hist->SetMaximum(10);
+  hist->SetMaximum(gMax);
 
   SetRanges(hist);
 }
diff --git a/PWG0/testAliSelector.C b/PWG0/testAliSelector.C
new file mode 100644 (file)
index 0000000..59d5509
--- /dev/null
@@ -0,0 +1,40 @@
+/* $Id$ */
+
+//
+// This is an example how to run a selector
+//
+// This script runs the AliSelector on a chain of ESD files,
+// some debug information is printed
+//
+
+#include "CreateESDChain.C"
+
+// parameters are
+//   dataDir: the directory containing subdirectories that contain the ESD files
+//   nRuns: the number of files that should be processed
+//   offset: the directory to start with
+void testAliSelector(const Char_t* dataDir, Int_t nRuns = 5, Int_t offset = 0)
+{
+  // load needed libraries
+  gSystem->Load("libEG");
+  gSystem->Load("libGeom");
+  gSystem->Load("libESD");
+  gSystem->Load("libPWG0base");
+
+  // create chain, CreateESDChainFromDir() is defined in CreateESDChain.C
+  TChain* chain = CreateESDChainFromDir(dataDir, nRuns, offset);
+
+  // enable debugging
+  AliLog::SetClassDebugLevel("AliSelector", AliLog::kInfo);
+
+  // run selector on chain
+  Long64_t result = chain->Process("AliSelector.cxx+");
+
+  if (result != 0)
+  {
+    printf("ERROR: Executing process failed with %d.\n", result);
+    return;
+  }
+
+  printf("Execution complete.\n");
+}