#ifndef ALITRIGGERANALYSIS_H
#define ALITRIGGERANALYSIS_H
#include <TObject.h>
class AliVEvent;
class AliESDEvent;
class AliESDtrackCuts;
class TH1F;
class TH2F;
class TCollection;
class TMap;
class AliTriggerAnalysis : public TObject{
public:
enum Trigger { kAcceptAll = 1, kMB1 = 2, kMB2, kMB3, kSPDGFO, kSPDGFOBits, kV0A, kV0C, kV0OR, kV0AND,
kV0ABG, kV0CBG, kZDC, kZDCA, kZDCC, kZNA, kZNC, kZNABG, kZNCBG, kFMDA, kFMDC, kFPANY, kNSD1, kMB1Prime,
kSPDGFOL0, kSPDGFOL1, kZDCTDCA, kZDCTDCC, kZDCTime, kCTPV0A, kCTPV0C, kTPCLaserWarmUp, kSPDClsVsTrkBG,
kCentral,kSemiCentral, kT0, kT0BG, kT0Pileup, kEMCAL, kTPCHVdip,
kTRDHCO, kTRDHJT, kTRDHSE, kTRDHQU, kTRDHEE,
kEmcalL0,kEmcalL1GammaHigh, kEmcalL1GammaLow, kEmcalL1JetHigh, kEmcalL1JetLow,
kIncompleteEvent,
kStartOfFlags = 0x0100, kOfflineFlag = 0x8000, kOneParticle = 0x10000, kOneTrack = 0x20000};
enum AliceSide { kASide = 1, kCSide, kCentralBarrel };
enum V0Decision { kV0Invalid = -1, kV0Empty = 0, kV0BB, kV0BG, kV0Fake };
enum T0Decision { kT0Invalid = -1, kT0Empty = 0, kT0BB, kT0DecBG, kT0DecPileup };
static const char* GetTriggerName(Trigger trigger);
AliTriggerAnalysis();
virtual ~AliTriggerAnalysis();
void EnableHistograms(Bool_t isLowFlux = kFALSE);
void SetAnalyzeMC(Bool_t flag = kTRUE) { fMC = flag; }
Bool_t IsTriggerFired(const AliESDEvent* aEsd, Trigger trigger);
Int_t EvaluateTrigger(const AliESDEvent* aEsd, Trigger trigger);
Bool_t IsTriggerBitFired(const AliESDEvent* aEsd, Trigger trigger) const;
Bool_t IsTriggerBitFired(const AliESDEvent* aEsd, ULong64_t tclass) const;
Bool_t IsOfflineTriggerFired(const AliESDEvent* aEsd, Trigger trigger);
V0Decision V0Trigger(const AliESDEvent* aEsd, AliceSide side, Bool_t online, Bool_t fillHists = kFALSE);
T0Decision T0Trigger(const AliESDEvent* aEsd, Bool_t online, Bool_t fillHists = kFALSE);
Bool_t SPDGFOTrigger(const AliESDEvent* aEsd, Int_t origin) { return SPDFiredChips(aEsd, origin) >= fSPDGFOThreshold; }
Bool_t ZDCTrigger (const AliESDEvent* aEsd, AliceSide side) const;
Bool_t ZDCTDCTrigger(const AliESDEvent* aEsd, AliceSide side, Bool_t useZN=kTRUE, Bool_t useZP=kFALSE, Bool_t fillHists=kFALSE) const;
Bool_t ZDCTimeTrigger(const AliESDEvent *aEsd, Bool_t fillHists=kFALSE) const;
Bool_t ZDCTimeBGTrigger(const AliESDEvent *aEsd, AliceSide side) const;
Bool_t FMDTrigger(const AliESDEvent* aEsd, AliceSide side);
Bool_t TRDTrigger(const AliESDEvent* esd, Trigger trigger);
Bool_t EMCALCellsTrigger(const AliESDEvent *aEsd);
Bool_t EMCALTrigger(const AliVEvent* event, Trigger trigger);
Int_t SSDClusters(const AliVEvent* event);
Int_t SPDFiredChips(const AliESDEvent* aEsd, Int_t origin, Bool_t fillHists = kFALSE, Int_t layer = 0);
Bool_t IsSPDClusterVsTrackletBG(const AliVEvent* event, Bool_t fillHists = kFALSE);
Bool_t IsLaserWarmUpTPCEvent(const AliESDEvent* esd);
Bool_t IsHVdipTPCEvent(const AliESDEvent* esd);
Bool_t IsIncompleteEvent(const AliESDEvent* esd);
void FillHistograms(const AliESDEvent* aEsd);
void FillTriggerClasses(const AliESDEvent* aEsd);
void SetSPDGFOThreshhold(Int_t t) { fSPDGFOThreshold = t; }
void SetSPDGFOEfficiency(TH1F* hist) { fSPDGFOEfficiency = hist; }
void SetSPDClustersVsTrackletsParameters(Float_t a, Float_t b) { fASPDCvsTCut = a; fBSPDCvsTCut =b;}
void SetV0TimeOffset(Float_t offset) { fV0TimeOffset = offset; }
void SetV0AdcThr(Float_t thr) { fV0AdcThr = thr; }
void SetV0HwPars(Float_t thr, Float_t winLow, Float_t winHigh) { fV0HwAdcThr = thr; fV0HwWinLow = winLow; fV0HwWinHigh = winHigh; }
void SetFMDThreshold(Float_t low, Float_t hit) { fFMDLowCut = low; fFMDHitCut = hit; }
void SetDoFMD(Bool_t flag = kTRUE) {fDoFMD = flag;}
void SetZDCCutParams(Float_t refSum, Float_t refDelta, Float_t sigmaSum, Float_t sigmaDelta) { fZDCCutRefSum = refSum; fZDCCutRefDelta = refDelta; fZDCCutSigmaSum = sigmaSum; fZDCCutSigmaDelta = sigmaDelta; }
void SetCorrZDCCutParams(Float_t refSum, Float_t refDelta, Float_t sigmaSum, Float_t sigmaDelta) { fZDCCutRefSumCorr = refSum; fZDCCutRefDeltaCorr = refDelta; fZDCCutSigmaSumCorr = sigmaSum; fZDCCutSigmaDeltaCorr = sigmaDelta; }
void SetZNCorrCutParams(Float_t znaTimeCorrMin, Float_t znaTimeCorrMax, Float_t zncTimeCorrMin, Float_t zncTimeCorrMax)
{ fZDCCutZNATimeCorrMin = znaTimeCorrMin; fZDCCutZNATimeCorrMax = znaTimeCorrMax;
fZDCCutZNCTimeCorrMin = zncTimeCorrMin; fZDCCutZNCTimeCorrMax = zncTimeCorrMax; }
void SetTRDTriggerParameters(Float_t ptHSE, UChar_t pidHSE, Float_t ptHQU, UChar_t pidHQU, Float_t ptHEE, UChar_t pidHEE, UChar_t minSectorHEE, UChar_t maxSectorHEE, Float_t ptHJT, UChar_t nHJT) {
fTRDptHSE = ptHSE; fTRDpidHSE = pidHSE;
fTRDptHQU = ptHQU; fTRDpidHQU = pidHQU;
fTRDptHEE = ptHEE; fTRDpidHEE = pidHEE;
fTRDminSectorHEE = minSectorHEE; fTRDmaxSectorHEE = maxSectorHEE;
fTRDptHJT = ptHJT; fTRDnHJT = nHJT;
}
Int_t GetSPDGFOThreshhold() const { return fSPDGFOThreshold; }
Float_t GetV0TimeOffset() const { return fV0TimeOffset; }
Float_t GetV0AdcThr() const { return fV0AdcThr; }
Float_t GetFMDLowThreshold() const { return fFMDLowCut; }
Float_t GetFMDHitThreshold() const { return fFMDHitCut; }
TMap * GetTriggerClasses() const { return fTriggerClasses;}
virtual Long64_t Merge(TCollection* list);
void SaveHistograms() const;
void PrintTriggerClasses() const;
void SetESDTrackCuts(AliESDtrackCuts* cuts) { fEsdTrackCuts = cuts;}
AliESDtrackCuts* GetESDTrackCuts() const {return fEsdTrackCuts;}
void SetTPCOnly(Bool_t bTPCOnly) {fTPCOnly = bTPCOnly;}
Bool_t GetTPCOnly() const {return fTPCOnly;}
protected:
Float_t V0CorrectLeadingTime(Int_t i, Float_t time, Float_t adc, Int_t runNumber) const;
Float_t V0LeadingTimeWeight(Float_t adc) const;
Int_t FMDHitCombinations(const AliESDEvent* aEsd, AliceSide side, Bool_t fillHists = kFALSE);
Int_t fSPDGFOThreshold;
TH1F* fSPDGFOEfficiency;
Float_t fV0TimeOffset;
Float_t fV0AdcThr;
Float_t fV0HwAdcThr;
Float_t fV0HwWinLow;
Float_t fV0HwWinHigh;
Float_t fZDCCutRefSum;
Float_t fZDCCutRefDelta;
Float_t fZDCCutSigmaSum;
Float_t fZDCCutSigmaDelta;
Float_t fZDCCutRefSumCorr;
Float_t fZDCCutRefDeltaCorr;
Float_t fZDCCutSigmaSumCorr;
Float_t fZDCCutSigmaDeltaCorr;
Float_t fZDCCutZNATimeCorrMin;
Float_t fZDCCutZNATimeCorrMax;
Float_t fZDCCutZNCTimeCorrMin;
Float_t fZDCCutZNCTimeCorrMax;
Float_t fASPDCvsTCut;
Float_t fBSPDCvsTCut;
Float_t fTRDptHSE;
UChar_t fTRDpidHSE;
Float_t fTRDptHQU;
UChar_t fTRDpidHQU;
Float_t fTRDptHEE;
UChar_t fTRDpidHEE;
UChar_t fTRDminSectorHEE;
UChar_t fTRDmaxSectorHEE;
Float_t fTRDptHJT;
UChar_t fTRDnHJT;
Bool_t fDoFMD;
Float_t fFMDLowCut;
Float_t fFMDHitCut;
TH2F* fHistBitsSPD;
TH1F* fHistFiredBitsSPD;
TH2F* fHistSPDClsVsTrk;
TH1F* fHistV0A;
TH1F* fHistV0C;
TH1F* fHistZDC;
TH1F* fHistTDCZDC;
TH2F* fHistTimeZDC;
TH2F* fHistTimeCorrZDC;
TH1F* fHistFMDA;
TH1F* fHistFMDC;
TH1F* fHistFMDSingle;
TH1F* fHistFMDSum;
TH1F* fHistT0;
TMap* fTriggerClasses;
Bool_t fMC;
AliESDtrackCuts* fEsdTrackCuts;
Bool_t fTPCOnly;
ClassDef(AliTriggerAnalysis, 23)
private:
AliTriggerAnalysis(const AliTriggerAnalysis&);
AliTriggerAnalysis& operator=(const AliTriggerAnalysis&);
};
#endif