]>
Commit | Line | Data |
---|---|---|
ff8c4f30 | 1 | /* $Id: AliOfflineTrigger.cxx 35782 2009-10-22 11:54:31Z jgrosseo $ */ |
2 | ||
3 | #include <AliOfflineTrigger.h> | |
4 | ||
5 | #include <AliLog.h> | |
6 | ||
7 | #include <AliESDEvent.h> | |
8 | ||
9 | #include <AliMultiplicity.h> | |
10 | #include <AliESDVZERO.h> | |
c8d3e441 | 11 | #include <AliESDZDC.h> |
ff8c4f30 | 12 | |
13 | ClassImp(AliOfflineTrigger) | |
14 | ||
15 | AliOfflineTrigger::AliOfflineTrigger() : | |
16 | fSPDGFOThreshold(1), | |
17 | fV0AThreshold(1), | |
18 | fV0CThreshold(1) | |
19 | { | |
20 | } | |
21 | ||
22 | Bool_t AliOfflineTrigger::IsEventTriggered(const AliESDEvent* aEsd, AliPWG0Helper::Trigger trigger) const | |
23 | { | |
24 | // checks if an event has been triggered "offline" | |
25 | ||
26 | UInt_t triggerNoFlags = (UInt_t) trigger % (UInt_t) AliPWG0Helper::kStartOfFlags; | |
27 | ||
28 | switch (triggerNoFlags) | |
29 | { | |
30 | case AliPWG0Helper::kAcceptAll: | |
31 | { | |
32 | return kTRUE; | |
33 | break; | |
34 | } | |
35 | case AliPWG0Helper::kMB1: | |
36 | { | |
37 | if (SPDGFOTrigger(aEsd) || V0Trigger(aEsd, kASide) || V0Trigger(aEsd, kCSide)) | |
38 | return kTRUE; | |
39 | break; | |
40 | } | |
41 | case AliPWG0Helper::kMB2: | |
42 | { | |
43 | if (SPDGFOTrigger(aEsd) && (V0Trigger(aEsd, kASide) || V0Trigger(aEsd, kCSide))) | |
44 | return kTRUE; | |
45 | break; | |
46 | } | |
47 | case AliPWG0Helper::kMB3: | |
48 | { | |
49 | if (SPDGFOTrigger(aEsd) && V0Trigger(aEsd, kASide) && V0Trigger(aEsd, kCSide)) | |
50 | return kTRUE; | |
51 | break; | |
52 | } | |
53 | case AliPWG0Helper::kSPDGFO: | |
54 | { | |
55 | if (SPDGFOTrigger(aEsd)) | |
56 | return kTRUE; | |
57 | break; | |
58 | } | |
59 | case AliPWG0Helper::kV0A: | |
60 | { | |
61 | if (V0Trigger(aEsd, kASide)) | |
62 | return kTRUE; | |
63 | break; | |
64 | } | |
65 | case AliPWG0Helper::kV0C: | |
66 | { | |
67 | if (V0Trigger(aEsd, kCSide)) | |
68 | return kTRUE; | |
69 | break; | |
70 | } | |
c8d3e441 | 71 | case AliPWG0Helper::kZDC: |
72 | { | |
73 | if (ZDCTrigger(aEsd, kASide) || ZDCTrigger(aEsd, kCentralBarrel) || ZDCTrigger(aEsd, kCSide)) | |
74 | return kTRUE; | |
75 | break; | |
76 | } | |
ff8c4f30 | 77 | case AliPWG0Helper::kZDCA: |
78 | { | |
79 | if (ZDCTrigger(aEsd, kASide)) | |
80 | return kTRUE; | |
81 | break; | |
82 | } | |
83 | case AliPWG0Helper::kZDCC: | |
84 | { | |
85 | if (ZDCTrigger(aEsd, kCSide)) | |
86 | return kTRUE; | |
87 | break; | |
88 | } | |
89 | case AliPWG0Helper::kFMD: | |
90 | { | |
91 | if (FMDTrigger(aEsd)) | |
92 | return kTRUE; | |
93 | break; | |
94 | } | |
95 | default: | |
96 | { | |
97 | AliFatal(Form("Trigger type %d not implemented", triggerNoFlags)); | |
98 | } | |
99 | } | |
100 | ||
101 | return kFALSE; | |
102 | } | |
103 | ||
104 | Bool_t AliOfflineTrigger::SPDGFOTrigger(const AliESDEvent* aEsd) const | |
105 | { | |
106 | // Returns if the SPD gave a global Fast OR trigger | |
107 | ||
108 | Int_t firedChips = 0; | |
109 | const AliMultiplicity* mult = aEsd->GetMultiplicity(); | |
110 | if (!mult) | |
111 | { | |
112 | AliError("AliMultiplicity not available"); | |
113 | return kFALSE; | |
114 | } | |
115 | firedChips = mult->GetNumberOfFiredChips(0) + mult->GetNumberOfFiredChips(1); | |
116 | ||
117 | if (firedChips >= fSPDGFOThreshold) | |
118 | return kTRUE; | |
119 | return kFALSE; | |
120 | } | |
121 | ||
122 | Bool_t AliOfflineTrigger::V0Trigger(const AliESDEvent* aEsd, AliceSide side) const | |
123 | { | |
124 | // Returns if the V0 triggered | |
125 | ||
126 | AliESDVZERO* v0Data = aEsd->GetVZEROData(); | |
127 | if (!v0Data) | |
128 | { | |
129 | AliError("AliESDVZERO not available"); | |
130 | return kFALSE; | |
131 | } | |
132 | ||
133 | Int_t aCount = 0; | |
134 | Int_t cCount = 0; | |
135 | for (Int_t i=0; i<32; i++) | |
136 | { | |
137 | if (v0Data->BBTriggerV0A(i)) | |
138 | aCount++; | |
139 | if (v0Data->BBTriggerV0C(i)) | |
140 | cCount++; | |
141 | } | |
142 | ||
143 | if (side == kASide && aCount >= fV0AThreshold) | |
144 | return kTRUE; | |
145 | if (side == kCSide && cCount >= fV0CThreshold) | |
146 | return kTRUE; | |
147 | return kFALSE; | |
148 | } | |
149 | ||
c8d3e441 | 150 | Bool_t AliOfflineTrigger::ZDCTrigger(const AliESDEvent* aEsd, AliceSide side) const |
ff8c4f30 | 151 | { |
152 | // Returns if ZDC triggered | |
153 | ||
c8d3e441 | 154 | AliESDZDC* zdcData = aEsd->GetESDZDC(); |
155 | if (!zdcData) | |
156 | { | |
157 | AliError("AliESDZDC not available"); | |
158 | return kFALSE; | |
159 | } | |
160 | ||
161 | UInt_t quality = zdcData->GetESDQuality(); | |
162 | ||
163 | // from Nora's presentation, general first physics meeting 16.10.09 | |
164 | static UInt_t zpc = 0x20; | |
165 | static UInt_t znc = 0x10; | |
166 | static UInt_t zem1 = 0x08; | |
167 | static UInt_t zem2 = 0x04; | |
168 | static UInt_t zpa = 0x02; | |
169 | static UInt_t zna = 0x01; | |
170 | ||
171 | if (side == kASide && ((quality & zpa) || (quality & zna))) | |
172 | return kTRUE; | |
173 | if (side == kCentralBarrel && ((quality & zem1) || (quality & zem2))) | |
174 | return kTRUE; | |
175 | if (side == kCSide && ((quality & zpc) || (quality & znc))) | |
176 | return kTRUE; | |
ff8c4f30 | 177 | |
178 | return kFALSE; | |
179 | } | |
180 | ||
181 | Bool_t AliOfflineTrigger::FMDTrigger(const AliESDEvent* /* aEsd */) const | |
182 | { | |
183 | // Returns if the FMD triggered | |
184 | ||
185 | AliFatal("Not implemented"); | |
186 | ||
187 | return kFALSE; | |
188 | } |