if (strlen(filename) && !isManagedByHandler) {
// Backup current folder
TDirectory *opwd = gDirectory;
- // File resident outputs
- TFile *file = AliAnalysisManager::OpenFile(output, "RECREATE", kTRUE);
+ // File resident outputs.
+ // Check first if the file exists.
+ TString open_option = "RECREATE";
+ if (!gSystem->AccessPathName(output->GetFileName())) open_option = "UPDATE";
+ TFile *file = AliAnalysisManager::OpenFile(output, open_option, kTRUE);
// Clear file list to release object ownership to user.
file->Clear();
// Save data to file, then close.
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);
+ TString handlerFile = "";
+ if (fOutputEventHandler) {
+ handlerFile = fOutputEventHandler->GetOutputFileName();
+ }
while ((output=(AliAnalysisDataContainer*)next1())) {
// Special outputs or grid files have the files already closed and written.
if (fMode == kGridAnalysis) continue;
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;
- }
- }
+ TString open_option = "RECREATE";
+ if (!(strcmp(filename, "default"))) continue;
if (!strlen(filename)) continue;
if (!output->GetData()) continue;
TDirectory *opwd = gDirectory;
TFile *file = output->GetFile();
if (!file) file = (TFile*)gROOT->GetListOfFiles()->FindObject(filename);
- if (!file) file = new TFile(filename, "RECREATE");
+ if (!file) {
+ printf("Terminate : handlerFile = %s, filename = %s\n",handlerFile.Data(),filename);
+ //if (handlerFile == filename && !gSystem->AccessPathName(filename)) open_option = "UPDATE";
+ if (!gSystem->AccessPathName(filename)) open_option = "UPDATE";
+ file = new TFile(filename, open_option);
+ }
if (file->IsZombie()) {
Error("Terminate", "Cannot open output file %s", filename);
continue;
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;
TString opt(option);
opt.ToUpper();
if ((opt=="UPDATE") && (opt!=f->GetOption()))
- ::Fatal("AliAnalysisManager::OpenFile", "File %s already opened, but not in UPDATE mode!", cont->GetFileName());
+ ::Info("AliAnalysisManager::OpenFile", "File %s already opened in %s mode!", cont->GetFileName(), f->GetOption());
} else {
f = TFile::Open(filename, option);
}
TString opt(option);
opt.ToUpper();
if ((opt=="UPDATE") && (opt!=f->GetOption()))
- Fatal("OpenProofFile", "File %s already opened, but not in UPDATE mode!", cont->GetFileName());
+ ::Info("OpenProofFile", "File %s already opened in %s mode!", cont->GetFileName(), f->GetOption());
} else {
f = new TFile(filename, option);
}
// Set the input event handler and create a container for it.
fInputEventHandler = handler;
fCommonInput = CreateContainer("cAUTO_INPUT", TChain::Class(), AliAnalysisManager::kInputContainer);
- Warning("SetInputEventHandler", " An automatic input container for the input chain was created.\nPlease use: mgr->GetCommonInputContainer() to access it.");
+// Warning("SetInputEventHandler", " An automatic input container for the input chain was created.\nPlease use: mgr->GetCommonInputContainer() to access it.");
}
//______________________________________________________________________________
fOutputEventHandler = handler;
fCommonOutput = CreateContainer("cAUTO_OUTPUT", TTree::Class(), AliAnalysisManager::kOutputContainer, "default");
fCommonOutput->SetSpecialOutput();
- Warning("SetOutputEventHandler", " An automatic output container for the output tree was created.\nPlease use: mgr->GetCommonOutputContainer() to access it.");
+// Warning("SetOutputEventHandler", " An automatic output container for the output tree was created.\nPlease use: mgr->GetCommonOutputContainer() to access it.");
}
//______________________________________________________________________________
if (filename == "default") {
if (!fOutputEventHandler) continue;
filename = fOutputEventHandler->GetOutputFileName();
+ // Main AOD may not be there
+ if (gSystem->AccessPathName(filename)) continue;
}
// Check if the file is closed
if (openedFiles.Contains(filename)) continue;;