ROOT logo
#include "AliAnalysisMuMuCutCombination.h"

/**
 *
 * \ingroup pwg-muon-mumu
 *
 * \class AliAnalysisMuMuCutCombination
 *
 * A cut combination is the real cut class that is used in the sub-analysis. It is composed
 * of one or several AliAnalysisMuMuCutElement.
 *
 * Unlike the cut elements, it can be of several types at the same time (i.e. it can
 * be an event cutter and a track cutter for instance). The work is done in the
 * Pass method(s).
 *
 */

#include "AliAnalysisMuMuCutElement.h"
#include "TList.h"
#include "Riostream.h"
#include "AliInputEventHandler.h"
#include "AliLog.h"

ClassImp(AliAnalysisMuMuCutCombination)

//_____________________________________________________________________________
AliAnalysisMuMuCutCombination::AliAnalysisMuMuCutCombination()
: TObject(), fCuts(0x0), fName(""),
fIsEventCutter(kFALSE), fIsEventHandlerCutter(kFALSE),
fIsTrackCutter(kFALSE), fIsTrackPairCutter(kFALSE),
fIsTriggerClassCutter(kFALSE)
{
  /// Default ctor.
}

//_____________________________________________________________________________
AliAnalysisMuMuCutCombination::~AliAnalysisMuMuCutCombination()
{
  /// Dtor
  delete fCuts;
}
  
//_____________________________________________________________________________
void AliAnalysisMuMuCutCombination::Add(AliAnalysisMuMuCutElement* ce)
{
  /** Add a cut element to this combination, if the cut is not void and
   *  not already part of the combination
   */
  
  if (!ce || !ce->IsValid()) return;
  
  if (!fCuts)
  {
    fCuts = new TObjArray;
    fCuts->SetOwner(kFALSE);
    fIsEventCutter = ce->IsEventCutter();
    fIsEventHandlerCutter = ce->IsEventHandlerCutter();
    fIsTrackCutter = ce->IsTrackCutter();
    fIsTrackPairCutter = ce->IsTrackPairCutter();
    fIsTriggerClassCutter = ce->IsTriggerClassCutter();
  }
  
  if (!fCuts->FindObject(ce))
  {
    fCuts->Add(ce);
    fName += ce->GetName();
    
    fIsEventCutter = fIsEventCutter || ce->IsEventCutter();
    fIsEventHandlerCutter = fIsEventHandlerCutter || ce->IsEventHandlerCutter();
    fIsTrackCutter = fIsTrackCutter || ce->IsTrackCutter();
    fIsTrackPairCutter = fIsTrackPairCutter || ce->IsTrackPairCutter();
    fIsTriggerClassCutter = fIsTriggerClassCutter || ce->IsTriggerClassCutter();

  }
  
  // update the name
  
  if ( IsTrackPairCutter() )
  {
    if ( fName[0] == 's' )
    {
      fName[0] = 'p';
    }
    else if ( fName[0] == 'p')
    {
      // already ok
    }
    else
    {
      TString tmp = fName;
      fName = "p";
      fName += tmp;
    }
  }
  else if ( IsTrackCutter() )
  {
    if ( fName[0] == 's')
    {
      // already ok
    }
    else
    {
      TString tmp = fName;
      fName = "s";
      fName += tmp;
    }
  }
}

//_____________________________________________________________________________
Bool_t AliAnalysisMuMuCutCombination::IsEqual(const TObject* obj) const
{
  /// Whether or not we are the same cut combination as obj
  
  if ( obj->IsA() != AliAnalysisMuMuCutCombination::Class() )
  {
    return kFALSE;
  }
  
  const AliAnalysisMuMuCutCombination* other = static_cast<const AliAnalysisMuMuCutCombination*>(obj);

  if ( IsEventCutter() != other->IsEventCutter() ) return kFALSE;
  if ( IsTrackCutter() != other->IsTrackCutter() ) return kFALSE;
  if ( IsTrackPairCutter() != other->IsTrackPairCutter() ) return kFALSE;
  if ( IsTriggerClassCutter() != other->IsTriggerClassCutter() ) return kFALSE;

  if ( !fCuts && !other->fCuts ) return kTRUE;

  // no cuts, nothing to check further...
  
  if ( ( fCuts && !other->fCuts ) || ( !fCuts && other->fCuts ) ) return kFALSE;
  
  if ( fCuts->GetEntries() != other->fCuts->GetEntries() ) return kFALSE;
  
  // ok, looks similar so far, now have compute the set of cuts in common
  // (whatever the order) to see if they really are the same combination or not
  
  Int_t n1in2(0);
  Int_t n2in1(0);
  
  for ( Int_t i = 0; i <= fCuts->GetLast(); ++i )
  {
    AliAnalysisMuMuCutElement* thisCuti = static_cast<AliAnalysisMuMuCutElement*>(fCuts->At(i));
  
    if ( other->fCuts->FindObject(thisCuti) )
    {
      ++n1in2;
    }
  }

  for ( Int_t i = 0; i <= fCuts->GetLast(); ++i )
  {
    AliAnalysisMuMuCutElement* otherCuti = static_cast<AliAnalysisMuMuCutElement*>(other->fCuts->At(i));
    
    if ( fCuts->FindObject(otherCuti) )
    {
      ++n2in1;
    }
  }

  return (n1in2==n2in1 && n1in2==fCuts->GetLast()+1);
}

//_____________________________________________________________________________
Bool_t AliAnalysisMuMuCutCombination::Pass(const AliInputEventHandler& eventHandler) const
{
  /// Whether or not the event handler is passing the cut
  
  if (!fCuts) return kFALSE;
  TIter next(fCuts);
  AliAnalysisMuMuCutElement* ce;
  
  const AliVEvent* event = eventHandler.GetEvent();
  
  Bool_t passEvent(kTRUE);
  Bool_t passEventHandler(kTRUE);
  
  while ( ( ce = static_cast<AliAnalysisMuMuCutElement*>(next()) ) )
  {
    if ( ce->IsEventCutter() && !ce->Pass(*event) )
    {
      passEvent = kFALSE;
    }

    if ( ce->IsEventHandlerCutter() && !ce->Pass(eventHandler) )
    {
      passEventHandler = kFALSE;
    }
  }
  
  if ( IsEventCutter() && IsEventHandlerCutter() )
  {
    return passEvent && passEventHandler;
  }

  if ( IsEventHandlerCutter() )
  {
    return passEventHandler;
  }

  if ( IsEventCutter() )
  {
    return passEvent;
  }
  
  return kFALSE;
}
  

//_____________________________________________________________________________
Bool_t AliAnalysisMuMuCutCombination::Pass(const AliVParticle& particle) const
{
  /// Whether or not the particle is passing the cut

  if (!fCuts) return kFALSE;
  TIter next(fCuts);
  AliAnalysisMuMuCutElement* ce;
  
  while ( ( ce = static_cast<AliAnalysisMuMuCutElement*>(next()) ) )
  {
    if (ce->IsTrackCutter() && !ce->Pass(particle))
    {
      return kFALSE;
    }
  }

  return kTRUE;
}
  
//_____________________________________________________________________________
Bool_t AliAnalysisMuMuCutCombination::Pass(const AliVParticle& p1, const AliVParticle& p2) const
{
  /// Whether or not the particle pair is passing the cut

  if (!fCuts) return kFALSE;
  TIter next(fCuts);
  AliAnalysisMuMuCutElement* ce;
  
  while ( ( ce = static_cast<AliAnalysisMuMuCutElement*>(next()) ) )
  {
    if (ce->IsTrackPairCutter() && !ce->Pass(p1,p2))
    {
      return kFALSE;
    }
  }
  
  return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliAnalysisMuMuCutCombination::Pass(const TString& firedTriggerClasses,
                                           TString& acceptedTriggerClasses,
                                           UInt_t L0, UInt_t L1, UInt_t L2) const
{
  /** Whether or not the firedTriggerClasses pass the cut.
   * \param firedTriggerClasses (input) list of fired trigger classes (separated by space)
   * \param acceptedTriggerClasses (output) list of accepted classes
   * \param L0 (input, optional) level 0 trigger mask
   * \param L1 (input, optional) level 1 trigger mask
   * \param L2 (input, optional) level 2 trigger mask
   */

  if (!fCuts) return kFALSE;
  TIter next(fCuts);
  AliAnalysisMuMuCutElement* ce;
  Bool_t rv(kFALSE);
  
  // contrary to the other cut types, here we make a full loop on all
  // the cuts, as we need to give each cut a chance to update the acceptedTriggerClasses
  // string
  
  acceptedTriggerClasses = "";
  
  while ( ( ce = static_cast<AliAnalysisMuMuCutElement*>(next()) ) )
  {
    TString tmp;
    
    if (ce->IsTriggerClassCutter() && ce->Pass(firedTriggerClasses,tmp,L0,L1,L2))
    {
      acceptedTriggerClasses += tmp;
      acceptedTriggerClasses += " ";
      rv = kTRUE;
    }
  }
  
  return rv;
}

//_____________________________________________________________________________
void AliAnalysisMuMuCutCombination::Print(Option_t* space) const
{
  /// Printout of the cut combination
  std::cout << Form("%s(%p) [",GetName(),this);
  if ( IsEventCutter() ) std::cout << " E";
  if ( IsEventHandlerCutter() ) std::cout << " EH";
  if ( IsTrackCutter() ) std::cout << " T";
  if ( IsTrackPairCutter() ) std::cout << " TP";
  if ( IsTriggerClassCutter() ) std::cout << " TC";
  std::cout << " ]" << std::endl;
  
  TIter next(fCuts);
  AliAnalysisMuMuCutElement* ce;
  
  while ( ( ce = static_cast<AliAnalysisMuMuCutElement*>(next()) ) )
  {
    std::cout << space;
    ce->Print();
  }
}
 AliAnalysisMuMuCutCombination.cxx:1
 AliAnalysisMuMuCutCombination.cxx:2
 AliAnalysisMuMuCutCombination.cxx:3
 AliAnalysisMuMuCutCombination.cxx:4
 AliAnalysisMuMuCutCombination.cxx:5
 AliAnalysisMuMuCutCombination.cxx:6
 AliAnalysisMuMuCutCombination.cxx:7
 AliAnalysisMuMuCutCombination.cxx:8
 AliAnalysisMuMuCutCombination.cxx:9
 AliAnalysisMuMuCutCombination.cxx:10
 AliAnalysisMuMuCutCombination.cxx:11
 AliAnalysisMuMuCutCombination.cxx:12
 AliAnalysisMuMuCutCombination.cxx:13
 AliAnalysisMuMuCutCombination.cxx:14
 AliAnalysisMuMuCutCombination.cxx:15
 AliAnalysisMuMuCutCombination.cxx:16
 AliAnalysisMuMuCutCombination.cxx:17
 AliAnalysisMuMuCutCombination.cxx:18
 AliAnalysisMuMuCutCombination.cxx:19
 AliAnalysisMuMuCutCombination.cxx:20
 AliAnalysisMuMuCutCombination.cxx:21
 AliAnalysisMuMuCutCombination.cxx:22
 AliAnalysisMuMuCutCombination.cxx:23
 AliAnalysisMuMuCutCombination.cxx:24
 AliAnalysisMuMuCutCombination.cxx:25
 AliAnalysisMuMuCutCombination.cxx:26
 AliAnalysisMuMuCutCombination.cxx:27
 AliAnalysisMuMuCutCombination.cxx:28
 AliAnalysisMuMuCutCombination.cxx:29
 AliAnalysisMuMuCutCombination.cxx:30
 AliAnalysisMuMuCutCombination.cxx:31
 AliAnalysisMuMuCutCombination.cxx:32
 AliAnalysisMuMuCutCombination.cxx:33
 AliAnalysisMuMuCutCombination.cxx:34
 AliAnalysisMuMuCutCombination.cxx:35
 AliAnalysisMuMuCutCombination.cxx:36
 AliAnalysisMuMuCutCombination.cxx:37
 AliAnalysisMuMuCutCombination.cxx:38
 AliAnalysisMuMuCutCombination.cxx:39
 AliAnalysisMuMuCutCombination.cxx:40
 AliAnalysisMuMuCutCombination.cxx:41
 AliAnalysisMuMuCutCombination.cxx:42
 AliAnalysisMuMuCutCombination.cxx:43
 AliAnalysisMuMuCutCombination.cxx:44
 AliAnalysisMuMuCutCombination.cxx:45
 AliAnalysisMuMuCutCombination.cxx:46
 AliAnalysisMuMuCutCombination.cxx:47
 AliAnalysisMuMuCutCombination.cxx:48
 AliAnalysisMuMuCutCombination.cxx:49
 AliAnalysisMuMuCutCombination.cxx:50
 AliAnalysisMuMuCutCombination.cxx:51
 AliAnalysisMuMuCutCombination.cxx:52
 AliAnalysisMuMuCutCombination.cxx:53
 AliAnalysisMuMuCutCombination.cxx:54
 AliAnalysisMuMuCutCombination.cxx:55
 AliAnalysisMuMuCutCombination.cxx:56
 AliAnalysisMuMuCutCombination.cxx:57
 AliAnalysisMuMuCutCombination.cxx:58
 AliAnalysisMuMuCutCombination.cxx:59
 AliAnalysisMuMuCutCombination.cxx:60
 AliAnalysisMuMuCutCombination.cxx:61
 AliAnalysisMuMuCutCombination.cxx:62
 AliAnalysisMuMuCutCombination.cxx:63
 AliAnalysisMuMuCutCombination.cxx:64
 AliAnalysisMuMuCutCombination.cxx:65
 AliAnalysisMuMuCutCombination.cxx:66
 AliAnalysisMuMuCutCombination.cxx:67
 AliAnalysisMuMuCutCombination.cxx:68
 AliAnalysisMuMuCutCombination.cxx:69
 AliAnalysisMuMuCutCombination.cxx:70
 AliAnalysisMuMuCutCombination.cxx:71
 AliAnalysisMuMuCutCombination.cxx:72
 AliAnalysisMuMuCutCombination.cxx:73
 AliAnalysisMuMuCutCombination.cxx:74
 AliAnalysisMuMuCutCombination.cxx:75
 AliAnalysisMuMuCutCombination.cxx:76
 AliAnalysisMuMuCutCombination.cxx:77
 AliAnalysisMuMuCutCombination.cxx:78
 AliAnalysisMuMuCutCombination.cxx:79
 AliAnalysisMuMuCutCombination.cxx:80
 AliAnalysisMuMuCutCombination.cxx:81
 AliAnalysisMuMuCutCombination.cxx:82
 AliAnalysisMuMuCutCombination.cxx:83
 AliAnalysisMuMuCutCombination.cxx:84
 AliAnalysisMuMuCutCombination.cxx:85
 AliAnalysisMuMuCutCombination.cxx:86
 AliAnalysisMuMuCutCombination.cxx:87
 AliAnalysisMuMuCutCombination.cxx:88
 AliAnalysisMuMuCutCombination.cxx:89
 AliAnalysisMuMuCutCombination.cxx:90
 AliAnalysisMuMuCutCombination.cxx:91
 AliAnalysisMuMuCutCombination.cxx:92
 AliAnalysisMuMuCutCombination.cxx:93
 AliAnalysisMuMuCutCombination.cxx:94
 AliAnalysisMuMuCutCombination.cxx:95
 AliAnalysisMuMuCutCombination.cxx:96
 AliAnalysisMuMuCutCombination.cxx:97
 AliAnalysisMuMuCutCombination.cxx:98
 AliAnalysisMuMuCutCombination.cxx:99
 AliAnalysisMuMuCutCombination.cxx:100
 AliAnalysisMuMuCutCombination.cxx:101
 AliAnalysisMuMuCutCombination.cxx:102
 AliAnalysisMuMuCutCombination.cxx:103
 AliAnalysisMuMuCutCombination.cxx:104
 AliAnalysisMuMuCutCombination.cxx:105
 AliAnalysisMuMuCutCombination.cxx:106
 AliAnalysisMuMuCutCombination.cxx:107
 AliAnalysisMuMuCutCombination.cxx:108
 AliAnalysisMuMuCutCombination.cxx:109
 AliAnalysisMuMuCutCombination.cxx:110
 AliAnalysisMuMuCutCombination.cxx:111
 AliAnalysisMuMuCutCombination.cxx:112
 AliAnalysisMuMuCutCombination.cxx:113
 AliAnalysisMuMuCutCombination.cxx:114
 AliAnalysisMuMuCutCombination.cxx:115
 AliAnalysisMuMuCutCombination.cxx:116
 AliAnalysisMuMuCutCombination.cxx:117
 AliAnalysisMuMuCutCombination.cxx:118
 AliAnalysisMuMuCutCombination.cxx:119
 AliAnalysisMuMuCutCombination.cxx:120
 AliAnalysisMuMuCutCombination.cxx:121
 AliAnalysisMuMuCutCombination.cxx:122
 AliAnalysisMuMuCutCombination.cxx:123
 AliAnalysisMuMuCutCombination.cxx:124
 AliAnalysisMuMuCutCombination.cxx:125
 AliAnalysisMuMuCutCombination.cxx:126
 AliAnalysisMuMuCutCombination.cxx:127
 AliAnalysisMuMuCutCombination.cxx:128
 AliAnalysisMuMuCutCombination.cxx:129
 AliAnalysisMuMuCutCombination.cxx:130
 AliAnalysisMuMuCutCombination.cxx:131
 AliAnalysisMuMuCutCombination.cxx:132
 AliAnalysisMuMuCutCombination.cxx:133
 AliAnalysisMuMuCutCombination.cxx:134
 AliAnalysisMuMuCutCombination.cxx:135
 AliAnalysisMuMuCutCombination.cxx:136
 AliAnalysisMuMuCutCombination.cxx:137
 AliAnalysisMuMuCutCombination.cxx:138
 AliAnalysisMuMuCutCombination.cxx:139
 AliAnalysisMuMuCutCombination.cxx:140
 AliAnalysisMuMuCutCombination.cxx:141
 AliAnalysisMuMuCutCombination.cxx:142
 AliAnalysisMuMuCutCombination.cxx:143
 AliAnalysisMuMuCutCombination.cxx:144
 AliAnalysisMuMuCutCombination.cxx:145
 AliAnalysisMuMuCutCombination.cxx:146
 AliAnalysisMuMuCutCombination.cxx:147
 AliAnalysisMuMuCutCombination.cxx:148
 AliAnalysisMuMuCutCombination.cxx:149
 AliAnalysisMuMuCutCombination.cxx:150
 AliAnalysisMuMuCutCombination.cxx:151
 AliAnalysisMuMuCutCombination.cxx:152
 AliAnalysisMuMuCutCombination.cxx:153
 AliAnalysisMuMuCutCombination.cxx:154
 AliAnalysisMuMuCutCombination.cxx:155
 AliAnalysisMuMuCutCombination.cxx:156
 AliAnalysisMuMuCutCombination.cxx:157
 AliAnalysisMuMuCutCombination.cxx:158
 AliAnalysisMuMuCutCombination.cxx:159
 AliAnalysisMuMuCutCombination.cxx:160
 AliAnalysisMuMuCutCombination.cxx:161
 AliAnalysisMuMuCutCombination.cxx:162
 AliAnalysisMuMuCutCombination.cxx:163
 AliAnalysisMuMuCutCombination.cxx:164
 AliAnalysisMuMuCutCombination.cxx:165
 AliAnalysisMuMuCutCombination.cxx:166
 AliAnalysisMuMuCutCombination.cxx:167
 AliAnalysisMuMuCutCombination.cxx:168
 AliAnalysisMuMuCutCombination.cxx:169
 AliAnalysisMuMuCutCombination.cxx:170
 AliAnalysisMuMuCutCombination.cxx:171
 AliAnalysisMuMuCutCombination.cxx:172
 AliAnalysisMuMuCutCombination.cxx:173
 AliAnalysisMuMuCutCombination.cxx:174
 AliAnalysisMuMuCutCombination.cxx:175
 AliAnalysisMuMuCutCombination.cxx:176
 AliAnalysisMuMuCutCombination.cxx:177
 AliAnalysisMuMuCutCombination.cxx:178
 AliAnalysisMuMuCutCombination.cxx:179
 AliAnalysisMuMuCutCombination.cxx:180
 AliAnalysisMuMuCutCombination.cxx:181
 AliAnalysisMuMuCutCombination.cxx:182
 AliAnalysisMuMuCutCombination.cxx:183
 AliAnalysisMuMuCutCombination.cxx:184
 AliAnalysisMuMuCutCombination.cxx:185
 AliAnalysisMuMuCutCombination.cxx:186
 AliAnalysisMuMuCutCombination.cxx:187
 AliAnalysisMuMuCutCombination.cxx:188
 AliAnalysisMuMuCutCombination.cxx:189
 AliAnalysisMuMuCutCombination.cxx:190
 AliAnalysisMuMuCutCombination.cxx:191
 AliAnalysisMuMuCutCombination.cxx:192
 AliAnalysisMuMuCutCombination.cxx:193
 AliAnalysisMuMuCutCombination.cxx:194
 AliAnalysisMuMuCutCombination.cxx:195
 AliAnalysisMuMuCutCombination.cxx:196
 AliAnalysisMuMuCutCombination.cxx:197
 AliAnalysisMuMuCutCombination.cxx:198
 AliAnalysisMuMuCutCombination.cxx:199
 AliAnalysisMuMuCutCombination.cxx:200
 AliAnalysisMuMuCutCombination.cxx:201
 AliAnalysisMuMuCutCombination.cxx:202
 AliAnalysisMuMuCutCombination.cxx:203
 AliAnalysisMuMuCutCombination.cxx:204
 AliAnalysisMuMuCutCombination.cxx:205
 AliAnalysisMuMuCutCombination.cxx:206
 AliAnalysisMuMuCutCombination.cxx:207
 AliAnalysisMuMuCutCombination.cxx:208
 AliAnalysisMuMuCutCombination.cxx:209
 AliAnalysisMuMuCutCombination.cxx:210
 AliAnalysisMuMuCutCombination.cxx:211
 AliAnalysisMuMuCutCombination.cxx:212
 AliAnalysisMuMuCutCombination.cxx:213
 AliAnalysisMuMuCutCombination.cxx:214
 AliAnalysisMuMuCutCombination.cxx:215
 AliAnalysisMuMuCutCombination.cxx:216
 AliAnalysisMuMuCutCombination.cxx:217
 AliAnalysisMuMuCutCombination.cxx:218
 AliAnalysisMuMuCutCombination.cxx:219
 AliAnalysisMuMuCutCombination.cxx:220
 AliAnalysisMuMuCutCombination.cxx:221
 AliAnalysisMuMuCutCombination.cxx:222
 AliAnalysisMuMuCutCombination.cxx:223
 AliAnalysisMuMuCutCombination.cxx:224
 AliAnalysisMuMuCutCombination.cxx:225
 AliAnalysisMuMuCutCombination.cxx:226
 AliAnalysisMuMuCutCombination.cxx:227
 AliAnalysisMuMuCutCombination.cxx:228
 AliAnalysisMuMuCutCombination.cxx:229
 AliAnalysisMuMuCutCombination.cxx:230
 AliAnalysisMuMuCutCombination.cxx:231
 AliAnalysisMuMuCutCombination.cxx:232
 AliAnalysisMuMuCutCombination.cxx:233
 AliAnalysisMuMuCutCombination.cxx:234
 AliAnalysisMuMuCutCombination.cxx:235
 AliAnalysisMuMuCutCombination.cxx:236
 AliAnalysisMuMuCutCombination.cxx:237
 AliAnalysisMuMuCutCombination.cxx:238
 AliAnalysisMuMuCutCombination.cxx:239
 AliAnalysisMuMuCutCombination.cxx:240
 AliAnalysisMuMuCutCombination.cxx:241
 AliAnalysisMuMuCutCombination.cxx:242
 AliAnalysisMuMuCutCombination.cxx:243
 AliAnalysisMuMuCutCombination.cxx:244
 AliAnalysisMuMuCutCombination.cxx:245
 AliAnalysisMuMuCutCombination.cxx:246
 AliAnalysisMuMuCutCombination.cxx:247
 AliAnalysisMuMuCutCombination.cxx:248
 AliAnalysisMuMuCutCombination.cxx:249
 AliAnalysisMuMuCutCombination.cxx:250
 AliAnalysisMuMuCutCombination.cxx:251
 AliAnalysisMuMuCutCombination.cxx:252
 AliAnalysisMuMuCutCombination.cxx:253
 AliAnalysisMuMuCutCombination.cxx:254
 AliAnalysisMuMuCutCombination.cxx:255
 AliAnalysisMuMuCutCombination.cxx:256
 AliAnalysisMuMuCutCombination.cxx:257
 AliAnalysisMuMuCutCombination.cxx:258
 AliAnalysisMuMuCutCombination.cxx:259
 AliAnalysisMuMuCutCombination.cxx:260
 AliAnalysisMuMuCutCombination.cxx:261
 AliAnalysisMuMuCutCombination.cxx:262
 AliAnalysisMuMuCutCombination.cxx:263
 AliAnalysisMuMuCutCombination.cxx:264
 AliAnalysisMuMuCutCombination.cxx:265
 AliAnalysisMuMuCutCombination.cxx:266
 AliAnalysisMuMuCutCombination.cxx:267
 AliAnalysisMuMuCutCombination.cxx:268
 AliAnalysisMuMuCutCombination.cxx:269
 AliAnalysisMuMuCutCombination.cxx:270
 AliAnalysisMuMuCutCombination.cxx:271
 AliAnalysisMuMuCutCombination.cxx:272
 AliAnalysisMuMuCutCombination.cxx:273
 AliAnalysisMuMuCutCombination.cxx:274
 AliAnalysisMuMuCutCombination.cxx:275
 AliAnalysisMuMuCutCombination.cxx:276
 AliAnalysisMuMuCutCombination.cxx:277
 AliAnalysisMuMuCutCombination.cxx:278
 AliAnalysisMuMuCutCombination.cxx:279
 AliAnalysisMuMuCutCombination.cxx:280
 AliAnalysisMuMuCutCombination.cxx:281
 AliAnalysisMuMuCutCombination.cxx:282
 AliAnalysisMuMuCutCombination.cxx:283
 AliAnalysisMuMuCutCombination.cxx:284
 AliAnalysisMuMuCutCombination.cxx:285
 AliAnalysisMuMuCutCombination.cxx:286
 AliAnalysisMuMuCutCombination.cxx:287
 AliAnalysisMuMuCutCombination.cxx:288
 AliAnalysisMuMuCutCombination.cxx:289
 AliAnalysisMuMuCutCombination.cxx:290
 AliAnalysisMuMuCutCombination.cxx:291
 AliAnalysisMuMuCutCombination.cxx:292
 AliAnalysisMuMuCutCombination.cxx:293
 AliAnalysisMuMuCutCombination.cxx:294
 AliAnalysisMuMuCutCombination.cxx:295
 AliAnalysisMuMuCutCombination.cxx:296
 AliAnalysisMuMuCutCombination.cxx:297
 AliAnalysisMuMuCutCombination.cxx:298
 AliAnalysisMuMuCutCombination.cxx:299
 AliAnalysisMuMuCutCombination.cxx:300
 AliAnalysisMuMuCutCombination.cxx:301
 AliAnalysisMuMuCutCombination.cxx:302
 AliAnalysisMuMuCutCombination.cxx:303
 AliAnalysisMuMuCutCombination.cxx:304
 AliAnalysisMuMuCutCombination.cxx:305
 AliAnalysisMuMuCutCombination.cxx:306
 AliAnalysisMuMuCutCombination.cxx:307
 AliAnalysisMuMuCutCombination.cxx:308
 AliAnalysisMuMuCutCombination.cxx:309