ROOT logo
#include "AliAnalysisMuMuBase.h"

/**
 *
 * \ingroup pwg-muon-mumu
 *
 * \class AliAnalysisMuMuBase
 *
 * Defines the interface of a sub-analysis to be steered by AliAnalysisTaskMuMu
 *
 * Daugther class has to implement one method :
 *
 * - \ref DefineHistogramCollection
 *
 * It may implement one or several of the FillHistosForXXX methods :
 *
 * - \ref FillHistosForEvent to fill histograms for one event
 * - \ref FillHistosForMCEvent to fill histograms for one MC event
 * - \ref FillHistosForTrack to fill histograms for one track
 * - \ref FillHistosForPair to fill histograms for one muon track pair
 *
 * More rarely it may also implement :
 *
 * - \ref SetRun to do some changes when run number changes
 * - \ref Terminate to finalize before ending
 * - \ref SetEvent to e.g. append information to VEvent
 *
 * Daugther class can use the following methods :
 *
 * - \ref HasMC to know if MC information is available in the analyzed data
 * - \ref Event to access the current event
 * - \ref MCEvent to access to current MC event (if available)
 *
 * A few trivial cut methods (\ref AlwaysTrue and \ref AlwaysFalse) are defined as well and
 * can be used to register some control cut combinations (see \ref AliAnalysisMuMuCutCombination)
 *
 */

#include "AliMergeableCollection.h"
#include "AliCounterCollection.h"
#include "TList.h"
#include "TObjString.h"
#include "TMath.h"
#include "TObjArray.h"
#include "AliLog.h"
#include "AliAnalysisMuMuBinning.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TProfile.h"
#include "TRegexp.h"
#include "AliVEvent.h"
#include "AliAODEvent.h"
#include "AliESDEvent.h"
#include "AliLog.h"
#include "AliAnalysisMuMuCutCombination.h"
#include "AliAnalysisMuMuCutRegistry.h"

ClassImp(AliAnalysisMuMuBase)

//_____________________________________________________________________________
AliAnalysisMuMuBase::AliAnalysisMuMuBase()
:
TObject(),
fEventCounters(0x0),
fHistogramCollection(0x0),
fBinning(0x0),
fCutRegistry(0x0),
fEvent(0x0),
fMCEvent(0x0),
fHistogramToDisable(0x0),
fHasMC(kFALSE)
{
 /// default ctor
}

//_____________________________________________________________________________
void
AliAnalysisMuMuBase::CreateEventHistos(UInt_t dataType,
                                       const char* what,
                                       const char* hname, const char* htitle,
                                       Int_t nbinsx, Double_t xmin, Double_t xmax,
                                       Int_t nbinsy, Double_t ymin, Double_t ymax) const
{
  /** Append histograms at the event level. Depending on dataType the created histograms
   * are for real data only, MC data only, or both
   */
  
  if ( IsHistogramDisabled(hname) ) return;
  
  TObjArray pathNames;
  pathNames.SetOwner(kTRUE);
  
  if ( dataType & kHistoForData )
  {
    pathNames.Add(new TObjString(Form("/%s",what)));
  }
  if ( ( dataType & kHistoForMCInput ) && HasMC() )
  {
    pathNames.Add(new TObjString(Form("/%s/%s",MCInputPrefix(),what)));
  }
  
  CreateHistos(pathNames,hname,htitle,nbinsx,xmin,xmax,nbinsy,ymin,ymax);
}

//_____________________________________________________________________________
void
AliAnalysisMuMuBase::CreateEventHistos(UInt_t dataType,
                                       const char* eventSelection,
                                       const char* triggerClassName,
                                       const char* centrality,
                                       const char* hname, const char* htitle,
                                       Int_t nbinsx, Double_t xmin, Double_t xmax,
                                       Int_t nbinsy, Double_t ymin, Double_t ymax) const
{
  /** Append histograms at the event level. Depending on dataType the created histograms
   * are for real data only, MC data only, or both
   */
  
  if ( IsHistogramDisabled(hname) ) return;
  
  TObjArray pathNames;
  pathNames.SetOwner(kTRUE);

  if ( dataType & kHistoForData )
  {
    pathNames.Add(new TObjString(Form("/%s/%s/%s",eventSelection,triggerClassName,centrality)));
  }
  if ( ( dataType & kHistoForMCInput ) && HasMC() )
  {
    pathNames.Add(new TObjString(Form("/%s/%s/%s/%s",MCInputPrefix(),eventSelection,triggerClassName,centrality)));
  }
  
  CreateHistos(pathNames,hname,htitle,nbinsx,xmin,xmax,nbinsy,ymin,ymax);
}

//_____________________________________________________________________________
void
AliAnalysisMuMuBase::CreateHistos(const TObjArray& paths,
                                  const char* hname, const char* htitle,
                                  Int_t nbinsx, Double_t xmin, Double_t xmax,
                                  Int_t nbinsy, Double_t ymin, Double_t ymax) const
{
  /// Create multiple copies of histogram hname, one per path
  
  if ( IsHistogramDisabled(hname) ) return;

  StdoutToAliDebug(1,paths.Print(););
  
  TIter next(&paths);
  TObjString* pathName;

  while ( ( pathName = static_cast<TObjString*>(next()) ) )
  {
    TH1* h(0x0);
    
    if ( nbinsy > 0 )
    {
      AliDebug(1,Form("Created TH2F %s/%s",pathName->String().Data(),hname));
      h = new TH2F(hname,htitle,nbinsx,xmin,xmax,nbinsy,ymin,ymax);
    }
    else if ( nbinsy == 0 )
    {
      AliDebug(1,Form("Created TProfile %s/%s",pathName->String().Data(),hname));
      h = new TProfile(hname,htitle,nbinsx,xmin,xmax,ymin,ymax);
      h->Sumw2();
      static_cast<TProfile*>(h)->Approximate();
    }
    else
    {
      AliDebug(1,Form("Created TH1F %s/%s",pathName->String().Data(),hname));
      h = new TH1F(hname,htitle,nbinsx,xmin,xmax);
      
      if ( nbinsy < -1 )
      {
        h->Sumw2();
      }
    }
    
    HistogramCollection()->Adopt(pathName->String().Data(),h);
  }
  
  StdoutToAliDebug(1,HistogramCollection()->Print("*"););
}

//_____________________________________________________________________________
void
AliAnalysisMuMuBase::CreateTrackHistos(UInt_t dataType,
                                       const char* eventSelection,
                                       const char* triggerClassName,
                                       const char* centrality,
                                       const char* hname, const char* htitle,
                                       Int_t nbinsx, Double_t xmin, Double_t xmax,
                                       Int_t nbinsy, Double_t ymin, Double_t ymax) const
{
  /// Create n copies of an histogram (with name=hname, title=htitle, etc..)
  /// where n = # of track cut combinations defined
  /// see also CreateHistos
  
  
  if ( IsHistogramDisabled(hname) ) return;
  
  TObjArray pathNames;
  pathNames.SetOwner(kTRUE);
  
  TIter nextCutCombination(CutRegistry()->GetCutCombinations(AliAnalysisMuMuCutElement::kTrack));
  AliAnalysisMuMuCutCombination* cutCombination;
  
  while ( ( cutCombination = static_cast<AliAnalysisMuMuCutCombination*>(nextCutCombination())) )
  {
    if ( dataType & kHistoForData )
    {
      pathNames.Add(new TObjString(Form("/%s/%s/%s/%s",eventSelection,triggerClassName,centrality,cutCombination->GetName())));
    }
    if ( ( dataType & kHistoForMCInput ) && HasMC() )
    {
      pathNames.Add(new TObjString(Form("/%s/%s/%s/%s/%s",MCInputPrefix(),eventSelection,triggerClassName,centrality,cutCombination->GetName())));
    }
    
  }
  
  CreateHistos(pathNames,hname,htitle,nbinsx,xmin,xmax,nbinsy,ymin,ymax);
}

//_____________________________________________________________________________
void
AliAnalysisMuMuBase::CreatePairHistos(UInt_t dataType,
                                      const char* eventSelection,
                                      const char* triggerClassName,
                                      const char* centrality,
                                      const char* hname, const char* htitle,
                                      Int_t nbinsx, Double_t xmin, Double_t xmax,
                                      Int_t nbinsy, Double_t ymin, Double_t ymax) const
{
  /// Create n copies of an histogram (with name=hname, title=htitle, etc..)
  /// where n = # of track *pair* cut combinations defined
  /// see also CreateHistos

  if ( IsHistogramDisabled(hname) ) return;
  
  TObjArray pathNames;
  pathNames.SetOwner(kTRUE);
  
  TIter nextCutCombination(CutRegistry()->GetCutCombinations(AliAnalysisMuMuCutElement::kTrackPair));
  AliAnalysisMuMuCutCombination* cutCombination;
  
  while ( ( cutCombination = static_cast<AliAnalysisMuMuCutCombination*>(nextCutCombination())) )
  {
    if ( dataType & kHistoForData )
    {
      pathNames.Add(new TObjString(Form("/%s/%s/%s/%s",eventSelection,triggerClassName,centrality,cutCombination->GetName())));
    }
    if ( ( dataType & kHistoForMCInput ) && HasMC() )
    {
      pathNames.Add(new TObjString(Form("/%s/%s/%s/%s/%s",MCInputPrefix(),eventSelection,triggerClassName,centrality,cutCombination->GetName())));
    }
  }
  
  CreateHistos(pathNames,hname,htitle,nbinsx,xmin,xmax,nbinsy,ymin,ymax);
}

//_____________________________________________________________________________
void AliAnalysisMuMuBase::DisableHistograms(const char* pattern)
{
  /// Disable the histogramming of all the histograms matching the pattern
  
  TString spattern(pattern);
  if (spattern=="*")
  {
    delete fHistogramToDisable;
    fHistogramToDisable = 0x0;
  }
  
  if (!fHistogramToDisable)
  {
    fHistogramToDisable = new TList;
    fHistogramToDisable->SetOwner(kTRUE);
  }
  
  fHistogramToDisable->Add(new TObjString(spattern));
}

//_____________________________________________________________________________
Int_t AliAnalysisMuMuBase::GetNbins(Double_t xmin, Double_t xmax, Double_t xstep)
{
  /// Compute number of bins to get a given step between each values in the xmin,xmax range
  if ( TMath::AreEqualRel(xstep,0.0,1E-9) ) return 1;
  
  return TMath::Nint(TMath::Abs((xmax-xmin)/xstep));
}

//_____________________________________________________________________________
TH1* AliAnalysisMuMuBase::Histo(const char* eventSelection, const char* triggerClassName, const char* histoname)
{
  /// Get one histo back
  return fHistogramCollection ? fHistogramCollection->Histo(Form("/%s/%s/%s",eventSelection,triggerClassName,histoname)) : 0x0;
}

//_____________________________________________________________________________
TH1* AliAnalysisMuMuBase::Histo(const char* eventSelection, const char* histoname)
{
  /// Get one histo back
  return fHistogramCollection ? fHistogramCollection->Histo(eventSelection,histoname) : 0x0;
}

//_____________________________________________________________________________
TH1* AliAnalysisMuMuBase::Histo(const char* eventSelection,
                                const char* triggerClassName,
                                const char* cent,
                                const char* histoname)
{
  /// Get one histo back
  return fHistogramCollection ? fHistogramCollection->Histo(Form("/%s/%s/%s",eventSelection,triggerClassName,cent),histoname) : 0x0;
}

//_____________________________________________________________________________
TH1* AliAnalysisMuMuBase::Histo(const char* eventSelection,
                                const char* triggerClassName,
                                const char* cent,
                                const char* what,
                                const char* histoname)
{
  /// Get one histo back
  
  return fHistogramCollection ? fHistogramCollection->Histo(Form("/%s/%s/%s/%s",eventSelection,triggerClassName,cent,what),histoname) : 0x0;
}

//_____________________________________________________________________________
TProfile* AliAnalysisMuMuBase::Prof(const char* eventSelection,
                                    const char* histoname)
{
	/// Get one histo profile back
	
	return fHistogramCollection ? static_cast<TProfile*>(fHistogramCollection->GetObject(Form("/%s",eventSelection),histoname)) : 0x0;
}

//_____________________________________________________________________________
TProfile* AliAnalysisMuMuBase::Prof(const char* eventSelection,
                                    const char* triggerClassName,
                                    const char* histoname)
{
	/// Get one histo profile back
	
	return fHistogramCollection ? static_cast<TProfile*>(fHistogramCollection->GetObject(Form("/%s/%s",eventSelection,triggerClassName),histoname)) : 0x0;
}

//_____________________________________________________________________________
TProfile* AliAnalysisMuMuBase::Prof(const char* eventSelection,
                                    const char* triggerClassName,
                                    const char* cent,
                                    const char* histoname)
{
	/// Get one histo profile back
	
	return fHistogramCollection ? static_cast<TProfile*>(fHistogramCollection->GetObject(Form("/%s/%s/%s",eventSelection,triggerClassName,cent),histoname)) : 0x0;
}

//_____________________________________________________________________________
TProfile* AliAnalysisMuMuBase::Prof(const char* eventSelection,
                                    const char* triggerClassName,
                                    const char* cent,
                                    const char* what,
                                    const char* histoname)
{
	/// Get one histo profile back
	
	return fHistogramCollection ? static_cast<TProfile*>(fHistogramCollection->GetObject(Form("/%s/%s/%s/%s",eventSelection,triggerClassName,cent,what),histoname)) : 0x0;
}

//_____________________________________________________________________________
void AliAnalysisMuMuBase::Init(AliCounterCollection& cc,
                               AliMergeableCollection& hc,
                               const AliAnalysisMuMuBinning& binning,
                               const AliAnalysisMuMuCutRegistry& registry)
{
  /// Set the internal references
  fEventCounters = &cc;
  fHistogramCollection = &hc;
  fBinning = &binning;
  fCutRegistry = &registry;
}

//_____________________________________________________________________________
Bool_t AliAnalysisMuMuBase::IsHistogramDisabled(const char* hname) const
{
  /// Whether or not a given histogram (identified by its name)
  /// is disabled or not
  
  if ( !fHistogramToDisable )
  {
    return kFALSE;
  }
  TString shname(hname);
  TIter next(fHistogramToDisable);
  TObjString* str(0x0);
  
  while ( ( str = static_cast<TObjString*>(next()) ) )
  {
    if ( shname.Contains(TRegexp(str->String()) ) )
    {
      return kTRUE;
    }
  }
  return kFALSE;
}

//_____________________________________________________________________________
Bool_t AliAnalysisMuMuBase::IsHistogrammingDisabled() const
{
  /// Whether or not *all* histograms are disabled
  
  if ( fHistogramToDisable && fHistogramToDisable->GetEntries()==1 )
  {
    TObjString* r = static_cast<TObjString*>(fHistogramToDisable->First());
    if ( r->String() == "*" )
    {
      return kTRUE;
    }
  }
  return kFALSE;
}

//_____________________________________________________________________________
TH1* AliAnalysisMuMuBase::MCHisto(const char* eventSelection, const char* triggerClassName, const char* histoname)
{
  /// Get one histo back
  return fHistogramCollection ? fHistogramCollection->Histo(Form("/%s/%s/%s/%s",MCInputPrefix(),eventSelection,triggerClassName,histoname)) : 0x0;
}

//_____________________________________________________________________________
TH1* AliAnalysisMuMuBase::MCHisto(const char* eventSelection, const char* histoname)
{
  /// Get one histo back
  return fHistogramCollection ? fHistogramCollection->Histo(Form("/%s/%s/%s",MCInputPrefix(),eventSelection,histoname)) : 0x0;
}

//_____________________________________________________________________________
TH1* AliAnalysisMuMuBase::MCHisto(const char* eventSelection,
                                  const char* triggerClassName,
                                  const char* cent,
                                  const char* histoname)
{
  /// Get one histo back
  return fHistogramCollection ? fHistogramCollection->Histo(Form("/%s/%s/%s/%s",MCInputPrefix(),eventSelection,triggerClassName,cent),histoname) : 0x0;
}

//_____________________________________________________________________________
TH1* AliAnalysisMuMuBase::MCHisto(const char* eventSelection,
                                  const char* triggerClassName,
                                  const char* cent,
                                  const char* what,
                                  const char* histoname)
{
  /// Get one histo back
  
  return fHistogramCollection ? fHistogramCollection->Histo(Form("/%s/%s/%s/%s/%s",MCInputPrefix(),eventSelection,triggerClassName,cent,what),histoname) : 0x0;
}

//_____________________________________________________________________________
TProfile* AliAnalysisMuMuBase::MCProf(const char* eventSelection,
                                    const char* histoname)
{
	/// Get one histo profile back
	
	return fHistogramCollection ? static_cast<TProfile*>(fHistogramCollection->GetObject(Form("/%s/%s",MCInputPrefix(),eventSelection),histoname)) : 0x0;
}

//_____________________________________________________________________________
TProfile* AliAnalysisMuMuBase::MCProf(const char* eventSelection,
                                    const char* triggerClassName,
                                    const char* histoname)
{
	/// Get one histo profile back
	
	return fHistogramCollection ? static_cast<TProfile*>(fHistogramCollection->GetObject(Form("/%s/%s/%s",MCInputPrefix(),eventSelection,triggerClassName),histoname)) : 0x0;
}

//_____________________________________________________________________________
TProfile* AliAnalysisMuMuBase::MCProf(const char* eventSelection,
                                    const char* triggerClassName,
                                    const char* cent,
                                    const char* histoname)
{
	/// Get one histo profile back
	
	return fHistogramCollection ? static_cast<TProfile*>(fHistogramCollection->GetObject(Form("/%s/%s/%s/%s",MCInputPrefix(),eventSelection,triggerClassName,cent),histoname)) : 0x0;
}

//_____________________________________________________________________________
TProfile* AliAnalysisMuMuBase::MCProf(const char* eventSelection,
                                    const char* triggerClassName,
                                    const char* cent,
                                    const char* what,
                                    const char* histoname)
{
	/// Get one histo profile back
	
	return fHistogramCollection ? static_cast<TProfile*>(fHistogramCollection->GetObject(Form("/%s/%s/%s/%s/%s",MCInputPrefix(),eventSelection,triggerClassName,cent,what),histoname)) : 0x0;
}

//_____________________________________________________________________________
void AliAnalysisMuMuBase::SetEvent(AliVEvent* event, AliMCEvent* mcEvent)
{
  /// Set pointers to event (and mcEvent)
  /// This is the place where a sub analysis might (if really needed)
  /// append things to the event. Please DO NOT alter the original content,
  /// only add to it. Unless of course you want to shoot yourself in the
  /// foot...
  
  fEvent = event;
  fMCEvent = mcEvent;
}
 AliAnalysisMuMuBase.cxx:1
 AliAnalysisMuMuBase.cxx:2
 AliAnalysisMuMuBase.cxx:3
 AliAnalysisMuMuBase.cxx:4
 AliAnalysisMuMuBase.cxx:5
 AliAnalysisMuMuBase.cxx:6
 AliAnalysisMuMuBase.cxx:7
 AliAnalysisMuMuBase.cxx:8
 AliAnalysisMuMuBase.cxx:9
 AliAnalysisMuMuBase.cxx:10
 AliAnalysisMuMuBase.cxx:11
 AliAnalysisMuMuBase.cxx:12
 AliAnalysisMuMuBase.cxx:13
 AliAnalysisMuMuBase.cxx:14
 AliAnalysisMuMuBase.cxx:15
 AliAnalysisMuMuBase.cxx:16
 AliAnalysisMuMuBase.cxx:17
 AliAnalysisMuMuBase.cxx:18
 AliAnalysisMuMuBase.cxx:19
 AliAnalysisMuMuBase.cxx:20
 AliAnalysisMuMuBase.cxx:21
 AliAnalysisMuMuBase.cxx:22
 AliAnalysisMuMuBase.cxx:23
 AliAnalysisMuMuBase.cxx:24
 AliAnalysisMuMuBase.cxx:25
 AliAnalysisMuMuBase.cxx:26
 AliAnalysisMuMuBase.cxx:27
 AliAnalysisMuMuBase.cxx:28
 AliAnalysisMuMuBase.cxx:29
 AliAnalysisMuMuBase.cxx:30
 AliAnalysisMuMuBase.cxx:31
 AliAnalysisMuMuBase.cxx:32
 AliAnalysisMuMuBase.cxx:33
 AliAnalysisMuMuBase.cxx:34
 AliAnalysisMuMuBase.cxx:35
 AliAnalysisMuMuBase.cxx:36
 AliAnalysisMuMuBase.cxx:37
 AliAnalysisMuMuBase.cxx:38
 AliAnalysisMuMuBase.cxx:39
 AliAnalysisMuMuBase.cxx:40
 AliAnalysisMuMuBase.cxx:41
 AliAnalysisMuMuBase.cxx:42
 AliAnalysisMuMuBase.cxx:43
 AliAnalysisMuMuBase.cxx:44
 AliAnalysisMuMuBase.cxx:45
 AliAnalysisMuMuBase.cxx:46
 AliAnalysisMuMuBase.cxx:47
 AliAnalysisMuMuBase.cxx:48
 AliAnalysisMuMuBase.cxx:49
 AliAnalysisMuMuBase.cxx:50
 AliAnalysisMuMuBase.cxx:51
 AliAnalysisMuMuBase.cxx:52
 AliAnalysisMuMuBase.cxx:53
 AliAnalysisMuMuBase.cxx:54
 AliAnalysisMuMuBase.cxx:55
 AliAnalysisMuMuBase.cxx:56
 AliAnalysisMuMuBase.cxx:57
 AliAnalysisMuMuBase.cxx:58
 AliAnalysisMuMuBase.cxx:59
 AliAnalysisMuMuBase.cxx:60
 AliAnalysisMuMuBase.cxx:61
 AliAnalysisMuMuBase.cxx:62
 AliAnalysisMuMuBase.cxx:63
 AliAnalysisMuMuBase.cxx:64
 AliAnalysisMuMuBase.cxx:65
 AliAnalysisMuMuBase.cxx:66
 AliAnalysisMuMuBase.cxx:67
 AliAnalysisMuMuBase.cxx:68
 AliAnalysisMuMuBase.cxx:69
 AliAnalysisMuMuBase.cxx:70
 AliAnalysisMuMuBase.cxx:71
 AliAnalysisMuMuBase.cxx:72
 AliAnalysisMuMuBase.cxx:73
 AliAnalysisMuMuBase.cxx:74
 AliAnalysisMuMuBase.cxx:75
 AliAnalysisMuMuBase.cxx:76
 AliAnalysisMuMuBase.cxx:77
 AliAnalysisMuMuBase.cxx:78
 AliAnalysisMuMuBase.cxx:79
 AliAnalysisMuMuBase.cxx:80
 AliAnalysisMuMuBase.cxx:81
 AliAnalysisMuMuBase.cxx:82
 AliAnalysisMuMuBase.cxx:83
 AliAnalysisMuMuBase.cxx:84
 AliAnalysisMuMuBase.cxx:85
 AliAnalysisMuMuBase.cxx:86
 AliAnalysisMuMuBase.cxx:87
 AliAnalysisMuMuBase.cxx:88
 AliAnalysisMuMuBase.cxx:89
 AliAnalysisMuMuBase.cxx:90
 AliAnalysisMuMuBase.cxx:91
 AliAnalysisMuMuBase.cxx:92
 AliAnalysisMuMuBase.cxx:93
 AliAnalysisMuMuBase.cxx:94
 AliAnalysisMuMuBase.cxx:95
 AliAnalysisMuMuBase.cxx:96
 AliAnalysisMuMuBase.cxx:97
 AliAnalysisMuMuBase.cxx:98
 AliAnalysisMuMuBase.cxx:99
 AliAnalysisMuMuBase.cxx:100
 AliAnalysisMuMuBase.cxx:101
 AliAnalysisMuMuBase.cxx:102
 AliAnalysisMuMuBase.cxx:103
 AliAnalysisMuMuBase.cxx:104
 AliAnalysisMuMuBase.cxx:105
 AliAnalysisMuMuBase.cxx:106
 AliAnalysisMuMuBase.cxx:107
 AliAnalysisMuMuBase.cxx:108
 AliAnalysisMuMuBase.cxx:109
 AliAnalysisMuMuBase.cxx:110
 AliAnalysisMuMuBase.cxx:111
 AliAnalysisMuMuBase.cxx:112
 AliAnalysisMuMuBase.cxx:113
 AliAnalysisMuMuBase.cxx:114
 AliAnalysisMuMuBase.cxx:115
 AliAnalysisMuMuBase.cxx:116
 AliAnalysisMuMuBase.cxx:117
 AliAnalysisMuMuBase.cxx:118
 AliAnalysisMuMuBase.cxx:119
 AliAnalysisMuMuBase.cxx:120
 AliAnalysisMuMuBase.cxx:121
 AliAnalysisMuMuBase.cxx:122
 AliAnalysisMuMuBase.cxx:123
 AliAnalysisMuMuBase.cxx:124
 AliAnalysisMuMuBase.cxx:125
 AliAnalysisMuMuBase.cxx:126
 AliAnalysisMuMuBase.cxx:127
 AliAnalysisMuMuBase.cxx:128
 AliAnalysisMuMuBase.cxx:129
 AliAnalysisMuMuBase.cxx:130
 AliAnalysisMuMuBase.cxx:131
 AliAnalysisMuMuBase.cxx:132
 AliAnalysisMuMuBase.cxx:133
 AliAnalysisMuMuBase.cxx:134
 AliAnalysisMuMuBase.cxx:135
 AliAnalysisMuMuBase.cxx:136
 AliAnalysisMuMuBase.cxx:137
 AliAnalysisMuMuBase.cxx:138
 AliAnalysisMuMuBase.cxx:139
 AliAnalysisMuMuBase.cxx:140
 AliAnalysisMuMuBase.cxx:141
 AliAnalysisMuMuBase.cxx:142
 AliAnalysisMuMuBase.cxx:143
 AliAnalysisMuMuBase.cxx:144
 AliAnalysisMuMuBase.cxx:145
 AliAnalysisMuMuBase.cxx:146
 AliAnalysisMuMuBase.cxx:147
 AliAnalysisMuMuBase.cxx:148
 AliAnalysisMuMuBase.cxx:149
 AliAnalysisMuMuBase.cxx:150
 AliAnalysisMuMuBase.cxx:151
 AliAnalysisMuMuBase.cxx:152
 AliAnalysisMuMuBase.cxx:153
 AliAnalysisMuMuBase.cxx:154
 AliAnalysisMuMuBase.cxx:155
 AliAnalysisMuMuBase.cxx:156
 AliAnalysisMuMuBase.cxx:157
 AliAnalysisMuMuBase.cxx:158
 AliAnalysisMuMuBase.cxx:159
 AliAnalysisMuMuBase.cxx:160
 AliAnalysisMuMuBase.cxx:161
 AliAnalysisMuMuBase.cxx:162
 AliAnalysisMuMuBase.cxx:163
 AliAnalysisMuMuBase.cxx:164
 AliAnalysisMuMuBase.cxx:165
 AliAnalysisMuMuBase.cxx:166
 AliAnalysisMuMuBase.cxx:167
 AliAnalysisMuMuBase.cxx:168
 AliAnalysisMuMuBase.cxx:169
 AliAnalysisMuMuBase.cxx:170
 AliAnalysisMuMuBase.cxx:171
 AliAnalysisMuMuBase.cxx:172
 AliAnalysisMuMuBase.cxx:173
 AliAnalysisMuMuBase.cxx:174
 AliAnalysisMuMuBase.cxx:175
 AliAnalysisMuMuBase.cxx:176
 AliAnalysisMuMuBase.cxx:177
 AliAnalysisMuMuBase.cxx:178
 AliAnalysisMuMuBase.cxx:179
 AliAnalysisMuMuBase.cxx:180
 AliAnalysisMuMuBase.cxx:181
 AliAnalysisMuMuBase.cxx:182
 AliAnalysisMuMuBase.cxx:183
 AliAnalysisMuMuBase.cxx:184
 AliAnalysisMuMuBase.cxx:185
 AliAnalysisMuMuBase.cxx:186
 AliAnalysisMuMuBase.cxx:187
 AliAnalysisMuMuBase.cxx:188
 AliAnalysisMuMuBase.cxx:189
 AliAnalysisMuMuBase.cxx:190
 AliAnalysisMuMuBase.cxx:191
 AliAnalysisMuMuBase.cxx:192
 AliAnalysisMuMuBase.cxx:193
 AliAnalysisMuMuBase.cxx:194
 AliAnalysisMuMuBase.cxx:195
 AliAnalysisMuMuBase.cxx:196
 AliAnalysisMuMuBase.cxx:197
 AliAnalysisMuMuBase.cxx:198
 AliAnalysisMuMuBase.cxx:199
 AliAnalysisMuMuBase.cxx:200
 AliAnalysisMuMuBase.cxx:201
 AliAnalysisMuMuBase.cxx:202
 AliAnalysisMuMuBase.cxx:203
 AliAnalysisMuMuBase.cxx:204
 AliAnalysisMuMuBase.cxx:205
 AliAnalysisMuMuBase.cxx:206
 AliAnalysisMuMuBase.cxx:207
 AliAnalysisMuMuBase.cxx:208
 AliAnalysisMuMuBase.cxx:209
 AliAnalysisMuMuBase.cxx:210
 AliAnalysisMuMuBase.cxx:211
 AliAnalysisMuMuBase.cxx:212
 AliAnalysisMuMuBase.cxx:213
 AliAnalysisMuMuBase.cxx:214
 AliAnalysisMuMuBase.cxx:215
 AliAnalysisMuMuBase.cxx:216
 AliAnalysisMuMuBase.cxx:217
 AliAnalysisMuMuBase.cxx:218
 AliAnalysisMuMuBase.cxx:219
 AliAnalysisMuMuBase.cxx:220
 AliAnalysisMuMuBase.cxx:221
 AliAnalysisMuMuBase.cxx:222
 AliAnalysisMuMuBase.cxx:223
 AliAnalysisMuMuBase.cxx:224
 AliAnalysisMuMuBase.cxx:225
 AliAnalysisMuMuBase.cxx:226
 AliAnalysisMuMuBase.cxx:227
 AliAnalysisMuMuBase.cxx:228
 AliAnalysisMuMuBase.cxx:229
 AliAnalysisMuMuBase.cxx:230
 AliAnalysisMuMuBase.cxx:231
 AliAnalysisMuMuBase.cxx:232
 AliAnalysisMuMuBase.cxx:233
 AliAnalysisMuMuBase.cxx:234
 AliAnalysisMuMuBase.cxx:235
 AliAnalysisMuMuBase.cxx:236
 AliAnalysisMuMuBase.cxx:237
 AliAnalysisMuMuBase.cxx:238
 AliAnalysisMuMuBase.cxx:239
 AliAnalysisMuMuBase.cxx:240
 AliAnalysisMuMuBase.cxx:241
 AliAnalysisMuMuBase.cxx:242
 AliAnalysisMuMuBase.cxx:243
 AliAnalysisMuMuBase.cxx:244
 AliAnalysisMuMuBase.cxx:245
 AliAnalysisMuMuBase.cxx:246
 AliAnalysisMuMuBase.cxx:247
 AliAnalysisMuMuBase.cxx:248
 AliAnalysisMuMuBase.cxx:249
 AliAnalysisMuMuBase.cxx:250
 AliAnalysisMuMuBase.cxx:251
 AliAnalysisMuMuBase.cxx:252
 AliAnalysisMuMuBase.cxx:253
 AliAnalysisMuMuBase.cxx:254
 AliAnalysisMuMuBase.cxx:255
 AliAnalysisMuMuBase.cxx:256
 AliAnalysisMuMuBase.cxx:257
 AliAnalysisMuMuBase.cxx:258
 AliAnalysisMuMuBase.cxx:259
 AliAnalysisMuMuBase.cxx:260
 AliAnalysisMuMuBase.cxx:261
 AliAnalysisMuMuBase.cxx:262
 AliAnalysisMuMuBase.cxx:263
 AliAnalysisMuMuBase.cxx:264
 AliAnalysisMuMuBase.cxx:265
 AliAnalysisMuMuBase.cxx:266
 AliAnalysisMuMuBase.cxx:267
 AliAnalysisMuMuBase.cxx:268
 AliAnalysisMuMuBase.cxx:269
 AliAnalysisMuMuBase.cxx:270
 AliAnalysisMuMuBase.cxx:271
 AliAnalysisMuMuBase.cxx:272
 AliAnalysisMuMuBase.cxx:273
 AliAnalysisMuMuBase.cxx:274
 AliAnalysisMuMuBase.cxx:275
 AliAnalysisMuMuBase.cxx:276
 AliAnalysisMuMuBase.cxx:277
 AliAnalysisMuMuBase.cxx:278
 AliAnalysisMuMuBase.cxx:279
 AliAnalysisMuMuBase.cxx:280
 AliAnalysisMuMuBase.cxx:281
 AliAnalysisMuMuBase.cxx:282
 AliAnalysisMuMuBase.cxx:283
 AliAnalysisMuMuBase.cxx:284
 AliAnalysisMuMuBase.cxx:285
 AliAnalysisMuMuBase.cxx:286
 AliAnalysisMuMuBase.cxx:287
 AliAnalysisMuMuBase.cxx:288
 AliAnalysisMuMuBase.cxx:289
 AliAnalysisMuMuBase.cxx:290
 AliAnalysisMuMuBase.cxx:291
 AliAnalysisMuMuBase.cxx:292
 AliAnalysisMuMuBase.cxx:293
 AliAnalysisMuMuBase.cxx:294
 AliAnalysisMuMuBase.cxx:295
 AliAnalysisMuMuBase.cxx:296
 AliAnalysisMuMuBase.cxx:297
 AliAnalysisMuMuBase.cxx:298
 AliAnalysisMuMuBase.cxx:299
 AliAnalysisMuMuBase.cxx:300
 AliAnalysisMuMuBase.cxx:301
 AliAnalysisMuMuBase.cxx:302
 AliAnalysisMuMuBase.cxx:303
 AliAnalysisMuMuBase.cxx:304
 AliAnalysisMuMuBase.cxx:305
 AliAnalysisMuMuBase.cxx:306
 AliAnalysisMuMuBase.cxx:307
 AliAnalysisMuMuBase.cxx:308
 AliAnalysisMuMuBase.cxx:309
 AliAnalysisMuMuBase.cxx:310
 AliAnalysisMuMuBase.cxx:311
 AliAnalysisMuMuBase.cxx:312
 AliAnalysisMuMuBase.cxx:313
 AliAnalysisMuMuBase.cxx:314
 AliAnalysisMuMuBase.cxx:315
 AliAnalysisMuMuBase.cxx:316
 AliAnalysisMuMuBase.cxx:317
 AliAnalysisMuMuBase.cxx:318
 AliAnalysisMuMuBase.cxx:319
 AliAnalysisMuMuBase.cxx:320
 AliAnalysisMuMuBase.cxx:321
 AliAnalysisMuMuBase.cxx:322
 AliAnalysisMuMuBase.cxx:323
 AliAnalysisMuMuBase.cxx:324
 AliAnalysisMuMuBase.cxx:325
 AliAnalysisMuMuBase.cxx:326
 AliAnalysisMuMuBase.cxx:327
 AliAnalysisMuMuBase.cxx:328
 AliAnalysisMuMuBase.cxx:329
 AliAnalysisMuMuBase.cxx:330
 AliAnalysisMuMuBase.cxx:331
 AliAnalysisMuMuBase.cxx:332
 AliAnalysisMuMuBase.cxx:333
 AliAnalysisMuMuBase.cxx:334
 AliAnalysisMuMuBase.cxx:335
 AliAnalysisMuMuBase.cxx:336
 AliAnalysisMuMuBase.cxx:337
 AliAnalysisMuMuBase.cxx:338
 AliAnalysisMuMuBase.cxx:339
 AliAnalysisMuMuBase.cxx:340
 AliAnalysisMuMuBase.cxx:341
 AliAnalysisMuMuBase.cxx:342
 AliAnalysisMuMuBase.cxx:343
 AliAnalysisMuMuBase.cxx:344
 AliAnalysisMuMuBase.cxx:345
 AliAnalysisMuMuBase.cxx:346
 AliAnalysisMuMuBase.cxx:347
 AliAnalysisMuMuBase.cxx:348
 AliAnalysisMuMuBase.cxx:349
 AliAnalysisMuMuBase.cxx:350
 AliAnalysisMuMuBase.cxx:351
 AliAnalysisMuMuBase.cxx:352
 AliAnalysisMuMuBase.cxx:353
 AliAnalysisMuMuBase.cxx:354
 AliAnalysisMuMuBase.cxx:355
 AliAnalysisMuMuBase.cxx:356
 AliAnalysisMuMuBase.cxx:357
 AliAnalysisMuMuBase.cxx:358
 AliAnalysisMuMuBase.cxx:359
 AliAnalysisMuMuBase.cxx:360
 AliAnalysisMuMuBase.cxx:361
 AliAnalysisMuMuBase.cxx:362
 AliAnalysisMuMuBase.cxx:363
 AliAnalysisMuMuBase.cxx:364
 AliAnalysisMuMuBase.cxx:365
 AliAnalysisMuMuBase.cxx:366
 AliAnalysisMuMuBase.cxx:367
 AliAnalysisMuMuBase.cxx:368
 AliAnalysisMuMuBase.cxx:369
 AliAnalysisMuMuBase.cxx:370
 AliAnalysisMuMuBase.cxx:371
 AliAnalysisMuMuBase.cxx:372
 AliAnalysisMuMuBase.cxx:373
 AliAnalysisMuMuBase.cxx:374
 AliAnalysisMuMuBase.cxx:375
 AliAnalysisMuMuBase.cxx:376
 AliAnalysisMuMuBase.cxx:377
 AliAnalysisMuMuBase.cxx:378
 AliAnalysisMuMuBase.cxx:379
 AliAnalysisMuMuBase.cxx:380
 AliAnalysisMuMuBase.cxx:381
 AliAnalysisMuMuBase.cxx:382
 AliAnalysisMuMuBase.cxx:383
 AliAnalysisMuMuBase.cxx:384
 AliAnalysisMuMuBase.cxx:385
 AliAnalysisMuMuBase.cxx:386
 AliAnalysisMuMuBase.cxx:387
 AliAnalysisMuMuBase.cxx:388
 AliAnalysisMuMuBase.cxx:389
 AliAnalysisMuMuBase.cxx:390
 AliAnalysisMuMuBase.cxx:391
 AliAnalysisMuMuBase.cxx:392
 AliAnalysisMuMuBase.cxx:393
 AliAnalysisMuMuBase.cxx:394
 AliAnalysisMuMuBase.cxx:395
 AliAnalysisMuMuBase.cxx:396
 AliAnalysisMuMuBase.cxx:397
 AliAnalysisMuMuBase.cxx:398
 AliAnalysisMuMuBase.cxx:399
 AliAnalysisMuMuBase.cxx:400
 AliAnalysisMuMuBase.cxx:401
 AliAnalysisMuMuBase.cxx:402
 AliAnalysisMuMuBase.cxx:403
 AliAnalysisMuMuBase.cxx:404
 AliAnalysisMuMuBase.cxx:405
 AliAnalysisMuMuBase.cxx:406
 AliAnalysisMuMuBase.cxx:407
 AliAnalysisMuMuBase.cxx:408
 AliAnalysisMuMuBase.cxx:409
 AliAnalysisMuMuBase.cxx:410
 AliAnalysisMuMuBase.cxx:411
 AliAnalysisMuMuBase.cxx:412
 AliAnalysisMuMuBase.cxx:413
 AliAnalysisMuMuBase.cxx:414
 AliAnalysisMuMuBase.cxx:415
 AliAnalysisMuMuBase.cxx:416
 AliAnalysisMuMuBase.cxx:417
 AliAnalysisMuMuBase.cxx:418
 AliAnalysisMuMuBase.cxx:419
 AliAnalysisMuMuBase.cxx:420
 AliAnalysisMuMuBase.cxx:421
 AliAnalysisMuMuBase.cxx:422
 AliAnalysisMuMuBase.cxx:423
 AliAnalysisMuMuBase.cxx:424
 AliAnalysisMuMuBase.cxx:425
 AliAnalysisMuMuBase.cxx:426
 AliAnalysisMuMuBase.cxx:427
 AliAnalysisMuMuBase.cxx:428
 AliAnalysisMuMuBase.cxx:429
 AliAnalysisMuMuBase.cxx:430
 AliAnalysisMuMuBase.cxx:431
 AliAnalysisMuMuBase.cxx:432
 AliAnalysisMuMuBase.cxx:433
 AliAnalysisMuMuBase.cxx:434
 AliAnalysisMuMuBase.cxx:435
 AliAnalysisMuMuBase.cxx:436
 AliAnalysisMuMuBase.cxx:437
 AliAnalysisMuMuBase.cxx:438
 AliAnalysisMuMuBase.cxx:439
 AliAnalysisMuMuBase.cxx:440
 AliAnalysisMuMuBase.cxx:441
 AliAnalysisMuMuBase.cxx:442
 AliAnalysisMuMuBase.cxx:443
 AliAnalysisMuMuBase.cxx:444
 AliAnalysisMuMuBase.cxx:445
 AliAnalysisMuMuBase.cxx:446
 AliAnalysisMuMuBase.cxx:447
 AliAnalysisMuMuBase.cxx:448
 AliAnalysisMuMuBase.cxx:449
 AliAnalysisMuMuBase.cxx:450
 AliAnalysisMuMuBase.cxx:451
 AliAnalysisMuMuBase.cxx:452
 AliAnalysisMuMuBase.cxx:453
 AliAnalysisMuMuBase.cxx:454
 AliAnalysisMuMuBase.cxx:455
 AliAnalysisMuMuBase.cxx:456
 AliAnalysisMuMuBase.cxx:457
 AliAnalysisMuMuBase.cxx:458
 AliAnalysisMuMuBase.cxx:459
 AliAnalysisMuMuBase.cxx:460
 AliAnalysisMuMuBase.cxx:461
 AliAnalysisMuMuBase.cxx:462
 AliAnalysisMuMuBase.cxx:463
 AliAnalysisMuMuBase.cxx:464
 AliAnalysisMuMuBase.cxx:465
 AliAnalysisMuMuBase.cxx:466
 AliAnalysisMuMuBase.cxx:467
 AliAnalysisMuMuBase.cxx:468
 AliAnalysisMuMuBase.cxx:469
 AliAnalysisMuMuBase.cxx:470
 AliAnalysisMuMuBase.cxx:471
 AliAnalysisMuMuBase.cxx:472
 AliAnalysisMuMuBase.cxx:473
 AliAnalysisMuMuBase.cxx:474
 AliAnalysisMuMuBase.cxx:475
 AliAnalysisMuMuBase.cxx:476
 AliAnalysisMuMuBase.cxx:477
 AliAnalysisMuMuBase.cxx:478
 AliAnalysisMuMuBase.cxx:479
 AliAnalysisMuMuBase.cxx:480
 AliAnalysisMuMuBase.cxx:481
 AliAnalysisMuMuBase.cxx:482
 AliAnalysisMuMuBase.cxx:483
 AliAnalysisMuMuBase.cxx:484
 AliAnalysisMuMuBase.cxx:485
 AliAnalysisMuMuBase.cxx:486
 AliAnalysisMuMuBase.cxx:487
 AliAnalysisMuMuBase.cxx:488
 AliAnalysisMuMuBase.cxx:489
 AliAnalysisMuMuBase.cxx:490
 AliAnalysisMuMuBase.cxx:491
 AliAnalysisMuMuBase.cxx:492
 AliAnalysisMuMuBase.cxx:493
 AliAnalysisMuMuBase.cxx:494
 AliAnalysisMuMuBase.cxx:495
 AliAnalysisMuMuBase.cxx:496
 AliAnalysisMuMuBase.cxx:497
 AliAnalysisMuMuBase.cxx:498
 AliAnalysisMuMuBase.cxx:499
 AliAnalysisMuMuBase.cxx:500
 AliAnalysisMuMuBase.cxx:501
 AliAnalysisMuMuBase.cxx:502
 AliAnalysisMuMuBase.cxx:503
 AliAnalysisMuMuBase.cxx:504
 AliAnalysisMuMuBase.cxx:505
 AliAnalysisMuMuBase.cxx:506
 AliAnalysisMuMuBase.cxx:507
 AliAnalysisMuMuBase.cxx:508
 AliAnalysisMuMuBase.cxx:509
 AliAnalysisMuMuBase.cxx:510
 AliAnalysisMuMuBase.cxx:511