]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisSelector.cxx
Added commet to explain AliAODTrack::fType, AliAODTrack::XAtDCA(), YAtDCA(), ZAtDCA...
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisSelector.cxx
index 8bc69c54c822fe7f6d6026977c4747600e60ac3a..b9d18f5b11f49cf53481372afc6bf1afad415c2b 100644 (file)
 
 #include <Riostream.h>
 #include <TProcessID.h>
+#include <TROOT.h>
 
 #include "AliAnalysisManager.h"
 #include "AliAnalysisTask.h"
 #include "AliAnalysisDataContainer.h"
 #include "AliAnalysisSelector.h"
 
+using std::cout;
+using std::endl;
 ClassImp(AliAnalysisSelector)
 
 //______________________________________________________________________________
@@ -100,6 +103,7 @@ void AliAnalysisSelector::Begin(TTree *)
    RestoreAnalysisManager();
    if (fAnalysis && fAnalysis->GetDebugLevel()>1) {
       cout << "->AliAnalysisSelector->Begin: Analysis manager restored" << endl;
+      gROOT->SetMustClean(fAnalysis->MustClean());
    }
 }
 
@@ -107,9 +111,9 @@ void AliAnalysisSelector::Begin(TTree *)
 void AliAnalysisSelector::SlaveBegin(TTree *tree)
 {
 // Called on each worker. We "unpack" analysis manager here and call InitAnalysis.
-   TObject::SetObjectStat(kFALSE);
    RestoreAnalysisManager();
    if (fAnalysis) {
+      gROOT->SetMustClean(fAnalysis->MustClean());
       if (fAnalysis->GetDebugLevel()>1) {
          cout << "->AliAnalysisSelector->SlaveBegin() after Restore" << endl;
       }   
@@ -136,16 +140,29 @@ Bool_t AliAnalysisSelector::Notify()
 Bool_t AliAnalysisSelector::Process(Long64_t entry)
 {
 // Event loop.
+   static Int_t count = 0;
+   count++;
    if (fAnalysis->GetDebugLevel() > 1) {
       cout << "->AliAnalysisSelector::Process()" << endl;
    }
-   Int_t nobjCount = TProcessID::GetObjectCount();
-   Int_t returnCode = fAnalysis->GetEntry(entry);
-   if (returnCode <= 0)
-      cout << "Error retrieving event. Skipping this event." << endl;
-   else
-     fAnalysis->ExecAnalysis();
+   static Bool_t init=kTRUE;
+   static Int_t nobjCount = 0;
+   if(init) {
+     nobjCount = TProcessID::GetObjectCount();
+     init=kFALSE;
+   }
    TProcessID::SetObjectCount(nobjCount);
+   Int_t returnCode = fAnalysis->GetEntry(entry);
+   if (returnCode <= 0) {
+      cout << "Error retrieving event:" << entry << " Skipping ..." << endl;
+      fAnalysis->CountEvent(1,0,1,0);
+      // Try to skip file
+      Abort("Bad stream to file. Trying next image.", kAbortFile);
+      return kFALSE;
+   } else {
+      fAnalysis->ExecAnalysis();
+      fAnalysis->CountEvent(1,1,0,0);
+   }   
    if (fAnalysis->GetDebugLevel() > 1) {
       cout << "<-AliAnalysisSelector::Process()" << endl;
    }   
@@ -182,6 +199,7 @@ void AliAnalysisSelector::SlaveTerminate()
   // The SlaveTerminate() function is called after all entries or objects
   // have been processed. When running with PROOF SlaveTerminate() is called
   // on each slave server.
+   gROOT->SetMustClean(kTRUE);
    if (fStatus == -1) return;  // TSelector won't abort...
    if (fAnalysis->GetAnalysisType() == AliAnalysisManager::kMixingAnalysis) return;
    if (fAnalysis->GetDebugLevel() > 1) {
@@ -199,6 +217,7 @@ void AliAnalysisSelector::Terminate()
   // The Terminate() function is the last function to be called during
   // a query. It always runs on the client, it can be used to present
   // the results graphically or save the results to file.
+   gROOT->SetMustClean(kTRUE);
    if (fStatus == -1) return;  // TSelector won't abort...
    if (!fAnalysis) {
       Error("Terminate","AliAnalysisSelector::Terminate: No analysis manager!!!");