]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG0/dNdEta/AlidNdEtaAnalysisSelector.cxx
o) splitted analysis and correction of dneta
[u/mrichter/AliRoot.git] / PWG0 / dNdEta / AlidNdEtaAnalysisSelector.cxx
index 208b04c773148e8dbf4026db126d8ae60f43edac..743a515f6429a1544ff1eecc337a52513594454b 100644 (file)
@@ -1,26 +1,26 @@
+/* $Id$ */
+
 #include "AlidNdEtaAnalysisSelector.h"
 
 #include <TStyle.h>
 #include <TSystem.h>
 #include <TCanvas.h>
 #include <TVector3.h>
+#include <TH2F.h>
+#include <TChain.h>
+#include <TFile.h>
 
 #include <AliLog.h>
 #include <AliGenEventHeader.h>
-#include <AliTracker.h>
+#include <AliHeader.h>
 
-#include "../esdTrackCuts/AliESDtrackCuts.h"
-#include "dNdEtaCorrection.h"
 #include "dNdEtaAnalysis.h"
 
 ClassImp(AlidNdEtaAnalysisSelector)
 
-AlidNdEtaAnalysisSelector::AlidNdEtaAnalysisSelector(TTree *) :
+AlidNdEtaAnalysisSelector::AlidNdEtaAnalysisSelector() :
   AliSelector(),
-  fEsdTrackCuts(0),
-  fdNdEtaAnalysis(0),
-  fdNdEtaCorrection(0),
-  fdNdEtaAnalysisFinal(0)
+  fdNdEtaAnalysis(0)
 {
   //
   // Constructor. Initialization of pointers
@@ -45,103 +45,7 @@ void AlidNdEtaAnalysisSelector::SlaveBegin(TTree * tree)
 
   AliSelector::SlaveBegin(tree);
 
-  fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta");
-
-  if (fChain)
-  {
-    fEsdTrackCuts = dynamic_cast<AliESDtrackCuts*> (fChain->GetUserInfo()->FindObject("AliESDtrackCuts"));
-    fdNdEtaCorrection = dynamic_cast<dNdEtaCorrection*> (fChain->GetUserInfo()->FindObject("dNdEtaCorrection"));
-  }
-
-  if (!fEsdTrackCuts)
-     AliDebug(AliLog::kError, "ERROR: Could not read EsdTrackCuts from user info.");
-
-  if (!fEsdTrackCuts)
-     AliDebug(AliLog::kError, "ERROR: Could not read dNdEtaCorrection from user info.");
-
-  AliLog::SetClassDebugLevel("AliESDtrackCuts", 1);
-}
-
-Bool_t AlidNdEtaAnalysisSelector::Process(Long64_t entry)
-{
-  // The Process() function is called for each entry in the tree (or possibly
-  // keyed object in the case of PROOF) to be processed. The entry argument
-  // specifies which entry in the currently loaded tree is to be processed.
-  // It can be passed to either TTree::GetEntry() or TBranch::GetEntry()
-  // to read either all or the required parts of the data. When processing
-  // keyed objects with PROOF, the object is already loaded and is available
-  // via the fObject pointer.
-  //
-  // This function should contain the "body" of the analysis. It can contain
-  // simple or elaborate selection criteria, run algorithms on the data
-  // of the event and typically fill histograms.
-
-  // WARNING when a selector is used with a TChain, you must use
-  //  the pointer to the current TTree to call GetEntry(entry).
-  //  The entry is always the local entry number in the current tree.
-  //  Assuming that fChain is the pointer to the TChain being processed,
-  //  use fChain->GetTree()->GetEntry(entry).
-
-  if (AliSelector::Process(entry) == kFALSE)
-    return kFALSE;
-
-  // Check prerequisites
-  if (!fESD || !fEsdTrackCuts)
-    return kFALSE;
-
-  // ########################################################
-  // get the EDS vertex
-  const AliESDVertex* vtxESD = fESD->GetVertex();
-
-  // the vertex should be reconstructed
-  if (strcmp(vtxESD->GetName(),"default")==0)
-    return kTRUE;
-
-  Double_t vtx_res[3];
-  vtx_res[0] = vtxESD->GetXRes();
-  vtx_res[1] = vtxESD->GetYRes();
-  vtx_res[2] = vtxESD->GetZRes();
-
-  // the resolution should be reasonable???
-  if (vtx_res[2]==0 || vtx_res[2]>0.1)
-    return kTRUE;
-
-  Double_t vtx[3];
-  vtxESD->GetXYZ(vtx);
-
-  // ########################################################
-  // loop over esd tracks
-  Int_t nTracks = fESD->GetNumberOfTracks();
-  for (Int_t t=0; t<nTracks; t++)
-  {
-    AliESDtrack* esdTrack = fESD->GetTrack(t);
-    if (!esdTrack)
-    {
-      AliDebug(AliLog::kError, Form("ERROR: Could not retrieve track %d.", t));
-      continue;
-    }
-
-    // cut the esd track?
-    if (!fEsdTrackCuts->AcceptTrack(esdTrack))
-      continue;
-
-    Double_t p[3];
-    esdTrack->GetConstrainedPxPyPz(p); // ### TODO or GetInnerPxPyPy / GetOuterPxPyPy
-    TVector3 vector(p);
-
-    Float_t theta = vector.Theta();
-    Float_t eta   = -TMath::Log(TMath::Tan(theta/2.));
-
-    Float_t correction = fdNdEtaCorrection->GetCorrection(vtx[2], eta);
-
-    fdNdEtaAnalysis->FillTrack(vtx[2], eta, correction);
-
-  } // end of track loop
-
-  // for event count per vertex
-  fdNdEtaAnalysis->FillEvent(vtx[2]);
-
-  return kTRUE;
+  fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
 }
 
 void AlidNdEtaAnalysisSelector::SlaveTerminate()
@@ -159,12 +63,7 @@ void AlidNdEtaAnalysisSelector::SlaveTerminate()
     return;
   }
 
-  fOutput->Add(fdNdEtaAnalysis->GetEtaVsVtxHistogram());
-  fOutput->Add(fdNdEtaAnalysis->GetEtaVsVtxUncorrectedHistogram());
-  fOutput->Add(fdNdEtaAnalysis->GetVtxHistogram());
-
-  fdNdEtaAnalysis->GetVtxHistogram()->Print();
-  fOutput->Print();
+  fOutput->Add(fdNdEtaAnalysis);
 }
 
 void AlidNdEtaAnalysisSelector::Terminate()
@@ -175,32 +74,25 @@ void AlidNdEtaAnalysisSelector::Terminate()
 
   AliSelector::Terminate();
 
-  TH2F* etaVsVtxHistogram = dynamic_cast<TH2F*> (fOutput->FindObject("eta_vs_vtx"));
-  TH2F* etaVsVtxUncorrectedHistogram = dynamic_cast<TH2F*> (fOutput->FindObject("eta_vs_vtx_uncorrected"));
-  TH1D* vtxHistogram = dynamic_cast<TH1D*> (fOutput->FindObject("vtx"));
+  fdNdEtaAnalysis = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndeta"));
 
-  if (!etaVsVtxHistogram || !vtxHistogram || !etaVsVtxUncorrectedHistogram)
+  if (!fdNdEtaAnalysis)
   {
-     AliDebug(AliLog::kError, Form("ERROR: Histograms not available %p %p %p", (void*) etaVsVtxHistogram, (void*) etaVsVtxUncorrectedHistogram, (void*) vtxHistogram));
+    AliDebug(AliLog::kError, Form("ERROR: Histograms not available %p", (void*) fdNdEtaAnalysis));
     return;
   }
 
-  fdNdEtaAnalysisFinal = new dNdEtaAnalysis("dNdEtaResult");
-
-  fdNdEtaAnalysisFinal->SetEtaVsVtxHistogram(etaVsVtxHistogram);
-  fdNdEtaAnalysisFinal->SetEtaVsVtxUncorrectedHistogram(etaVsVtxUncorrectedHistogram);
-  fdNdEtaAnalysisFinal->SetVtxHistogram(vtxHistogram);
-
-  fdNdEtaAnalysisFinal->Finish();
-
   TFile* fout = new TFile("out.root","RECREATE");
-
-  fEsdTrackCuts->SaveHistograms("esd_tracks_cuts");
-  fdNdEtaCorrection->SaveHistograms();
-  fdNdEtaAnalysisFinal->SaveHistograms();
-
+  WriteObjects();
   fout->Write();
   fout->Close();
+}
+
+void AlidNdEtaAnalysisSelector::WriteObjects()
+{
+  // Write objects to output file
+  // this is an extra function to be overloaded...
+  //
 
-  fdNdEtaAnalysisFinal->DrawHistograms();
+  fdNdEtaAnalysis->SaveHistograms();
 }