small fix to run in PROOF
authorjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 4 Apr 2007 16:11:28 +0000 (16:11 +0000)
committerjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 4 Apr 2007 16:11:28 +0000 (16:11 +0000)
ANALYSIS/AliAnalysisDataContainer.cxx
ANALYSIS/AliAnalysisManager.cxx
ANALYSIS/AliAnalysisTask.h

index eb69661268fcac21b7bfa99947ffa6ca27f87936..0aa772a5a2ddc3c195efa43128de4a35b66a8342 100644 (file)
@@ -229,12 +229,12 @@ Long64_t AliAnalysisDataContainer::Merge(TCollection *list)
    if (!callEnv.IsValid() && !list->IsEmpty()) {
       cout << "No merge interface for data stored by " << GetName() << ". Merging not possible !" << endl;
       return 1;
-   }   
-   
+   }
+
    if (list->IsEmpty()) return 1;
 
    TIter next(list);
-   AliAnalysisDataContainer *cont;   
+   AliAnalysisDataContainer *cont;
    // Make a list where to temporary store the data to be merged.
    TList *collectionData = new TList();
    Int_t count = 0; // object counter
@@ -248,12 +248,12 @@ Long64_t AliAnalysisDataContainer::Merge(TCollection *list)
       printf(" ... merging object %s\n", data->GetName());
       collectionData->Add(data);
       count++;
-   }   
+   }
    callEnv.SetParam((Long_t) collectionData);
    callEnv.Execute(fData);
    delete collectionData;
-   
-   return count+1;   
+
+   return count+1;
 }
 
 //______________________________________________________________________________
@@ -274,7 +274,8 @@ void AliAnalysisDataContainer::PrintContainer(Option_t *option, Int_t indent) co
       printf("%s = Consumer tasks: ", ind.Data());
       if (!fConsumers || !fConsumers->GetEntriesFast()) printf("-none-\n");
       else printf("\n");
-   }   
+   }
+   printf("Filename: %s\n", fFileName.Data());
    TIter next(fConsumers);
    AliAnalysisTask *task;
    while ((task=(AliAnalysisTask*)next())) task->PrintTask(option, indent+3);
@@ -300,7 +301,7 @@ Bool_t AliAnalysisDataContainer::SetData(TObject *data, Option_t *)
          }
       }      
       return kTRUE;
-   } 
+   }
    // Check if it is the producer who published the data     
    if (fProducer->GetPublishedData()==data) {
       fData = data;
index bf88c573c6cfccec43d329e579793712dd52f879..ab8e0352435d904ef559c621c5214169e0d8f9bb 100644 (file)
@@ -18,7 +18,7 @@
 
 //==============================================================================
 //   AliAnalysysManager - Manager analysis class. Allows creation of several
-// analysis tasks and data containers storing their input/output. Allows 
+// analysis tasks and data containers storing their input/output. Allows
 // connecting/chaining tasks via shared data containers. Serializes the current
 // event for all tasks depending only on initial input data.
 //==============================================================================
@@ -83,7 +83,7 @@ AliAnalysisManager::AliAnalysisManager(const char *name, const char *title)
    fZombies    = new TObjArray();
    fContainers = new TObjArray();
    fInputs     = new TObjArray();
-   fOutputs    = new TObjArray();  
+   fOutputs    = new TObjArray();
 }
 
 //______________________________________________________________________________
@@ -176,7 +176,7 @@ void AliAnalysisManager::Init(TTree *tree)
    if (!top) {
       cout<<"Error: No top input container !" <<endl;
       return;
-   }   
+   }
    top->SetData(tree);
 }
 
@@ -200,7 +200,8 @@ void AliAnalysisManager::SlaveBegin(TTree *tree)
   // The tree argument is deprecated (on PROOF 0 is passed).
    if (fDebug > 1) {
       cout << "AliAnalysisManager::SlaveBegin()" << endl;
-   }   
+   }
+
    TIter next(fTasks);
    AliAnalysisTask *task;
    // Call CreateOutputObjects for all tasks
@@ -244,10 +245,9 @@ Bool_t AliAnalysisManager::Process(Long64_t entry)
   //  The entry is always the local entry number in the current tree.
   //  Assuming that fChain is the pointer to the TChain being processed,
   //  use fChain->GetTree()->GetEntry(entry).
-  
    if (fDebug > 1) {
       cout << "AliAnalysisManager::Process()" << endl;
-   }   
+   }
    GetEntry(entry);
    ExecAnalysis();
    return kTRUE;
@@ -263,9 +263,16 @@ void AliAnalysisManager::PackOutput(TList *target)
    if (!target) {
       Error("PackOutput", "No target. Aborting.");
       return;
-   }   
+   }
 
    if (fMode == kProofAnalysis) {
+      AliAnalysisDataContainer *top = (AliAnalysisDataContainer*)fInputs->At(0);
+      if (!top) {
+          cout<<"Error: No top input container !" <<endl;
+          return;
+      }
+      top->SetData(0);
+
       TIter next(fOutputs);
       AliAnalysisDataContainer *output;
       while ((output=(AliAnalysisDataContainer*)next())) {
@@ -276,8 +283,8 @@ void AliAnalysisManager::PackOutput(TList *target)
    } 
    fContainers->Clear();
    if (fDebug > 1) {
-      printf("   ->output list contains %d containers\n", target->GetSize());  
-   }   
+      printf("   ->output list contains %d containers\n", target->GetSize());
+   }
 }
 
 //______________________________________________________________________________
@@ -297,7 +304,7 @@ void AliAnalysisManager::ReplaceOutputContainers(TList *source)
       Int_t ntasks = fTasks->GetEntries();
       AliAnalysisTask *task;
       AliAnalysisDataSlot *oslot;
-      for (Int_t i=0; i<ntasks; i++) {  
+      for (Int_t i=0; i<ntasks; i++) {
          task = (AliAnalysisTask*)fTasks->At(i);
          Int_t nout = task->GetNoutputs();
          for (Int_t iout=0; iout<nout; iout++) {
@@ -324,20 +331,22 @@ void AliAnalysisManager::UnpackOutput(TList *source)
       printf("AliAnalysisManager::UnpackOutput(): %d containers\n", source->GetSize());
       printf("   Source list contains %d containers\n", source->GetSize());
    }   
-   TCollection *collection = source;
-   if (fMode == kLocalAnalysis) collection = fOutputs;
-   TIter next(collection);
 
    if (fMode == kProofAnalysis) {
       ReplaceOutputContainers(source);
       fOutputs->Clear();
-   }   
+   }
+
+   TCollection *collection = source;
+   if (fMode == kLocalAnalysis) collection = fOutputs;
+   TIter next(collection);
+
    AliAnalysisDataContainer *output;
    while ((output=(AliAnalysisDataContainer*)next())) {
       if (fMode == kProofAnalysis) {
          output->SetDataOwned(kTRUE);
          fOutputs->Add(output);
-      }   
+      }
       if (!output->GetData()) continue;
       // Check if the output need to be written to a file.
       const char *filename = output->GetFileName();
@@ -578,7 +587,7 @@ void AliAnalysisManager::StartAnalysis(const char *type, TTree *tree)
             return;
          } 
          // Run tree-based analysis via AliAnalysisSelector  
-         gROOT->ProcessLine(".L ANALYSIS/AliAnalysisSelector.cxx+");
+         gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/AliAnalysisSelector.cxx+");
          cout << "===== RUNNING LOCAL ANALYSIS " << GetName() << " ON TREE " << tree->GetName() << endl;
          sprintf(line, "AliAnalysisSelector *selector = new AliAnalysisSelector((AliAnalysisManager*)0x%lx);",(ULong_t)this);
          gROOT->ProcessLine(line);
index 35bfd1b63f118b0a6a880e537920320fbee30365..698890cb1a09f91029d97d9faa28aa85845c1526 100644 (file)
@@ -33,14 +33,14 @@ class AliAnalysisTask : public TTask {
   };   
 
  protected:
-  Bool_t                    fReady;      // Flag if the task is ready
-  Bool_t                    fInitialized; // True if Init() was called
-  Int_t                     fNinputs;    // Number of inputs
-  Int_t                     fNoutputs;   // Number of outputs
-  Bool_t                   *fOutputReady; //[fNoutputs] Flags for output readyness
-  TObject                  *fPublishedData; // !published data
-  TObjArray                *fInputs;     // Array of input slots
-  TObjArray                *fOutputs;    // Array of output slots
+  Bool_t                    fReady;         // Flag if the task is ready
+  Bool_t                    fInitialized;   // True if Init() was called
+  Int_t                     fNinputs;       // Number of inputs
+  Int_t                     fNoutputs;      // Number of outputs
+  Bool_t                   *fOutputReady;   //[fNoutputs] Flags for output readyness
+  TObject                  *fPublishedData; //published data
+  TObjArray                *fInputs;        // Array of input slots
+  TObjArray                *fOutputs;       // Array of output slots
 
   // Define the input/output slots (called by user in the ctor of the derived class)
   //=== CALL IN THE CONSTRUCTOR OF DERIVED CLASS TO DEFINE INPUTS/OUTPUTS ===