From aa399a267eb8a51180596fc028ddce1c94f92096 Mon Sep 17 00:00:00 2001 From: agheata Date: Mon, 11 Jan 2010 12:59:01 +0000 Subject: [PATCH] In case the AOD handler is declared non-standard and writing of the AOD is disabled, the AOD event is not created anymore and the AOD file not written. Such case is useful for exclusive usage of the AOD handler for deltaAOD extensions creation. Writing of the AOD file moved from the analysis manager to the AOD handler. --- ANALYSIS/AliAnalysisManager.cxx | 20 ++++------- STEER/AliAODHandler.cxx | 61 ++++++++++++++++++--------------- 2 files changed, 39 insertions(+), 42 deletions(-) diff --git a/ANALYSIS/AliAnalysisManager.cxx b/ANALYSIS/AliAnalysisManager.cxx index 2299a52b894..f57f8d787f4 100644 --- a/ANALYSIS/AliAnalysisManager.cxx +++ b/ANALYSIS/AliAnalysisManager.cxx @@ -511,7 +511,8 @@ void AliAnalysisManager::PackOutput(TList *target) if (fDebug > 1) printf("PackOutput %s: special output\n", output->GetName()); if (isManagedByHandler) { // Terminate IO for files managed by the output handler - if (file) file->Write(); + // file->Write() moved to AOD handler (A.G. 11.01.10) +// if (file) file->Write(); if (file && fDebug > 2) { printf(" handled file %s listing content:\n", file->GetName()); file->ls(); @@ -746,6 +747,9 @@ void AliAnalysisManager::Terminate() } } // + if (fInputEventHandler) fInputEventHandler ->TerminateIO(); + if (fOutputEventHandler) fOutputEventHandler ->TerminateIO(); + if (fMCtruthEventHandler) fMCtruthEventHandler->TerminateIO(); TIter next1(fOutputs); while ((output=(AliAnalysisDataContainer*)next1())) { // Special outputs or grid files have the files already closed and written. @@ -754,15 +758,7 @@ void AliAnalysisManager::Terminate() if (output->IsSpecialOutput() || output->IsRegisterDataset()) continue; } const char *filename = output->GetFileName(); - if (!(strcmp(filename, "default"))) { - if (fOutputEventHandler) filename = fOutputEventHandler->GetOutputFileName(); - TFile *aodfile = (TFile*)gROOT->GetListOfFiles()->FindObject(filename); - if (aodfile) { - if (fDebug > 1) printf("Writing output handler file: %s\n", filename); - aodfile->Write(); - continue; - } - } + if (!(strcmp(filename, "default"))) continue; if (!strlen(filename)) continue; if (!output->GetData()) continue; TDirectory *opwd = gDirectory; @@ -817,10 +813,6 @@ void AliAnalysisManager::Terminate() if (opwd) opwd->cd(); } - if (fInputEventHandler) fInputEventHandler ->TerminateIO(); - if (fOutputEventHandler) fOutputEventHandler ->TerminateIO(); - if (fMCtruthEventHandler) fMCtruthEventHandler->TerminateIO(); - Bool_t getsysInfo = ((fNSysInfo>0) && (fMode==kLocalAnalysis))?kTRUE:kFALSE; if (getsysInfo) { TDirectory *cdir = gDirectory; diff --git a/STEER/AliAODHandler.cxx b/STEER/AliAODHandler.cxx index 16955922af4..9d18754a391 100644 --- a/STEER/AliAODHandler.cxx +++ b/STEER/AliAODHandler.cxx @@ -123,7 +123,8 @@ Bool_t AliAODHandler::Init(Option_t* opt) // Initialize IO // // Create the AODevent object - if(!fAODEvent){ + Bool_t createStdAOD = fIsStandard || fFillAOD; + if(!fAODEvent && createStdAOD){ fAODEvent = new AliAODEvent(); if (fIsStandard) fAODEvent->CreateStdContent(); } @@ -131,19 +132,21 @@ Bool_t AliAODHandler::Init(Option_t* opt) // File opening according to execution mode TString option(opt); option.ToLower(); - TDirectory *owd = gDirectory; - if (option.Contains("proof")) { - // proof - // Merging via files. Need to access analysis manager via interpreter. - gROOT->ProcessLine(Form("AliAnalysisDataContainer *c_common_out = AliAnalysisManager::GetAnalysisManager()->GetCommonOutputContainer();")); - gROOT->ProcessLine(Form("AliAnalysisManager::GetAnalysisManager()->OpenProofFile(c_common_out, \"RECREATE\");")); - fFileA = gFile; - } else { - // local and grid - fFileA = new TFile(fFileName.Data(), "RECREATE"); - } - CreateTree(1); - owd->cd(); + if (createStdAOD) { + TDirectory *owd = gDirectory; + if (option.Contains("proof")) { + // proof + // Merging via files. Need to access analysis manager via interpreter. + gROOT->ProcessLine(Form("AliAnalysisDataContainer *c_common_out = AliAnalysisManager::GetAnalysisManager()->GetCommonOutputContainer();")); + gROOT->ProcessLine(Form("AliAnalysisManager::GetAnalysisManager()->OpenProofFile(c_common_out, \"RECREATE\");")); + fFileA = gFile; + } else { + // local and grid + fFileA = new TFile(fFileName.Data(), "RECREATE"); + } + CreateTree(1); + owd->cd(); + } if (fExtensions) { TIter next(fExtensions); AliAODExtension *ext; @@ -180,6 +183,7 @@ void AliAODHandler::StoreMCParticles(){ // has to passed to the AOD Handler by this task // (doing this in the steering macro would not work on PROOF) + if (!fAODEvent) return; TClonesArray *mcarray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName()); if(!mcarray)return; mcarray->Delete(); @@ -388,20 +392,20 @@ Bool_t AliAODHandler::FinishEvent() fAODEvent->MakeEntriesReferencable(); // StoreMCParticles(); FillTree(); - if (fExtensions) { - TIter next(fExtensions); - AliAODExtension *ext; - while ((ext=(AliAODExtension*)next())) ext->FinishEvent(); - } - if (fFilters) { - TIter nextf(fFilters); - AliAODExtension *ext; - while ((ext=(AliAODExtension*)nextf())) { -// ext->SetEvent(fAODEvent); - ext->FinishEvent(); - } - } + } + if (fExtensions) { + TIter next(fExtensions); + AliAODExtension *ext; + while ((ext=(AliAODExtension*)next())) ext->FinishEvent(); } + if (fFilters) { + TIter nextf(fFilters); + AliAODExtension *ext; + while ((ext=(AliAODExtension*)nextf())) { +// ext->SetEvent(fAODEvent); + ext->FinishEvent(); + } + } if (fIsStandard) fAODEvent->ResetStd(); // Reset AOD replication flag fAODIsReplicated = kFALSE; @@ -426,6 +430,7 @@ Bool_t AliAODHandler::TerminateIO() { // Terminate IO if (fFileA) { + fFileA->Write(); fFileA->Close(); delete fFileA; fFileA = 0; @@ -465,7 +470,7 @@ void AliAODHandler::FillTree() void AliAODHandler::AddAODtoTreeUserInfo() { // Add aod event to tree user info - fTreeA->GetUserInfo()->Add(fAODEvent); + if (fTreeA) fTreeA->GetUserInfo()->Add(fAODEvent); // Now the tree owns our fAODEvent... fAODEvent = 0; } -- 2.43.0