#ifndef ALIMUONEVENTCUTS_H
#define ALIMUONEVENTCUTS_H
#include "AliAnalysisCuts.h"
class AliVEvent;
class AliVVertex;
class TList;
class TAxis;
class TArrayI;
class TString;
class TObjString;
class TObjArray;
class AliAnalysisUtils;
class AliMuonEventCuts : public AliAnalysisCuts
{
public:
enum {
kPhysicsSelected = BIT(0),
kSelectedCentrality = BIT(1),
kSelectedTrig = BIT(2),
kGoodVertex = BIT(3),
kNoPileup = BIT(4)
};
AliMuonEventCuts();
AliMuonEventCuts(const char* name, const char* title);
AliMuonEventCuts(const AliMuonEventCuts& obj);
AliMuonEventCuts& operator=(const AliMuonEventCuts& obj);
virtual ~AliMuonEventCuts();
virtual UInt_t GetSelectionMask ( const TObject* obj );
virtual Bool_t IsSelected ( TObject* obj );
virtual Bool_t IsSelected ( TList* );
void SetDefaultFilterMask();
void SetDefaultParameters();
void SkipTestsNonInFilterMask ( UInt_t skipMask = 0xFFFF) { fCheckMask = ~skipMask; }
void SetTrigClassPatterns ( TString trigPattern, TString trigInputsMap = "" );
TString GetDefaultTrigClassPatterns() const;
TString GetDefaultTrigInputsMap() const;
void SetTrigClassLevels (TString pattern = "MSL:Lpt,MUSL:Lpt,MSH:Hpt,MUSH:Hpt,MUL:LptLpt,MUU:LptLpt,MLL:LptLpt" );
TArrayI GetTrigClassPtCutLevel (TString trigClassName ) const;
TList* GetAllSelectedTrigClasses () const { return fAllSelectedTrigClasses; }
const TObjArray* GetSelectedTrigClassesInEvent ( const AliVEvent* event );
const TObjArray* GetSelectedTrigClassesInEvent(const TString& firedTriggerClasses,
UInt_t l0Inputs, UInt_t l1Inputs, UInt_t l2Inputs);
UInt_t GetTriggerInputBitMaskFromInputName(const char* inputName) const;
void SetCentralityClasses(Int_t nCentralityBins = -1, Double_t* centralityBins = 0x0);
TAxis* GetCentralityClasses() const { return fCentralityClasses; }
void SetCentralityEstimator (TString centralityEstimator = "V0M" );
TString GetCentralityEstimator () const;
Double_t GetCentrality ( const AliVEvent* event ) const;
void SetPhysicsSelectionMask (UInt_t physicsSelectionMask ) { fPhysicsSelectionMask = physicsSelectionMask; }
void SetVertexMinNContributors (Int_t vertexMinNContributors ) { fVertexMinNContributors = vertexMinNContributors; }
Int_t GetVertexMinNContributors () const { return fVertexMinNContributors; }
void SetVertexVzLimits ( Double_t vzMin = -999., Double_t vzMax = 999. ) { fVertexVzMin = vzMin; fVertexVzMax = vzMax; }
Double_t GetVertexVzMin () const { return fVertexVzMin; }
Double_t GetVertexVzMax () const { return fVertexVzMax; }
AliAnalysisUtils* GetAnalysisUtils ( ) { return fAnalysisUtils; }
void Print ( Option_t* option = "" ) const;
protected:
void BuildTriggerClasses (TString firedTrigClasses, UInt_t l0Inputs, UInt_t l1Inputs, UInt_t l2Inputs );
Bool_t CheckTriggerClassPattern ( const TString& toCheck ) const;
Bool_t CheckTriggerClassCombination ( const TObjArray* combo, const TString& firedTriggerClasses, UInt_t l0Inputs, UInt_t l1Inputs, UInt_t l2Inputs ) const;
void AddToEventSelectedClass ( const TString& toCheck, const TObjString* foundTrig, const UInt_t comboType = 0 );
Bool_t UpdateEvent( const AliVEvent* event );
void SetDefaultTrigClassPatterns();
void SetTrigInputsMap ( TString trigInputsMap );
UInt_t fPhysicsSelectionMask;
Int_t fVertexMinNContributors;
Double_t fVertexVzMin;
Double_t fVertexVzMax;
UInt_t fCheckMask;
TObjArray* fSelectedTrigPattern;
TObjArray* fRejectedTrigPattern;
TObjArray* fSelectedTrigLevel;
TObjArray* fSelectedTrigCombination;
TList* fTrigInputsMap;
TList* fAllSelectedTrigClasses;
TAxis* fCentralityClasses;
AliAnalysisUtils* fAnalysisUtils;
private:
ULong64_t fEventTriggerMask;
TObjArray* fSelectedTrigClassesInEvent;
enum {kComboSimple, kComboFormula, kComboAND, kComboOR};
ClassDef(AliMuonEventCuts, 6);
};
#endif