ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */
// Author: Andrei Gheata, 31/05/2006

//==============================================================================
//   AliAnalysysTask - Class representing a basic analysis task. Any
// user-defined task should derive from it and implement the Exec() virtual
// method.
//==============================================================================
//
// A specific user analysis task have to derive from this class. The list of
// specific input and output slots have to be defined in the derived class ctor:
//
//   UserTask::UserTask(name, title)
//   {
//      DefineInput(0, TTree::Class());
//      DefineInput(1, TH1::Class());
//      ...
//      DefineOutput(0, TTree::Class());
//      DefineOutput(1, MyObject::Class());
//      ...
//   }
//
// An existing data contaner (AliAnalysisDataContainer) can be connected to the
// input/output slots of an analysis task. Containers should not be defined and
// connected by the derived analysis task, but from the level of AliAnalysisManager:
//
//   AliAnalysisManager::ConnectInput(AliAnalysisTask *task, Int_t islot,
//                                   AliAnalysisDataContainer *cont)
//   AliAnalysisManager::ConnectOutput(AliAnalysisTask *task, Int_t islot,
//                                    AliAnalysisDataContainer *cont)
// To connect a slot to a data container, the data types declared by both must
// match.
//
// The method ConnectInputData() has to be overloaded by the derived class in order to
// set the branch address or connect to a branch address in case the input
// slots are connected to trees.
// Example:
// MyAnalysisTask::ConnectInputData(Option_t *)
// {
//  // One should first check if the branch address was taken by some other task
//    char ** address = (char **)GetBranchAddress(0, "ESD");
//    if (address) {
//      fESD = (AliESD*)(*address);
//    } else {
//      fESD = new AliESD();
//      SetBranchAddress(0, "ESD", &fESD);
//    }
// }
// 
// The method LocalInit() may be implemented to call locally (on the client)
// all initialization methods of the class. It is not mandatory and was created
// in order to minimize the complexity and readability of the analysis macro.
// DO NOT create in this method the histigrams or task output objects that will
// go in the task output containers. Use CreateOutputObjects for that.
//
// The method CreateOutputObjects() has to be implemented an will contain the
// objects that should be created only once per session (e.g. output
// histograms)
//
// void MyAnalysisTask::CreateOutputObjects()
//{
  // create histograms 
//  fhPt = new TH1F("fhPt","This is the Pt distribution",15,0.1,3.1);
//  fhPt->SetStats(kTRUE);
//  fhPt->GetXaxis()->SetTitle("P_{T} [GeV]");
//  fhPt->GetYaxis()->SetTitle("#frac{dN}{dP_{T}}");
//  fhPt->GetXaxis()->SetTitleColor(1);
//  fhPt->SetMarkerStyle(kFullCircle);
// }
//
// The method Terminate() will be called by the framework once at the end of
// data processing. Overload this if needed. DO NOT ASSUME that the pointers
// to histograms defined in  CreateOutputObjects() are valid, since this is
// not true in case of PROOF. Restore the pointer values like:
//
//void MyAnalysisTask::Terminate(Option_t *) 
//{
//  fhPt = (TH1F*)GetOutputData(0);
// ...
//}

//
//==============================================================================

#include <Riostream.h>
#include <TFile.h>
#include <TClass.h>
#include <TCollection.h>
#include <TTree.h>
#include <TROOT.h>

#include "AliAnalysisTask.h"
#include "AliAnalysisDataSlot.h"
#include "AliAnalysisDataContainer.h"
#include "AliAnalysisManager.h"

ClassImp(AliAnalysisTask)

//______________________________________________________________________________
AliAnalysisTask::AliAnalysisTask()
                :fReady(kFALSE),
                 fInitialized(kFALSE),
                 fNinputs(0),
                 fNoutputs(0),
                 fOutputReady(NULL),
                 fPublishedData(NULL),
                 fInputs(NULL),
                 fOutputs(NULL),
                 fBranchNames()
{
// Default constructor.
}

//______________________________________________________________________________
AliAnalysisTask::AliAnalysisTask(const char *name, const char *title)
                :TTask(name,title),
                 fReady(kFALSE),
                 fInitialized(kFALSE),
                 fNinputs(0),
                 fNoutputs(0),
                 fOutputReady(NULL),
                 fPublishedData(NULL),
                 fInputs(NULL),
                 fOutputs(NULL),
                 fBranchNames()                 
{
// Constructor.
   fInputs      = new TObjArray(2);
   fOutputs     = new TObjArray(2);
}

//______________________________________________________________________________
AliAnalysisTask::AliAnalysisTask(const AliAnalysisTask &task)
                :TTask(task),
                 fReady(task.fReady),
                 fInitialized(task.fInitialized),
                 fNinputs(task.fNinputs),
                 fNoutputs(task.fNoutputs),                 
                 fOutputReady(NULL),
                 fPublishedData(NULL),
                 fInputs(NULL),
                 fOutputs(NULL),
                 fBranchNames(task.fBranchNames)
{
// Copy ctor.
   fInputs      = new TObjArray((fNinputs)?fNinputs:2);
   fOutputs     = new TObjArray((fNoutputs)?fNoutputs:2);
   fPublishedData = 0;
   Int_t i;
   for (i=0; i<fNinputs; i++) fInputs->AddAt(task.GetInputSlot(i),i);
   fOutputReady = new Bool_t[(fNoutputs)?fNoutputs:2];
   for (i=0; i<fNoutputs; i++) {
      fOutputReady[i] = IsOutputReady(i);
      fOutputs->AddAt(task.GetOutputSlot(i),i);
   }   
}

//______________________________________________________________________________
AliAnalysisTask::~AliAnalysisTask()
{
// Dtor.
   if (fTasks) fTasks->Clear();
   if (fInputs)  {fInputs->Delete(); delete fInputs;}
   if (fOutputs) {fOutputs->Delete(); delete fOutputs;}
}   
  
//______________________________________________________________________________
AliAnalysisTask& AliAnalysisTask::operator=(const AliAnalysisTask& task)
{
// Assignment
   if (&task == this) return *this;
   TTask::operator=(task);
   fReady       = task.IsReady();
   fInitialized = task.IsInitialized();
   fNinputs     = task.GetNinputs();
   fNoutputs    = task.GetNoutputs();
   fInputs      = new TObjArray((fNinputs)?fNinputs:2);
   fOutputs     = new TObjArray((fNoutputs)?fNoutputs:2);
   fPublishedData = 0;
   Int_t i;
   for (i=0; i<fNinputs; i++) fInputs->AddAt(new AliAnalysisDataSlot(*task.GetInputSlot(i)),i);
   fOutputReady = new Bool_t[(fNoutputs)?fNoutputs:2];
   for (i=0; i<fNoutputs; i++) {
      fOutputReady[i] = IsOutputReady(i);
      fOutputs->AddAt(new AliAnalysisDataSlot(*task.GetOutputSlot(i)),i);
   }         
   fBranchNames = task.fBranchNames;
   return *this;
}

//______________________________________________________________________________
Bool_t AliAnalysisTask::AreSlotsConnected()
{
// Check if all input/output slots are connected. If this is the case fReady=true
   fReady = kFALSE;
   if (!fNinputs || !fNoutputs) return kFALSE;
   Int_t i;
   AliAnalysisDataSlot *slot;
   for (i=0; i<fNinputs; i++) {
      slot = (AliAnalysisDataSlot*)fInputs->At(i);
      if (!slot) {
	      Error("AreSlotsConnected", "Input slot %d of task %s not defined !",i,GetName());
         return kFALSE;
      }   
      if (!slot->IsConnected()) return kFALSE;
   }   
   for (i=0; i<fNoutputs; i++) {
      slot = (AliAnalysisDataSlot*)fOutputs->At(i);
      if (!slot) {
         Error("AreSlotsConnected", "Output slot %d of task %s not defined !",i,GetName());
         return kFALSE;
      }   
      if (!slot->IsConnected()) return kFALSE;
   } 
   fReady = kTRUE;  
   return kTRUE;
}

//______________________________________________________________________________
void AliAnalysisTask::CheckNotify(Bool_t init)
{
// Check if data is available from all inputs. Change the status of the task
// accordingly. This method is called automatically for all tasks connected
// to a container where the data was published.
   if (init) fInitialized = kFALSE;
   Bool_t single_shot = IsPostEventLoop();
   AliAnalysisDataContainer *cinput;
   for (Int_t islot=0; islot<fNinputs; islot++) {
      cinput = GetInputSlot(islot)->GetContainer();
      if (!cinput->GetData() || (single_shot && !cinput->IsPostEventLoop())) {
         SetActive(kFALSE);
         return;
      }   
   }   
   SetActive(kTRUE);
   if (fInitialized) return;
   TDirectory *cursav = gDirectory;
   ConnectInputData();
   if (cursav) cursav->cd();
   fInitialized = kTRUE;
}

//______________________________________________________________________________
Bool_t AliAnalysisTask::CheckPostData() const
{
// Checks if data was posted to all outputs defined by the task. If task does
// not have output slots this returns always kTRUE.
   Bool_t dataPosted = kTRUE;
   AliAnalysisDataContainer *coutput;
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   for (Int_t islot=0; islot<fNoutputs; islot++) {
      coutput = GetOutputSlot(islot)->GetContainer();
      if (!coutput) continue;
      if (coutput->IsExchange() || !mgr->GetOutputs()->FindObject(coutput) || coutput==mgr->GetCommonOutputContainer()) continue;
      if (!coutput->GetData()) {
         Error("CheckPostData", "Data not posted for slot #%d of task %s (%s)", 
               islot, GetName(), ClassName());
         dataPosted = kFALSE;
      }   
   }
   CheckOwnership();
   return dataPosted;
}

//______________________________________________________________________________
Bool_t AliAnalysisTask::CheckOwnership() const
{
// Check ownership of containers posted on output slots (1 level only)
   TObject *outdata;
   for (Int_t islot=0; islot<fNoutputs; islot++) {
      outdata = GetOutputData(islot);
      if (outdata && outdata->InheritsFrom(TCollection::Class())) {
         TCollection *coll = (TCollection*)outdata;
         if (!coll->IsOwner()) {
            Error("CheckOwnership","####### IMPORTANT! ####### \n\n\n\
                Task %s (%s) posts a container that is not owner at output #%d. This may apply for other embedded containers. \n\n\
                ####### FIX YOUR CODE, THIS WILL PRODUCE A FATAL ERROR IN FUTURE! ##########", GetName(), ClassName(), islot);
             return kFALSE;   
         }
      }
   }
   return kTRUE;
}
      
//______________________________________________________________________________
Bool_t AliAnalysisTask::ConnectInput(Int_t islot, AliAnalysisDataContainer *cont)
{
// Connect an input slot to a data container.
   AliAnalysisDataSlot *input = GetInputSlot(islot);
   if (!input) {
      Error("ConnectInput","Input slot %i not defined for analysis task %s", islot, GetName());
      return kFALSE;
   }
   // Check type matching          
   if (!input->GetType()->InheritsFrom(cont->GetType())) {
      Error("ConnectInput","Data type %s for input %i of task %s not matching container %s of type %s",input->GetType()->GetName(), islot, GetName(), cont->GetName(), cont->GetType()->GetName());
      return kFALSE;
   }  
   // Connect the slot to the container as input          
   if (!input->ConnectContainer(cont)) return kFALSE;
   // Add this to the list of container consumers
   cont->AddConsumer(this, islot);
   AreSlotsConnected();
   return kTRUE;
}   

//______________________________________________________________________________
Bool_t AliAnalysisTask::ConnectOutput(Int_t islot, AliAnalysisDataContainer *cont)
{
// Connect an output slot to a data container.
   AliAnalysisDataSlot *output = GetOutputSlot(islot);
   if (!output) {
      Error("ConnectOutput","Output slot %i not defined for analysis task %s", islot, GetName());
      return kFALSE;
   }
   // Check type matching          
   if (!output->GetType()->InheritsFrom(cont->GetType())) {
      Error("ConnectOutput","Data type %s for output %i of task %s not matching container %s of type %s",output->GetType()->GetName(), islot, GetName(), cont->GetName(), cont->GetType()->GetName());
      return kFALSE;
   }            
   // Connect the slot to the container as output         
   if (!output->ConnectContainer(cont)) return kFALSE;
   // Set event loop type the same as for the task
   cont->SetPostEventLoop(IsPostEventLoop());
   // Declare this as the data producer
   cont->SetProducer(this, islot);
   AreSlotsConnected();
   return kTRUE;
}   

//______________________________________________________________________________
void AliAnalysisTask::DefineInput(Int_t islot, TClass *type)
{
// Define an input slot and its type.
   AliAnalysisDataSlot *input = new AliAnalysisDataSlot(type, this);
   if (fNinputs<islot+1) fNinputs = islot+1;
   fInputs->AddAtAndExpand(input, islot);
}

//______________________________________________________________________________
void AliAnalysisTask::DefineOutput(Int_t islot, TClass *type)
{
// Define an output slot and its type.
   AliAnalysisDataSlot *output = new AliAnalysisDataSlot(type, this);
   if (fNoutputs<islot+1) {
      fNoutputs = islot+1;
      if (fOutputReady) delete [] fOutputReady;
      fOutputReady = new Bool_t[fNoutputs];
      memset(fOutputReady, 0, fNoutputs*sizeof(Bool_t));
   } 
   fOutputs->AddAtAndExpand(output, islot);
}

//______________________________________________________________________________
TClass *AliAnalysisTask::GetInputType(Int_t islot) const
{
// Retreive type of a given input slot.
   AliAnalysisDataSlot *input = GetInputSlot(islot);
   if (!input) {
      Error("GetInputType","Input slot %d not defined for analysis task %s", islot, GetName());
      return NULL;
   }
   return (input->GetType());
}

//______________________________________________________________________________
TClass *AliAnalysisTask::GetOutputType(Int_t islot) const
{
// Retreive type of a given output slot.
   AliAnalysisDataSlot *output = GetOutputSlot(islot);
   if (!output) {
      Error("GetOutputType","Output slot %d not defined for analysis task %s", islot, GetName());
      return NULL;
   }
   return (output->GetType());
}

//______________________________________________________________________________
TObject *AliAnalysisTask::GetInputData(Int_t islot) const
{
// Retreive input data for a slot if ready. Normally called by Exec() and
// the object has to be statically cast to the appropriate type.
   AliAnalysisDataSlot *input = GetInputSlot(islot);
   if (!input) {
      Error("GetInputData","Input slot %d not defined for analysis task %s", islot, GetName());
      return NULL;
   }
   return (input->GetData()); 
}

//______________________________________________________________________________
TObject *AliAnalysisTask::GetOutputData(Int_t islot) const
{
// Retreive output data for a slot. Normally called in UserTask::Terminate to
// get a valid pointer to data even in case of Proof.
   AliAnalysisDataSlot *output = GetOutputSlot(islot);
   if (!output) {
      Error("GetOutputData","Input slot %d not defined for analysis task %s", islot, GetName());
      return NULL;
   }
   return (output->GetData()); 
}

//______________________________________________________________________________
char *AliAnalysisTask::GetBranchAddress(Int_t islot, const char *branch) const
{
// Check if a branch with a given name from the specified input is connected
// to some address. Call this in Init() before trying to call SetBranchAddress()
// since the adress may be set by other task.
   return (char *)GetInputSlot(islot)->GetBranchAddress(branch);
}

//______________________________________________________________________________
Bool_t AliAnalysisTask::SetBranchAddress(Int_t islot, const char *branch, void *address) const
{
// Connect an object address to a branch of the specified input.
   return GetInputSlot(islot)->SetBranchAddress(branch, address);
}   

//______________________________________________________________________________
void AliAnalysisTask::EnableBranch(Int_t islot, const char *bname) const
{
// Call this in ConnectInputData() to enable only the branches needed by this 
// task. "*" will enable everything.
   AliAnalysisDataSlot *input = GetInputSlot(islot);
   if (!input || !input->GetType()->InheritsFrom(TTree::Class())) {
      Error("EnableBranch", "Wrong slot type #%d for task %s: not TTree-derived type", islot, GetName());
      return;
   }   
   TTree *tree = (TTree*)input->GetData();
   if (!strcmp(bname, "*")) {
      tree->SetBranchStatus("*",1);
      return;
   }
   AliAnalysisDataSlot::EnableBranch(bname, tree);
}

//______________________________________________________________________________
void AliAnalysisTask::FinishTaskOutput()
{
// Optional method that is called in SlaveTerminate phase. 
// Used for calling aditional methods just after the last event was processed ON
// THE WORKING NODE. The call is made also in local case.
// Do NOT delete output objects here since they will have to be sent for 
// merging in PROOF mode - use class destructor for cleanup.
}
      
//______________________________________________________________________________
void AliAnalysisTask::ConnectInputData(Option_t *)
{
// Overload and connect your branches here.
}

//______________________________________________________________________________
void AliAnalysisTask::LocalInit()
{
// The method LocalInit() may be implemented to call locally (on the client)
// all initialization methods of the class. It is not mandatory and was created
// in order to minimize the complexity and readability of the analysis macro.
// DO NOT create in this method the histigrams or task output objects that will
// go in the task output containers. Use CreateOutputObjects for that.
}

//______________________________________________________________________________
void AliAnalysisTask::CreateOutputObjects()
{
// Called once per task either in PROOF or local mode. Overload to put some 
// task initialization and/or create your output objects here.
}

//______________________________________________________________________________
TFile *AliAnalysisTask::OpenFile(Int_t iout, Option_t *option) const
{
// This method has to be called INSIDE the user redefined CreateOutputObjects
// method, before creating each object corresponding to the output containers
// that are to be written to a file. This need to be done in general for the big output
// objects that may not fit memory during processing. 
// - 'option' is the file opening option.
//=========================================================================
// NOTE !: The method call will be ignored in PROOF mode, in which case the 
// results have to be streamed back to the client and written just before Terminate()
//=========================================================================
//
// Example:
// void MyAnaTask::CreateOutputObjects() {
//    OpenFile(0);   // Will open the file for the object to be written at output #0
//    fAOD = new TTree("AOD for D0toKPi");
//    OpenFile(1);
// now some histos that should go in the file of the second output container
//    fHist1 = new TH1F("my quality check hist1",...);
//    fHist2 = new TH2F("my quality check hist2",...);
// }
   
   if (iout<0 || iout>=fNoutputs) {
      Error("OpenFile", "No output slot for task %s with index %d", GetName(), iout);
      return NULL;
   }   
   // Method delegated to the analysis manager (A.G. 02/11/09)
   AliAnalysisDataContainer *cont = GetOutputSlot(iout)->GetContainer();
   return AliAnalysisManager::OpenFile(cont, option);
}

//______________________________________________________________________________
Bool_t AliAnalysisTask::Notify()
{
// Overload this IF you need to treat input file change.
   return kTRUE;
}

//______________________________________________________________________________
Bool_t AliAnalysisTask::NotifyBinChange()
{
// Overload this IF you need to treat bin change in event mixing.
   return kTRUE;
}

//______________________________________________________________________________
void AliAnalysisTask::Terminate(Option_t *)
{
// Method called by the framework at the end of data processing.
}

//______________________________________________________________________________
Bool_t AliAnalysisTask::PostData(Int_t iout, TObject *data, Option_t *option)
{
// Post output data for a given ouput slot in the corresponding data container.
// Published data becomes owned by the data container.
// If option is specified, the container connected to the output slot must have
// an associated file name defined. The option represents the method to open the file.
   fPublishedData = 0;
   AliAnalysisDataSlot *output = GetOutputSlot(iout);
   if (!output) {
      Error("PostData","Output slot %i not defined for analysis task %s", iout, GetName());
      return kFALSE;
   }
   if (!output->IsConnected()) {
      Error("PostData","Output slot %i of analysis task %s not connected to any data container", iout, GetName());
      return kFALSE;
   }
   if (!fOutputReady) {
      fOutputReady = new Bool_t[fNoutputs];
      memset(fOutputReady, 0, fNoutputs*sizeof(Bool_t));
   }   
   fOutputReady[iout] = kTRUE;
   fPublishedData = data;
   return (output->GetContainer()->SetData(data, option));
}

//______________________________________________________________________________
void AliAnalysisTask::SetUsed(Bool_t flag)
{
// Set 'used' flag recursively to task and all daughter tasks.
   if (TestBit(kTaskUsed)==flag) return;
   TObject::SetBit(kTaskUsed,flag);
   Int_t nd = fTasks->GetSize();
   AliAnalysisTask *task;
   for (Int_t i=0; i<nd; i++) {
      task = (AliAnalysisTask*)fTasks->At(i);
      task->SetUsed(flag);
   }
}   

//______________________________________________________________________________
void AliAnalysisTask::Reset()
{
// Clear activity flag. Reset data for exchange containers.
   fActive = kFALSE;
   fHasExecuted = kFALSE;
   // Call PostData(islot, 0) for all slots connected to exchange containers
   Int_t islot;
   AliAnalysisDataContainer *cont;
   for (islot=0; islot<fNinputs; islot++) {
      cont = GetInputSlot(islot)->GetContainer();
      if (cont && cont->IsExchange()) cont->Reset();
   }   
}
   
//______________________________________________________________________________
Bool_t AliAnalysisTask::CheckCircularDeps()
{
// Check for illegal circular dependencies, e.g. a daughter task should not have
// a hierarchical parent as subtask.
   if (IsChecked()) return kTRUE;
   SetChecked();
   TList *tasks = GetListOfTasks();
   Int_t ntasks = tasks->GetSize();
   AliAnalysisTask *task;
   for (Int_t i=0; i<ntasks; i++) {
      task = (AliAnalysisTask*)tasks->At(i);
      if (task->CheckCircularDeps()) return kTRUE;
   }
   SetChecked(kFALSE);
   return kFALSE;
}   

//______________________________________________________________________________
Bool_t AliAnalysisTask::ProducersTouched() const
{
// Check if all producer containers are in the "touched" state.
   Int_t islot;
   AliAnalysisDataContainer *cont;
   for (islot=0; islot<fNinputs; islot++) {
      cont = GetInputSlot(islot)->GetContainer();
      // Simulate the data flow so the tasks are printed only when all inputs
      // are touched
      if (cont && !cont->IsTouched()) return kFALSE;
   }
   return kTRUE;
}

//______________________________________________________________________________
void AliAnalysisTask::PrintTask(Option_t *option, Int_t indent) const
{
// Print task info.
   Int_t islot;
   AliAnalysisDataContainer *cont;
   if (fActive) return;
   if (!ProducersTouched()) return;
   TString opt(option);
   opt.ToLower();
   Bool_t dep = (opt.Contains("dep"))?kTRUE:kFALSE;
   TString ind;
   for (Int_t i=0; i<indent; i++) ind += " ";
   if (!dep || (dep && IsChecked())) {
      printf("______________________________________________________________________________\n");
      printf("%s\n", Form("%stask: %s  ACTIVE=%i POST_LOOP=%i", ind.Data(), GetName(),IsActive(),IsPostEventLoop()));
      if (dep) const_cast<AliAnalysisTask*>(this)->SetChecked(kFALSE);
      else {
         for (islot=0; islot<fNinputs; islot++) {
            printf("%s", Form("%s   INPUT #%i: %s <- ",ind.Data(),islot, GetInputType(islot)->GetName()));
            cont = GetInputSlot(islot)->GetContainer();
            if (cont) printf(" [%s]\n", cont->GetName());
            else printf(" [NO CONTAINER]\n");
         }
         for (islot=0; islot<fNoutputs; islot++) {
            printf("%s", Form("%s   OUTPUT #%i: %s -> ",ind.Data(),islot, GetOutputType(islot)->GetName()));
            cont = GetOutputSlot(islot)->GetContainer();
            if (cont) printf(" [%s]\n", cont->GetName());
            else printf(" [NO CONTAINER]\n");
         }            
      }
   }
   ((AliAnalysisTask*)this)->SetActive(kTRUE);
   PrintContainers(option, indent+3);
   if (!fBranchNames.IsNull()) printf("%sRequested branches:   %s\n", ind.Data(), fBranchNames.Data());
}      

//______________________________________________________________________________
void AliAnalysisTask::PrintContainers(Option_t *option, Int_t indent) const
{
// Print containers info.
   AliAnalysisDataContainer *cont;
   TString ind;
   for (Int_t i=0; i<indent; i++) ind += " ";
   Int_t islot;
   for (islot=0; islot<fNoutputs; islot++) {
      cont = GetOutputSlot(islot)->GetContainer();
      if (cont) cont->PrintContainer(option, indent);
   }   
}

//______________________________________________________________________________
void AliAnalysisTask::SetPostEventLoop(Bool_t flag)
{
// Set the task execution mode - run after event loop or not. All output
// containers of this task will get the same type.
   TObject::SetBit(kTaskPostEventLoop,flag);
   AliAnalysisDataContainer *cont;
   Int_t islot;
   for (islot=0; islot<fNoutputs; islot++) {
      cont = GetOutputSlot(islot)->GetContainer();
      if (cont) cont->SetPostEventLoop(flag);
   }   
}
   
//______________________________________________________________________________
void AliAnalysisTask::GetBranches(const char *type, TString &result) const
{
// Get the list of branches for a given type (ESD, AOD). The list of branches
// requested by a task has to ve declared in the form:
//   SetBranches("ESD:branch1,branch2,...,branchN AOD:branch1,branch2,...,branchM")
   result = "";
   if (fBranchNames.IsNull()) return;
   Int_t index1 = fBranchNames.Index(type);
   if (index1<0) return;
   index1 += 1+strlen(type);
   Int_t index2 = fBranchNames.Index(" ", index1);
   if (index2<0) index2 = fBranchNames.Length();
   result = fBranchNames(index1, index2-index1);
}
 AliAnalysisTask.cxx:1
 AliAnalysisTask.cxx:2
 AliAnalysisTask.cxx:3
 AliAnalysisTask.cxx:4
 AliAnalysisTask.cxx:5
 AliAnalysisTask.cxx:6
 AliAnalysisTask.cxx:7
 AliAnalysisTask.cxx:8
 AliAnalysisTask.cxx:9
 AliAnalysisTask.cxx:10
 AliAnalysisTask.cxx:11
 AliAnalysisTask.cxx:12
 AliAnalysisTask.cxx:13
 AliAnalysisTask.cxx:14
 AliAnalysisTask.cxx:15
 AliAnalysisTask.cxx:16
 AliAnalysisTask.cxx:17
 AliAnalysisTask.cxx:18
 AliAnalysisTask.cxx:19
 AliAnalysisTask.cxx:20
 AliAnalysisTask.cxx:21
 AliAnalysisTask.cxx:22
 AliAnalysisTask.cxx:23
 AliAnalysisTask.cxx:24
 AliAnalysisTask.cxx:25
 AliAnalysisTask.cxx:26
 AliAnalysisTask.cxx:27
 AliAnalysisTask.cxx:28
 AliAnalysisTask.cxx:29
 AliAnalysisTask.cxx:30
 AliAnalysisTask.cxx:31
 AliAnalysisTask.cxx:32
 AliAnalysisTask.cxx:33
 AliAnalysisTask.cxx:34
 AliAnalysisTask.cxx:35
 AliAnalysisTask.cxx:36
 AliAnalysisTask.cxx:37
 AliAnalysisTask.cxx:38
 AliAnalysisTask.cxx:39
 AliAnalysisTask.cxx:40
 AliAnalysisTask.cxx:41
 AliAnalysisTask.cxx:42
 AliAnalysisTask.cxx:43
 AliAnalysisTask.cxx:44
 AliAnalysisTask.cxx:45
 AliAnalysisTask.cxx:46
 AliAnalysisTask.cxx:47
 AliAnalysisTask.cxx:48
 AliAnalysisTask.cxx:49
 AliAnalysisTask.cxx:50
 AliAnalysisTask.cxx:51
 AliAnalysisTask.cxx:52
 AliAnalysisTask.cxx:53
 AliAnalysisTask.cxx:54
 AliAnalysisTask.cxx:55
 AliAnalysisTask.cxx:56
 AliAnalysisTask.cxx:57
 AliAnalysisTask.cxx:58
 AliAnalysisTask.cxx:59
 AliAnalysisTask.cxx:60
 AliAnalysisTask.cxx:61
 AliAnalysisTask.cxx:62
 AliAnalysisTask.cxx:63
 AliAnalysisTask.cxx:64
 AliAnalysisTask.cxx:65
 AliAnalysisTask.cxx:66
 AliAnalysisTask.cxx:67
 AliAnalysisTask.cxx:68
 AliAnalysisTask.cxx:69
 AliAnalysisTask.cxx:70
 AliAnalysisTask.cxx:71
 AliAnalysisTask.cxx:72
 AliAnalysisTask.cxx:73
 AliAnalysisTask.cxx:74
 AliAnalysisTask.cxx:75
 AliAnalysisTask.cxx:76
 AliAnalysisTask.cxx:77
 AliAnalysisTask.cxx:78
 AliAnalysisTask.cxx:79
 AliAnalysisTask.cxx:80
 AliAnalysisTask.cxx:81
 AliAnalysisTask.cxx:82
 AliAnalysisTask.cxx:83
 AliAnalysisTask.cxx:84
 AliAnalysisTask.cxx:85
 AliAnalysisTask.cxx:86
 AliAnalysisTask.cxx:87
 AliAnalysisTask.cxx:88
 AliAnalysisTask.cxx:89
 AliAnalysisTask.cxx:90
 AliAnalysisTask.cxx:91
 AliAnalysisTask.cxx:92
 AliAnalysisTask.cxx:93
 AliAnalysisTask.cxx:94
 AliAnalysisTask.cxx:95
 AliAnalysisTask.cxx:96
 AliAnalysisTask.cxx:97
 AliAnalysisTask.cxx:98
 AliAnalysisTask.cxx:99
 AliAnalysisTask.cxx:100
 AliAnalysisTask.cxx:101
 AliAnalysisTask.cxx:102
 AliAnalysisTask.cxx:103
 AliAnalysisTask.cxx:104
 AliAnalysisTask.cxx:105
 AliAnalysisTask.cxx:106
 AliAnalysisTask.cxx:107
 AliAnalysisTask.cxx:108
 AliAnalysisTask.cxx:109
 AliAnalysisTask.cxx:110
 AliAnalysisTask.cxx:111
 AliAnalysisTask.cxx:112
 AliAnalysisTask.cxx:113
 AliAnalysisTask.cxx:114
 AliAnalysisTask.cxx:115
 AliAnalysisTask.cxx:116
 AliAnalysisTask.cxx:117
 AliAnalysisTask.cxx:118
 AliAnalysisTask.cxx:119
 AliAnalysisTask.cxx:120
 AliAnalysisTask.cxx:121
 AliAnalysisTask.cxx:122
 AliAnalysisTask.cxx:123
 AliAnalysisTask.cxx:124
 AliAnalysisTask.cxx:125
 AliAnalysisTask.cxx:126
 AliAnalysisTask.cxx:127
 AliAnalysisTask.cxx:128
 AliAnalysisTask.cxx:129
 AliAnalysisTask.cxx:130
 AliAnalysisTask.cxx:131
 AliAnalysisTask.cxx:132
 AliAnalysisTask.cxx:133
 AliAnalysisTask.cxx:134
 AliAnalysisTask.cxx:135
 AliAnalysisTask.cxx:136
 AliAnalysisTask.cxx:137
 AliAnalysisTask.cxx:138
 AliAnalysisTask.cxx:139
 AliAnalysisTask.cxx:140
 AliAnalysisTask.cxx:141
 AliAnalysisTask.cxx:142
 AliAnalysisTask.cxx:143
 AliAnalysisTask.cxx:144
 AliAnalysisTask.cxx:145
 AliAnalysisTask.cxx:146
 AliAnalysisTask.cxx:147
 AliAnalysisTask.cxx:148
 AliAnalysisTask.cxx:149
 AliAnalysisTask.cxx:150
 AliAnalysisTask.cxx:151
 AliAnalysisTask.cxx:152
 AliAnalysisTask.cxx:153
 AliAnalysisTask.cxx:154
 AliAnalysisTask.cxx:155
 AliAnalysisTask.cxx:156
 AliAnalysisTask.cxx:157
 AliAnalysisTask.cxx:158
 AliAnalysisTask.cxx:159
 AliAnalysisTask.cxx:160
 AliAnalysisTask.cxx:161
 AliAnalysisTask.cxx:162
 AliAnalysisTask.cxx:163
 AliAnalysisTask.cxx:164
 AliAnalysisTask.cxx:165
 AliAnalysisTask.cxx:166
 AliAnalysisTask.cxx:167
 AliAnalysisTask.cxx:168
 AliAnalysisTask.cxx:169
 AliAnalysisTask.cxx:170
 AliAnalysisTask.cxx:171
 AliAnalysisTask.cxx:172
 AliAnalysisTask.cxx:173
 AliAnalysisTask.cxx:174
 AliAnalysisTask.cxx:175
 AliAnalysisTask.cxx:176
 AliAnalysisTask.cxx:177
 AliAnalysisTask.cxx:178
 AliAnalysisTask.cxx:179
 AliAnalysisTask.cxx:180
 AliAnalysisTask.cxx:181
 AliAnalysisTask.cxx:182
 AliAnalysisTask.cxx:183
 AliAnalysisTask.cxx:184
 AliAnalysisTask.cxx:185
 AliAnalysisTask.cxx:186
 AliAnalysisTask.cxx:187
 AliAnalysisTask.cxx:188
 AliAnalysisTask.cxx:189
 AliAnalysisTask.cxx:190
 AliAnalysisTask.cxx:191
 AliAnalysisTask.cxx:192
 AliAnalysisTask.cxx:193
 AliAnalysisTask.cxx:194
 AliAnalysisTask.cxx:195
 AliAnalysisTask.cxx:196
 AliAnalysisTask.cxx:197
 AliAnalysisTask.cxx:198
 AliAnalysisTask.cxx:199
 AliAnalysisTask.cxx:200
 AliAnalysisTask.cxx:201
 AliAnalysisTask.cxx:202
 AliAnalysisTask.cxx:203
 AliAnalysisTask.cxx:204
 AliAnalysisTask.cxx:205
 AliAnalysisTask.cxx:206
 AliAnalysisTask.cxx:207
 AliAnalysisTask.cxx:208
 AliAnalysisTask.cxx:209
 AliAnalysisTask.cxx:210
 AliAnalysisTask.cxx:211
 AliAnalysisTask.cxx:212
 AliAnalysisTask.cxx:213
 AliAnalysisTask.cxx:214
 AliAnalysisTask.cxx:215
 AliAnalysisTask.cxx:216
 AliAnalysisTask.cxx:217
 AliAnalysisTask.cxx:218
 AliAnalysisTask.cxx:219
 AliAnalysisTask.cxx:220
 AliAnalysisTask.cxx:221
 AliAnalysisTask.cxx:222
 AliAnalysisTask.cxx:223
 AliAnalysisTask.cxx:224
 AliAnalysisTask.cxx:225
 AliAnalysisTask.cxx:226
 AliAnalysisTask.cxx:227
 AliAnalysisTask.cxx:228
 AliAnalysisTask.cxx:229
 AliAnalysisTask.cxx:230
 AliAnalysisTask.cxx:231
 AliAnalysisTask.cxx:232
 AliAnalysisTask.cxx:233
 AliAnalysisTask.cxx:234
 AliAnalysisTask.cxx:235
 AliAnalysisTask.cxx:236
 AliAnalysisTask.cxx:237
 AliAnalysisTask.cxx:238
 AliAnalysisTask.cxx:239
 AliAnalysisTask.cxx:240
 AliAnalysisTask.cxx:241
 AliAnalysisTask.cxx:242
 AliAnalysisTask.cxx:243
 AliAnalysisTask.cxx:244
 AliAnalysisTask.cxx:245
 AliAnalysisTask.cxx:246
 AliAnalysisTask.cxx:247
 AliAnalysisTask.cxx:248
 AliAnalysisTask.cxx:249
 AliAnalysisTask.cxx:250
 AliAnalysisTask.cxx:251
 AliAnalysisTask.cxx:252
 AliAnalysisTask.cxx:253
 AliAnalysisTask.cxx:254
 AliAnalysisTask.cxx:255
 AliAnalysisTask.cxx:256
 AliAnalysisTask.cxx:257
 AliAnalysisTask.cxx:258
 AliAnalysisTask.cxx:259
 AliAnalysisTask.cxx:260
 AliAnalysisTask.cxx:261
 AliAnalysisTask.cxx:262
 AliAnalysisTask.cxx:263
 AliAnalysisTask.cxx:264
 AliAnalysisTask.cxx:265
 AliAnalysisTask.cxx:266
 AliAnalysisTask.cxx:267
 AliAnalysisTask.cxx:268
 AliAnalysisTask.cxx:269
 AliAnalysisTask.cxx:270
 AliAnalysisTask.cxx:271
 AliAnalysisTask.cxx:272
 AliAnalysisTask.cxx:273
 AliAnalysisTask.cxx:274
 AliAnalysisTask.cxx:275
 AliAnalysisTask.cxx:276
 AliAnalysisTask.cxx:277
 AliAnalysisTask.cxx:278
 AliAnalysisTask.cxx:279
 AliAnalysisTask.cxx:280
 AliAnalysisTask.cxx:281
 AliAnalysisTask.cxx:282
 AliAnalysisTask.cxx:283
 AliAnalysisTask.cxx:284
 AliAnalysisTask.cxx:285
 AliAnalysisTask.cxx:286
 AliAnalysisTask.cxx:287
 AliAnalysisTask.cxx:288
 AliAnalysisTask.cxx:289
 AliAnalysisTask.cxx:290
 AliAnalysisTask.cxx:291
 AliAnalysisTask.cxx:292
 AliAnalysisTask.cxx:293
 AliAnalysisTask.cxx:294
 AliAnalysisTask.cxx:295
 AliAnalysisTask.cxx:296
 AliAnalysisTask.cxx:297
 AliAnalysisTask.cxx:298
 AliAnalysisTask.cxx:299
 AliAnalysisTask.cxx:300
 AliAnalysisTask.cxx:301
 AliAnalysisTask.cxx:302
 AliAnalysisTask.cxx:303
 AliAnalysisTask.cxx:304
 AliAnalysisTask.cxx:305
 AliAnalysisTask.cxx:306
 AliAnalysisTask.cxx:307
 AliAnalysisTask.cxx:308
 AliAnalysisTask.cxx:309
 AliAnalysisTask.cxx:310
 AliAnalysisTask.cxx:311
 AliAnalysisTask.cxx:312
 AliAnalysisTask.cxx:313
 AliAnalysisTask.cxx:314
 AliAnalysisTask.cxx:315
 AliAnalysisTask.cxx:316
 AliAnalysisTask.cxx:317
 AliAnalysisTask.cxx:318
 AliAnalysisTask.cxx:319
 AliAnalysisTask.cxx:320
 AliAnalysisTask.cxx:321
 AliAnalysisTask.cxx:322
 AliAnalysisTask.cxx:323
 AliAnalysisTask.cxx:324
 AliAnalysisTask.cxx:325
 AliAnalysisTask.cxx:326
 AliAnalysisTask.cxx:327
 AliAnalysisTask.cxx:328
 AliAnalysisTask.cxx:329
 AliAnalysisTask.cxx:330
 AliAnalysisTask.cxx:331
 AliAnalysisTask.cxx:332
 AliAnalysisTask.cxx:333
 AliAnalysisTask.cxx:334
 AliAnalysisTask.cxx:335
 AliAnalysisTask.cxx:336
 AliAnalysisTask.cxx:337
 AliAnalysisTask.cxx:338
 AliAnalysisTask.cxx:339
 AliAnalysisTask.cxx:340
 AliAnalysisTask.cxx:341
 AliAnalysisTask.cxx:342
 AliAnalysisTask.cxx:343
 AliAnalysisTask.cxx:344
 AliAnalysisTask.cxx:345
 AliAnalysisTask.cxx:346
 AliAnalysisTask.cxx:347
 AliAnalysisTask.cxx:348
 AliAnalysisTask.cxx:349
 AliAnalysisTask.cxx:350
 AliAnalysisTask.cxx:351
 AliAnalysisTask.cxx:352
 AliAnalysisTask.cxx:353
 AliAnalysisTask.cxx:354
 AliAnalysisTask.cxx:355
 AliAnalysisTask.cxx:356
 AliAnalysisTask.cxx:357
 AliAnalysisTask.cxx:358
 AliAnalysisTask.cxx:359
 AliAnalysisTask.cxx:360
 AliAnalysisTask.cxx:361
 AliAnalysisTask.cxx:362
 AliAnalysisTask.cxx:363
 AliAnalysisTask.cxx:364
 AliAnalysisTask.cxx:365
 AliAnalysisTask.cxx:366
 AliAnalysisTask.cxx:367
 AliAnalysisTask.cxx:368
 AliAnalysisTask.cxx:369
 AliAnalysisTask.cxx:370
 AliAnalysisTask.cxx:371
 AliAnalysisTask.cxx:372
 AliAnalysisTask.cxx:373
 AliAnalysisTask.cxx:374
 AliAnalysisTask.cxx:375
 AliAnalysisTask.cxx:376
 AliAnalysisTask.cxx:377
 AliAnalysisTask.cxx:378
 AliAnalysisTask.cxx:379
 AliAnalysisTask.cxx:380
 AliAnalysisTask.cxx:381
 AliAnalysisTask.cxx:382
 AliAnalysisTask.cxx:383
 AliAnalysisTask.cxx:384
 AliAnalysisTask.cxx:385
 AliAnalysisTask.cxx:386
 AliAnalysisTask.cxx:387
 AliAnalysisTask.cxx:388
 AliAnalysisTask.cxx:389
 AliAnalysisTask.cxx:390
 AliAnalysisTask.cxx:391
 AliAnalysisTask.cxx:392
 AliAnalysisTask.cxx:393
 AliAnalysisTask.cxx:394
 AliAnalysisTask.cxx:395
 AliAnalysisTask.cxx:396
 AliAnalysisTask.cxx:397
 AliAnalysisTask.cxx:398
 AliAnalysisTask.cxx:399
 AliAnalysisTask.cxx:400
 AliAnalysisTask.cxx:401
 AliAnalysisTask.cxx:402
 AliAnalysisTask.cxx:403
 AliAnalysisTask.cxx:404
 AliAnalysisTask.cxx:405
 AliAnalysisTask.cxx:406
 AliAnalysisTask.cxx:407
 AliAnalysisTask.cxx:408
 AliAnalysisTask.cxx:409
 AliAnalysisTask.cxx:410
 AliAnalysisTask.cxx:411
 AliAnalysisTask.cxx:412
 AliAnalysisTask.cxx:413
 AliAnalysisTask.cxx:414
 AliAnalysisTask.cxx:415
 AliAnalysisTask.cxx:416
 AliAnalysisTask.cxx:417
 AliAnalysisTask.cxx:418
 AliAnalysisTask.cxx:419
 AliAnalysisTask.cxx:420
 AliAnalysisTask.cxx:421
 AliAnalysisTask.cxx:422
 AliAnalysisTask.cxx:423
 AliAnalysisTask.cxx:424
 AliAnalysisTask.cxx:425
 AliAnalysisTask.cxx:426
 AliAnalysisTask.cxx:427
 AliAnalysisTask.cxx:428
 AliAnalysisTask.cxx:429
 AliAnalysisTask.cxx:430
 AliAnalysisTask.cxx:431
 AliAnalysisTask.cxx:432
 AliAnalysisTask.cxx:433
 AliAnalysisTask.cxx:434
 AliAnalysisTask.cxx:435
 AliAnalysisTask.cxx:436
 AliAnalysisTask.cxx:437
 AliAnalysisTask.cxx:438
 AliAnalysisTask.cxx:439
 AliAnalysisTask.cxx:440
 AliAnalysisTask.cxx:441
 AliAnalysisTask.cxx:442
 AliAnalysisTask.cxx:443
 AliAnalysisTask.cxx:444
 AliAnalysisTask.cxx:445
 AliAnalysisTask.cxx:446
 AliAnalysisTask.cxx:447
 AliAnalysisTask.cxx:448
 AliAnalysisTask.cxx:449
 AliAnalysisTask.cxx:450
 AliAnalysisTask.cxx:451
 AliAnalysisTask.cxx:452
 AliAnalysisTask.cxx:453
 AliAnalysisTask.cxx:454
 AliAnalysisTask.cxx:455
 AliAnalysisTask.cxx:456
 AliAnalysisTask.cxx:457
 AliAnalysisTask.cxx:458
 AliAnalysisTask.cxx:459
 AliAnalysisTask.cxx:460
 AliAnalysisTask.cxx:461
 AliAnalysisTask.cxx:462
 AliAnalysisTask.cxx:463
 AliAnalysisTask.cxx:464
 AliAnalysisTask.cxx:465
 AliAnalysisTask.cxx:466
 AliAnalysisTask.cxx:467
 AliAnalysisTask.cxx:468
 AliAnalysisTask.cxx:469
 AliAnalysisTask.cxx:470
 AliAnalysisTask.cxx:471
 AliAnalysisTask.cxx:472
 AliAnalysisTask.cxx:473
 AliAnalysisTask.cxx:474
 AliAnalysisTask.cxx:475
 AliAnalysisTask.cxx:476
 AliAnalysisTask.cxx:477
 AliAnalysisTask.cxx:478
 AliAnalysisTask.cxx:479
 AliAnalysisTask.cxx:480
 AliAnalysisTask.cxx:481
 AliAnalysisTask.cxx:482
 AliAnalysisTask.cxx:483
 AliAnalysisTask.cxx:484
 AliAnalysisTask.cxx:485
 AliAnalysisTask.cxx:486
 AliAnalysisTask.cxx:487
 AliAnalysisTask.cxx:488
 AliAnalysisTask.cxx:489
 AliAnalysisTask.cxx:490
 AliAnalysisTask.cxx:491
 AliAnalysisTask.cxx:492
 AliAnalysisTask.cxx:493
 AliAnalysisTask.cxx:494
 AliAnalysisTask.cxx:495
 AliAnalysisTask.cxx:496
 AliAnalysisTask.cxx:497
 AliAnalysisTask.cxx:498
 AliAnalysisTask.cxx:499
 AliAnalysisTask.cxx:500
 AliAnalysisTask.cxx:501
 AliAnalysisTask.cxx:502
 AliAnalysisTask.cxx:503
 AliAnalysisTask.cxx:504
 AliAnalysisTask.cxx:505
 AliAnalysisTask.cxx:506
 AliAnalysisTask.cxx:507
 AliAnalysisTask.cxx:508
 AliAnalysisTask.cxx:509
 AliAnalysisTask.cxx:510
 AliAnalysisTask.cxx:511
 AliAnalysisTask.cxx:512
 AliAnalysisTask.cxx:513
 AliAnalysisTask.cxx:514
 AliAnalysisTask.cxx:515
 AliAnalysisTask.cxx:516
 AliAnalysisTask.cxx:517
 AliAnalysisTask.cxx:518
 AliAnalysisTask.cxx:519
 AliAnalysisTask.cxx:520
 AliAnalysisTask.cxx:521
 AliAnalysisTask.cxx:522
 AliAnalysisTask.cxx:523
 AliAnalysisTask.cxx:524
 AliAnalysisTask.cxx:525
 AliAnalysisTask.cxx:526
 AliAnalysisTask.cxx:527
 AliAnalysisTask.cxx:528
 AliAnalysisTask.cxx:529
 AliAnalysisTask.cxx:530
 AliAnalysisTask.cxx:531
 AliAnalysisTask.cxx:532
 AliAnalysisTask.cxx:533
 AliAnalysisTask.cxx:534
 AliAnalysisTask.cxx:535
 AliAnalysisTask.cxx:536
 AliAnalysisTask.cxx:537
 AliAnalysisTask.cxx:538
 AliAnalysisTask.cxx:539
 AliAnalysisTask.cxx:540
 AliAnalysisTask.cxx:541
 AliAnalysisTask.cxx:542
 AliAnalysisTask.cxx:543
 AliAnalysisTask.cxx:544
 AliAnalysisTask.cxx:545
 AliAnalysisTask.cxx:546
 AliAnalysisTask.cxx:547
 AliAnalysisTask.cxx:548
 AliAnalysisTask.cxx:549
 AliAnalysisTask.cxx:550
 AliAnalysisTask.cxx:551
 AliAnalysisTask.cxx:552
 AliAnalysisTask.cxx:553
 AliAnalysisTask.cxx:554
 AliAnalysisTask.cxx:555
 AliAnalysisTask.cxx:556
 AliAnalysisTask.cxx:557
 AliAnalysisTask.cxx:558
 AliAnalysisTask.cxx:559
 AliAnalysisTask.cxx:560
 AliAnalysisTask.cxx:561
 AliAnalysisTask.cxx:562
 AliAnalysisTask.cxx:563
 AliAnalysisTask.cxx:564
 AliAnalysisTask.cxx:565
 AliAnalysisTask.cxx:566
 AliAnalysisTask.cxx:567
 AliAnalysisTask.cxx:568
 AliAnalysisTask.cxx:569
 AliAnalysisTask.cxx:570
 AliAnalysisTask.cxx:571
 AliAnalysisTask.cxx:572
 AliAnalysisTask.cxx:573
 AliAnalysisTask.cxx:574
 AliAnalysisTask.cxx:575
 AliAnalysisTask.cxx:576
 AliAnalysisTask.cxx:577
 AliAnalysisTask.cxx:578
 AliAnalysisTask.cxx:579
 AliAnalysisTask.cxx:580
 AliAnalysisTask.cxx:581
 AliAnalysisTask.cxx:582
 AliAnalysisTask.cxx:583
 AliAnalysisTask.cxx:584
 AliAnalysisTask.cxx:585
 AliAnalysisTask.cxx:586
 AliAnalysisTask.cxx:587
 AliAnalysisTask.cxx:588
 AliAnalysisTask.cxx:589
 AliAnalysisTask.cxx:590
 AliAnalysisTask.cxx:591
 AliAnalysisTask.cxx:592
 AliAnalysisTask.cxx:593
 AliAnalysisTask.cxx:594
 AliAnalysisTask.cxx:595
 AliAnalysisTask.cxx:596
 AliAnalysisTask.cxx:597
 AliAnalysisTask.cxx:598
 AliAnalysisTask.cxx:599
 AliAnalysisTask.cxx:600
 AliAnalysisTask.cxx:601
 AliAnalysisTask.cxx:602
 AliAnalysisTask.cxx:603
 AliAnalysisTask.cxx:604
 AliAnalysisTask.cxx:605
 AliAnalysisTask.cxx:606
 AliAnalysisTask.cxx:607
 AliAnalysisTask.cxx:608
 AliAnalysisTask.cxx:609
 AliAnalysisTask.cxx:610
 AliAnalysisTask.cxx:611
 AliAnalysisTask.cxx:612
 AliAnalysisTask.cxx:613
 AliAnalysisTask.cxx:614
 AliAnalysisTask.cxx:615
 AliAnalysisTask.cxx:616
 AliAnalysisTask.cxx:617
 AliAnalysisTask.cxx:618
 AliAnalysisTask.cxx:619
 AliAnalysisTask.cxx:620
 AliAnalysisTask.cxx:621
 AliAnalysisTask.cxx:622
 AliAnalysisTask.cxx:623
 AliAnalysisTask.cxx:624
 AliAnalysisTask.cxx:625
 AliAnalysisTask.cxx:626
 AliAnalysisTask.cxx:627
 AliAnalysisTask.cxx:628
 AliAnalysisTask.cxx:629
 AliAnalysisTask.cxx:630
 AliAnalysisTask.cxx:631
 AliAnalysisTask.cxx:632
 AliAnalysisTask.cxx:633
 AliAnalysisTask.cxx:634
 AliAnalysisTask.cxx:635
 AliAnalysisTask.cxx:636
 AliAnalysisTask.cxx:637
 AliAnalysisTask.cxx:638
 AliAnalysisTask.cxx:639
 AliAnalysisTask.cxx:640
 AliAnalysisTask.cxx:641
 AliAnalysisTask.cxx:642
 AliAnalysisTask.cxx:643
 AliAnalysisTask.cxx:644
 AliAnalysisTask.cxx:645
 AliAnalysisTask.cxx:646
 AliAnalysisTask.cxx:647
 AliAnalysisTask.cxx:648
 AliAnalysisTask.cxx:649
 AliAnalysisTask.cxx:650
 AliAnalysisTask.cxx:651
 AliAnalysisTask.cxx:652
 AliAnalysisTask.cxx:653
 AliAnalysisTask.cxx:654
 AliAnalysisTask.cxx:655
 AliAnalysisTask.cxx:656
 AliAnalysisTask.cxx:657
 AliAnalysisTask.cxx:658
 AliAnalysisTask.cxx:659
 AliAnalysisTask.cxx:660
 AliAnalysisTask.cxx:661
 AliAnalysisTask.cxx:662
 AliAnalysisTask.cxx:663
 AliAnalysisTask.cxx:664
 AliAnalysisTask.cxx:665
 AliAnalysisTask.cxx:666
 AliAnalysisTask.cxx:667
 AliAnalysisTask.cxx:668
 AliAnalysisTask.cxx:669
 AliAnalysisTask.cxx:670
 AliAnalysisTask.cxx:671
 AliAnalysisTask.cxx:672
 AliAnalysisTask.cxx:673
 AliAnalysisTask.cxx:674
 AliAnalysisTask.cxx:675
 AliAnalysisTask.cxx:676
 AliAnalysisTask.cxx:677
 AliAnalysisTask.cxx:678
 AliAnalysisTask.cxx:679
 AliAnalysisTask.cxx:680
 AliAnalysisTask.cxx:681
 AliAnalysisTask.cxx:682
 AliAnalysisTask.cxx:683
 AliAnalysisTask.cxx:684
 AliAnalysisTask.cxx:685
 AliAnalysisTask.cxx:686
 AliAnalysisTask.cxx:687
 AliAnalysisTask.cxx:688
 AliAnalysisTask.cxx:689
 AliAnalysisTask.cxx:690
 AliAnalysisTask.cxx:691
 AliAnalysisTask.cxx:692
 AliAnalysisTask.cxx:693
 AliAnalysisTask.cxx:694
 AliAnalysisTask.cxx:695
 AliAnalysisTask.cxx:696
 AliAnalysisTask.cxx:697
 AliAnalysisTask.cxx:698
 AliAnalysisTask.cxx:699
 AliAnalysisTask.cxx:700
 AliAnalysisTask.cxx:701
 AliAnalysisTask.cxx:702
 AliAnalysisTask.cxx:703
 AliAnalysisTask.cxx:704
 AliAnalysisTask.cxx:705