ROOT logo
#include "AliAnalysisMuMuCutRegistry.h"

/**
 *
 * \ingroup pwg-muon-mumu
 *
 * \class AliAnalysisMuMuCutRegistry
 * The cut elements and cut combinations are stored per type, i.e. there's a set for
 * event cuts/combinations, a set for track cuts/combinations, and a set for track pair cuts/combinations.
 *
 * To define a new cut use the AddEventCut, AddTrackCut, AndTrackPairCut and AddTriggerClassCut methods.
 *
 * To add an existing cut see AddCutElement.
 *
 * To define the negation of a cut, use the Not method.
 *
 * To add a new combination use one of the AddCutCombination methods, depending on the number
 * of cut element(s) the combination is made of.
 *
 * Note that what the sub-analysis are really concerned with are cut combinations (i.e. if
 * you fail to define any combination, nothing will be cut, whatever the number of cut elements
 * you've defined).
 *
 * This class also defines a few default control cut elements aptly named AlwaysTrue.
 *
 */

#include <utility>
#include "AliLog.h"
#include "TMethodCall.h"
#include "AliVEvent.h"
#include <set>
#include "AliAnalysisMuMuCutElement.h"
#include "AliAnalysisMuMuCutCombination.h"
#include "TObjArray.h"
#include "Riostream.h"
#include "TList.h"

ClassImp(AliAnalysisMuMuCutRegistry)

//_____________________________________________________________________________
AliAnalysisMuMuCutRegistry::AliAnalysisMuMuCutRegistry()
: TObject(),
fCutElements(0x0),
fCutCombinations(0x0)
{
  /// ctor
}

//_____________________________________________________________________________
AliAnalysisMuMuCutRegistry::~AliAnalysisMuMuCutRegistry()
{
  /// dtor
  
  delete fCutElements;
  delete fCutCombinations;
}

//_____________________________________________________________________________
Int_t AliAnalysisMuMuCutRegistry::AddCutCombination(const TObjArray& cutElements)
{
  /// Add a cut combination composed of the cuts in the cutElements array.
  ///
  /// \return 1 in case of success, 0 if already there, -1 failure
  
  if ( cutElements.IsEmpty() ) return -1;
  
  AliAnalysisMuMuCutCombination* cutCombination = new AliAnalysisMuMuCutCombination;
  
  TIter next(&cutElements);
  AliAnalysisMuMuCutElement* ce;
  
  while ( ( ce = static_cast<AliAnalysisMuMuCutElement*>(next()) ) )
  {
    cutCombination->Add(ce);
  }
  
  if ( GetCutCombinations(AliAnalysisMuMuCutElement::kAny)->FindObject(cutCombination) )
  {
    delete cutCombination;
    return 0;
  }
  
  GetCutCombinations(AliAnalysisMuMuCutElement::kAny)->Add(cutCombination);
  
  if ( cutCombination->IsEventCutter() || cutCombination->IsEventHandlerCutter() )
  {
    GetCutCombinations(AliAnalysisMuMuCutElement::kEvent)->Add(cutCombination);
  }

  if ( cutCombination->IsTrackCutter() )
  {
    GetCutCombinations(AliAnalysisMuMuCutElement::kTrack)->Add(cutCombination);
  }

  if ( cutCombination->IsTrackPairCutter() )
  {
    GetCutCombinations(AliAnalysisMuMuCutElement::kTrackPair)->Add(cutCombination);
  }

  if ( cutCombination->IsTriggerClassCutter() )
  {
    GetCutCombinations(AliAnalysisMuMuCutElement::kTriggerClass)->Add(cutCombination);
  }

  return 1;
}

//_____________________________________________________________________________
Int_t AliAnalysisMuMuCutRegistry::AddCutCombination(AliAnalysisMuMuCutElement* ce1)
{
  /// Convenience method to create a cut combination made of a single cut
  TObjArray cutElements;
  if ( ce1 ) cutElements.Add(ce1);
  return AddCutCombination(cutElements);
}

//_____________________________________________________________________________
Int_t AliAnalysisMuMuCutRegistry::AddCutCombination(AliAnalysisMuMuCutElement* ce1,
                                                    AliAnalysisMuMuCutElement* ce2)
{
  /// Convenience method to create a cut combination made of 2 cuts
  TObjArray cutElements;
  if ( ce1 ) cutElements.Add(ce1);
  if ( ce2 ) cutElements.Add(ce2);
  return AddCutCombination(cutElements);
}

//_____________________________________________________________________________
Int_t AliAnalysisMuMuCutRegistry::AddCutCombination(AliAnalysisMuMuCutElement* ce1,
                                                    AliAnalysisMuMuCutElement* ce2,
                                                    AliAnalysisMuMuCutElement* ce3)
{
  /// Convenience method to create a cut combination made of 3 cuts
  TObjArray cutElements;
  if ( ce1 ) cutElements.Add(ce1);
  if ( ce2 ) cutElements.Add(ce2);
  if ( ce3 ) cutElements.Add(ce3);
  return AddCutCombination(cutElements);
}

//_____________________________________________________________________________
Int_t AliAnalysisMuMuCutRegistry::AddCutCombination(AliAnalysisMuMuCutElement* ce1, AliAnalysisMuMuCutElement* ce2, AliAnalysisMuMuCutElement* ce3,
                        AliAnalysisMuMuCutElement* ce4)
{
  /// Convenience method to create a cut combination made of 4 cuts
  TObjArray cutElements;
  if ( ce1 ) cutElements.Add(ce1);
  if ( ce2 ) cutElements.Add(ce2);
  if ( ce3 ) cutElements.Add(ce3);
  if ( ce4 ) cutElements.Add(ce4);
  return AddCutCombination(cutElements);
}
//_____________________________________________________________________________
Int_t AliAnalysisMuMuCutRegistry::AddCutCombination(AliAnalysisMuMuCutElement* ce1, AliAnalysisMuMuCutElement* ce2, AliAnalysisMuMuCutElement* ce3,
                        AliAnalysisMuMuCutElement* ce4, AliAnalysisMuMuCutElement* ce5)
{
  /// Convenience method to create a cut combination made of 5 cuts

  TObjArray cutElements;
  if ( ce1 ) cutElements.Add(ce1);
  if ( ce2 ) cutElements.Add(ce2);
  if ( ce3 ) cutElements.Add(ce3);
  if ( ce4 ) cutElements.Add(ce4);
  if ( ce5 ) cutElements.Add(ce5);
  return AddCutCombination(cutElements);
}

//_____________________________________________________________________________
Int_t AliAnalysisMuMuCutRegistry::AddCutCombination(AliAnalysisMuMuCutElement* ce1, AliAnalysisMuMuCutElement* ce2, AliAnalysisMuMuCutElement* ce3,
                        AliAnalysisMuMuCutElement* ce4, AliAnalysisMuMuCutElement* ce5, AliAnalysisMuMuCutElement* ce6)
{
  /// Convenience method to create a cut combination made of 6 cuts

  TObjArray cutElements;
  if ( ce1 ) cutElements.Add(ce1);
  if ( ce2 ) cutElements.Add(ce2);
  if ( ce3 ) cutElements.Add(ce3);
  if ( ce4 ) cutElements.Add(ce4);
  if ( ce5 ) cutElements.Add(ce5);
  if ( ce6 ) cutElements.Add(ce6);
  return AddCutCombination(cutElements);
}

//_____________________________________________________________________________
AliAnalysisMuMuCutElement*
AliAnalysisMuMuCutRegistry::CreateCutElement(AliAnalysisMuMuCutElement::ECutType type,
                                             TObject& cutClass,
                                             const char* cutMethodName,
                                             const char* cutMethodPrototype,
                                             const char* defaultParameters)
{
  /** Create a cut element. See the ctor of AliAnalysisMuMuCutElement for the meaning
   * of the parameters.
   */
  
  AliAnalysisMuMuCutElement* ce = new AliAnalysisMuMuCutElement(type,cutClass,cutMethodName,cutMethodPrototype,defaultParameters);

  AliAnalysisMuMuCutElement* added = AddCutElement(ce);
  
  if (!added)
  {
    delete ce;
  }
  
  return added;
}

//_____________________________________________________________________________
AliAnalysisMuMuCutElement*
AliAnalysisMuMuCutRegistry::AddCutElement(AliAnalysisMuMuCutElement* ce)
{
  /// Add an existing cut element to the registry if it is valid
  
  if ( ce && ce->IsValid() )
  {
    if (!GetCutElements(AliAnalysisMuMuCutElement::kAny)->FindObject(ce))
    {
      GetCutElements(AliAnalysisMuMuCutElement::kAny)->Add(ce);
      if ( ce->IsEventCutter() || ce->IsEventHandlerCutter() )
      {
        GetCutElements(AliAnalysisMuMuCutElement::kEvent)->Add(ce);
      }
      else if ( ce->IsTrackCutter() )
      {
        GetCutElements(AliAnalysisMuMuCutElement::kTrack)->Add(ce);
      }
      else if ( ce->IsTrackPairCutter() )
      {
        GetCutElements(AliAnalysisMuMuCutElement::kTrackPair)->Add(ce);
      }
      else if ( ce->IsTriggerClassCutter() )
      {
        GetCutElements(AliAnalysisMuMuCutElement::kTriggerClass)->Add(ce);
      }
    }
    return ce;
  }
  return 0x0;
}

//_____________________________________________________________________________
AliAnalysisMuMuCutElement* AliAnalysisMuMuCutRegistry::AddEventCut(TObject& cutClass,
                                       const char* cutMethodName,
                                       const char* cutMethodPrototype,
                                       const char* defaultParameters)
{
  /// Shortcut method to create a cut element of type kEvent
  return CreateCutElement(AliAnalysisMuMuCutElement::kEvent,cutClass,cutMethodName,
                          cutMethodPrototype,defaultParameters);
}

//_____________________________________________________________________________
AliAnalysisMuMuCutElement* AliAnalysisMuMuCutRegistry::AddTrackCut(TObject& cutClass,
                                       const char* cutMethodName,
                                       const char* cutMethodPrototype,
                                       const char* defaultParameters)
{
  /// Shortcut method to create a cut element of type kTrack
  return CreateCutElement(AliAnalysisMuMuCutElement::kTrack,cutClass,cutMethodName,
                          cutMethodPrototype,defaultParameters);
}

//_____________________________________________________________________________
AliAnalysisMuMuCutElement* AliAnalysisMuMuCutRegistry::AddTrackPairCut(TObject& cutClass,
                                        const char* cutMethodName,
                                        const char* cutMethodPrototype,
                                        const char* defaultParameters)
{
  /// Shortcut method to create a cut element of type kTrackPair
  return CreateCutElement(AliAnalysisMuMuCutElement::kTrackPair,cutClass,cutMethodName,
                          cutMethodPrototype,defaultParameters);
}

//_____________________________________________________________________________
AliAnalysisMuMuCutElement* AliAnalysisMuMuCutRegistry::AddTriggerClassCut(TObject& cutClass,
                                              const char* cutMethodName,
                                              const char* cutMethodPrototype,
                                              const char* defaultParameters)
{
  /// Shortcut method to create a cut element of type kTriggerClass
  return CreateCutElement(AliAnalysisMuMuCutElement::kTriggerClass,cutClass,cutMethodName,
                          cutMethodPrototype,defaultParameters);
}

//_____________________________________________________________________________
const TObjArray* AliAnalysisMuMuCutRegistry::GetCutCombinations(AliAnalysisMuMuCutElement::ECutType type) const
{
  /// Get (and create if not already done) the array of cut combinations of the given type

  if (!fCutCombinations) return 0x0;
  
  return static_cast<TObjArray*>(fCutCombinations->At(type));
}

//_____________________________________________________________________________
TObjArray* AliAnalysisMuMuCutRegistry::GetCutCombinations(AliAnalysisMuMuCutElement::ECutType type)
{
  /// Get (and create if not already done) the array of cut combinations of the given type

  if (!fCutCombinations)
  {
    // the fCutCombinations array will be the owner of all the cut combinations
  
    Int_t N = AliAnalysisMuMuCutElement::kAny + 1;
    
    fCutCombinations = new TObjArray(N);
    fCutCombinations->SetOwner(kTRUE);
  
    for ( Int_t i = 0; i < N; ++i )
    {
      TObjArray* array = new TObjArray;
      array->SetOwner(kFALSE);
      if (i==AliAnalysisMuMuCutElement::kAny)
      {
        // only the first array, containing all the combinations
        // is the owner of the combinations
        // the other arrays are just pointing to those
        array->SetOwner(kTRUE);
      }
      fCutCombinations->AddAt(array,i);
    }
  }
  return static_cast<TObjArray*>(fCutCombinations->At(type));
}

//_____________________________________________________________________________
const TObjArray* AliAnalysisMuMuCutRegistry::GetCutElements(AliAnalysisMuMuCutElement::ECutType type) const
{
  /// Get the array of cut elements of the given type. Return 0x0 if the array does not exist yet

  if (!fCutElements) return 0x0;
  
  return static_cast<TObjArray*>(fCutElements->At(type));
}

//_____________________________________________________________________________
TObjArray* AliAnalysisMuMuCutRegistry::GetCutElements(AliAnalysisMuMuCutElement::ECutType type)
{
  /// Get (and create if not already done) the array of cut elements of the given type
  
  if (!fCutElements)
  {
    // owner of all the cut elements
    Int_t N = AliAnalysisMuMuCutElement::kAny + 1;
    fCutElements = new TObjArray(N);
    fCutElements->SetOwner(kTRUE);
  
    for ( Int_t i = 0; i < N; ++i )
    {
      TObjArray* array = new TObjArray;
      array->SetOwner(kFALSE);
      if (i == AliAnalysisMuMuCutElement::kAny )
      {
        // only the first array is the owner of the cuts
        // the other ones are just pointing to this one
        array->SetOwner(kTRUE);
      }
      fCutElements->AddAt(array,i);
    }
  }
  return static_cast<TObjArray*>(fCutElements->At(type));
}

//_____________________________________________________________________________
AliAnalysisMuMuCutElement* AliAnalysisMuMuCutRegistry::Not(const AliAnalysisMuMuCutElement& cutElement)
{
  /// Create a cut which is the opposite of cutElement, and adds it.
  
  AliAnalysisMuMuCutElementBar* bar = new AliAnalysisMuMuCutElementBar(cutElement);
  
  AliAnalysisMuMuCutElement* added = AddCutElement(bar);
  
  if (!added)
  {
    delete bar;
  }
  
  return added;
}

//_____________________________________________________________________________
void AliAnalysisMuMuCutRegistry::Print(Option_t* opt) const
{
  /// Printout
  
  TString sopt(opt);
  sopt.ToUpper();
  
  std::cout << "++++ Cut combinations defined : " << std::endl;
  
  AliAnalysisMuMuCutElement::ECutType cutTypes[] = { AliAnalysisMuMuCutElement::kEvent, AliAnalysisMuMuCutElement::kTrack,
    AliAnalysisMuMuCutElement::kTrackPair, AliAnalysisMuMuCutElement::kTriggerClass };

  Int_t i(1);

  for ( Int_t iCutType = 0; iCutType < 4; ++iCutType )
  {
    if (GetCutElements(cutTypes[iCutType])->IsEmpty()) continue;
    std::cout << "  Cutting on " << AliAnalysisMuMuCutElement::CutTypeName(cutTypes[iCutType]) << std::endl;
    TIter next(GetCutCombinations(cutTypes[iCutType]));
    AliAnalysisMuMuCutCombination* cutCombination;
  
    while ( ( cutCombination = static_cast<AliAnalysisMuMuCutCombination*>(next())) )
    {
      std::cout << Form("    %4d ",i);
      cutCombination->Print("            ");
      ++i;
    }
  }
  
  if ( sopt.Contains("FULL") || sopt.Contains("ALL") )
  {
    std::cout << "++++ Individual cuts defined : " << std::endl;
    
    for ( Int_t iCutType = 0; iCutType < 4; ++iCutType )
    {
      if (GetCutElements(cutTypes[iCutType])->IsEmpty()) continue;
      std::cout << "  Cutting on " << AliAnalysisMuMuCutElement::CutTypeName(cutTypes[iCutType]) << std::endl;
      TIter nextCutRef(GetCutElements(cutTypes[iCutType]));
      AliAnalysisMuMuCutElement* ce;
      i = 1;
      while ( ( ce = static_cast<AliAnalysisMuMuCutElement*>(nextCutRef()) ) )
      {
        std::cout << Form("%4d ",i);
        ce->Print();
        ++i;
      }
    }
  }
}
 AliAnalysisMuMuCutRegistry.cxx:1
 AliAnalysisMuMuCutRegistry.cxx:2
 AliAnalysisMuMuCutRegistry.cxx:3
 AliAnalysisMuMuCutRegistry.cxx:4
 AliAnalysisMuMuCutRegistry.cxx:5
 AliAnalysisMuMuCutRegistry.cxx:6
 AliAnalysisMuMuCutRegistry.cxx:7
 AliAnalysisMuMuCutRegistry.cxx:8
 AliAnalysisMuMuCutRegistry.cxx:9
 AliAnalysisMuMuCutRegistry.cxx:10
 AliAnalysisMuMuCutRegistry.cxx:11
 AliAnalysisMuMuCutRegistry.cxx:12
 AliAnalysisMuMuCutRegistry.cxx:13
 AliAnalysisMuMuCutRegistry.cxx:14
 AliAnalysisMuMuCutRegistry.cxx:15
 AliAnalysisMuMuCutRegistry.cxx:16
 AliAnalysisMuMuCutRegistry.cxx:17
 AliAnalysisMuMuCutRegistry.cxx:18
 AliAnalysisMuMuCutRegistry.cxx:19
 AliAnalysisMuMuCutRegistry.cxx:20
 AliAnalysisMuMuCutRegistry.cxx:21
 AliAnalysisMuMuCutRegistry.cxx:22
 AliAnalysisMuMuCutRegistry.cxx:23
 AliAnalysisMuMuCutRegistry.cxx:24
 AliAnalysisMuMuCutRegistry.cxx:25
 AliAnalysisMuMuCutRegistry.cxx:26
 AliAnalysisMuMuCutRegistry.cxx:27
 AliAnalysisMuMuCutRegistry.cxx:28
 AliAnalysisMuMuCutRegistry.cxx:29
 AliAnalysisMuMuCutRegistry.cxx:30
 AliAnalysisMuMuCutRegistry.cxx:31
 AliAnalysisMuMuCutRegistry.cxx:32
 AliAnalysisMuMuCutRegistry.cxx:33
 AliAnalysisMuMuCutRegistry.cxx:34
 AliAnalysisMuMuCutRegistry.cxx:35
 AliAnalysisMuMuCutRegistry.cxx:36
 AliAnalysisMuMuCutRegistry.cxx:37
 AliAnalysisMuMuCutRegistry.cxx:38
 AliAnalysisMuMuCutRegistry.cxx:39
 AliAnalysisMuMuCutRegistry.cxx:40
 AliAnalysisMuMuCutRegistry.cxx:41
 AliAnalysisMuMuCutRegistry.cxx:42
 AliAnalysisMuMuCutRegistry.cxx:43
 AliAnalysisMuMuCutRegistry.cxx:44
 AliAnalysisMuMuCutRegistry.cxx:45
 AliAnalysisMuMuCutRegistry.cxx:46
 AliAnalysisMuMuCutRegistry.cxx:47
 AliAnalysisMuMuCutRegistry.cxx:48
 AliAnalysisMuMuCutRegistry.cxx:49
 AliAnalysisMuMuCutRegistry.cxx:50
 AliAnalysisMuMuCutRegistry.cxx:51
 AliAnalysisMuMuCutRegistry.cxx:52
 AliAnalysisMuMuCutRegistry.cxx:53
 AliAnalysisMuMuCutRegistry.cxx:54
 AliAnalysisMuMuCutRegistry.cxx:55
 AliAnalysisMuMuCutRegistry.cxx:56
 AliAnalysisMuMuCutRegistry.cxx:57
 AliAnalysisMuMuCutRegistry.cxx:58
 AliAnalysisMuMuCutRegistry.cxx:59
 AliAnalysisMuMuCutRegistry.cxx:60
 AliAnalysisMuMuCutRegistry.cxx:61
 AliAnalysisMuMuCutRegistry.cxx:62
 AliAnalysisMuMuCutRegistry.cxx:63
 AliAnalysisMuMuCutRegistry.cxx:64
 AliAnalysisMuMuCutRegistry.cxx:65
 AliAnalysisMuMuCutRegistry.cxx:66
 AliAnalysisMuMuCutRegistry.cxx:67
 AliAnalysisMuMuCutRegistry.cxx:68
 AliAnalysisMuMuCutRegistry.cxx:69
 AliAnalysisMuMuCutRegistry.cxx:70
 AliAnalysisMuMuCutRegistry.cxx:71
 AliAnalysisMuMuCutRegistry.cxx:72
 AliAnalysisMuMuCutRegistry.cxx:73
 AliAnalysisMuMuCutRegistry.cxx:74
 AliAnalysisMuMuCutRegistry.cxx:75
 AliAnalysisMuMuCutRegistry.cxx:76
 AliAnalysisMuMuCutRegistry.cxx:77
 AliAnalysisMuMuCutRegistry.cxx:78
 AliAnalysisMuMuCutRegistry.cxx:79
 AliAnalysisMuMuCutRegistry.cxx:80
 AliAnalysisMuMuCutRegistry.cxx:81
 AliAnalysisMuMuCutRegistry.cxx:82
 AliAnalysisMuMuCutRegistry.cxx:83
 AliAnalysisMuMuCutRegistry.cxx:84
 AliAnalysisMuMuCutRegistry.cxx:85
 AliAnalysisMuMuCutRegistry.cxx:86
 AliAnalysisMuMuCutRegistry.cxx:87
 AliAnalysisMuMuCutRegistry.cxx:88
 AliAnalysisMuMuCutRegistry.cxx:89
 AliAnalysisMuMuCutRegistry.cxx:90
 AliAnalysisMuMuCutRegistry.cxx:91
 AliAnalysisMuMuCutRegistry.cxx:92
 AliAnalysisMuMuCutRegistry.cxx:93
 AliAnalysisMuMuCutRegistry.cxx:94
 AliAnalysisMuMuCutRegistry.cxx:95
 AliAnalysisMuMuCutRegistry.cxx:96
 AliAnalysisMuMuCutRegistry.cxx:97
 AliAnalysisMuMuCutRegistry.cxx:98
 AliAnalysisMuMuCutRegistry.cxx:99
 AliAnalysisMuMuCutRegistry.cxx:100
 AliAnalysisMuMuCutRegistry.cxx:101
 AliAnalysisMuMuCutRegistry.cxx:102
 AliAnalysisMuMuCutRegistry.cxx:103
 AliAnalysisMuMuCutRegistry.cxx:104
 AliAnalysisMuMuCutRegistry.cxx:105
 AliAnalysisMuMuCutRegistry.cxx:106
 AliAnalysisMuMuCutRegistry.cxx:107
 AliAnalysisMuMuCutRegistry.cxx:108
 AliAnalysisMuMuCutRegistry.cxx:109
 AliAnalysisMuMuCutRegistry.cxx:110
 AliAnalysisMuMuCutRegistry.cxx:111
 AliAnalysisMuMuCutRegistry.cxx:112
 AliAnalysisMuMuCutRegistry.cxx:113
 AliAnalysisMuMuCutRegistry.cxx:114
 AliAnalysisMuMuCutRegistry.cxx:115
 AliAnalysisMuMuCutRegistry.cxx:116
 AliAnalysisMuMuCutRegistry.cxx:117
 AliAnalysisMuMuCutRegistry.cxx:118
 AliAnalysisMuMuCutRegistry.cxx:119
 AliAnalysisMuMuCutRegistry.cxx:120
 AliAnalysisMuMuCutRegistry.cxx:121
 AliAnalysisMuMuCutRegistry.cxx:122
 AliAnalysisMuMuCutRegistry.cxx:123
 AliAnalysisMuMuCutRegistry.cxx:124
 AliAnalysisMuMuCutRegistry.cxx:125
 AliAnalysisMuMuCutRegistry.cxx:126
 AliAnalysisMuMuCutRegistry.cxx:127
 AliAnalysisMuMuCutRegistry.cxx:128
 AliAnalysisMuMuCutRegistry.cxx:129
 AliAnalysisMuMuCutRegistry.cxx:130
 AliAnalysisMuMuCutRegistry.cxx:131
 AliAnalysisMuMuCutRegistry.cxx:132
 AliAnalysisMuMuCutRegistry.cxx:133
 AliAnalysisMuMuCutRegistry.cxx:134
 AliAnalysisMuMuCutRegistry.cxx:135
 AliAnalysisMuMuCutRegistry.cxx:136
 AliAnalysisMuMuCutRegistry.cxx:137
 AliAnalysisMuMuCutRegistry.cxx:138
 AliAnalysisMuMuCutRegistry.cxx:139
 AliAnalysisMuMuCutRegistry.cxx:140
 AliAnalysisMuMuCutRegistry.cxx:141
 AliAnalysisMuMuCutRegistry.cxx:142
 AliAnalysisMuMuCutRegistry.cxx:143
 AliAnalysisMuMuCutRegistry.cxx:144
 AliAnalysisMuMuCutRegistry.cxx:145
 AliAnalysisMuMuCutRegistry.cxx:146
 AliAnalysisMuMuCutRegistry.cxx:147
 AliAnalysisMuMuCutRegistry.cxx:148
 AliAnalysisMuMuCutRegistry.cxx:149
 AliAnalysisMuMuCutRegistry.cxx:150
 AliAnalysisMuMuCutRegistry.cxx:151
 AliAnalysisMuMuCutRegistry.cxx:152
 AliAnalysisMuMuCutRegistry.cxx:153
 AliAnalysisMuMuCutRegistry.cxx:154
 AliAnalysisMuMuCutRegistry.cxx:155
 AliAnalysisMuMuCutRegistry.cxx:156
 AliAnalysisMuMuCutRegistry.cxx:157
 AliAnalysisMuMuCutRegistry.cxx:158
 AliAnalysisMuMuCutRegistry.cxx:159
 AliAnalysisMuMuCutRegistry.cxx:160
 AliAnalysisMuMuCutRegistry.cxx:161
 AliAnalysisMuMuCutRegistry.cxx:162
 AliAnalysisMuMuCutRegistry.cxx:163
 AliAnalysisMuMuCutRegistry.cxx:164
 AliAnalysisMuMuCutRegistry.cxx:165
 AliAnalysisMuMuCutRegistry.cxx:166
 AliAnalysisMuMuCutRegistry.cxx:167
 AliAnalysisMuMuCutRegistry.cxx:168
 AliAnalysisMuMuCutRegistry.cxx:169
 AliAnalysisMuMuCutRegistry.cxx:170
 AliAnalysisMuMuCutRegistry.cxx:171
 AliAnalysisMuMuCutRegistry.cxx:172
 AliAnalysisMuMuCutRegistry.cxx:173
 AliAnalysisMuMuCutRegistry.cxx:174
 AliAnalysisMuMuCutRegistry.cxx:175
 AliAnalysisMuMuCutRegistry.cxx:176
 AliAnalysisMuMuCutRegistry.cxx:177
 AliAnalysisMuMuCutRegistry.cxx:178
 AliAnalysisMuMuCutRegistry.cxx:179
 AliAnalysisMuMuCutRegistry.cxx:180
 AliAnalysisMuMuCutRegistry.cxx:181
 AliAnalysisMuMuCutRegistry.cxx:182
 AliAnalysisMuMuCutRegistry.cxx:183
 AliAnalysisMuMuCutRegistry.cxx:184
 AliAnalysisMuMuCutRegistry.cxx:185
 AliAnalysisMuMuCutRegistry.cxx:186
 AliAnalysisMuMuCutRegistry.cxx:187
 AliAnalysisMuMuCutRegistry.cxx:188
 AliAnalysisMuMuCutRegistry.cxx:189
 AliAnalysisMuMuCutRegistry.cxx:190
 AliAnalysisMuMuCutRegistry.cxx:191
 AliAnalysisMuMuCutRegistry.cxx:192
 AliAnalysisMuMuCutRegistry.cxx:193
 AliAnalysisMuMuCutRegistry.cxx:194
 AliAnalysisMuMuCutRegistry.cxx:195
 AliAnalysisMuMuCutRegistry.cxx:196
 AliAnalysisMuMuCutRegistry.cxx:197
 AliAnalysisMuMuCutRegistry.cxx:198
 AliAnalysisMuMuCutRegistry.cxx:199
 AliAnalysisMuMuCutRegistry.cxx:200
 AliAnalysisMuMuCutRegistry.cxx:201
 AliAnalysisMuMuCutRegistry.cxx:202
 AliAnalysisMuMuCutRegistry.cxx:203
 AliAnalysisMuMuCutRegistry.cxx:204
 AliAnalysisMuMuCutRegistry.cxx:205
 AliAnalysisMuMuCutRegistry.cxx:206
 AliAnalysisMuMuCutRegistry.cxx:207
 AliAnalysisMuMuCutRegistry.cxx:208
 AliAnalysisMuMuCutRegistry.cxx:209
 AliAnalysisMuMuCutRegistry.cxx:210
 AliAnalysisMuMuCutRegistry.cxx:211
 AliAnalysisMuMuCutRegistry.cxx:212
 AliAnalysisMuMuCutRegistry.cxx:213
 AliAnalysisMuMuCutRegistry.cxx:214
 AliAnalysisMuMuCutRegistry.cxx:215
 AliAnalysisMuMuCutRegistry.cxx:216
 AliAnalysisMuMuCutRegistry.cxx:217
 AliAnalysisMuMuCutRegistry.cxx:218
 AliAnalysisMuMuCutRegistry.cxx:219
 AliAnalysisMuMuCutRegistry.cxx:220
 AliAnalysisMuMuCutRegistry.cxx:221
 AliAnalysisMuMuCutRegistry.cxx:222
 AliAnalysisMuMuCutRegistry.cxx:223
 AliAnalysisMuMuCutRegistry.cxx:224
 AliAnalysisMuMuCutRegistry.cxx:225
 AliAnalysisMuMuCutRegistry.cxx:226
 AliAnalysisMuMuCutRegistry.cxx:227
 AliAnalysisMuMuCutRegistry.cxx:228
 AliAnalysisMuMuCutRegistry.cxx:229
 AliAnalysisMuMuCutRegistry.cxx:230
 AliAnalysisMuMuCutRegistry.cxx:231
 AliAnalysisMuMuCutRegistry.cxx:232
 AliAnalysisMuMuCutRegistry.cxx:233
 AliAnalysisMuMuCutRegistry.cxx:234
 AliAnalysisMuMuCutRegistry.cxx:235
 AliAnalysisMuMuCutRegistry.cxx:236
 AliAnalysisMuMuCutRegistry.cxx:237
 AliAnalysisMuMuCutRegistry.cxx:238
 AliAnalysisMuMuCutRegistry.cxx:239
 AliAnalysisMuMuCutRegistry.cxx:240
 AliAnalysisMuMuCutRegistry.cxx:241
 AliAnalysisMuMuCutRegistry.cxx:242
 AliAnalysisMuMuCutRegistry.cxx:243
 AliAnalysisMuMuCutRegistry.cxx:244
 AliAnalysisMuMuCutRegistry.cxx:245
 AliAnalysisMuMuCutRegistry.cxx:246
 AliAnalysisMuMuCutRegistry.cxx:247
 AliAnalysisMuMuCutRegistry.cxx:248
 AliAnalysisMuMuCutRegistry.cxx:249
 AliAnalysisMuMuCutRegistry.cxx:250
 AliAnalysisMuMuCutRegistry.cxx:251
 AliAnalysisMuMuCutRegistry.cxx:252
 AliAnalysisMuMuCutRegistry.cxx:253
 AliAnalysisMuMuCutRegistry.cxx:254
 AliAnalysisMuMuCutRegistry.cxx:255
 AliAnalysisMuMuCutRegistry.cxx:256
 AliAnalysisMuMuCutRegistry.cxx:257
 AliAnalysisMuMuCutRegistry.cxx:258
 AliAnalysisMuMuCutRegistry.cxx:259
 AliAnalysisMuMuCutRegistry.cxx:260
 AliAnalysisMuMuCutRegistry.cxx:261
 AliAnalysisMuMuCutRegistry.cxx:262
 AliAnalysisMuMuCutRegistry.cxx:263
 AliAnalysisMuMuCutRegistry.cxx:264
 AliAnalysisMuMuCutRegistry.cxx:265
 AliAnalysisMuMuCutRegistry.cxx:266
 AliAnalysisMuMuCutRegistry.cxx:267
 AliAnalysisMuMuCutRegistry.cxx:268
 AliAnalysisMuMuCutRegistry.cxx:269
 AliAnalysisMuMuCutRegistry.cxx:270
 AliAnalysisMuMuCutRegistry.cxx:271
 AliAnalysisMuMuCutRegistry.cxx:272
 AliAnalysisMuMuCutRegistry.cxx:273
 AliAnalysisMuMuCutRegistry.cxx:274
 AliAnalysisMuMuCutRegistry.cxx:275
 AliAnalysisMuMuCutRegistry.cxx:276
 AliAnalysisMuMuCutRegistry.cxx:277
 AliAnalysisMuMuCutRegistry.cxx:278
 AliAnalysisMuMuCutRegistry.cxx:279
 AliAnalysisMuMuCutRegistry.cxx:280
 AliAnalysisMuMuCutRegistry.cxx:281
 AliAnalysisMuMuCutRegistry.cxx:282
 AliAnalysisMuMuCutRegistry.cxx:283
 AliAnalysisMuMuCutRegistry.cxx:284
 AliAnalysisMuMuCutRegistry.cxx:285
 AliAnalysisMuMuCutRegistry.cxx:286
 AliAnalysisMuMuCutRegistry.cxx:287
 AliAnalysisMuMuCutRegistry.cxx:288
 AliAnalysisMuMuCutRegistry.cxx:289
 AliAnalysisMuMuCutRegistry.cxx:290
 AliAnalysisMuMuCutRegistry.cxx:291
 AliAnalysisMuMuCutRegistry.cxx:292
 AliAnalysisMuMuCutRegistry.cxx:293
 AliAnalysisMuMuCutRegistry.cxx:294
 AliAnalysisMuMuCutRegistry.cxx:295
 AliAnalysisMuMuCutRegistry.cxx:296
 AliAnalysisMuMuCutRegistry.cxx:297
 AliAnalysisMuMuCutRegistry.cxx:298
 AliAnalysisMuMuCutRegistry.cxx:299
 AliAnalysisMuMuCutRegistry.cxx:300
 AliAnalysisMuMuCutRegistry.cxx:301
 AliAnalysisMuMuCutRegistry.cxx:302
 AliAnalysisMuMuCutRegistry.cxx:303
 AliAnalysisMuMuCutRegistry.cxx:304
 AliAnalysisMuMuCutRegistry.cxx:305
 AliAnalysisMuMuCutRegistry.cxx:306
 AliAnalysisMuMuCutRegistry.cxx:307
 AliAnalysisMuMuCutRegistry.cxx:308
 AliAnalysisMuMuCutRegistry.cxx:309
 AliAnalysisMuMuCutRegistry.cxx:310
 AliAnalysisMuMuCutRegistry.cxx:311
 AliAnalysisMuMuCutRegistry.cxx:312
 AliAnalysisMuMuCutRegistry.cxx:313
 AliAnalysisMuMuCutRegistry.cxx:314
 AliAnalysisMuMuCutRegistry.cxx:315
 AliAnalysisMuMuCutRegistry.cxx:316
 AliAnalysisMuMuCutRegistry.cxx:317
 AliAnalysisMuMuCutRegistry.cxx:318
 AliAnalysisMuMuCutRegistry.cxx:319
 AliAnalysisMuMuCutRegistry.cxx:320
 AliAnalysisMuMuCutRegistry.cxx:321
 AliAnalysisMuMuCutRegistry.cxx:322
 AliAnalysisMuMuCutRegistry.cxx:323
 AliAnalysisMuMuCutRegistry.cxx:324
 AliAnalysisMuMuCutRegistry.cxx:325
 AliAnalysisMuMuCutRegistry.cxx:326
 AliAnalysisMuMuCutRegistry.cxx:327
 AliAnalysisMuMuCutRegistry.cxx:328
 AliAnalysisMuMuCutRegistry.cxx:329
 AliAnalysisMuMuCutRegistry.cxx:330
 AliAnalysisMuMuCutRegistry.cxx:331
 AliAnalysisMuMuCutRegistry.cxx:332
 AliAnalysisMuMuCutRegistry.cxx:333
 AliAnalysisMuMuCutRegistry.cxx:334
 AliAnalysisMuMuCutRegistry.cxx:335
 AliAnalysisMuMuCutRegistry.cxx:336
 AliAnalysisMuMuCutRegistry.cxx:337
 AliAnalysisMuMuCutRegistry.cxx:338
 AliAnalysisMuMuCutRegistry.cxx:339
 AliAnalysisMuMuCutRegistry.cxx:340
 AliAnalysisMuMuCutRegistry.cxx:341
 AliAnalysisMuMuCutRegistry.cxx:342
 AliAnalysisMuMuCutRegistry.cxx:343
 AliAnalysisMuMuCutRegistry.cxx:344
 AliAnalysisMuMuCutRegistry.cxx:345
 AliAnalysisMuMuCutRegistry.cxx:346
 AliAnalysisMuMuCutRegistry.cxx:347
 AliAnalysisMuMuCutRegistry.cxx:348
 AliAnalysisMuMuCutRegistry.cxx:349
 AliAnalysisMuMuCutRegistry.cxx:350
 AliAnalysisMuMuCutRegistry.cxx:351
 AliAnalysisMuMuCutRegistry.cxx:352
 AliAnalysisMuMuCutRegistry.cxx:353
 AliAnalysisMuMuCutRegistry.cxx:354
 AliAnalysisMuMuCutRegistry.cxx:355
 AliAnalysisMuMuCutRegistry.cxx:356
 AliAnalysisMuMuCutRegistry.cxx:357
 AliAnalysisMuMuCutRegistry.cxx:358
 AliAnalysisMuMuCutRegistry.cxx:359
 AliAnalysisMuMuCutRegistry.cxx:360
 AliAnalysisMuMuCutRegistry.cxx:361
 AliAnalysisMuMuCutRegistry.cxx:362
 AliAnalysisMuMuCutRegistry.cxx:363
 AliAnalysisMuMuCutRegistry.cxx:364
 AliAnalysisMuMuCutRegistry.cxx:365
 AliAnalysisMuMuCutRegistry.cxx:366
 AliAnalysisMuMuCutRegistry.cxx:367
 AliAnalysisMuMuCutRegistry.cxx:368
 AliAnalysisMuMuCutRegistry.cxx:369
 AliAnalysisMuMuCutRegistry.cxx:370
 AliAnalysisMuMuCutRegistry.cxx:371
 AliAnalysisMuMuCutRegistry.cxx:372
 AliAnalysisMuMuCutRegistry.cxx:373
 AliAnalysisMuMuCutRegistry.cxx:374
 AliAnalysisMuMuCutRegistry.cxx:375
 AliAnalysisMuMuCutRegistry.cxx:376
 AliAnalysisMuMuCutRegistry.cxx:377
 AliAnalysisMuMuCutRegistry.cxx:378
 AliAnalysisMuMuCutRegistry.cxx:379
 AliAnalysisMuMuCutRegistry.cxx:380
 AliAnalysisMuMuCutRegistry.cxx:381
 AliAnalysisMuMuCutRegistry.cxx:382
 AliAnalysisMuMuCutRegistry.cxx:383
 AliAnalysisMuMuCutRegistry.cxx:384
 AliAnalysisMuMuCutRegistry.cxx:385
 AliAnalysisMuMuCutRegistry.cxx:386
 AliAnalysisMuMuCutRegistry.cxx:387
 AliAnalysisMuMuCutRegistry.cxx:388
 AliAnalysisMuMuCutRegistry.cxx:389
 AliAnalysisMuMuCutRegistry.cxx:390
 AliAnalysisMuMuCutRegistry.cxx:391
 AliAnalysisMuMuCutRegistry.cxx:392
 AliAnalysisMuMuCutRegistry.cxx:393
 AliAnalysisMuMuCutRegistry.cxx:394
 AliAnalysisMuMuCutRegistry.cxx:395
 AliAnalysisMuMuCutRegistry.cxx:396
 AliAnalysisMuMuCutRegistry.cxx:397
 AliAnalysisMuMuCutRegistry.cxx:398
 AliAnalysisMuMuCutRegistry.cxx:399
 AliAnalysisMuMuCutRegistry.cxx:400
 AliAnalysisMuMuCutRegistry.cxx:401
 AliAnalysisMuMuCutRegistry.cxx:402
 AliAnalysisMuMuCutRegistry.cxx:403
 AliAnalysisMuMuCutRegistry.cxx:404
 AliAnalysisMuMuCutRegistry.cxx:405
 AliAnalysisMuMuCutRegistry.cxx:406
 AliAnalysisMuMuCutRegistry.cxx:407
 AliAnalysisMuMuCutRegistry.cxx:408
 AliAnalysisMuMuCutRegistry.cxx:409
 AliAnalysisMuMuCutRegistry.cxx:410
 AliAnalysisMuMuCutRegistry.cxx:411
 AliAnalysisMuMuCutRegistry.cxx:412
 AliAnalysisMuMuCutRegistry.cxx:413
 AliAnalysisMuMuCutRegistry.cxx:414
 AliAnalysisMuMuCutRegistry.cxx:415
 AliAnalysisMuMuCutRegistry.cxx:416
 AliAnalysisMuMuCutRegistry.cxx:417
 AliAnalysisMuMuCutRegistry.cxx:418
 AliAnalysisMuMuCutRegistry.cxx:419
 AliAnalysisMuMuCutRegistry.cxx:420
 AliAnalysisMuMuCutRegistry.cxx:421
 AliAnalysisMuMuCutRegistry.cxx:422
 AliAnalysisMuMuCutRegistry.cxx:423
 AliAnalysisMuMuCutRegistry.cxx:424
 AliAnalysisMuMuCutRegistry.cxx:425
 AliAnalysisMuMuCutRegistry.cxx:426
 AliAnalysisMuMuCutRegistry.cxx:427
 AliAnalysisMuMuCutRegistry.cxx:428
 AliAnalysisMuMuCutRegistry.cxx:429
 AliAnalysisMuMuCutRegistry.cxx:430
 AliAnalysisMuMuCutRegistry.cxx:431