Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / ANALYSIS / AliTriggerAnalysis.h
CommitLineData
70fdd197 1/* $Id: AliTriggerAnalysis.h 35782 2009-10-22 11:54:31Z jgrosseo $ */
ff8c4f30 2
70fdd197 3#ifndef ALITRIGGERANALYSIS_H
4#define ALITRIGGERANALYSIS_H
ff8c4f30 5
6#include <TObject.h>
ff8c4f30 7
7a11141c 8/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
9 * See cxx source for full Copyright notice */
10
11//-------------------------------------------------------------------------
70fdd197 12// Implementation of Class AliTriggerAnalysis
13// This class provides function to check if events have been triggered based on the data in the ESD
14// The trigger bits, trigger class inputs and only the data (offline trigger) can be used
7a11141c 15// Origin: Jan Fiete Grosse-Oetringhaus, CERN
16//-------------------------------------------------------------------------
17
ff8c4f30 18class AliESDEvent;
449618cd 19class AliESDtrackCuts;
27704f6c 20class TH1F;
21class TH2F;
70fdd197 22class TCollection;
c01a136b 23class TMap;
ff8c4f30 24
70fdd197 25class AliTriggerAnalysis : public TObject
ff8c4f30 26{
27 public:
7c55ebd9 28 enum Trigger { kAcceptAll = 1, kMB1 = 2, kMB2, kMB3, kSPDGFO, kSPDGFOBits, kV0A, kV0C, kV0OR, kV0AND,
0d12ffff 29 kV0ABG, kV0CBG, kZDC, kZDCA, kZDCC, kZNA, kZNC, kZNABG, kZNCBG, kFMDA, kFMDC, kFPANY, kNSD1, kMB1Prime,
1ea7a921 30 kSPDGFOL0, kSPDGFOL1, kZDCTDCA, kZDCTDCC, kZDCTime, kCTPV0A, kCTPV0C, kTPCLaserWarmUp, kSPDClsVsTrkBG,
b68d0b5e 31 kCentral,kSemiCentral, kT0, kT0BG, kT0Pileup, kEMCAL,kTPCHVdip,
32 kTRDHCO, kTRDHJT, kTRDHSE, kTRDHQU, kTRDHEE,
625e557d 33 kIncompleteEvent,
1ea7a921 34 kStartOfFlags = 0x0100, kOfflineFlag = 0x8000, kOneParticle = 0x10000, kOneTrack = 0x20000}; // MB1, MB2, MB3 definition from ALICE-INT-2005-025
c8d3e441 35 enum AliceSide { kASide = 1, kCSide, kCentralBarrel };
733f0542 36 enum V0Decision { kV0Invalid = -1, kV0Empty = 0, kV0BB, kV0BG, kV0Fake };
559b5ed7 37 enum T0Decision { kT0Invalid = -1, kT0Empty = 0, kT0BB, kT0DecBG, kT0DecPileup };
ff8c4f30 38
70fdd197 39 AliTriggerAnalysis();
61899827 40 virtual ~AliTriggerAnalysis();
907972ff 41
891c67bd 42 void EnableHistograms(Bool_t isLowFlux = kFALSE);
a2ce3799 43 void SetAnalyzeMC(Bool_t flag = kTRUE) { fMC = flag; }
61899827 44
45 Bool_t IsTriggerFired(const AliESDEvent* aEsd, Trigger trigger);
7c55ebd9 46 Int_t EvaluateTrigger(const AliESDEvent* aEsd, Trigger trigger);
70fdd197 47
48 // using trigger bits in ESD
49 Bool_t IsTriggerBitFired(const AliESDEvent* aEsd, Trigger trigger) const;
50 Bool_t IsTriggerBitFired(ULong64_t triggerMask, Trigger trigger) const;
51 Bool_t IsTriggerBitFired(const AliESDEvent* aEsd, ULong64_t tclass) const;
52
53 // using ESD data from detectors
61899827 54 Bool_t IsOfflineTriggerFired(const AliESDEvent* aEsd, Trigger trigger);
70fdd197 55
56 // using trigger classes in ESD
57 Bool_t IsTriggerClassFired(const AliESDEvent* aEsd, const Char_t* tclass) const;
58
c01a136b 59 // some "raw" trigger functions
c2ba5a61 60 Int_t SPDFiredChips(const AliESDEvent* aEsd, Int_t origin, Bool_t fillHists = kFALSE, Int_t layer = 0);
61899827 61 Bool_t SPDGFOTrigger(const AliESDEvent* aEsd, Int_t origin);
559b5ed7 62 Bool_t IsSPDClusterVsTrackletBG(const AliESDEvent* esd, Bool_t fillHists = kFALSE);
97fa3cbc 63 V0Decision V0Trigger(const AliESDEvent* aEsd, AliceSide side, Bool_t online, Bool_t fillHists = kFALSE);
559b5ed7 64 T0Decision T0Trigger(const AliESDEvent* aEsd, Bool_t online, Bool_t fillHists = kFALSE);
ce08cb1f 65 Bool_t ZDCTrigger (const AliESDEvent* aEsd, AliceSide side) const;
7c55ebd9 66 Bool_t ZDCTDCTrigger(const AliESDEvent* aEsd, AliceSide side, Bool_t useZN=kTRUE, Bool_t useZP=kFALSE, Bool_t fillHists=kFALSE) const;
67 Bool_t ZDCTimeTrigger(const AliESDEvent *aEsd, Bool_t fillHists=kFALSE) const;
0d12ffff 68 Bool_t ZDCTimeBGTrigger(const AliESDEvent *aEsd, AliceSide side) const;
61899827 69 Bool_t FMDTrigger(const AliESDEvent* aEsd, AliceSide side);
85c71ba7 70 Int_t SSDClusters(const AliESDEvent* aEsd);
8d5a14d6 71 Bool_t EMCALCellsTrigger(const AliESDEvent *aEsd);
70fdd197 72 static const char* GetTriggerName(Trigger trigger);
73
7c55ebd9 74 Bool_t IsLaserWarmUpTPCEvent(const AliESDEvent* esd);
625e557d 75 Bool_t IsHVdipTPCEvent(const AliESDEvent* esd);
b68d0b5e 76 Bool_t TRDTrigger(const AliESDEvent* esd, Trigger trigger);
625e557d 77
78 Bool_t IsIncompleteEvent(const AliESDEvent* esd);
7c55ebd9 79
907972ff 80 void FillHistograms(const AliESDEvent* aEsd);
c01a136b 81 void FillTriggerClasses(const AliESDEvent* aEsd);
ff8c4f30 82
83 void SetSPDGFOThreshhold(Int_t t) { fSPDGFOThreshold = t; }
27704f6c 84 void SetSPDGFOEfficiency(TH1F* hist) { fSPDGFOEfficiency = hist; }
1ea7a921 85 void SetSPDClustersVsTrackletsParameters(Float_t a, Float_t b) { fASPDCvsTCut = a; fBSPDCvsTCut =b;}
61899827 86 void SetV0TimeOffset(Float_t offset) { fV0TimeOffset = offset; }
97fa3cbc 87 void SetV0AdcThr(Float_t thr) { fV0AdcThr = thr; }
88 void SetV0HwPars(Float_t thr, Float_t winLow, Float_t winHigh) { fV0HwAdcThr = thr; fV0HwWinLow = winLow; fV0HwWinHigh = winHigh; }
7a11141c 89 void SetFMDThreshold(Float_t low, Float_t hit) { fFMDLowCut = low; fFMDHitCut = hit; }
4011b280 90 void SetDoFMD(Bool_t flag = kTRUE) {fDoFMD = flag;}
7c55ebd9 91 void SetZDCCutParams(Float_t refSum, Float_t refDelta, Float_t sigmaSum, Float_t sigmaDelta) { fZDCCutRefSum = refSum; fZDCCutRefDelta = refDelta; fZDCCutSigmaSum = sigmaSum; fZDCCutSigmaDelta = sigmaDelta; }
d6305a15 92 void SetCorrZDCCutParams(Float_t refSum, Float_t refDelta, Float_t sigmaSum, Float_t sigmaDelta) { fZDCCutRefSumCorr = refSum; fZDCCutRefDeltaCorr = refDelta; fZDCCutSigmaSumCorr = sigmaSum; fZDCCutSigmaDeltaCorr = sigmaDelta; }
b68d0b5e 93 void SetZNCorrCutParams(Float_t znaTimeCorrMin, Float_t znaTimeCorrMax, Float_t zncTimeCorrMin, Float_t zncTimeCorrMax)
94 { fZDCCutZNATimeCorrMin = znaTimeCorrMin; fZDCCutZNATimeCorrMax = znaTimeCorrMax;
95 fZDCCutZNCTimeCorrMin = zncTimeCorrMin; fZDCCutZNCTimeCorrMax = zncTimeCorrMax; }
96
97 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) {
98 fTRDptHSE = ptHSE; fTRDpidHSE = pidHSE;
99 fTRDptHQU = ptHQU; fTRDpidHQU = pidHQU;
100 fTRDptHEE = ptHEE; fTRDpidHEE = pidHEE;
101 fTRDminSectorHEE = minSectorHEE; fTRDmaxSectorHEE = maxSectorHEE;
102 fTRDptHJT = ptHJT; fTRDnHJT = nHJT;
103 }
4011b280 104
ff8c4f30 105 Int_t GetSPDGFOThreshhold() const { return fSPDGFOThreshold; }
61899827 106 Float_t GetV0TimeOffset() const { return fV0TimeOffset; }
97fa3cbc 107 Float_t GetV0AdcThr() const { return fV0AdcThr; }
7a11141c 108 Float_t GetFMDLowThreshold() const { return fFMDLowCut; }
109 Float_t GetFMDHitThreshold() const { return fFMDHitCut; }
8dec6e35 110 TMap * GetTriggerClasses() const { return fTriggerClasses;}
111
112
907972ff 113 virtual Long64_t Merge(TCollection* list);
61899827 114 void SaveHistograms() const;
c01a136b 115
116 void PrintTriggerClasses() const;
449618cd 117 void SetESDTrackCuts(AliESDtrackCuts* cuts) { fEsdTrackCuts = cuts;}
118 AliESDtrackCuts* GetESDTrackCuts() const {return fEsdTrackCuts;}
ff8c4f30 119
52f3b98d 120 void SetTPCOnly(Bool_t bTPCOnly) {fTPCOnly = bTPCOnly;}
121 Bool_t GetTPCOnly() const {return fTPCOnly;}
7c55ebd9 122
ff8c4f30 123 protected:
70fdd197 124 Bool_t IsL0InputFired(const AliESDEvent* aEsd, UInt_t input) const;
125 Bool_t IsL1InputFired(const AliESDEvent* aEsd, UInt_t input) const;
126 Bool_t IsL2InputFired(const AliESDEvent* aEsd, UInt_t input) const;
127 Bool_t IsInputFired(const AliESDEvent* aEsd, Char_t level, UInt_t input) const;
128
2078f478 129 Float_t V0CorrectLeadingTime(Int_t i, Float_t time, Float_t adc, Int_t runNumber) const;
bcd135ec 130 Float_t V0LeadingTimeWeight(Float_t adc) const;
907972ff 131
61899827 132 Int_t FMDHitCombinations(const AliESDEvent* aEsd, AliceSide side, Bool_t fillHists = kFALSE);
ff8c4f30 133
134 Int_t fSPDGFOThreshold; // number of chips to accept a SPD GF0 trigger
27704f6c 135 TH1F* fSPDGFOEfficiency; // SPD FASTOR efficiency - is applied in SPDFiredChips. Histogram contains efficiency as function of chip number (bin 1..400: first layer; 401..1200: second layer)
733f0542 136
61899827 137 Float_t fV0TimeOffset; // time offset applied to the times read from the V0 (in ns)
97fa3cbc 138 Float_t fV0AdcThr; // thresholds applied on V0 ADC data
139 Float_t fV0HwAdcThr; // online V0 trigger - thresholds applied on ADC data
140 Float_t fV0HwWinLow; // online V0 trigger - lower edge of time window
141 Float_t fV0HwWinHigh; // online V0 trigger - upper edge of time window
7c55ebd9 142
143 Float_t fZDCCutRefSum; // ZDC time cut configuration
144 Float_t fZDCCutRefDelta; // ZDC time cut configuration
145 Float_t fZDCCutSigmaSum; // ZDC time cut configuration
146 Float_t fZDCCutSigmaDelta; // ZDC time cut configuration
97fa3cbc 147
d6305a15 148 Float_t fZDCCutRefSumCorr; // Corrected ZDC time cut configuration
149 Float_t fZDCCutRefDeltaCorr; // Corrected ZDC time cut configuration
150 Float_t fZDCCutSigmaSumCorr; // Corrected ZDC time cut configuration
151 Float_t fZDCCutSigmaDeltaCorr; // Corrected ZDC time cut configuration
152
b68d0b5e 153 Float_t fZDCCutZNATimeCorrMin; // Corrected ZNA time cut configuration
154 Float_t fZDCCutZNATimeCorrMax; // Corrected ZNA time cut configuration
155 Float_t fZDCCutZNCTimeCorrMin; // Corrected ZNA time cut configuration
156 Float_t fZDCCutZNCTimeCorrMax; // Corrected ZNA time cut configuration
00eea33b 157
1ea7a921 158 Float_t fASPDCvsTCut; // constant for the linear cut in SPD clusters vs tracklets
159 Float_t fBSPDCvsTCut; // slope for the linear cut in SPD clusters vs tracklets
160
b68d0b5e 161 // Variables for the TRD triggers
162 Float_t fTRDptHSE; // pt threshold for HSE trigger
163 UChar_t fTRDpidHSE; // PID threshold for HSE trigger
164 Float_t fTRDptHQU; // pt threshold for HQU trigger
165 UChar_t fTRDpidHQU; // PID threshold for HQU trigger
166 Float_t fTRDptHEE; // pt threshold for HEE trigger
167 UChar_t fTRDpidHEE; // PID threshold for HEE trigger
168 UChar_t fTRDminSectorHEE; // min sector for HEE trigger
169 UChar_t fTRDmaxSectorHEE; // max sector for HEE trigger
170 Float_t fTRDptHJT; // pt threshold for HJT trigger
171 UChar_t fTRDnHJT; // no of track threshold for HJT trigger
1ea7a921 172
4011b280 173 Bool_t fDoFMD; // If false, skips the FMD (physics selection runs much faster)
7a11141c 174 Float_t fFMDLowCut; //
175 Float_t fFMDHitCut; //
907972ff 176
27704f6c 177 TH2F* fHistBitsSPD; // offline trigger bits (calculated from clusters) vs hardware trigger bits
178 TH1F* fHistFiredBitsSPD; // fired hardware bits
1ea7a921 179 TH2F* fHistSPDClsVsTrk; // histogram of clusters vs tracklet BG cut
27704f6c 180 TH1F* fHistV0A; // histograms that histogram the criterion the cut is applied on: bb triggers
181 TH1F* fHistV0C; // histograms that histogram the criterion the cut is applied on: bb triggers
ce08cb1f 182 TH1F* fHistZDC; //histograms that histogram the criterion the cut is applied on: fired bits (6 bins)
183 TH1F* fHistTDCZDC; // histograms that histogram the criterion the cut is applied on: TDC bits (32 bins)
102cfd12 184 TH2F* fHistTimeZDC; // histograms that histogram the criterion the cut is applied on: ZDC TDC timing
fcb18b05 185 TH2F* fHistTimeCorrZDC; // histograms that histogram the criterion the cut is applied on: ZDC Corrected TDC timing
27704f6c 186 TH1F* fHistFMDA; // histograms that histogram the criterion the cut is applied on: number of hit combination above threshold
187 TH1F* fHistFMDC; // histograms that histogram the criterion the cut is applied on: number of hit combination above threshold
188 TH1F* fHistFMDSingle; // histograms that histogram the criterion the cut is applied on: single mult value (more than one entry per event)
189 TH1F* fHistFMDSum; // histograms that histogram the criterion the cut is applied on: summed mult value (more than one entry per event)
559b5ed7 190 TH1F* fHistT0; // histograms that histogram the criterion the cut is applied on: bb triggers
c01a136b 191 TMap* fTriggerClasses; // counts the active trigger classes (uses the full string)
192
a2ce3799 193 Bool_t fMC; // flag if MC is analyzed
449618cd 194 AliESDtrackCuts* fEsdTrackCuts; //Track Cuts to select ESD tracks
7a11141c 195
52f3b98d 196 Bool_t fTPCOnly; // flag to set whether TPC only tracks have to be used for the offline trigger
197
625e557d 198 ClassDef(AliTriggerAnalysis, 22)
ff8c4f30 199
200 private:
70fdd197 201 AliTriggerAnalysis(const AliTriggerAnalysis&);
202 AliTriggerAnalysis& operator=(const AliTriggerAnalysis&);
ff8c4f30 203};
204
205#endif