]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisTaskSE.cxx
Protection in case there is no output handler.
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskSE.cxx
index 1233cb269bd43b30d53f30a431c122dd6a0f3a7b..b3152f0fa00b45e7a8d36e842013f7f11afd8909 100644 (file)
 #include "AliESDEvent.h"
 #include "AliESD.h"
 #include "AliAODEvent.h"
+#include "AliAODHeader.h"
 #include "AliVEvent.h"
 #include "AliAODHandler.h"
+#include "AliAODInputHandler.h"
 #include "AliMCEventHandler.h"
 #include "AliInputEventHandler.h"
 #include "AliMCEvent.h"
@@ -39,6 +41,8 @@
 ClassImp(AliAnalysisTaskSE)
 
 ////////////////////////////////////////////////////////////////////////
+Bool_t        AliAnalysisTaskSE::fgHeaderCopied = kFALSE;
+AliAODHeader* AliAnalysisTaskSE::fgAODHeader    = NULL;
 
 AliAnalysisTaskSE::AliAnalysisTaskSE():
     AliAnalysisTask(),
@@ -145,6 +149,14 @@ void AliAnalysisTaskSE::CreateOutputObjects()
     if (handler) {
        fOutputAOD   = handler->GetAOD();
        fTreeA = handler->GetTree();
+       // Check if AOD Header replication has been required
+       if (!(handler->IsStandard())            && 
+           (handler->NeedsHeaderReplication()) &&
+           !(fgAODHeader))
+       {
+           fgAODHeader = new AliAODHeader;
+           handler->AddBranch("AliAODHeader", &fgAODHeader);
+       }
     } else {
        AliWarning("No AOD Event Handler connected.") ; 
     }
@@ -162,7 +174,25 @@ void AliAnalysisTaskSE::Exec(Option_t* option)
        fEntry = fMCEvent->Header()->GetEvent(); 
     if ( !((Entry()-1)%100) && fDebug > 0) 
          AliInfo(Form("%s ----> Processing event # %lld", CurrentFileName(), Entry()));
-         
+
+    AliAODHandler* handler = (AliAODHandler*) 
+       ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
+    if (handler) {
+       if (!(handler->IsStandard())            && 
+           (handler->NeedsHeaderReplication()) &&
+           (fgAODHeader))
+       {
+           // Header should be replicated
+           AliAODInputHandler* aodH = dynamic_cast<AliAODInputHandler*>(fInputHandler);
+           if (aodH) {
+               // Input is AOD
+               fgAODHeader =  dynamic_cast<AliAODHeader*>(InputEvent()->GetHeader());
+               fgHeaderCopied = kTRUE;
+           }
+       }
+    }
+    
+
 // Call the user analysis    
     UserExec(option);
     PostData(0, fTreeA);
@@ -179,12 +209,12 @@ const char* AliAnalysisTaskSE::CurrentFileName()
     else return "";
 }
 
-void AliAnalysisTaskSE::AddAODBranch(const char* bname, const char* cname, TObject* addobj)
+void AliAnalysisTaskSE::AddAODBranch(const char* cname, void* addobj)
 {
     // Add a new branch to the aod tree
     AliAODHandler* handler = (AliAODHandler*) 
        ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
     if (handler) {
-       handler->AddBranch(bname, cname, addobj);
+       handler->AddBranch(cname, addobj);
     }
 }