#ifndef ALIPHYSICSSELECTION_H
#define ALIPHYSICSSELECTION_H
#include <AliAnalysisCuts.h>
#include <TList.h>
#include "TObjString.h"
#include "AliVEvent.h"
#include "AliLog.h"
#include "AliAnalysisManager.h"
class AliESDEvent;
class TH2F;
class TH1F;
class TCollection;
class AliTriggerAnalysis;
class AliAnalysisTaskSE;
class AliOADBPhysicsSelection ;
class AliOADBFillingScheme ;
class AliOADBTriggerAnalysis;
class TPRegexp;
class AliPhysicsSelection : public AliAnalysisCuts
{
public:
public:
enum {kStatTriggerClass=1,kStatHWTrig,kStatV0ABG,kStatV0CBG,kStatMB1,kStatMB1Prime,kStatLaserCut,kHVdipCut,kStatFO1,kStatFO2,kStatFO2L1,kStatV0A,kStatV0C, kStatT0BB, kStatT0BG, kStatT0PileUp, kStatZDCA,kStatZDCC,kStatZDCAC,kStatZDCTime,kStatZNABG,kStatZNCBG,kStatV0,kStatV0ZN,kStatOffline,kStatBG, kStatAcceptedPileUp, kStatAccepted};
#ifdef VERBOSE_STAT
enum {kStatRowAllB=0, kStatRowAllAC, kStatRowAllE, kStatRowBG,kStatRowAcc,kStatRowBGFrac,kStatRowAccFrac,kStatRowErrGoodFrac,kStatRowGoodFrac,kStatRowErrGood,kStatRowGood};
#else
enum {kStatRowAllB=0, kStatRowAllAC, kStatRowAllE, kStatRowBG, kStatRowAcc,kStatRowGood};
#endif
enum {kStatIdxAll=0,kStatIdxBin0=1};
enum ETriggerLogic { kCINT1 = 0, kCMBS2A, kCMBS2C, kCMBAC, kCMBACS2, kHighMultL1 };
typedef Bool_t (*Bin0Callback_t)(const AliESDEvent *);
AliPhysicsSelection();
virtual ~AliPhysicsSelection();
virtual UInt_t GetSelectionMask(const TObject* obj) { return IsCollisionCandidate((const AliESDEvent*) obj); }
virtual Bool_t IsSelected(TList*) { return kFALSE; }
virtual Bool_t IsSelected(TObject*) {return kFALSE;}
Int_t GetCurrentRun() const {return fCurrentRun;}
UInt_t IsCollisionCandidate(const AliESDEvent* aEsd);
Bool_t Initialize(const AliESDEvent* aEsd);
Bool_t Initialize(Int_t runNumber);
void SetAnalyzeMC(Bool_t flag = kTRUE) { fMC = flag; }
void SetSkipTriggerClassSelection(Bool_t flag = kTRUE) { fSkipTriggerClassSelection = flag; }
void SetSkipV0(Bool_t flag=kTRUE) { AliError ("This method is deprecated! Please change the OADB configuration instead") ; fSkipV0 = flag;}
void AddBackgroundIdentification(AliAnalysisCuts*) { AliFatal ("This method is deprecated. Please use the kSPDClsVsTrkBG tag in the OADB configuration instead"); }
virtual void Print(const Option_t* option = "") const;
virtual Long64_t Merge(TCollection* list);
void SaveHistograms(const char* folder = 0);
const TList* GetCollisionTriggerClasses() const { return &fCollTrigClasses; }
const TList* GetBGTriggerClasses() const { return &fBGTrigClasses; }
void AddCollisionTriggerClass(const char* className);
void AddBGTriggerClass(const char* className) ;
void SetCustomOADBObjects(AliOADBPhysicsSelection * oadbPS, AliOADBFillingScheme * oadbFS, AliOADBTriggerAnalysis * oadbTA = 0) { fPSOADB = oadbPS; fFillOADB = oadbFS; fTriggerOADB = oadbTA; fUsingCustomClasses = kTRUE;}
const AliOADBPhysicsSelection * GetOADBPhysicsSelection() const {return fPSOADB; }
const AliOADBFillingScheme * GetOADBFillingScheme() const {return fFillOADB;}
const AliOADBTriggerAnalysis * GetOADBTriggerAnalysis() const {return fTriggerOADB;}
Int_t GetBGStatOffset() const { return fBGStatOffset; }
AliTriggerAnalysis* GetTriggerAnalysis(Int_t i = 0) { return (fTriggerAnalysis.GetEntries() > 0) ? (AliTriggerAnalysis*) fTriggerAnalysis.At(i) : 0; }
const TH2F* GetStatisticsHistogram(Int_t idx=kStatIdxAll) const { return fHistStatistics[idx]; }
const TH2F* GetBunchCrossingHistogram() const { return fHistBunchCrossing; }
virtual TObject *GetStatistics(const Option_t *option) const;
void SetBIFactors(const AliESDEvent * aESD);
void SetUseBXNumbers(Bool_t flag = kTRUE) {fUseBXNumbers = flag;}
void SetComputeBG (UInt_t flag = AliVEvent::kMB) {fComputeBG = flag; if(flag) fUseBXNumbers = flag;}
void SetUseMuonTriggers(Bool_t) { Printf("ERROR: Use of AliPhysicsSelection::SetUseMuonTriggers is deprecated. Use AliVEvent::kMUON selection instead."); }
void SetBin0Callback( const char * cb) {fBin0CallBack = cb;}
void SetBin0CallbackViaPointer( Bin0Callback_t cb) {fBin0CallBackPointer = cb;}
static const char * GetOADBFileName() { static TString filename; filename.Form("%s/COMMON/PHYSICSSELECTION/data/physicsSelection.root", AliAnalysisManager::GetOADBPath()); return filename.Data();};
void SetPassName(const TString passName) { fPassName = passName; }
void DetectPassName();
Bool_t IsMC() const { return fMC; }
protected:
UInt_t CheckTriggerClass(const AliESDEvent* aEsd, const char* trigger, Int_t& triggerLogic) const;
Bool_t EvaluateTriggerLogic(const AliESDEvent* aEsd, AliTriggerAnalysis* triggerAnalysis, const char* triggerLogic, Bool_t offline);
TH2F * BookHistStatistics(const char * tag) ;
Int_t GetStatRow(const char * triggerBXClass, UInt_t offlineTriggerType, UInt_t ** rowIDs) const;
const char * GetTriggerString(TObjString * obj);
TString fPassName;
Int_t fCurrentRun;
Bool_t fMC;
TList fCollTrigClasses;
TList fBGTrigClasses;
TList fTriggerAnalysis;
TH2F* fHistStatistics[2];
TH2F* fHistBunchCrossing;
TH1F* fHistTriggerPattern;
Bool_t fSkipTriggerClassSelection;
Bool_t fUsingCustomClasses;
Bool_t fSkipV0;
Float_t fBIFactorA;
Float_t fBIFactorC;
Float_t fBIFactorAC;
UInt_t fComputeBG;
Int_t fBGStatOffset;
Bool_t fUseBXNumbers;
Bool_t fUseMuonTriggers;
TString fFillingScheme;
TString fBin0CallBack;
Bin0Callback_t fBin0CallBackPointer;
Bool_t fIsPP;
AliOADBPhysicsSelection * fPSOADB;
AliOADBFillingScheme * fFillOADB;
AliOADBTriggerAnalysis * fTriggerOADB;
TPRegexp* fRegexp;
TList* fCashedTokens;
ClassDef(AliPhysicsSelection, 16)
private:
AliPhysicsSelection(const AliPhysicsSelection&);
AliPhysicsSelection& operator=(const AliPhysicsSelection&);
};
#endif
AliPhysicsSelection.h:100 AliPhysicsSelection.h:101 AliPhysicsSelection.h:102 AliPhysicsSelection.h:103 AliPhysicsSelection.h:104 AliPhysicsSelection.h:105 AliPhysicsSelection.h:106 AliPhysicsSelection.h:107 AliPhysicsSelection.h:108 AliPhysicsSelection.h:109 AliPhysicsSelection.h:110 AliPhysicsSelection.h:111 AliPhysicsSelection.h:112 AliPhysicsSelection.h:113 AliPhysicsSelection.h:114 AliPhysicsSelection.h:115 AliPhysicsSelection.h:116 AliPhysicsSelection.h:117 AliPhysicsSelection.h:118 AliPhysicsSelection.h:119 AliPhysicsSelection.h:120 AliPhysicsSelection.h:121 AliPhysicsSelection.h:122 AliPhysicsSelection.h:123 AliPhysicsSelection.h:124 AliPhysicsSelection.h:125 AliPhysicsSelection.h:126 AliPhysicsSelection.h:127 AliPhysicsSelection.h:128 AliPhysicsSelection.h:129 AliPhysicsSelection.h:130 AliPhysicsSelection.h:131 AliPhysicsSelection.h:132 AliPhysicsSelection.h:133 AliPhysicsSelection.h:134 AliPhysicsSelection.h:135 AliPhysicsSelection.h:136 AliPhysicsSelection.h:137 AliPhysicsSelection.h:138 AliPhysicsSelection.h:139 AliPhysicsSelection.h:140 AliPhysicsSelection.h:141 AliPhysicsSelection.h:142 AliPhysicsSelection.h:143 AliPhysicsSelection.h:144 AliPhysicsSelection.h:145 AliPhysicsSelection.h:146 AliPhysicsSelection.h:147 AliPhysicsSelection.h:148 AliPhysicsSelection.h:149 AliPhysicsSelection.h:150 AliPhysicsSelection.h:151 AliPhysicsSelection.h:152 AliPhysicsSelection.h:153 AliPhysicsSelection.h:154 AliPhysicsSelection.h:155 AliPhysicsSelection.h:156 AliPhysicsSelection.h:157 AliPhysicsSelection.h:158 AliPhysicsSelection.h:159 AliPhysicsSelection.h:160 AliPhysicsSelection.h:161 AliPhysicsSelection.h:162 AliPhysicsSelection.h:163 AliPhysicsSelection.h:164 AliPhysicsSelection.h:165 AliPhysicsSelection.h:166