ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2007, 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.                  *
 **************************************************************************/

// Author: Mihaela Gheata, 01/09/2008

//==============================================================================
//   AliAnalysisAlien - AliEn utility class. Provides interface for creating
// a personalized JDL, finding and creating a dataset.
//==============================================================================

#include "AliAnalysisAlien.h"

#include "Riostream.h"
#include "TEnv.h"
#include "TKey.h"
#include "TBits.h"
#include "TError.h"
#include "TROOT.h"
#include "TSystem.h"
#include "TInterpreter.h"
#include "TFile.h"
#include "TFileCollection.h"
#include "TChain.h"
#include "TObjString.h"
#include "TObjArray.h"
#include "TMacro.h"
#include "TGrid.h"
#include "TGridResult.h"
#include "TGridCollection.h"
#include "TGridJDL.h"
#include "TGridJobStatusList.h"
#include "TGridJobStatus.h"
#include "TFileMerger.h"
#include "AliAnalysisManager.h"
#include "AliAnalysisTaskCfg.h"
#include "AliVEventHandler.h"
#include "AliAnalysisDataContainer.h"
#include "AliMultiInputEventHandler.h"

using std::ofstream;
using std::ifstream;
using std::ios;
using std::endl;
ClassImp(AliAnalysisAlien)
#if 0
;
#endif  

namespace {
  Bool_t copyLocal2Alien(const char* where, const char* loc, const char* rem)
  {
    TString sl(Form("file:%s", loc));
    TString sr(Form("alien://%s", rem));
    Bool_t ret = TFile::Cp(sl, sr);
    if (!ret) { 
      Warning(where, "Failed to copy %s to %s", sl.Data(), sr.Data());
    }
    return ret;
  }
}
    
//______________________________________________________________________________
AliAnalysisAlien::AliAnalysisAlien()
                 :AliAnalysisGrid(),
                  fGridJDL(NULL),
                  fMergingJDL(NULL),
                  fPrice(0),
                  fTTL(0),
                  fSplitMaxInputFileNumber(0),
                  fMaxInitFailed(0),
                  fMasterResubmitThreshold(0),
                  fNtestFiles(0),
                  fNrunsPerMaster(0),
                  fMaxMergeFiles(0),
                  fMaxMergeStages(0),
                  fNsubmitted(0),
                  fProductionMode(0),
                  fOutputToRunNo(0),
                  fMergeViaJDL(0),
                  fFastReadOption(0),
                  fOverwriteMode(1),
                  fNreplicas(2),
                  fNproofWorkers(0),
                  fNproofWorkersPerSlave(0),
                  fProofReset(0),
                  fNMCevents(0),
                  fNMCjobs(0),
                  fRunNumbers(),
                  fExecutable(),
                  fExecutableCommand(),
                  fArguments(),
                  fExecutableArgs(),
                  fAnalysisMacro(),
                  fAnalysisSource(),
                  fValidationScript(),
                  fAdditionalRootLibs(),
                  fAdditionalLibs(),
                  fGeneratorLibs(),
                  fSplitMode(),
                  fAPIVersion(),
                  fROOTVersion(),
                  fAliROOTVersion(),
                  fExternalPackages(),
                  fUser(),
                  fGridWorkingDir(),
                  fGridDataDir(),
                  fDataPattern(),
                  fGridOutputDir(),
                  fOutputArchive(),
                  fOutputFiles(),
                  fInputFormat(),
                  fDatasetName(),
                  fJDLName(),
                  fTerminateFiles(),
		            fMergeExcludes(),
                  fRegisterExcludes(),
                  fIncludePath(),
                  fCloseSE(),
                  fFriendChainName(),
                  fJobTag(),
                  fOutputSingle(),
                  fRunPrefix(),
                  fProofCluster(),
                  fProofDataSet(),
                  fFileForTestMode(),
                  fAliRootMode(),
                  fProofProcessOpt(),
                  fMergeDirName(),
                  fInputFiles(0),
                  fPackages(0),
                  fModules(0),
                  fProofParam(),
                  fDropToShell(true),
                  fMCLoop(false),
                  fGridJobIDs(""),
                  fGridStages(""),
                  fFriendLibs(""),
                  fTreeName()
{
// Dummy ctor.
   SetDefaults();
}

//______________________________________________________________________________
AliAnalysisAlien::AliAnalysisAlien(const char *name)
                 :AliAnalysisGrid(name),
                  fGridJDL(NULL),
                  fMergingJDL(NULL),
                  fPrice(0),
                  fTTL(0),
                  fSplitMaxInputFileNumber(0),
                  fMaxInitFailed(0),
                  fMasterResubmitThreshold(0),
                  fNtestFiles(0),
                  fNrunsPerMaster(0),
                  fMaxMergeFiles(0),
                  fMaxMergeStages(0),
                  fNsubmitted(0),
                  fProductionMode(0),
                  fOutputToRunNo(0),
                  fMergeViaJDL(0),
                  fFastReadOption(0),
                  fOverwriteMode(1),
                  fNreplicas(2),
                  fNproofWorkers(0),
                  fNproofWorkersPerSlave(0),
                  fProofReset(0),
                  fNMCevents(0),
                  fNMCjobs(0),
                  fRunNumbers(),
                  fExecutable(),
                  fExecutableCommand(),
                  fArguments(),
                  fExecutableArgs(),
                  fAnalysisMacro(),
                  fAnalysisSource(),
                  fValidationScript(),
                  fAdditionalRootLibs(),
                  fAdditionalLibs(),
                  fGeneratorLibs(),
                  fSplitMode(),
                  fAPIVersion(),
                  fROOTVersion(),
                  fAliROOTVersion(),
                  fExternalPackages(),
                  fUser(),
                  fGridWorkingDir(),
                  fGridDataDir(),
                  fDataPattern(),
                  fGridOutputDir(),
                  fOutputArchive(),
                  fOutputFiles(),
                  fInputFormat(),
                  fDatasetName(),
                  fJDLName(),
                  fTerminateFiles(),
                  fMergeExcludes(),
                  fRegisterExcludes(),
                  fIncludePath(),
                  fCloseSE(),
                  fFriendChainName(),
                  fJobTag(),
                  fOutputSingle(),
                  fRunPrefix(),
                  fProofCluster(),
                  fProofDataSet(),
                  fFileForTestMode(),
                  fAliRootMode(),
                  fProofProcessOpt(),
                  fMergeDirName(),
                  fInputFiles(0),
                  fPackages(0),
                  fModules(0),
                  fProofParam(),
                  fDropToShell(true),
                  fMCLoop(false),
                  fGridJobIDs(""),
                  fGridStages(""),
                  fFriendLibs(""),
                  fTreeName()
{
// Default ctor.
   SetDefaults();
}

//______________________________________________________________________________
AliAnalysisAlien::AliAnalysisAlien(const AliAnalysisAlien& other)
                 :AliAnalysisGrid(other),
                  fGridJDL(NULL),
                  fMergingJDL(NULL),
                  fPrice(other.fPrice),
                  fTTL(other.fTTL),
                  fSplitMaxInputFileNumber(other.fSplitMaxInputFileNumber),
                  fMaxInitFailed(other.fMaxInitFailed),
                  fMasterResubmitThreshold(other.fMasterResubmitThreshold),
                  fNtestFiles(other.fNtestFiles),
                  fNrunsPerMaster(other.fNrunsPerMaster),
                  fMaxMergeFiles(other.fMaxMergeFiles),
                  fMaxMergeStages(other.fMaxMergeStages),
                  fNsubmitted(other.fNsubmitted),
                  fProductionMode(other.fProductionMode),
                  fOutputToRunNo(other.fOutputToRunNo),
                  fMergeViaJDL(other.fMergeViaJDL),
                  fFastReadOption(other.fFastReadOption),
                  fOverwriteMode(other.fOverwriteMode),
                  fNreplicas(other.fNreplicas),
                  fNproofWorkers(other.fNproofWorkers),
                  fNproofWorkersPerSlave(other.fNproofWorkersPerSlave),
                  fProofReset(other.fProofReset),
                  fNMCevents(other.fNMCevents),
                  fNMCjobs(other.fNMCjobs),
                  fRunNumbers(other.fRunNumbers),
                  fExecutable(other.fExecutable),
                  fExecutableCommand(other.fExecutableCommand),
                  fArguments(other.fArguments),
                  fExecutableArgs(other.fExecutableArgs),
                  fAnalysisMacro(other.fAnalysisMacro),
                  fAnalysisSource(other.fAnalysisSource),
                  fValidationScript(other.fValidationScript),
                  fAdditionalRootLibs(other.fAdditionalRootLibs),
                  fAdditionalLibs(other.fAdditionalLibs),
                  fGeneratorLibs(other.fGeneratorLibs),
                  fSplitMode(other.fSplitMode),
                  fAPIVersion(other.fAPIVersion),
                  fROOTVersion(other.fROOTVersion),
                  fAliROOTVersion(other.fAliROOTVersion),
                  fExternalPackages(other.fExternalPackages),
                  fUser(other.fUser),
                  fGridWorkingDir(other.fGridWorkingDir),
                  fGridDataDir(other.fGridDataDir),
                  fDataPattern(other.fDataPattern),
                  fGridOutputDir(other.fGridOutputDir),
                  fOutputArchive(other.fOutputArchive),
                  fOutputFiles(other.fOutputFiles),
                  fInputFormat(other.fInputFormat),
                  fDatasetName(other.fDatasetName),
                  fJDLName(other.fJDLName),
                  fTerminateFiles(other.fTerminateFiles),
                  fMergeExcludes(other.fMergeExcludes),
                  fRegisterExcludes(other.fRegisterExcludes),
                  fIncludePath(other.fIncludePath),
                  fCloseSE(other.fCloseSE),
                  fFriendChainName(other.fFriendChainName),
                  fJobTag(other.fJobTag),
                  fOutputSingle(other.fOutputSingle),
                  fRunPrefix(other.fRunPrefix),
                  fProofCluster(other.fProofCluster),
                  fProofDataSet(other.fProofDataSet),
                  fFileForTestMode(other.fFileForTestMode),
                  fAliRootMode(other.fAliRootMode),
                  fProofProcessOpt(other.fProofProcessOpt),
                  fMergeDirName(other.fMergeDirName),
                  fInputFiles(0),
                  fPackages(0),
                  fModules(0),
                  fProofParam(),
                  fDropToShell(other.fDropToShell),
                  fMCLoop(other.fMCLoop),
                  fGridJobIDs(other.fGridJobIDs),
                  fGridStages(other.fGridStages),
                  fFriendLibs(other.fFriendLibs),
                  fTreeName(other.fTreeName)
{
// Copy ctor.
   fGridJDL = (TGridJDL*)gROOT->ProcessLine("new TAlienJDL()");
   fMergingJDL = (TGridJDL*)gROOT->ProcessLine("new TAlienJDL()");
   fRunRange[0] = other.fRunRange[0];
   fRunRange[1] = other.fRunRange[1];
   if (other.fInputFiles) {
      fInputFiles = new TObjArray();
      TIter next(other.fInputFiles);
      TObject *obj;
      while ((obj=next())) fInputFiles->Add(new TObjString(obj->GetName()));
      fInputFiles->SetOwner();
   }   
   if (other.fPackages) {
      fPackages = new TObjArray();
      TIter next(other.fPackages);
      TObject *obj;
      while ((obj=next())) fPackages->Add(new TObjString(obj->GetName()));
      fPackages->SetOwner();
   }   
   if (other.fModules) {
      fModules = new TObjArray();
      fModules->SetOwner();
      TIter next(other.fModules);
      AliAnalysisTaskCfg *mod, *crt;
      while ((crt=(AliAnalysisTaskCfg*)next())) {
         mod = new AliAnalysisTaskCfg(*crt);
         fModules->Add(mod);
      }
   }   
}

//______________________________________________________________________________
AliAnalysisAlien::~AliAnalysisAlien()
{
// Destructor.
   delete fGridJDL;
   delete fMergingJDL;
   delete fInputFiles;
   delete fPackages;
   delete fModules;
   fProofParam.DeleteAll();
}   

//______________________________________________________________________________
AliAnalysisAlien &AliAnalysisAlien::operator=(const AliAnalysisAlien& other)
{
// Assignment.
   if (this != &other) {
      AliAnalysisGrid::operator=(other);
      fGridJDL = (TGridJDL*)gROOT->ProcessLine("new TAlienJDL()");
      fMergingJDL = (TGridJDL*)gROOT->ProcessLine("new TAlienJDL()");
      fPrice                   = other.fPrice;
      fTTL                     = other.fTTL;
      fSplitMaxInputFileNumber = other.fSplitMaxInputFileNumber;
      fMaxInitFailed           = other.fMaxInitFailed;
      fMasterResubmitThreshold = other.fMasterResubmitThreshold;
      fNtestFiles              = other.fNtestFiles;
      fNrunsPerMaster          = other.fNrunsPerMaster;
      fMaxMergeFiles           = other.fMaxMergeFiles;
      fMaxMergeStages          = other.fMaxMergeStages;
      fNsubmitted              = other.fNsubmitted;
      fProductionMode          = other.fProductionMode;
      fOutputToRunNo           = other.fOutputToRunNo;
      fMergeViaJDL             = other.fMergeViaJDL;
      fFastReadOption          = other.fFastReadOption;
      fOverwriteMode           = other.fOverwriteMode;
      fNreplicas               = other.fNreplicas;
      fNproofWorkers           = other.fNproofWorkers;
      fNproofWorkersPerSlave   = other.fNproofWorkersPerSlave;
      fProofReset              = other.fProofReset;
      fNMCevents               = other.fNMCevents;
      fNMCjobs                 = other.fNMCjobs;
      fRunNumbers              = other.fRunNumbers;
      fExecutable              = other.fExecutable;
      fExecutableCommand       = other.fExecutableCommand;
      fArguments               = other.fArguments;
      fExecutableArgs          = other.fExecutableArgs;
      fAnalysisMacro           = other.fAnalysisMacro;
      fAnalysisSource          = other.fAnalysisSource;
      fValidationScript        = other.fValidationScript;
      fAdditionalRootLibs      = other.fAdditionalRootLibs;
      fAdditionalLibs          = other.fAdditionalLibs;
      fGeneratorLibs           = other.fGeneratorLibs;
      fSplitMode               = other.fSplitMode;
      fAPIVersion              = other.fAPIVersion;
      fROOTVersion             = other.fROOTVersion;
      fAliROOTVersion          = other.fAliROOTVersion;
      fExternalPackages        = other.fExternalPackages;
      fUser                    = other.fUser;
      fGridWorkingDir          = other.fGridWorkingDir;
      fGridDataDir             = other.fGridDataDir;
      fDataPattern             = other.fDataPattern;
      fGridOutputDir           = other.fGridOutputDir;
      fOutputArchive           = other.fOutputArchive;
      fOutputFiles             = other.fOutputFiles;
      fInputFormat             = other.fInputFormat;
      fDatasetName             = other.fDatasetName;
      fJDLName                 = other.fJDLName;
      fTerminateFiles          = other.fTerminateFiles;
      fMergeExcludes           = other.fMergeExcludes;
      fRegisterExcludes        = other.fRegisterExcludes;
      fIncludePath             = other.fIncludePath;
      fCloseSE                 = other.fCloseSE;
      fFriendChainName         = other.fFriendChainName;
      fJobTag                  = other.fJobTag;
      fOutputSingle            = other.fOutputSingle;
      fRunPrefix               = other.fRunPrefix;
      fProofCluster            = other.fProofCluster;
      fProofDataSet            = other.fProofDataSet;
      fFileForTestMode         = other.fFileForTestMode;
      fAliRootMode             = other.fAliRootMode;
      fProofProcessOpt         = other.fProofProcessOpt;
      fMergeDirName            = other.fMergeDirName;
      fDropToShell             = other.fDropToShell;
      fMCLoop                  = other.fMCLoop;
      fGridJobIDs              = other.fGridJobIDs;
      fGridStages              = other.fGridStages;
      fFriendLibs              = other.fFriendLibs;
      fTreeName                = other.fTreeName;
      if (other.fInputFiles) {
         fInputFiles = new TObjArray();
         TIter next(other.fInputFiles);
         TObject *obj;
         while ((obj=next())) fInputFiles->Add(new TObjString(obj->GetName()));
         fInputFiles->SetOwner();
      }   
      if (other.fPackages) {
         fPackages = new TObjArray();
         TIter next(other.fPackages);
         TObject *obj;
         while ((obj=next())) fPackages->Add(new TObjString(obj->GetName()));
         fPackages->SetOwner();
      }   
      if (other.fModules) {
         fModules = new TObjArray();
         fModules->SetOwner();
         TIter next(other.fModules);
         AliAnalysisTaskCfg *mod, *crt;
         while ((crt=(AliAnalysisTaskCfg*)next())) {
            mod = new AliAnalysisTaskCfg(*crt);
            fModules->Add(mod);
         }
      }   
   }
   return *this;
}

//______________________________________________________________________________
void AliAnalysisAlien::AddAdditionalLibrary(const char *name)
{
// Add a single additional library to be loaded. Extension must be present.
   TString lib(name);
   if (!lib.Contains(".")) {
      Error("AddAdditionalLibrary", "Extension not defined for %s", name);
      return;
   }
   if (fAdditionalLibs.Contains(name)) {
      Warning("AddAdditionalLibrary", "Library %s already added.", name);
      return;
   }
   if (!fAdditionalLibs.IsNull()) fAdditionalLibs += " ";
   fAdditionalLibs += lib;
}   

//______________________________________________________________________________
void AliAnalysisAlien::AddModule(AliAnalysisTaskCfg *module)
{
// Adding a module. Checks if already existing. Becomes owned by this.
   if (!module) return;
   if (GetModule(module->GetName())) {
      Error("AddModule", "A module having the same name %s already added", module->GetName());
      return;
   }
   if (!fModules) {
      fModules = new TObjArray();
      fModules->SetOwner();
   }
   fModules->Add(module);
}

//______________________________________________________________________________
void AliAnalysisAlien::AddModules(TObjArray *list)
{
// Adding a list of modules. Checks if already existing. Becomes owned by this.
   TIter next(list);
   AliAnalysisTaskCfg *module;
   while ((module = (AliAnalysisTaskCfg*)next())) AddModule(module);
}   

//______________________________________________________________________________
Bool_t AliAnalysisAlien::CheckDependencies()
{
// Check if all dependencies are satisfied. Reorder modules if needed.
   Int_t nmodules = GetNmodules();
   if (!nmodules) {
      Warning("CheckDependencies", "No modules added yet to check their dependencies");
      return kTRUE;
   }   
   AliAnalysisTaskCfg *mod = 0;
   AliAnalysisTaskCfg *dep = 0;
   TString depname;
   Int_t i, j, k;
   for (i=0; i<nmodules; i++) {
      mod = (AliAnalysisTaskCfg*) fModules->At(i);
      Int_t ndeps = mod->GetNdeps();
      Int_t istart = i;
      for (j=0; j<ndeps; j++) {
         depname = mod->GetDependency(j);
         dep = GetModule(depname);
         if (!dep) {
            Error("CheckDependencies","Dependency %s not added for module %s",
                   depname.Data(), mod->GetName());
            return kFALSE;
         }
         if (dep->NeedsDependency(mod->GetName())) {
            Error("CheckDependencies","Modules %s and %s circularly depend on each other",
                   mod->GetName(), dep->GetName());
            return kFALSE;
         }                  
         Int_t idep = fModules->IndexOf(dep);
         // The dependency task must come first
         if (idep>i) {
            // Remove at idep and move all objects below up one slot
            // down to index i included.
            fModules->RemoveAt(idep);
            for (k=idep-1; k>=i; k--) fModules->AddAt(fModules->RemoveAt(k),k+1);
            fModules->AddAt(dep, i++);
         }
         //Redo from istart if dependencies were inserted
         if (i>istart) i=istart-1;
      }
   }
   return kTRUE;
}      

//______________________________________________________________________________
AliAnalysisManager *AliAnalysisAlien::CreateAnalysisManager(const char *name, const char *filename)
{
// Create the analysis manager and optionally execute the macro in filename.
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (mgr) {
      mgr->SetMCLoop(fMCLoop);
      return mgr;
   }   
   mgr = new AliAnalysisManager(name);
   mgr->SetGridHandler((AliAnalysisGrid*)this);
   mgr->SetMCLoop(fMCLoop);
   if (strlen(filename)) {
      TString line = gSystem->ExpandPathName(filename);
      line.Prepend(".x ");
      gROOT->ProcessLine(line.Data());
   }
   return mgr;
}      
      
//______________________________________________________________________________
Int_t AliAnalysisAlien::GetNmodules() const
{
// Get number of modules.
   if (!fModules) return 0;
   return fModules->GetEntries();
}

//______________________________________________________________________________
AliAnalysisTaskCfg *AliAnalysisAlien::GetModule(const char *name)
{
// Get a module by name.
   if (!fModules) return 0;
   return (AliAnalysisTaskCfg*)fModules->FindObject(name);
}
   
//______________________________________________________________________________
Bool_t AliAnalysisAlien::LoadModule(AliAnalysisTaskCfg *mod)
{
// Load a given module.
   if (mod->IsLoaded()) return kTRUE;
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
      Error("LoadModule", "No analysis manager created yet. Use CreateAnalysisManager first.");
      return kFALSE;
   }   
   Int_t ndeps = mod->GetNdeps();
   TString depname;
   for (Int_t j=0; j<ndeps; j++) {
      depname = mod->GetDependency(j);
      AliAnalysisTaskCfg *dep = GetModule(depname);
      if (!dep) {
         Error("LoadModule","Dependency %s not existing for module %s",
                depname.Data(), mod->GetName());
         return kFALSE;
      }
      if (!LoadModule(dep)) {
         Error("LoadModule","Dependency %s for module %s could not be loaded",
                depname.Data(), mod->GetName());
         return kFALSE;
      }
   }
   // Load libraries for the module
   if (!mod->CheckLoadLibraries()) {
      Error("LoadModule", "Cannot load all libraries for module %s", mod->GetName());
      return kFALSE;
   }
   // Check if a custom file name was requested
   if (strlen(mod->GetOutputFileName())) mgr->SetCommonFileName(mod->GetOutputFileName());

   // Check if a custom terminate file name was requested
   if (strlen(mod->GetTerminateFileName())) {
      if (!fTerminateFiles.IsNull()) fTerminateFiles += ",";
      fTerminateFiles += mod->GetTerminateFileName();
   }   

   // Execute the macro
   if (mod->ExecuteMacro()<0) {
      Error("LoadModule", "Executing the macro %s with arguments: %s for module %s returned a negative value",
             mod->GetMacroName(), mod->GetMacroArgs(), mod->GetName());
      return kFALSE;
   }
   // Configure dependencies
   if (mod->GetConfigMacro() && mod->ExecuteConfigMacro()<0) {
      Error("LoadModule", "There was an error executing the deps config macro %s for module %s",
            mod->GetConfigMacro()->GetTitle(), mod->GetName());
      return kFALSE;
   }
   // Adjust extra libraries
   Int_t nlibs = mod->GetNlibs();
   TString lib;
   for (Int_t i=0; i<nlibs; i++) {
      lib = mod->GetLibrary(i);
      lib = Form("lib%s.so", lib.Data());
      if (fAdditionalLibs.Contains(lib)) continue;
      if (!fAdditionalLibs.IsNull()) fAdditionalLibs += " ";
      fAdditionalLibs += lib;
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t AliAnalysisAlien::GenerateTrain(const char *name)
{
// Generate the full train.
   fAdditionalLibs = "";
   if (!LoadModules()) return kFALSE;
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr->InitAnalysis()) return kFALSE;
   mgr->RunLocalInit();
   mgr->PrintStatus();
   Int_t productionMode = fProductionMode;
   SetProductionMode();
   TString macro = fAnalysisMacro;
   TString executable = fExecutable;
   TString validation = fValidationScript;
   TString execCommand = fExecutableCommand;
   SetAnalysisMacro(Form("%s.C", name));
   SetExecutable(Form("%s.sh", name));
//   SetExecutableCommand("aliroot -b -q ");
   SetValidationScript(Form("%s_validation.sh", name));
   StartAnalysis();
   SetProductionMode(productionMode);
   fAnalysisMacro = macro;
   fExecutable = executable;
   fExecutableCommand = execCommand;
   fValidationScript = validation;
   return kTRUE;   
}   

//______________________________________________________________________________
Bool_t AliAnalysisAlien::GenerateTest(const char *name, const char *modname)
{
// Generate test macros for a single module or for the full train.
   fAdditionalLibs = "";
   if (strlen(modname)) {
      if (!CheckDependencies()) return kFALSE;
      AliAnalysisTaskCfg *mod = GetModule(modname);
      if (!mod) {
         Error("GenerateTest", "cannot generate test for inexistent module %s", modname);
         return kFALSE;
      }
      if (!LoadModule(mod)) return kFALSE;
      if (!LoadFriendLibs()) return kFALSE;
   } else if (!LoadModules()) return kFALSE;
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr->InitAnalysis()) return kFALSE;
   mgr->RunLocalInit();
   mgr->PrintStatus();
   SetLocalTest(kTRUE);
   Int_t productionMode = fProductionMode;
   SetProductionMode();
   TString macro = fAnalysisMacro;
   TString executable = fExecutable;
   TString validation = fValidationScript;
   TString execCommand = fExecutableCommand;
   SetAnalysisMacro(Form("%s.C", name));
   SetExecutable(Form("%s.sh", name));
      fOutputFiles = GetListOfFiles("outaod");
      // Add extra files registered to the analysis manager
      TString extra = GetListOfFiles("ext");
      if (!extra.IsNull()) {
         extra.ReplaceAll(".root", "*.root");
         if (!fOutputFiles.IsNull()) fOutputFiles += ",";
         fOutputFiles += extra;
      }
//   SetExecutableCommand("aliroot -b -q ");
   SetValidationScript(Form("%s_validation.sh", name));
   WriteAnalysisFile();   
   WriteAnalysisMacro();
   WriteExecutable();
   WriteValidationScript();   
   WriteMergingMacro();
   WriteMergeExecutable();
   WriteValidationScript(kTRUE);
   SetLocalTest(kFALSE);
   SetProductionMode(productionMode);
   fAnalysisMacro = macro;
   fExecutable = executable;
   fExecutableCommand = execCommand;
   fValidationScript = validation;
   return kTRUE;   
}

//______________________________________________________________________________
Bool_t AliAnalysisAlien::LoadModules()
{
// Load all modules by executing the AddTask macros. Checks first the dependencies.
   fAdditionalLibs = "";
   Int_t nmodules = GetNmodules();
   if (!nmodules) {
      Warning("LoadModules", "No module to be loaded");
      return kTRUE;
   }   
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
      Error("LoadModules", "No analysis manager created yet. Use CreateAnalysisManager first.");
      return kFALSE;
   }   
   if (!CheckDependencies()) return kFALSE;
   nmodules = GetNmodules();
   AliAnalysisTaskCfg *mod;
   for (Int_t imod=0; imod<nmodules; imod++) {
      mod = (AliAnalysisTaskCfg*)fModules->At(imod);
      if (!LoadModule(mod)) return kFALSE;
   }
   // Load additional friend libraries
   return LoadFriendLibs();
}      

//______________________________________________________________________________
Bool_t AliAnalysisAlien::LoadFriendLibs() const
{
// Load libraries required for reading friends.
   if (fFriendLibs.Length()) {
      TObjArray *list = 0;
      TString lib;
      if (fFriendLibs.Contains(",")) list  = fFriendLibs.Tokenize(",");
      else                           list  = fFriendLibs.Tokenize(" ");
      for (Int_t ilib=0; ilib<list->GetEntriesFast(); ilib++) {
         lib = list->At(ilib)->GetName();
         lib.ReplaceAll(".so","");
         lib.ReplaceAll(".dylib","");
         lib.ReplaceAll(" ","");
         if (lib.BeginsWith("lib")) lib.Remove(0, 3);
         lib.Prepend("lib");
         Int_t loaded = strlen(gSystem->GetLibraries(lib,"",kFALSE));
         if (!loaded) loaded = gSystem->Load(lib);
         if (loaded < 0) {
            Error("LoadModules", "Cannot load library for friends %s", lib.Data());
            return kFALSE;
         }
      }
      delete list;
   }
   return kTRUE;
}   

//______________________________________________________________________________
void AliAnalysisAlien::SetRunPrefix(const char *prefix)
{
// Set the run number format. Can be a prefix or a format like "%09d"
   fRunPrefix = prefix;
   if (!fRunPrefix.Contains("%")) fRunPrefix += "%d";
}   

//______________________________________________________________________________
void AliAnalysisAlien::AddIncludePath(const char *path)
{
// Add include path in the remote analysis macro.
   TString p(path);
   if (p.Contains("-I")) fIncludePath += Form("%s ", path);
   else                  fIncludePath += Form("-I%s ", path);
}

//______________________________________________________________________________
void AliAnalysisAlien::AddRunNumber(Int_t run)
{
// Add a run number to the list of runs to be processed.
   if (fRunNumbers.Length()) fRunNumbers += " ";
   fRunNumbers += Form(fRunPrefix.Data(), run);
}   

//______________________________________________________________________________
void AliAnalysisAlien::AddRunList(const char* runList)
{
// Add several runs into the list of runs; they are expected to be separated by a blank character.  
  TString    sList = runList;
  TObjArray *list  = sList.Tokenize(" ");
  Int_t n = list->GetEntries();
  for (Int_t i = 0; i < n; i++) {
    TObjString *os = (TObjString*)list->At(i);
    AddRunNumber(os->GetString().Atoi());
  }
  delete list;
}

//______________________________________________________________________________
void AliAnalysisAlien::AddRunNumber(const char* run)
{
// Add a run number to the list of runs to be processed.
   TString runs = run;
   TObjString *os;
   TObjArray *arr = runs.Tokenize(" ");
   TIter next(arr);
   TString prefix; 
   prefix.Append(fRunPrefix, fRunPrefix.Index("%d"));
   while ((os=(TObjString*)next())){
       if (fRunNumbers.Length()) fRunNumbers += " ";
       fRunNumbers += Form("%s%s", prefix.Data(), os->GetString().Data());
   }
   delete arr;
}   

//______________________________________________________________________________
void AliAnalysisAlien::AddDataFile(const char *lfn)
{
// Adds a data file to the input to be analysed. The file should be a valid LFN
// or point to an existing file in the alien workdir.
   if (!fInputFiles) fInputFiles = new TObjArray();
   fInputFiles->Add(new TObjString(lfn));
}

//______________________________________________________________________________
void AliAnalysisAlien::AddExternalPackage(const char *package)
{
// Adds external packages w.r.t to the default ones (root,aliroot and gapi)
   if (fExternalPackages) fExternalPackages += " ";
   fExternalPackages += package;
}   
      
//______________________________________________________________________________
Bool_t AliAnalysisAlien::Connect()
{
// Try to connect to AliEn. User needs a valid token and /tmp/gclient_env_$UID sourced.
   if (gGrid && gGrid->IsConnected()) return kTRUE;
   if (fProductionMode) return kTRUE;
   if (!gGrid) {
      Info("Connect", "Trying to connect to AliEn ...");
      TGrid::Connect("alien://");
   }
   if (!gGrid || !gGrid->IsConnected()) {
      Error("Connect", "Did not managed to connect to AliEn. Make sure you have a valid token.");
      return kFALSE;
   }  
   fUser = gGrid->GetUser();
   Info("Connect", "\n#####   Connected to AliEn as user %s. Setting analysis user to <%s>", fUser.Data(), fUser.Data());
   return kTRUE;
}

//______________________________________________________________________________
void AliAnalysisAlien::CdWork()
{
// Check validity of alien workspace. Create directory if possible.
   if (!Connect()) {
      Error("CdWork", "Alien connection required");
      return;
   } 
   TString homedir = gGrid->GetHomeDirectory();
   TString workdir = homedir + fGridWorkingDir;
   if (DirectoryExists(workdir)) {
      gGrid->Cd(workdir);
      return;
   }   
   // Work directory not existing - create it
   gGrid->Cd(homedir);
   if (gGrid->Mkdir(workdir, "-p")) {
      gGrid->Cd(fGridWorkingDir);
      Info("CdWork", "\n#####   Created alien working directory %s", fGridWorkingDir.Data());
   } else {
      Warning("CdWork", "Working directory %s cannot be created.\n Using %s instead.",
              workdir.Data(), homedir.Data());
      fGridWorkingDir = "";
   }          
}

//______________________________________________________________________________
Bool_t AliAnalysisAlien::CheckFileCopy(const char *alienpath)
{
// Check if file copying is possible.
   if (fProductionMode) return kTRUE;
   TString salienpath(alienpath);
   if (salienpath.Contains(" ")) {
      Error("CheckFileCopy", "path: <%s> contains blancs - FIX IT !",alienpath);
      return kFALSE;
   }   
   if (!Connect()) {
      Error("CheckFileCopy", "Not connected to AliEn. File copying cannot be tested.");
      return kFALSE;
   }
   Info("CheckFileCopy", "Checking possibility to copy files to your AliEn home directory... \
        \n +++ NOTE: You can disable this via: plugin->SetCheckCopy(kFALSE);");
   // Check if alien_CLOSE_SE is defined
   TString closeSE = gSystem->Getenv("alien_CLOSE_SE");
   if (!closeSE.IsNull()) {
      Info("CheckFileCopy", "Your current close storage is pointing to: \
           \n      alien_CLOSE_SE = \"%s\"", closeSE.Data());
   } else {
      Warning("CheckFileCopy", "Your current close storage is empty ! Depending on your location, file copying may fail.");
   }        
   // Check if grid directory exists.
   if (!DirectoryExists(alienpath)) {
      Error("CheckFileCopy", "Alien path %s does not seem to exist", alienpath);
      return kFALSE;
   }
   TString stest = "plugin_test_copy";
   TFile f(stest, "RECREATE");
   // User may not have write permissions to current directory 
   if (f.IsZombie()) {
      Error("CheckFileCopy", "Cannot create local test file. Do you have write access to current directory: <%s> ?",
            gSystem->WorkingDirectory());
      return kFALSE;
   }
   f.Close();
   if (FileExists(Form("alien://%s/%s",alienpath, stest.Data()))) gGrid->Rm(Form("alien://%s/%s",alienpath, stest.Data()));
   if (!TFile::Cp(stest.Data(), Form("alien://%s/%s",alienpath, stest.Data()))) {
      Error("CheckFileCopy", "Cannot copy files to Alien destination: <%s> This may be temporary, or: \
           \n# 1. Make sure you have write permissions there. If this is the case: \
           \n# 2. Check the storage availability at: http://alimonitor.cern.ch/stats?page=SE/table \
           \n#    Do:           export alien_CLOSE_SE=\"working_disk_SE\" \
           \n#    To make this permanent put in in your .bashrc (in .alienshrc is not enough) \
           \n#    Redo token:   rm /tmp/x509up_u$UID then: alien-token-init <username>", alienpath);
      gSystem->Unlink(stest.Data());
      return kFALSE;
   }   
   gSystem->Unlink(stest.Data());
   gGrid->Rm(Form("%s/%s",alienpath,stest.Data()));
   Info("CheckFileCopy", "### ...SUCCESS ###");
   return kTRUE;
}   

//______________________________________________________________________________
Bool_t AliAnalysisAlien::CheckInputData()
{
// Check validity of input data. If necessary, create xml files.
   if (fProductionMode) return kTRUE;
   if (!fInputFiles && !fRunNumbers.Length() && !fRunRange[0]) {
      if (!fGridDataDir.Length()) {
         Error("CkeckInputData", "AliEn path to base data directory must be set.\n = Use: SetGridDataDir()");
         return kFALSE;
      }
      if (fMergeViaJDL) {
         Error("CheckInputData", "Merging via jdl works only with run numbers, run range or provided xml");
         return kFALSE;
      }   
      Info("CheckInputData", "Analysis will make a single xml for base data directory %s",fGridDataDir.Data());
      if (fDataPattern.Contains("tag") && TestBit(AliAnalysisGrid::kTest))
         TObject::SetBit(AliAnalysisGrid::kUseTags, kTRUE); // ADDED (fix problem in determining the tag usage in test mode) 
      return kTRUE;
   }
   // Process declared files
   Bool_t isCollection = kFALSE;
   Bool_t isXml = kFALSE;
   Bool_t useTags = kFALSE;
   Bool_t checked = kFALSE;
   if (!TestBit(AliAnalysisGrid::kTest)) CdWork();
   TString file;
   TString workdir = gGrid->GetHomeDirectory();
   workdir += fGridWorkingDir;
   if (fInputFiles) {
      TObjString *objstr;
      TIter next(fInputFiles);
      while ((objstr=(TObjString*)next())) {
         file = workdir;
         file += "/";
         file += objstr->GetString();
         // Store full lfn path
         if (FileExists(file)) objstr->SetString(file);
         else {
            file = objstr->GetName();
            if (!FileExists(objstr->GetName())) {
               Error("CheckInputData", "Data file %s not found or not in your working dir: %s",
                     objstr->GetName(), workdir.Data());
               return kFALSE;
            }         
         }
         Bool_t iscoll, isxml, usetags;
         CheckDataType(file, iscoll, isxml, usetags);
         if (!checked) {
            checked = kTRUE;
            isCollection = iscoll;
            isXml = isxml;
            useTags = usetags;
            TObject::SetBit(AliAnalysisGrid::kUseTags, useTags);
         } else {
            if ((iscoll != isCollection) || (isxml != isXml) || (usetags != useTags)) {
               Error("CheckInputData", "Some conflict was found in the types of inputs");
               return kFALSE;
            } 
         }
      }
   }
   // Process requested run numbers
   if (!fRunNumbers.Length() && !fRunRange[0]) return kTRUE;
   // Check validity of alien data directory
   if (!fGridDataDir.Length()) {
      Error("CkeckInputData", "AliEn path to base data directory must be set.\n = Use: SetGridDataDir()");
      return kFALSE;
   }
   if (!DirectoryExists(fGridDataDir)) {
      Error("CheckInputData", "Data directory %s not existing.", fGridDataDir.Data());
      return kFALSE;
   }
   if (isCollection) {
      Error("CheckInputData", "You are using raw AliEn collections as input. Cannot process run numbers.");
      return kFALSE;   
   }
   
   if (checked && !isXml) {
      Error("CheckInputData", "Cannot mix processing of full runs with non-xml files");
      return kFALSE;   
   }
   // Check validity of run number(s)
   TObjArray *arr;
   TObjString *os;
   TString format;
   Int_t nruns = 0;
   TString schunk, schunk2;
   TString path;
   if (!checked) {
      checked = kTRUE;
      useTags = fDataPattern.Contains("tag");
      TObject::SetBit(AliAnalysisGrid::kUseTags, useTags);
   }   
   if (useTags != fDataPattern.Contains("tag")) {
      Error("CheckInputData", "Cannot mix input files using/not using tags");
      return kFALSE;
   }
   if (fRunNumbers.Length()) {
      Info("CheckDataType", "Using supplied run numbers (run ranges are ignored)");
      arr = fRunNumbers.Tokenize(" ");
      TIter next(arr);
      while ((os=(TObjString*)next())) {
         path = Form("%s/%s ", fGridDataDir.Data(), os->GetString().Data());
         if (!DirectoryExists(path)) {
            Warning("CheckInputData", "Run number %s not found in path: <%s>", os->GetString().Data(), path.Data());
            continue;
         }
         path = Form("%s/%s.xml", workdir.Data(),os->GetString().Data());
         TString msg = "\n#####   file: ";
         msg += path;
         msg += " type: xml_collection;";
         if (useTags) msg += " using_tags: Yes";
         else          msg += " using_tags: No";
         Info("CheckDataType", "%s", msg.Data());
         if (fNrunsPerMaster<2) {
            AddDataFile(Form("%s.xml", os->GetString().Data()));
         } else {
            nruns++;
            if (((nruns-1)%fNrunsPerMaster) == 0) {
               schunk = os->GetString();
            }   
            if ((nruns%fNrunsPerMaster)!=0 && os!=arr->Last()) continue;
            schunk += Form("_%s.xml", os->GetString().Data());
            AddDataFile(schunk);
         }   
      }
      delete arr;   
   } else {
      Info("CheckDataType", "Using run range [%d, %d]", fRunRange[0], fRunRange[1]);
      for (Int_t irun=fRunRange[0]; irun<=fRunRange[1]; irun++) {
         format = Form("%%s/%s ", fRunPrefix.Data());
         path = Form(format.Data(), fGridDataDir.Data(), irun);
         if (!DirectoryExists(path)) {
            continue;
         }
         format = Form("%%s/%s.xml", fRunPrefix.Data());
         path = Form(format.Data(), workdir.Data(),irun);
         TString msg = "\n#####   file: ";
         msg += path;
         msg += " type: xml_collection;";
         if (useTags) msg += " using_tags: Yes";
         else          msg += " using_tags: No";
         Info("CheckDataType", "%s", msg.Data());
         if (fNrunsPerMaster<2) {
            format = Form("%s.xml", fRunPrefix.Data());
            AddDataFile(Form(format.Data(),irun));
         } else {
            nruns++;
            if (((nruns-1)%fNrunsPerMaster) == 0) {
               schunk = Form(fRunPrefix.Data(),irun);
            }
            format = Form("_%s.xml", fRunPrefix.Data());
            schunk2 = Form(format.Data(), irun);
            if ((nruns%fNrunsPerMaster)!=0 && irun != fRunRange[1]) continue;
            schunk += schunk2;
            AddDataFile(schunk);
         }   
      }
      if (!fInputFiles) {
         schunk += schunk2;
         AddDataFile(schunk);
      }   
   }
   return kTRUE;      
}   

//______________________________________________________________________________
Int_t AliAnalysisAlien::CopyLocalDataset(const char *griddir, const char *pattern, Int_t nfiles, const char *output, const char *archivefile, const char *outputdir)
{
// Copy data from the given grid directory according a pattern and make a local
// dataset.
// archivefile (optional) results in that the archive containing the file <pattern> is copied. archivefile can contain a list of files (semicolon-separated) which are all copied
   if (!Connect()) {
      Error("CopyLocalDataset", "Cannot copy local dataset with no grid connection");
      return 0;
   }
   if (!DirectoryExists(griddir)) {
      Error("CopyLocalDataset", "Data directory %s not existing.", griddir);
      return 0;
   }
   TString command = Form("find -z -l %d %s %s", nfiles, griddir, pattern);
   printf("Running command: %s\n", command.Data());
   TGridResult *res = gGrid->Command(command);
   Int_t nfound = res->GetEntries();
   if (!nfound) {
      Error("CopyLocalDataset", "No file found in <%s> having pattern <%s>", griddir, pattern);
      return 0;
   }
   printf("... found %d files. Copying locally ...\n", nfound);
   
   // archives
   TObjArray* additionalArchives = 0;
   if (strlen(archivefile) > 0 && TString(archivefile).Contains(";")) {
      additionalArchives = TString(archivefile).Tokenize(";");
      archivefile = additionalArchives->At(0)->GetName();
      additionalArchives->RemoveAt(0);
      additionalArchives->Compress();
   }
   
   // Copy files locally
   ofstream out;
   out.open(output, ios::out);
   TMap *map;
   TString turl, dirname, filename, temp;
   TString cdir = gSystem->WorkingDirectory();
   gSystem->MakeDirectory(outputdir);
   gSystem->ChangeDirectory(outputdir);
   Int_t ncopied = 0;
   for (Int_t i=0; i<nfound; i++) {
      map = (TMap*)res->At(i);
      turl = map->GetValue("turl")->GetName();
      filename = gSystem->BaseName(turl.Data());
      dirname = gSystem->DirName(turl.Data());
      dirname = gSystem->BaseName(dirname.Data());
      gSystem->MakeDirectory(dirname);
      
      TString source(turl);
      TString targetFileName(filename);
      
      if (strlen(archivefile) > 0) {
// TODO here the archive in which the file resides should be determined
// however whereis returns only a guid, and guid2lfn does not work
// Therefore we use the one provided as argument for now
         source = Form("%s/%s", gSystem->DirName(source.Data()), archivefile);
         targetFileName = archivefile;
      }
      if (TFile::Cp(source, Form("file:./%s/%s", dirname.Data(), targetFileName.Data()))) {
         Bool_t success = kTRUE;
         if (additionalArchives) {
            for (Int_t j=0; j<additionalArchives->GetEntriesFast(); j++) {
               TString target;
               target.Form("./%s/%s", dirname.Data(), additionalArchives->At(j)->GetName());
               gSystem->MakeDirectory(gSystem->DirName(target));
               success &= TFile::Cp(Form("%s/%s", gSystem->DirName(source.Data()), additionalArchives->At(j)->GetName()), Form("file:%s", target.Data()));
            }
         }

         if (success) {
            if (strlen(archivefile) > 0) targetFileName = Form("%s#%s", targetFileName.Data(), gSystem->BaseName(turl.Data()));
            out << cdir << Form("/%s/%s/%s", outputdir, dirname.Data(), targetFileName.Data()) << endl;
            ncopied++;
         }
      }
   }
   gSystem->ChangeDirectory(cdir);
   delete res;
   delete additionalArchives;
   return ncopied;
}   

//______________________________________________________________________________
Bool_t AliAnalysisAlien::CreateDataset(const char *pattern)
{
// Create dataset for the grid data directory + run number.
   const Int_t gMaxEntries = 15000;
   if (fProductionMode || TestBit(AliAnalysisGrid::kOffline)) return kTRUE;
   if (!Connect()) {
      Error("CreateDataset", "Cannot create dataset with no grid connection");
      return kFALSE;
   }   

   // Cd workspace
   if (!TestBit(AliAnalysisGrid::kTest)) CdWork();
   TString workdir = gGrid->GetHomeDirectory();
   workdir += fGridWorkingDir;

   // Compose the 'find' command arguments
   TString format;
   TString command;
   TString delimiter = pattern;
   delimiter.Strip();
   if (delimiter.Contains(" ")) delimiter = "";
   else delimiter = " ";
   TString options = "-x collection ";
   if (TestBit(AliAnalysisGrid::kTest)) options += Form("-l %d ", fNtestFiles);
   else options += Form("-l %d ", gMaxEntries);  // Protection for the find command
   TString conditions = "";
   Int_t nstart = 0;
   Int_t ncount = 0;
   Int_t stage = 0;
   TString file;
   TString path;
   Int_t nruns = 0;
   TString schunk, schunk2;
   TGridCollection *cbase=0, *cadd=0;
   if (!fRunNumbers.Length() && !fRunRange[0]) {
      if (fInputFiles && fInputFiles->GetEntries()) return kTRUE;
      // Make a single data collection from data directory.
      path = fGridDataDir;
      if (!DirectoryExists(path)) {
         Error("CreateDataset", "Path to data directory %s not valid",fGridDataDir.Data());
         return kFALSE;
      } 
//      CdWork();
      if (TestBit(AliAnalysisGrid::kTest)) file = "wn.xml";
      else file = Form("%s.xml", gSystem->BaseName(path));
      // cholm - Identical loop - should be put in common function for code simplification
      while (1) {
         ncount = 0;
         stage++;
         if (gSystem->AccessPathName(file) || TestBit(AliAnalysisGrid::kTest) || fOverwriteMode) {
            command = "find ";
            command += Form("%s -o %d ",options.Data(), nstart);
            command += path;
            command += delimiter;
            command += pattern;
            command += conditions;
            printf("command: %s\n", command.Data());
            TGridResult *res = gGrid->Command(command);
            if (res) delete res;
            // Write standard output to file
            gROOT->ProcessLine(Form("gGrid->Stdout(); > __tmp%d__%s", stage, file.Data()));
            Bool_t hasGrep = (gSystem->Exec("grep --version 2>/dev/null > /dev/null")==0)?kTRUE:kFALSE;
            Bool_t nullFile = kFALSE;
            if (!hasGrep) {
                Warning("CreateDataset", "'grep' command not available on this system - cannot validate the result of the grid 'find' command");
            } else {
               nullFile = (gSystem->Exec(Form("grep -c /event __tmp%d__%s 2>/dev/null > __tmp__",stage,file.Data()))==0)?kFALSE:kTRUE;
               if (nullFile) {
                  Error("CreateDataset","Dataset %s produced by the previous find command is empty !", file.Data());
                  gSystem->Exec("rm -f __tmp*");
                  return kFALSE;
               }
               TString line;
               ifstream in;
               in.open("__tmp__");
               in >> line;
               in.close();
               gSystem->Exec("rm -f __tmp__");
               ncount = line.Atoi();
            }         
         }
         if (ncount == gMaxEntries) {
            Info("CreateDataset", "Dataset %s has more than 15K entries. Trying to merge...", file.Data());
            cadd = (TGridCollection*)gROOT->ProcessLine(Form("new TAlienCollection(\"__tmp%d__%s\", 1000000);",stage,file.Data()));
            if (!cbase) cbase = cadd;
            else {
	      // cholm - Avoid using very slow TAlienCollection 
	      // cbase->Add(cadd);
	      // cholm - Use AddFast (via interpreter)
	      gROOT->ProcessLine(Form("((TAlienCollection*)%p)->AddFast((TGridCollection*)%p)",cbase,cadd));
               delete cadd;
            }   
            nstart += ncount;
         } else {
            if (cbase) {
               cadd = (TGridCollection*)gROOT->ProcessLine(Form("new TAlienCollection(\"__tmp%d__%s\", 1000000);",stage,file.Data()));
               printf("... please wait - TAlienCollection::Add() scales badly...\n");
	      // cholm - Avoid using very slow TAlienCollection 
	      // cbase->Add(cadd);
	      // cholm - Use AddFast (via interpreter)
	      gROOT->ProcessLine(Form("((TAlienCollection*)%p)->AddFast((TGridCollection*)%p)",cbase,cadd));
               delete cadd;
               cbase->ExportXML(Form("file://%s", file.Data()),kFALSE,kFALSE, file, "Merged entries for a run");
               delete cbase; cbase = 0;               
            } else {
               TFile::Cp(Form("__tmp%d__%s",stage, file.Data()), file.Data());
            }
            gSystem->Exec("rm -f __tmp*");   
            Info("CreateDataset", "Created dataset %s with %d files", file.Data(), nstart+ncount);
            break;
         }
      }
      Bool_t fileExists = FileExists(file);
      if (!TestBit(AliAnalysisGrid::kTest) && (!fileExists || fOverwriteMode)) {
         // Copy xml file to alien space
         if (fileExists) gGrid->Rm(file);
         TFile::Cp(Form("file:%s",file.Data()), Form("alien://%s/%s",workdir.Data(), file.Data()));
         if (!FileExists(file)) {
            Error("CreateDataset", "Command %s did NOT succeed", command.Data());
            return kFALSE;
         }
         // Update list of files to be processed.
      }
      AddDataFile(Form("%s/%s", workdir.Data(), file.Data()));
      return kTRUE;
   }   
   // Several runs
   Bool_t nullResult = kTRUE;
   if (fRunNumbers.Length()) {
      TObjArray *arr = fRunNumbers.Tokenize(" ");
      TObjString *os;
      TIter next(arr);
      while ((os=(TObjString*)next())) {
         nstart = 0;
         stage = 0;
         path = Form("%s/%s", fGridDataDir.Data(), os->GetString().Data());
         if (!DirectoryExists(path)) continue;
//         CdWork();
         if (TestBit(AliAnalysisGrid::kTest)) file = "wn.xml";
         else file = Form("%s.xml", os->GetString().Data());
	 // cholm - Identical loop - should be put in common function for code simplification
         // If local collection file does not exist, create it via 'find' command.
         while (1) {
            ncount = 0;
            stage++;
            if (gSystem->AccessPathName(file) || TestBit(AliAnalysisGrid::kTest) || fOverwriteMode) {
               command = "find ";
               command +=  Form("%s -o %d ",options.Data(), nstart);
               command += path;
               command += delimiter;
               command += pattern;
               command += conditions;
               TGridResult *res = gGrid->Command(command);
               if (res) delete res;
               // Write standard output to file
               gROOT->ProcessLine(Form("gGrid->Stdout(); > __tmp%d__%s", stage,file.Data()));
               Bool_t hasGrep = (gSystem->Exec("grep --version 2>/dev/null > /dev/null")==0)?kTRUE:kFALSE;
               Bool_t nullFile = kFALSE;
               if (!hasGrep) {
                  Warning("CreateDataset", "'grep' command not available on this system - cannot validate the result of the grid 'find' command");
               } else {
                  nullFile = (gSystem->Exec(Form("grep -c /event __tmp%d__%s 2>/dev/null > __tmp__",stage,file.Data()))==0)?kFALSE:kTRUE;
                  if (nullFile) {
                     Warning("CreateDataset","Dataset %s produced by: <%s> is empty !", file.Data(), command.Data());
                     gSystem->Exec("rm -f __tmp*");
                     fRunNumbers.ReplaceAll(os->GetString().Data(), "");
                     break;
                  }   
                  TString line;
                  ifstream in;
                  in.open("__tmp__");
                  in >> line;
                  in.close();
                  gSystem->Exec("rm -f __tmp__");   
                  ncount = line.Atoi();
               }
               nullResult = kFALSE;         
            }
            if (ncount == gMaxEntries) {
               Info("CreateDataset", "Dataset %s has more than 15K entries. Trying to merge...", file.Data());
               if (fNrunsPerMaster > 1) {
                  Error("CreateDataset", "File %s has more than %d entries. Please set the number of runs per master to 1 !", 
                          file.Data(),gMaxEntries);
                  return kFALSE;
               }           
               cadd = (TGridCollection*)gROOT->ProcessLine(Form("new TAlienCollection(\"__tmp%d__%s\", 1000000);",stage,file.Data()));
               if (!cbase) cbase = cadd;
               else {
		  // cholm - Avoid using very slow TAlienCollection 
		  // cbase->Add(cadd);
		  // cholm - Use AddFast (via interpreter)
		  gROOT->ProcessLine(Form("((TAlienCollection*)%p)->AddFast((TGridCollection*)%p)",cbase,cadd));

                  delete cadd;
               }   
               nstart += ncount;
            } else {
               if (cbase && fNrunsPerMaster<2) {
                  cadd = (TGridCollection*)gROOT->ProcessLine(Form("new TAlienCollection(\"__tmp%d__%s\", 1000000);",stage,file.Data()));
                  printf("... please wait - TAlienCollection::Add() scales badly...\n");
		  // cholm - Avoid using very slow TAlienCollection 
		  // cbase->Add(cadd);
		  // cholm - Use AddFast (via interpreter)
		  gROOT->ProcessLine(Form("((TAlienCollection*)%p)->AddFast((TGridCollection*)%p)",cbase,cadd));
                  delete cadd;
                  cbase->ExportXML(Form("file://%s", file.Data()),kFALSE,kFALSE, file, "Merged entries for a run");
                  delete cbase; cbase = 0;               
               } else {
                  TFile::Cp(Form("__tmp%d__%s",stage, file.Data()), file.Data());
               }
               gSystem->Exec("rm -f __tmp*");   
               Info("CreateDataset", "Created dataset %s with %d files", file.Data(), nstart+ncount);
               break;
            }
         }   
         if (TestBit(AliAnalysisGrid::kTest)) break;
         // Check if there is one run per master job.
         if (fNrunsPerMaster<2) {
            if (FileExists(file)) {
               if (fOverwriteMode) gGrid->Rm(file);
               else {
                  Info("CreateDataset", "\n#####   Dataset %s exist. Skipping creation...", file.Data());
                  continue;
               }   
            }        
            // Copy xml file to alien space
            TFile::Cp(Form("file:%s",file.Data()), Form("alien://%s/%s",workdir.Data(), file.Data()));
            if (!FileExists(file)) {
               Error("CreateDataset", "Command %s did NOT succeed", command.Data());
               delete arr;
               return kFALSE;
            }
         } else {
            nruns++;
            if (((nruns-1)%fNrunsPerMaster) == 0) {
               schunk = os->GetString();
               cbase = (TGridCollection*)gROOT->ProcessLine(Form("new TAlienCollection(\"%s\", 1000000);",file.Data()));
            } else {
               cadd = (TGridCollection*)gROOT->ProcessLine(Form("new TAlienCollection(\"%s\", 1000000);",file.Data()));
               printf("   Merging collection <%s> into masterjob input...\n", file.Data());
	       // cholm - Avoid using very slow TAlienCollection 
	       // cbase->Add(cadd);
	       // cholm - Use AddFast (via interpreter)
	       gROOT->ProcessLine(Form("((TAlienCollection*)%p)->AddFast((TGridCollection*)%p)",cbase,cadd));
               delete cadd;
            }
            if ((nruns%fNrunsPerMaster)!=0 && os!=arr->Last()) {
               continue;
            }   
            schunk += Form("_%s.xml", os->GetString().Data());
            if (FileExists(schunk)) {               
               if (fOverwriteMode) gGrid->Rm(file);
               else {
                  Info("CreateDataset", "\n#####   Dataset %s exist. Skipping creation...", schunk.Data());
                  continue;
               }   
            }        
            printf("Exporting merged collection <%s> and copying to AliEn\n", schunk.Data());
            cbase->ExportXML(Form("file://%s", schunk.Data()),kFALSE,kFALSE, schunk, "Merged runs");
            TFile::Cp(Form("file:%s",schunk.Data()), Form("alien://%s/%s",workdir.Data(), schunk.Data()));
            if (!FileExists(schunk)) {
               Error("CreateDataset", "Copy command did NOT succeed for %s", schunk.Data());
               delete arr;
               return kFALSE;
            }
         }
      }   
      delete arr;
      if (nullResult) {
         Error("CreateDataset", "No valid dataset corresponding to the query!");
         return kFALSE;
      }
   } else {
      // Process a full run range.
      for (Int_t irun=fRunRange[0]; irun<=fRunRange[1]; irun++) {
         format = Form("%%s/%s", fRunPrefix.Data());
         nstart = 0;
         stage = 0;
         path = Form(format.Data(), fGridDataDir.Data(), irun);
         if (!DirectoryExists(path)) continue;
//         CdWork();
         format = Form("%s.xml", fRunPrefix.Data());
         if (TestBit(AliAnalysisGrid::kTest)) file = "wn.xml";
         else file = Form(format.Data(), irun);
         if (FileExists(file) && fNrunsPerMaster<2 && !TestBit(AliAnalysisGrid::kTest)) {         
            if (fOverwriteMode) gGrid->Rm(file);
            else {
               Info("CreateDataset", "\n#####   Dataset %s exist. Skipping creation...", file.Data());
               continue;
            }   
         }
	 // cholm - Identical loop - should be put in common function for code simplification
         // If local collection file does not exist, create it via 'find' command.
         while (1) {
            ncount = 0;
            stage++;
            if (gSystem->AccessPathName(file) || TestBit(AliAnalysisGrid::kTest) || fOverwriteMode) {
               command = "find ";
               command +=  Form("%s -o %d ",options.Data(), nstart);
               command += path;
               command += delimiter;
               command += pattern;
               command += conditions;
               TGridResult *res = gGrid->Command(command);
               if (res) delete res;
               // Write standard output to file
               gROOT->ProcessLine(Form("gGrid->Stdout(); > __tmp%d__%s", stage,file.Data()));
               Bool_t hasGrep = (gSystem->Exec("grep --version 2>/dev/null > /dev/null")==0)?kTRUE:kFALSE;
               Bool_t nullFile = kFALSE;
               if (!hasGrep) {
                  Warning("CreateDataset", "'grep' command not available on this system - cannot validate the result of the grid 'find' command");
               } else {
                  nullFile = (gSystem->Exec(Form("grep -c /event __tmp%d__%s 2>/dev/null > __tmp__",stage,file.Data()))==0)?kFALSE:kTRUE;
                  if (nullFile) {
                     Warning("CreateDataset","Dataset %s produced by: <%s> is empty !", file.Data(), command.Data());
                     gSystem->Exec("rm -f __tmp*");
                     break;
                  }   
                  TString line;
                  ifstream in;
                  in.open("__tmp__");
                  in >> line;
                  in.close();
                  gSystem->Exec("rm -f __tmp__");   
                  ncount = line.Atoi();
               }
               nullResult = kFALSE;         
            }   
            if (ncount == gMaxEntries) {
               Info("CreateDataset", "Dataset %s has more than 15K entries. Trying to merge...", file.Data());
               if (fNrunsPerMaster > 1) {
                  Error("CreateDataset", "File %s has more than %d entries. Please set the number of runs per master to 1 !", 
                          file.Data(),gMaxEntries);
                  return kFALSE;
               }           
               cadd = (TGridCollection*)gROOT->ProcessLine(Form("new TAlienCollection(\"__tmp%d__%s\", 1000000);",stage,file.Data()));
               if (!cbase) cbase = cadd;
               else {
		 // cholm - Avoid using very slow TAlienCollection 
		 // cbase->Add(cadd);
		 // cholm - Use AddFast (via interpreter)
		 gROOT->ProcessLine(Form("((TAlienCollection*)%p)->AddFast((TGridCollection*)%p)",cbase,cadd));
                  delete cadd;
               }   
               nstart += ncount;
            } else {
               if (cbase && fNrunsPerMaster<2) {
                  cadd = (TGridCollection*)gROOT->ProcessLine(Form("new TAlienCollection(\"__tmp%d__%s\", 1000000);",stage,file.Data()));
                  printf("... please wait - TAlienCollection::Add() scales badly...\n");
		 // cholm - Avoid using very slow TAlienCollection 
		 // cbase->Add(cadd);
		 // cholm - Use AddFast (via interpreter)
		 gROOT->ProcessLine(Form("((TAlienCollection*)%p)->AddFast((TGridCollection*)%p)",cbase,cadd));
                  delete cadd;
                  cbase->ExportXML(Form("file://%s", file.Data()),kFALSE,kFALSE, file, "Merged entries for a run");
                  delete cbase; cbase = 0;               
               } else {
                  TFile::Cp(Form("__tmp%d__%s",stage, file.Data()), file.Data());
               }
               Info("CreateDataset", "Created dataset %s with %d files", file.Data(), nstart+ncount);
               break;
            }
         }   
         if (TestBit(AliAnalysisGrid::kTest)) break;
         // Check if there is one run per master job.
         if (fNrunsPerMaster<2) {
            if (FileExists(file)) {
               if (fOverwriteMode) gGrid->Rm(file);
               else {
                  Info("CreateDataset", "\n#####   Dataset %s exist. Skipping creation...", file.Data());
                  continue;
               }   
            }        
            // Copy xml file to alien space
            TFile::Cp(Form("file:%s",file.Data()), Form("alien://%s/%s",workdir.Data(), file.Data()));
            if (!FileExists(file)) {
               Error("CreateDataset", "Command %s did NOT succeed", command.Data());
               return kFALSE;
            }
         } else {
            nruns++;
            // Check if the collection for the chunk exist locally.
            Int_t nchunk = (nruns-1)/fNrunsPerMaster;
            if (FileExists(fInputFiles->At(nchunk)->GetName())) {
               if (fOverwriteMode) gGrid->Rm(fInputFiles->At(nchunk)->GetName());
               else continue;
            }   
            printf("   Merging collection <%s> into %d runs chunk...\n",file.Data(),fNrunsPerMaster);
            if (((nruns-1)%fNrunsPerMaster) == 0) {
               schunk = Form(fRunPrefix.Data(), irun);
               cbase = (TGridCollection*)gROOT->ProcessLine(Form("new TAlienCollection(\"%s\", 1000000);",file.Data()));
            } else {
               cadd = (TGridCollection*)gROOT->ProcessLine(Form("new TAlienCollection(\"%s\", 1000000);",file.Data()));
	       // cholm - Avoid using very slow TAlienCollection 
	       // cbase->Add(cadd);
	       // cholm - Use AddFast (via interpreter)
	       gROOT->ProcessLine(Form("((TAlienCollection*)%p)->AddFast((TGridCollection*)%p)",cbase,cadd));
               delete cadd;
            }
            format = Form("%%s_%s.xml", fRunPrefix.Data());
            schunk2 = Form(format.Data(), schunk.Data(), irun);
            if ((nruns%fNrunsPerMaster)!=0 && irun!=fRunRange[1] && schunk2 != fInputFiles->Last()->GetName()) {
               continue;
            }   
            schunk = schunk2;
            if (FileExists(schunk)) {
               if (fOverwriteMode) gGrid->Rm(schunk);
               else {
                  Info("CreateDataset", "\n#####   Dataset %s exist. Skipping creation...", schunk.Data());
                  continue;
               }   
            }        
            printf("Exporting merged collection <%s> and copying to AliEn.\n", schunk.Data());
            cbase->ExportXML(Form("file://%s", schunk.Data()),kFALSE,kFALSE, schunk, "Merged runs");
            if (FileExists(schunk)) {
               if (fOverwriteMode) gGrid->Rm(schunk);
               else {
                  Info("CreateDataset", "\n#####   Dataset %s exist. Skipping copy...", schunk.Data());
                  continue;
               }   
            }   
            TFile::Cp(Form("file:%s",schunk.Data()), Form("alien://%s/%s",workdir.Data(), schunk.Data()));
            if (!FileExists(schunk)) {
               Error("CreateDataset", "Copy command did NOT succeed for %s", schunk.Data());
               return kFALSE;
            }
         }   
      }
      if (nullResult) {
         Error("CreateDataset", "No valid dataset corresponding to the query!");
         return kFALSE;
      }      
   }      
   return kTRUE;
}

//______________________________________________________________________________
Bool_t AliAnalysisAlien::CreateJDL()
{
// Generate a JDL file according to current settings. The name of the file is 
// specified by fJDLName.
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   Bool_t error = kFALSE;
   TObjArray *arr = 0;
   Bool_t copy = kTRUE;
   if (fProductionMode || TestBit(AliAnalysisGrid::kOffline) || TestBit(AliAnalysisGrid::kTest)) copy = kFALSE;
   Bool_t generate = kTRUE;
   if (TestBit(AliAnalysisGrid::kTest) || TestBit(AliAnalysisGrid::kSubmit)) generate = kFALSE;
   if (!Connect()) {
      Error("CreateJDL", "Alien connection required");
      return kFALSE;
   }   
   // Check validity of alien workspace
   TString workdir;
   if (!fProductionMode && !fGridWorkingDir.BeginsWith("/alice")) workdir = gGrid->GetHomeDirectory();
   if (!fProductionMode &&  !TestBit(AliAnalysisGrid::kTest)) CdWork();
   workdir += fGridWorkingDir;
   if (generate) {
      TObjString *os;
      if (!fInputFiles && !fMCLoop) {
         Error("CreateJDL()", "Define some input files for your analysis.");
         error = kTRUE;
      }
      // Compose list of input files   
      // Check if output files were defined
      if (!fOutputFiles.Length()) {
         Error("CreateJDL", "You must define at least one output file");
         error = kTRUE;
      }   
      // Check if an output directory was defined and valid
      if (!fGridOutputDir.Length()) {
         Error("CreateJDL", "You must define AliEn output directory");
         error = kTRUE;
      } else {
         if (!fProductionMode) {
            if (!fGridOutputDir.Contains("/")) fGridOutputDir = Form("%s/%s", workdir.Data(), fGridOutputDir.Data());
            if (!DirectoryExists(fGridOutputDir)) {
               if (gGrid->Mkdir(fGridOutputDir,"-p")) {
                  Info("CreateJDL", "\n#####   Created alien output directory %s", fGridOutputDir.Data());
               } else {
                  Error("CreateJDL", "Could not create alien output directory %s", fGridOutputDir.Data());
                  // error = kTRUE;
               }
            } else {
               Warning("CreateJDL", "#### Output directory %s exists! If this contains old data, jobs will fail with ERROR_SV !!! ###", fGridOutputDir.Data());
            }   
            gGrid->Cd(workdir);
         }   
      }   
      // Exit if any error up to now
      if (error) return kFALSE;   
      // Set JDL fields
      if (!fUser.IsNull()) {
         fGridJDL->SetValue("User", Form("\"%s\"", fUser.Data()));
         fMergingJDL->SetValue("User", Form("\"%s\"", fUser.Data()));
      }
      TString executable = fExecutable;
      if (!executable.BeginsWith("/")) 
         executable.Prepend(Form("%s/", workdir.Data()));
      fGridJDL->SetExecutable(executable, "This is the startup script");
      TString mergeExec = executable;
      mergeExec.ReplaceAll(".sh", "_merge.sh");
      fMergingJDL->SetExecutable(mergeExec, "This is the startup script");
      mergeExec.ReplaceAll(".sh", ".C");
      fMergingJDL->AddToInputSandbox(Form("LF:%s", mergeExec.Data()), "List of input files to be uploaded to workers");
      if (!fArguments.IsNull())
         fGridJDL->SetArguments(fArguments, "Arguments for the executable command");
      if (IsOneStageMerging()) fMergingJDL->SetArguments(fGridOutputDir);
      else {
         if (fProductionMode)  fMergingJDL->SetArguments("wn.xml $4");    // xml, stage
         else                  fMergingJDL->SetArguments("wn.xml $2");    // xml, stage
     }               

      fGridJDL->SetValue("TTL", Form("\"%d\"",fTTL));
      fGridJDL->SetDescription("TTL", Form("Time after which the job is killed (%d min.)", fTTL/60));
      fMergingJDL->SetValue("TTL", Form("\"%d\"",fTTL));
      fMergingJDL->SetDescription("TTL", Form("Time after which the job is killed (%d min.)", fTTL/60));
        
      if (fMaxInitFailed > 0) {
         fGridJDL->SetValue("MaxInitFailed", Form("\"%d\"",fMaxInitFailed));
         fGridJDL->SetDescription("MaxInitFailed", "Maximum number of first failing jobs to abort the master job");
      }   
      if (fSplitMaxInputFileNumber > 0 && !fMCLoop) {
         fGridJDL->SetValue("SplitMaxInputFileNumber", Form("\"%d\"", fSplitMaxInputFileNumber));
         fGridJDL->SetDescription("SplitMaxInputFileNumber", "Maximum number of input files to be processed per subjob");
      }
      if (!IsOneStageMerging()) {
         fMergingJDL->SetValue("SplitMaxInputFileNumber", Form("\"%d\"",fMaxMergeFiles));
         fMergingJDL->SetDescription("SplitMaxInputFileNumber", "Maximum number of input files to be merged in one go");
      }   
      if (fSplitMode.Length()) {
         fGridJDL->SetValue("Split", Form("\"%s\"", fSplitMode.Data()));
         fGridJDL->SetDescription("Split", "We split per SE or file");
      }
      fMergingJDL->SetValue("Split", "\"se\""); 
      fMergingJDL->SetDescription("Split", "We split per SE for merging in stages");
      if (!fAliROOTVersion.IsNull()) {
         fGridJDL->AddToPackages("AliRoot", fAliROOTVersion,"VO_ALICE", "List of requested packages");
         fMergingJDL->AddToPackages("AliRoot", fAliROOTVersion, "VO_ALICE", "List of requested packages");
      }   
      if (!fROOTVersion.IsNull()) {
         fGridJDL->AddToPackages("ROOT", fROOTVersion);
         fMergingJDL->AddToPackages("ROOT", fROOTVersion);
      }   
      if (!fAPIVersion.IsNull()) {
         fGridJDL->AddToPackages("APISCONFIG", fAPIVersion);
         fMergingJDL->AddToPackages("APISCONFIG", fAPIVersion);
      }   
      if (!fExternalPackages.IsNull()) {
         arr = fExternalPackages.Tokenize(" ");
         TIter next(arr);
         while ((os=(TObjString*)next())) {
            TString pkgname = os->GetString();
            Int_t index = pkgname.Index("::");
            TString pkgversion = pkgname(index+2, pkgname.Length());
            pkgname.Remove(index);
            fGridJDL->AddToPackages(pkgname, pkgversion);
            fMergingJDL->AddToPackages(pkgname, pkgversion);
         }   
         delete arr;   
      }   
      if (!fMCLoop) {
         fGridJDL->SetInputDataListFormat(fInputFormat, "Format of input data");
         fGridJDL->SetInputDataList("wn.xml", "Collection name to be processed on each worker node");
      }   
      fMergingJDL->SetInputDataListFormat(fInputFormat, "Format of input data");
      fMergingJDL->SetInputDataList("wn.xml", "Collection name to be processed on each worker node");
      fGridJDL->AddToInputSandbox(Form("LF:%s/%s", workdir.Data(), fAnalysisMacro.Data()), "List of input files to be uploaded to workers");
      TString analysisFile = fExecutable;
      analysisFile.ReplaceAll(".sh", ".root");
      fGridJDL->AddToInputSandbox(Form("LF:%s/%s", workdir.Data(),analysisFile.Data()));
      fMergingJDL->AddToInputSandbox(Form("LF:%s/%s", workdir.Data(),analysisFile.Data()));
      if (fAdditionalLibs.Length()) {
         arr = fAdditionalLibs.Tokenize(" ");
         TIter next(arr);
         while ((os=(TObjString*)next())) {
            if (os->GetString().Contains(".so") ||
                os->GetString().Contains(".dylib")) continue;
            fGridJDL->AddToInputSandbox(Form("LF:%s/%s", workdir.Data(), os->GetString().Data()));
            fMergingJDL->AddToInputSandbox(Form("LF:%s/%s", workdir.Data(), os->GetString().Data()));
         }   
         delete arr;   
      }
      if (fPackages) {
         TIter next(fPackages);
         TObject *obj;
         while ((obj=next())) {
            fGridJDL->AddToInputSandbox(Form("LF:%s/%s", workdir.Data(), obj->GetName()));
            fMergingJDL->AddToInputSandbox(Form("LF:%s/%s", workdir.Data(), obj->GetName()));
         }
      }
      const char *comment = "List of output files and archives";
      if (fOutputArchive.Length()) {
         TString outputArchive = fOutputArchive;
         if (!fRegisterExcludes.IsNull()) {
            arr = fRegisterExcludes.Tokenize(" ");
            TIter next1(arr);
            while ((os=(TObjString*)next1())) {
               outputArchive.ReplaceAll(Form("%s,",os->GetString().Data()),"");
               outputArchive.ReplaceAll(os->GetString(),"");
            } 
            delete arr;
         }     
         arr = outputArchive.Tokenize(" ");
         TIter next(arr);
         Bool_t first = kTRUE;
         while ((os=(TObjString*)next())) {
            if (!os->GetString().Contains("@") && fCloseSE.Length())
               fGridJDL->AddToSet("Output", Form("%s@%s",os->GetString().Data(), fCloseSE.Data()));
            else
               fGridJDL->AddToSet("Output", os->GetString());
            if (first) fGridJDL->AddToSetDescription("Output", comment);
            first = kFALSE;   
         }      
         delete arr;
         // Output archive for the merging jdl
         if (TestBit(AliAnalysisGrid::kDefaultOutputs)) {
            outputArchive = "log_archive.zip:std*@disk=1 ";
            // Add normal output files, extra files + terminate files
            TString files;
            if (IsMergeAOD()) files = GetListOfFiles("outaodextter");
            else files = GetListOfFiles("outextter");
            // Do not register files in fRegisterExcludes
            if (!fRegisterExcludes.IsNull()) {
               arr = fRegisterExcludes.Tokenize(" ");
               TIter next1(arr);
               while ((os=(TObjString*)next1())) {
                  files.ReplaceAll(Form("%s,",os->GetString().Data()),"");
                  files.ReplaceAll(os->GetString(),"");
               }   
               delete arr;
            }
            files.ReplaceAll(".root", "*.root");
            
            if (mgr->IsCollectThroughput())
               outputArchive += Form("root_archive.zip:%s,*.stat@disk=%d %s@disk=%d",files.Data(),fNreplicas, mgr->GetFileInfoLog(),fNreplicas);
            else
               outputArchive += Form("root_archive.zip:%s,*.stat@disk=%d",files.Data(),fNreplicas);
         } else {
            TString files = fOutputArchive;
            files.ReplaceAll(".root", "*.root"); // nreplicas etc should be already atttached by use
            outputArchive = files;
         }   
         arr = outputArchive.Tokenize(" ");
         TIter next2(arr);
         first = kTRUE;
         while ((os=(TObjString*)next2())) {
            TString currentfile = os->GetString();
            if (!currentfile.Contains("@") && fCloseSE.Length())
               fMergingJDL->AddToSet("Output", Form("%s@%s",currentfile.Data(), fCloseSE.Data()));
            else
               fMergingJDL->AddToSet("Output", currentfile);
            if (first) fMergingJDL->AddToSetDescription("Output", comment);
            first = kFALSE;   
         }      
         delete arr;         
      }      
      arr = fOutputFiles.Tokenize(",");
      TIter next(arr);
      Bool_t first = kTRUE;
      while ((os=(TObjString*)next())) {
         // Ignore ouputs in jdl that are also in outputarchive
         TString sout = os->GetString();
         sout.ReplaceAll("*", "");
         sout.ReplaceAll(".root", "");
         if (sout.Index("@")>0) sout.Remove(sout.Index("@"));
         if (fOutputArchive.Contains(sout)) continue;
         // Ignore fRegisterExcludes
         if (fRegisterExcludes.Contains(sout)) continue;
         if (!first) comment = NULL;
         if (!os->GetString().Contains("@") && fCloseSE.Length())
            fGridJDL->AddToSet("Output", Form("%s@%s",os->GetString().Data(), fCloseSE.Data())); 
         else
            fGridJDL->AddToSet("Output", os->GetString());
         if (first) fGridJDL->AddToSetDescription("Output", comment); 
         if (fMergeExcludes.Contains(sout)) continue;   
         if (!os->GetString().Contains("@") && fCloseSE.Length())
            fMergingJDL->AddToSet("Output", Form("%s@%s",os->GetString().Data(), fCloseSE.Data())); 
         else
            fMergingJDL->AddToSet("Output", os->GetString());
         if (first) fMergingJDL->AddToSetDescription("Output", comment);
         first = kFALSE;
      }   
      delete arr;
      fGridJDL->SetPrice((UInt_t)fPrice, "AliEn price for this job");
      fMergingJDL->SetPrice((UInt_t)fPrice, "AliEn price for this job");
      TString validationScript = fValidationScript;
      fGridJDL->SetValidationCommand(Form("%s/%s", workdir.Data(),validationScript.Data()), "Validation script to be run for each subjob");
      validationScript.ReplaceAll(".sh", "_merge.sh");
      fMergingJDL->SetValidationCommand(Form("%s/%s", workdir.Data(),validationScript.Data()), "Validation script to be run for each subjob");
      if (fMasterResubmitThreshold) {
         fGridJDL->SetValue("MasterResubmitThreshold", Form("\"%d%%\"", fMasterResubmitThreshold));
         fGridJDL->SetDescription("MasterResubmitThreshold", "Resubmit failed jobs until DONE rate reaches this percentage");
      }   
      // Write a jdl with 2 input parameters: collection name and output dir name.
      WriteJDL(copy);
   }
   // Copy jdl to grid workspace   
   if (copy) {
      // Check if an output directory was defined and valid
      if (!fGridOutputDir.Length()) {
         Error("CreateJDL", "You must define AliEn output directory");
         return kFALSE;
      } else {
         if (!fGridOutputDir.Contains("/")) fGridOutputDir = Form("%s/%s", workdir.Data(), fGridOutputDir.Data());
         if (!fProductionMode && !DirectoryExists(fGridOutputDir)) {
            if (gGrid->Mkdir(fGridOutputDir,"-p")) {
               Info("CreateJDL", "\n#####   Created alien output directory %s", fGridOutputDir.Data());
            } else {
               Error("CreateJDL", "Could not create alien output directory %s", fGridOutputDir.Data());
               return kFALSE;
            }
         }
         gGrid->Cd(workdir);
      }   
      if (TestBit(AliAnalysisGrid::kSubmit)) {
         TString mergeJDLName = fExecutable;
         mergeJDLName.ReplaceAll(".sh", "_merge.jdl");
         TString locjdl = Form("%s/%s", fGridOutputDir.Data(),fJDLName.Data());
         TString locjdl1 = Form("%s/%s", fGridOutputDir.Data(),mergeJDLName.Data());
         if (fProductionMode) {
            locjdl = Form("%s/%s", workdir.Data(),fJDLName.Data());
            locjdl1 = Form("%s/%s", workdir.Data(),mergeJDLName.Data());
         }   
         if (FileExists(locjdl)) gGrid->Rm(locjdl);
         if (FileExists(locjdl1)) gGrid->Rm(locjdl1);
         Info("CreateJDL", "\n#####   Copying JDL file <%s> to your AliEn output directory", fJDLName.Data());
         if (!copyLocal2Alien("CreateJDL", fJDLName, locjdl)) 
            Fatal("","Terminating");
//         TFile::Cp(Form("file:%s",fJDLName.Data()), Form("alien://%s", locjdl.Data()));
         if (fMergeViaJDL) {
            Info("CreateJDL", "\n#####   Copying merging JDL file <%s> to your AliEn output directory", mergeJDLName.Data());
//            TFile::Cp(Form("file:%s",mergeJDLName.Data()), Form("alien://%s", locjdl1.Data()));
            if (!copyLocal2Alien("CreateJDL", mergeJDLName.Data(), locjdl1)) 
               Fatal("","Terminating");
         }   
      }
      if (fAdditionalLibs.Length()) {
         arr = fAdditionalLibs.Tokenize(" ");
         TObjString *os;
         TIter next(arr);
         while ((os=(TObjString*)next())) {
            if (os->GetString().Contains(".so") ||
                os->GetString().Contains(".dylib")) continue;
            Info("CreateJDL", "\n#####   Copying dependency: <%s> to your alien workspace", os->GetString().Data());
            if (FileExists(os->GetString())) gGrid->Rm(os->GetString());
//            TFile::Cp(Form("file:%s",os->GetString().Data()), Form("alien://%s/%s", workdir.Data(), os->GetString().Data()));
            if (!copyLocal2Alien("CreateJDL", os->GetString().Data(), 
                Form("%s/%s", workdir.Data(), os->GetString().Data())))
              Fatal("","Terminating");
         }   
         delete arr;   
      }
      if (fPackages) {
         TIter next(fPackages);
         TObject *obj;
         while ((obj=next())) {
            if (FileExists(obj->GetName())) gGrid->Rm(obj->GetName());
            Info("CreateJDL", "\n#####   Copying dependency: <%s> to your alien workspace", obj->GetName());
//            TFile::Cp(Form("file:%s",obj->GetName()), Form("alien://%s/%s", workdir.Data(), obj->GetName()));
            if (!copyLocal2Alien("CreateJDL",obj->GetName(), 
                Form("%s/%s", workdir.Data(), obj->GetName()))) 
              Fatal("","Terminating"); 
         }   
      }      
   } 
   return kTRUE;
}

//______________________________________________________________________________
Bool_t AliAnalysisAlien::WriteJDL(Bool_t copy)
{
// Writes one or more JDL's corresponding to findex. If findex is negative,
// all run numbers are considered in one go (jdl). For non-negative indices
// they correspond to the indices in the array fInputFiles.
   if (!fInputFiles && !fMCLoop) return kFALSE;
   TObject *os;
   TString workdir;
   if (!fProductionMode && !fGridWorkingDir.BeginsWith("/alice")) workdir = gGrid->GetHomeDirectory();
   workdir += fGridWorkingDir;
   TString stageName = "$2";
   if (fProductionMode) stageName = "$4";
   if (!fMergeDirName.IsNull()) {
     fMergingJDL->AddToInputDataCollection(Form("LF:$1/%s/Stage_%s.xml,nodownload",fMergeDirName.Data(),stageName.Data()), "Collection of files to be merged for current stage");
     fMergingJDL->SetOutputDirectory(Form("$1/%s/Stage_%s/#alien_counter_03i#",fMergeDirName.Data(),stageName.Data()), "Output directory");
   } else {
     fMergingJDL->AddToInputDataCollection(Form("LF:$1/Stage_%s.xml,nodownload",stageName.Data()), "Collection of files to be merged for current stage");
     fMergingJDL->SetOutputDirectory(Form("$1/Stage_%s/#alien_counter_03i#",stageName.Data()), "Output directory");
   }
   if (fProductionMode) {
      TIter next(fInputFiles);
      while ((os=next())) {
         fGridJDL->AddToInputDataCollection(Form("LF:%s,nodownload", os->GetName()), "Input xml collections");
      }
      if (!fOutputToRunNo)
         fGridJDL->SetOutputDirectory(Form("%s/#alien_counter_04i#", fGridOutputDir.Data()));
      else  
         fGridJDL->SetOutputDirectory(fGridOutputDir);
   } else {            
      if (!fRunNumbers.Length() && !fRunRange[0]) {
         // One jdl with no parameters in case input data is specified by name.
         TIter next(fInputFiles);
         while ((os=next()))
            fGridJDL->AddToInputDataCollection(Form("LF:%s,nodownload", os->GetName()), "Input xml collections");
         if (!fOutputSingle.IsNull())
            fGridJDL->SetOutputDirectory(Form("#alienfulldir#/../%s",fOutputSingle.Data()), "Output directory");
         else {
            fGridJDL->SetOutputDirectory(Form("%s/#alien_counter_03i#", fGridOutputDir.Data()), "Output directory");
//            fMergingJDL->SetOutputDirectory(fGridOutputDir);         
         }   
      } else {
         // One jdl to be submitted with 2 input parameters: data collection name and output dir prefix
         fGridJDL->AddToInputDataCollection(Form("LF:%s/$1,nodownload", workdir.Data()), "Input xml collections");
         if (!fOutputSingle.IsNull()) {
            if (!fOutputToRunNo) fGridJDL->SetOutputDirectory(Form("#alienfulldir#/%s",fOutputSingle.Data()), "Output directory");
            else fGridJDL->SetOutputDirectory(Form("%s/$2",fGridOutputDir.Data()), "Output directory");
         } else {   
            fGridJDL->SetOutputDirectory(Form("%s/$2/#alien_counter_03i#", fGridOutputDir.Data()), "Output directory");
         }   
      }
   }
      
   // Generate the JDL as a string
   TString sjdl = fGridJDL->Generate();
   TString sjdl1 = fMergingJDL->Generate();
   // Final merge jdl
   if (!fMergeDirName.IsNull()) {
     fMergingJDL->SetOutputDirectory(Form("$1/%s",fMergeDirName.Data()), "Output directory");
     fMergingJDL->AddToInputSandbox(Form("LF:$1/%s/Stage_%s.xml",fMergeDirName.Data(),stageName.Data()));
   } else {  
     fMergingJDL->SetOutputDirectory("$1", "Output directory");
     fMergingJDL->AddToInputSandbox(Form("LF:$1/Stage_%s.xml",stageName.Data()));
   }  
   TString sjdl2 = fMergingJDL->Generate();
   Int_t index, index1;
   sjdl.ReplaceAll("\",\"", "\",\n   \"");
   sjdl.ReplaceAll("(member", "\n   (member");
   sjdl.ReplaceAll("\",\"VO_", "\",\n   \"VO_");
   sjdl.ReplaceAll("{", "{\n   ");
   sjdl.ReplaceAll("};", "\n};");
   sjdl.ReplaceAll("{\n   \n", "{\n");
   sjdl.ReplaceAll("\n\n", "\n");
   sjdl.ReplaceAll("OutputDirectory", "OutputDir");
   sjdl1.ReplaceAll("\",\"", "\",\n   \"");
   sjdl1.ReplaceAll("(member", "\n   (member");
   sjdl1.ReplaceAll("\",\"VO_", "\",\n   \"VO_");
   sjdl1.ReplaceAll("{", "{\n   ");
   sjdl1.ReplaceAll("};", "\n};");
   sjdl1.ReplaceAll("{\n   \n", "{\n");
   sjdl1.ReplaceAll("\n\n", "\n");
   sjdl1.ReplaceAll("OutputDirectory", "OutputDir");
   sjdl2.ReplaceAll("\",\"", "\",\n   \"");
   sjdl2.ReplaceAll("(member", "\n   (member");
   sjdl2.ReplaceAll("\",\"VO_", "\",\n   \"VO_");
   sjdl2.ReplaceAll("{", "{\n   ");
   sjdl2.ReplaceAll("};", "\n};");
   sjdl2.ReplaceAll("{\n   \n", "{\n");
   sjdl2.ReplaceAll("\n\n", "\n");
   sjdl2.ReplaceAll("OutputDirectory", "OutputDir");
   sjdl += "JDLVariables = \n{\n   \"Packages\",\n   \"OutputDir\"\n};\n";
   sjdl.Prepend(Form("Jobtag = {\n   \"comment:%s\"\n};\n", fJobTag.Data()));
   index = sjdl.Index("JDLVariables");
   if (index >= 0) sjdl.Insert(index, "\n# JDL variables\n");
   sjdl += "Workdirectorysize = {\"5000MB\"};";
   sjdl1 += "Workdirectorysize = {\"5000MB\"};";
   sjdl1 += "JDLVariables = \n{\n   \"Packages\",\n   \"OutputDir\"\n};\n";
   index = fJobTag.Index(":");
   if (index < 0) index = fJobTag.Length();
   TString jobTag = fJobTag;
   if (fProductionMode) jobTag.Insert(index,"_Stage$4");
   sjdl1.Prepend(Form("Jobtag = {\n   \"comment:%s_Merging\"\n};\n", jobTag.Data()));
   if (fProductionMode) {   
     sjdl1.Prepend("# Generated merging jdl (production mode) \
                    \n# $1 = full alien path to output directory to be merged \
                    \n# $2 = train number \
                    \n# $3 = production (like LHC10b) \
                    \n# $4 = merging stage \
                    \n# Stage_<n>.xml made via: find <OutputDir> *Stage<n-1>/*root_archive.zip\n");
     sjdl2.Prepend(Form("Jobtag = {\n   \"comment:%s_FinalMerging\"\n};\n", jobTag.Data()));
     sjdl2.Prepend("# Generated merging jdl \
                    \n# $1 = full alien path to output directory to be merged \
                    \n# $2 = train number \
                    \n# $3 = production (like LHC10b) \
                    \n# $4 = merging stage \
                    \n# Stage_<n>.xml made via: find <OutputDir> *Stage<n-1>/*root_archive.zip\n");
   } else {
     sjdl1.Prepend("# Generated merging jdl \
                    \n# $1 = full alien path to output directory to be merged \
                    \n# $2 = merging stage \
                    \n# xml made via: find <OutputDir> *Stage<n-1>/*root_archive.zip\n");
     sjdl2.Prepend(Form("Jobtag = {\n   \"comment:%s_FinalMerging\"\n};\n", jobTag.Data()));
     sjdl2.Prepend("# Generated merging jdl \
                    \n# $1 = full alien path to output directory to be merged \
                    \n# $2 = merging stage \
                    \n# xml made via: find <OutputDir> *Stage<n-1>/*root_archive.zip\n");
   }
   index = sjdl1.Index("JDLVariables");
   if (index >= 0) sjdl1.Insert(index, "\n# JDL variables\n");
   index = sjdl2.Index("JDLVariables");
   if (index >= 0) sjdl2.Insert(index, "\n# JDL variables\n");
   sjdl1 += "Workdirectorysize = {\"5000MB\"};";
   sjdl2 += "Workdirectorysize = {\"5000MB\"};";
   index = sjdl2.Index("Split =");
   if (index>=0) {
      index1 = sjdl2.Index("\n", index);
      sjdl2.Remove(index, index1-index+1);
   }
   index = sjdl2.Index("SplitMaxInputFileNumber");
   if (index>=0) {
      index1 = sjdl2.Index("\n", index);
      sjdl2.Remove(index, index1-index+1);
   }
   index = sjdl2.Index("InputDataCollection");
   if (index>=0) {
      index1 = sjdl2.Index(";", index);
      sjdl2.Remove(index, index1-index+1);
   }
   index = sjdl2.Index("InputDataListFormat");
   if (index>=0) {
      index1 = sjdl2.Index("\n", index);
      sjdl2.Remove(index, index1-index+1);
   }
   index = sjdl2.Index("InputDataList");
   if (index>=0) {
      index1 = sjdl2.Index("\n", index);
      sjdl2.Remove(index, index1-index+1);
   }
   sjdl2.ReplaceAll("wn.xml", Form("Stage_%s.xml",stageName.Data()));
   // Write jdl to file
   ofstream out;
   out.open(fJDLName.Data(), ios::out);
   if (out.bad()) {
      Error("WriteJDL", "Bad file name: %s", fJDLName.Data());
      return kFALSE;
   }
   out << sjdl << endl;
   out.close();
   TString mergeJDLName = fExecutable;
   mergeJDLName.ReplaceAll(".sh", "_merge.jdl");
   if (fMergeViaJDL) {
      ofstream out1;
      out1.open(mergeJDLName.Data(), ios::out);
      if (out1.bad()) {
         Error("WriteJDL", "Bad file name: %s", mergeJDLName.Data());
         return kFALSE;
      }
      out1 << sjdl1 << endl;
      out1.close();
      ofstream out2;
      TString finalJDL = mergeJDLName;
      finalJDL.ReplaceAll(".jdl", "_final.jdl");
      out2.open(finalJDL.Data(), ios::out);
      if (out2.bad()) {
         Error("WriteJDL", "Bad file name: %s", finalJDL.Data());
         return kFALSE;
      }
      out2 << sjdl2 << endl;
      out2.close();
   }   

   // Copy jdl to grid workspace   
   if (!copy) {
      Info("WriteJDL", "\n#####   You may want to review jdl:%s and analysis macro:%s before running in <submit> mode", fJDLName.Data(), fAnalysisMacro.Data());
   } else {
      TString locjdl = Form("%s/%s", fGridOutputDir.Data(),fJDLName.Data());
      TString locjdl1 = Form("%s/%s", fGridOutputDir.Data(),mergeJDLName.Data());
      TString finalJDL = mergeJDLName;
      finalJDL.ReplaceAll(".jdl", "_final.jdl");
      TString locjdl2 = Form("%s/%s", fGridOutputDir.Data(),finalJDL.Data());
      if (fProductionMode) {
         locjdl = Form("%s/%s", workdir.Data(),fJDLName.Data());
         locjdl1 = Form("%s/%s", workdir.Data(),mergeJDLName.Data());
         locjdl2 = Form("%s/%s", workdir.Data(),finalJDL.Data());
      }   
      if (FileExists(locjdl)) gGrid->Rm(locjdl);
      if (FileExists(locjdl1)) gGrid->Rm(locjdl1);
      if (FileExists(locjdl2)) gGrid->Rm(locjdl2);
      Info("WriteJDL", "\n#####   Copying JDL file <%s> to your AliEn output directory", fJDLName.Data());
//      TFile::Cp(Form("file:%s",fJDLName.Data()), Form("alien://%s", locjdl.Data()));
      if (!copyLocal2Alien("WriteJDL",fJDLName.Data(),locjdl.Data())) 
         Fatal("","Terminating");
      if (fMergeViaJDL) {
         Info("WriteJDL", "\n#####   Copying merging JDL files <%s> to your AliEn output directory", mergeJDLName.Data());
//         TFile::Cp(Form("file:%s",mergeJDLName.Data()), Form("alien://%s", locjdl1.Data()));
//         TFile::Cp(Form("file:%s",finalJDL.Data()), Form("alien://%s", locjdl2.Data()));
         if (!copyLocal2Alien("WriteJDL",mergeJDLName.Data(),locjdl1.Data()))
            Fatal("","Terminating");
         if (!copyLocal2Alien("WriteJDL",finalJDL.Data(),locjdl2.Data()))
           Fatal("","Terminating");
      }   
   } 
   return kTRUE;
}

//______________________________________________________________________________
Bool_t AliAnalysisAlien::FileExists(const char *lfn)
{
// Returns true if file exists.
   if (!gGrid) return kFALSE;
   TString slfn = lfn;
   slfn.ReplaceAll("alien://","");
   TGridResult *res = gGrid->Ls(slfn);
   if (!res) return kFALSE;
   TMap *map = dynamic_cast<TMap*>(res->At(0));
   if (!map) {
      delete res;
      return kFALSE;
   }   
   TObjString *objs = dynamic_cast<TObjString*>(map->GetValue("name"));
   if (!objs || !objs->GetString().Length()) {
      delete res;
      return kFALSE;
   }
   delete res;   
   return kTRUE;
}

//______________________________________________________________________________
Bool_t AliAnalysisAlien::DirectoryExists(const char *dirname)
{
// Returns true if directory exists. Can be also a path.
// Since there is not API in TAlien, we use the Cd trick:
   if (!gGrid) return kFALSE;
   // Backup current path
   TString cpath = gGrid->Pwd();
   TString command = "cd ";
   TString sdir(dirname);
   sdir.ReplaceAll("alien://", "");
   command += sdir;
   TGridResult *res = gGrid->Command(command);
   if (!res) {
      gGrid->Cd(cpath);
      return kFALSE;
   }   
   TMap *map = (TMap*)res->At(0);
   if (!map) {
      gGrid->Cd(cpath);
      delete res;
      return kFALSE;
   }
   TString sval = map->GetValue("__result__")->GetName();
   Bool_t retval = (Bool_t)sval.Atoi();
   gGrid->Cd(cpath);
   delete res;
   return retval;
}   

//______________________________________________________________________________
void AliAnalysisAlien::CheckDataType(const char *lfn, Bool_t &isCollection, Bool_t &isXml, Bool_t &useTags)
{
// Check input data type.
   isCollection = kFALSE;
   isXml = kFALSE;
   useTags = kFALSE;
   if (!gGrid) {
      Error("CheckDataType", "No connection to grid");
      return;
   }
   isCollection = IsCollection(lfn);
   TString msg = "\n#####   file: ";
   msg += lfn;
   if (isCollection) {
      msg += " type: raw_collection;";
   // special treatment for collections
      isXml = kFALSE;
      // check for tag files in the collection
      TGridResult *res = gGrid->Command(Form("listFilesFromCollection -z -v %s",lfn), kFALSE);
      if (!res) {
         msg += " using_tags: No (unknown)";
         Info("CheckDataType", "%s", msg.Data());
         return;
      }   
      const char* typeStr = res->GetKey(0, "origLFN");
      if (!typeStr || !strlen(typeStr)) {
         msg += " using_tags: No (unknown)";
         Info("CheckDataType", "%s", msg.Data());
         return;
      }   
      TString file = typeStr;
      useTags = file.Contains(".tag");
      if (useTags) msg += " using_tags: Yes";
      else          msg += " using_tags: No";
      Info("CheckDataType", "%s", msg.Data());
      return;
   }
   TString slfn(lfn);
   slfn.ToLower();
   isXml = slfn.Contains(".xml");
   if (isXml) {
   // Open xml collection and check if there are tag files inside
      msg += " type: xml_collection;";
      TGridCollection *coll = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"alien://%s\",1);",lfn));
      if (!coll) {
         msg += " using_tags: No (unknown)";
         Info("CheckDataType", "%s", msg.Data());
         return;
      }   
      TMap *map = coll->Next();
      if (!map) {
         msg += " using_tags: No (unknown)";
         Info("CheckDataType", "%s", msg.Data());
         return;
      }   
      map = (TMap*)map->GetValue("");
      TString file;
      if (map && map->GetValue("name")) file = map->GetValue("name")->GetName();
      useTags = file.Contains(".tag");
      delete coll;
      if (useTags) msg += " using_tags: Yes";
      else          msg += " using_tags: No";
      Info("CheckDataType", "%s", msg.Data());
      return;
   }
   useTags = slfn.Contains(".tag");
   if (slfn.Contains(".root")) msg += " type: root file;";
   else                        msg += " type: unknown file;";
   if (useTags) msg += " using_tags: Yes";
   else          msg += " using_tags: No";
   Info("CheckDataType", "%s", msg.Data());
}

//______________________________________________________________________________
void AliAnalysisAlien::EnablePackage(const char *package)
{
// Enables a par file supposed to exist in the current directory.
   TString pkg(package);
   pkg.ReplaceAll(".par", "");
   pkg += ".par";
   if (gSystem->AccessPathName(pkg)) {
      Fatal("EnablePackage", "Package %s not found", pkg.Data());
      return;
   }
   if (!TObject::TestBit(AliAnalysisGrid::kUsePars))
      Info("EnablePackage", "AliEn plugin will use .par packages");
   TObject::SetBit(AliAnalysisGrid::kUsePars, kTRUE);
   if (!fPackages) {
      fPackages = new TObjArray();
      fPackages->SetOwner();
   }
   fPackages->Add(new TObjString(pkg));
}      

//______________________________________________________________________________
TChain *AliAnalysisAlien::GetChainForTestMode(const char *treeName) const
{
// Make a tree from files having the location specified in fFileForTestMode. 
// Inspired from JF's CreateESDChain.
   if (fFileForTestMode.IsNull()) {
      Error("GetChainForTestMode", "For proof test mode please use SetFileForTestMode() pointing to a file that contains data file locations.");
      return NULL;
   }
   if (gSystem->AccessPathName(fFileForTestMode)) {
      Error("GetChainForTestMode", "File not found: %s", fFileForTestMode.Data());
      return NULL;
   }   
   // Open the file
   ifstream in;
   in.open(fFileForTestMode);
   Int_t count = 0;
    // Read the input list of files and add them to the chain
   TString line;
   TString streeName(treeName);
   if (IsUseMCchain()) streeName = "TE";
   TChain *chain = new TChain(streeName);
   TList *friends = new TList();
   TChain *cfriend = 0;
   if (!fFriendChainName.IsNull()) {
      TObjArray *list = fFriendChainName.Tokenize(" ");
      TIter next(list);
      TObjString *str;
      while((str=(TObjString*)next())) {
         cfriend = new TChain(streeName, str->GetName());
         friends->Add(cfriend);
         chain->AddFriend(cfriend);
      }
      delete list;
   } 
   TString bpath;
   TIter nextfriend(friends);
   while (in.good())
   {
      in >> line;
      if (line.IsNull() || line.BeginsWith("#")) continue;
      if (count++ == fNtestFiles) break;
      TString esdFile(line);
      TFile *file = TFile::Open(esdFile);
      if (file && !file->IsZombie()) {
         chain->Add(esdFile);
         file->Close();
         if (!fFriendChainName.IsNull()) {
            if (esdFile.Index("#") > -1)
               esdFile.Remove(esdFile.Index("#"));
            bpath = gSystem->DirName(esdFile);
            bpath += "/";
            TString fileFriend;
            nextfriend.Reset();
            while ((cfriend=(TChain*)nextfriend())) {
               fileFriend = bpath;
               fileFriend += cfriend->GetTitle();
               file = TFile::Open(fileFriend);
               if (file && !file->IsZombie()) {
                  file->Close();
                  cfriend->Add(fileFriend);
               } else {
                  Fatal("GetChainForTestMode", "Cannot open friend file: %s", fileFriend.Data());
                  return 0;
               } 
            }     
         }
      } else {
         Error("GetChainforTestMode", "Skipping un-openable file: %s", esdFile.Data());
      }   
   }
   in.close();
   if (!chain->GetListOfFiles()->GetEntries()) {
       Error("GetChainForTestMode", "No file from %s could be opened", fFileForTestMode.Data());
       delete chain;
       friends->Delete();
       delete friends;
       return NULL;
   }
   return chain;
}    

//______________________________________________________________________________
const char *AliAnalysisAlien::GetJobStatus(Int_t jobidstart, Int_t lastid, Int_t &nrunning, Int_t &nwaiting, Int_t &nerror, Int_t &ndone)
{
// Get job status for all jobs with jobid>jobidstart.
   static char mstatus[20];
   mstatus[0] = '\0';
   nrunning = 0;
   nwaiting = 0;
   nerror   = 0;
   ndone    = 0;
   TGridJobStatusList *list = gGrid->Ps("");
   if (!list) return mstatus;
   Int_t nentries = list->GetSize();
   TGridJobStatus *status;
   Int_t pid;
   for (Int_t ijob=0; ijob<nentries; ijob++) {
      status = (TGridJobStatus *)list->At(ijob);
      pid = gROOT->ProcessLine(Form("atoi(((TAlienJobStatus*)%p)->GetKey(\"queueId\"));", status));
      if (pid<jobidstart) continue;
      if (pid == lastid) {
         gROOT->ProcessLine(Form("sprintf((char*)%p,((TAlienJobStatus*)%p)->GetKey(\"status\"));",mstatus, status));
      }   
      switch (status->GetStatus()) {
         case TGridJobStatus::kWAITING:
            nwaiting++; break;
         case TGridJobStatus::kRUNNING:
            nrunning++; break;
         case TGridJobStatus::kABORTED:
         case TGridJobStatus::kFAIL:
         case TGridJobStatus::kUNKNOWN:
            nerror++; break;
         case TGridJobStatus::kDONE:
            ndone++;
      }
   }
   list->Delete();
   delete list;
   return mstatus;
}

//______________________________________________________________________________
Bool_t AliAnalysisAlien::IsCollection(const char *lfn) const
{
// Returns true if file is a collection. Functionality duplicated from
// TAlien::Type() because we don't want to directly depend on TAlien.
   if (!gGrid) {
      Error("IsCollection", "No connection to grid");
      return kFALSE;
   }
   TGridResult *res = gGrid->Command(Form("type -z %s",lfn),kFALSE);
   if (!res) return kFALSE;
   const char* typeStr = res->GetKey(0, "type");
   if (!typeStr || !strlen(typeStr)) return kFALSE;
   if (!strcmp(typeStr, "collection")) return kTRUE;
   delete res;
   return kFALSE;
}   

//______________________________________________________________________________
Bool_t AliAnalysisAlien::IsSingleOutput() const
{
// Check if single-ouput option is on.
   return (!fOutputSingle.IsNull());
}

//______________________________________________________________________________
Long64_t AliAnalysisAlien::RunMacroAndExtractLibs(const char* macro, const char *args, TString &libs)
{
// Tries to run the specified macro and return the libraries that it loads.
   TString expname;
   if (strlen(macro)) expname = gSystem->ExpandPathName(macro);
   if (expname.IsNull() || gSystem->AccessPathName(expname)) {
      ::Error("RunMacroAndExtractLibs","Cannot find macro %s in current directory", macro);
      return -1;
   }   
   TString oldlibs = gSystem->GetLibraries();
   TMacro m(expname);
   Int_t error = 0;
   Long64_t retval = m.Exec(args, &error);
   if (error != TInterpreter::kNoError)
   {
      ::Error("RunMacroAndExtractLibs", "Macro interpretation %s failed", macro);
      return -1;
   }
   libs = gSystem->GetLibraries();
   libs.ReplaceAll(oldlibs, "");
   libs.Strip(TString::kLeading);
   TObjArray *libTokens = libs.Tokenize(" ");
   libs = "";
   for (Int_t i=0; i<libTokens->GetEntries(); i++) {
     if (!libs.IsNull()) libs += " ";
     libs += gSystem->BaseName(libTokens->At(i)->GetName());
   }
   delete libTokens;
   return retval;
}   
      
//______________________________________________________________________________
void AliAnalysisAlien::Print(Option_t *) const
{
// Print current plugin settings.
   printf("### AliEn analysis plugin current settings ###\n");
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (mgr && mgr->IsProofMode()) {
      TString proofType = "=   PLUGIN IN PROOF MODE ON CLUSTER:_________________";
      if (TestBit(AliAnalysisGrid::kTest))
         proofType = "=   PLUGIN IN PROOF LITE MODE ON CLUSTER:____________";
      printf("%s %s\n", proofType.Data(), fProofCluster.Data());
      if (!fProofDataSet.IsNull())
      printf("=   Requested data set:___________________________ %s\n", fProofDataSet.Data());
      if (fProofReset==1)
      printf("=   Soft reset signal will be send to master______ CHANGE BEHAVIOR AFTER COMPLETION\n");      
      if (fProofReset>1)   
      printf("=   Hard reset signal will be send to master______ CHANGE BEHAVIOR AFTER COMPLETION\n");      
      if (!fROOTVersion.IsNull())
      printf("=   ROOT version requested________________________ %s\n", fROOTVersion.Data());
      else
      printf("=   ROOT version requested________________________ default\n");
      printf("=   AliRoot version requested_____________________ %s\n", fAliROOTVersion.Data());
      if (!fAliRootMode.IsNull())
      printf("=   Requested AliRoot mode________________________ %s\n", fAliRootMode.Data());  
      if (fNproofWorkers)
      printf("=   Number of PROOF workers limited to____________ %d\n", fNproofWorkers);
      if  (fNproofWorkersPerSlave)
      printf("=   Maximum number of workers per slave___________ %d\n", fNproofWorkersPerSlave);
      if (TestSpecialBit(kClearPackages))
      printf("=   ClearPackages requested...\n");
      if (fIncludePath.Data())
      printf("=   Include path for runtime task compilation: ___ %s\n", fIncludePath.Data());
      printf("=   Additional libs to be loaded or souces to be compiled runtime: <%s>\n",fAdditionalLibs.Data());
      if (fPackages && fPackages->GetEntries()) {
         TIter next(fPackages);
         TObject *obj;
         TString list;
         while ((obj=next())) list += obj->GetName();
         printf("=   Par files to be used: ________________________ %s\n", list.Data());
      } 
      if (TestSpecialBit(kProofConnectGrid))
      printf("=   Requested PROOF connection to grid\n");
      return;
   }
   printf("=   OverwriteMode:________________________________ %d\n", fOverwriteMode);
   if (fOverwriteMode) {
      printf("***** NOTE: Overwrite mode will overwrite the input generated datasets and partial results from previous analysis. \
            \n*****       To disable, use: plugin->SetOverwriteMode(kFALSE);\n");
   }
   printf("=   Copy files to grid: __________________________ %s\n", (IsUseCopy())?"YES":"NO");
   printf("=   Check if files can be copied to grid: ________ %s\n", (IsCheckCopy())?"YES":"NO:Print");
   printf("=   Production mode:______________________________ %d\n", fProductionMode);
   printf("=   Version of API requested: ____________________ %s\n", fAPIVersion.Data());
   printf("=   Version of ROOT requested: ___________________ %s\n", fROOTVersion.Data());
   printf("=   Version of AliRoot requested: ________________ %s\n", fAliROOTVersion.Data());
   if (fUser.Length()) 
   printf("=   User running the plugin: _____________________ %s\n", fUser.Data());
   printf("=   Grid workdir relative to user $HOME: _________ %s\n", fGridWorkingDir.Data());
   printf("=   Grid output directory relative to workdir: ___ %s\n", fGridOutputDir.Data());
   TString basedatadir = fGridDataDir;
   TString pattern = fDataPattern;
   pattern.Strip();
   Int_t ind = pattern.Index(" ");
   if (ind>=0) {
      basedatadir += "/%run%/";
      basedatadir += pattern(0, ind);
      pattern = pattern(ind+1, pattern.Length());
   }   
   printf("=   Data base directory path requested: __________ %s\n", basedatadir.Data());
   printf("=   Data search pattern: _________________________ %s\n", pattern.Data());
   printf("=   Input data format: ___________________________ %s\n", fInputFormat.Data());
   if (fRunNumbers.Length()) 
   printf("=   Run numbers to be processed: _________________ %s\n", fRunNumbers.Data());
   if (fRunRange[0])
   printf("=   Run range to be processed: ___________________ %d-%d\n", fRunRange[0], fRunRange[1]);
   if (!fRunRange[0] && !fRunNumbers.Length()) {
      TIter next(fInputFiles);
      TObject *obj;
      TString list;
      while ((obj=next())) list += obj->GetName();
      printf("=   Input files to be processed: _________________ %s\n", list.Data());
   }
   if (TestBit(AliAnalysisGrid::kTest))
   printf("=   Number of input files used in test mode: _____ %d\n", fNtestFiles);
   printf("=   List of output files to be registered: _______ %s\n", fOutputFiles.Data());
   printf("=   List of outputs going to be archived: ________ %s\n", fOutputArchive.Data());
   printf("=   List of outputs that should not be merged: ___ %s\n", fMergeExcludes.Data());
   printf("=   List of outputs that should not be registered: %s\n", fRegisterExcludes.Data());
   printf("=   List of outputs produced during Terminate: ___ %s\n", fTerminateFiles.Data());
   printf("=====================================================================\n");
   printf("=   Job price: ___________________________________ %d\n", fPrice);
   printf("=   Time to live (TTL): __________________________ %d\n", fTTL);
   printf("=   Max files per subjob: ________________________ %d\n", fSplitMaxInputFileNumber);
   if (fMaxInitFailed>0) 
   printf("=   Max number of subjob fails to kill: __________ %d\n", fMaxInitFailed);
   if (fMasterResubmitThreshold>0) 
   printf("=   Resubmit master job if failed subjobs >_______ %d\n", fMasterResubmitThreshold);
   printf("=   Number of replicas for the output files_______ %d\n", fNreplicas);
   if (fNrunsPerMaster>0)
   printf("=   Number of runs per master job: _______________ %d\n", fNrunsPerMaster);
   printf("=   Number of files in one chunk to be merged: ___ %d\n", fMaxMergeFiles);
   printf("=   Name of the generated execution script: ______ %s\n", fExecutable.Data());
   printf("=   Executable command: __________________________ %s\n", fExecutableCommand.Data());
   if (fArguments.Length()) 
   printf("=   Arguments for the execution script: __________ %s\n",fArguments.Data());
   if (fExecutableArgs.Length()) 
   printf("=   Arguments after macro name in executable______ %s\n",fExecutableArgs.Data());
   printf("=   Name of the generated analysis macro: ________ %s\n",fAnalysisMacro.Data());
   printf("=   User analysis files to be deployed: __________ %s\n",fAnalysisSource.Data());
   printf("=   Additional libs to be loaded or souces to be compiled runtime: <%s>\n",fAdditionalLibs.Data());
   printf("=   Master jobs split mode: ______________________ %s\n",fSplitMode.Data());
   if (fDatasetName)
   printf("=   Custom name for the dataset to be created: ___ %s\n", fDatasetName.Data());
   printf("=   Name of the generated JDL: ___________________ %s\n", fJDLName.Data());
   if (fIncludePath.Data())
   printf("=   Include path for runtime task compilation: ___ %s\n", fIncludePath.Data());
   if (fCloseSE.Length())
   printf("=   Force job outputs to storage element: ________ %s\n", fCloseSE.Data());
   if (fFriendChainName.Length())
   printf("=   Open friend chain file on worker: ____________ %s\n", fFriendChainName.Data());
   if (fPackages && fPackages->GetEntries()) {
      TIter next(fPackages);
      TObject *obj;
      TString list;
      while ((obj=next())) list += obj->GetName();
      printf("=   Par files to be used: ________________________ %s\n", list.Data());
   }   
}

//______________________________________________________________________________
void AliAnalysisAlien::SetDefaults()
{
// Set default values for everything. What cannot be filled will be left empty.
   if (fGridJDL) delete fGridJDL;
   fGridJDL = (TGridJDL*)gROOT->ProcessLine("new TAlienJDL()");
   fMergingJDL = (TGridJDL*)gROOT->ProcessLine("new TAlienJDL()");
   fPrice                      = 1;
   fTTL                        = 30000;
   fSplitMaxInputFileNumber    = 100;
   fMaxInitFailed              = 0;
   fMasterResubmitThreshold    = 0;
   fNtestFiles                 = 10;
   fNreplicas                  = 2;
   fRunRange[0]                = 0;
   fRunRange[1]                = 0;
   fRunPrefix                  = "%d";
   fNrunsPerMaster             = 1;
   fMaxMergeFiles              = 100;
   fRunNumbers                 = "";
   fExecutable                 = "analysis.sh";
   fExecutableCommand          = "root -b -q -x";
   fArguments                  = "";
   fExecutableArgs             = "";
   fAnalysisMacro              = "myAnalysis.C";
   fAnalysisSource             = "";
   fAdditionalLibs             = "";
   fSplitMode                  = "se";
   fAPIVersion                 = "";
   fROOTVersion                = "";
   fAliROOTVersion             = "";
   fUser                       = "";  // Your alien user name
   fGridWorkingDir             = "";
   fGridDataDir                = "";  // Can be like: /alice/sim/PDC_08a/LHC08c9/
   fDataPattern                = "*AliESDs.root";  // Can be like: *AliESDs.root, */pass1/*AliESDs.root, ...
   fFriendChainName            = "";
   fGridOutputDir              = "output";
   fOutputArchive              = "log_archive.zip:std*@disk=1 root_archive.zip:*.root@disk=2";
   fOutputFiles                = "";  // Like "AliAODs.root histos.root"
   fInputFormat                = "xml-single";
   fJDLName                    = "analysis.jdl";
   fJobTag                     = "Automatically generated analysis JDL";
   fMergeExcludes              = "";
   fMergeViaJDL                = 0;
   SetUseCopy(kTRUE);
   SetCheckCopy(kTRUE);
   SetDefaultOutputs(kTRUE);
   fOverwriteMode              = 1;
}   

//______________________________________________________________________________
void AliAnalysisAlien::SetFriendChainName(const char *name, const char *libnames)
{
   // Set file name for the chain of friends and optionally additional libs to be loaded.
   // Libs should be separated by blancs.
   fFriendChainName = name;
   fFriendChainName.ReplaceAll(",", " ");
   fFriendChainName.Strip();
   fFriendChainName.ReplaceAll("  ", " ");
   
   fFriendLibs = libnames;
   if (fFriendLibs.Length()) {
     if(!fFriendLibs.Contains(".so") && 
        !fFriendLibs.Contains(".dylib"))
       Fatal("SetFriendChainName()", "You should provide explicit library names (with extension)");
     fFriendLibs.ReplaceAll(",", " ");
     fFriendLibs.Strip();
     fFriendLibs.ReplaceAll("  ", " ");
   }
}

//______________________________________________________________________________
void AliAnalysisAlien::SetRootVersionForProof(const char *version)
{
// Obsolete method. Use SetROOTVersion instead
   Warning("SetRootVersionForProof", "Obsolete. Use SetROOTVersion instead");
   if (fROOTVersion.IsNull()) SetROOTVersion(version);
   else Error("SetRootVersionForProof", "ROOT version already set to %s", fROOTVersion.Data());
}
   
//______________________________________________________________________________
Bool_t AliAnalysisAlien::CheckMergedFiles(const char *filename, const char *aliendir, Int_t nperchunk, const char *jdl)
{
// Checks current merge stage, makes xml for the next stage, counts number of files, submits next stage.
   // First check if the result is already in the output directory.
   if (FileExists(Form("%s/%s",aliendir,filename))) {
      printf("Final merged results found. Not merging again.\n");
      return kFALSE;
   }
   // Now check the last stage done.
   Int_t stage = 0;
   while (1) {
      if (!FileExists(Form("%s/Stage_%d.xml",aliendir, stage+1))) break;
      stage++;
   }
   // Next stage of merging
   stage++;
   TString pattern = "*root_archive.zip";
   if (stage>1) pattern = Form("Stage_%d/*root_archive.zip", stage-1);
   TGridResult *res = gGrid->Command(Form("find -x Stage_%d %s %s", stage, aliendir, pattern.Data()));
   if (res) delete res;
   // Write standard output to file
   gROOT->ProcessLine(Form("gGrid->Stdout(); > %s", Form("Stage_%d.xml",stage)));
   // Count the number of files inside
   ifstream ifile;
   ifile.open(Form("Stage_%d.xml",stage));
   if (!ifile.good()) {
      ::Error("CheckMergedFiles", "Could not redirect result of the find command to file %s", Form("Stage_%d.xml",stage));
      return kFALSE;
   }   
   TString line;
   Int_t nfiles = 0;
   while (!ifile.eof()) {
      ifile >> line;
      if (line.Contains("/event")) nfiles++;
   }
   ifile.close();
   if (!nfiles) {
      ::Error("CheckMergedFiles", "Cannot start Stage_%d merging since Stage_%d did not produced yet output", stage, stage-1);
      return kFALSE;
   } else {
      printf("=== Stage_%d produced %d files\n", stage-1, nfiles);
   }   
   // Copy the file in the output directory
   printf("===> Copying collection %s in the output directory %s\n", Form("Stage_%d.xml",stage), aliendir);
//   TFile::Cp(Form("Stage_%d.xml",stage), Form("alien://%s/Stage_%d.xml",aliendir,stage));
   if (!copyLocal2Alien("CheckMergedFiles", Form("Stage_%d.xml",stage), 
        Form("%s/Stage_%d.xml",aliendir,stage))) Fatal("","Terminating");
   // Check if this is the last stage to be done.
   Bool_t laststage = (nfiles<nperchunk);
   if (fMaxMergeStages && stage>=fMaxMergeStages) laststage = kTRUE;
   Int_t jobId = 0;
   if (laststage) {
      printf("### Submiting final merging stage %d\n", stage);
      TString finalJDL = jdl;
      finalJDL.ReplaceAll(".jdl", "_final.jdl");
      TString query = Form("submit %s %s %d", finalJDL.Data(), aliendir, stage);
      jobId = SubmitSingleJob(query);
   } else {
      printf("### Submiting merging stage %d\n", stage);
      TString query = Form("submit %s %s %d", jdl, aliendir, stage);
      jobId = SubmitSingleJob(query);
   }
   if (!jobId) return kFALSE;           

   if (!fGridJobIDs.IsNull()) fGridJobIDs.Append(" ");
   fGridJobIDs.Append(Form("%d", jobId));
   if (!fGridStages.IsNull()) fGridStages.Append(" ");
   fGridStages.Append(Form("%s_merge_stage%d", 
			   laststage ? "final" : "partial", stage));

   return kTRUE;   
}        

//______________________________________________________________________________
AliAnalysisManager *AliAnalysisAlien::LoadAnalysisManager(const char *fname)
{
// Loat the analysis manager from a file.
   TFile *file = TFile::Open(fname);
   if (!file) {
      ::Error("LoadAnalysisManager", "Cannot open file %s", fname);
      return 0;
   }   
   TIter nextkey(file->GetListOfKeys());
   AliAnalysisManager *mgr = 0;
   TKey *key;
   while ((key=(TKey*)nextkey())) {
      if (!strcmp(key->GetClassName(), "AliAnalysisManager"))
         mgr = (AliAnalysisManager*)file->Get(key->GetName());
   }
   if (!mgr) 
      ::Error("LoadAnalysisManager", "No analysis manager found in file %s", fname);
   return mgr;
}      

//______________________________________________________________________________
Int_t AliAnalysisAlien::SubmitSingleJob(const char *query)
{
// Submits a single job corresponding to the query and returns job id. If 0 submission failed.
   if (!gGrid) return 0;
   printf("=> %s ------> ",query);
   TGridResult *res = gGrid->Command(query);
   if (!res) return 0;
   TString jobId = res->GetKey(0,"jobId");
   delete res;
   if (jobId.IsNull()) {
      printf("submission failed. Reason:\n");
      gGrid->Stdout();
      gGrid->Stderr();
      ::Error("SubmitSingleJob", "Your query %s could not be submitted", query);
      return 0;
   }
   Int_t ijobId = jobId.Atoi();
   printf(" Job id: '%s' (%d)\n", jobId.Data(), ijobId);
   return ijobId; 
}  

//______________________________________________________________________________
Bool_t AliAnalysisAlien::MergeInfo(const char *output, const char *collection)
{
// Merges a collection of output files using concatenation.
   TString scoll(collection);
   if (!scoll.Contains(".xml")) return kFALSE;
   TGridCollection *coll = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\");", collection));
   if (!coll) {
      ::Error("MergeInfo", "Input XML %s collection empty.", collection);
      return kFALSE;
   }
   // Iterate grid collection
   TString outtmp;
   Bool_t merged = kFALSE;
   Int_t ifile = 0;
   while (coll->Next()) {
      TString fname = gSystem->DirName(coll->GetTURL());
      fname += "/";
      fname += output;
      outtmp = Form("%d_%s", ifile, output);
      if (!TFile::Cp(fname, outtmp)) {
         ::Error("MergeInfo", "Could not copy %s", fname.Data());
         continue;
      }
      ifile++;
      if (ifile<2) {
         gSystem->Exec(Form("cp %s lastmerged", outtmp.Data()));
         continue;
      }
      gSystem->Exec(Form("cat lastmerged %s > tempmerged", outtmp.Data()));
      gSystem->Exec("cp tempmerged lastmerged");
   }
   if (ifile) {
      gSystem->Exec(Form("cp lastmerged %s", output));
      gSystem->Exec(Form("rm tempmerged lastmerged *_%s", output));
      merged = kTRUE;
   }
   return merged;
}   

//______________________________________________________________________________
Bool_t AliAnalysisAlien::MergeOutput(const char *output, const char *basedir, Int_t nmaxmerge, Int_t stage)
{
// Merge given output files from basedir. Basedir can be an alien output directory
// but also an xml file with root_archive.zip locations. The file merger will merge nmaxmerge
// files in a group (ignored for xml input). Merging can be done in stages:
// stage=0 : will merge all existing files in a single stage, supporting resume if run locally
// stage=1 : works with an xml of all root_archive.zip in the output directory
// stage>1 : works with an xml of all root_archive.zip in the Stage_<n-1> directory
   TString outputFile = output;
   TString command;
   TString outputChunk;
   TString previousChunk = "";
   TObjArray *listoffiles = new TObjArray();
//   listoffiles->SetOwner();
   Int_t countChunk = 0;
   Int_t countZero = nmaxmerge;
   Bool_t merged = kTRUE;
   Bool_t isGrid = kTRUE;
   Int_t index = outputFile.Index("@");
   if (index > 0) outputFile.Remove(index);
   TString inputFile = outputFile;
   TString sbasedir = basedir;
   if (sbasedir.Contains(".xml")) {
      // Merge files pointed by the xml - ignore nmaxmerge and set ichunk to 0
      nmaxmerge = 9999999;
      TGridCollection *coll = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\");", basedir));
      if (!coll) {
         ::Error("MergeOutput", "Input XML collection empty.");
         return kFALSE;
      }
      // Iterate grid collection
      while (coll->Next()) {
         TString fname = gSystem->DirName(coll->GetTURL());
         fname += "/";
         fname += inputFile;      
         listoffiles->Add(new TNamed(fname.Data(),""));
      }   
   } else if (sbasedir.Contains(".txt")) {
      // The file having the .txt extension is expected to contain a list of
      // folders where the output files will be looked. For alien folders,
      // the full folder LFN is expected (starting with alien://)
      // Assume lfn's on each line
      TString line;
      ifstream in;
      in.open(sbasedir);
      if (in.fail()) {
         ::Error("MergeOutput", "File %s cannot be opened. Merging stopped." ,sbasedir.Data());
         return kTRUE;
      }           
      Int_t nfiles = 0;
      while (in.good()) {
         in >> line;
         if (line.IsNull() || line.BeginsWith("#")) continue;
         line.Strip();
         if (!line.Contains("alien:")) isGrid = kFALSE;
         line += "/";
         line += outputFile;
         nfiles++;
         listoffiles->Add(new TNamed(line.Data(),""));
      }
      in.close();
      if (!nfiles) {
         ::Error("MergeOutput","Input file %s contains no files to be merged\n", sbasedir.Data());
         delete listoffiles;
         return kFALSE;
      }
   } else {   
      command = Form("find %s/ *%s", basedir, inputFile.Data());
      printf("command: %s\n", command.Data());
      TGridResult *res = gGrid->Command(command);
      if (!res) {
         ::Error("MergeOutput","No result for the find command\n");
         delete listoffiles;
         return kFALSE;
      }     
      TIter nextmap(res);
      TMap *map = 0;
      while ((map=(TMap*)nextmap())) {
         TObjString *objs = dynamic_cast<TObjString*>(map->GetValue("turl"));
         if (!objs || !objs->GetString().Length()) {
            // Nothing found - skip this output
            delete res;
            delete listoffiles;
            return kFALSE;
         }
         listoffiles->Add(new TNamed(objs->GetName(),""));
      }
      delete res;
   }
   if (!listoffiles->GetEntries()) {
      ::Error("MergeOutput","No result for the find command\n");
      delete listoffiles;
      return kFALSE;
   }     

   TFileMerger *fm = 0;
   TIter next0(listoffiles);
   TObjArray *listoffilestmp = new TObjArray();
   listoffilestmp->SetOwner();
   TObject *nextfile;
   TString snextfile;
   // Keep only the files at upper level
   Int_t countChar = 0;
   while ((nextfile=next0())) {
      snextfile = nextfile->GetName();
      Int_t crtCount = snextfile.CountChar('/');
      if (nextfile == listoffiles->First()) countChar = crtCount;
      if (crtCount < countChar) countChar = crtCount;
   }
   next0.Reset();
   while ((nextfile=next0())) {
      snextfile = nextfile->GetName();
      Int_t crtCount = snextfile.CountChar('/');
      if (crtCount > countChar) {
         delete nextfile;
         continue;
      }   
      listoffilestmp->Add(nextfile);
   }
   delete listoffiles;
   listoffiles = listoffilestmp;  // Now contains 'good' files
   listoffiles->Print();
   TIter next(listoffiles);   
   // Check if there is a merge operation to resume. Works only for stage 0 or 1.
   outputChunk = outputFile;
   outputChunk.ReplaceAll(".root", "_*.root");
   // Check for existent temporary merge files
   // Check overwrite mode and remove previous partial results if needed
   // Preserve old merging functionality for stage 0.
   if (stage==0) {
      if (!gSystem->Exec(Form("ls %s 2>/dev/null", outputChunk.Data()))) {
         while (1) {
            // Skip as many input files as in a chunk
            for (Int_t counter=0; counter<nmaxmerge; counter++) {
               nextfile = next();
               if (!nextfile) {
                  ::Error("MergeOutput", "Mismatch found. Please remove partial merged files from local dir.");
                  delete listoffiles;
                  return kFALSE;
               }   
               snextfile = nextfile->GetName();
            }
            outputChunk = outputFile;
            outputChunk.ReplaceAll(".root", Form("_%04d.root", countChunk));
            countChunk++;
            if (gSystem->AccessPathName(outputChunk)) continue;
            // Merged file with chunks up to <countChunk> found
            ::Info("MergeOutput", "Resume merging of <%s> from <%s>\n", outputFile.Data(), outputChunk.Data());
            previousChunk = outputChunk;
            break;
         }
      }   
      countZero = nmaxmerge;
   
      while ((nextfile=next())) {
         snextfile = nextfile->GetName();
         // Loop 'find' results and get next LFN
         if (countZero == nmaxmerge) {
            // First file in chunk - create file merger and add previous chunk if any.
            fm = new TFileMerger(isGrid);
            fm->SetFastMethod(kTRUE);
            if (previousChunk.Length()) fm->AddFile(previousChunk.Data());
            outputChunk = outputFile;
            outputChunk.ReplaceAll(".root", Form("_%04d.root", countChunk));
         }
         // If last file found, put merged results in the output file
         if (nextfile == listoffiles->Last()) outputChunk = outputFile;
         // Add file to be merged and decrement chunk counter.
         fm->AddFile(snextfile);
         countZero--;
         if (countZero==0 || nextfile == listoffiles->Last()) {            
            if (!fm->GetMergeList() || !fm->GetMergeList()->GetSize()) {
            // Nothing found - skip this output
               ::Warning("MergeOutput", "No <%s> files found.", inputFile.Data());
               merged = kFALSE;
               break;
            }
            fm->OutputFile(outputChunk);
            // Merge the outputs, then go to next chunk      
            if (!fm->Merge()) {
               ::Error("MergeOutput", "Could not merge all <%s> files", outputFile.Data());
               merged = kFALSE;
               break;
            } else {
               ::Info("MergeOutputs", "\n#####   Merged %d output files to <%s>", fm->GetMergeList()->GetSize(), outputChunk.Data());
               gSystem->Unlink(previousChunk);
            }
            if (nextfile == listoffiles->Last()) break;
            countChunk++;
            countZero = nmaxmerge;
            previousChunk = outputChunk;
         }
      }
      delete listoffiles;
      delete fm;
      return merged;
   }
   // Merging stage different than 0.
   // Move to the begining of the requested chunk.
   fm = new TFileMerger(isGrid);
   fm->SetFastMethod(kTRUE);
   while ((nextfile=next())) fm->AddFile(nextfile->GetName());
   delete listoffiles;
   if (!fm->GetMergeList() || !fm->GetMergeList()->GetSize()) {
      // Nothing found - skip this output
      ::Warning("MergeOutput", "No <%s> files found.", inputFile.Data());
      delete fm;
      return kFALSE;
   }
   fm->OutputFile(outputFile);
   // Merge the outputs
   if (!fm->Merge()) {
      ::Error("MergeOutput", "Could not merge all <%s> files", outputFile.Data());
      delete fm;
      return kFALSE;
   } else {
      ::Info("MergeOutput", "\n#####   Merged %d output files to <%s>", fm->GetMergeList()->GetSize(), outputFile.Data());
   }
   delete fm;
   return kTRUE;
} 

//______________________________________________________________________________
Bool_t AliAnalysisAlien::MergeOutputs()
{
// Merge analysis outputs existing in the AliEn space.
   if (TestBit(AliAnalysisGrid::kTest)) return kTRUE;
   if (TestBit(AliAnalysisGrid::kOffline)) return kFALSE;
   if (!Connect()) {
      Error("MergeOutputs", "Cannot merge outputs without grid connection. Terminate will NOT be executed");
      return kFALSE;
   }
   if (fMergeViaJDL) {
      if (!TestBit(AliAnalysisGrid::kMerge)) {
         Info("MergeOutputs", "### Re-run with <MergeViaJDL> option in terminate mode of the plugin to submit merging jobs ###");
         return kFALSE; 
      }     
      if (fProductionMode) {
         Info("MergeOutputs", "### Merging will be submitted by LPM manager... ###");
         return kFALSE;
      }
      Info("MergeOutputs", "Submitting merging JDL");
      if (!SubmitMerging()) return kFALSE;
      Info("MergeOutputs", "### Re-run with <MergeViaJDL> off to collect results after merging jobs are done ###");
      Info("MergeOutputs", "### The Terminate() method is executed by the merging jobs");
      return kFALSE;
   }   
   // Get the output path
   if (!fGridOutputDir.Contains("/")) fGridOutputDir = Form("%s/%s/%s", gGrid->GetHomeDirectory(), fGridWorkingDir.Data(), fGridOutputDir.Data());
   if (!DirectoryExists(fGridOutputDir)) {
      Error("MergeOutputs", "Grid output directory %s not found. Terminate() will NOT be executed", fGridOutputDir.Data());
      return kFALSE;
   }
   if (!fOutputFiles.Length()) {
      Error("MergeOutputs", "No output file names defined. Are you running the right AliAnalysisAlien configuration ?");
      return kFALSE;
   }
   // Check if fast read option was requested
   Info("MergeOutputs", "Started local merging of output files from: alien://%s \
        \n======= overwrite mode = %d", fGridOutputDir.Data(), (Int_t)fOverwriteMode);
   if (fFastReadOption) {
      Warning("MergeOutputs", "You requested FastRead option. Using xrootd flags to reduce timeouts. This may skip some files that could be accessed ! \
             \n+++ NOTE: To disable this option, use: plugin->SetFastReadOption(kFALSE)");
      gEnv->SetValue("XNet.ConnectTimeout",50);
      gEnv->SetValue("XNet.RequestTimeout",50);
      gEnv->SetValue("XNet.MaxRedirectCount",2);
      gEnv->SetValue("XNet.ReconnectTimeout",50);
      gEnv->SetValue("XNet.FirstConnectMaxCnt",1);
   }   
   // Make sure we change the temporary directory
   gSystem->Setenv("TMPDIR", gSystem->pwd());
   // Set temporary compilation directory to current one
   gSystem->SetBuildDir(gSystem->pwd(), kTRUE);   
   TObjArray *list = fOutputFiles.Tokenize(",");
   TIter next(list);
   TObjString *str;
   TString outputFile;
   Bool_t merged = kTRUE;
   while((str=(TObjString*)next())) {
      outputFile = str->GetString();
      Int_t index = outputFile.Index("@");
      if (index > 0) outputFile.Remove(index);
      TString outputChunk = outputFile;
      outputChunk.ReplaceAll(".root", "_*.root");
      // Skip already merged outputs
      if (!gSystem->AccessPathName(outputFile)) {
         if (fOverwriteMode) {
            Info("MergeOutputs", "Overwrite mode. Existing file %s was deleted.", outputFile.Data());
            gSystem->Unlink(outputFile);
            if (!gSystem->Exec(Form("ls %s 2>/dev/null", outputChunk.Data()))) {
               Info("MergeOutput", "Overwrite mode: partial merged files %s will removed",
                     outputChunk.Data());
               gSystem->Exec(Form("rm -f %s", outputChunk.Data()));
            }
         } else {   
            Info("MergeOutputs", "Output file <%s> found. Not merging again.", outputFile.Data());
            continue;
         }   
      } else {
         if (!gSystem->Exec(Form("ls %s 2>/dev/null", outputChunk.Data()))) {
            Info("MergeOutput", "Overwrite mode: partial merged files %s will removed",
                  outputChunk.Data());
            gSystem->Exec(Form("rm -f %s", outputChunk.Data()));
         }   
      }
      if (fMergeExcludes.Contains(outputFile.Data()) || 
          fRegisterExcludes.Contains(outputFile.Data())) continue;
      // Perform a 'find' command in the output directory, looking for registered outputs    
      merged = MergeOutput(outputFile, fGridOutputDir, fMaxMergeFiles);
      if (!merged) {
         Error("MergeOutputs", "Terminate() will  NOT be executed");
	 delete list;
	 return kFALSE;
      }
      TFile *fileOpened = (TFile*)gROOT->GetListOfFiles()->FindObject(outputFile);
      if (fileOpened) fileOpened->Close();
   } 
   delete list;
   return kTRUE;
}   

//______________________________________________________________________________
void AliAnalysisAlien::SetDefaultOutputs(Bool_t flag)
{
// Use the output files connected to output containers from the analysis manager
// rather than the files defined by SetOutputFiles
   if (flag && !TObject::TestBit(AliAnalysisGrid::kDefaultOutputs))
      Info("SetDefaultOutputs", "Plugin will use the output files taken from analysis manager");
   TObject::SetBit(AliAnalysisGrid::kDefaultOutputs, flag);
}
      
//______________________________________________________________________________
void AliAnalysisAlien::SetOutputFiles(const char *list)
{
// Manually set the output files list.
// Removes duplicates. Not allowed if default outputs are not disabled.
   if (TObject::TestBit(AliAnalysisGrid::kDefaultOutputs)) {
      Fatal("SetOutputFiles", "You have to explicitly call SetDefaultOutputs(kFALSE) to manually set output files.");
      return;
   }
   Info("SetOutputFiles", "Output file list is set manually - you are on your own.");
   fOutputFiles = "";
   TString slist = list;
   if (slist.Contains("@")) Warning("SetOutputFiles","The plugin does not allow explicit SE's. Please use: SetNumberOfReplicas() instead.");
   TObjArray *arr = slist.Tokenize(" "); 
   TObjString *os;
   TIter next(arr);
   TString sout;
   while ((os=(TObjString*)next())) {
      sout = os->GetString();
      if (sout.Index("@")>0) sout.Remove(sout.Index("@"));
      if (fOutputFiles.Contains(sout)) continue;
      if (!fOutputFiles.IsNull()) fOutputFiles += ",";
      fOutputFiles += sout;
   }
   delete arr;   
}

//______________________________________________________________________________
void AliAnalysisAlien::SetOutputArchive(const char *list)
{
// Manually set the output archive list. Free text - you are on your own...
// Not allowed if default outputs are not disabled.
   if (TObject::TestBit(AliAnalysisGrid::kDefaultOutputs)) {
      Fatal("SetOutputArchive", "You have to explicitly call SetDefaultOutputs(kFALSE) to manually set the output archives.");
      return;
   }
   Info("SetOutputArchive", "Output archive is set manually - you are on your own.");
   fOutputArchive = list;
}

//______________________________________________________________________________
void AliAnalysisAlien::SetProofParameter(const char *pname, const char *value)
{
// Set some PROOF special parameter.
   TPair *pair = dynamic_cast<TPair*>(fProofParam.FindObject(pname));
   if (pair) {
      TObject *old = pair->Key();
      TObject *val = pair->Value();
      fProofParam.Remove(old);
      delete old;
      delete val;
   }
   fProofParam.Add(new TObjString(pname), new TObjString(value));
}

//______________________________________________________________________________
const char *AliAnalysisAlien::GetProofParameter(const char *pname) const
{
// Returns a special PROOF parameter.
   TPair *pair = dynamic_cast<TPair*>(fProofParam.FindObject(pname));
   if (!pair) return 0;
   return pair->Value()->GetName();
}      

//______________________________________________________________________________
Bool_t AliAnalysisAlien::StartAnalysis(Long64_t /*nentries*/, Long64_t /*firstEntry*/)
{
// Start remote grid analysis.
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   Bool_t testMode = TestBit(AliAnalysisGrid::kTest);
   if (!mgr || !mgr->IsInitialized()) {
      Error("StartAnalysis", "You need an initialized analysis manager for this");
      return kFALSE;
   }
   // Are we in PROOF mode ?
   if (mgr->IsProofMode()) {
      if (testMode) Info("StartAnalysis", "##### Starting PROOF analysis with Proof Lite via the plugin #####");
      else Info("StartAnalysis", "##### Starting PROOF analysis on cluster <%s> via the plugin #####", fProofCluster.Data());
      if (fProofCluster.IsNull()) {
         Error("StartAnalysis", "You need to specify the proof cluster name via SetProofCluster");
         return kFALSE;
      }   
      if (fProofDataSet.IsNull() && !testMode) {
         Error("StartAnalysis", "You need to specify a dataset using SetProofDataSet()");
         return kFALSE;
      }   
      // Set the needed environment
      gEnv->SetValue("XSec.GSI.DelegProxy","2");
      // Do we need to reset PROOF ? The success of the Reset operation cannot be checked
      if (fProofReset && !testMode) {
         if (fProofReset==1) {
            Info("StartAnalysis", "Sending soft reset signal to proof cluster %s", fProofCluster.Data());
            gROOT->ProcessLine(Form("TProof::Reset(\"%s\", kFALSE);", fProofCluster.Data()));
         } else {         
            Info("StartAnalysis", "Sending hard reset signal to proof cluster %s", fProofCluster.Data());
            gROOT->ProcessLine(Form("TProof::Reset(\"%s\", kTRUE);", fProofCluster.Data()));
         }
         Info("StartAnalysis", "Stopping the analysis. Please use SetProofReset(0) to resume.");
         return kFALSE;
      }
      
      if (!testMode) {
        // Check if there is an old active session
        Long_t nsessions = gROOT->ProcessLine(Form("TProof::Mgr(\"%s\")->QuerySessions(\"\")->GetEntries();", fProofCluster.Data()));
        if (nsessions) {
          Error("StartAnalysis","You have to reset your old session first\n");
          return kFALSE;
        }
      }
      // Do we need to change the ROOT version ? The success of this cannot be checked.
      if (!fROOTVersion.IsNull() && !testMode) {
         gROOT->ProcessLine(Form("TProof::Mgr(\"%s\")->SetROOTVersion(\"VO_ALICE@ROOT::%s\");", 
                            fProofCluster.Data(), fROOTVersion.Data()));
      }
      // Connect to PROOF and check the status
      Long_t proof = 0;
      TString sworkers;
      if (fNproofWorkersPerSlave) sworkers = Form("workers=%dx", fNproofWorkersPerSlave);
      else if (fNproofWorkers) sworkers = Form("workers=%d", fNproofWorkers);
      if (!testMode) {
         if (!sworkers.IsNull()) 
            proof = gROOT->ProcessLine(Form("TProof::Open(\"%s\", \"%s\");", fProofCluster.Data(), sworkers.Data()));
         else   
            proof = gROOT->ProcessLine(Form("TProof::Open(\"%s\");", fProofCluster.Data()));
      } else {
         proof = gROOT->ProcessLine("TProof::Open(\"\");");
         if (!proof) {
            Error("StartAnalysis", "Could not start PROOF in test mode");
            return kFALSE;
         }   
      }
      if (!proof) {
         Error("StartAnalysis", "Could not connect to PROOF cluster <%s>", fProofCluster.Data());
         return kFALSE;
      }   
      if (fNproofWorkersPerSlave*fNproofWorkers > 0)
         gROOT->ProcessLine(Form("gProof->SetParallel(%d);", fNproofWorkers));
      // Set proof special parameters if any
      TIter nextpp(&fProofParam);
      TObject *proofparam;
      while ((proofparam=nextpp())) {
         TString svalue = GetProofParameter(proofparam->GetName());
         gROOT->ProcessLine(Form("gProof->SetParameter(\"%s\",%s);", proofparam->GetName(), svalue.Data()));
      }   
      // Is dataset existing ?
      if (!testMode) {
         TString dataset = fProofDataSet;
         Int_t index = dataset.Index("#");
         if (index>=0) dataset.Remove(index);
//         if (!gROOT->ProcessLine(Form("gProof->ExistsDataSet(\"%s\");",fProofDataSet.Data()))) {
//            Error("StartAnalysis", "Dataset %s not existing", fProofDataSet.Data());
//            return kFALSE;
//         }
//         Info("StartAnalysis", "Dataset %s found", dataset.Data());
      }
      // Is ClearPackages() needed ?
      if (TestSpecialBit(kClearPackages)) {
         Info("StartAnalysis", "ClearPackages signal sent to PROOF. Use SetClearPackages(kFALSE) to reset this.");
         gROOT->ProcessLine("gProof->ClearPackages();");
      }
      // Is a given aliroot mode requested ?
      TList optionsList;
      TString parLibs;
      if (!fAliRootMode.IsNull()) {
         TString alirootMode = fAliRootMode;
         if (alirootMode == "default") alirootMode = "";
         Info("StartAnalysis", "You are requesting AliRoot mode: %s", fAliRootMode.Data());
         optionsList.SetOwner();
         optionsList.Add(new TNamed("ALIROOT_MODE", alirootMode.Data()));
         // Check the additional libs to be loaded
         TString extraLibs;
         Bool_t parMode = kFALSE;
         if (!alirootMode.IsNull()) extraLibs = "ANALYSIS:OADB:ANALYSISalice";
         // Parse the extra libs for .so or .dylib
         if (fAdditionalLibs.Length()) {
            TString additionalLibs = fAdditionalLibs;
            additionalLibs.Strip();
            if (additionalLibs.Length() && fFriendLibs.Length())
               additionalLibs += " ";
            additionalLibs += fFriendLibs;
            TObjArray *list = additionalLibs.Tokenize(" ");
            TIter next(list);
            TObjString *str;
            while((str=(TObjString*)next())) {
               if (str->GetString().Contains(".so") ||
                   str->GetString().Contains(".dylib") ) {
                  if (parMode) {
                     Warning("StartAnalysis", "Plugin does not support loading libs after par files in PROOF mode. Library %s and following will not load on workers", str->GetName());
                     break;
                  }   
                  TString stmp = str->GetName();
                  if (stmp.BeginsWith("lib")) stmp.Remove(0,3);
                  stmp.ReplaceAll(".so","");
                  stmp.ReplaceAll(".dylib","");
                  if (!extraLibs.IsNull()) extraLibs += ":";
                  extraLibs += stmp;
                  continue;
               }
               if (str->GetString().Contains(".par")) {
                  // The first par file found in the list will not allow any further .so
                  parMode = kTRUE;
                  if (!parLibs.IsNull()) parLibs += ":";
                  parLibs += str->GetName();
                  continue;
               }   
            }
            if (list) delete list;            
         }
         if (!extraLibs.IsNull()) {
           Info("StartAnalysis", "Adding extra libs: %s",extraLibs.Data());
           optionsList.Add(new TNamed("ALIROOT_EXTRA_LIBS",extraLibs.Data()));
         }
         // Check extra includes
         if (!fIncludePath.IsNull()) {
            TString includePath = fIncludePath;
            includePath.ReplaceAll(" ",":");
            includePath.ReplaceAll("$ALICE_ROOT/","");
            includePath.ReplaceAll("${ALICE_ROOT}/","");
            includePath.ReplaceAll("-I","");
            includePath.Remove(TString::kTrailing, ':');
            Info("StartAnalysis", "Adding extra includes: %s",includePath.Data()); 
            optionsList.Add(new TNamed("ALIROOT_EXTRA_INCLUDES",includePath.Data()));
         }
         // Check if connection to grid is requested
         if (TestSpecialBit(kProofConnectGrid)) 
            optionsList.Add(new TNamed("ALIROOT_ENABLE_ALIEN", "1"));
         // Enable AliRoot par
         if (testMode) {
         // Enable proof lite package
            TString alirootLite = gSystem->ExpandPathName("$ALICE_ROOT/ANALYSIS/macros/AliRootProofLite.par");
            for (Int_t i=0; i<optionsList.GetSize(); i++) {
               TNamed *obj = (TNamed*)optionsList.At(i);
               printf("%s  %s\n", obj->GetName(), obj->GetTitle());
            }   
            if (!gROOT->ProcessLine(Form("gProof->UploadPackage(\"%s\");",alirootLite.Data()))
              && !gROOT->ProcessLine(Form("gProof->EnablePackage(\"%s\", (TList*)%p);",alirootLite.Data(),&optionsList))) {
                  Info("StartAnalysis", "AliRootProofLite enabled");
            } else {                      
               Error("StartAnalysis", "There was an error trying to enable package AliRootProofLite.par");
               return kFALSE;
            }   
         } else {
           if ( ! fAliROOTVersion.IsNull() ) {
             if (gROOT->ProcessLine(Form("gProof->EnablePackage(\"VO_ALICE@AliRoot::%s\", (TList*)%p, kTRUE);", 
                                         fAliROOTVersion.Data(), &optionsList))) {
                Error("StartAnalysis", "There was an error trying to enable package VO_ALICE@AliRoot::%s", fAliROOTVersion.Data());
                return kFALSE;
             }
           }
         }
         // Enable first par files from fAdditionalLibs
         if (!parLibs.IsNull()) {
            TObjArray *list = parLibs.Tokenize(":");
            TIter next(list);
            TObjString *package;
            while((package=(TObjString*)next())) {
               TString spkg = package->GetName();
               spkg.ReplaceAll(".par", "");
               gSystem->Exec(TString::Format("rm -rf %s", spkg.Data()));
               if (!gROOT->ProcessLine(Form("gProof->UploadPackage(\"%s\");", package->GetName()))) {
                  TString enablePackage = (testMode)?Form("gProof->EnablePackage(\"%s\",kFALSE);", package->GetName()):Form("gProof->EnablePackage(\"%s\",kTRUE);", package->GetName());
                  if (gROOT->ProcessLine(enablePackage)) {
                     Error("StartAnalysis", "There was an error trying to enable package %s", package->GetName());
                     return kFALSE;
                  }
               } else {
                  Error("StartAnalysis", "There was an error trying to upload package %s", package->GetName());
                  return kFALSE;
               }
            }
            if (list) delete list; 
         }
      } else {
         if ((fAdditionalLibs.Contains(".so") || fAdditionalLibs.Contains(".dylib")) && 
             !testMode) {
            Error("StartAnalysis", "You request additional libs to be loaded but did not enabled any AliRoot mode. Please refer to: \
                   \n http://aaf.cern.ch/node/83 and use a parameter for SetAliRootMode()");
            return kFALSE;       
         }
      }
      // Enable par files if requested
      if (fPackages && fPackages->GetEntries()) {
         TIter next(fPackages);
         TObject *package;
         while ((package=next())) {
            // Skip packages already enabled
            if (parLibs.Contains(package->GetName())) continue;
            TString spkg = package->GetName();
            spkg.ReplaceAll(".par", "");
            gSystem->Exec(TString::Format("rm -rf %s", spkg.Data()));
            if (!gROOT->ProcessLine(Form("gProof->UploadPackage(\"%s\");", package->GetName()))) {
               if (gROOT->ProcessLine(Form("gProof->EnablePackage(\"%s\",kTRUE);", package->GetName()))) {
                  Error("StartAnalysis", "There was an error trying to enable package %s", package->GetName());
                  return kFALSE;
               }
            } else {
               Error("StartAnalysis", "There was an error trying to upload package %s", package->GetName());
               return kFALSE;
            }
         }
      }
      // Do we need to load analysis source files ?
      // NOTE: don't load on client since this is anyway done by the user to attach his task.
      if (fAnalysisSource.Length()) {
         TObjArray *list = fAnalysisSource.Tokenize(" ");
         TIter next(list);
         TObjString *str;
         while((str=(TObjString*)next())) {
            gROOT->ProcessLine(Form("gProof->Load(\"%s+g\", kTRUE);", str->GetName()));
         }
         if (list) delete list;
      }
      if (testMode) {
      // Register dataset to proof lite.
         if (fFileForTestMode.IsNull()) {
            Error("GetChainForTestMode", "For proof test mode please use SetFileForTestMode() pointing to a file that contains data file locations.");
            return kFALSE;
         }
         if (gSystem->AccessPathName(fFileForTestMode)) {
            Error("GetChainForTestMode", "File not found: %s", fFileForTestMode.Data());
            return kFALSE;
         }   
         TFileCollection *coll = new TFileCollection();
         coll->AddFromFile(fFileForTestMode);
         gROOT->ProcessLine(Form("gProof->RegisterDataSet(\"test_collection\", (TFileCollection*)%p, \"OV\");", coll));
         gROOT->ProcessLine("gProof->ShowDataSets()");
      }
      return kTRUE;
   }
   
   // Check if output files have to be taken from the analysis manager
   if (TestBit(AliAnalysisGrid::kDefaultOutputs)) {
      // Add output files and AOD files
      fOutputFiles = GetListOfFiles("outaod");
      // Add extra files registered to the analysis manager
      TString extra = GetListOfFiles("ext");
      if (!extra.IsNull()) {
         extra.ReplaceAll(".root", "*.root");
         if (!fOutputFiles.IsNull()) fOutputFiles += ",";
         fOutputFiles += extra;
      }
      // Compose the output archive.
      fOutputArchive = "log_archive.zip:std*@disk=1 ";
      if (mgr->IsCollectThroughput())
         fOutputArchive += Form("root_archive.zip:%s,*.stat@disk=%d %s@disk=%d",fOutputFiles.Data(),fNreplicas, mgr->GetFileInfoLog(),fNreplicas);
      else
         fOutputArchive += Form("root_archive.zip:%s,*.stat@disk=%d",fOutputFiles.Data(),fNreplicas);
   }
//   if (!fCloseSE.Length()) fCloseSE = gSystem->Getenv("alien_CLOSE_SE");
   if (TestBit(AliAnalysisGrid::kOffline)) {
      Info("StartAnalysis","\n##### OFFLINE MODE ##### Files to be used in GRID are produced but not copied \
      \n                         there nor any job run. You can revise the JDL and analysis \
      \n                         macro then run the same in \"submit\" mode.");
   } else if (TestBit(AliAnalysisGrid::kTest)) {
      Info("StartAnalysis","\n##### LOCAL MODE #####   Your analysis will be run locally on a subset of the requested \
      \n                         dataset.");
   } else if (TestBit(AliAnalysisGrid::kSubmit)) {
      Info("StartAnalysis","\n##### SUBMIT MODE #####  Files required by your analysis are copied to your grid working \
      \n                         space and job submitted.");
   } else if (TestBit(AliAnalysisGrid::kMerge)) {
      Info("StartAnalysis","\n##### MERGE MODE #####   The registered outputs of the analysis will be merged");
      if (fMergeViaJDL) CheckInputData();
      return kTRUE;
   } else {
      Info("StartAnalysis","\n##### FULL ANALYSIS MODE ##### Producing needed files and submitting your analysis job...");   
   }   
      
   Print();   
   if (!Connect()) {
      Error("StartAnalysis", "Cannot start grid analysis without grid connection");
      return kFALSE;
   }
   if (IsCheckCopy() && gGrid) CheckFileCopy(gGrid->GetHomeDirectory());
   if (!CheckInputData()) {
      Error("StartAnalysis", "There was an error in preprocessing your requested input data");
      return kFALSE;
   }   
   if (!CreateDataset(fDataPattern)) {
      TString serror;
      if (!fRunNumbers.Length() && !fRunRange[0]) serror = Form("path to data directory: <%s>", fGridDataDir.Data());
      if (fRunNumbers.Length()) serror = "run numbers";
      if (fRunRange[0]) serror = Form("run range [%d, %d]", fRunRange[0], fRunRange[1]);
      serror += Form("\n   or data pattern <%s>", fDataPattern.Data());
      Error("StartAnalysis", "No data to process. Please fix %s in your plugin configuration.", serror.Data());
      return kFALSE;
   }   
   WriteAnalysisFile();
   WriteAnalysisMacro();
   WriteExecutable();
   WriteValidationScript();
   if (fMergeViaJDL) {
      WriteMergingMacro();
      WriteMergeExecutable();
      WriteValidationScript(kTRUE);
   }   
   if (!CreateJDL()) return kFALSE;
   if (TestBit(AliAnalysisGrid::kOffline)) return kFALSE;
   if (testMode) {
      // Locally testing the analysis
      Info("StartAnalysis", "\n_______________________________________________________________________ \
      \n   Running analysis script in a daughter shell as on a worker node \
      \n_______________________________________________________________________");
      TObjArray *list = fOutputFiles.Tokenize(",");
      TIter next(list);
      TObjString *str;
      TString outputFile;
      while((str=(TObjString*)next())) {
         outputFile = str->GetString();
         Int_t index = outputFile.Index("@");
         if (index > 0) outputFile.Remove(index);         
         if (!gSystem->AccessPathName(outputFile)) gSystem->Exec(Form("rm %s", outputFile.Data()));
      }
      delete list;
      gSystem->Exec(Form("bash %s 2>stderr", fExecutable.Data()));
      gSystem->Exec(Form("bash %s",fValidationScript.Data()));
//      gSystem->Exec("cat stdout");
      return kFALSE;
   }
   // Check if submitting is managed by LPM manager
   if (fProductionMode) {
      //TString prodfile = fJDLName;
      //prodfile.ReplaceAll(".jdl", ".prod");
      //WriteProductionFile(prodfile);
      Info("StartAnalysis", "Job submitting is managed by LPM. Rerun in terminate mode after jobs finished.");
      return kFALSE;
   }   
   // Submit AliEn job(s)
   gGrid->Cd(fGridOutputDir);
   TGridResult *res;
   TString jobID = "";
   fGridJobIDs = "";
   fGridStages = "";
   if (!fRunNumbers.Length() && !fRunRange[0]) {
      // Submit a given xml or a set of runs
      res = gGrid->Command(Form("submit %s", fJDLName.Data()));
      printf("*************************** %s\n",Form("submit %s", fJDLName.Data()));
      if (res) {
         const char *cjobId = res->GetKey(0,"jobId");
         if (!cjobId) {
            gGrid->Stdout();
            gGrid->Stderr();
            Error("StartAnalysis", "Your JDL %s could not be submitted", fJDLName.Data());
            return kFALSE;
         } else {
            Info("StartAnalysis", "\n_______________________________________________________________________ \
            \n#####   Your JDL %s was successfully submitted. \nTHE JOB ID IS: %s \
            \n_______________________________________________________________________",
                   fJDLName.Data(), cjobId);
            jobID = cjobId;      
	    if (jobID.Atoi()) { 
	      if (!fGridJobIDs.IsNull()) fGridJobIDs.Append(" ");
	      fGridJobIDs.Append(jobID);
	      if (!fGridStages.IsNull()) fGridStages.Append(" ");
	      fGridStages.Append("full");
	    }
         }          
         delete res;
      } else {
         Error("StartAnalysis", "No grid result after submission !!! Bailing out...");
         return kFALSE;      
      }   
   } else {
      // Submit for a range of enumeration of runs.
      if (!Submit()) return kFALSE;
      jobID = fGridJobIDs;
   }   
         
   if (fDropToShell) {
      Info("StartAnalysis", "\n#### STARTING AN ALIEN SHELL FOR YOU. EXIT WHEN YOUR JOB %s HAS FINISHED. #### \
      \n You may exit at any time and terminate the job later using the option <terminate> \
      \n ##################################################################################", jobID.Data());
      gSystem->Exec("aliensh");
   } else {
      Info("StartAnalysis", "\n#### SUBMITTED JOB %s TO ALIEN QUEUE #### \
      \n Remember to terminate the job later using the option <terminate> \
      \n ##################################################################################", jobID.Data());
   }   
   return kTRUE;
}

//______________________________________________________________________________
const char *AliAnalysisAlien::GetListOfFiles(const char *type)
{
// Get a comma-separated list of output files of the requested type.
// Type can be (case unsensitive):
//    aod - list of aod files (std, extensions and filters)
//    out - list of output files connected to containers (but not aod's or extras)
//    ext - list of extra files registered to the manager
//    ter - list of files produced in terminate
   static TString files;
   files = "";
   TString stype = type;
   stype.ToLower();
   TString aodfiles, extra;
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
      ::Error("GetListOfFiles", "Cannot call this without analysis manager");
      return files.Data();
   }
   if (mgr->GetOutputEventHandler()) {
      aodfiles = "";
      if (mgr->GetOutputEventHandler()->GetFillAOD())
         aodfiles = mgr->GetOutputEventHandler()->GetOutputFileName();
      TString extraaod = mgr->GetOutputEventHandler()->GetExtraOutputs(kTRUE);
      if (!extraaod.IsNull() && mgr->GetOutputEventHandler()->GetFillExtension()) {
         if (!aodfiles.IsNull()) aodfiles += ",";
         aodfiles += extraaod;
      }
   }
   if (stype.Contains("aod")) {
      files = aodfiles;
      if (stype == "aod") return files.Data();
   }  
   // Add output files that are not in the list of AOD files 
   TString outputfiles = "";
   TIter next(mgr->GetOutputs());
   AliAnalysisDataContainer *output;
   const char *filename = 0;
   while ((output=(AliAnalysisDataContainer*)next())) {
      filename = output->GetFileName();
      if (!(strcmp(filename, "default"))) continue;
      if (outputfiles.Contains(filename)) continue;
      if (aodfiles.Contains(filename))    continue;
      if (!outputfiles.IsNull() && strlen(filename)) outputfiles += ",";
      outputfiles += filename;
   }
   if (stype.Contains("out")) {
      if (!files.IsNull() && !outputfiles.IsNull()) files += ",";
      files += outputfiles;
      if (stype == "out") return files.Data();
   }   
   // Add extra files registered to the analysis manager
   TString sextra;
   extra = mgr->GetExtraFiles();
   if (!extra.IsNull()) {
      extra.Strip();
      extra.ReplaceAll(" ", ",");
      TObjArray *fextra = extra.Tokenize(",");
      TIter nextx(fextra);
      TObject *obj;
      while ((obj=nextx())) {
         if (aodfiles.Contains(obj->GetName())) continue;
         if (outputfiles.Contains(obj->GetName())) continue;
         if (sextra.Contains(obj->GetName())) continue;
         if (!sextra.IsNull()) sextra += ",";
         sextra += obj->GetName();
      }
      delete fextra;
      if (stype.Contains("ext")) {
         if (!files.IsNull() && !sextra.IsNull()) files += ",";
         files += sextra;
      }
   }   
   if (stype == "ext") return files.Data();
   TString termfiles;
   if (!fTerminateFiles.IsNull()) {
      fTerminateFiles.Strip();
      fTerminateFiles.ReplaceAll(" ",",");
      TObjArray *fextra = fTerminateFiles.Tokenize(",");
      TIter nextx(fextra);
      TObject *obj;
      while ((obj=nextx())) {
         if (aodfiles.Contains(obj->GetName())) continue;
         if (outputfiles.Contains(obj->GetName())) continue;
         if (termfiles.Contains(obj->GetName())) continue;
         if (sextra.Contains(obj->GetName())) continue;
         if (!termfiles.IsNull()) termfiles += ",";
         termfiles += obj->GetName();
      }
      delete fextra;
   }   
   if (stype.Contains("ter")) {
      if (!files.IsNull() && !termfiles.IsNull()) {
         files += ",";
         files += termfiles;
      }   
   }   
   return files.Data();
}   

//______________________________________________________________________________
Bool_t AliAnalysisAlien::Submit()
{
// Submit all master jobs.
   Int_t nmasterjobs = fInputFiles->GetEntries();
   Long_t tshoot = gSystem->Now();
   if (!fNsubmitted && !SubmitNext()) return kFALSE;
   while (fNsubmitted < nmasterjobs) {
      Long_t now = gSystem->Now();
      if ((now-tshoot)>30000) {
         tshoot = now;
         if (!SubmitNext()) return kFALSE;
      }   
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t AliAnalysisAlien::SubmitMerging()
{
// Submit all merging jobs.
   if (!fGridOutputDir.Contains("/")) fGridOutputDir = Form("%s/%s/%s", gGrid->GetHomeDirectory(), fGridWorkingDir.Data(), fGridOutputDir.Data());
   gGrid->Cd(fGridOutputDir);
   TString mergeJDLName = fExecutable;
   mergeJDLName.ReplaceAll(".sh", "_merge.jdl");
   if (!fInputFiles) {
      Error("SubmitMerging", "You have to use explicit run numbers or run range to merge via JDL!");
      return kFALSE;
   }   
   Int_t ntosubmit = fInputFiles->GetEntries();
   for (Int_t i=0; i<ntosubmit; i++) {
      TString runOutDir = gSystem->BaseName(fInputFiles->At(i)->GetName());
      runOutDir.ReplaceAll(".xml", "");
      if (fOutputToRunNo) {
         // The output directory is the run number
         printf("### Submitting merging job for run <%s>\n", runOutDir.Data());
         runOutDir = Form("%s/%s", fGridOutputDir.Data(), runOutDir.Data());
      } else {
         if (!fRunNumbers.Length() && !fRunRange[0]) {
            // The output directory is the grid outdir
            printf("### Submitting merging job for the full output directory %s.\n", fGridOutputDir.Data());
            runOutDir = fGridOutputDir;
         } else {
            // The output directory is the master number in 3 digits format
            printf("### Submitting merging job for master <%03d>\n", i);
            runOutDir = Form("%s/%03d",fGridOutputDir.Data(), i);
         }   
      }
      // Check now the number of merging stages.
      TObjArray *list = fOutputFiles.Tokenize(",");
      TIter next(list);
      TObjString *str;
      TString outputFile;
      while((str=(TObjString*)next())) {
         outputFile = str->GetString();
         Int_t index = outputFile.Index("@");
         if (index > 0) outputFile.Remove(index);
         if (!fMergeExcludes.Contains(outputFile) && 
             !fRegisterExcludes.Contains(outputFile)) break;
      }
      delete list;
      Bool_t done = CheckMergedFiles(outputFile, runOutDir, fMaxMergeFiles, mergeJDLName);
      if (!done && (i==ntosubmit-1)) return kFALSE;
      if (!fRunNumbers.Length() && !fRunRange[0]) break;
   }
   if (!ntosubmit) return kTRUE;
   if (fDropToShell) {
      Info("StartAnalysis", "\n #### STARTING AN ALIEN SHELL FOR YOU. You can exit any time or inspect your jobs in a different shell.##########\
                             \n Make sure your jobs are in a final state (you can resubmit failed ones via 'masterjob <id> resubmit ERROR_ALL')\
                             \n Rerun in 'terminate' mode to submit all merging stages, each AFTER the previous one completed. The final merged \
                             \n output will be written to your alien output directory, while separate stages in <Stage_n>. \
                             \n ################################################################################################################");
      gSystem->Exec("aliensh");
   } else {
      Info("StartAnalysis", "\n #### STARTED MERGING JOBS FOR YOU #### \
                             \n Make sure your jobs are in a final state (you can resubmit failed ones via 'masterjob <id> resubmit ERROR_ALL') \
                             \n Rerun in 'terminate' mode to submit all merging stages, each AFTER the previous one completed. The final merged \
                             \n output will be written to your alien output directory, while separate stages in <Stage_n>. \
                             \n ################################################################################################################");   
   }   
   return kTRUE;
}

//______________________________________________________________________________
Bool_t AliAnalysisAlien::SubmitNext()
{
// Submit next bunch of master jobs if the queue is free. The first master job is
// submitted right away, while the next will not be unless the previous was split.
// The plugin will not submit new master jobs if there are more that 500 jobs in
// waiting phase.
   static Bool_t iscalled = kFALSE;
   static Int_t firstmaster = 0;
   static Int_t lastmaster = 0;
   static Int_t npermaster  = 0;
   if (iscalled) return kTRUE;
   iscalled = kTRUE;
   Int_t nrunning=0, nwaiting=0, nerror=0, ndone=0;
   Int_t ntosubmit = 0;
   TGridResult *res;
   TString jobID = "";
   Int_t nmasterjobs = fInputFiles->GetEntries();
   if (!fNsubmitted) {
      ntosubmit = 1;
      if (!IsUseSubmitPolicy()) {
         if (nmasterjobs>5)
            Info("SubmitNext","### Warning submit policy not used ! Submitting too many jobs at a time may be prohibitted. \
                \n### You can use SetUseSubmitPolicy() to enable if you have problems.");
         ntosubmit = nmasterjobs;
      }   
   } else {
      TString status = GetJobStatus(firstmaster, lastmaster, nrunning, nwaiting, nerror, ndone);
      printf("=== master %d: %s\n", lastmaster, status.Data());
      // If last master not split, just return
      if (status != "SPLIT") {iscalled = kFALSE; return kTRUE;}
      // No more than 100 waiting jobs
      if (nwaiting>500) {iscalled = kFALSE; return kTRUE;}
      npermaster = (nrunning+nwaiting+nerror+ndone)/fNsubmitted;      
      if (npermaster) ntosubmit = (500-nwaiting)/npermaster;
      if (!ntosubmit) ntosubmit = 1;
      printf("=== WAITING(%d) RUNNING(%d) DONE(%d) OTHER(%d) NperMaster=%d => to submit %d jobs\n", 
             nwaiting, nrunning, ndone, nerror, npermaster, ntosubmit);
   }
   for (Int_t i=0; i<ntosubmit; i++) {
      // Submit for a range of enumeration of runs.
      if (fNsubmitted>=nmasterjobs) {iscalled = kFALSE; return kTRUE;}
      TString query;
      TString runOutDir = gSystem->BaseName(fInputFiles->At(fNsubmitted)->GetName());
      runOutDir.ReplaceAll(".xml", "");
      if (fOutputToRunNo)
         query = Form("submit %s %s %s", fJDLName.Data(), fInputFiles->At(fNsubmitted)->GetName(), runOutDir.Data());
      else
         query = Form("submit %s %s %03d", fJDLName.Data(), fInputFiles->At(fNsubmitted)->GetName(), fNsubmitted);
      printf("********* %s\n",query.Data());
      res = gGrid->Command(query);
      if (res) {
         TString cjobId1 = res->GetKey(0,"jobId");
         if (!cjobId1.Length()) {
            iscalled = kFALSE;
            gGrid->Stdout();
            gGrid->Stderr();
            Error("StartAnalysis", "Your JDL %s could not be submitted. The message was:", fJDLName.Data());
            return kFALSE;
         } else {
            Info("StartAnalysis", "\n_______________________________________________________________________ \
            \n#####   Your JDL %s submitted (%d to go). \nTHE JOB ID IS: %s \
            \n_______________________________________________________________________",
                fJDLName.Data(), nmasterjobs-fNsubmitted-1, cjobId1.Data());
	    if (!fGridJobIDs.IsNull()) fGridJobIDs.Append(" ");
	    fGridJobIDs.Append(cjobId1);
	    if (!fGridStages.IsNull()) fGridStages.Append(" ");
	    fGridStages.Append("full");
            jobID += cjobId1;
            jobID += " ";
            lastmaster = cjobId1.Atoi();
            if (!firstmaster) firstmaster = lastmaster;
            fNsubmitted++;
         }          
         delete res;
      } else {
         Error("StartAnalysis", "No grid result after submission !!! Bailing out...");
         return kFALSE;
      }   
   }
   iscalled = kFALSE;
   return kTRUE;
}

//______________________________________________________________________________
void AliAnalysisAlien::WriteAnalysisFile()
{
// Write current analysis manager into the file <analysisFile>
   TString analysisFile = fExecutable;
   analysisFile.ReplaceAll(".sh", ".root");
   if (!TestBit(AliAnalysisGrid::kSubmit)) {  
      AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
      if (!mgr || !mgr->IsInitialized()) {
         Error("WriteAnalysisFile", "You need an initialized analysis manager for this");
         return;
      }
      // Check analysis type
      TObject *handler;
      if (mgr->GetMCtruthEventHandler()) TObject::SetBit(AliAnalysisGrid::kUseMC);
      handler = (TObject*)mgr->GetInputEventHandler();
      if (handler) {
         if (handler->InheritsFrom("AliMultiInputEventHandler")) {
            AliMultiInputEventHandler *multiIH = (AliMultiInputEventHandler*)handler;
            if (multiIH->GetFirstInputEventHandler()->InheritsFrom("AliESDInputHandler")) TObject::SetBit(AliAnalysisGrid::kUseESD);
            if (multiIH->GetFirstInputEventHandler()->InheritsFrom("AliAODInputHandler")) TObject::SetBit(AliAnalysisGrid::kUseAOD);
         } else {
            if (handler->InheritsFrom("AliESDInputHandler")) TObject::SetBit(AliAnalysisGrid::kUseESD);
            if (handler->InheritsFrom("AliAODInputHandler")) TObject::SetBit(AliAnalysisGrid::kUseAOD);
         }
      }
      TDirectory *cdir = gDirectory;
      TFile *file = TFile::Open(analysisFile, "RECREATE");
      if (file) {
         // Skip task Terminate calls for the grid job (but not in test mode, where we want to check also the terminate mode
         if (!TestBit(AliAnalysisGrid::kTest)) mgr->SetSkipTerminate(kTRUE);
         // Unless merging makes no sense
         if (IsSingleOutput()) mgr->SetSkipTerminate(kFALSE);
         mgr->Write();
         delete file;
         // Enable termination for local jobs
         mgr->SetSkipTerminate(kFALSE);
      }
      if (cdir) cdir->cd();
      Info("WriteAnalysisFile", "\n#####   Analysis manager: %s wrote to file <%s>\n", mgr->GetName(),analysisFile.Data());
   }   
   Bool_t copy = kTRUE;
   if (fProductionMode || TestBit(AliAnalysisGrid::kOffline) || TestBit(AliAnalysisGrid::kTest)) copy = kFALSE;
   if (copy) {
      CdWork();
      TString workdir = gGrid->GetHomeDirectory();
      workdir += fGridWorkingDir;
      Info("WriteAnalysisFile", "\n#####   Copying file <%s> containing your initialized analysis manager to your alien workspace", analysisFile.Data());
      if (FileExists(analysisFile)) gGrid->Rm(analysisFile);
      if (!copyLocal2Alien("WriteAnalysisFile",analysisFile.Data(), 
          Form("%s/%s", workdir.Data(),analysisFile.Data()))) Fatal("","Terminating");
   }   
}

//______________________________________________________________________________
void AliAnalysisAlien::WriteAnalysisMacro()
{
// Write the analysis macro that will steer the analysis in grid mode.
   if (!TestBit(AliAnalysisGrid::kSubmit)) {  
      ofstream out;
      out.open(fAnalysisMacro.Data(), ios::out);
      if (!out.good()) {
         Error("WriteAnalysisMacro", "could not open file %s for writing", fAnalysisMacro.Data());
         return;
      }
      Bool_t hasSTEERBase = kFALSE;
      Bool_t hasESD = kFALSE;
      Bool_t hasAOD = kFALSE;
      Bool_t hasANALYSIS = kFALSE;
      Bool_t hasOADB = kFALSE;
      Bool_t hasANALYSISalice = kFALSE;
      Bool_t hasCORRFW = kFALSE;
      TString func = fAnalysisMacro;
      TString type = "ESD";
      TString comment = "// Analysis using ";
      if (fMCLoop) {
         type = "MCGEN";
         comment += "MCGEN";
      } else {
         if (IsUseMCchain()) {
            type = "MC";
            comment += "MC";
         } else {   
            if (TObject::TestBit(AliAnalysisGrid::kUseESD)) comment += "ESD";
            if (TObject::TestBit(AliAnalysisGrid::kUseAOD)) {
               type = "AOD";
               comment += "AOD";
            }   
         }
      }   
      if (type!="AOD" && fFriendChainName!="") {
         Error("WriteAnalysisMacro", "Friend chain can be attached only to AOD");
         return;
      }
      if (TObject::TestBit(AliAnalysisGrid::kUseMC)) comment += "/MC";
      else comment += " data";
      out << "const char *anatype = \"" << type.Data() << "\";" << endl << endl;
      func.ReplaceAll(".C", "");
      out << "void " << func.Data() << "()" << endl; 
      out << "{" << endl;
      out << comment.Data() << endl;
      out << "// Automatically generated analysis steering macro executed in grid subjobs" << endl << endl;
      out << "   TStopwatch timer;" << endl;
      out << "   timer.Start();" << endl << endl;
      // Change temp directory to current one
      if (!IsLocalTest()) {  
         out << "// connect to AliEn and make the chain" << endl;
         out << "   if (!TGrid::Connect(\"alien://\")) return;" << endl;
      }   
      out << "// Set temporary merging directory to current one" << endl;
      out << "   gSystem->Setenv(\"TMPDIR\", gSystem->pwd());" << endl << endl;   
      out << "// Set temporary compilation directory to current one" << endl;
      out << "   gSystem->SetBuildDir(gSystem->pwd(), kTRUE);" << endl << endl;   
      // Reset existing include path
      out << "// Reset existing include path and add current directory first in the search" << endl;
      out << "   gSystem->SetIncludePath(\"-I.\");" << endl;
      if (!fExecutableCommand.Contains("aliroot")) {
         out << "// load base root libraries" << endl;
         out << "   gSystem->Load(\"libTree\");" << endl;
         out << "   gSystem->Load(\"libGeom\");" << endl;
         out << "   gSystem->Load(\"libVMC\");" << endl;
         out << "   gSystem->Load(\"libPhysics\");" << endl << endl;
         out << "   gSystem->Load(\"libMinuit\");" << endl << endl;
      }   
      if (fAdditionalRootLibs.Length()) {
         // in principle libtree /lib geom libvmc etc. can go into this list, too
         out << "// Add aditional libraries" << endl;
         TObjArray *list = fAdditionalRootLibs.Tokenize(" ");
         TIter next(list);
         TObjString *str;
         while((str=(TObjString*)next())) {
            if (str->GetString().Contains(".so") || str->GetString().Contains(".dylib"))
            out << "   gSystem->Load(\"" << str->GetString().Data() << "\");" << endl;
         }
         if (list) delete list;
      }
      out << "// Load analysis framework libraries" << endl;
      TString setupPar = "AliAnalysisAlien::SetupPar";
      if (!fPackages) {
         if (!fExecutableCommand.Contains("aliroot")) {         
            out << "   gSystem->Load(\"libSTEERBase\");" << endl;
            out << "   gSystem->Load(\"libESD\");" << endl;
            out << "   gSystem->Load(\"libAOD\");" << endl;
         }   
         out << "   gSystem->Load(\"libANALYSIS\");" << endl;
         out << "   gSystem->Load(\"libOADB\");" << endl;
         out << "   gSystem->Load(\"libANALYSISalice\");" << endl;
         out << "   gSystem->Load(\"libCORRFW\");" << endl << endl;
      } else {
         TIter next(fPackages);
         TObject *obj;
         TString pkgname;
         while ((obj=next())) {
            pkgname = obj->GetName();
            if (pkgname == "STEERBase" ||
                pkgname == "STEERBase.par") hasSTEERBase = kTRUE;
            if (pkgname == "ESD" ||
                pkgname == "ESD.par")       hasESD = kTRUE;
            if (pkgname == "AOD" ||
                pkgname == "AOD.par")       hasAOD = kTRUE;
            if (pkgname == "ANALYSIS" ||
                pkgname == "ANALYSIS.par")  hasANALYSIS = kTRUE;
            if (pkgname == "OADB" ||
                pkgname == "OADB.par")      hasOADB = kTRUE;
            if (pkgname == "ANALYSISalice" ||
                pkgname == "ANALYSISalice.par") hasANALYSISalice = kTRUE;
            if (pkgname == "CORRFW" ||
                pkgname == "CORRFW.par")    hasCORRFW = kTRUE;
         }
         if (hasANALYSISalice) setupPar = "SetupPar";   
         if (!hasSTEERBase) out << "   gSystem->Load(\"libSTEERBase\");" << endl;
         else out << "   if (!" << setupPar << "(\"STEERBase\")) return;" << endl;
         if (!hasESD)       out << "   gSystem->Load(\"libESD\");" << endl;
         else out << "   if (!" << setupPar << "(\"ESD\")) return;" << endl;
         if (!hasAOD)       out << "   gSystem->Load(\"libAOD\");" << endl;
         else out << "   if (!" << setupPar << "(\"AOD\")) return;" << endl;
         if (!hasANALYSIS)  out << "   gSystem->Load(\"libANALYSIS\");" << endl;
         else out << "   if (!" << setupPar << "(\"ANALYSIS\")) return;" << endl;
         if (!hasOADB)  out << "   gSystem->Load(\"libOADB\");" << endl;
         else out << "   if (!" << setupPar << "(\"OADB\")) return;" << endl;
         if (!hasANALYSISalice)   out << "   gSystem->Load(\"libANALYSISalice\");" << endl;
         else out << "   if (!" << setupPar << "(\"ANALYSISalice\")) return;" << endl;
         if (!hasCORRFW)    out << "   gSystem->Load(\"libCORRFW\");" << endl << endl;
         else out << "   if (!" << setupPar << "(\"CORRFW\")) return;" << endl << endl;
         out << "// Compile other par packages" << endl;
         next.Reset();
         while ((obj=next())) {
            pkgname = obj->GetName();
            if (pkgname == "STEERBase" ||
                pkgname == "STEERBase.par" ||
                pkgname == "ESD" ||
                pkgname == "ESD.par" ||
                pkgname == "AOD" ||
                pkgname == "AOD.par" ||
                pkgname == "ANALYSIS" ||
                pkgname == "ANALYSIS.par" ||
                pkgname == "OADB" ||
                pkgname == "OADB.par" ||
                pkgname == "ANALYSISalice" ||
                pkgname == "ANALYSISalice.par" ||
                pkgname == "CORRFW" ||
                pkgname == "CORRFW.par") continue;
            out << "   if (!" << setupPar << "(\"" << obj->GetName() << "\")) return;" << endl;
         }   
      }   
      out << "// include path" << endl;
      // Get the include path from the interpreter and remove entries pointing to AliRoot
      out << "   TString intPath = gInterpreter->GetIncludePath();" << endl;
      out << "   TObjArray *listpaths = intPath.Tokenize(\" \");" << endl;
      out << "   TIter nextpath(listpaths);" << endl;
      out << "   TObjString *pname;" << endl;
      out << "   while ((pname=(TObjString*)nextpath())) {" << endl;
      out << "      TString current = pname->GetName();" << endl;
      out << "      if (current.Contains(\"AliRoot\") || current.Contains(\"ALICE_ROOT\")) continue;" << endl;
      out << "      gSystem->AddIncludePath(current);" << endl;
      out << "   }" << endl;
      out << "   if (listpaths) delete listpaths;" << endl;
      if (fIncludePath.Length()) out << "   gSystem->AddIncludePath(\"" << fIncludePath.Data() << "\");" << endl;
      out << "   gROOT->ProcessLine(\".include $ALICE_ROOT/include\");" << endl;
      out << "   printf(\"Include path: %s\\n\", gSystem->GetIncludePath());" << endl << endl;
      if (fMCLoop && !fGeneratorLibs.IsNull()) {
         out << "// MC generator libraries" << endl;
         TObjArray *list = fGeneratorLibs.Tokenize(" ");
         TIter next(list);
         TObjString *str;
         while((str=(TObjString*)next())) {
            out << "   gSystem->Load(\"" << str->GetName() << "\");" << endl;
         }
         delete list;
      }
      if (fAdditionalLibs.Length()) {
         out << "// Add aditional AliRoot libraries" << endl;
         TString additionalLibs = fAdditionalLibs;
         additionalLibs.Strip();
         if (additionalLibs.Length() && fFriendLibs.Length())
            additionalLibs += " ";
         additionalLibs += fFriendLibs;
         TObjArray *list = additionalLibs.Tokenize(" ");
         TIter next(list);
         TObjString *str;
         while((str=(TObjString*)next())) {
            if (str->GetString().Contains(".so") || str->GetString().Contains(".dylib"))
               out << "   gSystem->Load(\"" << str->GetString().Data() << "\");" << endl;
            if (str->GetString().Contains(".par"))
               out << "   if (!" << setupPar << "(\"" << str->GetString() << "\")) return;" << endl;
         }
         delete list;
      }
      out << endl;
      out << "// analysis source to be compiled at runtime (if any)" << endl;
      if (fAnalysisSource.Length()) {
         TObjArray *list = fAnalysisSource.Tokenize(" ");
         TIter next(list);
         TObjString *str;
         while((str=(TObjString*)next())) {
            out << "   gROOT->ProcessLine(\".L " << str->GetString().Data() << "+g\");" << endl;
         }   
         if (list) delete list;
      }
      out << endl;
//      out << "   printf(\"Currently load libraries:\\n\");" << endl;
//      out << "   printf(\"%s\\n\", gSystem->GetLibraries());" << endl;
      if (fFastReadOption) {
         Warning("WriteAnalysisMacro", "!!! You requested FastRead option. Using xrootd flags to reduce timeouts in the grid jobs. This may skip some files that could be accessed !!! \
                \n+++ NOTE: To disable this option, use: plugin->SetFastReadOption(kFALSE)");
         out << "// fast xrootd reading enabled" << endl;
         out << "   printf(\"!!! You requested FastRead option. Using xrootd flags to reduce timeouts. Note that this may skip some files that could be accessed !!!\");" << endl;
         out << "   gEnv->SetValue(\"XNet.ConnectTimeout\",50);" << endl;
         out << "   gEnv->SetValue(\"XNet.RequestTimeout\",50);" << endl;
         out << "   gEnv->SetValue(\"XNet.MaxRedirectCount\",2);" << endl;
         out << "   gEnv->SetValue(\"XNet.ReconnectTimeout\",50);" << endl;
         out << "   gEnv->SetValue(\"XNet.FirstConnectMaxCnt\",1);" << endl << endl;
      } 
      out << "// read the analysis manager from file" << endl;
      TString analysisFile = fExecutable;
      analysisFile.ReplaceAll(".sh", ".root");
      out << "   AliAnalysisManager *mgr = AliAnalysisAlien::LoadAnalysisManager(\"" 
          << analysisFile << "\");" << endl;
      out << "   if (!mgr) return;" << endl;
      if (IsLocalTest()) {
         out << "   AliAnalysisAlien *plugin = new AliAnalysisAlien();" << endl;
         out << "   plugin->SetRunMode(\"test\");" << endl;
         if (fFileForTestMode.IsNull())
            out << "   plugin->SetFileForTestMode(\"data.txt\");" << endl;
         else   
            out << "   plugin->SetFileForTestMode(\"" << fFileForTestMode << "\");" << endl;
         out << "   plugin->SetNtestFiles(" << fNtestFiles << ");" << endl;
         if (!fFriendChainName.IsNull()) 
            out << "   plugin->SetFriendChainName(\"" << fFriendChainName << "\",\"" << fFriendLibs << "\");" << endl;
         if (IsUseMCchain())
            out << "   plugin->SetUseMCchain();" << endl;
         if (fMCLoop)
            out << "   plugin->SetMCLoop(kTRUE);" << endl;  
         out << "   mgr->SetGridHandler(plugin);" << endl;
         if (AliAnalysisManager::GetAnalysisManager()) {
            out << "   mgr->SetDebugLevel(" << AliAnalysisManager::GetAnalysisManager()->GetDebugLevel() << ");" << endl;
            out << "   mgr->SetNSysInfo(" << AliAnalysisManager::GetAnalysisManager()->GetNsysInfo() << ");" << endl;
         } else {
            out << "   mgr->SetDebugLevel(10);" << endl;
            out << "   mgr->SetNSysInfo(100);" << endl;
         }
      }
      out << "   mgr->PrintStatus();" << endl;
      if (AliAnalysisManager::GetAnalysisManager()) {
         if (AliAnalysisManager::GetAnalysisManager()->GetDebugLevel()>3) {
            out << "   gEnv->SetValue(\"XNet.Debug\", \"1\");" << endl;
         } else {
            if (TestBit(AliAnalysisGrid::kTest))            
               out << "   AliLog::SetGlobalLogLevel(AliLog::kWarning);" << endl;
            else
               out << "   AliLog::SetGlobalLogLevel(AliLog::kError);" << endl;
         }
      }   
      if (!IsLocalTest()) {
         if (fMCLoop) {
            out << "   mgr->SetCacheSize(0);" << endl;
            out << "   mgr->EventLoop(" << fNMCevents << ");" << endl;
         } else {   
            out << "   TChain *chain = CreateChain(\"wn.xml\", anatype);" << endl << endl;   
            out << "   mgr->StartAnalysis(\"localfile\", chain);" << endl;
         }   
      } else {
         if (fMCLoop) {
            out << "   mgr->SetCacheSize(0);" << endl;
            out << "   mgr->EventLoop(" << fNMCevents << ");" << endl;         
         } else {
            out << "   mgr->StartAnalysis(\"localfile\");" << endl;
         }   
      }   
      out << "   timer.Stop();" << endl;
      out << "   timer.Print();" << endl;
      out << "}" << endl << endl;
      if (!IsLocalTest() && !fMCLoop) {
         out <<"//________________________________________________________________________________" << endl;
         out << "TChain* CreateChain(const char *xmlfile, const char *type=\"ESD\")" << endl;
         out << "{" << endl;
         out << "// Create a chain using url's from xml file" << endl;
         out << "   TString filename;" << endl;
         out << "   Int_t run = 0;" << endl;
         if (IsUseMCchain()) {
            out << "   TString treename = \"TE\";" << endl;
         } else {   
            if (!fTreeName.IsNull()) {
               out << "   TString treename = \"" << fTreeName << "\";" << endl;
            } else {   
               out << "   TString treename = type;" << endl;
               out << "   treename.ToLower();" << endl;
               out << "   treename += \"Tree\";" << endl;
            }   
         }   
         out << "   printf(\"***************************************\\n\");" << endl;
         out << "   printf(\"    Getting chain of trees %s\\n\", treename.Data());" << endl;
         out << "   printf(\"***************************************\\n\");" << endl;
         out << "   TAlienCollection *coll = TAlienCollection::Open(xmlfile);" << endl;
         out << "   if (!coll) {" << endl;
         out << "      ::Error(\"CreateChain\", \"Cannot create an AliEn collection from %s\", xmlfile);" << endl;
         out << "      return NULL;" << endl;
         out << "   }" << endl;
         out << "   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();" << endl;
         out << "   TChain *chain = new TChain(treename);" << endl;
         if(!fFriendChainName.IsNull()) {
            out << "   TList *friends = new TList();" << endl;
            out << "   TIter nextfriend(friends);" << endl;
            out << "   TChain *cfriend = 0;" << endl;
            TObjArray *list = fFriendChainName.Tokenize(" ");
            TIter next(list);
            TObjString *str;
            while((str=(TObjString*)next())) {
               out << "   cfriend = new TChain(treename, \"" << str->GetName() << "\");" << endl;
               out << "   friends->Add(cfriend);" << endl;
               out << "   chain->AddFriend(cfriend);" << endl;
            }
            delete list;   
//            out << "   TChain *chainFriend = new TChain(treename);" << endl;
         }
         out << "   coll->Reset();" << endl;
         out << "   while (coll->Next()) {" << endl;
         out << "      filename = coll->GetTURL("");" << endl;
         out << "      if (mgr) {" << endl;
         out << "         Int_t nrun = AliAnalysisManager::GetRunFromAlienPath(filename);" << endl;
         out << "         if (nrun && nrun != run) {" << endl;
         out << "            printf(\"### Run number detected from chain: %d\\n\", nrun);" << endl;
         out << "            mgr->SetRunFromPath(nrun);" << endl;
         out << "            run = nrun;" << endl;
         out << "         }" << endl;
         out << "      }" << endl;
         out << "      chain->Add(filename);" << endl;
         if(!fFriendChainName.IsNull()) {
            out << "      TString bpath=coll->GetTURL(\"\");" << endl;
            out << "      if (bpath.Index(\"#\") > -1) bpath.Remove(bpath.Index(\"#\"));" << endl;
            out << "      bpath = gSystem->DirName(bpath);" << endl;
            out << "      bpath += \"/\";" << endl;
            out << "      TString fileFriend;" << endl;
            out << "      nextfriend.Reset();" << endl;
            out << "      while ((cfriend=(TChain*)nextfriend())) {" << endl;
            out << "         fileFriend = bpath;" << endl;
            out << "         fileFriend += cfriend->GetTitle();" << endl;
            out << "         TFile *file = TFile::Open(fileFriend);" << endl;
            out << "         if (file) {" << endl;
            out << "            file->Close();" << endl;
            out << "            cfriend->Add(fileFriend.Data());" << endl;
            out << "         } else {" << endl;
            out << "            ::Fatal(\"CreateChain\", \"Cannot open friend file: %s\", fileFriend.Data());" << endl;
            out << "            return 0;" << endl;
            out << "         }" << endl;
            out << "      }" << endl;
         }
         out << "   }" << endl;
         out << "   if (!chain->GetNtrees()) {" << endl;
         out << "      ::Error(\"CreateChain\", \"No tree found from collection %s\", xmlfile);" << endl;
         out << "      return NULL;" << endl;
         out << "   }" << endl;
         out << "   return chain;" << endl;
         out << "}" << endl << endl;
      }   
      if (hasANALYSISalice) {
         out <<"//________________________________________________________________________________" << endl;
         out << "Bool_t SetupPar(const char *package) {" << endl;
         out << "// Compile the package and set it up." << endl;
         out << "   TString pkgdir = package;" << endl;
         out << "   pkgdir.ReplaceAll(\".par\",\"\");" << endl;
         out << "   gSystem->Exec(TString::Format(\"tar xvzf %s.par\", pkgdir.Data()));" << endl;
         out << "   TString cdir = gSystem->WorkingDirectory();" << endl;
         out << "   gSystem->ChangeDirectory(pkgdir);" << endl;
         out << "   // Check for BUILD.sh and execute" << endl;
         out << "   if (!gSystem->AccessPathName(\"PROOF-INF/BUILD.sh\")) {" << endl;
         out << "      printf(\"*******************************\\n\");" << endl;
         out << "      printf(\"*** Building PAR archive    ***\\n\");" << endl;
         out << "      printf(\"*******************************\\n\");" << endl;
         out << "      if (gSystem->Exec(\"PROOF-INF/BUILD.sh\")) {" << endl;
         out << "         ::Error(\"SetupPar\", \"Cannot build par archive %s\", pkgdir.Data());" << endl;
         out << "         gSystem->ChangeDirectory(cdir);" << endl;
         out << "         return kFALSE;" << endl;
         out << "      }" << endl;
         out << "   } else {" << endl;
         out << "      ::Error(\"SetupPar\",\"Cannot access PROOF-INF/BUILD.sh for package %s\", pkgdir.Data());" << endl;
         out << "      gSystem->ChangeDirectory(cdir);" << endl;
         out << "      return kFALSE;" << endl;
         out << "   }" << endl;
         out << "   // Check for SETUP.C and execute" << endl;
         out << "   if (!gSystem->AccessPathName(\"PROOF-INF/SETUP.C\")) {" << endl;
         out << "      printf(\"*******************************\\n\");" << endl;
         out << "      printf(\"***    Setup PAR archive    ***\\n\");" << endl;
         out << "      printf(\"*******************************\\n\");" << endl;
         out << "      gROOT->Macro(\"PROOF-INF/SETUP.C\");" << endl;
         out << "   } else {" << endl;
         out << "      ::Error(\"SetupPar\",\"Cannot access PROOF-INF/SETUP.C for package %s\", pkgdir.Data());" << endl;
         out << "      gSystem->ChangeDirectory(cdir);" << endl;
         out << "      return kFALSE;" << endl;
         out << "   }" << endl;
         out << "   // Restore original workdir" << endl;
         out << "   gSystem->ChangeDirectory(cdir);" << endl;
         out << "   return kTRUE;" << endl;
         out << "}" << endl;
      }
      Info("WriteAnalysisMacro", "\n#####   Analysis macro to run on worker nodes <%s> written",fAnalysisMacro.Data());
   }   
   Bool_t copy = kTRUE;
   if (fProductionMode || TestBit(AliAnalysisGrid::kOffline) || TestBit(AliAnalysisGrid::kTest)) copy = kFALSE;
   if (copy) {
      CdWork();
      TString workdir = gGrid->GetHomeDirectory();
      workdir += fGridWorkingDir;
      if (FileExists(fAnalysisMacro)) gGrid->Rm(fAnalysisMacro);
      Info("WriteAnalysisMacro", "\n#####   Copying analysis macro: <%s> to your alien workspace", fAnalysisMacro.Data());
//      TFile::Cp(Form("file:%s",fAnalysisMacro.Data()), Form("alien://%s/%s", workdir.Data(), fAnalysisMacro.Data()));
      if (!copyLocal2Alien("WriteAnalysisMacro",fAnalysisMacro.Data(), 
           Form("alien://%s/%s", workdir.Data(), 
           fAnalysisMacro.Data()))) Fatal("","Terminating");
   }
}

//______________________________________________________________________________
void AliAnalysisAlien::WriteMergingMacro()
{
// Write a macro to merge the outputs per master job.
   if (!fMergeViaJDL) return;
   if (!fOutputFiles.Length()) {
      Error("WriteMergingMacro", "No output file names defined. Are you running the right AliAnalysisAlien configuration ?");
      return;
   }   
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   TString mergingMacro = fExecutable;
   mergingMacro.ReplaceAll(".sh","_merge.C");
   if (gGrid && !fGridOutputDir.Contains("/")) fGridOutputDir = Form("%s/%s/%s", gGrid->GetHomeDirectory(), fGridWorkingDir.Data(), fGridOutputDir.Data());
   if (!TestBit(AliAnalysisGrid::kSubmit)) {  
      ofstream out;
      out.open(mergingMacro.Data(), ios::out);
      if (!out.good()) {
         Error("WriteMergingMacro", "could not open file %s for writing", fAnalysisMacro.Data());
         return;
      }
      Bool_t hasSTEERBase = kFALSE;
      Bool_t hasESD = kFALSE;
      Bool_t hasAOD = kFALSE;
      Bool_t hasANALYSIS = kFALSE;
      Bool_t hasOADB = kFALSE;
      Bool_t hasANALYSISalice = kFALSE;
      Bool_t hasCORRFW = kFALSE;
      TString func = mergingMacro;
      TString comment;
      func.ReplaceAll(".C", "");
      out << "void " << func.Data() << "(const char *dir, Int_t stage=0)" << endl;
      out << "{" << endl;
      out << "// Automatically generated merging macro executed in grid subjobs" << endl << endl;
      out << "   TStopwatch timer;" << endl;
      out << "   timer.Start();" << endl << endl;
      // Reset existing include path
      out << "// Reset existing include path and add current directory first in the search" << endl;
      out << "   gSystem->SetIncludePath(\"-I.\");" << endl;
      if (!fExecutableCommand.Contains("aliroot")) {
         out << "// load base root libraries" << endl;
         out << "   gSystem->Load(\"libTree\");" << endl;
         out << "   gSystem->Load(\"libGeom\");" << endl;
         out << "   gSystem->Load(\"libVMC\");" << endl;
         out << "   gSystem->Load(\"libPhysics\");" << endl << endl;
         out << "   gSystem->Load(\"libMinuit\");" << endl << endl;
      }   
      if (fAdditionalRootLibs.Length()) {
         // in principle libtree /lib geom libvmc etc. can go into this list, too
         out << "// Add aditional libraries" << endl;
         TObjArray *list = fAdditionalRootLibs.Tokenize(" ");
         TIter next(list);
         TObjString *str;
         while((str=(TObjString*)next())) {
            if (str->GetString().Contains(".so") || str->GetString().Contains(".dylib"))
            out << "   gSystem->Load(\"" << str->GetString().Data() << "\");" << endl;
         }
         if (list) delete list;
      }
      out << "// Load analysis framework libraries" << endl;
      if (!fPackages) {
         if (!fExecutableCommand.Contains("aliroot")) {
            out << "   gSystem->Load(\"libSTEERBase\");" << endl;
            out << "   gSystem->Load(\"libESD\");" << endl;
            out << "   gSystem->Load(\"libAOD\");" << endl;
         }
         out << "   gSystem->Load(\"libANALYSIS\");" << endl;
         out << "   gSystem->Load(\"libOADB\");" << endl;
         out << "   gSystem->Load(\"libANALYSISalice\");" << endl;
         out << "   gSystem->Load(\"libCORRFW\");" << endl << endl;
      } else {
         TIter next(fPackages);
         TObject *obj;
         TString pkgname;
         TString setupPar = "AliAnalysisAlien::SetupPar";
         while ((obj=next())) {
            pkgname = obj->GetName();
            if (pkgname == "STEERBase" ||
                pkgname == "STEERBase.par") hasSTEERBase = kTRUE;
            if (pkgname == "ESD" ||
                pkgname == "ESD.par")       hasESD = kTRUE;
            if (pkgname == "AOD" ||
                pkgname == "AOD.par")       hasAOD = kTRUE;
            if (pkgname == "ANALYSIS" ||
                pkgname == "ANALYSIS.par")  hasANALYSIS = kTRUE;
            if (pkgname == "OADB" ||
                pkgname == "OADB.par")      hasOADB = kTRUE;
            if (pkgname == "ANALYSISalice" ||
                pkgname == "ANALYSISalice.par") hasANALYSISalice = kTRUE;
            if (pkgname == "CORRFW" ||
                pkgname == "CORRFW.par")    hasCORRFW = kTRUE;
         }   
         if (hasANALYSISalice) setupPar = "SetupPar";   
         if (!hasSTEERBase) out << "   gSystem->Load(\"libSTEERBase\");" << endl;
         else out << "   if (!" << setupPar << "(\"STEERBase\")) return;" << endl;
         if (!hasESD)       out << "   gSystem->Load(\"libESD\");" << endl;
         else out << "   if (!" << setupPar << "(\"ESD\")) return;" << endl;
         if (!hasAOD)       out << "   gSystem->Load(\"libAOD\");" << endl;
         else out << "   if (!" << setupPar << "(\"AOD\")) return;" << endl;
         out << "   gSystem->Load(\"libOADB\");" << endl;
         if (!hasANALYSIS)  out << "   gSystem->Load(\"libANALYSIS\");" << endl;
         else out << "   if (!" << setupPar << "(\"ANALYSIS\")) return;" << endl;
         if (!hasOADB)  out << "   gSystem->Load(\"libOADB\");" << endl;
         else out << "   if (!" << setupPar << "(\"OADB\")) return;" << endl;
         if (!hasANALYSISalice)   out << "   gSystem->Load(\"libANALYSISalice\");" << endl;
         else out << "   if (!" << setupPar << "(\"ANALYSISalice\")) return;" << endl;
         if (!hasCORRFW)    out << "   gSystem->Load(\"libCORRFW\");" << endl << endl;
         else out << "   if (!" << setupPar << "(\"CORRFW\")) return;" << endl << endl;
         out << "// Compile other par packages" << endl;
         next.Reset();
         while ((obj=next())) {
            pkgname = obj->GetName();
            if (pkgname == "STEERBase" ||
                pkgname == "STEERBase.par" ||
                pkgname == "ESD" ||
                pkgname == "ESD.par" ||
                pkgname == "AOD" ||
                pkgname == "AOD.par" ||
                pkgname == "ANALYSIS" ||
                pkgname == "ANALYSIS.par" ||
                pkgname == "OADB" ||
                pkgname == "OADB.par" ||
                pkgname == "ANALYSISalice" ||
                pkgname == "ANALYSISalice.par" ||
                pkgname == "CORRFW" ||
                pkgname == "CORRFW.par") continue;
            out << "   if (!" << setupPar << "(\"" << obj->GetName() << "\")) return;" << endl;
         }   
      }   
      out << "// include path" << endl;
      // Get the include path from the interpreter and remove entries pointing to AliRoot
      out << "   TString intPath = gInterpreter->GetIncludePath();" << endl;
      out << "   TObjArray *listpaths = intPath.Tokenize(\" \");" << endl;
      out << "   TIter nextpath(listpaths);" << endl;
      out << "   TObjString *pname;" << endl;
      out << "   while ((pname=(TObjString*)nextpath())) {" << endl;
      out << "      TString current = pname->GetName();" << endl;
      out << "      if (current.Contains(\"AliRoot\") || current.Contains(\"ALICE_ROOT\")) continue;" << endl;
      out << "      gSystem->AddIncludePath(current);" << endl;
      out << "   }" << endl;
      out << "   if (listpaths) delete listpaths;" << endl;
      if (fIncludePath.Length()) out << "   gSystem->AddIncludePath(\"" << fIncludePath.Data() << "\");" << endl;
      out << "   gROOT->ProcessLine(\".include $ALICE_ROOT/include\");" << endl;
      out << "   printf(\"Include path: %s\\n\", gSystem->GetIncludePath());" << endl << endl;
      if (fMCLoop && !fGeneratorLibs.IsNull()) {
         out << "// MC generator libraries" << endl;
         TObjArray *list = fGeneratorLibs.Tokenize(" ");
         TIter next(list);
         TObjString *str;
         while((str=(TObjString*)next())) {
            out << "   gSystem->Load(\"" << str->GetName() << "\");" << endl;
         }
         delete list;
      }
      if (fAdditionalLibs.Length()) {
         out << "// Add aditional AliRoot libraries" << endl;
         TString additionalLibs = fAdditionalLibs;
         additionalLibs.Strip();
         if (additionalLibs.Length() && fFriendLibs.Length())
            additionalLibs += " ";
         additionalLibs += fFriendLibs;
         TObjArray *list = additionalLibs.Tokenize(" ");
         TIter next(list);
         TObjString *str;
         while((str=(TObjString*)next())) {
            if (str->GetString().Contains(".so") || str->GetString().Contains(".dylib"))
               out << "   gSystem->Load(\"" << str->GetString().Data() << "\");" << endl;
         }
         if (list) delete list;
      }
      out << endl;
      out << "// Analysis source to be compiled at runtime (if any)" << endl;
      if (fAnalysisSource.Length()) {
         TObjArray *list = fAnalysisSource.Tokenize(" ");
         TIter next(list);
         TObjString *str;
         while((str=(TObjString*)next())) {
            out << "   gROOT->ProcessLine(\".L " << str->GetString().Data() << "+g\");" << endl;
         }   
         if (list) delete list;
      }
      out << endl;      

      if (fFastReadOption) {
         Warning("WriteMergingMacro", "!!! You requested FastRead option. Using xrootd flags to reduce timeouts in the grid merging jobs. Note that this may skip some files that could be accessed !!!");
         out << "// fast xrootd reading enabled" << endl;
         out << "   printf(\"!!! You requested FastRead option. Using xrootd flags to reduce timeouts. Note that this may skip some files that could be accessed !!!\");" << endl;
         out << "   gEnv->SetValue(\"XNet.ConnectTimeout\",50);" << endl;
         out << "   gEnv->SetValue(\"XNet.RequestTimeout\",50);" << endl;
         out << "   gEnv->SetValue(\"XNet.MaxRedirectCount\",2);" << endl;
         out << "   gEnv->SetValue(\"XNet.ReconnectTimeout\",50);" << endl;
         out << "   gEnv->SetValue(\"XNet.FirstConnectMaxCnt\",1);" << endl << endl;
      }
      // Change temp directory to current one
      out << "// Connect to AliEn" << endl;
      out << "   if (!TGrid::Connect(\"alien://\")) return;" << endl;
      out << "// Set temporary merging directory to current one" << endl;
      out << "   gSystem->Setenv(\"TMPDIR\", gSystem->pwd());" << endl << endl;   
      out << "// Set temporary compilation directory to current one" << endl;
      out << "   gSystem->SetBuildDir(gSystem->pwd(), kTRUE);" << endl << endl;   
      out << "   TString outputDir = dir;" << endl;  
      if (IsMergeAOD())
         out << "   TString outputFiles = \"" << GetListOfFiles("outaod") << "\";" << endl;
      else   
         out << "   TString outputFiles = \"" << GetListOfFiles("out") << "\";" << endl;
      out << "   TString mergeExcludes = \"" << fMergeExcludes << " " << fRegisterExcludes << "\";" << endl;
      out << "   TObjArray *list = outputFiles.Tokenize(\",\");" << endl;
      out << "   TIter *iter = new TIter(list);" << endl;
      out << "   TObjString *str;" << endl;
      out << "   TString outputFile;" << endl;
      out << "   Bool_t merged = kTRUE;" << endl;
      TString analysisFile = fExecutable;
      analysisFile.ReplaceAll(".sh", ".root");
      out << "   AliAnalysisManager *mgr = AliAnalysisAlien::LoadAnalysisManager(\""
          << analysisFile << "\");" << endl;
      out << "   if (!mgr) {" << endl;
      out << "      printf(\"ERROR: Analysis manager could not be extracted from file \");" << endl;
      out << "      return;" << endl;
      out << "   }" << endl;
      if (IsLocalTest()) {
         out << "   printf(\"===================================\\n\");" << endl;      
         out << "   printf(\"Testing merging...\\n\");" << endl;
         out << "   printf(\"===================================\\n\");" << endl;
      }        
      out << "   while((str=(TObjString*)iter->Next())) {" << endl;
      out << "      outputFile = str->GetString();" << endl;
      out << "      if (outputFile.Contains(\"*\")) continue;" << endl;
      out << "      Int_t index = outputFile.Index(\"@\");" << endl;
      out << "      if (index > 0) outputFile.Remove(index);" << endl;
      out << "      // Skip already merged outputs" << endl;
      out << "      if (!gSystem->AccessPathName(outputFile)) {" << endl;
      out << "         printf(\"Output file <%s> found. Not merging again.\\n\",outputFile.Data());" << endl;
      out << "         continue;" << endl;
      out << "      }" << endl;
      out << "      if (mergeExcludes.Contains(outputFile.Data())) continue;" << endl;
      out << "      merged = AliAnalysisAlien::MergeOutput(outputFile, outputDir, " << fMaxMergeFiles << ", stage);" << endl;
      out << "      if (!merged) {" << endl;
      out << "         printf(\"ERROR: Cannot merge %s\\n\", outputFile.Data());" << endl;
      out << "         return;" << endl;
      out << "      }" << endl;
      out << "   }" << endl;
      if (mgr && mgr->IsCollectThroughput() && !IsLocalTest()) {
         out << "   TString infolog = \"" << mgr->GetFileInfoLog() << "\";" << endl;
         out << "   AliAnalysisAlien::MergeInfo(infolog, outputDir);" << endl;
      }
      out << "   // all outputs merged, validate" << endl;
      out << "   ofstream out;" << endl;
      out << "   out.open(\"outputs_valid\", ios::out);" << endl;
      out << "   out.close();" << endl;
      out << "   // read the analysis manager from file" << endl;
      if (IsLocalTest()) {
         out << "   printf(\"===================================\\n\");" << endl;      
         out << "   printf(\"Testing Terminate()...\\n\");" << endl;
         out << "   printf(\"===================================\\n\");" << endl;      
      } else {   
         out << "   if (!outputDir.Contains(\"Stage\")) return;" << endl;
      }   
      out << "   mgr->SetRunFromPath(mgr->GetRunFromAlienPath(dir));" << endl;
      out << "   mgr->SetSkipTerminate(kFALSE);" << endl;
      out << "   mgr->PrintStatus();" << endl;
      if (mgr) {
         if (mgr->GetDebugLevel()>3) {
            out << "   gEnv->SetValue(\"XNet.Debug\", \"1\");" << endl;
         } else {
            if (TestBit(AliAnalysisGrid::kTest))            
               out << "   AliLog::SetGlobalLogLevel(AliLog::kWarning);" << endl;
            else
               out << "   AliLog::SetGlobalLogLevel(AliLog::kError);" << endl;
         }
      }   
      out << "   TTree *tree = NULL;" << endl;
      out << "   mgr->StartAnalysis(\"gridterminate\", tree);" << endl;
      out << "}" << endl << endl;
      if (hasANALYSISalice) {
         out <<"//________________________________________________________________________________" << endl;
         out << "Bool_t SetupPar(const char *package) {" << endl;
         out << "// Compile the package and set it up." << endl;
         out << "   TString pkgdir = package;" << endl;
         out << "   pkgdir.ReplaceAll(\".par\",\"\");" << endl;
         out << "   gSystem->Exec(TString::Format(\"tar xvzf %s.par\", pkgdir.Data()));" << endl;
         out << "   TString cdir = gSystem->WorkingDirectory();" << endl;
         out << "   gSystem->ChangeDirectory(pkgdir);" << endl;
         out << "   // Check for BUILD.sh and execute" << endl;
         out << "   if (!gSystem->AccessPathName(\"PROOF-INF/BUILD.sh\")) {" << endl;
         out << "      printf(\"*******************************\\n\");" << endl;
         out << "      printf(\"*** Building PAR archive    ***\\n\");" << endl;
         out << "      printf(\"*******************************\\n\");" << endl;
         out << "      if (gSystem->Exec(\"PROOF-INF/BUILD.sh\")) {" << endl;
         out << "         ::Error(\"SetupPar\", \"Cannot build par archive %s\", pkgdir.Data());" << endl;
         out << "         gSystem->ChangeDirectory(cdir);" << endl;
         out << "         return kFALSE;" << endl;
         out << "      }" << endl;
         out << "   } else {" << endl;
         out << "      ::Error(\"SetupPar\",\"Cannot access PROOF-INF/BUILD.sh for package %s\", pkgdir.Data());" << endl;
         out << "      gSystem->ChangeDirectory(cdir);" << endl;
         out << "      return kFALSE;" << endl;
         out << "   }" << endl;
         out << "   // Check for SETUP.C and execute" << endl;
         out << "   if (!gSystem->AccessPathName(\"PROOF-INF/SETUP.C\")) {" << endl;
         out << "      printf(\"*******************************\\n\");" << endl;
         out << "      printf(\"***    Setup PAR archive    ***\\n\");" << endl;
         out << "      printf(\"*******************************\\n\");" << endl;
         out << "      gROOT->Macro(\"PROOF-INF/SETUP.C\");" << endl;
         out << "   } else {" << endl;
         out << "      ::Error(\"SetupPar\",\"Cannot access PROOF-INF/SETUP.C for package %s\", pkgdir.Data());" << endl;
         out << "      gSystem->ChangeDirectory(cdir);" << endl;
         out << "      return kFALSE;" << endl;
         out << "   }" << endl;
         out << "   // Restore original workdir" << endl;
         out << "   gSystem->ChangeDirectory(cdir);" << endl;
         out << "   return kTRUE;" << endl;
         out << "}" << endl;
      }
   }   
   Bool_t copy = kTRUE;
   if (fProductionMode || TestBit(AliAnalysisGrid::kOffline) || TestBit(AliAnalysisGrid::kTest)) copy = kFALSE;
   if (copy) {
      CdWork();
      TString workdir = gGrid->GetHomeDirectory();
      workdir += fGridWorkingDir;
      if (FileExists(mergingMacro)) gGrid->Rm(mergingMacro);
      Info("WriteMergingMacro", "\n#####   Copying merging macro: <%s> to your alien workspace", mergingMacro.Data());
//      TFile::Cp(Form("file:%s",mergingMacro.Data()), Form("alien://%s/%s", workdir.Data(), mergingMacro.Data()));
      if (!copyLocal2Alien("WriteMergeMacro",mergingMacro.Data(), 
           Form("%s/%s", workdir.Data(), mergingMacro.Data()))) Fatal("","Terminating");
   }
}

//______________________________________________________________________________
Bool_t AliAnalysisAlien::SetupPar(const char *package)
{
// Compile the par file archive pointed by <package>. This must be present in the current directory.
// Note that for loading the compiled library. The current directory should have precedence in
// LD_LIBRARY_PATH
   TString pkgdir = package;
   pkgdir.ReplaceAll(".par","");
   gSystem->Exec(TString::Format("tar xzf %s.par", pkgdir.Data()));
   TString cdir = gSystem->WorkingDirectory();
   gSystem->ChangeDirectory(pkgdir);
   // Check for BUILD.sh and execute
   if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
      printf("**************************************************\n");
      printf("*** Building PAR archive %s\n", package);
      printf("**************************************************\n");
      if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
         ::Error("SetupPar", "Cannot build par archive %s", pkgdir.Data());
         gSystem->ChangeDirectory(cdir);
         return kFALSE;
      }
   } else {
      ::Error("SetupPar","Cannot access PROOF-INF/BUILD.sh for package %s", pkgdir.Data());
      gSystem->ChangeDirectory(cdir);
      return kFALSE;
   }
   // Check for SETUP.C and execute
   if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
      printf("**************************************************\n");
      printf("*** Setup PAR archive %s\n", package);
      printf("**************************************************\n");
      gROOT->Macro("PROOF-INF/SETUP.C");
      printf("*** Loaded library: %s\n", gSystem->GetLibraries(pkgdir,"",kFALSE));
   } else {
      ::Error("SetupPar","Cannot access PROOF-INF/SETUP.C for package %s", pkgdir.Data());
      gSystem->ChangeDirectory(cdir);
      return kFALSE;
   }   
   // Restore original workdir
   gSystem->ChangeDirectory(cdir);
   return kTRUE;
}

//______________________________________________________________________________
void AliAnalysisAlien::WriteExecutable()
{
// Generate the alien executable script.
   // Patch executable with -x to catch error code
   if (fExecutableCommand.Contains("root") && 
       fExecutableCommand.Contains("-q") && 
       !fExecutableCommand.Contains("-x")) fExecutableCommand += " -x";
   if (!TestBit(AliAnalysisGrid::kSubmit)) {  
      ofstream out;
      out.open(fExecutable.Data(), ios::out);
      if (out.bad()) {
         Error("WriteExecutable", "Bad file name for executable: %s", fExecutable.Data());
         return;
      }
      out << "#!/bin/bash" << endl;
      // Make sure we can properly compile par files
      out << "export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH" << endl;
      out << "echo \"=========================================\"" << endl; 
      out << "echo \"############## PATH : ##############\"" << endl;
      out << "echo $PATH" << endl;
      out << "echo \"############## LD_LIBRARY_PATH : ##############\"" << endl;
      out << "echo $LD_LIBRARY_PATH" << endl;
      out << "echo \"############## ROOTSYS : ##############\"" << endl;
      out << "echo $ROOTSYS" << endl;
      out << "echo \"############## which root : ##############\"" << endl;
      out << "which root" << endl;
      out << "echo \"############## ALICE_ROOT : ##############\"" << endl;
      out << "echo $ALICE_ROOT" << endl;
      out << "echo \"############## which aliroot : ##############\"" << endl;
      out << "which aliroot" << endl;
      out << "echo \"############## system limits : ##############\"" << endl;
      out << "ulimit -a" << endl;
      out << "echo \"############## memory : ##############\"" << endl;
      out << "free -m" << endl;
      out << "echo \"=========================================\"" << endl << endl;
      out << fExecutableCommand << " "; 
      out << fAnalysisMacro.Data() << " " << fExecutableArgs.Data() << endl;
      out << "RET=$?" << endl;
      out << "if [ \"$RET\" != \"0\" ];then" << endl;
      out << "  echo \"======== ERROR : " << fAnalysisMacro.Data() << " finished with NON zero code: $RET ========\"" << endl;
      out << "  if [ \"$RET\" -gt 128 ] && [ \"$RET\" -lt 160 ]; then"<<endl;
      out << "    let sig=\"$RET - 128\""<<endl;
      out << "    sigs='HUP INT QUIT ILL TRAP ABRT BUS FPE"<<endl;
      out << "    KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT"<<endl;
      out << "    CHLD CONT STOP TSTP TTIN TTOU URG XCPU"<<endl;
      out << "    XFSZ VTALRM PROF WINCH IO PWR SYS'"<<endl;
      out << "    sig=SIG`echo $sigs | awk '{ print $'\"$sig\"' }'`"<<endl;
      out << "    echo \"======== it appears to have been killed with signal: $sig ========\""<<endl;
      out << "  fi"<<endl;
      out << "  exit $RET"<< endl;
      out << "fi" << endl << endl ;
      out << "echo \"======== " << fAnalysisMacro.Data() << " finished with exit code: $RET ========\"" << endl;
      out << "echo \"############## memory after: ##############\"" << endl;
      out << "free -m" << endl;
   }   
   Bool_t copy = kTRUE;
   if (fProductionMode || TestBit(AliAnalysisGrid::kOffline) || TestBit(AliAnalysisGrid::kTest)) copy = kFALSE;
   if (copy) {
      CdWork();
      TString workdir = gGrid->GetHomeDirectory();
      workdir += fGridWorkingDir;
      TString executable = TString::Format("%s/%s", workdir.Data(), fExecutable.Data());
      if (FileExists(executable)) gGrid->Rm(executable);
      Info("WriteExecutable", "\n#####   Copying executable file <%s> to your AliEn bin directory", fExecutable.Data());
      if (!copyLocal2Alien("WriteExecutable",fExecutable.Data(), 
          executable.Data())) Fatal("","Terminating");
   } 
}

//______________________________________________________________________________
void AliAnalysisAlien::WriteMergeExecutable()
{
// Generate the alien executable script for the merging job.
   if (!fMergeViaJDL) return;
   TString mergeExec = fExecutable;
   mergeExec.ReplaceAll(".sh", "_merge.sh");
   if (!TestBit(AliAnalysisGrid::kSubmit)) {
      ofstream out;
      out.open(mergeExec.Data(), ios::out);
      if (out.bad()) {
         Error("WriteMergingExecutable", "Bad file name for executable: %s", mergeExec.Data());
         return;
      }
      out << "#!/bin/bash" << endl;
      // Make sure we can properly compile par files
      out << "export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH" << endl;
      out << "echo \"=========================================\"" << endl; 
      out << "echo \"############## PATH : ##############\"" << endl;
      out << "echo $PATH" << endl;
      out << "echo \"############## LD_LIBRARY_PATH : ##############\"" << endl;
      out << "echo $LD_LIBRARY_PATH" << endl;
      out << "echo \"############## ROOTSYS : ##############\"" << endl;
      out << "echo $ROOTSYS" << endl;
      out << "echo \"############## which root : ##############\"" << endl;
      out << "which root" << endl;
      out << "echo \"############## ALICE_ROOT : ##############\"" << endl;
      out << "echo $ALICE_ROOT" << endl;
      out << "echo \"############## which aliroot : ##############\"" << endl;
      out << "which aliroot" << endl;
      out << "echo \"############## system limits : ##############\"" << endl;
      out << "ulimit -a" << endl;
      out << "echo \"############## memory : ##############\"" << endl;
      out << "free -m" << endl;
      out << "echo \"=========================================\"" << endl << endl;
      TString mergeMacro = fExecutable;
      mergeMacro.ReplaceAll(".sh", "_merge.C");
      if (IsOneStageMerging())
         out << "export ARG=\"" << mergeMacro << "(\\\"$1\\\")\"" << endl;
      else
         out << "export ARG=\"" << mergeMacro << "(\\\"$1\\\",$2)\"" << endl;
      out << fExecutableCommand << " " << "$ARG" << endl; 
      out << "RET=$?" << endl;
      out << "if [ \"$RET\" != \"0\" ];then" << endl;
      out << "  echo \"======== ERROR : " << fAnalysisMacro.Data() << " finished with NON zero code: $RET ========\"" << endl;
      out << "  if [ \"$RET\" -gt 128 ] && [ \"$RET\" -lt 160 ]; then"<<endl;
      out << "    let sig=\"$RET - 128\""<<endl;
      out << "    sigs='HUP INT QUIT ILL TRAP ABRT BUS FPE"<<endl;
      out << "    KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT"<<endl;
      out << "    CHLD CONT STOP TSTP TTIN TTOU URG XCPU"<<endl;
      out << "    XFSZ VTALRM PROF WINCH IO PWR SYS'"<<endl;
      out << "    sig=SIG`echo $sigs | awk '{ print $'\"$sig\"' }'`"<<endl;
      out << "    echo \"======== it appears to have been killed with signal: $sig ========\""<<endl;
      out << "  fi"<<endl;
      out << "  exit $RET"<< endl;
      out << "fi" << endl << endl ;
      out << "echo \"======== " << mergeMacro.Data() << " finished with exit code: $? ========\"" << endl;
      out << "echo \"############## memory after: ##############\"" << endl;
      out << "free -m" << endl;
   }   
   Bool_t copy = kTRUE;
   if (fProductionMode || TestBit(AliAnalysisGrid::kOffline) || TestBit(AliAnalysisGrid::kTest)) copy = kFALSE;
   if (copy) {
      CdWork();
      TString workdir = gGrid->GetHomeDirectory();
      workdir += fGridWorkingDir;
      TString executable = TString::Format("%s/%s", workdir.Data(), mergeExec.Data());
      if (FileExists(executable)) gGrid->Rm(executable);
      Info("WriteMergeExecutable", "\n#####   Copying executable file <%s> to your AliEn bin directory", mergeExec.Data());
      if (!copyLocal2Alien("WriteMergeExecutable",mergeExec.Data(), 
          executable.Data())) Fatal("","Terminating");
   } 
}

//______________________________________________________________________________
void AliAnalysisAlien::WriteProductionFile(const char *filename) const
{
// Write the production file to be submitted by LPM manager. The format is:
// First line: full_path_to_jdl estimated_no_subjobs_per_master
// Next lines: full_path_to_dataset XXX (XXX is a string)
// To submit, one has to: submit jdl XXX for all lines
   ofstream out;
   out.open(filename, ios::out);
   if (out.bad()) {
      Error("WriteProductionFile", "Bad file name: %s", filename);
      return;
   }
   TString workdir;
   if (!fProductionMode && !fGridWorkingDir.BeginsWith("/alice"))
      workdir = gGrid->GetHomeDirectory();
   workdir += fGridWorkingDir;
   Int_t njobspermaster = 1000*fNrunsPerMaster/fSplitMaxInputFileNumber;
   TString locjdl = Form("%s/%s", workdir.Data(),fJDLName.Data());
   out << locjdl << " " << njobspermaster << endl;
   Int_t nmasterjobs = fInputFiles->GetEntries();
   for (Int_t i=0; i<nmasterjobs; i++) {
      TString runOutDir = gSystem->BaseName(fInputFiles->At(i)->GetName());
      runOutDir.ReplaceAll(".xml", "");
      if (fOutputToRunNo)
         out << Form("%s", fInputFiles->At(i)->GetName()) << " " << runOutDir << endl;
      else
         out << Form("%s", fInputFiles->At(i)->GetName()) << " " << Form("%03d", i) << endl;
   }
   if (gGrid) {
      Info("WriteProductionFile", "\n#####   Copying production file <%s> to your work directory", filename);
      if (FileExists(filename)) gGrid->Rm(filename);
//      TFile::Cp(Form("file:%s",filename), Form("alien://%s/%s", workdir.Data(),filename));
      if (!copyLocal2Alien("WriteProductionFile", filename, 
          Form("%s/%s", workdir.Data(),filename))) Fatal("","Terminating");
   }   
}

//______________________________________________________________________________
void AliAnalysisAlien::WriteValidationScript(Bool_t merge)
{
// Generate the alien validation script.
   // Generate the validation script
   TObjString *os;
   if (fValidationScript.IsNull()) {
      fValidationScript = fExecutable;
      fValidationScript.ReplaceAll(".sh", "_validation.sh");
   }   
   TString validationScript = fValidationScript;
   if (merge) validationScript.ReplaceAll(".sh", "_merge.sh");
   if (!Connect()) {
      Error("WriteValidationScript", "Alien connection required");
      return;
   }
   if (!fTerminateFiles.IsNull()) {
      fTerminateFiles.Strip();
      fTerminateFiles.ReplaceAll(" ",",");
   }   
   TString outStream = "";
   if (!TestBit(AliAnalysisGrid::kTest)) outStream = " >> stdout";
   if (!TestBit(AliAnalysisGrid::kSubmit)) {  
      ofstream out;
      out.open(validationScript, ios::out);
      out << "#!/bin/bash" << endl;
      out << "##################################################" << endl;
      out << "validateout=`dirname $0`" << endl;
      out << "validatetime=`date`" << endl;
      out << "validated=\"0\";" << endl;
      out << "error=0" << endl;
      out << "if [ -z $validateout ]" << endl;
      out << "then" << endl;
      out << "    validateout=\".\"" << endl;
      out << "fi" << endl << endl;
      out << "cd $validateout;" << endl;
      out << "validateworkdir=`pwd`;" << endl << endl;
      out << "echo \"*******************************************************\"" << outStream << endl;
      out << "echo \"* Automatically generated validation script           *\""  << outStream << endl;
      out << "" << endl;
      out << "echo \"* Time:    $validatetime \""  << outStream << endl;
      out << "echo \"* Dir:     $validateout\""  << outStream << endl;
      out << "echo \"* Workdir: $validateworkdir\""  << outStream << endl;
      out << "echo \"* ----------------------------------------------------*\""  << outStream << endl;
      out << "ls -la ./"  << outStream << endl;
      out << "echo \"* ----------------------------------------------------*\""  << outStream << endl << endl;
      out << "##################################################" << endl;
      out << "" << endl;

      out << "if [ ! -f stderr ] ; then" << endl;
      out << "   error=1" << endl;
      out << "   echo \"* ########## Job not validated - no stderr  ###\" " << outStream << endl;
      out << "   echo \"Error = $error\" " << outStream << endl;
      out << "fi" << endl;

      out << "parArch=`grep -Ei \"Cannot Build the PAR Archive\" stderr`" << endl;
      out << "segViol=`grep -Ei \"Segmentation violation\" stderr`" << endl;
      out << "segFault=`grep -Ei \"Segmentation fault\" stderr`" << endl;
      out << "glibcErr=`grep -Ei '\\*\\*\\* glibc detected \\*\\*\\*' stderr`" << endl;
      out << "" << endl;

      out << "if [ \"$parArch\" != \"\" ] ; then" << endl;
      out << "   error=1" << endl;
      out << "   echo \"* ########## Job not validated - PAR archive not built  ###\" " << outStream << endl;
      out << "   echo \"$parArch\" " << outStream << endl;
      out << "   echo \"Error = $error\" " << outStream << endl;
      out << "fi" << endl;

      out << "if [ \"$segViol\" != \"\" ] ; then" << endl;
      out << "   error=1" << endl;
      out << "   echo \"* ########## Job not validated - Segment. violation  ###\" " << outStream << endl;
      out << "   echo \"$segViol\" " << outStream << endl;
      out << "   echo \"Error = $error\" " << outStream << endl;
      out << "fi" << endl;

      out << "if [ \"$segFault\" != \"\" ] ; then" << endl;
      out << "   error=1" << endl;
      out << "   echo \"* ########## Job not validated - Segment. fault  ###\" " << outStream << endl;
      out << "   echo \"$segFault\" " << outStream << endl;
      out << "   echo \"Error = $error\" " << outStream << endl;
      out << "fi" << endl;

      out << "if [ \"$glibcErr\" != \"\" ] ; then" << endl;
      out << "   error=1" << endl;
      out << "   echo \"* ########## Job not validated - *** glibc detected ***  ###\" " << outStream << endl;
      out << "   echo \"$glibcErr\" " << outStream << endl;
      out << "   echo \"Error = $error\" " << outStream << endl;
      out << "fi" << endl;

      // Part dedicated to the specific analyses running into the train

      TString outputFiles = fOutputFiles;
      if (merge && !fTerminateFiles.IsNull()) {
         if (!outputFiles.IsNull()) outputFiles += ",";
         outputFiles += fTerminateFiles;
      }
      TObjArray *arr = outputFiles.Tokenize(",");
      TIter next1(arr);
      TString outputFile;
      while (!merge && (os=(TObjString*)next1())) { 
         // No need to validate outputs produced by merging since the merging macro does this
         outputFile = os->GetString();
         Int_t index = outputFile.Index("@");
         if (index > 0) outputFile.Remove(index);
         if (fTerminateFiles.Contains(outputFile)) continue;
         if (outputFile.Contains("*")) continue;
         out << "if ! [ -f " << outputFile.Data() << " ] ; then" << endl;
         out << "   error=1" << endl;
         out << "   echo \"Output file " << outputFile << " not found. Job FAILED !\""  << outStream << endl;
         out << "   echo \"Output file " << outputFile << " not found. Job FAILED !\" >> stderr" << endl;
         out << "fi" << endl;
      }   
      delete arr;
      out << "if ! [ -f outputs_valid ] ; then" << endl;
      out << "   error=1" << endl;
      out << "   echo \"Output files were not validated by the analysis manager\" >> stdout" << endl;
      out << "   echo \"Output files were not validated by the analysis manager\" >> stderr" << endl;
      out << "fi" << endl;
      
      out << "if [ $error = 0 ] ; then" << endl;
      out << "   echo \"* ----------------   Job Validated  ------------------*\""  << outStream << endl;
      if (!IsKeepLogs()) {
         out << "   echo \"* === Logs std* will be deleted === \"" << endl;
         outStream = "";
         out << "   rm -f std*" << endl;
      }            
      out << "fi" << endl;

      out << "echo \"* ----------------------------------------------------*\""  << outStream << endl;
      out << "echo \"*******************************************************\""  << outStream << endl;
      out << "cd -" << endl;
      out << "exit $error" << endl;
   }    
   Bool_t copy = kTRUE;
   if (fProductionMode || TestBit(AliAnalysisGrid::kOffline) || TestBit(AliAnalysisGrid::kTest)) copy = kFALSE;
   if (copy) {
      CdWork();
      TString workdir = gGrid->GetHomeDirectory();
      workdir += fGridWorkingDir;
      Info("WriteValidationScript", "\n#####   Copying validation script <%s> to your AliEn working space", validationScript.Data());
      if (FileExists(validationScript)) gGrid->Rm(validationScript);
//      TFile::Cp(Form("file:%s",validationScript.Data()), Form("alien://%s/%s", workdir.Data(),validationScript.Data()));
      if (!copyLocal2Alien("WriteValidationScript", validationScript.Data(), 
          Form("%s/%s",workdir.Data(), validationScript.Data()))) Fatal("","Terminating");
   } 
}
 AliAnalysisAlien.cxx:1
 AliAnalysisAlien.cxx:2
 AliAnalysisAlien.cxx:3
 AliAnalysisAlien.cxx:4
 AliAnalysisAlien.cxx:5
 AliAnalysisAlien.cxx:6
 AliAnalysisAlien.cxx:7
 AliAnalysisAlien.cxx:8
 AliAnalysisAlien.cxx:9
 AliAnalysisAlien.cxx:10
 AliAnalysisAlien.cxx:11
 AliAnalysisAlien.cxx:12
 AliAnalysisAlien.cxx:13
 AliAnalysisAlien.cxx:14
 AliAnalysisAlien.cxx:15
 AliAnalysisAlien.cxx:16
 AliAnalysisAlien.cxx:17
 AliAnalysisAlien.cxx:18
 AliAnalysisAlien.cxx:19
 AliAnalysisAlien.cxx:20
 AliAnalysisAlien.cxx:21
 AliAnalysisAlien.cxx:22
 AliAnalysisAlien.cxx:23
 AliAnalysisAlien.cxx:24
 AliAnalysisAlien.cxx:25
 AliAnalysisAlien.cxx:26
 AliAnalysisAlien.cxx:27
 AliAnalysisAlien.cxx:28
 AliAnalysisAlien.cxx:29
 AliAnalysisAlien.cxx:30
 AliAnalysisAlien.cxx:31
 AliAnalysisAlien.cxx:32
 AliAnalysisAlien.cxx:33
 AliAnalysisAlien.cxx:34
 AliAnalysisAlien.cxx:35
 AliAnalysisAlien.cxx:36
 AliAnalysisAlien.cxx:37
 AliAnalysisAlien.cxx:38
 AliAnalysisAlien.cxx:39
 AliAnalysisAlien.cxx:40
 AliAnalysisAlien.cxx:41
 AliAnalysisAlien.cxx:42
 AliAnalysisAlien.cxx:43
 AliAnalysisAlien.cxx:44
 AliAnalysisAlien.cxx:45
 AliAnalysisAlien.cxx:46
 AliAnalysisAlien.cxx:47
 AliAnalysisAlien.cxx:48
 AliAnalysisAlien.cxx:49
 AliAnalysisAlien.cxx:50
 AliAnalysisAlien.cxx:51
 AliAnalysisAlien.cxx:52
 AliAnalysisAlien.cxx:53
 AliAnalysisAlien.cxx:54
 AliAnalysisAlien.cxx:55
 AliAnalysisAlien.cxx:56
 AliAnalysisAlien.cxx:57
 AliAnalysisAlien.cxx:58
 AliAnalysisAlien.cxx:59
 AliAnalysisAlien.cxx:60
 AliAnalysisAlien.cxx:61
 AliAnalysisAlien.cxx:62
 AliAnalysisAlien.cxx:63
 AliAnalysisAlien.cxx:64
 AliAnalysisAlien.cxx:65
 AliAnalysisAlien.cxx:66
 AliAnalysisAlien.cxx:67
 AliAnalysisAlien.cxx:68
 AliAnalysisAlien.cxx:69
 AliAnalysisAlien.cxx:70
 AliAnalysisAlien.cxx:71
 AliAnalysisAlien.cxx:72
 AliAnalysisAlien.cxx:73
 AliAnalysisAlien.cxx:74
 AliAnalysisAlien.cxx:75
 AliAnalysisAlien.cxx:76
 AliAnalysisAlien.cxx:77
 AliAnalysisAlien.cxx:78
 AliAnalysisAlien.cxx:79
 AliAnalysisAlien.cxx:80
 AliAnalysisAlien.cxx:81
 AliAnalysisAlien.cxx:82
 AliAnalysisAlien.cxx:83
 AliAnalysisAlien.cxx:84
 AliAnalysisAlien.cxx:85
 AliAnalysisAlien.cxx:86
 AliAnalysisAlien.cxx:87
 AliAnalysisAlien.cxx:88
 AliAnalysisAlien.cxx:89
 AliAnalysisAlien.cxx:90
 AliAnalysisAlien.cxx:91
 AliAnalysisAlien.cxx:92
 AliAnalysisAlien.cxx:93
 AliAnalysisAlien.cxx:94
 AliAnalysisAlien.cxx:95
 AliAnalysisAlien.cxx:96
 AliAnalysisAlien.cxx:97
 AliAnalysisAlien.cxx:98
 AliAnalysisAlien.cxx:99
 AliAnalysisAlien.cxx:100
 AliAnalysisAlien.cxx:101
 AliAnalysisAlien.cxx:102
 AliAnalysisAlien.cxx:103
 AliAnalysisAlien.cxx:104
 AliAnalysisAlien.cxx:105
 AliAnalysisAlien.cxx:106
 AliAnalysisAlien.cxx:107
 AliAnalysisAlien.cxx:108
 AliAnalysisAlien.cxx:109
 AliAnalysisAlien.cxx:110
 AliAnalysisAlien.cxx:111
 AliAnalysisAlien.cxx:112
 AliAnalysisAlien.cxx:113
 AliAnalysisAlien.cxx:114
 AliAnalysisAlien.cxx:115
 AliAnalysisAlien.cxx:116
 AliAnalysisAlien.cxx:117
 AliAnalysisAlien.cxx:118
 AliAnalysisAlien.cxx:119
 AliAnalysisAlien.cxx:120
 AliAnalysisAlien.cxx:121
 AliAnalysisAlien.cxx:122
 AliAnalysisAlien.cxx:123
 AliAnalysisAlien.cxx:124
 AliAnalysisAlien.cxx:125
 AliAnalysisAlien.cxx:126
 AliAnalysisAlien.cxx:127
 AliAnalysisAlien.cxx:128
 AliAnalysisAlien.cxx:129
 AliAnalysisAlien.cxx:130
 AliAnalysisAlien.cxx:131
 AliAnalysisAlien.cxx:132
 AliAnalysisAlien.cxx:133
 AliAnalysisAlien.cxx:134
 AliAnalysisAlien.cxx:135
 AliAnalysisAlien.cxx:136
 AliAnalysisAlien.cxx:137
 AliAnalysisAlien.cxx:138
 AliAnalysisAlien.cxx:139
 AliAnalysisAlien.cxx:140
 AliAnalysisAlien.cxx:141
 AliAnalysisAlien.cxx:142
 AliAnalysisAlien.cxx:143
 AliAnalysisAlien.cxx:144
 AliAnalysisAlien.cxx:145
 AliAnalysisAlien.cxx:146
 AliAnalysisAlien.cxx:147
 AliAnalysisAlien.cxx:148
 AliAnalysisAlien.cxx:149
 AliAnalysisAlien.cxx:150
 AliAnalysisAlien.cxx:151
 AliAnalysisAlien.cxx:152
 AliAnalysisAlien.cxx:153
 AliAnalysisAlien.cxx:154
 AliAnalysisAlien.cxx:155
 AliAnalysisAlien.cxx:156
 AliAnalysisAlien.cxx:157
 AliAnalysisAlien.cxx:158
 AliAnalysisAlien.cxx:159
 AliAnalysisAlien.cxx:160
 AliAnalysisAlien.cxx:161
 AliAnalysisAlien.cxx:162
 AliAnalysisAlien.cxx:163
 AliAnalysisAlien.cxx:164
 AliAnalysisAlien.cxx:165
 AliAnalysisAlien.cxx:166
 AliAnalysisAlien.cxx:167
 AliAnalysisAlien.cxx:168
 AliAnalysisAlien.cxx:169
 AliAnalysisAlien.cxx:170
 AliAnalysisAlien.cxx:171
 AliAnalysisAlien.cxx:172
 AliAnalysisAlien.cxx:173
 AliAnalysisAlien.cxx:174
 AliAnalysisAlien.cxx:175
 AliAnalysisAlien.cxx:176
 AliAnalysisAlien.cxx:177
 AliAnalysisAlien.cxx:178
 AliAnalysisAlien.cxx:179
 AliAnalysisAlien.cxx:180
 AliAnalysisAlien.cxx:181
 AliAnalysisAlien.cxx:182
 AliAnalysisAlien.cxx:183
 AliAnalysisAlien.cxx:184
 AliAnalysisAlien.cxx:185
 AliAnalysisAlien.cxx:186
 AliAnalysisAlien.cxx:187
 AliAnalysisAlien.cxx:188
 AliAnalysisAlien.cxx:189
 AliAnalysisAlien.cxx:190
 AliAnalysisAlien.cxx:191
 AliAnalysisAlien.cxx:192
 AliAnalysisAlien.cxx:193
 AliAnalysisAlien.cxx:194
 AliAnalysisAlien.cxx:195
 AliAnalysisAlien.cxx:196
 AliAnalysisAlien.cxx:197
 AliAnalysisAlien.cxx:198
 AliAnalysisAlien.cxx:199
 AliAnalysisAlien.cxx:200
 AliAnalysisAlien.cxx:201
 AliAnalysisAlien.cxx:202
 AliAnalysisAlien.cxx:203
 AliAnalysisAlien.cxx:204
 AliAnalysisAlien.cxx:205
 AliAnalysisAlien.cxx:206
 AliAnalysisAlien.cxx:207
 AliAnalysisAlien.cxx:208
 AliAnalysisAlien.cxx:209
 AliAnalysisAlien.cxx:210
 AliAnalysisAlien.cxx:211
 AliAnalysisAlien.cxx:212
 AliAnalysisAlien.cxx:213
 AliAnalysisAlien.cxx:214
 AliAnalysisAlien.cxx:215
 AliAnalysisAlien.cxx:216
 AliAnalysisAlien.cxx:217
 AliAnalysisAlien.cxx:218
 AliAnalysisAlien.cxx:219
 AliAnalysisAlien.cxx:220
 AliAnalysisAlien.cxx:221
 AliAnalysisAlien.cxx:222
 AliAnalysisAlien.cxx:223
 AliAnalysisAlien.cxx:224
 AliAnalysisAlien.cxx:225
 AliAnalysisAlien.cxx:226
 AliAnalysisAlien.cxx:227
 AliAnalysisAlien.cxx:228
 AliAnalysisAlien.cxx:229
 AliAnalysisAlien.cxx:230
 AliAnalysisAlien.cxx:231
 AliAnalysisAlien.cxx:232
 AliAnalysisAlien.cxx:233
 AliAnalysisAlien.cxx:234
 AliAnalysisAlien.cxx:235
 AliAnalysisAlien.cxx:236
 AliAnalysisAlien.cxx:237
 AliAnalysisAlien.cxx:238
 AliAnalysisAlien.cxx:239
 AliAnalysisAlien.cxx:240
 AliAnalysisAlien.cxx:241
 AliAnalysisAlien.cxx:242
 AliAnalysisAlien.cxx:243
 AliAnalysisAlien.cxx:244
 AliAnalysisAlien.cxx:245
 AliAnalysisAlien.cxx:246
 AliAnalysisAlien.cxx:247
 AliAnalysisAlien.cxx:248
 AliAnalysisAlien.cxx:249
 AliAnalysisAlien.cxx:250
 AliAnalysisAlien.cxx:251
 AliAnalysisAlien.cxx:252
 AliAnalysisAlien.cxx:253
 AliAnalysisAlien.cxx:254
 AliAnalysisAlien.cxx:255
 AliAnalysisAlien.cxx:256
 AliAnalysisAlien.cxx:257
 AliAnalysisAlien.cxx:258
 AliAnalysisAlien.cxx:259
 AliAnalysisAlien.cxx:260
 AliAnalysisAlien.cxx:261
 AliAnalysisAlien.cxx:262
 AliAnalysisAlien.cxx:263
 AliAnalysisAlien.cxx:264
 AliAnalysisAlien.cxx:265
 AliAnalysisAlien.cxx:266
 AliAnalysisAlien.cxx:267
 AliAnalysisAlien.cxx:268
 AliAnalysisAlien.cxx:269
 AliAnalysisAlien.cxx:270
 AliAnalysisAlien.cxx:271
 AliAnalysisAlien.cxx:272
 AliAnalysisAlien.cxx:273
 AliAnalysisAlien.cxx:274
 AliAnalysisAlien.cxx:275
 AliAnalysisAlien.cxx:276
 AliAnalysisAlien.cxx:277
 AliAnalysisAlien.cxx:278
 AliAnalysisAlien.cxx:279
 AliAnalysisAlien.cxx:280
 AliAnalysisAlien.cxx:281
 AliAnalysisAlien.cxx:282
 AliAnalysisAlien.cxx:283
 AliAnalysisAlien.cxx:284
 AliAnalysisAlien.cxx:285
 AliAnalysisAlien.cxx:286
 AliAnalysisAlien.cxx:287
 AliAnalysisAlien.cxx:288
 AliAnalysisAlien.cxx:289
 AliAnalysisAlien.cxx:290
 AliAnalysisAlien.cxx:291
 AliAnalysisAlien.cxx:292
 AliAnalysisAlien.cxx:293
 AliAnalysisAlien.cxx:294
 AliAnalysisAlien.cxx:295
 AliAnalysisAlien.cxx:296
 AliAnalysisAlien.cxx:297
 AliAnalysisAlien.cxx:298
 AliAnalysisAlien.cxx:299
 AliAnalysisAlien.cxx:300
 AliAnalysisAlien.cxx:301
 AliAnalysisAlien.cxx:302
 AliAnalysisAlien.cxx:303
 AliAnalysisAlien.cxx:304
 AliAnalysisAlien.cxx:305
 AliAnalysisAlien.cxx:306
 AliAnalysisAlien.cxx:307
 AliAnalysisAlien.cxx:308
 AliAnalysisAlien.cxx:309
 AliAnalysisAlien.cxx:310
 AliAnalysisAlien.cxx:311
 AliAnalysisAlien.cxx:312
 AliAnalysisAlien.cxx:313
 AliAnalysisAlien.cxx:314
 AliAnalysisAlien.cxx:315
 AliAnalysisAlien.cxx:316
 AliAnalysisAlien.cxx:317
 AliAnalysisAlien.cxx:318
 AliAnalysisAlien.cxx:319
 AliAnalysisAlien.cxx:320
 AliAnalysisAlien.cxx:321
 AliAnalysisAlien.cxx:322
 AliAnalysisAlien.cxx:323
 AliAnalysisAlien.cxx:324
 AliAnalysisAlien.cxx:325
 AliAnalysisAlien.cxx:326
 AliAnalysisAlien.cxx:327
 AliAnalysisAlien.cxx:328
 AliAnalysisAlien.cxx:329
 AliAnalysisAlien.cxx:330
 AliAnalysisAlien.cxx:331
 AliAnalysisAlien.cxx:332
 AliAnalysisAlien.cxx:333
 AliAnalysisAlien.cxx:334
 AliAnalysisAlien.cxx:335
 AliAnalysisAlien.cxx:336
 AliAnalysisAlien.cxx:337
 AliAnalysisAlien.cxx:338
 AliAnalysisAlien.cxx:339
 AliAnalysisAlien.cxx:340
 AliAnalysisAlien.cxx:341
 AliAnalysisAlien.cxx:342
 AliAnalysisAlien.cxx:343
 AliAnalysisAlien.cxx:344
 AliAnalysisAlien.cxx:345
 AliAnalysisAlien.cxx:346
 AliAnalysisAlien.cxx:347
 AliAnalysisAlien.cxx:348
 AliAnalysisAlien.cxx:349
 AliAnalysisAlien.cxx:350
 AliAnalysisAlien.cxx:351
 AliAnalysisAlien.cxx:352
 AliAnalysisAlien.cxx:353
 AliAnalysisAlien.cxx:354
 AliAnalysisAlien.cxx:355
 AliAnalysisAlien.cxx:356
 AliAnalysisAlien.cxx:357
 AliAnalysisAlien.cxx:358
 AliAnalysisAlien.cxx:359
 AliAnalysisAlien.cxx:360
 AliAnalysisAlien.cxx:361
 AliAnalysisAlien.cxx:362
 AliAnalysisAlien.cxx:363
 AliAnalysisAlien.cxx:364
 AliAnalysisAlien.cxx:365
 AliAnalysisAlien.cxx:366
 AliAnalysisAlien.cxx:367
 AliAnalysisAlien.cxx:368
 AliAnalysisAlien.cxx:369
 AliAnalysisAlien.cxx:370
 AliAnalysisAlien.cxx:371
 AliAnalysisAlien.cxx:372
 AliAnalysisAlien.cxx:373
 AliAnalysisAlien.cxx:374
 AliAnalysisAlien.cxx:375
 AliAnalysisAlien.cxx:376
 AliAnalysisAlien.cxx:377
 AliAnalysisAlien.cxx:378
 AliAnalysisAlien.cxx:379
 AliAnalysisAlien.cxx:380
 AliAnalysisAlien.cxx:381
 AliAnalysisAlien.cxx:382
 AliAnalysisAlien.cxx:383
 AliAnalysisAlien.cxx:384
 AliAnalysisAlien.cxx:385
 AliAnalysisAlien.cxx:386
 AliAnalysisAlien.cxx:387
 AliAnalysisAlien.cxx:388
 AliAnalysisAlien.cxx:389
 AliAnalysisAlien.cxx:390
 AliAnalysisAlien.cxx:391
 AliAnalysisAlien.cxx:392
 AliAnalysisAlien.cxx:393
 AliAnalysisAlien.cxx:394
 AliAnalysisAlien.cxx:395
 AliAnalysisAlien.cxx:396
 AliAnalysisAlien.cxx:397
 AliAnalysisAlien.cxx:398
 AliAnalysisAlien.cxx:399
 AliAnalysisAlien.cxx:400
 AliAnalysisAlien.cxx:401
 AliAnalysisAlien.cxx:402
 AliAnalysisAlien.cxx:403
 AliAnalysisAlien.cxx:404
 AliAnalysisAlien.cxx:405
 AliAnalysisAlien.cxx:406
 AliAnalysisAlien.cxx:407
 AliAnalysisAlien.cxx:408
 AliAnalysisAlien.cxx:409
 AliAnalysisAlien.cxx:410
 AliAnalysisAlien.cxx:411
 AliAnalysisAlien.cxx:412
 AliAnalysisAlien.cxx:413
 AliAnalysisAlien.cxx:414
 AliAnalysisAlien.cxx:415
 AliAnalysisAlien.cxx:416
 AliAnalysisAlien.cxx:417
 AliAnalysisAlien.cxx:418
 AliAnalysisAlien.cxx:419
 AliAnalysisAlien.cxx:420
 AliAnalysisAlien.cxx:421
 AliAnalysisAlien.cxx:422
 AliAnalysisAlien.cxx:423
 AliAnalysisAlien.cxx:424
 AliAnalysisAlien.cxx:425
 AliAnalysisAlien.cxx:426
 AliAnalysisAlien.cxx:427
 AliAnalysisAlien.cxx:428
 AliAnalysisAlien.cxx:429
 AliAnalysisAlien.cxx:430
 AliAnalysisAlien.cxx:431
 AliAnalysisAlien.cxx:432
 AliAnalysisAlien.cxx:433
 AliAnalysisAlien.cxx:434
 AliAnalysisAlien.cxx:435
 AliAnalysisAlien.cxx:436
 AliAnalysisAlien.cxx:437
 AliAnalysisAlien.cxx:438
 AliAnalysisAlien.cxx:439
 AliAnalysisAlien.cxx:440
 AliAnalysisAlien.cxx:441
 AliAnalysisAlien.cxx:442
 AliAnalysisAlien.cxx:443
 AliAnalysisAlien.cxx:444
 AliAnalysisAlien.cxx:445
 AliAnalysisAlien.cxx:446
 AliAnalysisAlien.cxx:447
 AliAnalysisAlien.cxx:448
 AliAnalysisAlien.cxx:449
 AliAnalysisAlien.cxx:450
 AliAnalysisAlien.cxx:451
 AliAnalysisAlien.cxx:452
 AliAnalysisAlien.cxx:453
 AliAnalysisAlien.cxx:454
 AliAnalysisAlien.cxx:455
 AliAnalysisAlien.cxx:456
 AliAnalysisAlien.cxx:457
 AliAnalysisAlien.cxx:458
 AliAnalysisAlien.cxx:459
 AliAnalysisAlien.cxx:460
 AliAnalysisAlien.cxx:461
 AliAnalysisAlien.cxx:462
 AliAnalysisAlien.cxx:463
 AliAnalysisAlien.cxx:464
 AliAnalysisAlien.cxx:465
 AliAnalysisAlien.cxx:466
 AliAnalysisAlien.cxx:467
 AliAnalysisAlien.cxx:468
 AliAnalysisAlien.cxx:469
 AliAnalysisAlien.cxx:470
 AliAnalysisAlien.cxx:471
 AliAnalysisAlien.cxx:472
 AliAnalysisAlien.cxx:473
 AliAnalysisAlien.cxx:474
 AliAnalysisAlien.cxx:475
 AliAnalysisAlien.cxx:476
 AliAnalysisAlien.cxx:477
 AliAnalysisAlien.cxx:478
 AliAnalysisAlien.cxx:479
 AliAnalysisAlien.cxx:480
 AliAnalysisAlien.cxx:481
 AliAnalysisAlien.cxx:482
 AliAnalysisAlien.cxx:483
 AliAnalysisAlien.cxx:484
 AliAnalysisAlien.cxx:485
 AliAnalysisAlien.cxx:486
 AliAnalysisAlien.cxx:487
 AliAnalysisAlien.cxx:488
 AliAnalysisAlien.cxx:489
 AliAnalysisAlien.cxx:490
 AliAnalysisAlien.cxx:491
 AliAnalysisAlien.cxx:492
 AliAnalysisAlien.cxx:493
 AliAnalysisAlien.cxx:494
 AliAnalysisAlien.cxx:495
 AliAnalysisAlien.cxx:496
 AliAnalysisAlien.cxx:497
 AliAnalysisAlien.cxx:498
 AliAnalysisAlien.cxx:499
 AliAnalysisAlien.cxx:500
 AliAnalysisAlien.cxx:501
 AliAnalysisAlien.cxx:502
 AliAnalysisAlien.cxx:503
 AliAnalysisAlien.cxx:504
 AliAnalysisAlien.cxx:505
 AliAnalysisAlien.cxx:506
 AliAnalysisAlien.cxx:507
 AliAnalysisAlien.cxx:508
 AliAnalysisAlien.cxx:509
 AliAnalysisAlien.cxx:510
 AliAnalysisAlien.cxx:511
 AliAnalysisAlien.cxx:512
 AliAnalysisAlien.cxx:513
 AliAnalysisAlien.cxx:514
 AliAnalysisAlien.cxx:515
 AliAnalysisAlien.cxx:516
 AliAnalysisAlien.cxx:517
 AliAnalysisAlien.cxx:518
 AliAnalysisAlien.cxx:519
 AliAnalysisAlien.cxx:520
 AliAnalysisAlien.cxx:521
 AliAnalysisAlien.cxx:522
 AliAnalysisAlien.cxx:523
 AliAnalysisAlien.cxx:524
 AliAnalysisAlien.cxx:525
 AliAnalysisAlien.cxx:526
 AliAnalysisAlien.cxx:527
 AliAnalysisAlien.cxx:528
 AliAnalysisAlien.cxx:529
 AliAnalysisAlien.cxx:530
 AliAnalysisAlien.cxx:531
 AliAnalysisAlien.cxx:532
 AliAnalysisAlien.cxx:533
 AliAnalysisAlien.cxx:534
 AliAnalysisAlien.cxx:535
 AliAnalysisAlien.cxx:536
 AliAnalysisAlien.cxx:537
 AliAnalysisAlien.cxx:538
 AliAnalysisAlien.cxx:539
 AliAnalysisAlien.cxx:540
 AliAnalysisAlien.cxx:541
 AliAnalysisAlien.cxx:542
 AliAnalysisAlien.cxx:543
 AliAnalysisAlien.cxx:544
 AliAnalysisAlien.cxx:545
 AliAnalysisAlien.cxx:546
 AliAnalysisAlien.cxx:547
 AliAnalysisAlien.cxx:548
 AliAnalysisAlien.cxx:549
 AliAnalysisAlien.cxx:550
 AliAnalysisAlien.cxx:551
 AliAnalysisAlien.cxx:552
 AliAnalysisAlien.cxx:553
 AliAnalysisAlien.cxx:554
 AliAnalysisAlien.cxx:555
 AliAnalysisAlien.cxx:556
 AliAnalysisAlien.cxx:557
 AliAnalysisAlien.cxx:558
 AliAnalysisAlien.cxx:559
 AliAnalysisAlien.cxx:560
 AliAnalysisAlien.cxx:561
 AliAnalysisAlien.cxx:562
 AliAnalysisAlien.cxx:563
 AliAnalysisAlien.cxx:564
 AliAnalysisAlien.cxx:565
 AliAnalysisAlien.cxx:566
 AliAnalysisAlien.cxx:567
 AliAnalysisAlien.cxx:568
 AliAnalysisAlien.cxx:569
 AliAnalysisAlien.cxx:570
 AliAnalysisAlien.cxx:571
 AliAnalysisAlien.cxx:572
 AliAnalysisAlien.cxx:573
 AliAnalysisAlien.cxx:574
 AliAnalysisAlien.cxx:575
 AliAnalysisAlien.cxx:576
 AliAnalysisAlien.cxx:577
 AliAnalysisAlien.cxx:578
 AliAnalysisAlien.cxx:579
 AliAnalysisAlien.cxx:580
 AliAnalysisAlien.cxx:581
 AliAnalysisAlien.cxx:582
 AliAnalysisAlien.cxx:583
 AliAnalysisAlien.cxx:584
 AliAnalysisAlien.cxx:585
 AliAnalysisAlien.cxx:586
 AliAnalysisAlien.cxx:587
 AliAnalysisAlien.cxx:588
 AliAnalysisAlien.cxx:589
 AliAnalysisAlien.cxx:590
 AliAnalysisAlien.cxx:591
 AliAnalysisAlien.cxx:592
 AliAnalysisAlien.cxx:593
 AliAnalysisAlien.cxx:594
 AliAnalysisAlien.cxx:595
 AliAnalysisAlien.cxx:596
 AliAnalysisAlien.cxx:597
 AliAnalysisAlien.cxx:598
 AliAnalysisAlien.cxx:599
 AliAnalysisAlien.cxx:600
 AliAnalysisAlien.cxx:601
 AliAnalysisAlien.cxx:602
 AliAnalysisAlien.cxx:603
 AliAnalysisAlien.cxx:604
 AliAnalysisAlien.cxx:605
 AliAnalysisAlien.cxx:606
 AliAnalysisAlien.cxx:607
 AliAnalysisAlien.cxx:608
 AliAnalysisAlien.cxx:609
 AliAnalysisAlien.cxx:610
 AliAnalysisAlien.cxx:611
 AliAnalysisAlien.cxx:612
 AliAnalysisAlien.cxx:613
 AliAnalysisAlien.cxx:614
 AliAnalysisAlien.cxx:615
 AliAnalysisAlien.cxx:616
 AliAnalysisAlien.cxx:617
 AliAnalysisAlien.cxx:618
 AliAnalysisAlien.cxx:619
 AliAnalysisAlien.cxx:620
 AliAnalysisAlien.cxx:621
 AliAnalysisAlien.cxx:622
 AliAnalysisAlien.cxx:623
 AliAnalysisAlien.cxx:624
 AliAnalysisAlien.cxx:625
 AliAnalysisAlien.cxx:626
 AliAnalysisAlien.cxx:627
 AliAnalysisAlien.cxx:628
 AliAnalysisAlien.cxx:629
 AliAnalysisAlien.cxx:630
 AliAnalysisAlien.cxx:631
 AliAnalysisAlien.cxx:632
 AliAnalysisAlien.cxx:633
 AliAnalysisAlien.cxx:634
 AliAnalysisAlien.cxx:635
 AliAnalysisAlien.cxx:636
 AliAnalysisAlien.cxx:637
 AliAnalysisAlien.cxx:638
 AliAnalysisAlien.cxx:639
 AliAnalysisAlien.cxx:640
 AliAnalysisAlien.cxx:641
 AliAnalysisAlien.cxx:642
 AliAnalysisAlien.cxx:643
 AliAnalysisAlien.cxx:644
 AliAnalysisAlien.cxx:645
 AliAnalysisAlien.cxx:646
 AliAnalysisAlien.cxx:647
 AliAnalysisAlien.cxx:648
 AliAnalysisAlien.cxx:649
 AliAnalysisAlien.cxx:650
 AliAnalysisAlien.cxx:651
 AliAnalysisAlien.cxx:652
 AliAnalysisAlien.cxx:653
 AliAnalysisAlien.cxx:654
 AliAnalysisAlien.cxx:655
 AliAnalysisAlien.cxx:656
 AliAnalysisAlien.cxx:657
 AliAnalysisAlien.cxx:658
 AliAnalysisAlien.cxx:659
 AliAnalysisAlien.cxx:660
 AliAnalysisAlien.cxx:661
 AliAnalysisAlien.cxx:662
 AliAnalysisAlien.cxx:663
 AliAnalysisAlien.cxx:664
 AliAnalysisAlien.cxx:665
 AliAnalysisAlien.cxx:666
 AliAnalysisAlien.cxx:667
 AliAnalysisAlien.cxx:668
 AliAnalysisAlien.cxx:669
 AliAnalysisAlien.cxx:670
 AliAnalysisAlien.cxx:671
 AliAnalysisAlien.cxx:672
 AliAnalysisAlien.cxx:673
 AliAnalysisAlien.cxx:674
 AliAnalysisAlien.cxx:675
 AliAnalysisAlien.cxx:676
 AliAnalysisAlien.cxx:677
 AliAnalysisAlien.cxx:678
 AliAnalysisAlien.cxx:679
 AliAnalysisAlien.cxx:680
 AliAnalysisAlien.cxx:681
 AliAnalysisAlien.cxx:682
 AliAnalysisAlien.cxx:683
 AliAnalysisAlien.cxx:684
 AliAnalysisAlien.cxx:685
 AliAnalysisAlien.cxx:686
 AliAnalysisAlien.cxx:687
 AliAnalysisAlien.cxx:688
 AliAnalysisAlien.cxx:689
 AliAnalysisAlien.cxx:690
 AliAnalysisAlien.cxx:691
 AliAnalysisAlien.cxx:692
 AliAnalysisAlien.cxx:693
 AliAnalysisAlien.cxx:694
 AliAnalysisAlien.cxx:695
 AliAnalysisAlien.cxx:696
 AliAnalysisAlien.cxx:697
 AliAnalysisAlien.cxx:698
 AliAnalysisAlien.cxx:699
 AliAnalysisAlien.cxx:700
 AliAnalysisAlien.cxx:701
 AliAnalysisAlien.cxx:702
 AliAnalysisAlien.cxx:703
 AliAnalysisAlien.cxx:704
 AliAnalysisAlien.cxx:705
 AliAnalysisAlien.cxx:706
 AliAnalysisAlien.cxx:707
 AliAnalysisAlien.cxx:708
 AliAnalysisAlien.cxx:709
 AliAnalysisAlien.cxx:710
 AliAnalysisAlien.cxx:711
 AliAnalysisAlien.cxx:712
 AliAnalysisAlien.cxx:713
 AliAnalysisAlien.cxx:714
 AliAnalysisAlien.cxx:715
 AliAnalysisAlien.cxx:716
 AliAnalysisAlien.cxx:717
 AliAnalysisAlien.cxx:718
 AliAnalysisAlien.cxx:719
 AliAnalysisAlien.cxx:720
 AliAnalysisAlien.cxx:721
 AliAnalysisAlien.cxx:722
 AliAnalysisAlien.cxx:723
 AliAnalysisAlien.cxx:724
 AliAnalysisAlien.cxx:725
 AliAnalysisAlien.cxx:726
 AliAnalysisAlien.cxx:727
 AliAnalysisAlien.cxx:728
 AliAnalysisAlien.cxx:729
 AliAnalysisAlien.cxx:730
 AliAnalysisAlien.cxx:731
 AliAnalysisAlien.cxx:732
 AliAnalysisAlien.cxx:733
 AliAnalysisAlien.cxx:734
 AliAnalysisAlien.cxx:735
 AliAnalysisAlien.cxx:736
 AliAnalysisAlien.cxx:737
 AliAnalysisAlien.cxx:738
 AliAnalysisAlien.cxx:739
 AliAnalysisAlien.cxx:740
 AliAnalysisAlien.cxx:741
 AliAnalysisAlien.cxx:742
 AliAnalysisAlien.cxx:743
 AliAnalysisAlien.cxx:744
 AliAnalysisAlien.cxx:745
 AliAnalysisAlien.cxx:746
 AliAnalysisAlien.cxx:747
 AliAnalysisAlien.cxx:748
 AliAnalysisAlien.cxx:749
 AliAnalysisAlien.cxx:750
 AliAnalysisAlien.cxx:751
 AliAnalysisAlien.cxx:752
 AliAnalysisAlien.cxx:753
 AliAnalysisAlien.cxx:754
 AliAnalysisAlien.cxx:755
 AliAnalysisAlien.cxx:756
 AliAnalysisAlien.cxx:757
 AliAnalysisAlien.cxx:758
 AliAnalysisAlien.cxx:759
 AliAnalysisAlien.cxx:760
 AliAnalysisAlien.cxx:761
 AliAnalysisAlien.cxx:762
 AliAnalysisAlien.cxx:763
 AliAnalysisAlien.cxx:764
 AliAnalysisAlien.cxx:765
 AliAnalysisAlien.cxx:766
 AliAnalysisAlien.cxx:767
 AliAnalysisAlien.cxx:768
 AliAnalysisAlien.cxx:769
 AliAnalysisAlien.cxx:770
 AliAnalysisAlien.cxx:771
 AliAnalysisAlien.cxx:772
 AliAnalysisAlien.cxx:773
 AliAnalysisAlien.cxx:774
 AliAnalysisAlien.cxx:775
 AliAnalysisAlien.cxx:776
 AliAnalysisAlien.cxx:777
 AliAnalysisAlien.cxx:778
 AliAnalysisAlien.cxx:779
 AliAnalysisAlien.cxx:780
 AliAnalysisAlien.cxx:781
 AliAnalysisAlien.cxx:782
 AliAnalysisAlien.cxx:783
 AliAnalysisAlien.cxx:784
 AliAnalysisAlien.cxx:785
 AliAnalysisAlien.cxx:786
 AliAnalysisAlien.cxx:787
 AliAnalysisAlien.cxx:788
 AliAnalysisAlien.cxx:789
 AliAnalysisAlien.cxx:790
 AliAnalysisAlien.cxx:791
 AliAnalysisAlien.cxx:792
 AliAnalysisAlien.cxx:793
 AliAnalysisAlien.cxx:794
 AliAnalysisAlien.cxx:795
 AliAnalysisAlien.cxx:796
 AliAnalysisAlien.cxx:797
 AliAnalysisAlien.cxx:798
 AliAnalysisAlien.cxx:799
 AliAnalysisAlien.cxx:800
 AliAnalysisAlien.cxx:801
 AliAnalysisAlien.cxx:802
 AliAnalysisAlien.cxx:803
 AliAnalysisAlien.cxx:804
 AliAnalysisAlien.cxx:805
 AliAnalysisAlien.cxx:806
 AliAnalysisAlien.cxx:807
 AliAnalysisAlien.cxx:808
 AliAnalysisAlien.cxx:809
 AliAnalysisAlien.cxx:810
 AliAnalysisAlien.cxx:811
 AliAnalysisAlien.cxx:812
 AliAnalysisAlien.cxx:813
 AliAnalysisAlien.cxx:814
 AliAnalysisAlien.cxx:815
 AliAnalysisAlien.cxx:816
 AliAnalysisAlien.cxx:817
 AliAnalysisAlien.cxx:818
 AliAnalysisAlien.cxx:819
 AliAnalysisAlien.cxx:820
 AliAnalysisAlien.cxx:821
 AliAnalysisAlien.cxx:822
 AliAnalysisAlien.cxx:823
 AliAnalysisAlien.cxx:824
 AliAnalysisAlien.cxx:825
 AliAnalysisAlien.cxx:826
 AliAnalysisAlien.cxx:827
 AliAnalysisAlien.cxx:828
 AliAnalysisAlien.cxx:829
 AliAnalysisAlien.cxx:830
 AliAnalysisAlien.cxx:831
 AliAnalysisAlien.cxx:832
 AliAnalysisAlien.cxx:833
 AliAnalysisAlien.cxx:834
 AliAnalysisAlien.cxx:835
 AliAnalysisAlien.cxx:836
 AliAnalysisAlien.cxx:837
 AliAnalysisAlien.cxx:838
 AliAnalysisAlien.cxx:839
 AliAnalysisAlien.cxx:840
 AliAnalysisAlien.cxx:841
 AliAnalysisAlien.cxx:842
 AliAnalysisAlien.cxx:843
 AliAnalysisAlien.cxx:844
 AliAnalysisAlien.cxx:845
 AliAnalysisAlien.cxx:846
 AliAnalysisAlien.cxx:847
 AliAnalysisAlien.cxx:848
 AliAnalysisAlien.cxx:849
 AliAnalysisAlien.cxx:850
 AliAnalysisAlien.cxx:851
 AliAnalysisAlien.cxx:852
 AliAnalysisAlien.cxx:853
 AliAnalysisAlien.cxx:854
 AliAnalysisAlien.cxx:855
 AliAnalysisAlien.cxx:856
 AliAnalysisAlien.cxx:857
 AliAnalysisAlien.cxx:858
 AliAnalysisAlien.cxx:859
 AliAnalysisAlien.cxx:860
 AliAnalysisAlien.cxx:861
 AliAnalysisAlien.cxx:862
 AliAnalysisAlien.cxx:863
 AliAnalysisAlien.cxx:864
 AliAnalysisAlien.cxx:865
 AliAnalysisAlien.cxx:866
 AliAnalysisAlien.cxx:867
 AliAnalysisAlien.cxx:868
 AliAnalysisAlien.cxx:869
 AliAnalysisAlien.cxx:870
 AliAnalysisAlien.cxx:871
 AliAnalysisAlien.cxx:872
 AliAnalysisAlien.cxx:873
 AliAnalysisAlien.cxx:874
 AliAnalysisAlien.cxx:875
 AliAnalysisAlien.cxx:876
 AliAnalysisAlien.cxx:877
 AliAnalysisAlien.cxx:878
 AliAnalysisAlien.cxx:879
 AliAnalysisAlien.cxx:880
 AliAnalysisAlien.cxx:881
 AliAnalysisAlien.cxx:882
 AliAnalysisAlien.cxx:883
 AliAnalysisAlien.cxx:884
 AliAnalysisAlien.cxx:885
 AliAnalysisAlien.cxx:886
 AliAnalysisAlien.cxx:887
 AliAnalysisAlien.cxx:888
 AliAnalysisAlien.cxx:889
 AliAnalysisAlien.cxx:890
 AliAnalysisAlien.cxx:891
 AliAnalysisAlien.cxx:892
 AliAnalysisAlien.cxx:893
 AliAnalysisAlien.cxx:894
 AliAnalysisAlien.cxx:895
 AliAnalysisAlien.cxx:896
 AliAnalysisAlien.cxx:897
 AliAnalysisAlien.cxx:898
 AliAnalysisAlien.cxx:899
 AliAnalysisAlien.cxx:900
 AliAnalysisAlien.cxx:901
 AliAnalysisAlien.cxx:902
 AliAnalysisAlien.cxx:903
 AliAnalysisAlien.cxx:904
 AliAnalysisAlien.cxx:905
 AliAnalysisAlien.cxx:906
 AliAnalysisAlien.cxx:907
 AliAnalysisAlien.cxx:908
 AliAnalysisAlien.cxx:909
 AliAnalysisAlien.cxx:910
 AliAnalysisAlien.cxx:911
 AliAnalysisAlien.cxx:912
 AliAnalysisAlien.cxx:913
 AliAnalysisAlien.cxx:914
 AliAnalysisAlien.cxx:915
 AliAnalysisAlien.cxx:916
 AliAnalysisAlien.cxx:917
 AliAnalysisAlien.cxx:918
 AliAnalysisAlien.cxx:919
 AliAnalysisAlien.cxx:920
 AliAnalysisAlien.cxx:921
 AliAnalysisAlien.cxx:922
 AliAnalysisAlien.cxx:923
 AliAnalysisAlien.cxx:924
 AliAnalysisAlien.cxx:925
 AliAnalysisAlien.cxx:926
 AliAnalysisAlien.cxx:927
 AliAnalysisAlien.cxx:928
 AliAnalysisAlien.cxx:929
 AliAnalysisAlien.cxx:930
 AliAnalysisAlien.cxx:931
 AliAnalysisAlien.cxx:932
 AliAnalysisAlien.cxx:933
 AliAnalysisAlien.cxx:934
 AliAnalysisAlien.cxx:935
 AliAnalysisAlien.cxx:936
 AliAnalysisAlien.cxx:937
 AliAnalysisAlien.cxx:938
 AliAnalysisAlien.cxx:939
 AliAnalysisAlien.cxx:940
 AliAnalysisAlien.cxx:941
 AliAnalysisAlien.cxx:942
 AliAnalysisAlien.cxx:943
 AliAnalysisAlien.cxx:944
 AliAnalysisAlien.cxx:945
 AliAnalysisAlien.cxx:946
 AliAnalysisAlien.cxx:947
 AliAnalysisAlien.cxx:948
 AliAnalysisAlien.cxx:949
 AliAnalysisAlien.cxx:950
 AliAnalysisAlien.cxx:951
 AliAnalysisAlien.cxx:952
 AliAnalysisAlien.cxx:953
 AliAnalysisAlien.cxx:954
 AliAnalysisAlien.cxx:955
 AliAnalysisAlien.cxx:956
 AliAnalysisAlien.cxx:957
 AliAnalysisAlien.cxx:958
 AliAnalysisAlien.cxx:959
 AliAnalysisAlien.cxx:960
 AliAnalysisAlien.cxx:961
 AliAnalysisAlien.cxx:962
 AliAnalysisAlien.cxx:963
 AliAnalysisAlien.cxx:964
 AliAnalysisAlien.cxx:965
 AliAnalysisAlien.cxx:966
 AliAnalysisAlien.cxx:967
 AliAnalysisAlien.cxx:968
 AliAnalysisAlien.cxx:969
 AliAnalysisAlien.cxx:970
 AliAnalysisAlien.cxx:971
 AliAnalysisAlien.cxx:972
 AliAnalysisAlien.cxx:973
 AliAnalysisAlien.cxx:974
 AliAnalysisAlien.cxx:975
 AliAnalysisAlien.cxx:976
 AliAnalysisAlien.cxx:977
 AliAnalysisAlien.cxx:978
 AliAnalysisAlien.cxx:979
 AliAnalysisAlien.cxx:980
 AliAnalysisAlien.cxx:981
 AliAnalysisAlien.cxx:982
 AliAnalysisAlien.cxx:983
 AliAnalysisAlien.cxx:984
 AliAnalysisAlien.cxx:985
 AliAnalysisAlien.cxx:986
 AliAnalysisAlien.cxx:987
 AliAnalysisAlien.cxx:988
 AliAnalysisAlien.cxx:989
 AliAnalysisAlien.cxx:990
 AliAnalysisAlien.cxx:991
 AliAnalysisAlien.cxx:992
 AliAnalysisAlien.cxx:993
 AliAnalysisAlien.cxx:994
 AliAnalysisAlien.cxx:995
 AliAnalysisAlien.cxx:996
 AliAnalysisAlien.cxx:997
 AliAnalysisAlien.cxx:998
 AliAnalysisAlien.cxx:999
 AliAnalysisAlien.cxx:1000
 AliAnalysisAlien.cxx:1001
 AliAnalysisAlien.cxx:1002
 AliAnalysisAlien.cxx:1003
 AliAnalysisAlien.cxx:1004
 AliAnalysisAlien.cxx:1005
 AliAnalysisAlien.cxx:1006
 AliAnalysisAlien.cxx:1007
 AliAnalysisAlien.cxx:1008
 AliAnalysisAlien.cxx:1009
 AliAnalysisAlien.cxx:1010
 AliAnalysisAlien.cxx:1011
 AliAnalysisAlien.cxx:1012
 AliAnalysisAlien.cxx:1013
 AliAnalysisAlien.cxx:1014
 AliAnalysisAlien.cxx:1015
 AliAnalysisAlien.cxx:1016
 AliAnalysisAlien.cxx:1017
 AliAnalysisAlien.cxx:1018
 AliAnalysisAlien.cxx:1019
 AliAnalysisAlien.cxx:1020
 AliAnalysisAlien.cxx:1021
 AliAnalysisAlien.cxx:1022
 AliAnalysisAlien.cxx:1023
 AliAnalysisAlien.cxx:1024
 AliAnalysisAlien.cxx:1025
 AliAnalysisAlien.cxx:1026
 AliAnalysisAlien.cxx:1027
 AliAnalysisAlien.cxx:1028
 AliAnalysisAlien.cxx:1029
 AliAnalysisAlien.cxx:1030
 AliAnalysisAlien.cxx:1031
 AliAnalysisAlien.cxx:1032
 AliAnalysisAlien.cxx:1033
 AliAnalysisAlien.cxx:1034
 AliAnalysisAlien.cxx:1035
 AliAnalysisAlien.cxx:1036
 AliAnalysisAlien.cxx:1037
 AliAnalysisAlien.cxx:1038
 AliAnalysisAlien.cxx:1039
 AliAnalysisAlien.cxx:1040
 AliAnalysisAlien.cxx:1041
 AliAnalysisAlien.cxx:1042
 AliAnalysisAlien.cxx:1043
 AliAnalysisAlien.cxx:1044
 AliAnalysisAlien.cxx:1045
 AliAnalysisAlien.cxx:1046
 AliAnalysisAlien.cxx:1047
 AliAnalysisAlien.cxx:1048
 AliAnalysisAlien.cxx:1049
 AliAnalysisAlien.cxx:1050
 AliAnalysisAlien.cxx:1051
 AliAnalysisAlien.cxx:1052
 AliAnalysisAlien.cxx:1053
 AliAnalysisAlien.cxx:1054
 AliAnalysisAlien.cxx:1055
 AliAnalysisAlien.cxx:1056
 AliAnalysisAlien.cxx:1057
 AliAnalysisAlien.cxx:1058
 AliAnalysisAlien.cxx:1059
 AliAnalysisAlien.cxx:1060
 AliAnalysisAlien.cxx:1061
 AliAnalysisAlien.cxx:1062
 AliAnalysisAlien.cxx:1063
 AliAnalysisAlien.cxx:1064
 AliAnalysisAlien.cxx:1065
 AliAnalysisAlien.cxx:1066
 AliAnalysisAlien.cxx:1067
 AliAnalysisAlien.cxx:1068
 AliAnalysisAlien.cxx:1069
 AliAnalysisAlien.cxx:1070
 AliAnalysisAlien.cxx:1071
 AliAnalysisAlien.cxx:1072
 AliAnalysisAlien.cxx:1073
 AliAnalysisAlien.cxx:1074
 AliAnalysisAlien.cxx:1075
 AliAnalysisAlien.cxx:1076
 AliAnalysisAlien.cxx:1077
 AliAnalysisAlien.cxx:1078
 AliAnalysisAlien.cxx:1079
 AliAnalysisAlien.cxx:1080
 AliAnalysisAlien.cxx:1081
 AliAnalysisAlien.cxx:1082
 AliAnalysisAlien.cxx:1083
 AliAnalysisAlien.cxx:1084
 AliAnalysisAlien.cxx:1085
 AliAnalysisAlien.cxx:1086
 AliAnalysisAlien.cxx:1087
 AliAnalysisAlien.cxx:1088
 AliAnalysisAlien.cxx:1089
 AliAnalysisAlien.cxx:1090
 AliAnalysisAlien.cxx:1091
 AliAnalysisAlien.cxx:1092
 AliAnalysisAlien.cxx:1093
 AliAnalysisAlien.cxx:1094
 AliAnalysisAlien.cxx:1095
 AliAnalysisAlien.cxx:1096
 AliAnalysisAlien.cxx:1097
 AliAnalysisAlien.cxx:1098
 AliAnalysisAlien.cxx:1099
 AliAnalysisAlien.cxx:1100
 AliAnalysisAlien.cxx:1101
 AliAnalysisAlien.cxx:1102
 AliAnalysisAlien.cxx:1103
 AliAnalysisAlien.cxx:1104
 AliAnalysisAlien.cxx:1105
 AliAnalysisAlien.cxx:1106
 AliAnalysisAlien.cxx:1107
 AliAnalysisAlien.cxx:1108
 AliAnalysisAlien.cxx:1109
 AliAnalysisAlien.cxx:1110
 AliAnalysisAlien.cxx:1111
 AliAnalysisAlien.cxx:1112
 AliAnalysisAlien.cxx:1113
 AliAnalysisAlien.cxx:1114
 AliAnalysisAlien.cxx:1115
 AliAnalysisAlien.cxx:1116
 AliAnalysisAlien.cxx:1117
 AliAnalysisAlien.cxx:1118
 AliAnalysisAlien.cxx:1119
 AliAnalysisAlien.cxx:1120
 AliAnalysisAlien.cxx:1121
 AliAnalysisAlien.cxx:1122
 AliAnalysisAlien.cxx:1123
 AliAnalysisAlien.cxx:1124
 AliAnalysisAlien.cxx:1125
 AliAnalysisAlien.cxx:1126
 AliAnalysisAlien.cxx:1127
 AliAnalysisAlien.cxx:1128
 AliAnalysisAlien.cxx:1129
 AliAnalysisAlien.cxx:1130
 AliAnalysisAlien.cxx:1131
 AliAnalysisAlien.cxx:1132
 AliAnalysisAlien.cxx:1133
 AliAnalysisAlien.cxx:1134
 AliAnalysisAlien.cxx:1135
 AliAnalysisAlien.cxx:1136
 AliAnalysisAlien.cxx:1137
 AliAnalysisAlien.cxx:1138
 AliAnalysisAlien.cxx:1139
 AliAnalysisAlien.cxx:1140
 AliAnalysisAlien.cxx:1141
 AliAnalysisAlien.cxx:1142
 AliAnalysisAlien.cxx:1143
 AliAnalysisAlien.cxx:1144
 AliAnalysisAlien.cxx:1145
 AliAnalysisAlien.cxx:1146
 AliAnalysisAlien.cxx:1147
 AliAnalysisAlien.cxx:1148
 AliAnalysisAlien.cxx:1149
 AliAnalysisAlien.cxx:1150
 AliAnalysisAlien.cxx:1151
 AliAnalysisAlien.cxx:1152
 AliAnalysisAlien.cxx:1153
 AliAnalysisAlien.cxx:1154
 AliAnalysisAlien.cxx:1155
 AliAnalysisAlien.cxx:1156
 AliAnalysisAlien.cxx:1157
 AliAnalysisAlien.cxx:1158
 AliAnalysisAlien.cxx:1159
 AliAnalysisAlien.cxx:1160
 AliAnalysisAlien.cxx:1161
 AliAnalysisAlien.cxx:1162
 AliAnalysisAlien.cxx:1163
 AliAnalysisAlien.cxx:1164
 AliAnalysisAlien.cxx:1165
 AliAnalysisAlien.cxx:1166
 AliAnalysisAlien.cxx:1167
 AliAnalysisAlien.cxx:1168
 AliAnalysisAlien.cxx:1169
 AliAnalysisAlien.cxx:1170
 AliAnalysisAlien.cxx:1171
 AliAnalysisAlien.cxx:1172
 AliAnalysisAlien.cxx:1173
 AliAnalysisAlien.cxx:1174
 AliAnalysisAlien.cxx:1175
 AliAnalysisAlien.cxx:1176
 AliAnalysisAlien.cxx:1177
 AliAnalysisAlien.cxx:1178
 AliAnalysisAlien.cxx:1179
 AliAnalysisAlien.cxx:1180
 AliAnalysisAlien.cxx:1181
 AliAnalysisAlien.cxx:1182
 AliAnalysisAlien.cxx:1183
 AliAnalysisAlien.cxx:1184
 AliAnalysisAlien.cxx:1185
 AliAnalysisAlien.cxx:1186
 AliAnalysisAlien.cxx:1187
 AliAnalysisAlien.cxx:1188
 AliAnalysisAlien.cxx:1189
 AliAnalysisAlien.cxx:1190
 AliAnalysisAlien.cxx:1191
 AliAnalysisAlien.cxx:1192
 AliAnalysisAlien.cxx:1193
 AliAnalysisAlien.cxx:1194
 AliAnalysisAlien.cxx:1195
 AliAnalysisAlien.cxx:1196
 AliAnalysisAlien.cxx:1197
 AliAnalysisAlien.cxx:1198
 AliAnalysisAlien.cxx:1199
 AliAnalysisAlien.cxx:1200
 AliAnalysisAlien.cxx:1201
 AliAnalysisAlien.cxx:1202
 AliAnalysisAlien.cxx:1203
 AliAnalysisAlien.cxx:1204
 AliAnalysisAlien.cxx:1205
 AliAnalysisAlien.cxx:1206
 AliAnalysisAlien.cxx:1207
 AliAnalysisAlien.cxx:1208
 AliAnalysisAlien.cxx:1209
 AliAnalysisAlien.cxx:1210
 AliAnalysisAlien.cxx:1211
 AliAnalysisAlien.cxx:1212
 AliAnalysisAlien.cxx:1213
 AliAnalysisAlien.cxx:1214
 AliAnalysisAlien.cxx:1215
 AliAnalysisAlien.cxx:1216
 AliAnalysisAlien.cxx:1217
 AliAnalysisAlien.cxx:1218
 AliAnalysisAlien.cxx:1219
 AliAnalysisAlien.cxx:1220
 AliAnalysisAlien.cxx:1221
 AliAnalysisAlien.cxx:1222
 AliAnalysisAlien.cxx:1223
 AliAnalysisAlien.cxx:1224
 AliAnalysisAlien.cxx:1225
 AliAnalysisAlien.cxx:1226
 AliAnalysisAlien.cxx:1227
 AliAnalysisAlien.cxx:1228
 AliAnalysisAlien.cxx:1229
 AliAnalysisAlien.cxx:1230
 AliAnalysisAlien.cxx:1231
 AliAnalysisAlien.cxx:1232
 AliAnalysisAlien.cxx:1233
 AliAnalysisAlien.cxx:1234
 AliAnalysisAlien.cxx:1235
 AliAnalysisAlien.cxx:1236
 AliAnalysisAlien.cxx:1237
 AliAnalysisAlien.cxx:1238
 AliAnalysisAlien.cxx:1239
 AliAnalysisAlien.cxx:1240
 AliAnalysisAlien.cxx:1241
 AliAnalysisAlien.cxx:1242
 AliAnalysisAlien.cxx:1243
 AliAnalysisAlien.cxx:1244
 AliAnalysisAlien.cxx:1245
 AliAnalysisAlien.cxx:1246
 AliAnalysisAlien.cxx:1247
 AliAnalysisAlien.cxx:1248
 AliAnalysisAlien.cxx:1249
 AliAnalysisAlien.cxx:1250
 AliAnalysisAlien.cxx:1251
 AliAnalysisAlien.cxx:1252
 AliAnalysisAlien.cxx:1253
 AliAnalysisAlien.cxx:1254
 AliAnalysisAlien.cxx:1255
 AliAnalysisAlien.cxx:1256
 AliAnalysisAlien.cxx:1257
 AliAnalysisAlien.cxx:1258
 AliAnalysisAlien.cxx:1259
 AliAnalysisAlien.cxx:1260
 AliAnalysisAlien.cxx:1261
 AliAnalysisAlien.cxx:1262
 AliAnalysisAlien.cxx:1263
 AliAnalysisAlien.cxx:1264
 AliAnalysisAlien.cxx:1265
 AliAnalysisAlien.cxx:1266
 AliAnalysisAlien.cxx:1267
 AliAnalysisAlien.cxx:1268
 AliAnalysisAlien.cxx:1269
 AliAnalysisAlien.cxx:1270
 AliAnalysisAlien.cxx:1271
 AliAnalysisAlien.cxx:1272
 AliAnalysisAlien.cxx:1273
 AliAnalysisAlien.cxx:1274
 AliAnalysisAlien.cxx:1275
 AliAnalysisAlien.cxx:1276
 AliAnalysisAlien.cxx:1277
 AliAnalysisAlien.cxx:1278
 AliAnalysisAlien.cxx:1279
 AliAnalysisAlien.cxx:1280
 AliAnalysisAlien.cxx:1281
 AliAnalysisAlien.cxx:1282
 AliAnalysisAlien.cxx:1283
 AliAnalysisAlien.cxx:1284
 AliAnalysisAlien.cxx:1285
 AliAnalysisAlien.cxx:1286
 AliAnalysisAlien.cxx:1287
 AliAnalysisAlien.cxx:1288
 AliAnalysisAlien.cxx:1289
 AliAnalysisAlien.cxx:1290
 AliAnalysisAlien.cxx:1291
 AliAnalysisAlien.cxx:1292
 AliAnalysisAlien.cxx:1293
 AliAnalysisAlien.cxx:1294
 AliAnalysisAlien.cxx:1295
 AliAnalysisAlien.cxx:1296
 AliAnalysisAlien.cxx:1297
 AliAnalysisAlien.cxx:1298
 AliAnalysisAlien.cxx:1299
 AliAnalysisAlien.cxx:1300
 AliAnalysisAlien.cxx:1301
 AliAnalysisAlien.cxx:1302
 AliAnalysisAlien.cxx:1303
 AliAnalysisAlien.cxx:1304
 AliAnalysisAlien.cxx:1305
 AliAnalysisAlien.cxx:1306
 AliAnalysisAlien.cxx:1307
 AliAnalysisAlien.cxx:1308
 AliAnalysisAlien.cxx:1309
 AliAnalysisAlien.cxx:1310
 AliAnalysisAlien.cxx:1311
 AliAnalysisAlien.cxx:1312
 AliAnalysisAlien.cxx:1313
 AliAnalysisAlien.cxx:1314
 AliAnalysisAlien.cxx:1315
 AliAnalysisAlien.cxx:1316
 AliAnalysisAlien.cxx:1317
 AliAnalysisAlien.cxx:1318
 AliAnalysisAlien.cxx:1319
 AliAnalysisAlien.cxx:1320
 AliAnalysisAlien.cxx:1321
 AliAnalysisAlien.cxx:1322
 AliAnalysisAlien.cxx:1323
 AliAnalysisAlien.cxx:1324
 AliAnalysisAlien.cxx:1325
 AliAnalysisAlien.cxx:1326
 AliAnalysisAlien.cxx:1327
 AliAnalysisAlien.cxx:1328
 AliAnalysisAlien.cxx:1329
 AliAnalysisAlien.cxx:1330
 AliAnalysisAlien.cxx:1331
 AliAnalysisAlien.cxx:1332
 AliAnalysisAlien.cxx:1333
 AliAnalysisAlien.cxx:1334
 AliAnalysisAlien.cxx:1335
 AliAnalysisAlien.cxx:1336
 AliAnalysisAlien.cxx:1337
 AliAnalysisAlien.cxx:1338
 AliAnalysisAlien.cxx:1339
 AliAnalysisAlien.cxx:1340
 AliAnalysisAlien.cxx:1341
 AliAnalysisAlien.cxx:1342
 AliAnalysisAlien.cxx:1343
 AliAnalysisAlien.cxx:1344
 AliAnalysisAlien.cxx:1345
 AliAnalysisAlien.cxx:1346
 AliAnalysisAlien.cxx:1347
 AliAnalysisAlien.cxx:1348
 AliAnalysisAlien.cxx:1349
 AliAnalysisAlien.cxx:1350
 AliAnalysisAlien.cxx:1351
 AliAnalysisAlien.cxx:1352
 AliAnalysisAlien.cxx:1353
 AliAnalysisAlien.cxx:1354
 AliAnalysisAlien.cxx:1355
 AliAnalysisAlien.cxx:1356
 AliAnalysisAlien.cxx:1357
 AliAnalysisAlien.cxx:1358
 AliAnalysisAlien.cxx:1359
 AliAnalysisAlien.cxx:1360
 AliAnalysisAlien.cxx:1361
 AliAnalysisAlien.cxx:1362
 AliAnalysisAlien.cxx:1363
 AliAnalysisAlien.cxx:1364
 AliAnalysisAlien.cxx:1365
 AliAnalysisAlien.cxx:1366
 AliAnalysisAlien.cxx:1367
 AliAnalysisAlien.cxx:1368
 AliAnalysisAlien.cxx:1369
 AliAnalysisAlien.cxx:1370
 AliAnalysisAlien.cxx:1371
 AliAnalysisAlien.cxx:1372
 AliAnalysisAlien.cxx:1373
 AliAnalysisAlien.cxx:1374
 AliAnalysisAlien.cxx:1375
 AliAnalysisAlien.cxx:1376
 AliAnalysisAlien.cxx:1377
 AliAnalysisAlien.cxx:1378
 AliAnalysisAlien.cxx:1379
 AliAnalysisAlien.cxx:1380
 AliAnalysisAlien.cxx:1381
 AliAnalysisAlien.cxx:1382
 AliAnalysisAlien.cxx:1383
 AliAnalysisAlien.cxx:1384
 AliAnalysisAlien.cxx:1385
 AliAnalysisAlien.cxx:1386
 AliAnalysisAlien.cxx:1387
 AliAnalysisAlien.cxx:1388
 AliAnalysisAlien.cxx:1389
 AliAnalysisAlien.cxx:1390
 AliAnalysisAlien.cxx:1391
 AliAnalysisAlien.cxx:1392
 AliAnalysisAlien.cxx:1393
 AliAnalysisAlien.cxx:1394
 AliAnalysisAlien.cxx:1395
 AliAnalysisAlien.cxx:1396
 AliAnalysisAlien.cxx:1397
 AliAnalysisAlien.cxx:1398
 AliAnalysisAlien.cxx:1399
 AliAnalysisAlien.cxx:1400
 AliAnalysisAlien.cxx:1401
 AliAnalysisAlien.cxx:1402
 AliAnalysisAlien.cxx:1403
 AliAnalysisAlien.cxx:1404
 AliAnalysisAlien.cxx:1405
 AliAnalysisAlien.cxx:1406
 AliAnalysisAlien.cxx:1407
 AliAnalysisAlien.cxx:1408
 AliAnalysisAlien.cxx:1409
 AliAnalysisAlien.cxx:1410
 AliAnalysisAlien.cxx:1411
 AliAnalysisAlien.cxx:1412
 AliAnalysisAlien.cxx:1413
 AliAnalysisAlien.cxx:1414
 AliAnalysisAlien.cxx:1415
 AliAnalysisAlien.cxx:1416
 AliAnalysisAlien.cxx:1417
 AliAnalysisAlien.cxx:1418
 AliAnalysisAlien.cxx:1419
 AliAnalysisAlien.cxx:1420
 AliAnalysisAlien.cxx:1421
 AliAnalysisAlien.cxx:1422
 AliAnalysisAlien.cxx:1423
 AliAnalysisAlien.cxx:1424
 AliAnalysisAlien.cxx:1425
 AliAnalysisAlien.cxx:1426
 AliAnalysisAlien.cxx:1427
 AliAnalysisAlien.cxx:1428
 AliAnalysisAlien.cxx:1429
 AliAnalysisAlien.cxx:1430
 AliAnalysisAlien.cxx:1431
 AliAnalysisAlien.cxx:1432
 AliAnalysisAlien.cxx:1433
 AliAnalysisAlien.cxx:1434
 AliAnalysisAlien.cxx:1435
 AliAnalysisAlien.cxx:1436
 AliAnalysisAlien.cxx:1437
 AliAnalysisAlien.cxx:1438
 AliAnalysisAlien.cxx:1439
 AliAnalysisAlien.cxx:1440
 AliAnalysisAlien.cxx:1441
 AliAnalysisAlien.cxx:1442
 AliAnalysisAlien.cxx:1443
 AliAnalysisAlien.cxx:1444
 AliAnalysisAlien.cxx:1445
 AliAnalysisAlien.cxx:1446
 AliAnalysisAlien.cxx:1447
 AliAnalysisAlien.cxx:1448
 AliAnalysisAlien.cxx:1449
 AliAnalysisAlien.cxx:1450
 AliAnalysisAlien.cxx:1451
 AliAnalysisAlien.cxx:1452
 AliAnalysisAlien.cxx:1453
 AliAnalysisAlien.cxx:1454
 AliAnalysisAlien.cxx:1455
 AliAnalysisAlien.cxx:1456
 AliAnalysisAlien.cxx:1457
 AliAnalysisAlien.cxx:1458
 AliAnalysisAlien.cxx:1459
 AliAnalysisAlien.cxx:1460
 AliAnalysisAlien.cxx:1461
 AliAnalysisAlien.cxx:1462
 AliAnalysisAlien.cxx:1463
 AliAnalysisAlien.cxx:1464
 AliAnalysisAlien.cxx:1465
 AliAnalysisAlien.cxx:1466
 AliAnalysisAlien.cxx:1467
 AliAnalysisAlien.cxx:1468
 AliAnalysisAlien.cxx:1469
 AliAnalysisAlien.cxx:1470
 AliAnalysisAlien.cxx:1471
 AliAnalysisAlien.cxx:1472
 AliAnalysisAlien.cxx:1473
 AliAnalysisAlien.cxx:1474
 AliAnalysisAlien.cxx:1475
 AliAnalysisAlien.cxx:1476
 AliAnalysisAlien.cxx:1477
 AliAnalysisAlien.cxx:1478
 AliAnalysisAlien.cxx:1479
 AliAnalysisAlien.cxx:1480
 AliAnalysisAlien.cxx:1481
 AliAnalysisAlien.cxx:1482
 AliAnalysisAlien.cxx:1483
 AliAnalysisAlien.cxx:1484
 AliAnalysisAlien.cxx:1485
 AliAnalysisAlien.cxx:1486
 AliAnalysisAlien.cxx:1487
 AliAnalysisAlien.cxx:1488
 AliAnalysisAlien.cxx:1489
 AliAnalysisAlien.cxx:1490
 AliAnalysisAlien.cxx:1491
 AliAnalysisAlien.cxx:1492
 AliAnalysisAlien.cxx:1493
 AliAnalysisAlien.cxx:1494
 AliAnalysisAlien.cxx:1495
 AliAnalysisAlien.cxx:1496
 AliAnalysisAlien.cxx:1497
 AliAnalysisAlien.cxx:1498
 AliAnalysisAlien.cxx:1499
 AliAnalysisAlien.cxx:1500
 AliAnalysisAlien.cxx:1501
 AliAnalysisAlien.cxx:1502
 AliAnalysisAlien.cxx:1503
 AliAnalysisAlien.cxx:1504
 AliAnalysisAlien.cxx:1505
 AliAnalysisAlien.cxx:1506
 AliAnalysisAlien.cxx:1507
 AliAnalysisAlien.cxx:1508
 AliAnalysisAlien.cxx:1509
 AliAnalysisAlien.cxx:1510
 AliAnalysisAlien.cxx:1511
 AliAnalysisAlien.cxx:1512
 AliAnalysisAlien.cxx:1513
 AliAnalysisAlien.cxx:1514
 AliAnalysisAlien.cxx:1515
 AliAnalysisAlien.cxx:1516
 AliAnalysisAlien.cxx:1517
 AliAnalysisAlien.cxx:1518
 AliAnalysisAlien.cxx:1519
 AliAnalysisAlien.cxx:1520
 AliAnalysisAlien.cxx:1521
 AliAnalysisAlien.cxx:1522
 AliAnalysisAlien.cxx:1523
 AliAnalysisAlien.cxx:1524
 AliAnalysisAlien.cxx:1525
 AliAnalysisAlien.cxx:1526
 AliAnalysisAlien.cxx:1527
 AliAnalysisAlien.cxx:1528
 AliAnalysisAlien.cxx:1529
 AliAnalysisAlien.cxx:1530
 AliAnalysisAlien.cxx:1531
 AliAnalysisAlien.cxx:1532
 AliAnalysisAlien.cxx:1533
 AliAnalysisAlien.cxx:1534
 AliAnalysisAlien.cxx:1535
 AliAnalysisAlien.cxx:1536
 AliAnalysisAlien.cxx:1537
 AliAnalysisAlien.cxx:1538
 AliAnalysisAlien.cxx:1539
 AliAnalysisAlien.cxx:1540
 AliAnalysisAlien.cxx:1541
 AliAnalysisAlien.cxx:1542
 AliAnalysisAlien.cxx:1543
 AliAnalysisAlien.cxx:1544
 AliAnalysisAlien.cxx:1545
 AliAnalysisAlien.cxx:1546
 AliAnalysisAlien.cxx:1547
 AliAnalysisAlien.cxx:1548
 AliAnalysisAlien.cxx:1549
 AliAnalysisAlien.cxx:1550
 AliAnalysisAlien.cxx:1551
 AliAnalysisAlien.cxx:1552
 AliAnalysisAlien.cxx:1553
 AliAnalysisAlien.cxx:1554
 AliAnalysisAlien.cxx:1555
 AliAnalysisAlien.cxx:1556
 AliAnalysisAlien.cxx:1557
 AliAnalysisAlien.cxx:1558
 AliAnalysisAlien.cxx:1559
 AliAnalysisAlien.cxx:1560
 AliAnalysisAlien.cxx:1561
 AliAnalysisAlien.cxx:1562
 AliAnalysisAlien.cxx:1563
 AliAnalysisAlien.cxx:1564
 AliAnalysisAlien.cxx:1565
 AliAnalysisAlien.cxx:1566
 AliAnalysisAlien.cxx:1567
 AliAnalysisAlien.cxx:1568
 AliAnalysisAlien.cxx:1569
 AliAnalysisAlien.cxx:1570
 AliAnalysisAlien.cxx:1571
 AliAnalysisAlien.cxx:1572
 AliAnalysisAlien.cxx:1573
 AliAnalysisAlien.cxx:1574
 AliAnalysisAlien.cxx:1575
 AliAnalysisAlien.cxx:1576
 AliAnalysisAlien.cxx:1577
 AliAnalysisAlien.cxx:1578
 AliAnalysisAlien.cxx:1579
 AliAnalysisAlien.cxx:1580
 AliAnalysisAlien.cxx:1581
 AliAnalysisAlien.cxx:1582
 AliAnalysisAlien.cxx:1583
 AliAnalysisAlien.cxx:1584
 AliAnalysisAlien.cxx:1585
 AliAnalysisAlien.cxx:1586
 AliAnalysisAlien.cxx:1587
 AliAnalysisAlien.cxx:1588
 AliAnalysisAlien.cxx:1589
 AliAnalysisAlien.cxx:1590
 AliAnalysisAlien.cxx:1591
 AliAnalysisAlien.cxx:1592
 AliAnalysisAlien.cxx:1593
 AliAnalysisAlien.cxx:1594
 AliAnalysisAlien.cxx:1595
 AliAnalysisAlien.cxx:1596
 AliAnalysisAlien.cxx:1597
 AliAnalysisAlien.cxx:1598
 AliAnalysisAlien.cxx:1599
 AliAnalysisAlien.cxx:1600
 AliAnalysisAlien.cxx:1601
 AliAnalysisAlien.cxx:1602
 AliAnalysisAlien.cxx:1603
 AliAnalysisAlien.cxx:1604
 AliAnalysisAlien.cxx:1605
 AliAnalysisAlien.cxx:1606
 AliAnalysisAlien.cxx:1607
 AliAnalysisAlien.cxx:1608
 AliAnalysisAlien.cxx:1609
 AliAnalysisAlien.cxx:1610
 AliAnalysisAlien.cxx:1611
 AliAnalysisAlien.cxx:1612
 AliAnalysisAlien.cxx:1613
 AliAnalysisAlien.cxx:1614
 AliAnalysisAlien.cxx:1615
 AliAnalysisAlien.cxx:1616
 AliAnalysisAlien.cxx:1617
 AliAnalysisAlien.cxx:1618
 AliAnalysisAlien.cxx:1619
 AliAnalysisAlien.cxx:1620
 AliAnalysisAlien.cxx:1621
 AliAnalysisAlien.cxx:1622
 AliAnalysisAlien.cxx:1623
 AliAnalysisAlien.cxx:1624
 AliAnalysisAlien.cxx:1625
 AliAnalysisAlien.cxx:1626
 AliAnalysisAlien.cxx:1627
 AliAnalysisAlien.cxx:1628
 AliAnalysisAlien.cxx:1629
 AliAnalysisAlien.cxx:1630
 AliAnalysisAlien.cxx:1631
 AliAnalysisAlien.cxx:1632
 AliAnalysisAlien.cxx:1633
 AliAnalysisAlien.cxx:1634
 AliAnalysisAlien.cxx:1635
 AliAnalysisAlien.cxx:1636
 AliAnalysisAlien.cxx:1637
 AliAnalysisAlien.cxx:1638
 AliAnalysisAlien.cxx:1639
 AliAnalysisAlien.cxx:1640
 AliAnalysisAlien.cxx:1641
 AliAnalysisAlien.cxx:1642
 AliAnalysisAlien.cxx:1643
 AliAnalysisAlien.cxx:1644
 AliAnalysisAlien.cxx:1645
 AliAnalysisAlien.cxx:1646
 AliAnalysisAlien.cxx:1647
 AliAnalysisAlien.cxx:1648
 AliAnalysisAlien.cxx:1649
 AliAnalysisAlien.cxx:1650
 AliAnalysisAlien.cxx:1651
 AliAnalysisAlien.cxx:1652
 AliAnalysisAlien.cxx:1653
 AliAnalysisAlien.cxx:1654
 AliAnalysisAlien.cxx:1655
 AliAnalysisAlien.cxx:1656
 AliAnalysisAlien.cxx:1657
 AliAnalysisAlien.cxx:1658
 AliAnalysisAlien.cxx:1659
 AliAnalysisAlien.cxx:1660
 AliAnalysisAlien.cxx:1661
 AliAnalysisAlien.cxx:1662
 AliAnalysisAlien.cxx:1663
 AliAnalysisAlien.cxx:1664
 AliAnalysisAlien.cxx:1665
 AliAnalysisAlien.cxx:1666
 AliAnalysisAlien.cxx:1667
 AliAnalysisAlien.cxx:1668
 AliAnalysisAlien.cxx:1669
 AliAnalysisAlien.cxx:1670
 AliAnalysisAlien.cxx:1671
 AliAnalysisAlien.cxx:1672
 AliAnalysisAlien.cxx:1673
 AliAnalysisAlien.cxx:1674
 AliAnalysisAlien.cxx:1675
 AliAnalysisAlien.cxx:1676
 AliAnalysisAlien.cxx:1677
 AliAnalysisAlien.cxx:1678
 AliAnalysisAlien.cxx:1679
 AliAnalysisAlien.cxx:1680
 AliAnalysisAlien.cxx:1681
 AliAnalysisAlien.cxx:1682
 AliAnalysisAlien.cxx:1683
 AliAnalysisAlien.cxx:1684
 AliAnalysisAlien.cxx:1685
 AliAnalysisAlien.cxx:1686
 AliAnalysisAlien.cxx:1687
 AliAnalysisAlien.cxx:1688
 AliAnalysisAlien.cxx:1689
 AliAnalysisAlien.cxx:1690
 AliAnalysisAlien.cxx:1691
 AliAnalysisAlien.cxx:1692
 AliAnalysisAlien.cxx:1693
 AliAnalysisAlien.cxx:1694
 AliAnalysisAlien.cxx:1695
 AliAnalysisAlien.cxx:1696
 AliAnalysisAlien.cxx:1697
 AliAnalysisAlien.cxx:1698
 AliAnalysisAlien.cxx:1699
 AliAnalysisAlien.cxx:1700
 AliAnalysisAlien.cxx:1701
 AliAnalysisAlien.cxx:1702
 AliAnalysisAlien.cxx:1703
 AliAnalysisAlien.cxx:1704
 AliAnalysisAlien.cxx:1705
 AliAnalysisAlien.cxx:1706
 AliAnalysisAlien.cxx:1707
 AliAnalysisAlien.cxx:1708
 AliAnalysisAlien.cxx:1709
 AliAnalysisAlien.cxx:1710
 AliAnalysisAlien.cxx:1711
 AliAnalysisAlien.cxx:1712
 AliAnalysisAlien.cxx:1713
 AliAnalysisAlien.cxx:1714
 AliAnalysisAlien.cxx:1715
 AliAnalysisAlien.cxx:1716
 AliAnalysisAlien.cxx:1717
 AliAnalysisAlien.cxx:1718
 AliAnalysisAlien.cxx:1719
 AliAnalysisAlien.cxx:1720
 AliAnalysisAlien.cxx:1721
 AliAnalysisAlien.cxx:1722
 AliAnalysisAlien.cxx:1723
 AliAnalysisAlien.cxx:1724
 AliAnalysisAlien.cxx:1725
 AliAnalysisAlien.cxx:1726
 AliAnalysisAlien.cxx:1727
 AliAnalysisAlien.cxx:1728
 AliAnalysisAlien.cxx:1729
 AliAnalysisAlien.cxx:1730
 AliAnalysisAlien.cxx:1731
 AliAnalysisAlien.cxx:1732
 AliAnalysisAlien.cxx:1733
 AliAnalysisAlien.cxx:1734
 AliAnalysisAlien.cxx:1735
 AliAnalysisAlien.cxx:1736
 AliAnalysisAlien.cxx:1737
 AliAnalysisAlien.cxx:1738
 AliAnalysisAlien.cxx:1739
 AliAnalysisAlien.cxx:1740
 AliAnalysisAlien.cxx:1741
 AliAnalysisAlien.cxx:1742
 AliAnalysisAlien.cxx:1743
 AliAnalysisAlien.cxx:1744
 AliAnalysisAlien.cxx:1745
 AliAnalysisAlien.cxx:1746
 AliAnalysisAlien.cxx:1747
 AliAnalysisAlien.cxx:1748
 AliAnalysisAlien.cxx:1749
 AliAnalysisAlien.cxx:1750
 AliAnalysisAlien.cxx:1751
 AliAnalysisAlien.cxx:1752
 AliAnalysisAlien.cxx:1753
 AliAnalysisAlien.cxx:1754
 AliAnalysisAlien.cxx:1755
 AliAnalysisAlien.cxx:1756
 AliAnalysisAlien.cxx:1757
 AliAnalysisAlien.cxx:1758
 AliAnalysisAlien.cxx:1759
 AliAnalysisAlien.cxx:1760
 AliAnalysisAlien.cxx:1761
 AliAnalysisAlien.cxx:1762
 AliAnalysisAlien.cxx:1763
 AliAnalysisAlien.cxx:1764
 AliAnalysisAlien.cxx:1765
 AliAnalysisAlien.cxx:1766
 AliAnalysisAlien.cxx:1767
 AliAnalysisAlien.cxx:1768
 AliAnalysisAlien.cxx:1769
 AliAnalysisAlien.cxx:1770
 AliAnalysisAlien.cxx:1771
 AliAnalysisAlien.cxx:1772
 AliAnalysisAlien.cxx:1773
 AliAnalysisAlien.cxx:1774
 AliAnalysisAlien.cxx:1775
 AliAnalysisAlien.cxx:1776
 AliAnalysisAlien.cxx:1777
 AliAnalysisAlien.cxx:1778
 AliAnalysisAlien.cxx:1779
 AliAnalysisAlien.cxx:1780
 AliAnalysisAlien.cxx:1781
 AliAnalysisAlien.cxx:1782
 AliAnalysisAlien.cxx:1783
 AliAnalysisAlien.cxx:1784
 AliAnalysisAlien.cxx:1785
 AliAnalysisAlien.cxx:1786
 AliAnalysisAlien.cxx:1787
 AliAnalysisAlien.cxx:1788
 AliAnalysisAlien.cxx:1789
 AliAnalysisAlien.cxx:1790
 AliAnalysisAlien.cxx:1791
 AliAnalysisAlien.cxx:1792
 AliAnalysisAlien.cxx:1793
 AliAnalysisAlien.cxx:1794
 AliAnalysisAlien.cxx:1795
 AliAnalysisAlien.cxx:1796
 AliAnalysisAlien.cxx:1797
 AliAnalysisAlien.cxx:1798
 AliAnalysisAlien.cxx:1799
 AliAnalysisAlien.cxx:1800
 AliAnalysisAlien.cxx:1801
 AliAnalysisAlien.cxx:1802
 AliAnalysisAlien.cxx:1803
 AliAnalysisAlien.cxx:1804
 AliAnalysisAlien.cxx:1805
 AliAnalysisAlien.cxx:1806
 AliAnalysisAlien.cxx:1807
 AliAnalysisAlien.cxx:1808
 AliAnalysisAlien.cxx:1809
 AliAnalysisAlien.cxx:1810
 AliAnalysisAlien.cxx:1811
 AliAnalysisAlien.cxx:1812
 AliAnalysisAlien.cxx:1813
 AliAnalysisAlien.cxx:1814
 AliAnalysisAlien.cxx:1815
 AliAnalysisAlien.cxx:1816
 AliAnalysisAlien.cxx:1817
 AliAnalysisAlien.cxx:1818
 AliAnalysisAlien.cxx:1819
 AliAnalysisAlien.cxx:1820
 AliAnalysisAlien.cxx:1821
 AliAnalysisAlien.cxx:1822
 AliAnalysisAlien.cxx:1823
 AliAnalysisAlien.cxx:1824
 AliAnalysisAlien.cxx:1825
 AliAnalysisAlien.cxx:1826
 AliAnalysisAlien.cxx:1827
 AliAnalysisAlien.cxx:1828
 AliAnalysisAlien.cxx:1829
 AliAnalysisAlien.cxx:1830
 AliAnalysisAlien.cxx:1831
 AliAnalysisAlien.cxx:1832
 AliAnalysisAlien.cxx:1833
 AliAnalysisAlien.cxx:1834
 AliAnalysisAlien.cxx:1835
 AliAnalysisAlien.cxx:1836
 AliAnalysisAlien.cxx:1837
 AliAnalysisAlien.cxx:1838
 AliAnalysisAlien.cxx:1839
 AliAnalysisAlien.cxx:1840
 AliAnalysisAlien.cxx:1841
 AliAnalysisAlien.cxx:1842
 AliAnalysisAlien.cxx:1843
 AliAnalysisAlien.cxx:1844
 AliAnalysisAlien.cxx:1845
 AliAnalysisAlien.cxx:1846
 AliAnalysisAlien.cxx:1847
 AliAnalysisAlien.cxx:1848
 AliAnalysisAlien.cxx:1849
 AliAnalysisAlien.cxx:1850
 AliAnalysisAlien.cxx:1851
 AliAnalysisAlien.cxx:1852
 AliAnalysisAlien.cxx:1853
 AliAnalysisAlien.cxx:1854
 AliAnalysisAlien.cxx:1855
 AliAnalysisAlien.cxx:1856
 AliAnalysisAlien.cxx:1857
 AliAnalysisAlien.cxx:1858
 AliAnalysisAlien.cxx:1859
 AliAnalysisAlien.cxx:1860
 AliAnalysisAlien.cxx:1861
 AliAnalysisAlien.cxx:1862
 AliAnalysisAlien.cxx:1863
 AliAnalysisAlien.cxx:1864
 AliAnalysisAlien.cxx:1865
 AliAnalysisAlien.cxx:1866
 AliAnalysisAlien.cxx:1867
 AliAnalysisAlien.cxx:1868
 AliAnalysisAlien.cxx:1869
 AliAnalysisAlien.cxx:1870
 AliAnalysisAlien.cxx:1871
 AliAnalysisAlien.cxx:1872
 AliAnalysisAlien.cxx:1873
 AliAnalysisAlien.cxx:1874
 AliAnalysisAlien.cxx:1875
 AliAnalysisAlien.cxx:1876
 AliAnalysisAlien.cxx:1877
 AliAnalysisAlien.cxx:1878
 AliAnalysisAlien.cxx:1879
 AliAnalysisAlien.cxx:1880
 AliAnalysisAlien.cxx:1881
 AliAnalysisAlien.cxx:1882
 AliAnalysisAlien.cxx:1883
 AliAnalysisAlien.cxx:1884
 AliAnalysisAlien.cxx:1885
 AliAnalysisAlien.cxx:1886
 AliAnalysisAlien.cxx:1887
 AliAnalysisAlien.cxx:1888
 AliAnalysisAlien.cxx:1889
 AliAnalysisAlien.cxx:1890
 AliAnalysisAlien.cxx:1891
 AliAnalysisAlien.cxx:1892
 AliAnalysisAlien.cxx:1893
 AliAnalysisAlien.cxx:1894
 AliAnalysisAlien.cxx:1895
 AliAnalysisAlien.cxx:1896
 AliAnalysisAlien.cxx:1897
 AliAnalysisAlien.cxx:1898
 AliAnalysisAlien.cxx:1899
 AliAnalysisAlien.cxx:1900
 AliAnalysisAlien.cxx:1901
 AliAnalysisAlien.cxx:1902
 AliAnalysisAlien.cxx:1903
 AliAnalysisAlien.cxx:1904
 AliAnalysisAlien.cxx:1905
 AliAnalysisAlien.cxx:1906
 AliAnalysisAlien.cxx:1907
 AliAnalysisAlien.cxx:1908
 AliAnalysisAlien.cxx:1909
 AliAnalysisAlien.cxx:1910
 AliAnalysisAlien.cxx:1911
 AliAnalysisAlien.cxx:1912
 AliAnalysisAlien.cxx:1913
 AliAnalysisAlien.cxx:1914
 AliAnalysisAlien.cxx:1915
 AliAnalysisAlien.cxx:1916
 AliAnalysisAlien.cxx:1917
 AliAnalysisAlien.cxx:1918
 AliAnalysisAlien.cxx:1919
 AliAnalysisAlien.cxx:1920
 AliAnalysisAlien.cxx:1921
 AliAnalysisAlien.cxx:1922
 AliAnalysisAlien.cxx:1923
 AliAnalysisAlien.cxx:1924
 AliAnalysisAlien.cxx:1925
 AliAnalysisAlien.cxx:1926
 AliAnalysisAlien.cxx:1927
 AliAnalysisAlien.cxx:1928
 AliAnalysisAlien.cxx:1929
 AliAnalysisAlien.cxx:1930
 AliAnalysisAlien.cxx:1931
 AliAnalysisAlien.cxx:1932
 AliAnalysisAlien.cxx:1933
 AliAnalysisAlien.cxx:1934
 AliAnalysisAlien.cxx:1935
 AliAnalysisAlien.cxx:1936
 AliAnalysisAlien.cxx:1937
 AliAnalysisAlien.cxx:1938
 AliAnalysisAlien.cxx:1939
 AliAnalysisAlien.cxx:1940
 AliAnalysisAlien.cxx:1941
 AliAnalysisAlien.cxx:1942
 AliAnalysisAlien.cxx:1943
 AliAnalysisAlien.cxx:1944
 AliAnalysisAlien.cxx:1945
 AliAnalysisAlien.cxx:1946
 AliAnalysisAlien.cxx:1947
 AliAnalysisAlien.cxx:1948
 AliAnalysisAlien.cxx:1949
 AliAnalysisAlien.cxx:1950
 AliAnalysisAlien.cxx:1951
 AliAnalysisAlien.cxx:1952
 AliAnalysisAlien.cxx:1953
 AliAnalysisAlien.cxx:1954
 AliAnalysisAlien.cxx:1955
 AliAnalysisAlien.cxx:1956
 AliAnalysisAlien.cxx:1957
 AliAnalysisAlien.cxx:1958
 AliAnalysisAlien.cxx:1959
 AliAnalysisAlien.cxx:1960
 AliAnalysisAlien.cxx:1961
 AliAnalysisAlien.cxx:1962
 AliAnalysisAlien.cxx:1963
 AliAnalysisAlien.cxx:1964
 AliAnalysisAlien.cxx:1965
 AliAnalysisAlien.cxx:1966
 AliAnalysisAlien.cxx:1967
 AliAnalysisAlien.cxx:1968
 AliAnalysisAlien.cxx:1969
 AliAnalysisAlien.cxx:1970
 AliAnalysisAlien.cxx:1971
 AliAnalysisAlien.cxx:1972
 AliAnalysisAlien.cxx:1973
 AliAnalysisAlien.cxx:1974
 AliAnalysisAlien.cxx:1975
 AliAnalysisAlien.cxx:1976
 AliAnalysisAlien.cxx:1977
 AliAnalysisAlien.cxx:1978
 AliAnalysisAlien.cxx:1979
 AliAnalysisAlien.cxx:1980
 AliAnalysisAlien.cxx:1981
 AliAnalysisAlien.cxx:1982
 AliAnalysisAlien.cxx:1983
 AliAnalysisAlien.cxx:1984
 AliAnalysisAlien.cxx:1985
 AliAnalysisAlien.cxx:1986
 AliAnalysisAlien.cxx:1987
 AliAnalysisAlien.cxx:1988
 AliAnalysisAlien.cxx:1989
 AliAnalysisAlien.cxx:1990
 AliAnalysisAlien.cxx:1991
 AliAnalysisAlien.cxx:1992
 AliAnalysisAlien.cxx:1993
 AliAnalysisAlien.cxx:1994
 AliAnalysisAlien.cxx:1995
 AliAnalysisAlien.cxx:1996
 AliAnalysisAlien.cxx:1997
 AliAnalysisAlien.cxx:1998
 AliAnalysisAlien.cxx:1999
 AliAnalysisAlien.cxx:2000
 AliAnalysisAlien.cxx:2001
 AliAnalysisAlien.cxx:2002
 AliAnalysisAlien.cxx:2003
 AliAnalysisAlien.cxx:2004
 AliAnalysisAlien.cxx:2005
 AliAnalysisAlien.cxx:2006
 AliAnalysisAlien.cxx:2007
 AliAnalysisAlien.cxx:2008
 AliAnalysisAlien.cxx:2009
 AliAnalysisAlien.cxx:2010
 AliAnalysisAlien.cxx:2011
 AliAnalysisAlien.cxx:2012
 AliAnalysisAlien.cxx:2013
 AliAnalysisAlien.cxx:2014
 AliAnalysisAlien.cxx:2015
 AliAnalysisAlien.cxx:2016
 AliAnalysisAlien.cxx:2017
 AliAnalysisAlien.cxx:2018
 AliAnalysisAlien.cxx:2019
 AliAnalysisAlien.cxx:2020
 AliAnalysisAlien.cxx:2021
 AliAnalysisAlien.cxx:2022
 AliAnalysisAlien.cxx:2023
 AliAnalysisAlien.cxx:2024
 AliAnalysisAlien.cxx:2025
 AliAnalysisAlien.cxx:2026
 AliAnalysisAlien.cxx:2027
 AliAnalysisAlien.cxx:2028
 AliAnalysisAlien.cxx:2029
 AliAnalysisAlien.cxx:2030
 AliAnalysisAlien.cxx:2031
 AliAnalysisAlien.cxx:2032
 AliAnalysisAlien.cxx:2033
 AliAnalysisAlien.cxx:2034
 AliAnalysisAlien.cxx:2035
 AliAnalysisAlien.cxx:2036
 AliAnalysisAlien.cxx:2037
 AliAnalysisAlien.cxx:2038
 AliAnalysisAlien.cxx:2039
 AliAnalysisAlien.cxx:2040
 AliAnalysisAlien.cxx:2041
 AliAnalysisAlien.cxx:2042
 AliAnalysisAlien.cxx:2043
 AliAnalysisAlien.cxx:2044
 AliAnalysisAlien.cxx:2045
 AliAnalysisAlien.cxx:2046
 AliAnalysisAlien.cxx:2047
 AliAnalysisAlien.cxx:2048
 AliAnalysisAlien.cxx:2049
 AliAnalysisAlien.cxx:2050
 AliAnalysisAlien.cxx:2051
 AliAnalysisAlien.cxx:2052
 AliAnalysisAlien.cxx:2053
 AliAnalysisAlien.cxx:2054
 AliAnalysisAlien.cxx:2055
 AliAnalysisAlien.cxx:2056
 AliAnalysisAlien.cxx:2057
 AliAnalysisAlien.cxx:2058
 AliAnalysisAlien.cxx:2059
 AliAnalysisAlien.cxx:2060
 AliAnalysisAlien.cxx:2061
 AliAnalysisAlien.cxx:2062
 AliAnalysisAlien.cxx:2063
 AliAnalysisAlien.cxx:2064
 AliAnalysisAlien.cxx:2065
 AliAnalysisAlien.cxx:2066
 AliAnalysisAlien.cxx:2067
 AliAnalysisAlien.cxx:2068
 AliAnalysisAlien.cxx:2069
 AliAnalysisAlien.cxx:2070
 AliAnalysisAlien.cxx:2071
 AliAnalysisAlien.cxx:2072
 AliAnalysisAlien.cxx:2073
 AliAnalysisAlien.cxx:2074
 AliAnalysisAlien.cxx:2075
 AliAnalysisAlien.cxx:2076
 AliAnalysisAlien.cxx:2077
 AliAnalysisAlien.cxx:2078
 AliAnalysisAlien.cxx:2079
 AliAnalysisAlien.cxx:2080
 AliAnalysisAlien.cxx:2081
 AliAnalysisAlien.cxx:2082
 AliAnalysisAlien.cxx:2083
 AliAnalysisAlien.cxx:2084
 AliAnalysisAlien.cxx:2085
 AliAnalysisAlien.cxx:2086
 AliAnalysisAlien.cxx:2087
 AliAnalysisAlien.cxx:2088
 AliAnalysisAlien.cxx:2089
 AliAnalysisAlien.cxx:2090
 AliAnalysisAlien.cxx:2091
 AliAnalysisAlien.cxx:2092
 AliAnalysisAlien.cxx:2093
 AliAnalysisAlien.cxx:2094
 AliAnalysisAlien.cxx:2095
 AliAnalysisAlien.cxx:2096
 AliAnalysisAlien.cxx:2097
 AliAnalysisAlien.cxx:2098
 AliAnalysisAlien.cxx:2099
 AliAnalysisAlien.cxx:2100
 AliAnalysisAlien.cxx:2101
 AliAnalysisAlien.cxx:2102
 AliAnalysisAlien.cxx:2103
 AliAnalysisAlien.cxx:2104
 AliAnalysisAlien.cxx:2105
 AliAnalysisAlien.cxx:2106
 AliAnalysisAlien.cxx:2107
 AliAnalysisAlien.cxx:2108
 AliAnalysisAlien.cxx:2109
 AliAnalysisAlien.cxx:2110
 AliAnalysisAlien.cxx:2111
 AliAnalysisAlien.cxx:2112
 AliAnalysisAlien.cxx:2113
 AliAnalysisAlien.cxx:2114
 AliAnalysisAlien.cxx:2115
 AliAnalysisAlien.cxx:2116
 AliAnalysisAlien.cxx:2117
 AliAnalysisAlien.cxx:2118
 AliAnalysisAlien.cxx:2119
 AliAnalysisAlien.cxx:2120
 AliAnalysisAlien.cxx:2121
 AliAnalysisAlien.cxx:2122
 AliAnalysisAlien.cxx:2123
 AliAnalysisAlien.cxx:2124
 AliAnalysisAlien.cxx:2125
 AliAnalysisAlien.cxx:2126
 AliAnalysisAlien.cxx:2127
 AliAnalysisAlien.cxx:2128
 AliAnalysisAlien.cxx:2129
 AliAnalysisAlien.cxx:2130
 AliAnalysisAlien.cxx:2131
 AliAnalysisAlien.cxx:2132
 AliAnalysisAlien.cxx:2133
 AliAnalysisAlien.cxx:2134
 AliAnalysisAlien.cxx:2135
 AliAnalysisAlien.cxx:2136
 AliAnalysisAlien.cxx:2137
 AliAnalysisAlien.cxx:2138
 AliAnalysisAlien.cxx:2139
 AliAnalysisAlien.cxx:2140
 AliAnalysisAlien.cxx:2141
 AliAnalysisAlien.cxx:2142
 AliAnalysisAlien.cxx:2143
 AliAnalysisAlien.cxx:2144
 AliAnalysisAlien.cxx:2145
 AliAnalysisAlien.cxx:2146
 AliAnalysisAlien.cxx:2147
 AliAnalysisAlien.cxx:2148
 AliAnalysisAlien.cxx:2149
 AliAnalysisAlien.cxx:2150
 AliAnalysisAlien.cxx:2151
 AliAnalysisAlien.cxx:2152
 AliAnalysisAlien.cxx:2153
 AliAnalysisAlien.cxx:2154
 AliAnalysisAlien.cxx:2155
 AliAnalysisAlien.cxx:2156
 AliAnalysisAlien.cxx:2157
 AliAnalysisAlien.cxx:2158
 AliAnalysisAlien.cxx:2159
 AliAnalysisAlien.cxx:2160
 AliAnalysisAlien.cxx:2161
 AliAnalysisAlien.cxx:2162
 AliAnalysisAlien.cxx:2163
 AliAnalysisAlien.cxx:2164
 AliAnalysisAlien.cxx:2165
 AliAnalysisAlien.cxx:2166
 AliAnalysisAlien.cxx:2167
 AliAnalysisAlien.cxx:2168
 AliAnalysisAlien.cxx:2169
 AliAnalysisAlien.cxx:2170
 AliAnalysisAlien.cxx:2171
 AliAnalysisAlien.cxx:2172
 AliAnalysisAlien.cxx:2173
 AliAnalysisAlien.cxx:2174
 AliAnalysisAlien.cxx:2175
 AliAnalysisAlien.cxx:2176
 AliAnalysisAlien.cxx:2177
 AliAnalysisAlien.cxx:2178
 AliAnalysisAlien.cxx:2179
 AliAnalysisAlien.cxx:2180
 AliAnalysisAlien.cxx:2181
 AliAnalysisAlien.cxx:2182
 AliAnalysisAlien.cxx:2183
 AliAnalysisAlien.cxx:2184
 AliAnalysisAlien.cxx:2185
 AliAnalysisAlien.cxx:2186
 AliAnalysisAlien.cxx:2187
 AliAnalysisAlien.cxx:2188
 AliAnalysisAlien.cxx:2189
 AliAnalysisAlien.cxx:2190
 AliAnalysisAlien.cxx:2191
 AliAnalysisAlien.cxx:2192
 AliAnalysisAlien.cxx:2193
 AliAnalysisAlien.cxx:2194
 AliAnalysisAlien.cxx:2195
 AliAnalysisAlien.cxx:2196
 AliAnalysisAlien.cxx:2197
 AliAnalysisAlien.cxx:2198
 AliAnalysisAlien.cxx:2199
 AliAnalysisAlien.cxx:2200
 AliAnalysisAlien.cxx:2201
 AliAnalysisAlien.cxx:2202
 AliAnalysisAlien.cxx:2203
 AliAnalysisAlien.cxx:2204
 AliAnalysisAlien.cxx:2205
 AliAnalysisAlien.cxx:2206
 AliAnalysisAlien.cxx:2207
 AliAnalysisAlien.cxx:2208
 AliAnalysisAlien.cxx:2209
 AliAnalysisAlien.cxx:2210
 AliAnalysisAlien.cxx:2211
 AliAnalysisAlien.cxx:2212
 AliAnalysisAlien.cxx:2213
 AliAnalysisAlien.cxx:2214
 AliAnalysisAlien.cxx:2215
 AliAnalysisAlien.cxx:2216
 AliAnalysisAlien.cxx:2217
 AliAnalysisAlien.cxx:2218
 AliAnalysisAlien.cxx:2219
 AliAnalysisAlien.cxx:2220
 AliAnalysisAlien.cxx:2221
 AliAnalysisAlien.cxx:2222
 AliAnalysisAlien.cxx:2223
 AliAnalysisAlien.cxx:2224
 AliAnalysisAlien.cxx:2225
 AliAnalysisAlien.cxx:2226
 AliAnalysisAlien.cxx:2227
 AliAnalysisAlien.cxx:2228
 AliAnalysisAlien.cxx:2229
 AliAnalysisAlien.cxx:2230
 AliAnalysisAlien.cxx:2231
 AliAnalysisAlien.cxx:2232
 AliAnalysisAlien.cxx:2233
 AliAnalysisAlien.cxx:2234
 AliAnalysisAlien.cxx:2235
 AliAnalysisAlien.cxx:2236
 AliAnalysisAlien.cxx:2237
 AliAnalysisAlien.cxx:2238
 AliAnalysisAlien.cxx:2239
 AliAnalysisAlien.cxx:2240
 AliAnalysisAlien.cxx:2241
 AliAnalysisAlien.cxx:2242
 AliAnalysisAlien.cxx:2243
 AliAnalysisAlien.cxx:2244
 AliAnalysisAlien.cxx:2245
 AliAnalysisAlien.cxx:2246
 AliAnalysisAlien.cxx:2247
 AliAnalysisAlien.cxx:2248
 AliAnalysisAlien.cxx:2249
 AliAnalysisAlien.cxx:2250
 AliAnalysisAlien.cxx:2251
 AliAnalysisAlien.cxx:2252
 AliAnalysisAlien.cxx:2253
 AliAnalysisAlien.cxx:2254
 AliAnalysisAlien.cxx:2255
 AliAnalysisAlien.cxx:2256
 AliAnalysisAlien.cxx:2257
 AliAnalysisAlien.cxx:2258
 AliAnalysisAlien.cxx:2259
 AliAnalysisAlien.cxx:2260
 AliAnalysisAlien.cxx:2261
 AliAnalysisAlien.cxx:2262
 AliAnalysisAlien.cxx:2263
 AliAnalysisAlien.cxx:2264
 AliAnalysisAlien.cxx:2265
 AliAnalysisAlien.cxx:2266
 AliAnalysisAlien.cxx:2267
 AliAnalysisAlien.cxx:2268
 AliAnalysisAlien.cxx:2269
 AliAnalysisAlien.cxx:2270
 AliAnalysisAlien.cxx:2271
 AliAnalysisAlien.cxx:2272
 AliAnalysisAlien.cxx:2273
 AliAnalysisAlien.cxx:2274
 AliAnalysisAlien.cxx:2275
 AliAnalysisAlien.cxx:2276
 AliAnalysisAlien.cxx:2277
 AliAnalysisAlien.cxx:2278
 AliAnalysisAlien.cxx:2279
 AliAnalysisAlien.cxx:2280
 AliAnalysisAlien.cxx:2281
 AliAnalysisAlien.cxx:2282
 AliAnalysisAlien.cxx:2283
 AliAnalysisAlien.cxx:2284
 AliAnalysisAlien.cxx:2285
 AliAnalysisAlien.cxx:2286
 AliAnalysisAlien.cxx:2287
 AliAnalysisAlien.cxx:2288
 AliAnalysisAlien.cxx:2289
 AliAnalysisAlien.cxx:2290
 AliAnalysisAlien.cxx:2291
 AliAnalysisAlien.cxx:2292
 AliAnalysisAlien.cxx:2293
 AliAnalysisAlien.cxx:2294
 AliAnalysisAlien.cxx:2295
 AliAnalysisAlien.cxx:2296
 AliAnalysisAlien.cxx:2297
 AliAnalysisAlien.cxx:2298
 AliAnalysisAlien.cxx:2299
 AliAnalysisAlien.cxx:2300
 AliAnalysisAlien.cxx:2301
 AliAnalysisAlien.cxx:2302
 AliAnalysisAlien.cxx:2303
 AliAnalysisAlien.cxx:2304
 AliAnalysisAlien.cxx:2305
 AliAnalysisAlien.cxx:2306
 AliAnalysisAlien.cxx:2307
 AliAnalysisAlien.cxx:2308
 AliAnalysisAlien.cxx:2309
 AliAnalysisAlien.cxx:2310
 AliAnalysisAlien.cxx:2311
 AliAnalysisAlien.cxx:2312
 AliAnalysisAlien.cxx:2313
 AliAnalysisAlien.cxx:2314
 AliAnalysisAlien.cxx:2315
 AliAnalysisAlien.cxx:2316
 AliAnalysisAlien.cxx:2317
 AliAnalysisAlien.cxx:2318
 AliAnalysisAlien.cxx:2319
 AliAnalysisAlien.cxx:2320
 AliAnalysisAlien.cxx:2321
 AliAnalysisAlien.cxx:2322
 AliAnalysisAlien.cxx:2323
 AliAnalysisAlien.cxx:2324
 AliAnalysisAlien.cxx:2325
 AliAnalysisAlien.cxx:2326
 AliAnalysisAlien.cxx:2327
 AliAnalysisAlien.cxx:2328
 AliAnalysisAlien.cxx:2329
 AliAnalysisAlien.cxx:2330
 AliAnalysisAlien.cxx:2331
 AliAnalysisAlien.cxx:2332
 AliAnalysisAlien.cxx:2333
 AliAnalysisAlien.cxx:2334
 AliAnalysisAlien.cxx:2335
 AliAnalysisAlien.cxx:2336
 AliAnalysisAlien.cxx:2337
 AliAnalysisAlien.cxx:2338
 AliAnalysisAlien.cxx:2339
 AliAnalysisAlien.cxx:2340
 AliAnalysisAlien.cxx:2341
 AliAnalysisAlien.cxx:2342
 AliAnalysisAlien.cxx:2343
 AliAnalysisAlien.cxx:2344
 AliAnalysisAlien.cxx:2345
 AliAnalysisAlien.cxx:2346
 AliAnalysisAlien.cxx:2347
 AliAnalysisAlien.cxx:2348
 AliAnalysisAlien.cxx:2349
 AliAnalysisAlien.cxx:2350
 AliAnalysisAlien.cxx:2351
 AliAnalysisAlien.cxx:2352
 AliAnalysisAlien.cxx:2353
 AliAnalysisAlien.cxx:2354
 AliAnalysisAlien.cxx:2355
 AliAnalysisAlien.cxx:2356
 AliAnalysisAlien.cxx:2357
 AliAnalysisAlien.cxx:2358
 AliAnalysisAlien.cxx:2359
 AliAnalysisAlien.cxx:2360
 AliAnalysisAlien.cxx:2361
 AliAnalysisAlien.cxx:2362
 AliAnalysisAlien.cxx:2363
 AliAnalysisAlien.cxx:2364
 AliAnalysisAlien.cxx:2365
 AliAnalysisAlien.cxx:2366
 AliAnalysisAlien.cxx:2367
 AliAnalysisAlien.cxx:2368
 AliAnalysisAlien.cxx:2369
 AliAnalysisAlien.cxx:2370
 AliAnalysisAlien.cxx:2371
 AliAnalysisAlien.cxx:2372
 AliAnalysisAlien.cxx:2373
 AliAnalysisAlien.cxx:2374
 AliAnalysisAlien.cxx:2375
 AliAnalysisAlien.cxx:2376
 AliAnalysisAlien.cxx:2377
 AliAnalysisAlien.cxx:2378
 AliAnalysisAlien.cxx:2379
 AliAnalysisAlien.cxx:2380
 AliAnalysisAlien.cxx:2381
 AliAnalysisAlien.cxx:2382
 AliAnalysisAlien.cxx:2383
 AliAnalysisAlien.cxx:2384
 AliAnalysisAlien.cxx:2385
 AliAnalysisAlien.cxx:2386
 AliAnalysisAlien.cxx:2387
 AliAnalysisAlien.cxx:2388
 AliAnalysisAlien.cxx:2389
 AliAnalysisAlien.cxx:2390
 AliAnalysisAlien.cxx:2391
 AliAnalysisAlien.cxx:2392
 AliAnalysisAlien.cxx:2393
 AliAnalysisAlien.cxx:2394
 AliAnalysisAlien.cxx:2395
 AliAnalysisAlien.cxx:2396
 AliAnalysisAlien.cxx:2397
 AliAnalysisAlien.cxx:2398
 AliAnalysisAlien.cxx:2399
 AliAnalysisAlien.cxx:2400
 AliAnalysisAlien.cxx:2401
 AliAnalysisAlien.cxx:2402
 AliAnalysisAlien.cxx:2403
 AliAnalysisAlien.cxx:2404
 AliAnalysisAlien.cxx:2405
 AliAnalysisAlien.cxx:2406
 AliAnalysisAlien.cxx:2407
 AliAnalysisAlien.cxx:2408
 AliAnalysisAlien.cxx:2409
 AliAnalysisAlien.cxx:2410
 AliAnalysisAlien.cxx:2411
 AliAnalysisAlien.cxx:2412
 AliAnalysisAlien.cxx:2413
 AliAnalysisAlien.cxx:2414
 AliAnalysisAlien.cxx:2415
 AliAnalysisAlien.cxx:2416
 AliAnalysisAlien.cxx:2417
 AliAnalysisAlien.cxx:2418
 AliAnalysisAlien.cxx:2419
 AliAnalysisAlien.cxx:2420
 AliAnalysisAlien.cxx:2421
 AliAnalysisAlien.cxx:2422
 AliAnalysisAlien.cxx:2423
 AliAnalysisAlien.cxx:2424
 AliAnalysisAlien.cxx:2425
 AliAnalysisAlien.cxx:2426
 AliAnalysisAlien.cxx:2427
 AliAnalysisAlien.cxx:2428
 AliAnalysisAlien.cxx:2429
 AliAnalysisAlien.cxx:2430
 AliAnalysisAlien.cxx:2431
 AliAnalysisAlien.cxx:2432
 AliAnalysisAlien.cxx:2433
 AliAnalysisAlien.cxx:2434
 AliAnalysisAlien.cxx:2435
 AliAnalysisAlien.cxx:2436
 AliAnalysisAlien.cxx:2437
 AliAnalysisAlien.cxx:2438
 AliAnalysisAlien.cxx:2439
 AliAnalysisAlien.cxx:2440
 AliAnalysisAlien.cxx:2441
 AliAnalysisAlien.cxx:2442
 AliAnalysisAlien.cxx:2443
 AliAnalysisAlien.cxx:2444
 AliAnalysisAlien.cxx:2445
 AliAnalysisAlien.cxx:2446
 AliAnalysisAlien.cxx:2447
 AliAnalysisAlien.cxx:2448
 AliAnalysisAlien.cxx:2449
 AliAnalysisAlien.cxx:2450
 AliAnalysisAlien.cxx:2451
 AliAnalysisAlien.cxx:2452
 AliAnalysisAlien.cxx:2453
 AliAnalysisAlien.cxx:2454
 AliAnalysisAlien.cxx:2455
 AliAnalysisAlien.cxx:2456
 AliAnalysisAlien.cxx:2457
 AliAnalysisAlien.cxx:2458
 AliAnalysisAlien.cxx:2459
 AliAnalysisAlien.cxx:2460
 AliAnalysisAlien.cxx:2461
 AliAnalysisAlien.cxx:2462
 AliAnalysisAlien.cxx:2463
 AliAnalysisAlien.cxx:2464
 AliAnalysisAlien.cxx:2465
 AliAnalysisAlien.cxx:2466
 AliAnalysisAlien.cxx:2467
 AliAnalysisAlien.cxx:2468
 AliAnalysisAlien.cxx:2469
 AliAnalysisAlien.cxx:2470
 AliAnalysisAlien.cxx:2471
 AliAnalysisAlien.cxx:2472
 AliAnalysisAlien.cxx:2473
 AliAnalysisAlien.cxx:2474
 AliAnalysisAlien.cxx:2475
 AliAnalysisAlien.cxx:2476
 AliAnalysisAlien.cxx:2477
 AliAnalysisAlien.cxx:2478
 AliAnalysisAlien.cxx:2479
 AliAnalysisAlien.cxx:2480
 AliAnalysisAlien.cxx:2481
 AliAnalysisAlien.cxx:2482
 AliAnalysisAlien.cxx:2483
 AliAnalysisAlien.cxx:2484
 AliAnalysisAlien.cxx:2485
 AliAnalysisAlien.cxx:2486
 AliAnalysisAlien.cxx:2487
 AliAnalysisAlien.cxx:2488
 AliAnalysisAlien.cxx:2489
 AliAnalysisAlien.cxx:2490
 AliAnalysisAlien.cxx:2491
 AliAnalysisAlien.cxx:2492
 AliAnalysisAlien.cxx:2493
 AliAnalysisAlien.cxx:2494
 AliAnalysisAlien.cxx:2495
 AliAnalysisAlien.cxx:2496
 AliAnalysisAlien.cxx:2497
 AliAnalysisAlien.cxx:2498
 AliAnalysisAlien.cxx:2499
 AliAnalysisAlien.cxx:2500
 AliAnalysisAlien.cxx:2501
 AliAnalysisAlien.cxx:2502
 AliAnalysisAlien.cxx:2503
 AliAnalysisAlien.cxx:2504
 AliAnalysisAlien.cxx:2505
 AliAnalysisAlien.cxx:2506
 AliAnalysisAlien.cxx:2507
 AliAnalysisAlien.cxx:2508
 AliAnalysisAlien.cxx:2509
 AliAnalysisAlien.cxx:2510
 AliAnalysisAlien.cxx:2511
 AliAnalysisAlien.cxx:2512
 AliAnalysisAlien.cxx:2513
 AliAnalysisAlien.cxx:2514
 AliAnalysisAlien.cxx:2515
 AliAnalysisAlien.cxx:2516
 AliAnalysisAlien.cxx:2517
 AliAnalysisAlien.cxx:2518
 AliAnalysisAlien.cxx:2519
 AliAnalysisAlien.cxx:2520
 AliAnalysisAlien.cxx:2521
 AliAnalysisAlien.cxx:2522
 AliAnalysisAlien.cxx:2523
 AliAnalysisAlien.cxx:2524
 AliAnalysisAlien.cxx:2525
 AliAnalysisAlien.cxx:2526
 AliAnalysisAlien.cxx:2527
 AliAnalysisAlien.cxx:2528
 AliAnalysisAlien.cxx:2529
 AliAnalysisAlien.cxx:2530
 AliAnalysisAlien.cxx:2531
 AliAnalysisAlien.cxx:2532
 AliAnalysisAlien.cxx:2533
 AliAnalysisAlien.cxx:2534
 AliAnalysisAlien.cxx:2535
 AliAnalysisAlien.cxx:2536
 AliAnalysisAlien.cxx:2537
 AliAnalysisAlien.cxx:2538
 AliAnalysisAlien.cxx:2539
 AliAnalysisAlien.cxx:2540
 AliAnalysisAlien.cxx:2541
 AliAnalysisAlien.cxx:2542
 AliAnalysisAlien.cxx:2543
 AliAnalysisAlien.cxx:2544
 AliAnalysisAlien.cxx:2545
 AliAnalysisAlien.cxx:2546
 AliAnalysisAlien.cxx:2547
 AliAnalysisAlien.cxx:2548
 AliAnalysisAlien.cxx:2549
 AliAnalysisAlien.cxx:2550
 AliAnalysisAlien.cxx:2551
 AliAnalysisAlien.cxx:2552
 AliAnalysisAlien.cxx:2553
 AliAnalysisAlien.cxx:2554
 AliAnalysisAlien.cxx:2555
 AliAnalysisAlien.cxx:2556
 AliAnalysisAlien.cxx:2557
 AliAnalysisAlien.cxx:2558
 AliAnalysisAlien.cxx:2559
 AliAnalysisAlien.cxx:2560
 AliAnalysisAlien.cxx:2561
 AliAnalysisAlien.cxx:2562
 AliAnalysisAlien.cxx:2563
 AliAnalysisAlien.cxx:2564
 AliAnalysisAlien.cxx:2565
 AliAnalysisAlien.cxx:2566
 AliAnalysisAlien.cxx:2567
 AliAnalysisAlien.cxx:2568
 AliAnalysisAlien.cxx:2569
 AliAnalysisAlien.cxx:2570
 AliAnalysisAlien.cxx:2571
 AliAnalysisAlien.cxx:2572
 AliAnalysisAlien.cxx:2573
 AliAnalysisAlien.cxx:2574
 AliAnalysisAlien.cxx:2575
 AliAnalysisAlien.cxx:2576
 AliAnalysisAlien.cxx:2577
 AliAnalysisAlien.cxx:2578
 AliAnalysisAlien.cxx:2579
 AliAnalysisAlien.cxx:2580
 AliAnalysisAlien.cxx:2581
 AliAnalysisAlien.cxx:2582
 AliAnalysisAlien.cxx:2583
 AliAnalysisAlien.cxx:2584
 AliAnalysisAlien.cxx:2585
 AliAnalysisAlien.cxx:2586
 AliAnalysisAlien.cxx:2587
 AliAnalysisAlien.cxx:2588
 AliAnalysisAlien.cxx:2589
 AliAnalysisAlien.cxx:2590
 AliAnalysisAlien.cxx:2591
 AliAnalysisAlien.cxx:2592
 AliAnalysisAlien.cxx:2593
 AliAnalysisAlien.cxx:2594
 AliAnalysisAlien.cxx:2595
 AliAnalysisAlien.cxx:2596
 AliAnalysisAlien.cxx:2597
 AliAnalysisAlien.cxx:2598
 AliAnalysisAlien.cxx:2599
 AliAnalysisAlien.cxx:2600
 AliAnalysisAlien.cxx:2601
 AliAnalysisAlien.cxx:2602
 AliAnalysisAlien.cxx:2603
 AliAnalysisAlien.cxx:2604
 AliAnalysisAlien.cxx:2605
 AliAnalysisAlien.cxx:2606
 AliAnalysisAlien.cxx:2607
 AliAnalysisAlien.cxx:2608
 AliAnalysisAlien.cxx:2609
 AliAnalysisAlien.cxx:2610
 AliAnalysisAlien.cxx:2611
 AliAnalysisAlien.cxx:2612
 AliAnalysisAlien.cxx:2613
 AliAnalysisAlien.cxx:2614
 AliAnalysisAlien.cxx:2615
 AliAnalysisAlien.cxx:2616
 AliAnalysisAlien.cxx:2617
 AliAnalysisAlien.cxx:2618
 AliAnalysisAlien.cxx:2619
 AliAnalysisAlien.cxx:2620
 AliAnalysisAlien.cxx:2621
 AliAnalysisAlien.cxx:2622
 AliAnalysisAlien.cxx:2623
 AliAnalysisAlien.cxx:2624
 AliAnalysisAlien.cxx:2625
 AliAnalysisAlien.cxx:2626
 AliAnalysisAlien.cxx:2627
 AliAnalysisAlien.cxx:2628
 AliAnalysisAlien.cxx:2629
 AliAnalysisAlien.cxx:2630
 AliAnalysisAlien.cxx:2631
 AliAnalysisAlien.cxx:2632
 AliAnalysisAlien.cxx:2633
 AliAnalysisAlien.cxx:2634
 AliAnalysisAlien.cxx:2635
 AliAnalysisAlien.cxx:2636
 AliAnalysisAlien.cxx:2637
 AliAnalysisAlien.cxx:2638
 AliAnalysisAlien.cxx:2639
 AliAnalysisAlien.cxx:2640
 AliAnalysisAlien.cxx:2641
 AliAnalysisAlien.cxx:2642
 AliAnalysisAlien.cxx:2643
 AliAnalysisAlien.cxx:2644
 AliAnalysisAlien.cxx:2645
 AliAnalysisAlien.cxx:2646
 AliAnalysisAlien.cxx:2647
 AliAnalysisAlien.cxx:2648
 AliAnalysisAlien.cxx:2649
 AliAnalysisAlien.cxx:2650
 AliAnalysisAlien.cxx:2651
 AliAnalysisAlien.cxx:2652
 AliAnalysisAlien.cxx:2653
 AliAnalysisAlien.cxx:2654
 AliAnalysisAlien.cxx:2655
 AliAnalysisAlien.cxx:2656
 AliAnalysisAlien.cxx:2657
 AliAnalysisAlien.cxx:2658
 AliAnalysisAlien.cxx:2659
 AliAnalysisAlien.cxx:2660
 AliAnalysisAlien.cxx:2661
 AliAnalysisAlien.cxx:2662
 AliAnalysisAlien.cxx:2663
 AliAnalysisAlien.cxx:2664
 AliAnalysisAlien.cxx:2665
 AliAnalysisAlien.cxx:2666
 AliAnalysisAlien.cxx:2667
 AliAnalysisAlien.cxx:2668
 AliAnalysisAlien.cxx:2669
 AliAnalysisAlien.cxx:2670
 AliAnalysisAlien.cxx:2671
 AliAnalysisAlien.cxx:2672
 AliAnalysisAlien.cxx:2673
 AliAnalysisAlien.cxx:2674
 AliAnalysisAlien.cxx:2675
 AliAnalysisAlien.cxx:2676
 AliAnalysisAlien.cxx:2677
 AliAnalysisAlien.cxx:2678
 AliAnalysisAlien.cxx:2679
 AliAnalysisAlien.cxx:2680
 AliAnalysisAlien.cxx:2681
 AliAnalysisAlien.cxx:2682
 AliAnalysisAlien.cxx:2683
 AliAnalysisAlien.cxx:2684
 AliAnalysisAlien.cxx:2685
 AliAnalysisAlien.cxx:2686
 AliAnalysisAlien.cxx:2687
 AliAnalysisAlien.cxx:2688
 AliAnalysisAlien.cxx:2689
 AliAnalysisAlien.cxx:2690
 AliAnalysisAlien.cxx:2691
 AliAnalysisAlien.cxx:2692
 AliAnalysisAlien.cxx:2693
 AliAnalysisAlien.cxx:2694
 AliAnalysisAlien.cxx:2695
 AliAnalysisAlien.cxx:2696
 AliAnalysisAlien.cxx:2697
 AliAnalysisAlien.cxx:2698
 AliAnalysisAlien.cxx:2699
 AliAnalysisAlien.cxx:2700
 AliAnalysisAlien.cxx:2701
 AliAnalysisAlien.cxx:2702
 AliAnalysisAlien.cxx:2703
 AliAnalysisAlien.cxx:2704
 AliAnalysisAlien.cxx:2705
 AliAnalysisAlien.cxx:2706
 AliAnalysisAlien.cxx:2707
 AliAnalysisAlien.cxx:2708
 AliAnalysisAlien.cxx:2709
 AliAnalysisAlien.cxx:2710
 AliAnalysisAlien.cxx:2711
 AliAnalysisAlien.cxx:2712
 AliAnalysisAlien.cxx:2713
 AliAnalysisAlien.cxx:2714
 AliAnalysisAlien.cxx:2715
 AliAnalysisAlien.cxx:2716
 AliAnalysisAlien.cxx:2717
 AliAnalysisAlien.cxx:2718
 AliAnalysisAlien.cxx:2719
 AliAnalysisAlien.cxx:2720
 AliAnalysisAlien.cxx:2721
 AliAnalysisAlien.cxx:2722
 AliAnalysisAlien.cxx:2723
 AliAnalysisAlien.cxx:2724
 AliAnalysisAlien.cxx:2725
 AliAnalysisAlien.cxx:2726
 AliAnalysisAlien.cxx:2727
 AliAnalysisAlien.cxx:2728
 AliAnalysisAlien.cxx:2729
 AliAnalysisAlien.cxx:2730
 AliAnalysisAlien.cxx:2731
 AliAnalysisAlien.cxx:2732
 AliAnalysisAlien.cxx:2733
 AliAnalysisAlien.cxx:2734
 AliAnalysisAlien.cxx:2735
 AliAnalysisAlien.cxx:2736
 AliAnalysisAlien.cxx:2737
 AliAnalysisAlien.cxx:2738
 AliAnalysisAlien.cxx:2739
 AliAnalysisAlien.cxx:2740
 AliAnalysisAlien.cxx:2741
 AliAnalysisAlien.cxx:2742
 AliAnalysisAlien.cxx:2743
 AliAnalysisAlien.cxx:2744
 AliAnalysisAlien.cxx:2745
 AliAnalysisAlien.cxx:2746
 AliAnalysisAlien.cxx:2747
 AliAnalysisAlien.cxx:2748
 AliAnalysisAlien.cxx:2749
 AliAnalysisAlien.cxx:2750
 AliAnalysisAlien.cxx:2751
 AliAnalysisAlien.cxx:2752
 AliAnalysisAlien.cxx:2753
 AliAnalysisAlien.cxx:2754
 AliAnalysisAlien.cxx:2755
 AliAnalysisAlien.cxx:2756
 AliAnalysisAlien.cxx:2757
 AliAnalysisAlien.cxx:2758
 AliAnalysisAlien.cxx:2759
 AliAnalysisAlien.cxx:2760
 AliAnalysisAlien.cxx:2761
 AliAnalysisAlien.cxx:2762
 AliAnalysisAlien.cxx:2763
 AliAnalysisAlien.cxx:2764
 AliAnalysisAlien.cxx:2765
 AliAnalysisAlien.cxx:2766
 AliAnalysisAlien.cxx:2767
 AliAnalysisAlien.cxx:2768
 AliAnalysisAlien.cxx:2769
 AliAnalysisAlien.cxx:2770
 AliAnalysisAlien.cxx:2771
 AliAnalysisAlien.cxx:2772
 AliAnalysisAlien.cxx:2773
 AliAnalysisAlien.cxx:2774
 AliAnalysisAlien.cxx:2775
 AliAnalysisAlien.cxx:2776
 AliAnalysisAlien.cxx:2777
 AliAnalysisAlien.cxx:2778
 AliAnalysisAlien.cxx:2779
 AliAnalysisAlien.cxx:2780
 AliAnalysisAlien.cxx:2781
 AliAnalysisAlien.cxx:2782
 AliAnalysisAlien.cxx:2783
 AliAnalysisAlien.cxx:2784
 AliAnalysisAlien.cxx:2785
 AliAnalysisAlien.cxx:2786
 AliAnalysisAlien.cxx:2787
 AliAnalysisAlien.cxx:2788
 AliAnalysisAlien.cxx:2789
 AliAnalysisAlien.cxx:2790
 AliAnalysisAlien.cxx:2791
 AliAnalysisAlien.cxx:2792
 AliAnalysisAlien.cxx:2793
 AliAnalysisAlien.cxx:2794
 AliAnalysisAlien.cxx:2795
 AliAnalysisAlien.cxx:2796
 AliAnalysisAlien.cxx:2797
 AliAnalysisAlien.cxx:2798
 AliAnalysisAlien.cxx:2799
 AliAnalysisAlien.cxx:2800
 AliAnalysisAlien.cxx:2801
 AliAnalysisAlien.cxx:2802
 AliAnalysisAlien.cxx:2803
 AliAnalysisAlien.cxx:2804
 AliAnalysisAlien.cxx:2805
 AliAnalysisAlien.cxx:2806
 AliAnalysisAlien.cxx:2807
 AliAnalysisAlien.cxx:2808
 AliAnalysisAlien.cxx:2809
 AliAnalysisAlien.cxx:2810
 AliAnalysisAlien.cxx:2811
 AliAnalysisAlien.cxx:2812
 AliAnalysisAlien.cxx:2813
 AliAnalysisAlien.cxx:2814
 AliAnalysisAlien.cxx:2815
 AliAnalysisAlien.cxx:2816
 AliAnalysisAlien.cxx:2817
 AliAnalysisAlien.cxx:2818
 AliAnalysisAlien.cxx:2819
 AliAnalysisAlien.cxx:2820
 AliAnalysisAlien.cxx:2821
 AliAnalysisAlien.cxx:2822
 AliAnalysisAlien.cxx:2823
 AliAnalysisAlien.cxx:2824
 AliAnalysisAlien.cxx:2825
 AliAnalysisAlien.cxx:2826
 AliAnalysisAlien.cxx:2827
 AliAnalysisAlien.cxx:2828
 AliAnalysisAlien.cxx:2829
 AliAnalysisAlien.cxx:2830
 AliAnalysisAlien.cxx:2831
 AliAnalysisAlien.cxx:2832
 AliAnalysisAlien.cxx:2833
 AliAnalysisAlien.cxx:2834
 AliAnalysisAlien.cxx:2835
 AliAnalysisAlien.cxx:2836
 AliAnalysisAlien.cxx:2837
 AliAnalysisAlien.cxx:2838
 AliAnalysisAlien.cxx:2839
 AliAnalysisAlien.cxx:2840
 AliAnalysisAlien.cxx:2841
 AliAnalysisAlien.cxx:2842
 AliAnalysisAlien.cxx:2843
 AliAnalysisAlien.cxx:2844
 AliAnalysisAlien.cxx:2845
 AliAnalysisAlien.cxx:2846
 AliAnalysisAlien.cxx:2847
 AliAnalysisAlien.cxx:2848
 AliAnalysisAlien.cxx:2849
 AliAnalysisAlien.cxx:2850
 AliAnalysisAlien.cxx:2851
 AliAnalysisAlien.cxx:2852
 AliAnalysisAlien.cxx:2853
 AliAnalysisAlien.cxx:2854
 AliAnalysisAlien.cxx:2855
 AliAnalysisAlien.cxx:2856
 AliAnalysisAlien.cxx:2857
 AliAnalysisAlien.cxx:2858
 AliAnalysisAlien.cxx:2859
 AliAnalysisAlien.cxx:2860
 AliAnalysisAlien.cxx:2861
 AliAnalysisAlien.cxx:2862
 AliAnalysisAlien.cxx:2863
 AliAnalysisAlien.cxx:2864
 AliAnalysisAlien.cxx:2865
 AliAnalysisAlien.cxx:2866
 AliAnalysisAlien.cxx:2867
 AliAnalysisAlien.cxx:2868
 AliAnalysisAlien.cxx:2869
 AliAnalysisAlien.cxx:2870
 AliAnalysisAlien.cxx:2871
 AliAnalysisAlien.cxx:2872
 AliAnalysisAlien.cxx:2873
 AliAnalysisAlien.cxx:2874
 AliAnalysisAlien.cxx:2875
 AliAnalysisAlien.cxx:2876
 AliAnalysisAlien.cxx:2877
 AliAnalysisAlien.cxx:2878
 AliAnalysisAlien.cxx:2879
 AliAnalysisAlien.cxx:2880
 AliAnalysisAlien.cxx:2881
 AliAnalysisAlien.cxx:2882
 AliAnalysisAlien.cxx:2883
 AliAnalysisAlien.cxx:2884
 AliAnalysisAlien.cxx:2885
 AliAnalysisAlien.cxx:2886
 AliAnalysisAlien.cxx:2887
 AliAnalysisAlien.cxx:2888
 AliAnalysisAlien.cxx:2889
 AliAnalysisAlien.cxx:2890
 AliAnalysisAlien.cxx:2891
 AliAnalysisAlien.cxx:2892
 AliAnalysisAlien.cxx:2893
 AliAnalysisAlien.cxx:2894
 AliAnalysisAlien.cxx:2895
 AliAnalysisAlien.cxx:2896
 AliAnalysisAlien.cxx:2897
 AliAnalysisAlien.cxx:2898
 AliAnalysisAlien.cxx:2899
 AliAnalysisAlien.cxx:2900
 AliAnalysisAlien.cxx:2901
 AliAnalysisAlien.cxx:2902
 AliAnalysisAlien.cxx:2903
 AliAnalysisAlien.cxx:2904
 AliAnalysisAlien.cxx:2905
 AliAnalysisAlien.cxx:2906
 AliAnalysisAlien.cxx:2907
 AliAnalysisAlien.cxx:2908
 AliAnalysisAlien.cxx:2909
 AliAnalysisAlien.cxx:2910
 AliAnalysisAlien.cxx:2911
 AliAnalysisAlien.cxx:2912
 AliAnalysisAlien.cxx:2913
 AliAnalysisAlien.cxx:2914
 AliAnalysisAlien.cxx:2915
 AliAnalysisAlien.cxx:2916
 AliAnalysisAlien.cxx:2917
 AliAnalysisAlien.cxx:2918
 AliAnalysisAlien.cxx:2919
 AliAnalysisAlien.cxx:2920
 AliAnalysisAlien.cxx:2921
 AliAnalysisAlien.cxx:2922
 AliAnalysisAlien.cxx:2923
 AliAnalysisAlien.cxx:2924
 AliAnalysisAlien.cxx:2925
 AliAnalysisAlien.cxx:2926
 AliAnalysisAlien.cxx:2927
 AliAnalysisAlien.cxx:2928
 AliAnalysisAlien.cxx:2929
 AliAnalysisAlien.cxx:2930
 AliAnalysisAlien.cxx:2931
 AliAnalysisAlien.cxx:2932
 AliAnalysisAlien.cxx:2933
 AliAnalysisAlien.cxx:2934
 AliAnalysisAlien.cxx:2935
 AliAnalysisAlien.cxx:2936
 AliAnalysisAlien.cxx:2937
 AliAnalysisAlien.cxx:2938
 AliAnalysisAlien.cxx:2939
 AliAnalysisAlien.cxx:2940
 AliAnalysisAlien.cxx:2941
 AliAnalysisAlien.cxx:2942
 AliAnalysisAlien.cxx:2943
 AliAnalysisAlien.cxx:2944
 AliAnalysisAlien.cxx:2945
 AliAnalysisAlien.cxx:2946
 AliAnalysisAlien.cxx:2947
 AliAnalysisAlien.cxx:2948
 AliAnalysisAlien.cxx:2949
 AliAnalysisAlien.cxx:2950
 AliAnalysisAlien.cxx:2951
 AliAnalysisAlien.cxx:2952
 AliAnalysisAlien.cxx:2953
 AliAnalysisAlien.cxx:2954
 AliAnalysisAlien.cxx:2955
 AliAnalysisAlien.cxx:2956
 AliAnalysisAlien.cxx:2957
 AliAnalysisAlien.cxx:2958
 AliAnalysisAlien.cxx:2959
 AliAnalysisAlien.cxx:2960
 AliAnalysisAlien.cxx:2961
 AliAnalysisAlien.cxx:2962
 AliAnalysisAlien.cxx:2963
 AliAnalysisAlien.cxx:2964
 AliAnalysisAlien.cxx:2965
 AliAnalysisAlien.cxx:2966
 AliAnalysisAlien.cxx:2967
 AliAnalysisAlien.cxx:2968
 AliAnalysisAlien.cxx:2969
 AliAnalysisAlien.cxx:2970
 AliAnalysisAlien.cxx:2971
 AliAnalysisAlien.cxx:2972
 AliAnalysisAlien.cxx:2973
 AliAnalysisAlien.cxx:2974
 AliAnalysisAlien.cxx:2975
 AliAnalysisAlien.cxx:2976
 AliAnalysisAlien.cxx:2977
 AliAnalysisAlien.cxx:2978
 AliAnalysisAlien.cxx:2979
 AliAnalysisAlien.cxx:2980
 AliAnalysisAlien.cxx:2981
 AliAnalysisAlien.cxx:2982
 AliAnalysisAlien.cxx:2983
 AliAnalysisAlien.cxx:2984
 AliAnalysisAlien.cxx:2985
 AliAnalysisAlien.cxx:2986
 AliAnalysisAlien.cxx:2987
 AliAnalysisAlien.cxx:2988
 AliAnalysisAlien.cxx:2989
 AliAnalysisAlien.cxx:2990
 AliAnalysisAlien.cxx:2991
 AliAnalysisAlien.cxx:2992
 AliAnalysisAlien.cxx:2993
 AliAnalysisAlien.cxx:2994
 AliAnalysisAlien.cxx:2995
 AliAnalysisAlien.cxx:2996
 AliAnalysisAlien.cxx:2997
 AliAnalysisAlien.cxx:2998
 AliAnalysisAlien.cxx:2999
 AliAnalysisAlien.cxx:3000
 AliAnalysisAlien.cxx:3001
 AliAnalysisAlien.cxx:3002
 AliAnalysisAlien.cxx:3003
 AliAnalysisAlien.cxx:3004
 AliAnalysisAlien.cxx:3005
 AliAnalysisAlien.cxx:3006
 AliAnalysisAlien.cxx:3007
 AliAnalysisAlien.cxx:3008
 AliAnalysisAlien.cxx:3009
 AliAnalysisAlien.cxx:3010
 AliAnalysisAlien.cxx:3011
 AliAnalysisAlien.cxx:3012
 AliAnalysisAlien.cxx:3013
 AliAnalysisAlien.cxx:3014
 AliAnalysisAlien.cxx:3015
 AliAnalysisAlien.cxx:3016
 AliAnalysisAlien.cxx:3017
 AliAnalysisAlien.cxx:3018
 AliAnalysisAlien.cxx:3019
 AliAnalysisAlien.cxx:3020
 AliAnalysisAlien.cxx:3021
 AliAnalysisAlien.cxx:3022
 AliAnalysisAlien.cxx:3023
 AliAnalysisAlien.cxx:3024
 AliAnalysisAlien.cxx:3025
 AliAnalysisAlien.cxx:3026
 AliAnalysisAlien.cxx:3027
 AliAnalysisAlien.cxx:3028
 AliAnalysisAlien.cxx:3029
 AliAnalysisAlien.cxx:3030
 AliAnalysisAlien.cxx:3031
 AliAnalysisAlien.cxx:3032
 AliAnalysisAlien.cxx:3033
 AliAnalysisAlien.cxx:3034
 AliAnalysisAlien.cxx:3035
 AliAnalysisAlien.cxx:3036
 AliAnalysisAlien.cxx:3037
 AliAnalysisAlien.cxx:3038
 AliAnalysisAlien.cxx:3039
 AliAnalysisAlien.cxx:3040
 AliAnalysisAlien.cxx:3041
 AliAnalysisAlien.cxx:3042
 AliAnalysisAlien.cxx:3043
 AliAnalysisAlien.cxx:3044
 AliAnalysisAlien.cxx:3045
 AliAnalysisAlien.cxx:3046
 AliAnalysisAlien.cxx:3047
 AliAnalysisAlien.cxx:3048
 AliAnalysisAlien.cxx:3049
 AliAnalysisAlien.cxx:3050
 AliAnalysisAlien.cxx:3051
 AliAnalysisAlien.cxx:3052
 AliAnalysisAlien.cxx:3053
 AliAnalysisAlien.cxx:3054
 AliAnalysisAlien.cxx:3055
 AliAnalysisAlien.cxx:3056
 AliAnalysisAlien.cxx:3057
 AliAnalysisAlien.cxx:3058
 AliAnalysisAlien.cxx:3059
 AliAnalysisAlien.cxx:3060
 AliAnalysisAlien.cxx:3061
 AliAnalysisAlien.cxx:3062
 AliAnalysisAlien.cxx:3063
 AliAnalysisAlien.cxx:3064
 AliAnalysisAlien.cxx:3065
 AliAnalysisAlien.cxx:3066
 AliAnalysisAlien.cxx:3067
 AliAnalysisAlien.cxx:3068
 AliAnalysisAlien.cxx:3069
 AliAnalysisAlien.cxx:3070
 AliAnalysisAlien.cxx:3071
 AliAnalysisAlien.cxx:3072
 AliAnalysisAlien.cxx:3073
 AliAnalysisAlien.cxx:3074
 AliAnalysisAlien.cxx:3075
 AliAnalysisAlien.cxx:3076
 AliAnalysisAlien.cxx:3077
 AliAnalysisAlien.cxx:3078
 AliAnalysisAlien.cxx:3079
 AliAnalysisAlien.cxx:3080
 AliAnalysisAlien.cxx:3081
 AliAnalysisAlien.cxx:3082
 AliAnalysisAlien.cxx:3083
 AliAnalysisAlien.cxx:3084
 AliAnalysisAlien.cxx:3085
 AliAnalysisAlien.cxx:3086
 AliAnalysisAlien.cxx:3087
 AliAnalysisAlien.cxx:3088
 AliAnalysisAlien.cxx:3089
 AliAnalysisAlien.cxx:3090
 AliAnalysisAlien.cxx:3091
 AliAnalysisAlien.cxx:3092
 AliAnalysisAlien.cxx:3093
 AliAnalysisAlien.cxx:3094
 AliAnalysisAlien.cxx:3095
 AliAnalysisAlien.cxx:3096
 AliAnalysisAlien.cxx:3097
 AliAnalysisAlien.cxx:3098
 AliAnalysisAlien.cxx:3099
 AliAnalysisAlien.cxx:3100
 AliAnalysisAlien.cxx:3101
 AliAnalysisAlien.cxx:3102
 AliAnalysisAlien.cxx:3103
 AliAnalysisAlien.cxx:3104
 AliAnalysisAlien.cxx:3105
 AliAnalysisAlien.cxx:3106
 AliAnalysisAlien.cxx:3107
 AliAnalysisAlien.cxx:3108
 AliAnalysisAlien.cxx:3109
 AliAnalysisAlien.cxx:3110
 AliAnalysisAlien.cxx:3111
 AliAnalysisAlien.cxx:3112
 AliAnalysisAlien.cxx:3113
 AliAnalysisAlien.cxx:3114
 AliAnalysisAlien.cxx:3115
 AliAnalysisAlien.cxx:3116
 AliAnalysisAlien.cxx:3117
 AliAnalysisAlien.cxx:3118
 AliAnalysisAlien.cxx:3119
 AliAnalysisAlien.cxx:3120
 AliAnalysisAlien.cxx:3121
 AliAnalysisAlien.cxx:3122
 AliAnalysisAlien.cxx:3123
 AliAnalysisAlien.cxx:3124
 AliAnalysisAlien.cxx:3125
 AliAnalysisAlien.cxx:3126
 AliAnalysisAlien.cxx:3127
 AliAnalysisAlien.cxx:3128
 AliAnalysisAlien.cxx:3129
 AliAnalysisAlien.cxx:3130
 AliAnalysisAlien.cxx:3131
 AliAnalysisAlien.cxx:3132
 AliAnalysisAlien.cxx:3133
 AliAnalysisAlien.cxx:3134
 AliAnalysisAlien.cxx:3135
 AliAnalysisAlien.cxx:3136
 AliAnalysisAlien.cxx:3137
 AliAnalysisAlien.cxx:3138
 AliAnalysisAlien.cxx:3139
 AliAnalysisAlien.cxx:3140
 AliAnalysisAlien.cxx:3141
 AliAnalysisAlien.cxx:3142
 AliAnalysisAlien.cxx:3143
 AliAnalysisAlien.cxx:3144
 AliAnalysisAlien.cxx:3145
 AliAnalysisAlien.cxx:3146
 AliAnalysisAlien.cxx:3147
 AliAnalysisAlien.cxx:3148
 AliAnalysisAlien.cxx:3149
 AliAnalysisAlien.cxx:3150
 AliAnalysisAlien.cxx:3151
 AliAnalysisAlien.cxx:3152
 AliAnalysisAlien.cxx:3153
 AliAnalysisAlien.cxx:3154
 AliAnalysisAlien.cxx:3155
 AliAnalysisAlien.cxx:3156
 AliAnalysisAlien.cxx:3157
 AliAnalysisAlien.cxx:3158
 AliAnalysisAlien.cxx:3159
 AliAnalysisAlien.cxx:3160
 AliAnalysisAlien.cxx:3161
 AliAnalysisAlien.cxx:3162
 AliAnalysisAlien.cxx:3163
 AliAnalysisAlien.cxx:3164
 AliAnalysisAlien.cxx:3165
 AliAnalysisAlien.cxx:3166
 AliAnalysisAlien.cxx:3167
 AliAnalysisAlien.cxx:3168
 AliAnalysisAlien.cxx:3169
 AliAnalysisAlien.cxx:3170
 AliAnalysisAlien.cxx:3171
 AliAnalysisAlien.cxx:3172
 AliAnalysisAlien.cxx:3173
 AliAnalysisAlien.cxx:3174
 AliAnalysisAlien.cxx:3175
 AliAnalysisAlien.cxx:3176
 AliAnalysisAlien.cxx:3177
 AliAnalysisAlien.cxx:3178
 AliAnalysisAlien.cxx:3179
 AliAnalysisAlien.cxx:3180
 AliAnalysisAlien.cxx:3181
 AliAnalysisAlien.cxx:3182
 AliAnalysisAlien.cxx:3183
 AliAnalysisAlien.cxx:3184
 AliAnalysisAlien.cxx:3185
 AliAnalysisAlien.cxx:3186
 AliAnalysisAlien.cxx:3187
 AliAnalysisAlien.cxx:3188
 AliAnalysisAlien.cxx:3189
 AliAnalysisAlien.cxx:3190
 AliAnalysisAlien.cxx:3191
 AliAnalysisAlien.cxx:3192
 AliAnalysisAlien.cxx:3193
 AliAnalysisAlien.cxx:3194
 AliAnalysisAlien.cxx:3195
 AliAnalysisAlien.cxx:3196
 AliAnalysisAlien.cxx:3197
 AliAnalysisAlien.cxx:3198
 AliAnalysisAlien.cxx:3199
 AliAnalysisAlien.cxx:3200
 AliAnalysisAlien.cxx:3201
 AliAnalysisAlien.cxx:3202
 AliAnalysisAlien.cxx:3203
 AliAnalysisAlien.cxx:3204
 AliAnalysisAlien.cxx:3205
 AliAnalysisAlien.cxx:3206
 AliAnalysisAlien.cxx:3207
 AliAnalysisAlien.cxx:3208
 AliAnalysisAlien.cxx:3209
 AliAnalysisAlien.cxx:3210
 AliAnalysisAlien.cxx:3211
 AliAnalysisAlien.cxx:3212
 AliAnalysisAlien.cxx:3213
 AliAnalysisAlien.cxx:3214
 AliAnalysisAlien.cxx:3215
 AliAnalysisAlien.cxx:3216
 AliAnalysisAlien.cxx:3217
 AliAnalysisAlien.cxx:3218
 AliAnalysisAlien.cxx:3219
 AliAnalysisAlien.cxx:3220
 AliAnalysisAlien.cxx:3221
 AliAnalysisAlien.cxx:3222
 AliAnalysisAlien.cxx:3223
 AliAnalysisAlien.cxx:3224
 AliAnalysisAlien.cxx:3225
 AliAnalysisAlien.cxx:3226
 AliAnalysisAlien.cxx:3227
 AliAnalysisAlien.cxx:3228
 AliAnalysisAlien.cxx:3229
 AliAnalysisAlien.cxx:3230
 AliAnalysisAlien.cxx:3231
 AliAnalysisAlien.cxx:3232
 AliAnalysisAlien.cxx:3233
 AliAnalysisAlien.cxx:3234
 AliAnalysisAlien.cxx:3235
 AliAnalysisAlien.cxx:3236
 AliAnalysisAlien.cxx:3237
 AliAnalysisAlien.cxx:3238
 AliAnalysisAlien.cxx:3239
 AliAnalysisAlien.cxx:3240
 AliAnalysisAlien.cxx:3241
 AliAnalysisAlien.cxx:3242
 AliAnalysisAlien.cxx:3243
 AliAnalysisAlien.cxx:3244
 AliAnalysisAlien.cxx:3245
 AliAnalysisAlien.cxx:3246
 AliAnalysisAlien.cxx:3247
 AliAnalysisAlien.cxx:3248
 AliAnalysisAlien.cxx:3249
 AliAnalysisAlien.cxx:3250
 AliAnalysisAlien.cxx:3251
 AliAnalysisAlien.cxx:3252
 AliAnalysisAlien.cxx:3253
 AliAnalysisAlien.cxx:3254
 AliAnalysisAlien.cxx:3255
 AliAnalysisAlien.cxx:3256
 AliAnalysisAlien.cxx:3257
 AliAnalysisAlien.cxx:3258
 AliAnalysisAlien.cxx:3259
 AliAnalysisAlien.cxx:3260
 AliAnalysisAlien.cxx:3261
 AliAnalysisAlien.cxx:3262
 AliAnalysisAlien.cxx:3263
 AliAnalysisAlien.cxx:3264
 AliAnalysisAlien.cxx:3265
 AliAnalysisAlien.cxx:3266
 AliAnalysisAlien.cxx:3267
 AliAnalysisAlien.cxx:3268
 AliAnalysisAlien.cxx:3269
 AliAnalysisAlien.cxx:3270
 AliAnalysisAlien.cxx:3271
 AliAnalysisAlien.cxx:3272
 AliAnalysisAlien.cxx:3273
 AliAnalysisAlien.cxx:3274
 AliAnalysisAlien.cxx:3275
 AliAnalysisAlien.cxx:3276
 AliAnalysisAlien.cxx:3277
 AliAnalysisAlien.cxx:3278
 AliAnalysisAlien.cxx:3279
 AliAnalysisAlien.cxx:3280
 AliAnalysisAlien.cxx:3281
 AliAnalysisAlien.cxx:3282
 AliAnalysisAlien.cxx:3283
 AliAnalysisAlien.cxx:3284
 AliAnalysisAlien.cxx:3285
 AliAnalysisAlien.cxx:3286
 AliAnalysisAlien.cxx:3287
 AliAnalysisAlien.cxx:3288
 AliAnalysisAlien.cxx:3289
 AliAnalysisAlien.cxx:3290
 AliAnalysisAlien.cxx:3291
 AliAnalysisAlien.cxx:3292
 AliAnalysisAlien.cxx:3293
 AliAnalysisAlien.cxx:3294
 AliAnalysisAlien.cxx:3295
 AliAnalysisAlien.cxx:3296
 AliAnalysisAlien.cxx:3297
 AliAnalysisAlien.cxx:3298
 AliAnalysisAlien.cxx:3299
 AliAnalysisAlien.cxx:3300
 AliAnalysisAlien.cxx:3301
 AliAnalysisAlien.cxx:3302
 AliAnalysisAlien.cxx:3303
 AliAnalysisAlien.cxx:3304
 AliAnalysisAlien.cxx:3305
 AliAnalysisAlien.cxx:3306
 AliAnalysisAlien.cxx:3307
 AliAnalysisAlien.cxx:3308
 AliAnalysisAlien.cxx:3309
 AliAnalysisAlien.cxx:3310
 AliAnalysisAlien.cxx:3311
 AliAnalysisAlien.cxx:3312
 AliAnalysisAlien.cxx:3313
 AliAnalysisAlien.cxx:3314
 AliAnalysisAlien.cxx:3315
 AliAnalysisAlien.cxx:3316
 AliAnalysisAlien.cxx:3317
 AliAnalysisAlien.cxx:3318
 AliAnalysisAlien.cxx:3319
 AliAnalysisAlien.cxx:3320
 AliAnalysisAlien.cxx:3321
 AliAnalysisAlien.cxx:3322
 AliAnalysisAlien.cxx:3323
 AliAnalysisAlien.cxx:3324
 AliAnalysisAlien.cxx:3325
 AliAnalysisAlien.cxx:3326
 AliAnalysisAlien.cxx:3327
 AliAnalysisAlien.cxx:3328
 AliAnalysisAlien.cxx:3329
 AliAnalysisAlien.cxx:3330
 AliAnalysisAlien.cxx:3331
 AliAnalysisAlien.cxx:3332
 AliAnalysisAlien.cxx:3333
 AliAnalysisAlien.cxx:3334
 AliAnalysisAlien.cxx:3335
 AliAnalysisAlien.cxx:3336
 AliAnalysisAlien.cxx:3337
 AliAnalysisAlien.cxx:3338
 AliAnalysisAlien.cxx:3339
 AliAnalysisAlien.cxx:3340
 AliAnalysisAlien.cxx:3341
 AliAnalysisAlien.cxx:3342
 AliAnalysisAlien.cxx:3343
 AliAnalysisAlien.cxx:3344
 AliAnalysisAlien.cxx:3345
 AliAnalysisAlien.cxx:3346
 AliAnalysisAlien.cxx:3347
 AliAnalysisAlien.cxx:3348
 AliAnalysisAlien.cxx:3349
 AliAnalysisAlien.cxx:3350
 AliAnalysisAlien.cxx:3351
 AliAnalysisAlien.cxx:3352
 AliAnalysisAlien.cxx:3353
 AliAnalysisAlien.cxx:3354
 AliAnalysisAlien.cxx:3355
 AliAnalysisAlien.cxx:3356
 AliAnalysisAlien.cxx:3357
 AliAnalysisAlien.cxx:3358
 AliAnalysisAlien.cxx:3359
 AliAnalysisAlien.cxx:3360
 AliAnalysisAlien.cxx:3361
 AliAnalysisAlien.cxx:3362
 AliAnalysisAlien.cxx:3363
 AliAnalysisAlien.cxx:3364
 AliAnalysisAlien.cxx:3365
 AliAnalysisAlien.cxx:3366
 AliAnalysisAlien.cxx:3367
 AliAnalysisAlien.cxx:3368
 AliAnalysisAlien.cxx:3369
 AliAnalysisAlien.cxx:3370
 AliAnalysisAlien.cxx:3371
 AliAnalysisAlien.cxx:3372
 AliAnalysisAlien.cxx:3373
 AliAnalysisAlien.cxx:3374
 AliAnalysisAlien.cxx:3375
 AliAnalysisAlien.cxx:3376
 AliAnalysisAlien.cxx:3377
 AliAnalysisAlien.cxx:3378
 AliAnalysisAlien.cxx:3379
 AliAnalysisAlien.cxx:3380
 AliAnalysisAlien.cxx:3381
 AliAnalysisAlien.cxx:3382
 AliAnalysisAlien.cxx:3383
 AliAnalysisAlien.cxx:3384
 AliAnalysisAlien.cxx:3385
 AliAnalysisAlien.cxx:3386
 AliAnalysisAlien.cxx:3387
 AliAnalysisAlien.cxx:3388
 AliAnalysisAlien.cxx:3389
 AliAnalysisAlien.cxx:3390
 AliAnalysisAlien.cxx:3391
 AliAnalysisAlien.cxx:3392
 AliAnalysisAlien.cxx:3393
 AliAnalysisAlien.cxx:3394
 AliAnalysisAlien.cxx:3395
 AliAnalysisAlien.cxx:3396
 AliAnalysisAlien.cxx:3397
 AliAnalysisAlien.cxx:3398
 AliAnalysisAlien.cxx:3399
 AliAnalysisAlien.cxx:3400
 AliAnalysisAlien.cxx:3401
 AliAnalysisAlien.cxx:3402
 AliAnalysisAlien.cxx:3403
 AliAnalysisAlien.cxx:3404
 AliAnalysisAlien.cxx:3405
 AliAnalysisAlien.cxx:3406
 AliAnalysisAlien.cxx:3407
 AliAnalysisAlien.cxx:3408
 AliAnalysisAlien.cxx:3409
 AliAnalysisAlien.cxx:3410
 AliAnalysisAlien.cxx:3411
 AliAnalysisAlien.cxx:3412
 AliAnalysisAlien.cxx:3413
 AliAnalysisAlien.cxx:3414
 AliAnalysisAlien.cxx:3415
 AliAnalysisAlien.cxx:3416
 AliAnalysisAlien.cxx:3417
 AliAnalysisAlien.cxx:3418
 AliAnalysisAlien.cxx:3419
 AliAnalysisAlien.cxx:3420
 AliAnalysisAlien.cxx:3421
 AliAnalysisAlien.cxx:3422
 AliAnalysisAlien.cxx:3423
 AliAnalysisAlien.cxx:3424
 AliAnalysisAlien.cxx:3425
 AliAnalysisAlien.cxx:3426
 AliAnalysisAlien.cxx:3427
 AliAnalysisAlien.cxx:3428
 AliAnalysisAlien.cxx:3429
 AliAnalysisAlien.cxx:3430
 AliAnalysisAlien.cxx:3431
 AliAnalysisAlien.cxx:3432
 AliAnalysisAlien.cxx:3433
 AliAnalysisAlien.cxx:3434
 AliAnalysisAlien.cxx:3435
 AliAnalysisAlien.cxx:3436
 AliAnalysisAlien.cxx:3437
 AliAnalysisAlien.cxx:3438
 AliAnalysisAlien.cxx:3439
 AliAnalysisAlien.cxx:3440
 AliAnalysisAlien.cxx:3441
 AliAnalysisAlien.cxx:3442
 AliAnalysisAlien.cxx:3443
 AliAnalysisAlien.cxx:3444
 AliAnalysisAlien.cxx:3445
 AliAnalysisAlien.cxx:3446
 AliAnalysisAlien.cxx:3447
 AliAnalysisAlien.cxx:3448
 AliAnalysisAlien.cxx:3449
 AliAnalysisAlien.cxx:3450
 AliAnalysisAlien.cxx:3451
 AliAnalysisAlien.cxx:3452
 AliAnalysisAlien.cxx:3453
 AliAnalysisAlien.cxx:3454
 AliAnalysisAlien.cxx:3455
 AliAnalysisAlien.cxx:3456
 AliAnalysisAlien.cxx:3457
 AliAnalysisAlien.cxx:3458
 AliAnalysisAlien.cxx:3459
 AliAnalysisAlien.cxx:3460
 AliAnalysisAlien.cxx:3461
 AliAnalysisAlien.cxx:3462
 AliAnalysisAlien.cxx:3463
 AliAnalysisAlien.cxx:3464
 AliAnalysisAlien.cxx:3465
 AliAnalysisAlien.cxx:3466
 AliAnalysisAlien.cxx:3467
 AliAnalysisAlien.cxx:3468
 AliAnalysisAlien.cxx:3469
 AliAnalysisAlien.cxx:3470
 AliAnalysisAlien.cxx:3471
 AliAnalysisAlien.cxx:3472
 AliAnalysisAlien.cxx:3473
 AliAnalysisAlien.cxx:3474
 AliAnalysisAlien.cxx:3475
 AliAnalysisAlien.cxx:3476
 AliAnalysisAlien.cxx:3477
 AliAnalysisAlien.cxx:3478
 AliAnalysisAlien.cxx:3479
 AliAnalysisAlien.cxx:3480
 AliAnalysisAlien.cxx:3481
 AliAnalysisAlien.cxx:3482
 AliAnalysisAlien.cxx:3483
 AliAnalysisAlien.cxx:3484
 AliAnalysisAlien.cxx:3485
 AliAnalysisAlien.cxx:3486
 AliAnalysisAlien.cxx:3487
 AliAnalysisAlien.cxx:3488
 AliAnalysisAlien.cxx:3489
 AliAnalysisAlien.cxx:3490
 AliAnalysisAlien.cxx:3491
 AliAnalysisAlien.cxx:3492
 AliAnalysisAlien.cxx:3493
 AliAnalysisAlien.cxx:3494
 AliAnalysisAlien.cxx:3495
 AliAnalysisAlien.cxx:3496
 AliAnalysisAlien.cxx:3497
 AliAnalysisAlien.cxx:3498
 AliAnalysisAlien.cxx:3499
 AliAnalysisAlien.cxx:3500
 AliAnalysisAlien.cxx:3501
 AliAnalysisAlien.cxx:3502
 AliAnalysisAlien.cxx:3503
 AliAnalysisAlien.cxx:3504
 AliAnalysisAlien.cxx:3505
 AliAnalysisAlien.cxx:3506
 AliAnalysisAlien.cxx:3507
 AliAnalysisAlien.cxx:3508
 AliAnalysisAlien.cxx:3509
 AliAnalysisAlien.cxx:3510
 AliAnalysisAlien.cxx:3511
 AliAnalysisAlien.cxx:3512
 AliAnalysisAlien.cxx:3513
 AliAnalysisAlien.cxx:3514
 AliAnalysisAlien.cxx:3515
 AliAnalysisAlien.cxx:3516
 AliAnalysisAlien.cxx:3517
 AliAnalysisAlien.cxx:3518
 AliAnalysisAlien.cxx:3519
 AliAnalysisAlien.cxx:3520
 AliAnalysisAlien.cxx:3521
 AliAnalysisAlien.cxx:3522
 AliAnalysisAlien.cxx:3523
 AliAnalysisAlien.cxx:3524
 AliAnalysisAlien.cxx:3525
 AliAnalysisAlien.cxx:3526
 AliAnalysisAlien.cxx:3527
 AliAnalysisAlien.cxx:3528
 AliAnalysisAlien.cxx:3529
 AliAnalysisAlien.cxx:3530
 AliAnalysisAlien.cxx:3531
 AliAnalysisAlien.cxx:3532
 AliAnalysisAlien.cxx:3533
 AliAnalysisAlien.cxx:3534
 AliAnalysisAlien.cxx:3535
 AliAnalysisAlien.cxx:3536
 AliAnalysisAlien.cxx:3537
 AliAnalysisAlien.cxx:3538
 AliAnalysisAlien.cxx:3539
 AliAnalysisAlien.cxx:3540
 AliAnalysisAlien.cxx:3541
 AliAnalysisAlien.cxx:3542
 AliAnalysisAlien.cxx:3543
 AliAnalysisAlien.cxx:3544
 AliAnalysisAlien.cxx:3545
 AliAnalysisAlien.cxx:3546
 AliAnalysisAlien.cxx:3547
 AliAnalysisAlien.cxx:3548
 AliAnalysisAlien.cxx:3549
 AliAnalysisAlien.cxx:3550
 AliAnalysisAlien.cxx:3551
 AliAnalysisAlien.cxx:3552
 AliAnalysisAlien.cxx:3553
 AliAnalysisAlien.cxx:3554
 AliAnalysisAlien.cxx:3555
 AliAnalysisAlien.cxx:3556
 AliAnalysisAlien.cxx:3557
 AliAnalysisAlien.cxx:3558
 AliAnalysisAlien.cxx:3559
 AliAnalysisAlien.cxx:3560
 AliAnalysisAlien.cxx:3561
 AliAnalysisAlien.cxx:3562
 AliAnalysisAlien.cxx:3563
 AliAnalysisAlien.cxx:3564
 AliAnalysisAlien.cxx:3565
 AliAnalysisAlien.cxx:3566
 AliAnalysisAlien.cxx:3567
 AliAnalysisAlien.cxx:3568
 AliAnalysisAlien.cxx:3569
 AliAnalysisAlien.cxx:3570
 AliAnalysisAlien.cxx:3571
 AliAnalysisAlien.cxx:3572
 AliAnalysisAlien.cxx:3573
 AliAnalysisAlien.cxx:3574
 AliAnalysisAlien.cxx:3575
 AliAnalysisAlien.cxx:3576
 AliAnalysisAlien.cxx:3577
 AliAnalysisAlien.cxx:3578
 AliAnalysisAlien.cxx:3579
 AliAnalysisAlien.cxx:3580
 AliAnalysisAlien.cxx:3581
 AliAnalysisAlien.cxx:3582
 AliAnalysisAlien.cxx:3583
 AliAnalysisAlien.cxx:3584
 AliAnalysisAlien.cxx:3585
 AliAnalysisAlien.cxx:3586
 AliAnalysisAlien.cxx:3587
 AliAnalysisAlien.cxx:3588
 AliAnalysisAlien.cxx:3589
 AliAnalysisAlien.cxx:3590
 AliAnalysisAlien.cxx:3591
 AliAnalysisAlien.cxx:3592
 AliAnalysisAlien.cxx:3593
 AliAnalysisAlien.cxx:3594
 AliAnalysisAlien.cxx:3595
 AliAnalysisAlien.cxx:3596
 AliAnalysisAlien.cxx:3597
 AliAnalysisAlien.cxx:3598
 AliAnalysisAlien.cxx:3599
 AliAnalysisAlien.cxx:3600
 AliAnalysisAlien.cxx:3601
 AliAnalysisAlien.cxx:3602
 AliAnalysisAlien.cxx:3603
 AliAnalysisAlien.cxx:3604
 AliAnalysisAlien.cxx:3605
 AliAnalysisAlien.cxx:3606
 AliAnalysisAlien.cxx:3607
 AliAnalysisAlien.cxx:3608
 AliAnalysisAlien.cxx:3609
 AliAnalysisAlien.cxx:3610
 AliAnalysisAlien.cxx:3611
 AliAnalysisAlien.cxx:3612
 AliAnalysisAlien.cxx:3613
 AliAnalysisAlien.cxx:3614
 AliAnalysisAlien.cxx:3615
 AliAnalysisAlien.cxx:3616
 AliAnalysisAlien.cxx:3617
 AliAnalysisAlien.cxx:3618
 AliAnalysisAlien.cxx:3619
 AliAnalysisAlien.cxx:3620
 AliAnalysisAlien.cxx:3621
 AliAnalysisAlien.cxx:3622
 AliAnalysisAlien.cxx:3623
 AliAnalysisAlien.cxx:3624
 AliAnalysisAlien.cxx:3625
 AliAnalysisAlien.cxx:3626
 AliAnalysisAlien.cxx:3627
 AliAnalysisAlien.cxx:3628
 AliAnalysisAlien.cxx:3629
 AliAnalysisAlien.cxx:3630
 AliAnalysisAlien.cxx:3631
 AliAnalysisAlien.cxx:3632
 AliAnalysisAlien.cxx:3633
 AliAnalysisAlien.cxx:3634
 AliAnalysisAlien.cxx:3635
 AliAnalysisAlien.cxx:3636
 AliAnalysisAlien.cxx:3637
 AliAnalysisAlien.cxx:3638
 AliAnalysisAlien.cxx:3639
 AliAnalysisAlien.cxx:3640
 AliAnalysisAlien.cxx:3641
 AliAnalysisAlien.cxx:3642
 AliAnalysisAlien.cxx:3643
 AliAnalysisAlien.cxx:3644
 AliAnalysisAlien.cxx:3645
 AliAnalysisAlien.cxx:3646
 AliAnalysisAlien.cxx:3647
 AliAnalysisAlien.cxx:3648
 AliAnalysisAlien.cxx:3649
 AliAnalysisAlien.cxx:3650
 AliAnalysisAlien.cxx:3651
 AliAnalysisAlien.cxx:3652
 AliAnalysisAlien.cxx:3653
 AliAnalysisAlien.cxx:3654
 AliAnalysisAlien.cxx:3655
 AliAnalysisAlien.cxx:3656
 AliAnalysisAlien.cxx:3657
 AliAnalysisAlien.cxx:3658
 AliAnalysisAlien.cxx:3659
 AliAnalysisAlien.cxx:3660
 AliAnalysisAlien.cxx:3661
 AliAnalysisAlien.cxx:3662
 AliAnalysisAlien.cxx:3663
 AliAnalysisAlien.cxx:3664
 AliAnalysisAlien.cxx:3665
 AliAnalysisAlien.cxx:3666
 AliAnalysisAlien.cxx:3667
 AliAnalysisAlien.cxx:3668
 AliAnalysisAlien.cxx:3669
 AliAnalysisAlien.cxx:3670
 AliAnalysisAlien.cxx:3671
 AliAnalysisAlien.cxx:3672
 AliAnalysisAlien.cxx:3673
 AliAnalysisAlien.cxx:3674
 AliAnalysisAlien.cxx:3675
 AliAnalysisAlien.cxx:3676
 AliAnalysisAlien.cxx:3677
 AliAnalysisAlien.cxx:3678
 AliAnalysisAlien.cxx:3679
 AliAnalysisAlien.cxx:3680
 AliAnalysisAlien.cxx:3681
 AliAnalysisAlien.cxx:3682
 AliAnalysisAlien.cxx:3683
 AliAnalysisAlien.cxx:3684
 AliAnalysisAlien.cxx:3685
 AliAnalysisAlien.cxx:3686
 AliAnalysisAlien.cxx:3687
 AliAnalysisAlien.cxx:3688
 AliAnalysisAlien.cxx:3689
 AliAnalysisAlien.cxx:3690
 AliAnalysisAlien.cxx:3691
 AliAnalysisAlien.cxx:3692
 AliAnalysisAlien.cxx:3693
 AliAnalysisAlien.cxx:3694
 AliAnalysisAlien.cxx:3695
 AliAnalysisAlien.cxx:3696
 AliAnalysisAlien.cxx:3697
 AliAnalysisAlien.cxx:3698
 AliAnalysisAlien.cxx:3699
 AliAnalysisAlien.cxx:3700
 AliAnalysisAlien.cxx:3701
 AliAnalysisAlien.cxx:3702
 AliAnalysisAlien.cxx:3703
 AliAnalysisAlien.cxx:3704
 AliAnalysisAlien.cxx:3705
 AliAnalysisAlien.cxx:3706
 AliAnalysisAlien.cxx:3707
 AliAnalysisAlien.cxx:3708
 AliAnalysisAlien.cxx:3709
 AliAnalysisAlien.cxx:3710
 AliAnalysisAlien.cxx:3711
 AliAnalysisAlien.cxx:3712
 AliAnalysisAlien.cxx:3713
 AliAnalysisAlien.cxx:3714
 AliAnalysisAlien.cxx:3715
 AliAnalysisAlien.cxx:3716
 AliAnalysisAlien.cxx:3717
 AliAnalysisAlien.cxx:3718
 AliAnalysisAlien.cxx:3719
 AliAnalysisAlien.cxx:3720
 AliAnalysisAlien.cxx:3721
 AliAnalysisAlien.cxx:3722
 AliAnalysisAlien.cxx:3723
 AliAnalysisAlien.cxx:3724
 AliAnalysisAlien.cxx:3725
 AliAnalysisAlien.cxx:3726
 AliAnalysisAlien.cxx:3727
 AliAnalysisAlien.cxx:3728
 AliAnalysisAlien.cxx:3729
 AliAnalysisAlien.cxx:3730
 AliAnalysisAlien.cxx:3731
 AliAnalysisAlien.cxx:3732
 AliAnalysisAlien.cxx:3733
 AliAnalysisAlien.cxx:3734
 AliAnalysisAlien.cxx:3735
 AliAnalysisAlien.cxx:3736
 AliAnalysisAlien.cxx:3737
 AliAnalysisAlien.cxx:3738
 AliAnalysisAlien.cxx:3739
 AliAnalysisAlien.cxx:3740
 AliAnalysisAlien.cxx:3741
 AliAnalysisAlien.cxx:3742
 AliAnalysisAlien.cxx:3743
 AliAnalysisAlien.cxx:3744
 AliAnalysisAlien.cxx:3745
 AliAnalysisAlien.cxx:3746
 AliAnalysisAlien.cxx:3747
 AliAnalysisAlien.cxx:3748
 AliAnalysisAlien.cxx:3749
 AliAnalysisAlien.cxx:3750
 AliAnalysisAlien.cxx:3751
 AliAnalysisAlien.cxx:3752
 AliAnalysisAlien.cxx:3753
 AliAnalysisAlien.cxx:3754
 AliAnalysisAlien.cxx:3755
 AliAnalysisAlien.cxx:3756
 AliAnalysisAlien.cxx:3757
 AliAnalysisAlien.cxx:3758
 AliAnalysisAlien.cxx:3759
 AliAnalysisAlien.cxx:3760
 AliAnalysisAlien.cxx:3761
 AliAnalysisAlien.cxx:3762
 AliAnalysisAlien.cxx:3763
 AliAnalysisAlien.cxx:3764
 AliAnalysisAlien.cxx:3765
 AliAnalysisAlien.cxx:3766
 AliAnalysisAlien.cxx:3767
 AliAnalysisAlien.cxx:3768
 AliAnalysisAlien.cxx:3769
 AliAnalysisAlien.cxx:3770
 AliAnalysisAlien.cxx:3771
 AliAnalysisAlien.cxx:3772
 AliAnalysisAlien.cxx:3773
 AliAnalysisAlien.cxx:3774
 AliAnalysisAlien.cxx:3775
 AliAnalysisAlien.cxx:3776
 AliAnalysisAlien.cxx:3777
 AliAnalysisAlien.cxx:3778
 AliAnalysisAlien.cxx:3779
 AliAnalysisAlien.cxx:3780
 AliAnalysisAlien.cxx:3781
 AliAnalysisAlien.cxx:3782
 AliAnalysisAlien.cxx:3783
 AliAnalysisAlien.cxx:3784
 AliAnalysisAlien.cxx:3785
 AliAnalysisAlien.cxx:3786
 AliAnalysisAlien.cxx:3787
 AliAnalysisAlien.cxx:3788
 AliAnalysisAlien.cxx:3789
 AliAnalysisAlien.cxx:3790
 AliAnalysisAlien.cxx:3791
 AliAnalysisAlien.cxx:3792
 AliAnalysisAlien.cxx:3793
 AliAnalysisAlien.cxx:3794
 AliAnalysisAlien.cxx:3795
 AliAnalysisAlien.cxx:3796
 AliAnalysisAlien.cxx:3797
 AliAnalysisAlien.cxx:3798
 AliAnalysisAlien.cxx:3799
 AliAnalysisAlien.cxx:3800
 AliAnalysisAlien.cxx:3801
 AliAnalysisAlien.cxx:3802
 AliAnalysisAlien.cxx:3803
 AliAnalysisAlien.cxx:3804
 AliAnalysisAlien.cxx:3805
 AliAnalysisAlien.cxx:3806
 AliAnalysisAlien.cxx:3807
 AliAnalysisAlien.cxx:3808
 AliAnalysisAlien.cxx:3809
 AliAnalysisAlien.cxx:3810
 AliAnalysisAlien.cxx:3811
 AliAnalysisAlien.cxx:3812
 AliAnalysisAlien.cxx:3813
 AliAnalysisAlien.cxx:3814
 AliAnalysisAlien.cxx:3815
 AliAnalysisAlien.cxx:3816
 AliAnalysisAlien.cxx:3817
 AliAnalysisAlien.cxx:3818
 AliAnalysisAlien.cxx:3819
 AliAnalysisAlien.cxx:3820
 AliAnalysisAlien.cxx:3821
 AliAnalysisAlien.cxx:3822
 AliAnalysisAlien.cxx:3823
 AliAnalysisAlien.cxx:3824
 AliAnalysisAlien.cxx:3825
 AliAnalysisAlien.cxx:3826
 AliAnalysisAlien.cxx:3827
 AliAnalysisAlien.cxx:3828
 AliAnalysisAlien.cxx:3829
 AliAnalysisAlien.cxx:3830
 AliAnalysisAlien.cxx:3831
 AliAnalysisAlien.cxx:3832
 AliAnalysisAlien.cxx:3833
 AliAnalysisAlien.cxx:3834
 AliAnalysisAlien.cxx:3835
 AliAnalysisAlien.cxx:3836
 AliAnalysisAlien.cxx:3837
 AliAnalysisAlien.cxx:3838
 AliAnalysisAlien.cxx:3839
 AliAnalysisAlien.cxx:3840
 AliAnalysisAlien.cxx:3841
 AliAnalysisAlien.cxx:3842
 AliAnalysisAlien.cxx:3843
 AliAnalysisAlien.cxx:3844
 AliAnalysisAlien.cxx:3845
 AliAnalysisAlien.cxx:3846
 AliAnalysisAlien.cxx:3847
 AliAnalysisAlien.cxx:3848
 AliAnalysisAlien.cxx:3849
 AliAnalysisAlien.cxx:3850
 AliAnalysisAlien.cxx:3851
 AliAnalysisAlien.cxx:3852
 AliAnalysisAlien.cxx:3853
 AliAnalysisAlien.cxx:3854
 AliAnalysisAlien.cxx:3855
 AliAnalysisAlien.cxx:3856
 AliAnalysisAlien.cxx:3857
 AliAnalysisAlien.cxx:3858
 AliAnalysisAlien.cxx:3859
 AliAnalysisAlien.cxx:3860
 AliAnalysisAlien.cxx:3861
 AliAnalysisAlien.cxx:3862
 AliAnalysisAlien.cxx:3863
 AliAnalysisAlien.cxx:3864
 AliAnalysisAlien.cxx:3865
 AliAnalysisAlien.cxx:3866
 AliAnalysisAlien.cxx:3867
 AliAnalysisAlien.cxx:3868
 AliAnalysisAlien.cxx:3869
 AliAnalysisAlien.cxx:3870
 AliAnalysisAlien.cxx:3871
 AliAnalysisAlien.cxx:3872
 AliAnalysisAlien.cxx:3873
 AliAnalysisAlien.cxx:3874
 AliAnalysisAlien.cxx:3875
 AliAnalysisAlien.cxx:3876
 AliAnalysisAlien.cxx:3877
 AliAnalysisAlien.cxx:3878
 AliAnalysisAlien.cxx:3879
 AliAnalysisAlien.cxx:3880
 AliAnalysisAlien.cxx:3881
 AliAnalysisAlien.cxx:3882
 AliAnalysisAlien.cxx:3883
 AliAnalysisAlien.cxx:3884
 AliAnalysisAlien.cxx:3885
 AliAnalysisAlien.cxx:3886
 AliAnalysisAlien.cxx:3887
 AliAnalysisAlien.cxx:3888
 AliAnalysisAlien.cxx:3889
 AliAnalysisAlien.cxx:3890
 AliAnalysisAlien.cxx:3891
 AliAnalysisAlien.cxx:3892
 AliAnalysisAlien.cxx:3893
 AliAnalysisAlien.cxx:3894
 AliAnalysisAlien.cxx:3895
 AliAnalysisAlien.cxx:3896
 AliAnalysisAlien.cxx:3897
 AliAnalysisAlien.cxx:3898
 AliAnalysisAlien.cxx:3899
 AliAnalysisAlien.cxx:3900
 AliAnalysisAlien.cxx:3901
 AliAnalysisAlien.cxx:3902
 AliAnalysisAlien.cxx:3903
 AliAnalysisAlien.cxx:3904
 AliAnalysisAlien.cxx:3905
 AliAnalysisAlien.cxx:3906
 AliAnalysisAlien.cxx:3907
 AliAnalysisAlien.cxx:3908
 AliAnalysisAlien.cxx:3909
 AliAnalysisAlien.cxx:3910
 AliAnalysisAlien.cxx:3911
 AliAnalysisAlien.cxx:3912
 AliAnalysisAlien.cxx:3913
 AliAnalysisAlien.cxx:3914
 AliAnalysisAlien.cxx:3915
 AliAnalysisAlien.cxx:3916
 AliAnalysisAlien.cxx:3917
 AliAnalysisAlien.cxx:3918
 AliAnalysisAlien.cxx:3919
 AliAnalysisAlien.cxx:3920
 AliAnalysisAlien.cxx:3921
 AliAnalysisAlien.cxx:3922
 AliAnalysisAlien.cxx:3923
 AliAnalysisAlien.cxx:3924
 AliAnalysisAlien.cxx:3925
 AliAnalysisAlien.cxx:3926
 AliAnalysisAlien.cxx:3927
 AliAnalysisAlien.cxx:3928
 AliAnalysisAlien.cxx:3929
 AliAnalysisAlien.cxx:3930
 AliAnalysisAlien.cxx:3931
 AliAnalysisAlien.cxx:3932
 AliAnalysisAlien.cxx:3933
 AliAnalysisAlien.cxx:3934
 AliAnalysisAlien.cxx:3935
 AliAnalysisAlien.cxx:3936
 AliAnalysisAlien.cxx:3937
 AliAnalysisAlien.cxx:3938
 AliAnalysisAlien.cxx:3939
 AliAnalysisAlien.cxx:3940
 AliAnalysisAlien.cxx:3941
 AliAnalysisAlien.cxx:3942
 AliAnalysisAlien.cxx:3943
 AliAnalysisAlien.cxx:3944
 AliAnalysisAlien.cxx:3945
 AliAnalysisAlien.cxx:3946
 AliAnalysisAlien.cxx:3947
 AliAnalysisAlien.cxx:3948
 AliAnalysisAlien.cxx:3949
 AliAnalysisAlien.cxx:3950
 AliAnalysisAlien.cxx:3951
 AliAnalysisAlien.cxx:3952
 AliAnalysisAlien.cxx:3953
 AliAnalysisAlien.cxx:3954
 AliAnalysisAlien.cxx:3955
 AliAnalysisAlien.cxx:3956
 AliAnalysisAlien.cxx:3957
 AliAnalysisAlien.cxx:3958
 AliAnalysisAlien.cxx:3959
 AliAnalysisAlien.cxx:3960
 AliAnalysisAlien.cxx:3961
 AliAnalysisAlien.cxx:3962
 AliAnalysisAlien.cxx:3963
 AliAnalysisAlien.cxx:3964
 AliAnalysisAlien.cxx:3965
 AliAnalysisAlien.cxx:3966
 AliAnalysisAlien.cxx:3967
 AliAnalysisAlien.cxx:3968
 AliAnalysisAlien.cxx:3969
 AliAnalysisAlien.cxx:3970
 AliAnalysisAlien.cxx:3971
 AliAnalysisAlien.cxx:3972
 AliAnalysisAlien.cxx:3973
 AliAnalysisAlien.cxx:3974
 AliAnalysisAlien.cxx:3975
 AliAnalysisAlien.cxx:3976
 AliAnalysisAlien.cxx:3977
 AliAnalysisAlien.cxx:3978
 AliAnalysisAlien.cxx:3979
 AliAnalysisAlien.cxx:3980
 AliAnalysisAlien.cxx:3981
 AliAnalysisAlien.cxx:3982
 AliAnalysisAlien.cxx:3983
 AliAnalysisAlien.cxx:3984
 AliAnalysisAlien.cxx:3985
 AliAnalysisAlien.cxx:3986
 AliAnalysisAlien.cxx:3987
 AliAnalysisAlien.cxx:3988
 AliAnalysisAlien.cxx:3989
 AliAnalysisAlien.cxx:3990
 AliAnalysisAlien.cxx:3991
 AliAnalysisAlien.cxx:3992
 AliAnalysisAlien.cxx:3993
 AliAnalysisAlien.cxx:3994
 AliAnalysisAlien.cxx:3995
 AliAnalysisAlien.cxx:3996
 AliAnalysisAlien.cxx:3997
 AliAnalysisAlien.cxx:3998
 AliAnalysisAlien.cxx:3999
 AliAnalysisAlien.cxx:4000
 AliAnalysisAlien.cxx:4001
 AliAnalysisAlien.cxx:4002
 AliAnalysisAlien.cxx:4003
 AliAnalysisAlien.cxx:4004
 AliAnalysisAlien.cxx:4005
 AliAnalysisAlien.cxx:4006
 AliAnalysisAlien.cxx:4007
 AliAnalysisAlien.cxx:4008
 AliAnalysisAlien.cxx:4009
 AliAnalysisAlien.cxx:4010
 AliAnalysisAlien.cxx:4011
 AliAnalysisAlien.cxx:4012
 AliAnalysisAlien.cxx:4013
 AliAnalysisAlien.cxx:4014
 AliAnalysisAlien.cxx:4015
 AliAnalysisAlien.cxx:4016
 AliAnalysisAlien.cxx:4017
 AliAnalysisAlien.cxx:4018
 AliAnalysisAlien.cxx:4019
 AliAnalysisAlien.cxx:4020
 AliAnalysisAlien.cxx:4021
 AliAnalysisAlien.cxx:4022
 AliAnalysisAlien.cxx:4023
 AliAnalysisAlien.cxx:4024
 AliAnalysisAlien.cxx:4025
 AliAnalysisAlien.cxx:4026
 AliAnalysisAlien.cxx:4027
 AliAnalysisAlien.cxx:4028
 AliAnalysisAlien.cxx:4029
 AliAnalysisAlien.cxx:4030
 AliAnalysisAlien.cxx:4031
 AliAnalysisAlien.cxx:4032
 AliAnalysisAlien.cxx:4033
 AliAnalysisAlien.cxx:4034
 AliAnalysisAlien.cxx:4035
 AliAnalysisAlien.cxx:4036
 AliAnalysisAlien.cxx:4037
 AliAnalysisAlien.cxx:4038
 AliAnalysisAlien.cxx:4039
 AliAnalysisAlien.cxx:4040
 AliAnalysisAlien.cxx:4041
 AliAnalysisAlien.cxx:4042
 AliAnalysisAlien.cxx:4043
 AliAnalysisAlien.cxx:4044
 AliAnalysisAlien.cxx:4045
 AliAnalysisAlien.cxx:4046
 AliAnalysisAlien.cxx:4047
 AliAnalysisAlien.cxx:4048
 AliAnalysisAlien.cxx:4049
 AliAnalysisAlien.cxx:4050
 AliAnalysisAlien.cxx:4051
 AliAnalysisAlien.cxx:4052
 AliAnalysisAlien.cxx:4053
 AliAnalysisAlien.cxx:4054
 AliAnalysisAlien.cxx:4055
 AliAnalysisAlien.cxx:4056
 AliAnalysisAlien.cxx:4057
 AliAnalysisAlien.cxx:4058
 AliAnalysisAlien.cxx:4059
 AliAnalysisAlien.cxx:4060
 AliAnalysisAlien.cxx:4061
 AliAnalysisAlien.cxx:4062
 AliAnalysisAlien.cxx:4063
 AliAnalysisAlien.cxx:4064
 AliAnalysisAlien.cxx:4065
 AliAnalysisAlien.cxx:4066
 AliAnalysisAlien.cxx:4067
 AliAnalysisAlien.cxx:4068
 AliAnalysisAlien.cxx:4069
 AliAnalysisAlien.cxx:4070
 AliAnalysisAlien.cxx:4071
 AliAnalysisAlien.cxx:4072
 AliAnalysisAlien.cxx:4073
 AliAnalysisAlien.cxx:4074
 AliAnalysisAlien.cxx:4075
 AliAnalysisAlien.cxx:4076
 AliAnalysisAlien.cxx:4077
 AliAnalysisAlien.cxx:4078
 AliAnalysisAlien.cxx:4079
 AliAnalysisAlien.cxx:4080
 AliAnalysisAlien.cxx:4081
 AliAnalysisAlien.cxx:4082
 AliAnalysisAlien.cxx:4083
 AliAnalysisAlien.cxx:4084
 AliAnalysisAlien.cxx:4085
 AliAnalysisAlien.cxx:4086
 AliAnalysisAlien.cxx:4087
 AliAnalysisAlien.cxx:4088
 AliAnalysisAlien.cxx:4089
 AliAnalysisAlien.cxx:4090
 AliAnalysisAlien.cxx:4091
 AliAnalysisAlien.cxx:4092
 AliAnalysisAlien.cxx:4093
 AliAnalysisAlien.cxx:4094
 AliAnalysisAlien.cxx:4095
 AliAnalysisAlien.cxx:4096
 AliAnalysisAlien.cxx:4097
 AliAnalysisAlien.cxx:4098
 AliAnalysisAlien.cxx:4099
 AliAnalysisAlien.cxx:4100
 AliAnalysisAlien.cxx:4101
 AliAnalysisAlien.cxx:4102
 AliAnalysisAlien.cxx:4103
 AliAnalysisAlien.cxx:4104
 AliAnalysisAlien.cxx:4105
 AliAnalysisAlien.cxx:4106
 AliAnalysisAlien.cxx:4107
 AliAnalysisAlien.cxx:4108
 AliAnalysisAlien.cxx:4109
 AliAnalysisAlien.cxx:4110
 AliAnalysisAlien.cxx:4111
 AliAnalysisAlien.cxx:4112
 AliAnalysisAlien.cxx:4113
 AliAnalysisAlien.cxx:4114
 AliAnalysisAlien.cxx:4115
 AliAnalysisAlien.cxx:4116
 AliAnalysisAlien.cxx:4117
 AliAnalysisAlien.cxx:4118
 AliAnalysisAlien.cxx:4119
 AliAnalysisAlien.cxx:4120
 AliAnalysisAlien.cxx:4121
 AliAnalysisAlien.cxx:4122
 AliAnalysisAlien.cxx:4123
 AliAnalysisAlien.cxx:4124
 AliAnalysisAlien.cxx:4125
 AliAnalysisAlien.cxx:4126
 AliAnalysisAlien.cxx:4127
 AliAnalysisAlien.cxx:4128
 AliAnalysisAlien.cxx:4129
 AliAnalysisAlien.cxx:4130
 AliAnalysisAlien.cxx:4131
 AliAnalysisAlien.cxx:4132
 AliAnalysisAlien.cxx:4133
 AliAnalysisAlien.cxx:4134
 AliAnalysisAlien.cxx:4135
 AliAnalysisAlien.cxx:4136
 AliAnalysisAlien.cxx:4137
 AliAnalysisAlien.cxx:4138
 AliAnalysisAlien.cxx:4139
 AliAnalysisAlien.cxx:4140
 AliAnalysisAlien.cxx:4141
 AliAnalysisAlien.cxx:4142
 AliAnalysisAlien.cxx:4143
 AliAnalysisAlien.cxx:4144
 AliAnalysisAlien.cxx:4145
 AliAnalysisAlien.cxx:4146
 AliAnalysisAlien.cxx:4147
 AliAnalysisAlien.cxx:4148
 AliAnalysisAlien.cxx:4149
 AliAnalysisAlien.cxx:4150
 AliAnalysisAlien.cxx:4151
 AliAnalysisAlien.cxx:4152
 AliAnalysisAlien.cxx:4153
 AliAnalysisAlien.cxx:4154
 AliAnalysisAlien.cxx:4155
 AliAnalysisAlien.cxx:4156
 AliAnalysisAlien.cxx:4157
 AliAnalysisAlien.cxx:4158
 AliAnalysisAlien.cxx:4159
 AliAnalysisAlien.cxx:4160
 AliAnalysisAlien.cxx:4161
 AliAnalysisAlien.cxx:4162
 AliAnalysisAlien.cxx:4163
 AliAnalysisAlien.cxx:4164
 AliAnalysisAlien.cxx:4165
 AliAnalysisAlien.cxx:4166
 AliAnalysisAlien.cxx:4167
 AliAnalysisAlien.cxx:4168
 AliAnalysisAlien.cxx:4169
 AliAnalysisAlien.cxx:4170
 AliAnalysisAlien.cxx:4171
 AliAnalysisAlien.cxx:4172
 AliAnalysisAlien.cxx:4173
 AliAnalysisAlien.cxx:4174
 AliAnalysisAlien.cxx:4175
 AliAnalysisAlien.cxx:4176
 AliAnalysisAlien.cxx:4177
 AliAnalysisAlien.cxx:4178
 AliAnalysisAlien.cxx:4179
 AliAnalysisAlien.cxx:4180
 AliAnalysisAlien.cxx:4181
 AliAnalysisAlien.cxx:4182
 AliAnalysisAlien.cxx:4183
 AliAnalysisAlien.cxx:4184
 AliAnalysisAlien.cxx:4185
 AliAnalysisAlien.cxx:4186
 AliAnalysisAlien.cxx:4187
 AliAnalysisAlien.cxx:4188
 AliAnalysisAlien.cxx:4189
 AliAnalysisAlien.cxx:4190
 AliAnalysisAlien.cxx:4191
 AliAnalysisAlien.cxx:4192
 AliAnalysisAlien.cxx:4193
 AliAnalysisAlien.cxx:4194
 AliAnalysisAlien.cxx:4195
 AliAnalysisAlien.cxx:4196
 AliAnalysisAlien.cxx:4197
 AliAnalysisAlien.cxx:4198
 AliAnalysisAlien.cxx:4199
 AliAnalysisAlien.cxx:4200
 AliAnalysisAlien.cxx:4201
 AliAnalysisAlien.cxx:4202
 AliAnalysisAlien.cxx:4203
 AliAnalysisAlien.cxx:4204
 AliAnalysisAlien.cxx:4205
 AliAnalysisAlien.cxx:4206
 AliAnalysisAlien.cxx:4207
 AliAnalysisAlien.cxx:4208
 AliAnalysisAlien.cxx:4209
 AliAnalysisAlien.cxx:4210
 AliAnalysisAlien.cxx:4211
 AliAnalysisAlien.cxx:4212
 AliAnalysisAlien.cxx:4213
 AliAnalysisAlien.cxx:4214
 AliAnalysisAlien.cxx:4215
 AliAnalysisAlien.cxx:4216
 AliAnalysisAlien.cxx:4217
 AliAnalysisAlien.cxx:4218
 AliAnalysisAlien.cxx:4219
 AliAnalysisAlien.cxx:4220
 AliAnalysisAlien.cxx:4221
 AliAnalysisAlien.cxx:4222
 AliAnalysisAlien.cxx:4223
 AliAnalysisAlien.cxx:4224
 AliAnalysisAlien.cxx:4225
 AliAnalysisAlien.cxx:4226
 AliAnalysisAlien.cxx:4227
 AliAnalysisAlien.cxx:4228
 AliAnalysisAlien.cxx:4229
 AliAnalysisAlien.cxx:4230
 AliAnalysisAlien.cxx:4231
 AliAnalysisAlien.cxx:4232
 AliAnalysisAlien.cxx:4233
 AliAnalysisAlien.cxx:4234
 AliAnalysisAlien.cxx:4235
 AliAnalysisAlien.cxx:4236
 AliAnalysisAlien.cxx:4237
 AliAnalysisAlien.cxx:4238
 AliAnalysisAlien.cxx:4239
 AliAnalysisAlien.cxx:4240
 AliAnalysisAlien.cxx:4241
 AliAnalysisAlien.cxx:4242
 AliAnalysisAlien.cxx:4243
 AliAnalysisAlien.cxx:4244
 AliAnalysisAlien.cxx:4245
 AliAnalysisAlien.cxx:4246
 AliAnalysisAlien.cxx:4247
 AliAnalysisAlien.cxx:4248
 AliAnalysisAlien.cxx:4249
 AliAnalysisAlien.cxx:4250
 AliAnalysisAlien.cxx:4251
 AliAnalysisAlien.cxx:4252
 AliAnalysisAlien.cxx:4253
 AliAnalysisAlien.cxx:4254
 AliAnalysisAlien.cxx:4255
 AliAnalysisAlien.cxx:4256
 AliAnalysisAlien.cxx:4257
 AliAnalysisAlien.cxx:4258
 AliAnalysisAlien.cxx:4259
 AliAnalysisAlien.cxx:4260
 AliAnalysisAlien.cxx:4261
 AliAnalysisAlien.cxx:4262
 AliAnalysisAlien.cxx:4263
 AliAnalysisAlien.cxx:4264
 AliAnalysisAlien.cxx:4265
 AliAnalysisAlien.cxx:4266
 AliAnalysisAlien.cxx:4267
 AliAnalysisAlien.cxx:4268
 AliAnalysisAlien.cxx:4269
 AliAnalysisAlien.cxx:4270
 AliAnalysisAlien.cxx:4271
 AliAnalysisAlien.cxx:4272
 AliAnalysisAlien.cxx:4273
 AliAnalysisAlien.cxx:4274
 AliAnalysisAlien.cxx:4275
 AliAnalysisAlien.cxx:4276
 AliAnalysisAlien.cxx:4277
 AliAnalysisAlien.cxx:4278
 AliAnalysisAlien.cxx:4279
 AliAnalysisAlien.cxx:4280
 AliAnalysisAlien.cxx:4281
 AliAnalysisAlien.cxx:4282
 AliAnalysisAlien.cxx:4283
 AliAnalysisAlien.cxx:4284
 AliAnalysisAlien.cxx:4285
 AliAnalysisAlien.cxx:4286
 AliAnalysisAlien.cxx:4287
 AliAnalysisAlien.cxx:4288
 AliAnalysisAlien.cxx:4289
 AliAnalysisAlien.cxx:4290
 AliAnalysisAlien.cxx:4291
 AliAnalysisAlien.cxx:4292
 AliAnalysisAlien.cxx:4293
 AliAnalysisAlien.cxx:4294
 AliAnalysisAlien.cxx:4295
 AliAnalysisAlien.cxx:4296
 AliAnalysisAlien.cxx:4297
 AliAnalysisAlien.cxx:4298
 AliAnalysisAlien.cxx:4299
 AliAnalysisAlien.cxx:4300
 AliAnalysisAlien.cxx:4301
 AliAnalysisAlien.cxx:4302
 AliAnalysisAlien.cxx:4303
 AliAnalysisAlien.cxx:4304
 AliAnalysisAlien.cxx:4305
 AliAnalysisAlien.cxx:4306
 AliAnalysisAlien.cxx:4307
 AliAnalysisAlien.cxx:4308
 AliAnalysisAlien.cxx:4309
 AliAnalysisAlien.cxx:4310
 AliAnalysisAlien.cxx:4311
 AliAnalysisAlien.cxx:4312
 AliAnalysisAlien.cxx:4313
 AliAnalysisAlien.cxx:4314
 AliAnalysisAlien.cxx:4315
 AliAnalysisAlien.cxx:4316
 AliAnalysisAlien.cxx:4317
 AliAnalysisAlien.cxx:4318
 AliAnalysisAlien.cxx:4319
 AliAnalysisAlien.cxx:4320
 AliAnalysisAlien.cxx:4321
 AliAnalysisAlien.cxx:4322
 AliAnalysisAlien.cxx:4323
 AliAnalysisAlien.cxx:4324
 AliAnalysisAlien.cxx:4325
 AliAnalysisAlien.cxx:4326
 AliAnalysisAlien.cxx:4327
 AliAnalysisAlien.cxx:4328
 AliAnalysisAlien.cxx:4329
 AliAnalysisAlien.cxx:4330
 AliAnalysisAlien.cxx:4331
 AliAnalysisAlien.cxx:4332
 AliAnalysisAlien.cxx:4333
 AliAnalysisAlien.cxx:4334
 AliAnalysisAlien.cxx:4335
 AliAnalysisAlien.cxx:4336
 AliAnalysisAlien.cxx:4337
 AliAnalysisAlien.cxx:4338
 AliAnalysisAlien.cxx:4339
 AliAnalysisAlien.cxx:4340
 AliAnalysisAlien.cxx:4341
 AliAnalysisAlien.cxx:4342
 AliAnalysisAlien.cxx:4343
 AliAnalysisAlien.cxx:4344
 AliAnalysisAlien.cxx:4345
 AliAnalysisAlien.cxx:4346
 AliAnalysisAlien.cxx:4347
 AliAnalysisAlien.cxx:4348
 AliAnalysisAlien.cxx:4349
 AliAnalysisAlien.cxx:4350
 AliAnalysisAlien.cxx:4351
 AliAnalysisAlien.cxx:4352
 AliAnalysisAlien.cxx:4353
 AliAnalysisAlien.cxx:4354
 AliAnalysisAlien.cxx:4355
 AliAnalysisAlien.cxx:4356
 AliAnalysisAlien.cxx:4357
 AliAnalysisAlien.cxx:4358
 AliAnalysisAlien.cxx:4359
 AliAnalysisAlien.cxx:4360
 AliAnalysisAlien.cxx:4361
 AliAnalysisAlien.cxx:4362
 AliAnalysisAlien.cxx:4363
 AliAnalysisAlien.cxx:4364
 AliAnalysisAlien.cxx:4365
 AliAnalysisAlien.cxx:4366
 AliAnalysisAlien.cxx:4367
 AliAnalysisAlien.cxx:4368
 AliAnalysisAlien.cxx:4369
 AliAnalysisAlien.cxx:4370
 AliAnalysisAlien.cxx:4371
 AliAnalysisAlien.cxx:4372
 AliAnalysisAlien.cxx:4373
 AliAnalysisAlien.cxx:4374
 AliAnalysisAlien.cxx:4375
 AliAnalysisAlien.cxx:4376
 AliAnalysisAlien.cxx:4377
 AliAnalysisAlien.cxx:4378
 AliAnalysisAlien.cxx:4379
 AliAnalysisAlien.cxx:4380
 AliAnalysisAlien.cxx:4381
 AliAnalysisAlien.cxx:4382
 AliAnalysisAlien.cxx:4383
 AliAnalysisAlien.cxx:4384
 AliAnalysisAlien.cxx:4385
 AliAnalysisAlien.cxx:4386
 AliAnalysisAlien.cxx:4387
 AliAnalysisAlien.cxx:4388
 AliAnalysisAlien.cxx:4389
 AliAnalysisAlien.cxx:4390
 AliAnalysisAlien.cxx:4391
 AliAnalysisAlien.cxx:4392
 AliAnalysisAlien.cxx:4393
 AliAnalysisAlien.cxx:4394
 AliAnalysisAlien.cxx:4395
 AliAnalysisAlien.cxx:4396
 AliAnalysisAlien.cxx:4397
 AliAnalysisAlien.cxx:4398
 AliAnalysisAlien.cxx:4399
 AliAnalysisAlien.cxx:4400
 AliAnalysisAlien.cxx:4401
 AliAnalysisAlien.cxx:4402
 AliAnalysisAlien.cxx:4403
 AliAnalysisAlien.cxx:4404
 AliAnalysisAlien.cxx:4405
 AliAnalysisAlien.cxx:4406
 AliAnalysisAlien.cxx:4407
 AliAnalysisAlien.cxx:4408
 AliAnalysisAlien.cxx:4409
 AliAnalysisAlien.cxx:4410
 AliAnalysisAlien.cxx:4411
 AliAnalysisAlien.cxx:4412
 AliAnalysisAlien.cxx:4413
 AliAnalysisAlien.cxx:4414
 AliAnalysisAlien.cxx:4415
 AliAnalysisAlien.cxx:4416
 AliAnalysisAlien.cxx:4417
 AliAnalysisAlien.cxx:4418
 AliAnalysisAlien.cxx:4419
 AliAnalysisAlien.cxx:4420
 AliAnalysisAlien.cxx:4421
 AliAnalysisAlien.cxx:4422
 AliAnalysisAlien.cxx:4423
 AliAnalysisAlien.cxx:4424
 AliAnalysisAlien.cxx:4425
 AliAnalysisAlien.cxx:4426
 AliAnalysisAlien.cxx:4427
 AliAnalysisAlien.cxx:4428
 AliAnalysisAlien.cxx:4429
 AliAnalysisAlien.cxx:4430
 AliAnalysisAlien.cxx:4431
 AliAnalysisAlien.cxx:4432
 AliAnalysisAlien.cxx:4433
 AliAnalysisAlien.cxx:4434
 AliAnalysisAlien.cxx:4435
 AliAnalysisAlien.cxx:4436
 AliAnalysisAlien.cxx:4437
 AliAnalysisAlien.cxx:4438
 AliAnalysisAlien.cxx:4439
 AliAnalysisAlien.cxx:4440
 AliAnalysisAlien.cxx:4441
 AliAnalysisAlien.cxx:4442
 AliAnalysisAlien.cxx:4443
 AliAnalysisAlien.cxx:4444
 AliAnalysisAlien.cxx:4445
 AliAnalysisAlien.cxx:4446
 AliAnalysisAlien.cxx:4447
 AliAnalysisAlien.cxx:4448
 AliAnalysisAlien.cxx:4449
 AliAnalysisAlien.cxx:4450
 AliAnalysisAlien.cxx:4451
 AliAnalysisAlien.cxx:4452
 AliAnalysisAlien.cxx:4453
 AliAnalysisAlien.cxx:4454
 AliAnalysisAlien.cxx:4455
 AliAnalysisAlien.cxx:4456
 AliAnalysisAlien.cxx:4457
 AliAnalysisAlien.cxx:4458
 AliAnalysisAlien.cxx:4459
 AliAnalysisAlien.cxx:4460
 AliAnalysisAlien.cxx:4461
 AliAnalysisAlien.cxx:4462
 AliAnalysisAlien.cxx:4463
 AliAnalysisAlien.cxx:4464
 AliAnalysisAlien.cxx:4465
 AliAnalysisAlien.cxx:4466
 AliAnalysisAlien.cxx:4467
 AliAnalysisAlien.cxx:4468
 AliAnalysisAlien.cxx:4469
 AliAnalysisAlien.cxx:4470
 AliAnalysisAlien.cxx:4471
 AliAnalysisAlien.cxx:4472
 AliAnalysisAlien.cxx:4473
 AliAnalysisAlien.cxx:4474
 AliAnalysisAlien.cxx:4475
 AliAnalysisAlien.cxx:4476
 AliAnalysisAlien.cxx:4477
 AliAnalysisAlien.cxx:4478
 AliAnalysisAlien.cxx:4479
 AliAnalysisAlien.cxx:4480
 AliAnalysisAlien.cxx:4481
 AliAnalysisAlien.cxx:4482
 AliAnalysisAlien.cxx:4483
 AliAnalysisAlien.cxx:4484
 AliAnalysisAlien.cxx:4485
 AliAnalysisAlien.cxx:4486
 AliAnalysisAlien.cxx:4487
 AliAnalysisAlien.cxx:4488
 AliAnalysisAlien.cxx:4489
 AliAnalysisAlien.cxx:4490
 AliAnalysisAlien.cxx:4491
 AliAnalysisAlien.cxx:4492
 AliAnalysisAlien.cxx:4493
 AliAnalysisAlien.cxx:4494
 AliAnalysisAlien.cxx:4495
 AliAnalysisAlien.cxx:4496
 AliAnalysisAlien.cxx:4497
 AliAnalysisAlien.cxx:4498
 AliAnalysisAlien.cxx:4499
 AliAnalysisAlien.cxx:4500
 AliAnalysisAlien.cxx:4501
 AliAnalysisAlien.cxx:4502
 AliAnalysisAlien.cxx:4503
 AliAnalysisAlien.cxx:4504
 AliAnalysisAlien.cxx:4505
 AliAnalysisAlien.cxx:4506
 AliAnalysisAlien.cxx:4507
 AliAnalysisAlien.cxx:4508
 AliAnalysisAlien.cxx:4509
 AliAnalysisAlien.cxx:4510
 AliAnalysisAlien.cxx:4511
 AliAnalysisAlien.cxx:4512
 AliAnalysisAlien.cxx:4513
 AliAnalysisAlien.cxx:4514
 AliAnalysisAlien.cxx:4515
 AliAnalysisAlien.cxx:4516
 AliAnalysisAlien.cxx:4517
 AliAnalysisAlien.cxx:4518
 AliAnalysisAlien.cxx:4519
 AliAnalysisAlien.cxx:4520
 AliAnalysisAlien.cxx:4521
 AliAnalysisAlien.cxx:4522
 AliAnalysisAlien.cxx:4523
 AliAnalysisAlien.cxx:4524
 AliAnalysisAlien.cxx:4525
 AliAnalysisAlien.cxx:4526
 AliAnalysisAlien.cxx:4527
 AliAnalysisAlien.cxx:4528
 AliAnalysisAlien.cxx:4529
 AliAnalysisAlien.cxx:4530
 AliAnalysisAlien.cxx:4531
 AliAnalysisAlien.cxx:4532
 AliAnalysisAlien.cxx:4533
 AliAnalysisAlien.cxx:4534
 AliAnalysisAlien.cxx:4535
 AliAnalysisAlien.cxx:4536
 AliAnalysisAlien.cxx:4537
 AliAnalysisAlien.cxx:4538
 AliAnalysisAlien.cxx:4539
 AliAnalysisAlien.cxx:4540
 AliAnalysisAlien.cxx:4541
 AliAnalysisAlien.cxx:4542
 AliAnalysisAlien.cxx:4543
 AliAnalysisAlien.cxx:4544
 AliAnalysisAlien.cxx:4545
 AliAnalysisAlien.cxx:4546
 AliAnalysisAlien.cxx:4547
 AliAnalysisAlien.cxx:4548
 AliAnalysisAlien.cxx:4549
 AliAnalysisAlien.cxx:4550
 AliAnalysisAlien.cxx:4551
 AliAnalysisAlien.cxx:4552
 AliAnalysisAlien.cxx:4553
 AliAnalysisAlien.cxx:4554
 AliAnalysisAlien.cxx:4555
 AliAnalysisAlien.cxx:4556
 AliAnalysisAlien.cxx:4557
 AliAnalysisAlien.cxx:4558
 AliAnalysisAlien.cxx:4559
 AliAnalysisAlien.cxx:4560
 AliAnalysisAlien.cxx:4561
 AliAnalysisAlien.cxx:4562
 AliAnalysisAlien.cxx:4563
 AliAnalysisAlien.cxx:4564
 AliAnalysisAlien.cxx:4565
 AliAnalysisAlien.cxx:4566
 AliAnalysisAlien.cxx:4567
 AliAnalysisAlien.cxx:4568
 AliAnalysisAlien.cxx:4569
 AliAnalysisAlien.cxx:4570
 AliAnalysisAlien.cxx:4571
 AliAnalysisAlien.cxx:4572
 AliAnalysisAlien.cxx:4573
 AliAnalysisAlien.cxx:4574
 AliAnalysisAlien.cxx:4575
 AliAnalysisAlien.cxx:4576
 AliAnalysisAlien.cxx:4577
 AliAnalysisAlien.cxx:4578
 AliAnalysisAlien.cxx:4579
 AliAnalysisAlien.cxx:4580
 AliAnalysisAlien.cxx:4581
 AliAnalysisAlien.cxx:4582
 AliAnalysisAlien.cxx:4583
 AliAnalysisAlien.cxx:4584
 AliAnalysisAlien.cxx:4585
 AliAnalysisAlien.cxx:4586
 AliAnalysisAlien.cxx:4587
 AliAnalysisAlien.cxx:4588
 AliAnalysisAlien.cxx:4589
 AliAnalysisAlien.cxx:4590
 AliAnalysisAlien.cxx:4591
 AliAnalysisAlien.cxx:4592
 AliAnalysisAlien.cxx:4593
 AliAnalysisAlien.cxx:4594
 AliAnalysisAlien.cxx:4595
 AliAnalysisAlien.cxx:4596
 AliAnalysisAlien.cxx:4597
 AliAnalysisAlien.cxx:4598
 AliAnalysisAlien.cxx:4599
 AliAnalysisAlien.cxx:4600
 AliAnalysisAlien.cxx:4601
 AliAnalysisAlien.cxx:4602
 AliAnalysisAlien.cxx:4603
 AliAnalysisAlien.cxx:4604
 AliAnalysisAlien.cxx:4605
 AliAnalysisAlien.cxx:4606
 AliAnalysisAlien.cxx:4607
 AliAnalysisAlien.cxx:4608
 AliAnalysisAlien.cxx:4609
 AliAnalysisAlien.cxx:4610
 AliAnalysisAlien.cxx:4611
 AliAnalysisAlien.cxx:4612
 AliAnalysisAlien.cxx:4613
 AliAnalysisAlien.cxx:4614
 AliAnalysisAlien.cxx:4615
 AliAnalysisAlien.cxx:4616
 AliAnalysisAlien.cxx:4617
 AliAnalysisAlien.cxx:4618
 AliAnalysisAlien.cxx:4619
 AliAnalysisAlien.cxx:4620
 AliAnalysisAlien.cxx:4621
 AliAnalysisAlien.cxx:4622
 AliAnalysisAlien.cxx:4623
 AliAnalysisAlien.cxx:4624
 AliAnalysisAlien.cxx:4625
 AliAnalysisAlien.cxx:4626
 AliAnalysisAlien.cxx:4627
 AliAnalysisAlien.cxx:4628
 AliAnalysisAlien.cxx:4629
 AliAnalysisAlien.cxx:4630
 AliAnalysisAlien.cxx:4631
 AliAnalysisAlien.cxx:4632
 AliAnalysisAlien.cxx:4633
 AliAnalysisAlien.cxx:4634
 AliAnalysisAlien.cxx:4635
 AliAnalysisAlien.cxx:4636
 AliAnalysisAlien.cxx:4637
 AliAnalysisAlien.cxx:4638
 AliAnalysisAlien.cxx:4639
 AliAnalysisAlien.cxx:4640
 AliAnalysisAlien.cxx:4641
 AliAnalysisAlien.cxx:4642
 AliAnalysisAlien.cxx:4643
 AliAnalysisAlien.cxx:4644
 AliAnalysisAlien.cxx:4645
 AliAnalysisAlien.cxx:4646
 AliAnalysisAlien.cxx:4647
 AliAnalysisAlien.cxx:4648
 AliAnalysisAlien.cxx:4649
 AliAnalysisAlien.cxx:4650
 AliAnalysisAlien.cxx:4651
 AliAnalysisAlien.cxx:4652
 AliAnalysisAlien.cxx:4653
 AliAnalysisAlien.cxx:4654
 AliAnalysisAlien.cxx:4655
 AliAnalysisAlien.cxx:4656
 AliAnalysisAlien.cxx:4657
 AliAnalysisAlien.cxx:4658
 AliAnalysisAlien.cxx:4659
 AliAnalysisAlien.cxx:4660
 AliAnalysisAlien.cxx:4661
 AliAnalysisAlien.cxx:4662
 AliAnalysisAlien.cxx:4663
 AliAnalysisAlien.cxx:4664
 AliAnalysisAlien.cxx:4665
 AliAnalysisAlien.cxx:4666
 AliAnalysisAlien.cxx:4667
 AliAnalysisAlien.cxx:4668
 AliAnalysisAlien.cxx:4669
 AliAnalysisAlien.cxx:4670
 AliAnalysisAlien.cxx:4671
 AliAnalysisAlien.cxx:4672
 AliAnalysisAlien.cxx:4673
 AliAnalysisAlien.cxx:4674
 AliAnalysisAlien.cxx:4675
 AliAnalysisAlien.cxx:4676
 AliAnalysisAlien.cxx:4677
 AliAnalysisAlien.cxx:4678
 AliAnalysisAlien.cxx:4679
 AliAnalysisAlien.cxx:4680
 AliAnalysisAlien.cxx:4681
 AliAnalysisAlien.cxx:4682
 AliAnalysisAlien.cxx:4683
 AliAnalysisAlien.cxx:4684
 AliAnalysisAlien.cxx:4685
 AliAnalysisAlien.cxx:4686
 AliAnalysisAlien.cxx:4687
 AliAnalysisAlien.cxx:4688
 AliAnalysisAlien.cxx:4689
 AliAnalysisAlien.cxx:4690
 AliAnalysisAlien.cxx:4691
 AliAnalysisAlien.cxx:4692
 AliAnalysisAlien.cxx:4693
 AliAnalysisAlien.cxx:4694
 AliAnalysisAlien.cxx:4695
 AliAnalysisAlien.cxx:4696
 AliAnalysisAlien.cxx:4697
 AliAnalysisAlien.cxx:4698
 AliAnalysisAlien.cxx:4699
 AliAnalysisAlien.cxx:4700
 AliAnalysisAlien.cxx:4701
 AliAnalysisAlien.cxx:4702
 AliAnalysisAlien.cxx:4703
 AliAnalysisAlien.cxx:4704
 AliAnalysisAlien.cxx:4705
 AliAnalysisAlien.cxx:4706
 AliAnalysisAlien.cxx:4707
 AliAnalysisAlien.cxx:4708
 AliAnalysisAlien.cxx:4709
 AliAnalysisAlien.cxx:4710
 AliAnalysisAlien.cxx:4711
 AliAnalysisAlien.cxx:4712
 AliAnalysisAlien.cxx:4713
 AliAnalysisAlien.cxx:4714
 AliAnalysisAlien.cxx:4715
 AliAnalysisAlien.cxx:4716
 AliAnalysisAlien.cxx:4717
 AliAnalysisAlien.cxx:4718
 AliAnalysisAlien.cxx:4719
 AliAnalysisAlien.cxx:4720
 AliAnalysisAlien.cxx:4721
 AliAnalysisAlien.cxx:4722
 AliAnalysisAlien.cxx:4723
 AliAnalysisAlien.cxx:4724
 AliAnalysisAlien.cxx:4725
 AliAnalysisAlien.cxx:4726
 AliAnalysisAlien.cxx:4727
 AliAnalysisAlien.cxx:4728
 AliAnalysisAlien.cxx:4729
 AliAnalysisAlien.cxx:4730
 AliAnalysisAlien.cxx:4731
 AliAnalysisAlien.cxx:4732
 AliAnalysisAlien.cxx:4733
 AliAnalysisAlien.cxx:4734
 AliAnalysisAlien.cxx:4735
 AliAnalysisAlien.cxx:4736
 AliAnalysisAlien.cxx:4737
 AliAnalysisAlien.cxx:4738
 AliAnalysisAlien.cxx:4739
 AliAnalysisAlien.cxx:4740
 AliAnalysisAlien.cxx:4741
 AliAnalysisAlien.cxx:4742
 AliAnalysisAlien.cxx:4743
 AliAnalysisAlien.cxx:4744
 AliAnalysisAlien.cxx:4745
 AliAnalysisAlien.cxx:4746
 AliAnalysisAlien.cxx:4747
 AliAnalysisAlien.cxx:4748
 AliAnalysisAlien.cxx:4749
 AliAnalysisAlien.cxx:4750
 AliAnalysisAlien.cxx:4751
 AliAnalysisAlien.cxx:4752
 AliAnalysisAlien.cxx:4753
 AliAnalysisAlien.cxx:4754
 AliAnalysisAlien.cxx:4755
 AliAnalysisAlien.cxx:4756
 AliAnalysisAlien.cxx:4757
 AliAnalysisAlien.cxx:4758
 AliAnalysisAlien.cxx:4759
 AliAnalysisAlien.cxx:4760
 AliAnalysisAlien.cxx:4761
 AliAnalysisAlien.cxx:4762
 AliAnalysisAlien.cxx:4763
 AliAnalysisAlien.cxx:4764
 AliAnalysisAlien.cxx:4765
 AliAnalysisAlien.cxx:4766
 AliAnalysisAlien.cxx:4767
 AliAnalysisAlien.cxx:4768
 AliAnalysisAlien.cxx:4769
 AliAnalysisAlien.cxx:4770
 AliAnalysisAlien.cxx:4771
 AliAnalysisAlien.cxx:4772
 AliAnalysisAlien.cxx:4773
 AliAnalysisAlien.cxx:4774
 AliAnalysisAlien.cxx:4775
 AliAnalysisAlien.cxx:4776
 AliAnalysisAlien.cxx:4777
 AliAnalysisAlien.cxx:4778
 AliAnalysisAlien.cxx:4779
 AliAnalysisAlien.cxx:4780
 AliAnalysisAlien.cxx:4781
 AliAnalysisAlien.cxx:4782
 AliAnalysisAlien.cxx:4783
 AliAnalysisAlien.cxx:4784
 AliAnalysisAlien.cxx:4785
 AliAnalysisAlien.cxx:4786
 AliAnalysisAlien.cxx:4787
 AliAnalysisAlien.cxx:4788
 AliAnalysisAlien.cxx:4789
 AliAnalysisAlien.cxx:4790
 AliAnalysisAlien.cxx:4791
 AliAnalysisAlien.cxx:4792
 AliAnalysisAlien.cxx:4793
 AliAnalysisAlien.cxx:4794
 AliAnalysisAlien.cxx:4795
 AliAnalysisAlien.cxx:4796
 AliAnalysisAlien.cxx:4797
 AliAnalysisAlien.cxx:4798
 AliAnalysisAlien.cxx:4799
 AliAnalysisAlien.cxx:4800
 AliAnalysisAlien.cxx:4801
 AliAnalysisAlien.cxx:4802
 AliAnalysisAlien.cxx:4803
 AliAnalysisAlien.cxx:4804
 AliAnalysisAlien.cxx:4805
 AliAnalysisAlien.cxx:4806
 AliAnalysisAlien.cxx:4807
 AliAnalysisAlien.cxx:4808
 AliAnalysisAlien.cxx:4809
 AliAnalysisAlien.cxx:4810
 AliAnalysisAlien.cxx:4811
 AliAnalysisAlien.cxx:4812
 AliAnalysisAlien.cxx:4813
 AliAnalysisAlien.cxx:4814
 AliAnalysisAlien.cxx:4815
 AliAnalysisAlien.cxx:4816
 AliAnalysisAlien.cxx:4817
 AliAnalysisAlien.cxx:4818
 AliAnalysisAlien.cxx:4819
 AliAnalysisAlien.cxx:4820
 AliAnalysisAlien.cxx:4821
 AliAnalysisAlien.cxx:4822
 AliAnalysisAlien.cxx:4823
 AliAnalysisAlien.cxx:4824
 AliAnalysisAlien.cxx:4825
 AliAnalysisAlien.cxx:4826
 AliAnalysisAlien.cxx:4827
 AliAnalysisAlien.cxx:4828
 AliAnalysisAlien.cxx:4829
 AliAnalysisAlien.cxx:4830
 AliAnalysisAlien.cxx:4831
 AliAnalysisAlien.cxx:4832
 AliAnalysisAlien.cxx:4833
 AliAnalysisAlien.cxx:4834
 AliAnalysisAlien.cxx:4835
 AliAnalysisAlien.cxx:4836
 AliAnalysisAlien.cxx:4837
 AliAnalysisAlien.cxx:4838
 AliAnalysisAlien.cxx:4839
 AliAnalysisAlien.cxx:4840
 AliAnalysisAlien.cxx:4841
 AliAnalysisAlien.cxx:4842
 AliAnalysisAlien.cxx:4843
 AliAnalysisAlien.cxx:4844
 AliAnalysisAlien.cxx:4845
 AliAnalysisAlien.cxx:4846
 AliAnalysisAlien.cxx:4847
 AliAnalysisAlien.cxx:4848
 AliAnalysisAlien.cxx:4849
 AliAnalysisAlien.cxx:4850
 AliAnalysisAlien.cxx:4851
 AliAnalysisAlien.cxx:4852
 AliAnalysisAlien.cxx:4853
 AliAnalysisAlien.cxx:4854
 AliAnalysisAlien.cxx:4855
 AliAnalysisAlien.cxx:4856
 AliAnalysisAlien.cxx:4857
 AliAnalysisAlien.cxx:4858
 AliAnalysisAlien.cxx:4859
 AliAnalysisAlien.cxx:4860
 AliAnalysisAlien.cxx:4861
 AliAnalysisAlien.cxx:4862
 AliAnalysisAlien.cxx:4863
 AliAnalysisAlien.cxx:4864
 AliAnalysisAlien.cxx:4865
 AliAnalysisAlien.cxx:4866
 AliAnalysisAlien.cxx:4867
 AliAnalysisAlien.cxx:4868
 AliAnalysisAlien.cxx:4869
 AliAnalysisAlien.cxx:4870
 AliAnalysisAlien.cxx:4871
 AliAnalysisAlien.cxx:4872
 AliAnalysisAlien.cxx:4873
 AliAnalysisAlien.cxx:4874
 AliAnalysisAlien.cxx:4875
 AliAnalysisAlien.cxx:4876
 AliAnalysisAlien.cxx:4877
 AliAnalysisAlien.cxx:4878
 AliAnalysisAlien.cxx:4879
 AliAnalysisAlien.cxx:4880
 AliAnalysisAlien.cxx:4881
 AliAnalysisAlien.cxx:4882
 AliAnalysisAlien.cxx:4883
 AliAnalysisAlien.cxx:4884
 AliAnalysisAlien.cxx:4885
 AliAnalysisAlien.cxx:4886
 AliAnalysisAlien.cxx:4887
 AliAnalysisAlien.cxx:4888
 AliAnalysisAlien.cxx:4889
 AliAnalysisAlien.cxx:4890
 AliAnalysisAlien.cxx:4891
 AliAnalysisAlien.cxx:4892
 AliAnalysisAlien.cxx:4893
 AliAnalysisAlien.cxx:4894
 AliAnalysisAlien.cxx:4895
 AliAnalysisAlien.cxx:4896
 AliAnalysisAlien.cxx:4897
 AliAnalysisAlien.cxx:4898
 AliAnalysisAlien.cxx:4899
 AliAnalysisAlien.cxx:4900
 AliAnalysisAlien.cxx:4901
 AliAnalysisAlien.cxx:4902
 AliAnalysisAlien.cxx:4903
 AliAnalysisAlien.cxx:4904
 AliAnalysisAlien.cxx:4905
 AliAnalysisAlien.cxx:4906
 AliAnalysisAlien.cxx:4907
 AliAnalysisAlien.cxx:4908
 AliAnalysisAlien.cxx:4909
 AliAnalysisAlien.cxx:4910
 AliAnalysisAlien.cxx:4911
 AliAnalysisAlien.cxx:4912
 AliAnalysisAlien.cxx:4913
 AliAnalysisAlien.cxx:4914
 AliAnalysisAlien.cxx:4915
 AliAnalysisAlien.cxx:4916
 AliAnalysisAlien.cxx:4917
 AliAnalysisAlien.cxx:4918
 AliAnalysisAlien.cxx:4919
 AliAnalysisAlien.cxx:4920
 AliAnalysisAlien.cxx:4921
 AliAnalysisAlien.cxx:4922
 AliAnalysisAlien.cxx:4923
 AliAnalysisAlien.cxx:4924
 AliAnalysisAlien.cxx:4925
 AliAnalysisAlien.cxx:4926
 AliAnalysisAlien.cxx:4927
 AliAnalysisAlien.cxx:4928
 AliAnalysisAlien.cxx:4929
 AliAnalysisAlien.cxx:4930
 AliAnalysisAlien.cxx:4931
 AliAnalysisAlien.cxx:4932
 AliAnalysisAlien.cxx:4933
 AliAnalysisAlien.cxx:4934
 AliAnalysisAlien.cxx:4935
 AliAnalysisAlien.cxx:4936
 AliAnalysisAlien.cxx:4937
 AliAnalysisAlien.cxx:4938
 AliAnalysisAlien.cxx:4939
 AliAnalysisAlien.cxx:4940
 AliAnalysisAlien.cxx:4941
 AliAnalysisAlien.cxx:4942
 AliAnalysisAlien.cxx:4943
 AliAnalysisAlien.cxx:4944
 AliAnalysisAlien.cxx:4945
 AliAnalysisAlien.cxx:4946
 AliAnalysisAlien.cxx:4947
 AliAnalysisAlien.cxx:4948
 AliAnalysisAlien.cxx:4949
 AliAnalysisAlien.cxx:4950
 AliAnalysisAlien.cxx:4951
 AliAnalysisAlien.cxx:4952
 AliAnalysisAlien.cxx:4953
 AliAnalysisAlien.cxx:4954
 AliAnalysisAlien.cxx:4955
 AliAnalysisAlien.cxx:4956
 AliAnalysisAlien.cxx:4957
 AliAnalysisAlien.cxx:4958
 AliAnalysisAlien.cxx:4959
 AliAnalysisAlien.cxx:4960
 AliAnalysisAlien.cxx:4961
 AliAnalysisAlien.cxx:4962
 AliAnalysisAlien.cxx:4963
 AliAnalysisAlien.cxx:4964
 AliAnalysisAlien.cxx:4965
 AliAnalysisAlien.cxx:4966
 AliAnalysisAlien.cxx:4967
 AliAnalysisAlien.cxx:4968
 AliAnalysisAlien.cxx:4969
 AliAnalysisAlien.cxx:4970
 AliAnalysisAlien.cxx:4971
 AliAnalysisAlien.cxx:4972
 AliAnalysisAlien.cxx:4973
 AliAnalysisAlien.cxx:4974
 AliAnalysisAlien.cxx:4975
 AliAnalysisAlien.cxx:4976
 AliAnalysisAlien.cxx:4977
 AliAnalysisAlien.cxx:4978
 AliAnalysisAlien.cxx:4979
 AliAnalysisAlien.cxx:4980
 AliAnalysisAlien.cxx:4981
 AliAnalysisAlien.cxx:4982
 AliAnalysisAlien.cxx:4983
 AliAnalysisAlien.cxx:4984
 AliAnalysisAlien.cxx:4985
 AliAnalysisAlien.cxx:4986
 AliAnalysisAlien.cxx:4987
 AliAnalysisAlien.cxx:4988
 AliAnalysisAlien.cxx:4989
 AliAnalysisAlien.cxx:4990
 AliAnalysisAlien.cxx:4991
 AliAnalysisAlien.cxx:4992
 AliAnalysisAlien.cxx:4993
 AliAnalysisAlien.cxx:4994
 AliAnalysisAlien.cxx:4995
 AliAnalysisAlien.cxx:4996
 AliAnalysisAlien.cxx:4997
 AliAnalysisAlien.cxx:4998
 AliAnalysisAlien.cxx:4999
 AliAnalysisAlien.cxx:5000
 AliAnalysisAlien.cxx:5001
 AliAnalysisAlien.cxx:5002
 AliAnalysisAlien.cxx:5003
 AliAnalysisAlien.cxx:5004
 AliAnalysisAlien.cxx:5005
 AliAnalysisAlien.cxx:5006
 AliAnalysisAlien.cxx:5007
 AliAnalysisAlien.cxx:5008
 AliAnalysisAlien.cxx:5009
 AliAnalysisAlien.cxx:5010
 AliAnalysisAlien.cxx:5011
 AliAnalysisAlien.cxx:5012
 AliAnalysisAlien.cxx:5013
 AliAnalysisAlien.cxx:5014
 AliAnalysisAlien.cxx:5015
 AliAnalysisAlien.cxx:5016
 AliAnalysisAlien.cxx:5017
 AliAnalysisAlien.cxx:5018
 AliAnalysisAlien.cxx:5019
 AliAnalysisAlien.cxx:5020
 AliAnalysisAlien.cxx:5021
 AliAnalysisAlien.cxx:5022
 AliAnalysisAlien.cxx:5023
 AliAnalysisAlien.cxx:5024
 AliAnalysisAlien.cxx:5025
 AliAnalysisAlien.cxx:5026
 AliAnalysisAlien.cxx:5027
 AliAnalysisAlien.cxx:5028
 AliAnalysisAlien.cxx:5029
 AliAnalysisAlien.cxx:5030
 AliAnalysisAlien.cxx:5031
 AliAnalysisAlien.cxx:5032
 AliAnalysisAlien.cxx:5033
 AliAnalysisAlien.cxx:5034
 AliAnalysisAlien.cxx:5035
 AliAnalysisAlien.cxx:5036
 AliAnalysisAlien.cxx:5037
 AliAnalysisAlien.cxx:5038
 AliAnalysisAlien.cxx:5039
 AliAnalysisAlien.cxx:5040
 AliAnalysisAlien.cxx:5041
 AliAnalysisAlien.cxx:5042
 AliAnalysisAlien.cxx:5043
 AliAnalysisAlien.cxx:5044
 AliAnalysisAlien.cxx:5045
 AliAnalysisAlien.cxx:5046
 AliAnalysisAlien.cxx:5047
 AliAnalysisAlien.cxx:5048
 AliAnalysisAlien.cxx:5049
 AliAnalysisAlien.cxx:5050
 AliAnalysisAlien.cxx:5051
 AliAnalysisAlien.cxx:5052
 AliAnalysisAlien.cxx:5053
 AliAnalysisAlien.cxx:5054
 AliAnalysisAlien.cxx:5055
 AliAnalysisAlien.cxx:5056
 AliAnalysisAlien.cxx:5057
 AliAnalysisAlien.cxx:5058
 AliAnalysisAlien.cxx:5059
 AliAnalysisAlien.cxx:5060
 AliAnalysisAlien.cxx:5061
 AliAnalysisAlien.cxx:5062
 AliAnalysisAlien.cxx:5063
 AliAnalysisAlien.cxx:5064
 AliAnalysisAlien.cxx:5065
 AliAnalysisAlien.cxx:5066
 AliAnalysisAlien.cxx:5067
 AliAnalysisAlien.cxx:5068
 AliAnalysisAlien.cxx:5069
 AliAnalysisAlien.cxx:5070
 AliAnalysisAlien.cxx:5071
 AliAnalysisAlien.cxx:5072
 AliAnalysisAlien.cxx:5073
 AliAnalysisAlien.cxx:5074
 AliAnalysisAlien.cxx:5075
 AliAnalysisAlien.cxx:5076
 AliAnalysisAlien.cxx:5077
 AliAnalysisAlien.cxx:5078
 AliAnalysisAlien.cxx:5079
 AliAnalysisAlien.cxx:5080
 AliAnalysisAlien.cxx:5081
 AliAnalysisAlien.cxx:5082
 AliAnalysisAlien.cxx:5083
 AliAnalysisAlien.cxx:5084
 AliAnalysisAlien.cxx:5085
 AliAnalysisAlien.cxx:5086
 AliAnalysisAlien.cxx:5087
 AliAnalysisAlien.cxx:5088
 AliAnalysisAlien.cxx:5089
 AliAnalysisAlien.cxx:5090
 AliAnalysisAlien.cxx:5091
 AliAnalysisAlien.cxx:5092
 AliAnalysisAlien.cxx:5093
 AliAnalysisAlien.cxx:5094
 AliAnalysisAlien.cxx:5095
 AliAnalysisAlien.cxx:5096
 AliAnalysisAlien.cxx:5097
 AliAnalysisAlien.cxx:5098
 AliAnalysisAlien.cxx:5099
 AliAnalysisAlien.cxx:5100
 AliAnalysisAlien.cxx:5101
 AliAnalysisAlien.cxx:5102
 AliAnalysisAlien.cxx:5103
 AliAnalysisAlien.cxx:5104
 AliAnalysisAlien.cxx:5105
 AliAnalysisAlien.cxx:5106
 AliAnalysisAlien.cxx:5107
 AliAnalysisAlien.cxx:5108
 AliAnalysisAlien.cxx:5109
 AliAnalysisAlien.cxx:5110
 AliAnalysisAlien.cxx:5111
 AliAnalysisAlien.cxx:5112
 AliAnalysisAlien.cxx:5113
 AliAnalysisAlien.cxx:5114
 AliAnalysisAlien.cxx:5115
 AliAnalysisAlien.cxx:5116
 AliAnalysisAlien.cxx:5117
 AliAnalysisAlien.cxx:5118
 AliAnalysisAlien.cxx:5119
 AliAnalysisAlien.cxx:5120
 AliAnalysisAlien.cxx:5121
 AliAnalysisAlien.cxx:5122
 AliAnalysisAlien.cxx:5123
 AliAnalysisAlien.cxx:5124
 AliAnalysisAlien.cxx:5125
 AliAnalysisAlien.cxx:5126
 AliAnalysisAlien.cxx:5127
 AliAnalysisAlien.cxx:5128
 AliAnalysisAlien.cxx:5129
 AliAnalysisAlien.cxx:5130
 AliAnalysisAlien.cxx:5131
 AliAnalysisAlien.cxx:5132
 AliAnalysisAlien.cxx:5133
 AliAnalysisAlien.cxx:5134
 AliAnalysisAlien.cxx:5135
 AliAnalysisAlien.cxx:5136
 AliAnalysisAlien.cxx:5137
 AliAnalysisAlien.cxx:5138
 AliAnalysisAlien.cxx:5139
 AliAnalysisAlien.cxx:5140
 AliAnalysisAlien.cxx:5141
 AliAnalysisAlien.cxx:5142
 AliAnalysisAlien.cxx:5143
 AliAnalysisAlien.cxx:5144
 AliAnalysisAlien.cxx:5145
 AliAnalysisAlien.cxx:5146
 AliAnalysisAlien.cxx:5147
 AliAnalysisAlien.cxx:5148