]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG0/AliOfflineTrigger.cxx
small update to print the results
[u/mrichter/AliRoot.git] / PWG0 / AliOfflineTrigger.cxx
CommitLineData
ff8c4f30 1/* $Id: AliOfflineTrigger.cxx 35782 2009-10-22 11:54:31Z jgrosseo $ */
2
7a11141c 3/**************************************************************************
4 * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
5 * *
6 * Author: The ALICE Off-line Project. *
7 * Contributors are mentioned in the code where appropriate. *
8 * *
9 * Permission to use, copy, modify and distribute this software and its *
10 * documentation strictly for non-commercial purposes is hereby granted *
11 * without fee, provided that the above copyright notice appears in all *
12 * copies and that both the copyright notice and this permission notice *
13 * appear in the supporting documentation. The authors make no claims *
14 * about the suitability of this software for any purpose. It is *
15 * provided "as is" without express or implied warranty. *
16 **************************************************************************/
17
18//-------------------------------------------------------------------------
19// Implementation of Class AliOfflineTrigger
20// This class provides offline triggers from data in the ESD
21// Origin: Jan Fiete Grosse-Oetringhaus, CERN
22//-------------------------------------------------------------------------
23
ff8c4f30 24#include <AliOfflineTrigger.h>
25
26#include <AliLog.h>
27
28#include <AliESDEvent.h>
29
30#include <AliMultiplicity.h>
31#include <AliESDVZERO.h>
c8d3e441 32#include <AliESDZDC.h>
7a11141c 33#include <AliESDFMD.h>
ff8c4f30 34
35ClassImp(AliOfflineTrigger)
36
37AliOfflineTrigger::AliOfflineTrigger() :
38 fSPDGFOThreshold(1),
39 fV0AThreshold(1),
7a11141c 40 fV0CThreshold(1),
41 fFMDLowCut(0.2),
42 fFMDHitCut(0.5)
ff8c4f30 43{
44}
45
46Bool_t AliOfflineTrigger::IsEventTriggered(const AliESDEvent* aEsd, AliPWG0Helper::Trigger trigger) const
47{
48 // checks if an event has been triggered "offline"
49
50 UInt_t triggerNoFlags = (UInt_t) trigger % (UInt_t) AliPWG0Helper::kStartOfFlags;
51
52 switch (triggerNoFlags)
53 {
54 case AliPWG0Helper::kAcceptAll:
55 {
56 return kTRUE;
57 break;
58 }
59 case AliPWG0Helper::kMB1:
60 {
61 if (SPDGFOTrigger(aEsd) || V0Trigger(aEsd, kASide) || V0Trigger(aEsd, kCSide))
62 return kTRUE;
63 break;
64 }
65 case AliPWG0Helper::kMB2:
66 {
67 if (SPDGFOTrigger(aEsd) && (V0Trigger(aEsd, kASide) || V0Trigger(aEsd, kCSide)))
68 return kTRUE;
69 break;
70 }
71 case AliPWG0Helper::kMB3:
72 {
73 if (SPDGFOTrigger(aEsd) && V0Trigger(aEsd, kASide) && V0Trigger(aEsd, kCSide))
74 return kTRUE;
75 break;
76 }
77 case AliPWG0Helper::kSPDGFO:
78 {
79 if (SPDGFOTrigger(aEsd))
80 return kTRUE;
81 break;
82 }
83 case AliPWG0Helper::kV0A:
84 {
85 if (V0Trigger(aEsd, kASide))
86 return kTRUE;
87 break;
88 }
89 case AliPWG0Helper::kV0C:
90 {
91 if (V0Trigger(aEsd, kCSide))
92 return kTRUE;
93 break;
94 }
c8d3e441 95 case AliPWG0Helper::kZDC:
96 {
97 if (ZDCTrigger(aEsd, kASide) || ZDCTrigger(aEsd, kCentralBarrel) || ZDCTrigger(aEsd, kCSide))
98 return kTRUE;
99 break;
100 }
ff8c4f30 101 case AliPWG0Helper::kZDCA:
102 {
103 if (ZDCTrigger(aEsd, kASide))
104 return kTRUE;
105 break;
106 }
107 case AliPWG0Helper::kZDCC:
108 {
109 if (ZDCTrigger(aEsd, kCSide))
110 return kTRUE;
111 break;
112 }
7a11141c 113 case AliPWG0Helper::kFMDA:
114 {
115 if (FMDTrigger(aEsd, kASide))
116 return kTRUE;
117 break;
118 }
119 case AliPWG0Helper::kFMDC:
120 {
121 if (FMDTrigger(aEsd, kCSide))
122 return kTRUE;
123 break;
124 }
125 case AliPWG0Helper::kFPANY:
ff8c4f30 126 {
7a11141c 127 if (SPDGFOTrigger(aEsd) || V0Trigger(aEsd, kASide) || V0Trigger(aEsd, kCSide) || ZDCTrigger(aEsd, kASide) || ZDCTrigger(aEsd, kCentralBarrel) || ZDCTrigger(aEsd, kCSide) || FMDTrigger(aEsd, kASide) || FMDTrigger(aEsd, kCSide))
ff8c4f30 128 return kTRUE;
129 break;
130 }
131 default:
132 {
133 AliFatal(Form("Trigger type %d not implemented", triggerNoFlags));
134 }
135 }
136
137 return kFALSE;
138}
139
140Bool_t AliOfflineTrigger::SPDGFOTrigger(const AliESDEvent* aEsd) const
141{
142 // Returns if the SPD gave a global Fast OR trigger
143
144 Int_t firedChips = 0;
145 const AliMultiplicity* mult = aEsd->GetMultiplicity();
146 if (!mult)
147 {
148 AliError("AliMultiplicity not available");
149 return kFALSE;
150 }
151 firedChips = mult->GetNumberOfFiredChips(0) + mult->GetNumberOfFiredChips(1);
152
153 if (firedChips >= fSPDGFOThreshold)
154 return kTRUE;
155 return kFALSE;
156}
157
158Bool_t AliOfflineTrigger::V0Trigger(const AliESDEvent* aEsd, AliceSide side) const
159{
160 // Returns if the V0 triggered
161
162 AliESDVZERO* v0Data = aEsd->GetVZEROData();
163 if (!v0Data)
164 {
165 AliError("AliESDVZERO not available");
166 return kFALSE;
167 }
168
169 Int_t aCount = 0;
170 Int_t cCount = 0;
171 for (Int_t i=0; i<32; i++)
172 {
173 if (v0Data->BBTriggerV0A(i))
174 aCount++;
175 if (v0Data->BBTriggerV0C(i))
176 cCount++;
177 }
178
179 if (side == kASide && aCount >= fV0AThreshold)
180 return kTRUE;
181 if (side == kCSide && cCount >= fV0CThreshold)
182 return kTRUE;
183 return kFALSE;
184}
185
c8d3e441 186Bool_t AliOfflineTrigger::ZDCTrigger(const AliESDEvent* aEsd, AliceSide side) const
ff8c4f30 187{
188 // Returns if ZDC triggered
189
c8d3e441 190 AliESDZDC* zdcData = aEsd->GetESDZDC();
191 if (!zdcData)
192 {
193 AliError("AliESDZDC not available");
194 return kFALSE;
195 }
196
197 UInt_t quality = zdcData->GetESDQuality();
198
199 // from Nora's presentation, general first physics meeting 16.10.09
200 static UInt_t zpc = 0x20;
201 static UInt_t znc = 0x10;
202 static UInt_t zem1 = 0x08;
203 static UInt_t zem2 = 0x04;
204 static UInt_t zpa = 0x02;
205 static UInt_t zna = 0x01;
206
207 if (side == kASide && ((quality & zpa) || (quality & zna)))
208 return kTRUE;
209 if (side == kCentralBarrel && ((quality & zem1) || (quality & zem2)))
210 return kTRUE;
211 if (side == kCSide && ((quality & zpc) || (quality & znc)))
212 return kTRUE;
ff8c4f30 213
214 return kFALSE;
215}
216
7a11141c 217Bool_t AliOfflineTrigger::FMDTrigger(const AliESDEvent* aEsd, AliceSide side) const
ff8c4f30 218{
219 // Returns if the FMD triggered
7a11141c 220 //
221 // Authors: FMD team, Hans Dalsgaard (code merged from FMD/AliFMDOfflineTrigger)
ff8c4f30 222
7a11141c 223 // Workaround for AliESDEvent::GetFMDData is not const!
224 const AliESDFMD* fmdData = (const_cast<AliESDEvent*>(aEsd))->GetFMDData();
225 if (!fmdData)
226 {
227 AliError("AliESDFMD not available");
228 return kFALSE;
229 }
230
231 Int_t detFrom = (side == kASide) ? 1 : 3;
232 Int_t detTo = (side == kASide) ? 2 : 3;
233
234 Float_t totalMult = 0;
235 for (UShort_t det=detFrom;det<=detTo;det++) {
236 Int_t nRings = (det == 1 ? 1 : 2);
237 for (UShort_t ir = 0; ir < nRings; ir++) {
238 Char_t ring = (ir == 0 ? 'I' : 'O');
239 UShort_t nsec = (ir == 0 ? 20 : 40);
240 UShort_t nstr = (ir == 0 ? 512 : 256);
039db886 241 for (UShort_t sec =0; sec < nsec; sec++) {
242 for (UShort_t strip = 0; strip < nstr; strip++) {
243 Float_t mult = fmdData->Multiplicity(det,ring,sec,strip);
244 if (mult == AliESDFMD::kInvalidMult) continue;
245
246 if (mult > fFMDLowCut)
247 totalMult = totalMult + mult;
248 else
249 {
250 if( totalMult > fFMDHitCut) {
251 return kTRUE;
252 }
253 else totalMult = 0 ;
254 }
255 }
7a11141c 256 }
257 }
258 }
ff8c4f30 259 return kFALSE;
260}