]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliAODHandler.cxx
Fix fixed-string length bug
[u/mrichter/AliRoot.git] / STEER / AliAODHandler.cxx
index 0c61768b3676d73d6b2a86ba88b2439b10aa0100..cb7a5126ecf9d7bec834bb2c683d1fb21ae28119 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <TTree.h>
 #include <TFile.h>
+#include <TString.h>
 
 #include "AliAODHandler.h"
 #include "AliAODEvent.h"
@@ -32,10 +33,12 @@ ClassImp(AliAODHandler)
 //______________________________________________________________________________
 AliAODHandler::AliAODHandler() :
     AliVEventHandler(),
+    fIsStandard(kTRUE),
+    fNeedsHeaderReplication(kFALSE),
     fAODEvent(NULL),
     fTreeA(NULL),
     fFileA(NULL),
-    fName("")
+    fFileName("")
 {
   // default constructor
 }
@@ -43,10 +46,12 @@ AliAODHandler::AliAODHandler() :
 //______________________________________________________________________________
 AliAODHandler::AliAODHandler(const char* name, const char* title):
     AliVEventHandler(name, title),
+    fIsStandard(kTRUE),
+    fNeedsHeaderReplication(kFALSE),
     fAODEvent(NULL),
     fTreeA(NULL),
     fFileA(NULL),
-    fName("")
+    fFileName("")
 {
 }
 
@@ -60,30 +65,39 @@ AliAODHandler::~AliAODHandler()
     delete fFileA;
   }
   delete fTreeA;
-  delete fName;
  // destructor
 }
 
-
-Bool_t AliAODHandler::InitIO(Option_t* opt)
+//______________________________________________________________________________
+Bool_t AliAODHandler::Init(Option_t* opt)
 {
   // Initialize IO
   //
   // Create the AODevent object
   if(!fAODEvent){
     fAODEvent = new AliAODEvent();
-    fAODEvent->CreateStdContent();
+    if (fIsStandard) fAODEvent->CreateStdContent();
   }
   //
   // File opening according to execution mode
-  
-  if (!(strcmp(opt, "proof"))) {
+  TString option(opt);
+  option.ToLower();
+  if (option.Contains("proof")) {
     // proof
-    CreateTree(0);
+    if (option.Contains("special")) {
+       // File for tree already opened on slave -> merging via files
+       fFileA = gFile;
+       CreateTree(1);
+    } else {   
+       // Merging in memory
+       CreateTree(0);
+    }   
   } else {
     // local and grid
-    fFileA = new TFile(fName, "RECREATE");
+    TDirectory *owd = gDirectory;
+    fFileA = new TFile(fFileName.Data(), "RECREATE");
     CreateTree(1);
+    owd->cd();
   }
   return kTRUE;
 }
@@ -91,11 +105,13 @@ Bool_t AliAODHandler::InitIO(Option_t* opt)
 Bool_t AliAODHandler::FinishEvent()
 {
     // Fill data structures
+    fAODEvent->MakeEntriesReferencable();
     FillTree();
-    fAODEvent->ResetStd();
+    if (fIsStandard) fAODEvent->ResetStd();
     return kTRUE;
 }
 
+//______________________________________________________________________________
 Bool_t AliAODHandler::Terminate()
 {
     // Terminate 
@@ -103,6 +119,7 @@ Bool_t AliAODHandler::Terminate()
     return kTRUE;
 }
 
+//______________________________________________________________________________
 Bool_t AliAODHandler::TerminateIO()
 {
     // Terminate IO
@@ -113,7 +130,7 @@ Bool_t AliAODHandler::TerminateIO()
     return kTRUE;
 }
 
-
+//______________________________________________________________________________
 void AliAODHandler::CreateTree(Int_t flag)
 {
     // Creates the AOD Tree
@@ -122,15 +139,45 @@ void AliAODHandler::CreateTree(Int_t flag)
     if (flag == 0) fTreeA->SetDirectory(0);
 }
 
+//______________________________________________________________________________
 void AliAODHandler::FillTree()
 {
     // Fill the AOD Tree
     fTreeA->Fill();
 }
 
-
+//______________________________________________________________________________
 void AliAODHandler::AddAODtoTreeUserInfo()
 {
     // Add aod event to tree user info
     fTreeA->GetUserInfo()->Add(fAODEvent);
 }
+
+//______________________________________________________________________________
+void AliAODHandler::AddBranch(const char* cname, void* addobj)
+{
+    // Add a new branch to the aod 
+    TDirectory *owd = gDirectory;
+    if (fFileA) {
+       fFileA->cd();
+    }
+    char** apointer = (char**) addobj;
+    TObject* obj = (TObject*) *apointer;
+    fTreeA->Branch(obj->GetName(), cname, addobj);
+    fAODEvent->AddObject(obj);
+    owd->cd();
+}
+
+//______________________________________________________________________________
+void AliAODHandler::SetOutputFileName(const char* fname)
+{
+// Set file name.
+   fFileName = fname;
+}
+
+//______________________________________________________________________________
+const char *AliAODHandler::GetOutputFileName()
+{
+// Get file name.
+   return fFileName.Data();
+}