From 1f87e9fbd882ee6b0ab6014c2f8cf84e14a686d7 Mon Sep 17 00:00:00 2001 From: agheata Date: Thu, 18 Feb 2010 10:51:38 +0000 Subject: [PATCH] AliAnalysisManager::StartAnalysis return now a code: -1 = failure fSelector->GetStatus() when run via TSelector 0 otherwise --- ANALYSIS/AliAnalysisManager.cxx | 44 +++++++++++++++++--------------- ANALYSIS/AliAnalysisManager.h | 4 +-- ANALYSIS/AliAnalysisSelector.cxx | 12 +++++++++ ANALYSIS/AliAnalysisSelector.h | 2 +- 4 files changed, 39 insertions(+), 23 deletions(-) diff --git a/ANALYSIS/AliAnalysisManager.cxx b/ANALYSIS/AliAnalysisManager.cxx index 51433936572..d89ca536a90 100644 --- a/ANALYSIS/AliAnalysisManager.cxx +++ b/ANALYSIS/AliAnalysisManager.cxx @@ -1084,13 +1084,13 @@ void AliAnalysisManager::ResetAnalysis() } //______________________________________________________________________________ -void AliAnalysisManager::StartAnalysis(const char *type, TTree *tree, Long64_t nentries, Long64_t firstentry) +Long64_t AliAnalysisManager::StartAnalysis(const char *type, TTree *tree, Long64_t nentries, Long64_t firstentry) { // Start analysis for this manager. Analysis task can be: LOCAL, PROOF, GRID or // MIX. Process nentries starting from firstentry if (!fInitOK) { Error("StartAnalysis","Analysis manager was not initialized !"); - return; + return -1; } if (fDebug > 0) printf("StartAnalysis %s\n",GetName()); TString anaType = type; @@ -1108,7 +1108,7 @@ void AliAnalysisManager::StartAnalysis(const char *type, TTree *tree, Long64_t n if (!fGridHandler) { Error("StartAnalysis", "Cannot start grid analysis without a grid handler."); Info("===", "Add an AliAnalysisAlien object as plugin for this manager and configure it."); - return; + return -1; } // Write analysis manager in the analysis file cout << "===== RUNNING GRID ANALYSIS: " << GetName() << endl; @@ -1120,21 +1120,21 @@ void AliAnalysisManager::StartAnalysis(const char *type, TTree *tree, Long64_t n } if (!fGridHandler->StartAnalysis(nentries, firstentry)) { Info("StartAnalysis", "Grid analysis was stopped and cannot be terminated"); - return; + return -1; } // Terminate grid analysis - if (fSelector && fSelector->GetStatus() == -1) return; - if (fGridHandler->GetRunMode() == AliAnalysisGrid::kOffline) return; + if (fSelector && fSelector->GetStatus() == -1) return -1; + if (fGridHandler->GetRunMode() == AliAnalysisGrid::kOffline) return 0; cout << "===== MERGING OUTPUTS REGISTERED BY YOUR ANALYSIS JOB: " << GetName() << endl; if (!fGridHandler->MergeOutputs()) { // Return if outputs could not be merged or if it alien handler // was configured for offline mode or local testing. - return; + return 0; } ImportWrappers(NULL); Terminate(); - return; + return 0; } char line[256]; SetEventLoop(kFALSE); @@ -1147,7 +1147,7 @@ void AliAnalysisManager::StartAnalysis(const char *type, TTree *tree, Long64_t n chain = (TChain*)tree; if (!chain || !chain->GetListOfFiles()->First()) { Error("StartAnalysis", "Cannot process null or empty chain..."); - return; + return -1; } ttype = "TChain"; } @@ -1174,11 +1174,11 @@ void AliAnalysisManager::StartAnalysis(const char *type, TTree *tree, Long64_t n if (IsExternalLoop()) { Info("StartAnalysis", "Initialization done. Event loop is controlled externally.\ \nSetData for top container, call ExecAnalysis in a loop and then Terminate manually"); - return; + return 0; } ExecAnalysis(); Terminate(); - return; + return 0; } // Run tree-based analysis via AliAnalysisSelector cout << "===== RUNNING LOCAL ANALYSIS " << GetName() << " ON TREE " << tree->GetName() << endl; @@ -1188,7 +1188,7 @@ void AliAnalysisManager::StartAnalysis(const char *type, TTree *tree, Long64_t n case kProofAnalysis: if (!gROOT->GetListOfProofs() || !gROOT->GetListOfProofs()->GetEntries()) { Error("StartAnalysis", "No PROOF!!! Aborting."); - return; + return -1; } sprintf(line, "gProof->AddInput((TObject*)0x%lx);", (ULong_t)this); gROOT->ProcessLine(line); @@ -1198,7 +1198,7 @@ void AliAnalysisManager::StartAnalysis(const char *type, TTree *tree, Long64_t n chain->Process("AliAnalysisSelector", "", nentries, firstentry); } else { Error("StartAnalysis", "No chain!!! Aborting."); - return; + return -1; } break; case kGridAnalysis: @@ -1208,7 +1208,7 @@ void AliAnalysisManager::StartAnalysis(const char *type, TTree *tree, Long64_t n // Run event mixing analysis if (!fEventPool) { Error("StartAnalysis", "Cannot run event mixing without event pool"); - return; + return -1; } cout << "===== RUNNING EVENT MIXING ANALYSIS " << GetName() << endl; fSelector = new AliAnalysisSelector(this); @@ -1221,24 +1221,26 @@ void AliAnalysisManager::StartAnalysis(const char *type, TTree *tree, Long64_t n } PackOutput(fSelector->GetOutputList()); Terminate(); - } + } + if (fSelector) return fSelector->GetStatus(); + return 0; } //______________________________________________________________________________ -void AliAnalysisManager::StartAnalysis(const char *type, const char *dataset, Long64_t nentries, Long64_t firstentry) +Long64_t AliAnalysisManager::StartAnalysis(const char *type, const char *dataset, Long64_t nentries, Long64_t firstentry) { // Start analysis for this manager on a given dataset. Analysis task can be: // LOCAL, PROOF or GRID. Process nentries starting from firstentry. if (!fInitOK) { Error("StartAnalysis","Analysis manager was not initialized !"); - return; + return -1; } if (fDebug > 0) printf("StartAnalysis %s\n",GetName()); TString anaType = type; anaType.ToLower(); if (!anaType.Contains("proof")) { Error("StartAnalysis", "Cannot process datasets in %s mode. Try PROOF.", type); - return; + return -1; } fMode = kProofAnalysis; char line[256]; @@ -1256,19 +1258,21 @@ void AliAnalysisManager::StartAnalysis(const char *type, const char *dataset, Lo if (!gROOT->GetListOfProofs() || !gROOT->GetListOfProofs()->GetEntries()) { Error("StartAnalysis", "No PROOF!!! Aborting."); - return; + return -1; } sprintf(line, "gProof->AddInput((TObject*)0x%lx);", (ULong_t)this); gROOT->ProcessLine(line); sprintf(line, "gProof->GetDataSet(\"%s\");", dataset); if (!gROOT->ProcessLine(line)) { Error("StartAnalysis", "Dataset %s not found", dataset); - return; + return -1; } sprintf(line, "gProof->Process(\"%s\", \"AliAnalysisSelector\", \"\", %lld, %lld);", dataset, nentries, firstentry); cout << "===== RUNNING PROOF ANALYSIS " << GetName() << " ON DATASET " << dataset << endl; gROOT->ProcessLine(line); + if (fSelector) return fSelector->GetStatus(); + return 0; } //______________________________________________________________________________ diff --git a/ANALYSIS/AliAnalysisManager.h b/ANALYSIS/AliAnalysisManager.h index 44051c344f3..b436f04887b 100644 --- a/ANALYSIS/AliAnalysisManager.h +++ b/ANALYSIS/AliAnalysisManager.h @@ -71,8 +71,8 @@ enum EAliAnalysisFlags { static TFile *OpenFile(AliAnalysisDataContainer *cont, const char *option, Bool_t ignoreProof=kFALSE); void PackOutput(TList *target); void RegisterExtraFile(const char *fname); - void StartAnalysis(const char *type="local", TTree *tree=0, Long64_t nentries=1234567890, Long64_t firstentry=0); - void StartAnalysis(const char *type, const char *dataset, Long64_t nentries=1234567890, Long64_t firstentry=0); + Long64_t StartAnalysis(const char *type="local", TTree *tree=0, Long64_t nentries=1234567890, Long64_t firstentry=0); + Long64_t StartAnalysis(const char *type, const char *dataset, Long64_t nentries=1234567890, Long64_t firstentry=0); virtual void SlaveBegin(TTree *tree); virtual void Terminate(); void UnpackOutput(TList *source); diff --git a/ANALYSIS/AliAnalysisSelector.cxx b/ANALYSIS/AliAnalysisSelector.cxx index 580c322940a..5e8fa35906f 100644 --- a/ANALYSIS/AliAnalysisSelector.cxx +++ b/ANALYSIS/AliAnalysisSelector.cxx @@ -31,6 +31,17 @@ ClassImp(AliAnalysisSelector) +//______________________________________________________________________________ +AliAnalysisSelector::AliAnalysisSelector() + :TSelector(), + fInitialized(kFALSE), + fAnalysis(NULL) +{ +// Dummy ctor. + fAnalysis = AliAnalysisManager::GetAnalysisManager(); + if (fAnalysis) fAnalysis->SetSelector(this); +} + //______________________________________________________________________________ AliAnalysisSelector::AliAnalysisSelector(AliAnalysisManager *mgr) :TSelector(), @@ -39,6 +50,7 @@ AliAnalysisSelector::AliAnalysisSelector(AliAnalysisManager *mgr) { // Constructor. Called by AliAnalysisManager which registers itself on the // selector running on the master. + mgr->SetSelector(this); } //______________________________________________________________________________ diff --git a/ANALYSIS/AliAnalysisSelector.h b/ANALYSIS/AliAnalysisSelector.h index cd5090dc0c7..117e033d5d7 100644 --- a/ANALYSIS/AliAnalysisSelector.h +++ b/ANALYSIS/AliAnalysisSelector.h @@ -28,7 +28,7 @@ private: void RestoreAnalysisManager(); public: - AliAnalysisSelector() : TSelector(), fInitialized(kFALSE), fAnalysis(NULL) {} + AliAnalysisSelector(); AliAnalysisSelector(AliAnalysisManager *mgr); virtual ~AliAnalysisSelector(); -- 2.39.3