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

#include "AliMuonEventCuts.h"

#include "TMath.h"
#include "TFormula.h"
#include "THashList.h"
#include "TObjArray.h"
#include "TObjString.h"
#include "TFile.h"
#include "TParameter.h"
#include "TKey.h"
#include "TSystem.h"
#include "TAxis.h"
#include "TArrayI.h"
#include "TRegexp.h"
#include "TPRegexp.h"

#include "AliLog.h"
#include "AliInputEventHandler.h"
#include "AliVEvent.h"
#include "AliESDEvent.h"
#include "AliAODEvent.h"
#include "AliVVertex.h"
#include "AliCentrality.h"
#include "AliAnalysisUtils.h"

#include "AliAnalysisMuonUtility.h"

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


//________________________________________________________________________
AliMuonEventCuts::AliMuonEventCuts() :
  AliAnalysisCuts(),
  fPhysicsSelectionMask(0),
  fVertexMinNContributors(0),
  fVertexVzMin(0.),
  fVertexVzMax(0.),
  fCheckMask(0),
  fSelectedTrigPattern(0x0),
  fRejectedTrigPattern(0x0),
  fSelectedTrigLevel(0x0),
  fSelectedTrigCombination(0x0),
  fTrigInputsMap(0x0),
  fAllSelectedTrigClasses(0x0),
  fCentralityClasses(0x0),
  fAnalysisUtils(0x0),
  fEventTriggerMask(0),
  fSelectedTrigClassesInEvent(0x0)
{
  /// Default ctor.
}

//________________________________________________________________________
AliMuonEventCuts::AliMuonEventCuts(const char* name, const char* title ) :
AliAnalysisCuts(name, title),
  fPhysicsSelectionMask(0),
  fVertexMinNContributors(0),
  fVertexVzMin(0.),
  fVertexVzMax(0.),
  fCheckMask(0xFFFF),
  fSelectedTrigPattern(new TObjArray()),
  fRejectedTrigPattern(new TObjArray()),
  fSelectedTrigLevel(new TObjArray()),
  fSelectedTrigCombination(new TObjArray()),
  fTrigInputsMap(new THashList()),
  fAllSelectedTrigClasses(new THashList()),
  fCentralityClasses(0x0),
  fAnalysisUtils(0x0),
  fEventTriggerMask(0),
  fSelectedTrigClassesInEvent(new TObjArray())
{
  /// Constructor
  SetDefaultParameters();
  SetDefaultFilterMask();
  SetDefaultTrigClassPatterns();
  SetTrigClassLevels();
  SetCentralityClasses();
  fAnalysisUtils = new AliAnalysisUtils();
  fAllSelectedTrigClasses->SetOwner();
  fSelectedTrigClassesInEvent->SetOwner();
}

//________________________________________________________________________
AliMuonEventCuts::AliMuonEventCuts(const AliMuonEventCuts& obj) :
  AliAnalysisCuts(obj),
  fPhysicsSelectionMask(obj.fPhysicsSelectionMask),
  fVertexMinNContributors(obj.fVertexMinNContributors),
  fVertexVzMin(obj.fVertexVzMin),
  fVertexVzMax(obj.fVertexVzMax),
  fCheckMask(obj.fCheckMask),
  fSelectedTrigPattern(obj.fSelectedTrigPattern),
  fRejectedTrigPattern(obj.fRejectedTrigPattern),
  fSelectedTrigLevel(obj.fSelectedTrigLevel),
  fSelectedTrigCombination(obj.fSelectedTrigCombination),
  fTrigInputsMap(obj.fTrigInputsMap),
  fAllSelectedTrigClasses(obj.fAllSelectedTrigClasses),
  fCentralityClasses(obj.fCentralityClasses),
  fAnalysisUtils(obj.fAnalysisUtils),
  fEventTriggerMask(obj.fEventTriggerMask),
  fSelectedTrigClassesInEvent(obj.fSelectedTrigClassesInEvent)
{
  /// Copy constructor
}


//________________________________________________________________________
AliMuonEventCuts& AliMuonEventCuts::operator=(const AliMuonEventCuts& obj)
{
  /// Assignment operator
  if ( this != &obj ) { 
    AliAnalysisCuts::operator=(obj);
    fPhysicsSelectionMask = obj.fPhysicsSelectionMask;
    fVertexMinNContributors = obj.fVertexMinNContributors,
    fVertexVzMin = obj.fVertexVzMin;
    fVertexVzMax = obj.fVertexVzMax;
    fCheckMask = obj.fCheckMask;
    fSelectedTrigPattern = obj.fSelectedTrigPattern;
    fRejectedTrigPattern = obj.fRejectedTrigPattern;
    fSelectedTrigLevel = obj.fSelectedTrigLevel;
    fSelectedTrigCombination = obj.fSelectedTrigCombination;
    fTrigInputsMap = obj.fTrigInputsMap;
    fAllSelectedTrigClasses = obj.fAllSelectedTrigClasses;
    fCentralityClasses = obj.fCentralityClasses;
    fAnalysisUtils = obj.fAnalysisUtils;
    fEventTriggerMask = obj.fEventTriggerMask;
    fSelectedTrigClassesInEvent = obj.fSelectedTrigClassesInEvent;
  }
  return *this;
}


//________________________________________________________________________
AliMuonEventCuts::~AliMuonEventCuts()
{
  /// Destructor
  delete fSelectedTrigPattern;
  delete fRejectedTrigPattern;
  delete fSelectedTrigLevel;
  delete fSelectedTrigCombination;
  delete fTrigInputsMap;
  delete fAllSelectedTrigClasses;
  delete fSelectedTrigClassesInEvent;
  delete fCentralityClasses;
  delete fAnalysisUtils;
}

//________________________________________________________________________
Bool_t AliMuonEventCuts::IsSelected( TObject* obj )
{
  /// Track is selected
  UInt_t filterMask = GetFilterMask();
  UInt_t selectionMask = GetSelectionMask(obj);
  
  AliDebug(1, Form("Is event selected %i  mask 0x%x", ( selectionMask & filterMask ) == filterMask, selectionMask ));
  
  return ( ( selectionMask & filterMask ) == filterMask );
}


//________________________________________________________________________
UInt_t AliMuonEventCuts::GetSelectionMask( const TObject* obj )
{
  /// Get selection mask
  
  UInt_t selectionMask = 0;
  
  UInt_t checkMask = fCheckMask | GetFilterMask();
  
  const AliInputEventHandler* inputHandler = static_cast<const AliInputEventHandler*> ( obj );
  
  if ( checkMask & kPhysicsSelected ) {
    if ( const_cast<AliInputEventHandler*>(inputHandler)->IsEventSelected() & fPhysicsSelectionMask ) selectionMask |= kPhysicsSelected;
  }
  
  const AliVEvent* event = inputHandler->GetEvent();
  
  Double_t centrality = GetCentrality(event);
  if ( centrality >= fCentralityClasses->GetXmin() && centrality <= fCentralityClasses->GetXmax() ) selectionMask |= kSelectedCentrality;
  
  UpdateEvent(event);
  
  if ( fSelectedTrigClassesInEvent->GetEntries() > 0 ) selectionMask |= kSelectedTrig;
  
  if ( checkMask & kGoodVertex ) {
    AliVVertex* vertex = AliAnalysisMuonUtility::GetVertexSPD(event);
    if ( vertex->GetNContributors() >= GetVertexMinNContributors() &&
      vertex->GetZ() >= GetVertexVzMin() && vertex->GetZ() <= GetVertexVzMax() ) selectionMask |= kGoodVertex;
  }
  
  if ( checkMask & kNoPileup ) {
    if ( ! fAnalysisUtils->IsPileUpEvent(const_cast<AliVEvent*>(event)) ) selectionMask |= kNoPileup;
    //  // Uncomment to use settings for pPb
    //  if ( fRejectPileup ) {
    //    Int_t nTracklets = ( event.IsA() == AliESDEvent::Class() ) ? static_cast<AliESDEvent*>(event)->GetMultiplicity()->GetNumberOfTracklets() : static_cast<AliAODEvent*>(event)->GetTracklets()->GetNumberOfTracklets();
    //    Int_t nContrib = ( nTracklets < 40 ) ? 3 : 5;
    //    Double_t dist = 0.8;
    //    Bool_t isPielup = ( event.IsA() == AliESDEvent::Class() ) ? static_cast<AliESDEvent*>(event)->IsPileupFromSPD(nContrib,dist) : static_cast<AliAODEvent*>(event)->IsPileupFromSPD(nContrib,dist);
    //    if ( isPielup ) return;
    //  }
  }

  AliDebug(1, Form("Selection mask 0x%x\n", selectionMask));
  return selectionMask;
}


//________________________________________________________________________
Bool_t AliMuonEventCuts::IsSelected( TList* /* list */)
{
  /// Not implemented
  AliError("Function not implemented: Use IsSelected(TObject*)");
  return kFALSE;
}

//________________________________________________________________________
Bool_t AliMuonEventCuts::UpdateEvent ( const AliVEvent* event )
{
  /// Update the transient data member per event
  
  if ( fSelectedTrigClassesInEvent && ( fEventTriggerMask == event->GetTriggerMask() ) ) return kFALSE;
  
  BuildTriggerClasses(AliAnalysisMuonUtility::GetFiredTriggerClasses(event), AliAnalysisMuonUtility::GetL0TriggerInputs(event), AliAnalysisMuonUtility::GetL1TriggerInputs(event), AliAnalysisMuonUtility::GetL2TriggerInputs(event));
  
  fEventTriggerMask = event->GetTriggerMask();
  
  return kTRUE;
}

//________________________________________________________________________
TString AliMuonEventCuts::GetDefaultTrigClassPatterns () const
{
  /// Get the default patterns
  /// (done in such a way to get all muon triggers)
  return "CM*,C0M*,CINT*,CPBI*,CCENT*,CV*,!*ABCE*,!*-ACE-*,!*-AC-*,!*-E-*,!*WU*,!*EGA*,!*EJE*,!*PHS*";
}

//________________________________________________________________________
TString AliMuonEventCuts::GetDefaultTrigInputsMap () const
{
  /// Get the default trigger inputs
  ///

  TString trigInputsMap = "0VBA:0,";
  trigInputsMap += "0VBC:1,";
  trigInputsMap += "0SMB:2,";
  trigInputsMap += "0TVX:3,";
  trigInputsMap += "0VGC:4,";
  trigInputsMap += "0VGA:5,";
  trigInputsMap += "0SH1:6,";
  trigInputsMap += "0SH2:7,";
  trigInputsMap += "0HPT:8,";
  trigInputsMap += "0AMU:9,";
  trigInputsMap += "0OB0:10,";
  trigInputsMap += "0ASL:11,";
  trigInputsMap += "0MSL:12,";
  trigInputsMap += "0MSH:13,";
  trigInputsMap += "0MUL:14,";
  trigInputsMap += "0MLL:15,";
  trigInputsMap += "0EMC:16,";
  trigInputsMap += "0PH0:17,";
  trigInputsMap += "0HWU:18,";
  trigInputsMap += "0LSR:19,";
  trigInputsMap += "0T0A:20,";
  trigInputsMap += "0BPA:21,";
  trigInputsMap += "0BPC:22,";
  trigInputsMap += "0T0C:23,";

  trigInputsMap += "1EJE:0,";
  trigInputsMap += "1EGA:1,";
  trigInputsMap += "1EJ2:2,";
  trigInputsMap += "1EG2:3,";
  trigInputsMap += "1PHL:4,";
  trigInputsMap += "1PHM:5,";
  trigInputsMap += "1PHH:6,";
  trigInputsMap += "1HCO:8,";
  trigInputsMap += "1HJT:9,";
  trigInputsMap += "1HSE:10,";
  trigInputsMap += "1DUM:11,";
  trigInputsMap += "1HQU:12,";
  trigInputsMap += "1H14:13,";
  trigInputsMap += "1ZMD:14,";
  trigInputsMap += "1ZMB:16,";
  trigInputsMap += "1ZED:17,";
  trigInputsMap += "1ZAC:18,";
  trigInputsMap += "1EJE:19";

  return trigInputsMap;
}

//________________________________________________________________________
void AliMuonEventCuts::SetDefaultTrigClassPatterns ()
{
  /// Set the default patterns
  /// (done in such a way to get all muon triggers)
  SetTrigClassPatterns(GetDefaultTrigClassPatterns(),GetDefaultTrigInputsMap());
}


//________________________________________________________________________
void AliMuonEventCuts::SetTrigClassPatterns ( TString trigPattern, TString trigInputsMap )
{
  /// Set trigger classes
  ///
  /// 1) specify trigger class pattern and reject pattern (wildcard * accepted)
  /// Classes will be filled dynamycally according to the pattern
  /// - if name contains ! (without spaces): reject it
  /// - otherwise keep it
  /// e.g. CMBAC*,!*ALLNOTRD*
  /// keeps classes beginning with CMBAC, and not containing ALLNOTRD.
  ///
  /// CAVEATs:
  ///   a ) if a wildcard is not specified, exact match is required
  ///   b ) if you use an fCFContainer and you want an axis to contain the trigger classes,
  ///       please be sure that each pattern matches only 1 trigger class, or triggers will be mixed up
  ///       when merging different chuncks.
  ///
  ///
  /// 2) specify a combination of triggers
  /// combined through a logical AND "&" or a logical OR "|" (wildcard * NOT accepted)
  /// It is also possible to ask for a trigger class containing a specific trigger input:
  /// e.g. CMSL7-B-NOPF-MUON&0MSH,CMSL7-B-NOPF-MUON,CMSL7-B-NOPF-MUON|CMSL8-B-NOPF-MUON
  /// will give the events with:
  /// - the single low trigger class fired and containing a single high trigger input
  /// - the single low trigger class fired
  /// - the single low trigger class 7 or 8 fired
  /// By default, when specific trigger combinations are provided, the most general case
  /// based on trigger pattern is disabled...but it can be activated with the disableTrigPattern flag
  ///
  /// example:
  /// SetTrigClassPatterns("CINT7*,!*-ACE-*,CMSL7-B-NOPF-MUON,CMSL7-B-NOPF-MUON&0MSH")
  
  
  fSelectedTrigCombination->SetOwner();
  if ( fSelectedTrigCombination->GetEntries() > 0 ) fSelectedTrigCombination->Delete();
  fSelectedTrigPattern->SetOwner();
  if ( fSelectedTrigPattern->GetEntries() > 0 ) fSelectedTrigPattern->Delete();
  fRejectedTrigPattern->SetOwner();
  if ( fRejectedTrigPattern->GetEntries() > 0 ) fRejectedTrigPattern->Delete();

  SetTrigInputsMap(trigInputsMap);

  TString badSyntax = "", duplicated = "";
  TString listName[4] = {"L0","L1","L2","trigClass"};
  
  TString pattern(trigPattern);
  pattern.ReplaceAll(" ","");
  TObjArray* fullList = pattern.Tokenize(",");
  TIter next(fullList);
  TObjString* objString = 0x0;
  
  TObjArray combinationList;
  // First search for patterns
  while ( ( objString = static_cast<TObjString*>(next()) ) ) {
    TString currPattern = objString->String();
    Bool_t isCombination = ( currPattern.Contains("&") || currPattern.Contains("|") );
    Bool_t isSingleTrigger = ( ! isCombination && ! currPattern.BeginsWith("0") && ! currPattern.BeginsWith("1") && ! currPattern.BeginsWith("2") );
    Bool_t isMatchPattern = ( currPattern.Contains("*") || isSingleTrigger );
    Bool_t isRejectPattern = kFALSE;
    if ( isMatchPattern && currPattern.Contains("!") ) {
      currPattern.ReplaceAll("!","");
      isRejectPattern = kTRUE;
    }
    if ( isCombination && ( isMatchPattern || isRejectPattern ) ) {
      badSyntax += Form(" %s;", currPattern.Data());
      continue;
    }
    if ( isRejectPattern ) {
      fRejectedTrigPattern->AddLast(new TObjString(currPattern));
      AliDebug(1,Form("Adding %s to reject pattern",currPattern.Data()));
    }
    else if ( isMatchPattern ) {
      fSelectedTrigPattern->AddLast(new TObjString(currPattern));
      AliDebug(1,Form("Adding %s to match pattern",currPattern.Data()));
    }
    else combinationList.Add(objString);
  }
  
  // Then check for combinations
  TIter nextCombo(&combinationList);
  while ( ( objString = static_cast<TObjString*>(nextCombo()) ) ) {
    TString currPattern = objString->String();
    
    TString tn (currPattern);
    Bool_t hasAND = kFALSE, hasOR = kFALSE, hasNOT = kFALSE;
    if ( tn.Contains("&") ) {
      tn.ReplaceAll("&",":");
      hasAND = kTRUE;
    }
    if ( tn.Contains("|") ) {
      tn.ReplaceAll("|",":");
      hasOR = kTRUE;
    }
    if ( tn.Contains("!") ) {
      tn.ReplaceAll("!","");
      hasNOT = kTRUE;
    }
    if ( tn.Contains("(") || tn.Contains(")") ) {
      tn.ReplaceAll("(","");
      tn.ReplaceAll(")","");
    }
    
    if ( ! hasAND && ! hasOR && ! hasNOT ) {
      if ( CheckTriggerClassPattern(currPattern) ) {
        duplicated += Form("%s ", currPattern.Data());
        continue;
      }
    }
    
    TObjArray* trigCombo = new TObjArray();
    trigCombo->SetOwner();
    trigCombo->SetName(currPattern.Data());
    
    UInt_t uniqueID = kComboSimple;
    if ( ( hasAND && hasOR ) || hasNOT ) uniqueID = kComboFormula;
    else if ( hasAND ) uniqueID = kComboAND;
    else if ( hasOR ) uniqueID = kComboOR;
    
    trigCombo->SetUniqueID(uniqueID);
    
    TObjArray* arr = tn.Tokenize(":");
    
    TIter nextA(arr);
    TObjString* an = 0x0;
    while ( ( an = static_cast<TObjString*>(nextA()) ) )
    {
      Int_t listIdx = 3;
      if ( an->String().BeginsWith("0") ) listIdx = 0;
      else if ( an->String().BeginsWith("1") ) listIdx = 1;
      else if ( an->String().BeginsWith("2") ) listIdx = 2;
      
      TObjArray* currList = static_cast<TObjArray*>(trigCombo->FindObject(listName[listIdx].Data()));
      if ( ! currList ) {
        currList = new TObjArray();
        currList->SetOwner();
        currList->SetName(listName[listIdx].Data());
        currList->SetUniqueID(listIdx);
        trigCombo->AddAt(currList,listIdx);
      }
      TObjString* currStr = new TObjString(an->String());
      
      if ( listIdx < 3 ) {
        // that's an input
        TObject* trigInput = fTrigInputsMap->FindObject(an->String().Data());
        if ( trigInput ) currStr->SetUniqueID(trigInput->GetUniqueID());
        else {
          AliError(Form("Uknown input %s in formula %s", an->String().Data(), currPattern.Data()));
          delete trigCombo;
          trigCombo = 0x0;
          break;
        }
      }
      currList->AddLast(currStr);
    }
    delete arr;
    if ( trigCombo) {
      fSelectedTrigCombination->AddLast(trigCombo);
      AliDebug(1,Form("Adding %s to trigger combination (type %u)",currPattern.Data(),trigCombo->GetUniqueID()));
    }
  }
  delete fullList;
  
  if ( ! duplicated.IsNull() )
    AliWarning(Form("Triggers %s already accounted in patterns",duplicated.Data()));
  if ( ! badSyntax.IsNull() )
    AliWarning(Form("%s : illegal expressions. Must be in the form:\n   pattern* => keep class if it contains pattern\n   !pattern* => reject class if it contains pattern\n   class&input = keep class if it satisfies the expression (exact matching required)",badSyntax.Data()));
}


//________________________________________________________________________
void AliMuonEventCuts::SetTrigClassLevels ( TString pattern )
{
  /// Set trigger cut level associated to the trigger class
  ///
  /// example:
  /// SetTrigClassLevels("MSL:Lpt,MSH:Hpt,MUL:LptLpt")
  ///
  /// For the trigger classes defined in SetTrigClassPatterns
  /// it check if they contains the keywords MSL or MSH
  /// Hence, in the analysis, the function
  /// TrackPtCutMatchTrigClass(track, "CPBIMSL") returns true if track match Lpt
  /// TrackPtCutMatchTrigClass(track, "CPBIMSH") returns true if track match Hpt
  /// TrackPtCutMatchTrigClass(track, "CMBAC") always returns true
  
  fSelectedTrigLevel->SetOwner();
  if ( fSelectedTrigLevel->GetEntries() > 0 ) fSelectedTrigLevel->Delete();
  
  pattern.ReplaceAll(" ","");
  
  TObjArray* fullList = pattern.Tokenize(",");
  UInt_t offset = 2;
  for ( Int_t ipat=0; ipat<fullList->GetEntries(); ++ipat ) {
    TString currPattern = fullList->At(ipat)->GetName();
    TObjArray* arr = currPattern.Tokenize(":");
    TObjString* trigClassPattern = new TObjString(arr->At(0)->GetName());
    TString selTrigLevel = arr->At(1)->GetName();
    selTrigLevel.ToUpper();
    UInt_t trigLevel = 0;
    if ( selTrigLevel.Contains("LPT") ) {
      trigLevel = 2;
      if ( selTrigLevel.Contains("LPTLPT") ) trigLevel += 2<<offset;
    }
    else if ( selTrigLevel.Contains("HPT") ) {
      trigLevel = 3;
      if ( selTrigLevel.Contains("HPTHPT") ) trigLevel += 3<<offset;
    }
    trigClassPattern->SetUniqueID(trigLevel);
    fSelectedTrigLevel->AddLast(trigClassPattern);
    delete arr;
  }
  
  delete fullList;
}

//________________________________________________________________________
UInt_t AliMuonEventCuts::GetTriggerInputBitMaskFromInputName(const char* inputName) const
{
  // Get trigger input bit from its name
  
  if (!fTrigInputsMap)
  {
    AliError("No Inputs Map available");
    return TMath::Limits<UInt_t>::Max();
  }
  
  TObjString* s = static_cast<TObjString*>(fTrigInputsMap->FindObject(inputName));
  if (!s)
  {
    AliError(Form("Did not find input %s",inputName));
    return TMath::Limits<UInt_t>::Max();    
  }
  return s->GetUniqueID();
}

//________________________________________________________________________
TArrayI AliMuonEventCuts::GetTrigClassPtCutLevel ( TString trigClassName ) const
{
  /// Get trigger class pt cut level for tracking/trigger matching
  ///
  /// CAVEAT: this functionality fully works with trigger class names,
  ///   but it can have a problem to extract the correct information in
  ///   combinations of trigger classes/inputs. In this case it provides:
  ///   - the highest pt level among classes/inputs combined through a logical AND "&"
  ///   - the lowest pt level among classes/inputs combined through a logical OR "|"
  ///   The first should be fine, but the second could not be the proper matching.
  TObject* obj = fAllSelectedTrigClasses->FindObject(trigClassName.Data());
  if ( ! obj ) {
    AliWarning(Form("Class %s not in the list!", trigClassName.Data()));
    return -1;
  }
  
  TArrayI ptCutLevel(2);
  ptCutLevel.Reset();
  ptCutLevel[0] = obj->GetUniqueID() & 0x3;
  ptCutLevel[1] = ( obj->GetUniqueID() >> 2 ) & 0x3;
  
  AliDebug(3,Form("Class %s ptCutLevel %i %i",trigClassName.Data(),ptCutLevel[0],ptCutLevel[1]));
  
  return ptCutLevel;
}


//________________________________________________________________________
void AliMuonEventCuts::SetTrigInputsMap ( TString trigInputsMap )
{
  /// Set trigger input mask
  /// The inputs must be in the form:
  /// input1:ID1,input2:ID2,...
  /// CAVEAT: the input ID is ID_aliceLogbook - 1
  /// since this is the ID in the OCDB
  
  fTrigInputsMap->SetOwner();
  if ( fTrigInputsMap->GetEntries() > 0 ) fTrigInputsMap->Delete();

  if ( trigInputsMap.IsNull() ) {
    AliWarning("Trigger input map not specified: using default");
    trigInputsMap = GetDefaultTrigInputsMap();
  }

  trigInputsMap.ReplaceAll(" ","");

  TObjArray* fullList = trigInputsMap.Tokenize(",");
  for ( Int_t ipat=0; ipat<fullList->GetEntries(); ++ipat ) {
    TString currPattern = fullList->At(ipat)->GetName();
    TObjArray* arr = currPattern.Tokenize(":");
    TObjString* trigInput = new TObjString(arr->At(0)->GetName());
    UInt_t trigID = (UInt_t)static_cast<TObjString*>(arr->At(1))->GetString().Atoi();
    trigInput->SetUniqueID(1<<trigID);
    fTrigInputsMap->Add(trigInput);
    delete arr;
  }
  delete fullList;
}

//________________________________________________________________________
const TObjArray*
AliMuonEventCuts::GetSelectedTrigClassesInEvent(const TString& firedTriggerClasses,
                                                UInt_t l0Inputs, UInt_t l1Inputs,
                                                UInt_t l2Inputs)
{
  /// Return the selected trigger classes in the fired trigger classes
  /// give also the L0,L1,L2 input bit masks
  
  BuildTriggerClasses(firedTriggerClasses,l0Inputs,l1Inputs,l2Inputs);

  return fSelectedTrigClassesInEvent;
}

//________________________________________________________________________
const TObjArray* AliMuonEventCuts::GetSelectedTrigClassesInEvent( const AliVEvent* event )
{
  /// Return the selected trigger classes in the current event
  UpdateEvent(event);
  return fSelectedTrigClassesInEvent;
}


//________________________________________________________________________
void AliMuonEventCuts::BuildTriggerClasses ( TString firedTrigClasses,
                                             UInt_t l0Inputs, UInt_t l1Inputs, UInt_t l2Inputs )
{
  //
  /// Return the list of trigger classes to be considered
  /// for current event. Update the global list if necessary
  //
  
  AliDebug(2,Form("Fired classes: %s  Inputs 0x%x 0x%x 0x%x",firedTrigClasses.Data(),l0Inputs,l1Inputs,l2Inputs));
  
  if ( fSelectedTrigClassesInEvent) fSelectedTrigClassesInEvent->Delete();
  else {
    fSelectedTrigClassesInEvent = new TObjArray(0);
    fSelectedTrigClassesInEvent->SetOwner();
  }
  

  TString firedTrigClassesAny = "ANY " + firedTrigClasses;
  
  if ( fSelectedTrigPattern->GetEntries() > 0 ) {
    TObjArray* firedTrigClassesList = firedTrigClassesAny.Tokenize(" ");
  
    for ( Int_t itrig=0; itrig<firedTrigClassesList->GetEntries(); ++itrig ) {
      TString trigName = ((TObjString*)firedTrigClassesList->At(itrig))->GetString();

      TObjString* foundTrig = static_cast<TObjString*>(fAllSelectedTrigClasses->FindObject(trigName.Data()));
      if ( ! foundTrig ) {
        if ( ! CheckTriggerClassPattern(trigName) ) continue;
      }
      
      AddToEventSelectedClass ( trigName, foundTrig );
    } // loop on trigger classes
  
    delete firedTrigClassesList;
  }
  
  for ( Int_t icomb=0; icomb<fSelectedTrigCombination->GetEntries(); icomb++ ) {
    TObjArray* currComb = static_cast<TObjArray*>(fSelectedTrigCombination->At(icomb));
    if ( CheckTriggerClassCombination(currComb, firedTrigClassesAny, l0Inputs, l1Inputs, l2Inputs) ) {
      TObjString* foundTrig = static_cast<TObjString*>(fAllSelectedTrigClasses->FindObject(currComb->GetName()));
      AddToEventSelectedClass ( currComb->GetName(), foundTrig, currComb->GetUniqueID() );
    }
  }
}

//_____________________________________________________________________________
Bool_t
AliMuonEventCuts::CheckTriggerClassPattern ( const TString& toCheck ) const
{
  // Check if the "toCheck" class matches the user pattern
  
  for ( Int_t ipat=0; ipat<fRejectedTrigPattern->GetEntries(); ++ipat ) {
    if ( toCheck.Contains(TRegexp(fRejectedTrigPattern->At(ipat)->GetName(),kTRUE) ) ) return kFALSE;
  } // loop on reject pattern

  for ( Int_t ipat=0; ipat<fSelectedTrigPattern->GetEntries(); ++ipat ) {
    if ( toCheck.Contains(TRegexp(fSelectedTrigPattern->At(ipat)->GetName(),kTRUE) ) ) return kTRUE;
  } // loop on keep pattern
  
  return kFALSE;
}


//_____________________________________________________________________________
Bool_t
AliMuonEventCuts::CheckTriggerClassCombination ( const TObjArray* combo,
                                                 const TString& firedTriggerClasses,
                                                 UInt_t l0Inputs, UInt_t l1Inputs, UInt_t l2Inputs ) const
{
  // Check if the "toCheck" class (or logical combination of classes and L0 inputs)
  // are within the "firedTriggerClasses"
  
  Bool_t ok(kFALSE);
  
  TString comp(combo->GetName());
  UInt_t trigInputs[3] = {l0Inputs, l1Inputs, l2Inputs};
  
  Bool_t exitLoop = kFALSE;
  
  TIter nextObj(combo);
  TObjArray* currList = 0x0;
  while ( ( currList = static_cast<TObjArray*>(nextObj()) ) ) {
    Int_t listIdx = currList->GetUniqueID();
    TIter nextA(currList);
    TObjString* an = 0x0;
    while ( ( an = static_cast<TObjString*>(nextA()) ) )
    {
      if ( listIdx < 3 ) {
        UInt_t bit = an->GetUniqueID();
        ok = ( (trigInputs[listIdx] & bit) == bit );
      }
      else {
        TPRegexp re(Form("(^|[ ])%s([ ]|$)",an->String().Data()));
        ok = firedTriggerClasses.Contains(re);
      }
      if ( combo->GetUniqueID() == kComboFormula ) comp.ReplaceAll(an->String().Data(),Form("%d",ok));
      else if ( ( combo->GetUniqueID() == kComboAND && ! ok ) || ( combo->GetUniqueID() == kComboOR && ok ) ) {
        exitLoop = kTRUE;
        break;
      }
    }
    if ( exitLoop ) break;
  }
  
  if ( combo->GetUniqueID() == kComboFormula ) {
    TFormula formula("TriggerClassFormulaCheck", comp.Data());
    if ( formula.Compile() > 0 ) {
      AliError(Form("Could not evaluate formula %s",comp.Data()));
      ok = kFALSE;
    }
    else ok = formula.Eval(0);
  }
  
  AliDebug(2,Form("tname %s => %d comp=%s  inputs 0x%x 0x%x 0x%x",combo->GetName(),ok,comp.Data(),l0Inputs, l1Inputs, l2Inputs));
  
  return ok;
}

//_____________________________________________________________________________
void
AliMuonEventCuts::AddToEventSelectedClass ( const TString& toCheck, const TObjString* foundTrig, UInt_t comboType )
{
  /// Add current trigger to the selected class for the event
  
  // Compute the trigger pt cut level of the current class
  UInt_t trigLevel = 0;
  if ( foundTrig ) trigLevel = foundTrig->GetUniqueID();
  else {
    // The assigned trigger pt cut level is:
    // - the correct one if "toCheck" is a single trigger class
    // - the highest pt cut among the matching ones in case "toCheck" is a trigger class/input
    //   combined through (at least one) logical AND "&"
    // - the lowest pt cut among the macthing ones in case "toCheck" is a trigger class/input
    //   combined through (only) logical OR "|"
    // This may lead to errors in case of complex combinations of trigger/inputs

    // First eliminate trigger classes which are negated in combinations
    TString checkStr(toCheck);
    while ( checkStr.Contains("!") ) {
      Int_t startNot = checkStr.Index("!");
      Int_t endNot = startNot;
      Int_t npars = 0;
      for ( endNot = startNot; endNot<checkStr.Length(); endNot++ ) {
        if ( checkStr[endNot] == '(' ) npars++;
        else if ( checkStr[endNot] == ')' ) npars--;

        if ( npars == 0 ) {
          if ( checkStr[endNot] == '&' || checkStr[endNot] == '|' ) break;
        }
      }
      checkStr.Remove(startNot,endNot-startNot);
    }

    // Then check if they match the Lpt or Hpt
    Bool_t isFirst = kTRUE;
    for ( Int_t ipat=0; ipat<fSelectedTrigLevel->GetEntries(); ++ipat ) {
      if ( checkStr.Contains(fSelectedTrigLevel->At(ipat)->GetName() ) ) {
        UInt_t currLevel = fSelectedTrigLevel->At(ipat)->GetUniqueID();
        if ( comboType == kComboAND ) trigLevel = TMath::Max(trigLevel, currLevel);
        else if ( comboType == kComboOR || comboType == kComboFormula ) {
          if ( isFirst ) {
            trigLevel = currLevel;
            isFirst = kFALSE;
          }
          else trigLevel = TMath::Min(trigLevel, currLevel);
        }
        else {
          trigLevel = currLevel;
          break;
        }
      }
    } // loop on trig level patterns
  }
  
  TObjString* currTrig = new TObjString(toCheck);
  currTrig->SetUniqueID(trigLevel);
  fSelectedTrigClassesInEvent->AddLast(currTrig);
  
  if ( foundTrig ) return;
  TObjString* addTrig = new TObjString(toCheck);
  addTrig->SetUniqueID(trigLevel);
  fAllSelectedTrigClasses->Add(addTrig);
  TString trigLevelInfo = Form("trig level %i ", trigLevel & 0x3);
  trigLevelInfo += ( trigLevel > 3 ) ? "di-muon" : "single-muon";
  AliInfo(Form("Adding %s (%s) to considered trigger classes",toCheck.Data(),trigLevelInfo.Data()));
}

//________________________________________________________________________
void AliMuonEventCuts::SetCentralityClasses(Int_t nCentralityBins, Double_t* centralityBins)
{
  //
  /// Set centrality classes
  //
  Double_t* bins = centralityBins;
  Int_t nbins = nCentralityBins;
  
  Double_t defaultCentralityBins[] = {-5., 0., 5., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100., 105.};
  if ( ! centralityBins ) {
    bins = defaultCentralityBins;
    nbins = sizeof(defaultCentralityBins)/sizeof(defaultCentralityBins[0])-1;
  }
  
  TString centralityEstimator = "V0M";
  if ( fCentralityClasses ) {
    centralityEstimator = GetCentralityEstimator();
    delete fCentralityClasses;
  }
  fCentralityClasses = new TAxis(nbins, bins);
  TString currClass = "";
  for ( Int_t ibin=1; ibin<=fCentralityClasses->GetNbins(); ++ibin ){
    currClass = Form("%.0f_%.0f",fCentralityClasses->GetBinLowEdge(ibin),fCentralityClasses->GetBinUpEdge(ibin));
    fCentralityClasses->SetBinLabel(ibin, currClass.Data());
  }
  
  SetCentralityEstimator(centralityEstimator);
}

//________________________________________________________________________
void AliMuonEventCuts::SetCentralityEstimator ( TString centralityEstimator )
{
  /// Set centrality estimator
  fCentralityClasses->SetName(centralityEstimator.Data());
}


//________________________________________________________________________
TString AliMuonEventCuts::GetCentralityEstimator () const
{
  /// Get centrality estimator
  return fCentralityClasses->GetName();
}

//________________________________________________________________________
Double_t AliMuonEventCuts::GetCentrality ( const AliVEvent* event ) const
{
  /// Get centrality
  AliVEvent* evt = const_cast<AliVEvent*>(event);
  return evt->GetCentrality()->GetCentralityPercentile(GetCentralityEstimator());
}

//________________________________________________________________________
void AliMuonEventCuts::SetDefaultParameters ()
{
  /// Standard parameters for muon event
  SetPhysicsSelectionMask(AliVEvent::kAny);
  SetVertexMinNContributors(1);
  SetVertexVzLimits();
}


//________________________________________________________________________
void AliMuonEventCuts::SetDefaultFilterMask ()
{
  /// Standard cuts for muon event
  SetFilterMask ( kPhysicsSelected | kSelectedTrig | kGoodVertex );
}

//________________________________________________________________________
void AliMuonEventCuts::Print(Option_t* option) const
{
  //
  /// Print info
  //
  TString sopt(option);
  sopt.ToLower();
  if ( sopt.IsNull() || sopt.Contains("*") || sopt.Contains("all") ) sopt = "mask param";
  UInt_t filterMask = GetFilterMask();
  if ( sopt.Contains("mask") ) {
    printf(" *** Muon event filter mask: *** \n");
    printf("  0x%x\n", filterMask);
    if ( filterMask & kPhysicsSelected ) printf("  Pass physics selection 0x%x\n", fPhysicsSelectionMask);
    if ( filterMask & kSelectedCentrality ) printf(  "%g < centrality (%s) < %g\n", fCentralityClasses->GetXmin(), GetCentralityEstimator().Data(), fCentralityClasses->GetXmax() );
    if ( filterMask & kSelectedTrig ) printf("  Has selected trigger classes\n");
    if ( filterMask & kGoodVertex ) printf("  SPD vertex with %i contributors && %g < Vz < %g\n", GetVertexMinNContributors(), GetVertexVzMin(), GetVertexVzMax());
    if ( filterMask & kNoPileup ) printf("  Reject pileup with SPD\n");
    printf(" ******************** \n");
  }
  if ( sopt.Contains("param") ) {
    printf(" *** Muon event parameters: *** \n");
    printf("  Centrality estimator: %s\n", GetCentralityEstimator().Data());
    printf(" ******************** \n");
  }
}
 AliMuonEventCuts.cxx:1
 AliMuonEventCuts.cxx:2
 AliMuonEventCuts.cxx:3
 AliMuonEventCuts.cxx:4
 AliMuonEventCuts.cxx:5
 AliMuonEventCuts.cxx:6
 AliMuonEventCuts.cxx:7
 AliMuonEventCuts.cxx:8
 AliMuonEventCuts.cxx:9
 AliMuonEventCuts.cxx:10
 AliMuonEventCuts.cxx:11
 AliMuonEventCuts.cxx:12
 AliMuonEventCuts.cxx:13
 AliMuonEventCuts.cxx:14
 AliMuonEventCuts.cxx:15
 AliMuonEventCuts.cxx:16
 AliMuonEventCuts.cxx:17
 AliMuonEventCuts.cxx:18
 AliMuonEventCuts.cxx:19
 AliMuonEventCuts.cxx:20
 AliMuonEventCuts.cxx:21
 AliMuonEventCuts.cxx:22
 AliMuonEventCuts.cxx:23
 AliMuonEventCuts.cxx:24
 AliMuonEventCuts.cxx:25
 AliMuonEventCuts.cxx:26
 AliMuonEventCuts.cxx:27
 AliMuonEventCuts.cxx:28
 AliMuonEventCuts.cxx:29
 AliMuonEventCuts.cxx:30
 AliMuonEventCuts.cxx:31
 AliMuonEventCuts.cxx:32
 AliMuonEventCuts.cxx:33
 AliMuonEventCuts.cxx:34
 AliMuonEventCuts.cxx:35
 AliMuonEventCuts.cxx:36
 AliMuonEventCuts.cxx:37
 AliMuonEventCuts.cxx:38
 AliMuonEventCuts.cxx:39
 AliMuonEventCuts.cxx:40
 AliMuonEventCuts.cxx:41
 AliMuonEventCuts.cxx:42
 AliMuonEventCuts.cxx:43
 AliMuonEventCuts.cxx:44
 AliMuonEventCuts.cxx:45
 AliMuonEventCuts.cxx:46
 AliMuonEventCuts.cxx:47
 AliMuonEventCuts.cxx:48
 AliMuonEventCuts.cxx:49
 AliMuonEventCuts.cxx:50
 AliMuonEventCuts.cxx:51
 AliMuonEventCuts.cxx:52
 AliMuonEventCuts.cxx:53
 AliMuonEventCuts.cxx:54
 AliMuonEventCuts.cxx:55
 AliMuonEventCuts.cxx:56
 AliMuonEventCuts.cxx:57
 AliMuonEventCuts.cxx:58
 AliMuonEventCuts.cxx:59
 AliMuonEventCuts.cxx:60
 AliMuonEventCuts.cxx:61
 AliMuonEventCuts.cxx:62
 AliMuonEventCuts.cxx:63
 AliMuonEventCuts.cxx:64
 AliMuonEventCuts.cxx:65
 AliMuonEventCuts.cxx:66
 AliMuonEventCuts.cxx:67
 AliMuonEventCuts.cxx:68
 AliMuonEventCuts.cxx:69
 AliMuonEventCuts.cxx:70
 AliMuonEventCuts.cxx:71
 AliMuonEventCuts.cxx:72
 AliMuonEventCuts.cxx:73
 AliMuonEventCuts.cxx:74
 AliMuonEventCuts.cxx:75
 AliMuonEventCuts.cxx:76
 AliMuonEventCuts.cxx:77
 AliMuonEventCuts.cxx:78
 AliMuonEventCuts.cxx:79
 AliMuonEventCuts.cxx:80
 AliMuonEventCuts.cxx:81
 AliMuonEventCuts.cxx:82
 AliMuonEventCuts.cxx:83
 AliMuonEventCuts.cxx:84
 AliMuonEventCuts.cxx:85
 AliMuonEventCuts.cxx:86
 AliMuonEventCuts.cxx:87
 AliMuonEventCuts.cxx:88
 AliMuonEventCuts.cxx:89
 AliMuonEventCuts.cxx:90
 AliMuonEventCuts.cxx:91
 AliMuonEventCuts.cxx:92
 AliMuonEventCuts.cxx:93
 AliMuonEventCuts.cxx:94
 AliMuonEventCuts.cxx:95
 AliMuonEventCuts.cxx:96
 AliMuonEventCuts.cxx:97
 AliMuonEventCuts.cxx:98
 AliMuonEventCuts.cxx:99
 AliMuonEventCuts.cxx:100
 AliMuonEventCuts.cxx:101
 AliMuonEventCuts.cxx:102
 AliMuonEventCuts.cxx:103
 AliMuonEventCuts.cxx:104
 AliMuonEventCuts.cxx:105
 AliMuonEventCuts.cxx:106
 AliMuonEventCuts.cxx:107
 AliMuonEventCuts.cxx:108
 AliMuonEventCuts.cxx:109
 AliMuonEventCuts.cxx:110
 AliMuonEventCuts.cxx:111
 AliMuonEventCuts.cxx:112
 AliMuonEventCuts.cxx:113
 AliMuonEventCuts.cxx:114
 AliMuonEventCuts.cxx:115
 AliMuonEventCuts.cxx:116
 AliMuonEventCuts.cxx:117
 AliMuonEventCuts.cxx:118
 AliMuonEventCuts.cxx:119
 AliMuonEventCuts.cxx:120
 AliMuonEventCuts.cxx:121
 AliMuonEventCuts.cxx:122
 AliMuonEventCuts.cxx:123
 AliMuonEventCuts.cxx:124
 AliMuonEventCuts.cxx:125
 AliMuonEventCuts.cxx:126
 AliMuonEventCuts.cxx:127
 AliMuonEventCuts.cxx:128
 AliMuonEventCuts.cxx:129
 AliMuonEventCuts.cxx:130
 AliMuonEventCuts.cxx:131
 AliMuonEventCuts.cxx:132
 AliMuonEventCuts.cxx:133
 AliMuonEventCuts.cxx:134
 AliMuonEventCuts.cxx:135
 AliMuonEventCuts.cxx:136
 AliMuonEventCuts.cxx:137
 AliMuonEventCuts.cxx:138
 AliMuonEventCuts.cxx:139
 AliMuonEventCuts.cxx:140
 AliMuonEventCuts.cxx:141
 AliMuonEventCuts.cxx:142
 AliMuonEventCuts.cxx:143
 AliMuonEventCuts.cxx:144
 AliMuonEventCuts.cxx:145
 AliMuonEventCuts.cxx:146
 AliMuonEventCuts.cxx:147
 AliMuonEventCuts.cxx:148
 AliMuonEventCuts.cxx:149
 AliMuonEventCuts.cxx:150
 AliMuonEventCuts.cxx:151
 AliMuonEventCuts.cxx:152
 AliMuonEventCuts.cxx:153
 AliMuonEventCuts.cxx:154
 AliMuonEventCuts.cxx:155
 AliMuonEventCuts.cxx:156
 AliMuonEventCuts.cxx:157
 AliMuonEventCuts.cxx:158
 AliMuonEventCuts.cxx:159
 AliMuonEventCuts.cxx:160
 AliMuonEventCuts.cxx:161
 AliMuonEventCuts.cxx:162
 AliMuonEventCuts.cxx:163
 AliMuonEventCuts.cxx:164
 AliMuonEventCuts.cxx:165
 AliMuonEventCuts.cxx:166
 AliMuonEventCuts.cxx:167
 AliMuonEventCuts.cxx:168
 AliMuonEventCuts.cxx:169
 AliMuonEventCuts.cxx:170
 AliMuonEventCuts.cxx:171
 AliMuonEventCuts.cxx:172
 AliMuonEventCuts.cxx:173
 AliMuonEventCuts.cxx:174
 AliMuonEventCuts.cxx:175
 AliMuonEventCuts.cxx:176
 AliMuonEventCuts.cxx:177
 AliMuonEventCuts.cxx:178
 AliMuonEventCuts.cxx:179
 AliMuonEventCuts.cxx:180
 AliMuonEventCuts.cxx:181
 AliMuonEventCuts.cxx:182
 AliMuonEventCuts.cxx:183
 AliMuonEventCuts.cxx:184
 AliMuonEventCuts.cxx:185
 AliMuonEventCuts.cxx:186
 AliMuonEventCuts.cxx:187
 AliMuonEventCuts.cxx:188
 AliMuonEventCuts.cxx:189
 AliMuonEventCuts.cxx:190
 AliMuonEventCuts.cxx:191
 AliMuonEventCuts.cxx:192
 AliMuonEventCuts.cxx:193
 AliMuonEventCuts.cxx:194
 AliMuonEventCuts.cxx:195
 AliMuonEventCuts.cxx:196
 AliMuonEventCuts.cxx:197
 AliMuonEventCuts.cxx:198
 AliMuonEventCuts.cxx:199
 AliMuonEventCuts.cxx:200
 AliMuonEventCuts.cxx:201
 AliMuonEventCuts.cxx:202
 AliMuonEventCuts.cxx:203
 AliMuonEventCuts.cxx:204
 AliMuonEventCuts.cxx:205
 AliMuonEventCuts.cxx:206
 AliMuonEventCuts.cxx:207
 AliMuonEventCuts.cxx:208
 AliMuonEventCuts.cxx:209
 AliMuonEventCuts.cxx:210
 AliMuonEventCuts.cxx:211
 AliMuonEventCuts.cxx:212
 AliMuonEventCuts.cxx:213
 AliMuonEventCuts.cxx:214
 AliMuonEventCuts.cxx:215
 AliMuonEventCuts.cxx:216
 AliMuonEventCuts.cxx:217
 AliMuonEventCuts.cxx:218
 AliMuonEventCuts.cxx:219
 AliMuonEventCuts.cxx:220
 AliMuonEventCuts.cxx:221
 AliMuonEventCuts.cxx:222
 AliMuonEventCuts.cxx:223
 AliMuonEventCuts.cxx:224
 AliMuonEventCuts.cxx:225
 AliMuonEventCuts.cxx:226
 AliMuonEventCuts.cxx:227
 AliMuonEventCuts.cxx:228
 AliMuonEventCuts.cxx:229
 AliMuonEventCuts.cxx:230
 AliMuonEventCuts.cxx:231
 AliMuonEventCuts.cxx:232
 AliMuonEventCuts.cxx:233
 AliMuonEventCuts.cxx:234
 AliMuonEventCuts.cxx:235
 AliMuonEventCuts.cxx:236
 AliMuonEventCuts.cxx:237
 AliMuonEventCuts.cxx:238
 AliMuonEventCuts.cxx:239
 AliMuonEventCuts.cxx:240
 AliMuonEventCuts.cxx:241
 AliMuonEventCuts.cxx:242
 AliMuonEventCuts.cxx:243
 AliMuonEventCuts.cxx:244
 AliMuonEventCuts.cxx:245
 AliMuonEventCuts.cxx:246
 AliMuonEventCuts.cxx:247
 AliMuonEventCuts.cxx:248
 AliMuonEventCuts.cxx:249
 AliMuonEventCuts.cxx:250
 AliMuonEventCuts.cxx:251
 AliMuonEventCuts.cxx:252
 AliMuonEventCuts.cxx:253
 AliMuonEventCuts.cxx:254
 AliMuonEventCuts.cxx:255
 AliMuonEventCuts.cxx:256
 AliMuonEventCuts.cxx:257
 AliMuonEventCuts.cxx:258
 AliMuonEventCuts.cxx:259
 AliMuonEventCuts.cxx:260
 AliMuonEventCuts.cxx:261
 AliMuonEventCuts.cxx:262
 AliMuonEventCuts.cxx:263
 AliMuonEventCuts.cxx:264
 AliMuonEventCuts.cxx:265
 AliMuonEventCuts.cxx:266
 AliMuonEventCuts.cxx:267
 AliMuonEventCuts.cxx:268
 AliMuonEventCuts.cxx:269
 AliMuonEventCuts.cxx:270
 AliMuonEventCuts.cxx:271
 AliMuonEventCuts.cxx:272
 AliMuonEventCuts.cxx:273
 AliMuonEventCuts.cxx:274
 AliMuonEventCuts.cxx:275
 AliMuonEventCuts.cxx:276
 AliMuonEventCuts.cxx:277
 AliMuonEventCuts.cxx:278
 AliMuonEventCuts.cxx:279
 AliMuonEventCuts.cxx:280
 AliMuonEventCuts.cxx:281
 AliMuonEventCuts.cxx:282
 AliMuonEventCuts.cxx:283
 AliMuonEventCuts.cxx:284
 AliMuonEventCuts.cxx:285
 AliMuonEventCuts.cxx:286
 AliMuonEventCuts.cxx:287
 AliMuonEventCuts.cxx:288
 AliMuonEventCuts.cxx:289
 AliMuonEventCuts.cxx:290
 AliMuonEventCuts.cxx:291
 AliMuonEventCuts.cxx:292
 AliMuonEventCuts.cxx:293
 AliMuonEventCuts.cxx:294
 AliMuonEventCuts.cxx:295
 AliMuonEventCuts.cxx:296
 AliMuonEventCuts.cxx:297
 AliMuonEventCuts.cxx:298
 AliMuonEventCuts.cxx:299
 AliMuonEventCuts.cxx:300
 AliMuonEventCuts.cxx:301
 AliMuonEventCuts.cxx:302
 AliMuonEventCuts.cxx:303
 AliMuonEventCuts.cxx:304
 AliMuonEventCuts.cxx:305
 AliMuonEventCuts.cxx:306
 AliMuonEventCuts.cxx:307
 AliMuonEventCuts.cxx:308
 AliMuonEventCuts.cxx:309
 AliMuonEventCuts.cxx:310
 AliMuonEventCuts.cxx:311
 AliMuonEventCuts.cxx:312
 AliMuonEventCuts.cxx:313
 AliMuonEventCuts.cxx:314
 AliMuonEventCuts.cxx:315
 AliMuonEventCuts.cxx:316
 AliMuonEventCuts.cxx:317
 AliMuonEventCuts.cxx:318
 AliMuonEventCuts.cxx:319
 AliMuonEventCuts.cxx:320
 AliMuonEventCuts.cxx:321
 AliMuonEventCuts.cxx:322
 AliMuonEventCuts.cxx:323
 AliMuonEventCuts.cxx:324
 AliMuonEventCuts.cxx:325
 AliMuonEventCuts.cxx:326
 AliMuonEventCuts.cxx:327
 AliMuonEventCuts.cxx:328
 AliMuonEventCuts.cxx:329
 AliMuonEventCuts.cxx:330
 AliMuonEventCuts.cxx:331
 AliMuonEventCuts.cxx:332
 AliMuonEventCuts.cxx:333
 AliMuonEventCuts.cxx:334
 AliMuonEventCuts.cxx:335
 AliMuonEventCuts.cxx:336
 AliMuonEventCuts.cxx:337
 AliMuonEventCuts.cxx:338
 AliMuonEventCuts.cxx:339
 AliMuonEventCuts.cxx:340
 AliMuonEventCuts.cxx:341
 AliMuonEventCuts.cxx:342
 AliMuonEventCuts.cxx:343
 AliMuonEventCuts.cxx:344
 AliMuonEventCuts.cxx:345
 AliMuonEventCuts.cxx:346
 AliMuonEventCuts.cxx:347
 AliMuonEventCuts.cxx:348
 AliMuonEventCuts.cxx:349
 AliMuonEventCuts.cxx:350
 AliMuonEventCuts.cxx:351
 AliMuonEventCuts.cxx:352
 AliMuonEventCuts.cxx:353
 AliMuonEventCuts.cxx:354
 AliMuonEventCuts.cxx:355
 AliMuonEventCuts.cxx:356
 AliMuonEventCuts.cxx:357
 AliMuonEventCuts.cxx:358
 AliMuonEventCuts.cxx:359
 AliMuonEventCuts.cxx:360
 AliMuonEventCuts.cxx:361
 AliMuonEventCuts.cxx:362
 AliMuonEventCuts.cxx:363
 AliMuonEventCuts.cxx:364
 AliMuonEventCuts.cxx:365
 AliMuonEventCuts.cxx:366
 AliMuonEventCuts.cxx:367
 AliMuonEventCuts.cxx:368
 AliMuonEventCuts.cxx:369
 AliMuonEventCuts.cxx:370
 AliMuonEventCuts.cxx:371
 AliMuonEventCuts.cxx:372
 AliMuonEventCuts.cxx:373
 AliMuonEventCuts.cxx:374
 AliMuonEventCuts.cxx:375
 AliMuonEventCuts.cxx:376
 AliMuonEventCuts.cxx:377
 AliMuonEventCuts.cxx:378
 AliMuonEventCuts.cxx:379
 AliMuonEventCuts.cxx:380
 AliMuonEventCuts.cxx:381
 AliMuonEventCuts.cxx:382
 AliMuonEventCuts.cxx:383
 AliMuonEventCuts.cxx:384
 AliMuonEventCuts.cxx:385
 AliMuonEventCuts.cxx:386
 AliMuonEventCuts.cxx:387
 AliMuonEventCuts.cxx:388
 AliMuonEventCuts.cxx:389
 AliMuonEventCuts.cxx:390
 AliMuonEventCuts.cxx:391
 AliMuonEventCuts.cxx:392
 AliMuonEventCuts.cxx:393
 AliMuonEventCuts.cxx:394
 AliMuonEventCuts.cxx:395
 AliMuonEventCuts.cxx:396
 AliMuonEventCuts.cxx:397
 AliMuonEventCuts.cxx:398
 AliMuonEventCuts.cxx:399
 AliMuonEventCuts.cxx:400
 AliMuonEventCuts.cxx:401
 AliMuonEventCuts.cxx:402
 AliMuonEventCuts.cxx:403
 AliMuonEventCuts.cxx:404
 AliMuonEventCuts.cxx:405
 AliMuonEventCuts.cxx:406
 AliMuonEventCuts.cxx:407
 AliMuonEventCuts.cxx:408
 AliMuonEventCuts.cxx:409
 AliMuonEventCuts.cxx:410
 AliMuonEventCuts.cxx:411
 AliMuonEventCuts.cxx:412
 AliMuonEventCuts.cxx:413
 AliMuonEventCuts.cxx:414
 AliMuonEventCuts.cxx:415
 AliMuonEventCuts.cxx:416
 AliMuonEventCuts.cxx:417
 AliMuonEventCuts.cxx:418
 AliMuonEventCuts.cxx:419
 AliMuonEventCuts.cxx:420
 AliMuonEventCuts.cxx:421
 AliMuonEventCuts.cxx:422
 AliMuonEventCuts.cxx:423
 AliMuonEventCuts.cxx:424
 AliMuonEventCuts.cxx:425
 AliMuonEventCuts.cxx:426
 AliMuonEventCuts.cxx:427
 AliMuonEventCuts.cxx:428
 AliMuonEventCuts.cxx:429
 AliMuonEventCuts.cxx:430
 AliMuonEventCuts.cxx:431
 AliMuonEventCuts.cxx:432
 AliMuonEventCuts.cxx:433
 AliMuonEventCuts.cxx:434
 AliMuonEventCuts.cxx:435
 AliMuonEventCuts.cxx:436
 AliMuonEventCuts.cxx:437
 AliMuonEventCuts.cxx:438
 AliMuonEventCuts.cxx:439
 AliMuonEventCuts.cxx:440
 AliMuonEventCuts.cxx:441
 AliMuonEventCuts.cxx:442
 AliMuonEventCuts.cxx:443
 AliMuonEventCuts.cxx:444
 AliMuonEventCuts.cxx:445
 AliMuonEventCuts.cxx:446
 AliMuonEventCuts.cxx:447
 AliMuonEventCuts.cxx:448
 AliMuonEventCuts.cxx:449
 AliMuonEventCuts.cxx:450
 AliMuonEventCuts.cxx:451
 AliMuonEventCuts.cxx:452
 AliMuonEventCuts.cxx:453
 AliMuonEventCuts.cxx:454
 AliMuonEventCuts.cxx:455
 AliMuonEventCuts.cxx:456
 AliMuonEventCuts.cxx:457
 AliMuonEventCuts.cxx:458
 AliMuonEventCuts.cxx:459
 AliMuonEventCuts.cxx:460
 AliMuonEventCuts.cxx:461
 AliMuonEventCuts.cxx:462
 AliMuonEventCuts.cxx:463
 AliMuonEventCuts.cxx:464
 AliMuonEventCuts.cxx:465
 AliMuonEventCuts.cxx:466
 AliMuonEventCuts.cxx:467
 AliMuonEventCuts.cxx:468
 AliMuonEventCuts.cxx:469
 AliMuonEventCuts.cxx:470
 AliMuonEventCuts.cxx:471
 AliMuonEventCuts.cxx:472
 AliMuonEventCuts.cxx:473
 AliMuonEventCuts.cxx:474
 AliMuonEventCuts.cxx:475
 AliMuonEventCuts.cxx:476
 AliMuonEventCuts.cxx:477
 AliMuonEventCuts.cxx:478
 AliMuonEventCuts.cxx:479
 AliMuonEventCuts.cxx:480
 AliMuonEventCuts.cxx:481
 AliMuonEventCuts.cxx:482
 AliMuonEventCuts.cxx:483
 AliMuonEventCuts.cxx:484
 AliMuonEventCuts.cxx:485
 AliMuonEventCuts.cxx:486
 AliMuonEventCuts.cxx:487
 AliMuonEventCuts.cxx:488
 AliMuonEventCuts.cxx:489
 AliMuonEventCuts.cxx:490
 AliMuonEventCuts.cxx:491
 AliMuonEventCuts.cxx:492
 AliMuonEventCuts.cxx:493
 AliMuonEventCuts.cxx:494
 AliMuonEventCuts.cxx:495
 AliMuonEventCuts.cxx:496
 AliMuonEventCuts.cxx:497
 AliMuonEventCuts.cxx:498
 AliMuonEventCuts.cxx:499
 AliMuonEventCuts.cxx:500
 AliMuonEventCuts.cxx:501
 AliMuonEventCuts.cxx:502
 AliMuonEventCuts.cxx:503
 AliMuonEventCuts.cxx:504
 AliMuonEventCuts.cxx:505
 AliMuonEventCuts.cxx:506
 AliMuonEventCuts.cxx:507
 AliMuonEventCuts.cxx:508
 AliMuonEventCuts.cxx:509
 AliMuonEventCuts.cxx:510
 AliMuonEventCuts.cxx:511
 AliMuonEventCuts.cxx:512
 AliMuonEventCuts.cxx:513
 AliMuonEventCuts.cxx:514
 AliMuonEventCuts.cxx:515
 AliMuonEventCuts.cxx:516
 AliMuonEventCuts.cxx:517
 AliMuonEventCuts.cxx:518
 AliMuonEventCuts.cxx:519
 AliMuonEventCuts.cxx:520
 AliMuonEventCuts.cxx:521
 AliMuonEventCuts.cxx:522
 AliMuonEventCuts.cxx:523
 AliMuonEventCuts.cxx:524
 AliMuonEventCuts.cxx:525
 AliMuonEventCuts.cxx:526
 AliMuonEventCuts.cxx:527
 AliMuonEventCuts.cxx:528
 AliMuonEventCuts.cxx:529
 AliMuonEventCuts.cxx:530
 AliMuonEventCuts.cxx:531
 AliMuonEventCuts.cxx:532
 AliMuonEventCuts.cxx:533
 AliMuonEventCuts.cxx:534
 AliMuonEventCuts.cxx:535
 AliMuonEventCuts.cxx:536
 AliMuonEventCuts.cxx:537
 AliMuonEventCuts.cxx:538
 AliMuonEventCuts.cxx:539
 AliMuonEventCuts.cxx:540
 AliMuonEventCuts.cxx:541
 AliMuonEventCuts.cxx:542
 AliMuonEventCuts.cxx:543
 AliMuonEventCuts.cxx:544
 AliMuonEventCuts.cxx:545
 AliMuonEventCuts.cxx:546
 AliMuonEventCuts.cxx:547
 AliMuonEventCuts.cxx:548
 AliMuonEventCuts.cxx:549
 AliMuonEventCuts.cxx:550
 AliMuonEventCuts.cxx:551
 AliMuonEventCuts.cxx:552
 AliMuonEventCuts.cxx:553
 AliMuonEventCuts.cxx:554
 AliMuonEventCuts.cxx:555
 AliMuonEventCuts.cxx:556
 AliMuonEventCuts.cxx:557
 AliMuonEventCuts.cxx:558
 AliMuonEventCuts.cxx:559
 AliMuonEventCuts.cxx:560
 AliMuonEventCuts.cxx:561
 AliMuonEventCuts.cxx:562
 AliMuonEventCuts.cxx:563
 AliMuonEventCuts.cxx:564
 AliMuonEventCuts.cxx:565
 AliMuonEventCuts.cxx:566
 AliMuonEventCuts.cxx:567
 AliMuonEventCuts.cxx:568
 AliMuonEventCuts.cxx:569
 AliMuonEventCuts.cxx:570
 AliMuonEventCuts.cxx:571
 AliMuonEventCuts.cxx:572
 AliMuonEventCuts.cxx:573
 AliMuonEventCuts.cxx:574
 AliMuonEventCuts.cxx:575
 AliMuonEventCuts.cxx:576
 AliMuonEventCuts.cxx:577
 AliMuonEventCuts.cxx:578
 AliMuonEventCuts.cxx:579
 AliMuonEventCuts.cxx:580
 AliMuonEventCuts.cxx:581
 AliMuonEventCuts.cxx:582
 AliMuonEventCuts.cxx:583
 AliMuonEventCuts.cxx:584
 AliMuonEventCuts.cxx:585
 AliMuonEventCuts.cxx:586
 AliMuonEventCuts.cxx:587
 AliMuonEventCuts.cxx:588
 AliMuonEventCuts.cxx:589
 AliMuonEventCuts.cxx:590
 AliMuonEventCuts.cxx:591
 AliMuonEventCuts.cxx:592
 AliMuonEventCuts.cxx:593
 AliMuonEventCuts.cxx:594
 AliMuonEventCuts.cxx:595
 AliMuonEventCuts.cxx:596
 AliMuonEventCuts.cxx:597
 AliMuonEventCuts.cxx:598
 AliMuonEventCuts.cxx:599
 AliMuonEventCuts.cxx:600
 AliMuonEventCuts.cxx:601
 AliMuonEventCuts.cxx:602
 AliMuonEventCuts.cxx:603
 AliMuonEventCuts.cxx:604
 AliMuonEventCuts.cxx:605
 AliMuonEventCuts.cxx:606
 AliMuonEventCuts.cxx:607
 AliMuonEventCuts.cxx:608
 AliMuonEventCuts.cxx:609
 AliMuonEventCuts.cxx:610
 AliMuonEventCuts.cxx:611
 AliMuonEventCuts.cxx:612
 AliMuonEventCuts.cxx:613
 AliMuonEventCuts.cxx:614
 AliMuonEventCuts.cxx:615
 AliMuonEventCuts.cxx:616
 AliMuonEventCuts.cxx:617
 AliMuonEventCuts.cxx:618
 AliMuonEventCuts.cxx:619
 AliMuonEventCuts.cxx:620
 AliMuonEventCuts.cxx:621
 AliMuonEventCuts.cxx:622
 AliMuonEventCuts.cxx:623
 AliMuonEventCuts.cxx:624
 AliMuonEventCuts.cxx:625
 AliMuonEventCuts.cxx:626
 AliMuonEventCuts.cxx:627
 AliMuonEventCuts.cxx:628
 AliMuonEventCuts.cxx:629
 AliMuonEventCuts.cxx:630
 AliMuonEventCuts.cxx:631
 AliMuonEventCuts.cxx:632
 AliMuonEventCuts.cxx:633
 AliMuonEventCuts.cxx:634
 AliMuonEventCuts.cxx:635
 AliMuonEventCuts.cxx:636
 AliMuonEventCuts.cxx:637
 AliMuonEventCuts.cxx:638
 AliMuonEventCuts.cxx:639
 AliMuonEventCuts.cxx:640
 AliMuonEventCuts.cxx:641
 AliMuonEventCuts.cxx:642
 AliMuonEventCuts.cxx:643
 AliMuonEventCuts.cxx:644
 AliMuonEventCuts.cxx:645
 AliMuonEventCuts.cxx:646
 AliMuonEventCuts.cxx:647
 AliMuonEventCuts.cxx:648
 AliMuonEventCuts.cxx:649
 AliMuonEventCuts.cxx:650
 AliMuonEventCuts.cxx:651
 AliMuonEventCuts.cxx:652
 AliMuonEventCuts.cxx:653
 AliMuonEventCuts.cxx:654
 AliMuonEventCuts.cxx:655
 AliMuonEventCuts.cxx:656
 AliMuonEventCuts.cxx:657
 AliMuonEventCuts.cxx:658
 AliMuonEventCuts.cxx:659
 AliMuonEventCuts.cxx:660
 AliMuonEventCuts.cxx:661
 AliMuonEventCuts.cxx:662
 AliMuonEventCuts.cxx:663
 AliMuonEventCuts.cxx:664
 AliMuonEventCuts.cxx:665
 AliMuonEventCuts.cxx:666
 AliMuonEventCuts.cxx:667
 AliMuonEventCuts.cxx:668
 AliMuonEventCuts.cxx:669
 AliMuonEventCuts.cxx:670
 AliMuonEventCuts.cxx:671
 AliMuonEventCuts.cxx:672
 AliMuonEventCuts.cxx:673
 AliMuonEventCuts.cxx:674
 AliMuonEventCuts.cxx:675
 AliMuonEventCuts.cxx:676
 AliMuonEventCuts.cxx:677
 AliMuonEventCuts.cxx:678
 AliMuonEventCuts.cxx:679
 AliMuonEventCuts.cxx:680
 AliMuonEventCuts.cxx:681
 AliMuonEventCuts.cxx:682
 AliMuonEventCuts.cxx:683
 AliMuonEventCuts.cxx:684
 AliMuonEventCuts.cxx:685
 AliMuonEventCuts.cxx:686
 AliMuonEventCuts.cxx:687
 AliMuonEventCuts.cxx:688
 AliMuonEventCuts.cxx:689
 AliMuonEventCuts.cxx:690
 AliMuonEventCuts.cxx:691
 AliMuonEventCuts.cxx:692
 AliMuonEventCuts.cxx:693
 AliMuonEventCuts.cxx:694
 AliMuonEventCuts.cxx:695
 AliMuonEventCuts.cxx:696
 AliMuonEventCuts.cxx:697
 AliMuonEventCuts.cxx:698
 AliMuonEventCuts.cxx:699
 AliMuonEventCuts.cxx:700
 AliMuonEventCuts.cxx:701
 AliMuonEventCuts.cxx:702
 AliMuonEventCuts.cxx:703
 AliMuonEventCuts.cxx:704
 AliMuonEventCuts.cxx:705
 AliMuonEventCuts.cxx:706
 AliMuonEventCuts.cxx:707
 AliMuonEventCuts.cxx:708
 AliMuonEventCuts.cxx:709
 AliMuonEventCuts.cxx:710
 AliMuonEventCuts.cxx:711
 AliMuonEventCuts.cxx:712
 AliMuonEventCuts.cxx:713
 AliMuonEventCuts.cxx:714
 AliMuonEventCuts.cxx:715
 AliMuonEventCuts.cxx:716
 AliMuonEventCuts.cxx:717
 AliMuonEventCuts.cxx:718
 AliMuonEventCuts.cxx:719
 AliMuonEventCuts.cxx:720
 AliMuonEventCuts.cxx:721
 AliMuonEventCuts.cxx:722
 AliMuonEventCuts.cxx:723
 AliMuonEventCuts.cxx:724
 AliMuonEventCuts.cxx:725
 AliMuonEventCuts.cxx:726
 AliMuonEventCuts.cxx:727
 AliMuonEventCuts.cxx:728
 AliMuonEventCuts.cxx:729
 AliMuonEventCuts.cxx:730
 AliMuonEventCuts.cxx:731
 AliMuonEventCuts.cxx:732
 AliMuonEventCuts.cxx:733
 AliMuonEventCuts.cxx:734
 AliMuonEventCuts.cxx:735
 AliMuonEventCuts.cxx:736
 AliMuonEventCuts.cxx:737
 AliMuonEventCuts.cxx:738
 AliMuonEventCuts.cxx:739
 AliMuonEventCuts.cxx:740
 AliMuonEventCuts.cxx:741
 AliMuonEventCuts.cxx:742
 AliMuonEventCuts.cxx:743
 AliMuonEventCuts.cxx:744
 AliMuonEventCuts.cxx:745
 AliMuonEventCuts.cxx:746
 AliMuonEventCuts.cxx:747
 AliMuonEventCuts.cxx:748
 AliMuonEventCuts.cxx:749
 AliMuonEventCuts.cxx:750
 AliMuonEventCuts.cxx:751
 AliMuonEventCuts.cxx:752
 AliMuonEventCuts.cxx:753
 AliMuonEventCuts.cxx:754
 AliMuonEventCuts.cxx:755
 AliMuonEventCuts.cxx:756
 AliMuonEventCuts.cxx:757
 AliMuonEventCuts.cxx:758
 AliMuonEventCuts.cxx:759
 AliMuonEventCuts.cxx:760
 AliMuonEventCuts.cxx:761
 AliMuonEventCuts.cxx:762
 AliMuonEventCuts.cxx:763
 AliMuonEventCuts.cxx:764
 AliMuonEventCuts.cxx:765
 AliMuonEventCuts.cxx:766
 AliMuonEventCuts.cxx:767
 AliMuonEventCuts.cxx:768
 AliMuonEventCuts.cxx:769
 AliMuonEventCuts.cxx:770
 AliMuonEventCuts.cxx:771
 AliMuonEventCuts.cxx:772
 AliMuonEventCuts.cxx:773
 AliMuonEventCuts.cxx:774
 AliMuonEventCuts.cxx:775
 AliMuonEventCuts.cxx:776
 AliMuonEventCuts.cxx:777
 AliMuonEventCuts.cxx:778
 AliMuonEventCuts.cxx:779
 AliMuonEventCuts.cxx:780
 AliMuonEventCuts.cxx:781
 AliMuonEventCuts.cxx:782
 AliMuonEventCuts.cxx:783
 AliMuonEventCuts.cxx:784
 AliMuonEventCuts.cxx:785
 AliMuonEventCuts.cxx:786
 AliMuonEventCuts.cxx:787
 AliMuonEventCuts.cxx:788
 AliMuonEventCuts.cxx:789
 AliMuonEventCuts.cxx:790
 AliMuonEventCuts.cxx:791
 AliMuonEventCuts.cxx:792
 AliMuonEventCuts.cxx:793
 AliMuonEventCuts.cxx:794
 AliMuonEventCuts.cxx:795
 AliMuonEventCuts.cxx:796
 AliMuonEventCuts.cxx:797
 AliMuonEventCuts.cxx:798
 AliMuonEventCuts.cxx:799
 AliMuonEventCuts.cxx:800
 AliMuonEventCuts.cxx:801
 AliMuonEventCuts.cxx:802
 AliMuonEventCuts.cxx:803
 AliMuonEventCuts.cxx:804
 AliMuonEventCuts.cxx:805
 AliMuonEventCuts.cxx:806
 AliMuonEventCuts.cxx:807
 AliMuonEventCuts.cxx:808
 AliMuonEventCuts.cxx:809
 AliMuonEventCuts.cxx:810
 AliMuonEventCuts.cxx:811
 AliMuonEventCuts.cxx:812
 AliMuonEventCuts.cxx:813
 AliMuonEventCuts.cxx:814
 AliMuonEventCuts.cxx:815
 AliMuonEventCuts.cxx:816
 AliMuonEventCuts.cxx:817
 AliMuonEventCuts.cxx:818
 AliMuonEventCuts.cxx:819
 AliMuonEventCuts.cxx:820
 AliMuonEventCuts.cxx:821
 AliMuonEventCuts.cxx:822
 AliMuonEventCuts.cxx:823
 AliMuonEventCuts.cxx:824
 AliMuonEventCuts.cxx:825
 AliMuonEventCuts.cxx:826
 AliMuonEventCuts.cxx:827
 AliMuonEventCuts.cxx:828
 AliMuonEventCuts.cxx:829
 AliMuonEventCuts.cxx:830
 AliMuonEventCuts.cxx:831
 AliMuonEventCuts.cxx:832
 AliMuonEventCuts.cxx:833
 AliMuonEventCuts.cxx:834
 AliMuonEventCuts.cxx:835
 AliMuonEventCuts.cxx:836
 AliMuonEventCuts.cxx:837
 AliMuonEventCuts.cxx:838
 AliMuonEventCuts.cxx:839
 AliMuonEventCuts.cxx:840
 AliMuonEventCuts.cxx:841
 AliMuonEventCuts.cxx:842
 AliMuonEventCuts.cxx:843
 AliMuonEventCuts.cxx:844
 AliMuonEventCuts.cxx:845
 AliMuonEventCuts.cxx:846
 AliMuonEventCuts.cxx:847
 AliMuonEventCuts.cxx:848
 AliMuonEventCuts.cxx:849
 AliMuonEventCuts.cxx:850
 AliMuonEventCuts.cxx:851
 AliMuonEventCuts.cxx:852
 AliMuonEventCuts.cxx:853
 AliMuonEventCuts.cxx:854
 AliMuonEventCuts.cxx:855
 AliMuonEventCuts.cxx:856
 AliMuonEventCuts.cxx:857
 AliMuonEventCuts.cxx:858
 AliMuonEventCuts.cxx:859
 AliMuonEventCuts.cxx:860
 AliMuonEventCuts.cxx:861
 AliMuonEventCuts.cxx:862
 AliMuonEventCuts.cxx:863
 AliMuonEventCuts.cxx:864
 AliMuonEventCuts.cxx:865
 AliMuonEventCuts.cxx:866
 AliMuonEventCuts.cxx:867
 AliMuonEventCuts.cxx:868
 AliMuonEventCuts.cxx:869
 AliMuonEventCuts.cxx:870
 AliMuonEventCuts.cxx:871
 AliMuonEventCuts.cxx:872
 AliMuonEventCuts.cxx:873
 AliMuonEventCuts.cxx:874
 AliMuonEventCuts.cxx:875
 AliMuonEventCuts.cxx:876
 AliMuonEventCuts.cxx:877
 AliMuonEventCuts.cxx:878
 AliMuonEventCuts.cxx:879
 AliMuonEventCuts.cxx:880
 AliMuonEventCuts.cxx:881
 AliMuonEventCuts.cxx:882
 AliMuonEventCuts.cxx:883
 AliMuonEventCuts.cxx:884
 AliMuonEventCuts.cxx:885
 AliMuonEventCuts.cxx:886
 AliMuonEventCuts.cxx:887
 AliMuonEventCuts.cxx:888
 AliMuonEventCuts.cxx:889
 AliMuonEventCuts.cxx:890
 AliMuonEventCuts.cxx:891
 AliMuonEventCuts.cxx:892
 AliMuonEventCuts.cxx:893
 AliMuonEventCuts.cxx:894
 AliMuonEventCuts.cxx:895
 AliMuonEventCuts.cxx:896
 AliMuonEventCuts.cxx:897
 AliMuonEventCuts.cxx:898
 AliMuonEventCuts.cxx:899
 AliMuonEventCuts.cxx:900
 AliMuonEventCuts.cxx:901
 AliMuonEventCuts.cxx:902
 AliMuonEventCuts.cxx:903
 AliMuonEventCuts.cxx:904
 AliMuonEventCuts.cxx:905
 AliMuonEventCuts.cxx:906
 AliMuonEventCuts.cxx:907
 AliMuonEventCuts.cxx:908
 AliMuonEventCuts.cxx:909
 AliMuonEventCuts.cxx:910
 AliMuonEventCuts.cxx:911
 AliMuonEventCuts.cxx:912
 AliMuonEventCuts.cxx:913
 AliMuonEventCuts.cxx:914
 AliMuonEventCuts.cxx:915
 AliMuonEventCuts.cxx:916
 AliMuonEventCuts.cxx:917