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();
}
}
//
+ 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.
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;
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;
// Initialize IO
//
// Create the AODevent object
- if(!fAODEvent){
+ Bool_t createStdAOD = fIsStandard || fFillAOD;
+ if(!fAODEvent && createStdAOD){
fAODEvent = new AliAODEvent();
if (fIsStandard) fAODEvent->CreateStdContent();
}
// 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;
// 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();
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;
{
// Terminate IO
if (fFileA) {
+ fFileA->Write();
fFileA->Close();
delete fFileA;
fFileA = 0;
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;
}