]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisTaskRL.cxx
Adding the base task that gives access to the run loader
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskRL.cxx
diff --git a/ANALYSIS/AliAnalysisTaskRL.cxx b/ANALYSIS/AliAnalysisTaskRL.cxx
new file mode 100644 (file)
index 0000000..ccc8c53
--- /dev/null
@@ -0,0 +1,143 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/* $Id$ */
+
+//-----------------------------------------------------------------
+//           AliAnalysisTaskRL class
+//     Task that gives access to the run loader
+//   Origin: Panos Christakoglou, UOA-CERN, Panos.Christakoglou@cern.ch
+//-----------------------------------------------------------------
+
+#include "AliAnalysisTaskRL.h"
+#include "AliRunLoader.h"
+#include "AliStack.h"
+#include "AliHeader.h"
+
+
+#include <TTree.h>
+#include <TFile.h>
+
+ClassImp(AliAnalysisTaskRL)
+
+//___________________________________________________________________________
+AliAnalysisTaskRL::AliAnalysisTaskRL() :
+  AliAnalysisTask(),
+  fTree(0), fRunLoader(0),
+  fKinematicsLoaded(kFALSE), fHeaderLoaded(kFALSE) {
+  //
+  // Constructor. Initialization of pointers
+  //
+}
+
+//___________________________________________________________________________
+AliAnalysisTaskRL::AliAnalysisTaskRL(const char *name, const char *title) :
+  AliAnalysisTask(name,title),
+  fTree(0), fRunLoader(0),
+  fKinematicsLoaded(kFALSE), fHeaderLoaded(kFALSE) {
+  // Constructor.
+}
+
+//___________________________________________________________________________
+AliAnalysisTaskRL::~AliAnalysisTaskRL() {
+  //
+  // Destructor
+  //
+  DeleteRunLoader();
+}
+
+//___________________________________________________________________________
+Bool_t AliAnalysisTaskRL::GetEntry(Long64_t ientry) {
+  //returns the entry of the run loader
+  if(fRunLoader) {
+    if(fRunLoader->GetEvent((Int_t)ientry) != 0)
+      return kFALSE;
+  }
+  return kTRUE;
+}
+
+//___________________________________________________________________________
+AliRunLoader *AliAnalysisTaskRL::GetRunLoader() {
+  // Returns AliRun instance corresponding to current ESD active in fTree
+  // Loads galice.root, the file is identified by replacing "AliESDs" to
+  // "galice" in the file path of the ESD file. 
+
+  fTree = (TTree *)AliAnalysisTask::GetInputData(0);
+  if (!fRunLoader) {
+    if (!fTree->GetCurrentFile())
+      return 0;
+    
+    TString fileName(fTree->GetCurrentFile()->GetName());
+    fileName.ReplaceAll("AliESDs", "galice");
+    
+    // temporary workaround for PROOF bug #18505
+    fileName.ReplaceAll("#galice.root#galice.root", "#galice.root");
+    
+    fRunLoader = AliRunLoader::Open(fileName);
+    if (!fRunLoader)
+      return 0;
+    fRunLoader->GetEvent((Int_t)(fTree->GetTree()->GetReadEntry()));
+  }
+  
+  return fRunLoader;
+}
+
+//___________________________________________________________________________
+void AliAnalysisTaskRL::DeleteRunLoader() {
+  //
+  // deletes the runloader
+  //
+  if (fRunLoader) {
+    fRunLoader->Delete();
+    fRunLoader = 0;
+  }
+  
+  fKinematicsLoaded = kFALSE;
+  fHeaderLoaded = kFALSE;
+}
+
+//___________________________________________________________________________
+AliHeader* AliAnalysisTaskRL::GetHeader() {
+  // Returns header retrieved from RunLoader
+  
+  AliRunLoader* runLoader = GetRunLoader();
+  if (!runLoader)
+    return 0;
+  
+  if (fHeaderLoaded == kFALSE)
+    if (runLoader->LoadHeader() != 0)
+      return 0;
+  
+  fHeaderLoaded = kTRUE;
+  
+  return runLoader->GetHeader();
+}
+
+//___________________________________________________________________________
+AliStack* AliAnalysisTaskRL::GetStack() {
+  // Returns stack retrieved from RunLoader
+  
+  AliRunLoader* runLoader = GetRunLoader();
+  if (!runLoader)
+    return 0;
+  
+  if (fKinematicsLoaded == kFALSE)
+    if (runLoader->LoadKinematics() != 0)
+      return 0;
+  
+  fKinematicsLoaded = kTRUE;
+  
+  return runLoader->Stack();
+}