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.                  *
 **************************************************************************/

/* $Id: AliVAnalysisMuon.cxx 47782 2011-02-24 18:37:31Z martinez $ */

//-----------------------------------------------------------------------------
/// \class AliVAnalysisMuon
/// Base class with utilities for muon analysis
///
/// \author Diego Stocco
//-----------------------------------------------------------------------------

#include "AliVAnalysisMuon.h"

// ROOT includes
#include "TROOT.h"
#include "TH1.h"
#include "TH2.h"
#include "TAxis.h"
#include "TCanvas.h"
#include "TLegend.h"
#include "TMath.h"
#include "TObjString.h"
#include "TObjArray.h"
#include "THashList.h"
#include "TStyle.h"
//#include "TMCProcess.h"
#include "TLorentzVector.h"
#include "TRegexp.h"

// STEER includes
#include "AliInputEventHandler.h"
#include "AliCentrality.h"

#include "AliAODEvent.h"
#include "AliAODTrack.h"
#include "AliAODMCParticle.h"
#include "AliMCEvent.h"
#include "AliMCParticle.h"
//#include "AliStack.h"
#include "AliESDEvent.h"
#include "AliESDMuonTrack.h"
#include "AliCounterCollection.h"
#include "AliVVertex.h"

// ANALYSIS includes
#include "AliAnalysisManager.h"
#include "AliAnalysisTaskSE.h"
#include "AliAnalysisDataSlot.h"
#include "AliAnalysisDataContainer.h"

// CORRFW includes
#include "AliCFGridSparse.h"

// PWG includes
#include "AliMergeableCollection.h"
#include "AliMuonEventCuts.h"
#include "AliMuonTrackCuts.h"
#include "AliMuonPairCuts.h"
#include "AliAnalysisMuonUtility.h"
#include "AliUtilityMuonAncestor.h"

/// \cond CLASSIMP
ClassImp(AliVAnalysisMuon) // Class implementation in ROOT context
/// \endcond


//________________________________________________________________________
AliVAnalysisMuon::AliVAnalysisMuon() :
  AliAnalysisTaskSE(),
  fMuonEventCuts(0x0),
  fMuonTrackCuts(0x0),
  fMuonPairCuts(0x0),
  fESDEvent(0x0),
  fAODEvent(0x0),
  fTerminateOptions(0x0),
  fChargeKeys(0x0),
  fSrcKeys(0x0),
  fPhysSelKeys(0x0),
  fWeights(0x0),
  fUtilityMuonAncestor(0x0),
  fEventCounters(0x0),
  fMergeableCollection(0x0),
  fOutputList(0x0),
  fOutputPrototypeList(0x0)
{
  /// Default ctor.
}

//________________________________________________________________________
AliVAnalysisMuon::AliVAnalysisMuon(const char *name, const AliMuonTrackCuts& trackCuts, const AliMuonPairCuts& pairCuts) :
  AliAnalysisTaskSE(name),
  fMuonEventCuts(new AliMuonEventCuts("stdEventCuts","stdEventCuts")),
  fMuonTrackCuts(new AliMuonTrackCuts(trackCuts)),
  fMuonPairCuts(new AliMuonPairCuts(pairCuts)),
  fESDEvent(0x0),
  fAODEvent(0x0),
  fTerminateOptions(0x0),
  fChargeKeys(0x0),
  fSrcKeys(0x0),
  fPhysSelKeys(0x0),
  fWeights(new THashList()),
  fUtilityMuonAncestor(0x0),
  fEventCounters(0x0),
  fMergeableCollection(0x0),
  fOutputList(0x0),
  fOutputPrototypeList(0x0)
{
  //
  /// Constructor.
  //
  
  InitKeys();
  SetTrigClassPatterns("");
  SetCentralityClasses();
  fWeights->SetOwner();

  DefineOutput(1, TObjArray::Class());
}

//________________________________________________________________________
AliVAnalysisMuon::AliVAnalysisMuon(const char *name, const AliMuonTrackCuts& trackCuts) :
  AliAnalysisTaskSE(name),
  fMuonEventCuts(new AliMuonEventCuts("stdEventCuts","stdEventCuts")),
  fMuonTrackCuts(new AliMuonTrackCuts(trackCuts)),
  fMuonPairCuts(0x0),
  fESDEvent(0x0),
  fAODEvent(0x0),
  fTerminateOptions(0x0),
  fChargeKeys(0x0),
  fSrcKeys(0x0),
  fPhysSelKeys(0x0),
  fWeights(new THashList()),
  fUtilityMuonAncestor(0x0),
  fEventCounters(0x0),
  fMergeableCollection(0x0),
  fOutputList(0x0),
  fOutputPrototypeList(0x0)
{
  //
  /// Constructor.
  //
  
  InitKeys();
  SetTrigClassPatterns("");
  SetCentralityClasses();
  fWeights->SetOwner();
  
  DefineOutput(1, TObjArray::Class());
}


//________________________________________________________________________
AliVAnalysisMuon::AliVAnalysisMuon(const char *name, const AliMuonPairCuts& pairCuts) :
  AliAnalysisTaskSE(name),
  fMuonEventCuts(new AliMuonEventCuts("stdEventCuts","stdEventCuts")),
  fMuonTrackCuts(0x0),
  fMuonPairCuts(new AliMuonPairCuts(pairCuts)),
  fESDEvent(0x0),
  fAODEvent(0x0),
  fTerminateOptions(0x0),
  fChargeKeys(0x0),
  fSrcKeys(0x0),
  fPhysSelKeys(0x0),
  fWeights(new THashList()),
  fUtilityMuonAncestor(0x0),
  fEventCounters(0x0),
  fMergeableCollection(0x0),
  fOutputList(0x0),
  fOutputPrototypeList(0x0)
{
  //
  /// Constructor.
  //
  InitKeys();
  SetTrigClassPatterns("");
  SetCentralityClasses();
  fWeights->SetOwner();
    
  DefineOutput(1, TObjArray::Class());
}


//________________________________________________________________________
AliVAnalysisMuon::~AliVAnalysisMuon()
{
  //
  /// Destructor
  //

  delete fMuonEventCuts;
  delete fMuonTrackCuts;
  delete fMuonPairCuts;
  delete fTerminateOptions;
  delete fChargeKeys;
  delete fSrcKeys;
  delete fPhysSelKeys;
  delete fWeights;
  delete fUtilityMuonAncestor;
  delete fOutputPrototypeList;


  // For proof: do not delete output containers
  if ( ! AliAnalysisManager::GetAnalysisManager() || ! AliAnalysisManager::GetAnalysisManager()->IsProofMode() ) {
    delete fOutputList;
  }
}

//___________________________________________________________________________
void AliVAnalysisMuon::FinishTaskOutput()
{
  //
  /// Remove empty histograms to reduce the number of histos to be merged
  //


  fMergeableCollection->PruneEmptyObjects();
  
  // Add stat. info from physics selection
  // (usefull when running on AODs)
  if ( fInputHandler ) {
    for ( Int_t istat=0; istat<2; istat++ ) {
      TString statType = ( istat == 0 ) ? "ALL" : "BIN0";
      TH2* hStat = dynamic_cast<TH2*>(fInputHandler->GetStatistics(statType.Data()));
      if ( hStat ) {
        TString objectName = Form("%s_%s", hStat->GetName(), GetName());
        TH2* cloneStat = static_cast<TH2*>(hStat->Clone(objectName.Data()));
        cloneStat->SetDirectory(0);
        fOutputList->Add(cloneStat);
      }
      else {
        AliWarning("Stat histogram not available");
        break;
      }
    } // loop on stat type
  }
}


//___________________________________________________________________________
void AliVAnalysisMuon::NotifyRun()
{
  /// Set run number for cuts
  if ( fMuonTrackCuts ) fMuonTrackCuts->SetRun(fInputHandler);
  if ( fMuonPairCuts ) fMuonPairCuts->SetRun(fInputHandler);
}

//___________________________________________________________________________
void AliVAnalysisMuon::UserCreateOutputObjects() 
{
  //
  /// Create output objects
  //
  AliInfo(Form("   CreateOutputObjects of task %s\n", GetName()));
  
  fOutputList = new TObjArray();
  fOutputList->SetOwner();

  fEventCounters = new AliCounterCollection("eventCounters");

  if ( ! GetCentralityClasses() ) SetCentralityClasses();
  TString centralityClasses = "";
  for ( Int_t icent=1; icent<=GetCentralityClasses()->GetNbins(); ++icent ) {
    if ( ! centralityClasses.IsNull() ) centralityClasses += "/";
    centralityClasses += GetCentralityClasses()->GetBinLabel(icent);
  }
  fEventCounters->AddRubric("selected", "yes/no");
  fEventCounters->AddRubric("trigger", 100);
  fEventCounters->AddRubric("centrality", centralityClasses);
  fEventCounters->AddRubric("run", 10000);
  fEventCounters->Init();
  fOutputList->Add(fEventCounters);
 
  fMergeableCollection = new AliMergeableCollection("outputObjects");
  fOutputList->Add(fMergeableCollection);

  PostData(1, fOutputList);
  
  fMuonEventCuts->Print();
  
  MyUserCreateOutputObjects();
  
  fUtilityMuonAncestor = new AliUtilityMuonAncestor();
}


//________________________________________________________________________
void AliVAnalysisMuon::UserExec(Option_t * /*option*/) 
{
  //
  /// Main loop
  /// Called for each event
  //

  fAODEvent = dynamic_cast<AliAODEvent*> (InputEvent());
  if ( ! fAODEvent ) 
    fESDEvent = dynamic_cast<AliESDEvent*> (InputEvent());

  if ( ! fAODEvent && ! fESDEvent ) {
    AliError ("AOD or ESD event not found. Nothing done!");
    return;
  }
  
  if ( ! fMuonEventCuts->IsSelected(fInputHandler) ) return;

  Int_t physSel = ( fInputHandler->IsEventSelected() & AliVEvent::kAny ) ? kPhysSelPass : kPhysSelReject;

  //
  // Global event info
  //
  const TObjArray* selectTrigClasses = fMuonEventCuts->GetSelectedTrigClassesInEvent(InputEvent());

  Double_t centrality = fMuonEventCuts->GetCentrality(InputEvent());
  Int_t centralityBin = GetCentralityClasses()->FindBin(centrality);
  TString centralityBinLabel = GetCentralityClasses()->GetBinLabel(centralityBin);

  TString selKey = ( physSel == kPhysSelPass ) ? "yes" : "no";
  for ( Int_t itrig=0; itrig<selectTrigClasses->GetEntries(); ++itrig ) {
    TString trigName = selectTrigClasses->At(itrig)->GetName();
    fEventCounters->Count(Form("trigger:%s/selected:%s/centrality:%s/run:%i", trigName.Data(), selKey.Data(), centralityBinLabel.Data(),fCurrentRunNumber));
  }

  ProcessEvent(fPhysSelKeys->At(physSel)->GetName(), *selectTrigClasses, centralityBinLabel);

  // Post final data. It will be written to a file with option "RECREATE"
  PostData(1, fOutputList);
}

//________________________________________________________________________
void AliVAnalysisMuon::Terminate(Option_t *)
{
  //
  /// Draw some histogram at the end.
  //
  
  if ( ! fTerminateOptions ) SetTerminateOptions();
  
  TString furtherOpt = ((TObjString*)fTerminateOptions->At(3))->GetString();
  furtherOpt.ToUpper();
  if ( gROOT->IsBatch() && ! furtherOpt.Contains("FORCEBATCH") ) return;
    
  fOutputList = dynamic_cast<TObjArray*>(GetOutputData(1));
  if ( ! fOutputList ) return;
  fEventCounters = static_cast<AliCounterCollection*>(fOutputList->FindObject("eventCounters"));
  fMergeableCollection = static_cast<AliMergeableCollection*>(fOutputList->FindObject("outputObjects"));
  
  if ( ! fMergeableCollection ) return;
  AliInfo(Form("Mergeable collection size %g MB", fMergeableCollection->EstimateSize()/1024.0/1024.0));
  if ( fTerminateOptions->At(3) ) {
    TString sopt = fTerminateOptions->At(3)->GetName();
    if ( sopt.Contains("verbose") ) fMergeableCollection->Print("*"); 
  }
  SetCentralityClassesFromOutput();
}


//________________________________________________________________________
Int_t AliVAnalysisMuon::GetParticleType ( AliVParticle* track )
{
  //
  /// Get particle type from mathced MC track
  //
  
  if ( fUtilityMuonAncestor->IsUnidentified(track,MCEvent()) ) return kUnidentified;
  if ( fUtilityMuonAncestor->IsBeautyMu(track,MCEvent()) ) return kBeautyMu;
  if ( fUtilityMuonAncestor->IsCharmMu(track,MCEvent()) ) return kCharmMu;
  if ( fUtilityMuonAncestor->IsWBosonMu(track,MCEvent()) ) return kWbosonMu;
  if ( fUtilityMuonAncestor->IsZBosonMu(track,MCEvent()) ) return kZbosonMu;
  if ( fUtilityMuonAncestor->IsDecayMu(track,MCEvent()) ) return kDecayMu;
  if ( fUtilityMuonAncestor->IsQuarkoniumMu(track,MCEvent()) ) return kQuarkoniumMu;
  if ( fUtilityMuonAncestor->IsHadron(track,MCEvent()) ) return kRecoHadron;
  if ( fUtilityMuonAncestor->IsSecondaryMu(track,MCEvent()) ) return kSecondaryMu;
  return kDecayMu;
}


//________________________________________________________________________
Bool_t AliVAnalysisMuon::AddObjectToCollection(TObject* object, Int_t index)
{
  //
  /// Add object to collection
  //
  
  if ( ! fOutputPrototypeList ) {
    fOutputPrototypeList = new TObjArray();
    fOutputPrototypeList->SetOwner();
  }
  if ( fOutputPrototypeList->FindObject(object->GetName() ) ) {
    AliWarning(Form("Object with name %s already in the list", object->GetName()));
    return kFALSE;
  }
  if ( index < 0 ) fOutputPrototypeList->Add(object);
  else fOutputPrototypeList->AddAtAndExpand(object, index);
  
  return kTRUE;
}

//________________________________________________________________________
TObject* AliVAnalysisMuon::GetMergeableObject(TString physSel, TString trigClassName, TString centrality, TString objectName)
{
  //
  /// Get mergeable object
  /// (create collection if necessary)
  //
  
  TString identifier = Form("/%s/%s/%s/", physSel.Data(), trigClassName.Data(), centrality.Data());
  
  TObject* obj = fMergeableCollection->GetObject(identifier.Data(), objectName.Data());
  if ( ! obj ) {
    CreateMergeableObjects(physSel, trigClassName, centrality);
    obj = fMergeableCollection->GetObject(identifier.Data(), objectName.Data());
    AliInfo(Form("Mergeable object collection size %g MB", fMergeableCollection->EstimateSize()/1024.0/1024.0));
  }
  return obj;
}

//________________________________________________________________________
TObject* AliVAnalysisMuon::GetSum(TString physSel, TString trigClassNames, TString centrality, TString objectPattern)
{
  //
  /// Sum objects
  /// - physSel, trigClassNames must be in the form: key1,key2
  /// - centrality must be in the form minValue_maxValue
  /// - objectPattern must be in the form match1,match2
  ///   meaning that the object name must contain match1 or match2
  ///   wildcard * is allowed
  
  if ( ! fMergeableCollection ) return 0x0;
  
  // Get centrality range
  Int_t firstCentrality = 1;
  Int_t lastCentrality = GetCentralityClasses()->GetNbins();
  
  TObjArray* centralityRange = centrality.Tokenize("_");
  Float_t range[2] = {0., 100.};
  if ( centralityRange->GetEntries() >= 2 ) {
    for ( Int_t irange=0; irange<2; ++irange ) {
      range[irange] = ((TObjString*)centralityRange->At(irange))->GetString().Atof();
    }
    firstCentrality = GetCentralityClasses()->FindBin(range[0]+0.0001);
    lastCentrality = GetCentralityClasses()->FindBin(range[1]-0.0001);
  }
  delete centralityRange;
  
  TString sumCentralityString = "";
  for ( Int_t icent=firstCentrality; icent<=lastCentrality; ++icent ) {
    if ( ! sumCentralityString.IsNull() ) sumCentralityString += ",";
    sumCentralityString += GetCentralityClasses()->GetBinLabel(icent);
  }
  
//  objectPattern.ReplaceAll(" ","");
//  TObjArray* objPatternList = objectPattern.Tokenize("&");
//  TObjArray objPatternMatrix(objPatternList->GetEntries());
//  objPatternMatrix.SetOwner();
//  for ( Int_t ikey=0; ikey<objPatternList->GetEntries(); ikey++ ) {
//    TObjArray* subKeyList = ((TObjString*)objPatternList->At(ikey))->GetString().Tokenize(",");
//    objPatternMatrix.AddAt(subKeyList, ikey);
//  }
//  delete objPatternList;
  

  TObjArray objectNameInCollection;
  objectNameInCollection.SetOwner();
  TObjArray* physSelList = physSel.Tokenize(",");
  TObjArray* trigClassList = trigClassNames.Tokenize(",");
  TObjArray* centralityList = sumCentralityString.Tokenize(",");
  for ( Int_t isel=0; isel<physSelList->GetEntries(); isel++ ) {
    for ( Int_t itrig = 0; itrig<trigClassList->GetEntries(); itrig++ ) {
      for ( Int_t icent=0; icent<centralityList->GetEntries(); icent++ ) {
        TString currId = Form("/%s/%s/%s/", physSelList->At(isel)->GetName(), trigClassList->At(itrig)->GetName(),centralityList->At(icent)->GetName());
        TList* objNameList = fMergeableCollection->CreateListOfObjectNames(currId.Data());
        for ( Int_t iobj=0; iobj<objNameList->GetEntries(); iobj++ ) {
          TString objName = objNameList->At(iobj)->GetName();
          if ( ! objectNameInCollection.FindObject(objName.Data()) ) objectNameInCollection.Add(new TObjString(objName.Data()));
        }
        delete objNameList;
      }
    }
  }
  delete physSelList;
  delete trigClassList;
  delete centralityList;
  
  TObjArray* objPatternList = objectPattern.Tokenize(",");

  TString matchingObjectNames = "";
  for ( Int_t iobj=0; iobj<objectNameInCollection.GetEntries(); iobj++ ) {
    TString objName = objectNameInCollection.At(iobj)->GetName();
    for ( Int_t ipat=0; ipat<objPatternList->GetEntries(); ipat++ ) {
      TString currPattern = ((TObjString*)objPatternList->At(ipat))->GetString();
      if ( currPattern.Contains("*") ) {
        if ( ! objName.Contains(TRegexp(currPattern.Data(),kTRUE)) ) continue;
      }
      else if ( objName != currPattern ) continue;

      if ( ! matchingObjectNames.IsNull() ) matchingObjectNames.Append(",");
      matchingObjectNames += objName;
    }
  }
  delete objPatternList;
  
//  for ( Int_t iobj=0; iobj<objectNameInCollection.GetEntries(); iobj++ ) {
//    TString objName = objectNameInCollection.At(iobj)->GetName();
//    Bool_t matchAnd = kTRUE;
//    for ( Int_t ikey=0; ikey<objPatternMatrix.GetEntries(); ikey++ ) {
//      TObjArray*  subKeyList = (TObjArray*)objPatternMatrix.At(ikey);
//      Bool_t matchOr = kFALSE;
//      for ( Int_t isub=0; isub<subKeyList->GetEntries(); isub++ ) {
//        TString subKeyString = ((TObjString*)subKeyList->At(isub))->GetString();
//        if ( subKeyString.Contains("*") ) {
//          if ( objName.Contains(TRegexp(subKeyString.Data())) ) {
//            matchOr = kTRUE;
//            break;
//          }
//        }
//        else if ( objName == subKeyString ) {
//          matchOr = kTRUE;
//          break;
//        }
//      }
//      if ( ! matchOr ) {
//        matchAnd = kFALSE;
//        break;
//      }
//    }
//    if ( ! matchAnd ) continue;
//    if ( ! matchingObjectNames.IsNull() ) matchingObjectNames.Append(",");
//    matchingObjectNames += objName;
//  }

  TString idPattern = Form("/%s/%s/%s/%s", physSel.Data(), trigClassNames.Data(), sumCentralityString.Data(), matchingObjectNames.Data());
  idPattern.ReplaceAll(" ","");
  
  AliDebug(1,Form("Sum pattern %s", idPattern.Data()));
  
  return fMergeableCollection->GetSum(idPattern.Data());
}

//___________________________________________________________________________
void AliVAnalysisMuon::CreateMergeableObjects(TString physSel, TString trigClassName, TString centrality)
{
  TObject* obj = 0x0;
  TString objectName = "";
  TString identifier = Form("/%s/%s/%s/", physSel.Data(), trigClassName.Data(), centrality.Data());
  for ( Int_t iobj=0; iobj<fOutputPrototypeList->GetEntries(); ++iobj ) {
    objectName = fOutputPrototypeList->At(iobj)->GetName();
    obj = fOutputPrototypeList->At(iobj)->Clone(objectName.Data());
    fMergeableCollection->Adopt(identifier, obj);
  } // loop on histos
}


//_______________________________________________________________________
Bool_t AliVAnalysisMuon::SetSparseRange(AliCFGridSparse* gridSparse,
                                        Int_t ivar, TString labelName,
                                        Double_t varMin, Double_t varMax,
                                        TString option)
{
  //
  /// Set range in a smart way.
  /// Allows to select a bin from the label.
  /// Check the bin limits.
  //
  
  // Keep for backward compatibility
  
  return AliAnalysisMuonUtility::SetSparseRange(gridSparse,ivar,labelName,varMin, varMax,option);
}

//________________________________________________________________________
TString AliVAnalysisMuon::GetDefaultTrigClassPatterns() const
{
  /// Get default trigger class patterns
  return fMuonEventCuts->GetDefaultTrigClassPatterns();
}

//________________________________________________________________________
void AliVAnalysisMuon::SetTrigClassPatterns(const TString pattern)
{
  /// Set trigger classes
  TString currPattern = pattern;
  if ( currPattern.IsNull() ) { 
    currPattern = GetDefaultTrigClassPatterns();
    currPattern.Append(",!CMUP*"); // by default do not account for UltraPeripheral events
  }
  fMuonEventCuts->SetTrigClassPatterns(currPattern);
}

//________________________________________________________________________
TList* AliVAnalysisMuon::GetAllSelectedTrigClasses() const
{
  /// Get trigger classes
  return fMuonEventCuts->GetAllSelectedTrigClasses();
}

//________________________________________________________________________
void AliVAnalysisMuon::SetCentralityClasses(Int_t nCentralityBins, Double_t* centralityBins)
{
  //
  /// Set centrality classes
  //
  fMuonEventCuts->SetCentralityClasses(nCentralityBins, centralityBins);
}

//________________________________________________________________________
TAxis* AliVAnalysisMuon::GetCentralityClasses() const
{
  //
  /// Set centrality classes
  //
  return fMuonEventCuts->GetCentralityClasses();
}

//________________________________________________________________________
Bool_t AliVAnalysisMuon::SetCentralityClassesFromOutput()
{
  //
  /// Get axis of centrality classes from output key
  //
  if ( ! fMergeableCollection ) return kFALSE;
  TList* centrKeyList = fMergeableCollection->CreateListOfKeys(2);
  TObjArray centrLimitsList;
  centrLimitsList.SetOwner();
  if ( ! centrKeyList ) return kFALSE;
  for ( Int_t ikey=0; ikey<centrKeyList->GetEntries(); ikey++ ) {
    TString centr = static_cast<TObjString*>(centrKeyList->At(ikey))->GetString();
    TObjArray* array = centr.Tokenize("_");
    for ( Int_t ilim=0; ilim<array->GetEntries(); ilim++ ) {
      TString currLim = static_cast<TObjString*>(array->At(ilim))->GetString();
      if ( ! centrLimitsList.FindObject(currLim.Data()) ) centrLimitsList.Add(new TObjString(currLim));
    }
    delete array;
  }
  delete centrKeyList;
  
  // Get unsorted array
  TArrayD bins(centrLimitsList.GetEntries());
  for ( Int_t ibin=0; ibin<centrLimitsList.GetEntries(); ibin++ ) {
    bins[ibin] = static_cast<TObjString*>(centrLimitsList.At(ibin))->GetString().Atof();
  }
  
  // Sort it
  Int_t index[bins.GetSize()];
  TMath::Sort(bins.GetSize(),bins.GetArray(),index, kFALSE);
  
  TArrayD sortedBins(bins.GetSize());
  for ( Int_t ibin=0; ibin<centrLimitsList.GetEntries(); ibin++ ) {
    sortedBins[ibin] = bins[index[ibin]];
  }
  
  SetCentralityClasses(sortedBins.GetSize()-1, sortedBins.GetArray());
  return kTRUE;
}

//________________________________________________________________________
void AliVAnalysisMuon::SetTerminateOptions(TString physSel, TString trigClass, TString centralityRange, TString furtherOpts)
{
  //
  /// Set terminate options
  //
  if ( ! fTerminateOptions ) {
    fTerminateOptions = new TObjArray(4);
    fTerminateOptions->SetOwner();
  }
  fTerminateOptions->AddAt(new TObjString(physSel), 0);
  fTerminateOptions->AddAt(new TObjString(trigClass), 1);
  fTerminateOptions->AddAt(new TObjString(centralityRange),2);
  fTerminateOptions->AddLast(new TObjString(furtherOpts));
}

//________________________________________________________________________
void AliVAnalysisMuon::InitKeys()
{
  //
  /// Init keys
  //
  TString chargeKeys = "MuMinus MuPlus";
  fChargeKeys = chargeKeys.Tokenize(" ");
  
  TString srcKeys = "CharmMu BeautyMu QuarkoniumMu WbosonMu ZbosonMu DecayMu SecondaryMu Hadron Unidentified";
  fSrcKeys = srcKeys.Tokenize(" ");
  
  TString physSelKeys = "PhysSelPass PhysSelReject";
  fPhysSelKeys = physSelKeys.Tokenize(" ");
}


//________________________________________________________________________
void AliVAnalysisMuon::SetWeight ( TObject* wgtObj )
{
  /// Set weight
  if ( fWeights->FindObject(wgtObj->GetName()) ) {
    AliWarning(Form("Weight object %s is already in the list",wgtObj->GetName()));
    return;
  }
  fWeights->Add(wgtObj);
}

//________________________________________________________________________
TObject* AliVAnalysisMuon::GetWeight ( const Char_t* wgtName )
{
  /// Get weight
  return fWeights->FindObject(wgtName);
}


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