#ifndef ALIVANALYSISMUON_H
#define ALIVANALYSISMUON_H
#include "AliAnalysisTaskSE.h"
class TString;
class TObjArray;
class TAxis;
class TLorentzVector;
class TList;
class THashList;
class AliMergeableCollection;
class AliCounterCollection;
class AliVParticle;
class AliAODEvent;
class AliESDEvent;
class AliCFGridSparse;
class AliMuonEventCuts;
class AliMuonTrackCuts;
class AliMuonPairCuts;
class AliVVertex;
class AliUtilityMuonAncestor;
class AliVAnalysisMuon : public AliAnalysisTaskSE {
public:
AliVAnalysisMuon();
AliVAnalysisMuon(const char *name, const AliMuonTrackCuts& trackCuts);
AliVAnalysisMuon(const char *name, const AliMuonPairCuts& pairCuts);
AliVAnalysisMuon(const char *name, const AliMuonTrackCuts& trackCuts, const AliMuonPairCuts& pairCuts);
virtual ~AliVAnalysisMuon();
virtual void UserCreateOutputObjects();
virtual void UserExec(Option_t *option);
virtual void Terminate(Option_t *option);
virtual void NotifyRun();
virtual void FinishTaskOutput();
void SetCentralityClasses(Int_t nCentralityBins = -1, Double_t* centralityBins = 0x0);
TAxis* GetCentralityClasses() const;
Bool_t SetCentralityClassesFromOutput();
void SetTrigClassPatterns(const TString pattern);
TString GetDefaultTrigClassPatterns() const;
TList* GetAllSelectedTrigClasses() const;
void SetTerminateOptions(TString physSel="All", TString trigClass="ANY", TString centralityRange="", TString furtherOpts="");
AliMuonEventCuts* GetMuonEventCuts() { return fMuonEventCuts; }
AliMuonTrackCuts* GetMuonTrackCuts() { return fMuonTrackCuts; }
AliMuonPairCuts* GetMuonPairCuts() { return fMuonPairCuts; }
static Bool_t SetSparseRange(AliCFGridSparse* gridSparse,
Int_t ivar, TString labelName,
Double_t varMin, Double_t varMax,
TString option = "");
void SetWeight ( TObject* wgtObj );
TObject* GetWeight ( const char* wgtName );
enum {
kPhysSelPass,
kPhysSelReject,
kNselections
};
enum {
kCharmMu,
kBeautyMu,
kQuarkoniumMu,
kWbosonMu,
kZbosonMu,
kDecayMu,
kSecondaryMu,
kRecoHadron,
kUnidentified,
kNtrackSources
};
protected:
virtual void MyUserCreateOutputObjects() = 0;
virtual void ProcessEvent(TString physSel, const TObjArray& selectTrigClasses, TString centrality) = 0;
Int_t GetParticleType ( AliVParticle* track );
Bool_t AddObjectToCollection(TObject* object, Int_t index = -1);
TObject* GetMergeableObject(TString physSel, TString trigClassName, TString centrality, TString objectName);
TObject* GetSum(TString physSel, TString trigClassNames, TString centrality, TString objectPattern);
AliMuonEventCuts* fMuonEventCuts;
AliMuonTrackCuts* fMuonTrackCuts;
AliMuonPairCuts* fMuonPairCuts;
AliESDEvent* fESDEvent;
AliAODEvent* fAODEvent;
TObjArray* fTerminateOptions;
TObjArray* fChargeKeys;
TObjArray* fSrcKeys;
TObjArray* fPhysSelKeys;
THashList* fWeights;
AliUtilityMuonAncestor* fUtilityMuonAncestor;
AliCounterCollection* fEventCounters;
AliMergeableCollection* fMergeableCollection;
TObjArray* fOutputList;
private:
AliVAnalysisMuon(const AliVAnalysisMuon&);
AliVAnalysisMuon& operator=(const AliVAnalysisMuon&);
void InitKeys();
void CreateMergeableObjects(TString physSel, TString trigClassName, TString centrality);
TObjArray* fOutputPrototypeList;
ClassDef(AliVAnalysisMuon, 6);
};
#endif