AliPhysics  cda3415 (cda3415)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskEmcalTriggerBase.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-2016, ALICE Experiment at CERN, All rights reserved. *
3  * *
4  * Author: The ALICE Off-line Project. *
5  * Contributors are mentioned in the code where appropriate. *
6  * *
7  * Permission to use, copy, modify and distribute this software and its *
8  * documentation strictly for non-commercial purposes is hereby granted *
9  * without fee, provided that the above copyright notice appears in all *
10  * copies and that both the copyright notice and this permission notice *
11  * appear in the supporting documentation. The authors make no claims *
12  * about the suitability of this software for any purpose. It is *
13  * provided "as is" without express or implied warranty. *
14  **************************************************************************/
15 #include <array>
16 #include <functional>
17 #include <iostream>
18 
19 #include <TClonesArray.h>
20 #include <TGrid.h>
21 #include <THistManager.h>
22 #include <TParameter.h>
23 
25 #include "AliAnalysisUtils.h"
26 #include "AliEMCALGeometry.h"
27 #include "AliEMCALTriggerPatchInfo.h"
28 #include "AliEMCALTriggerMapping.h"
29 #include "AliESDEvent.h"
30 #include "AliInputEventHandler.h"
31 #include "AliLog.h"
32 #include "AliOADBContainer.h"
33 #include "AliVVertex.h"
34 
38 
39 namespace EMCalTriggerPtAnalysis {
40 
41 AliAnalysisTaskEmcalTriggerBase::AliAnalysisTaskEmcalTriggerBase():
43  fTriggerSelection(nullptr),
44  fUseTriggerBits(kTRUE),
45  fRequireBunchCrossing(kTRUE),
46  fHistos(nullptr),
47  fTriggerStringFromPatches(kFALSE),
48  fSelectedTriggers(),
49  fRequireAnalysisUtils(kTRUE),
50  fVertexCut(-10., 10.),
51  fNameDownscaleOADB(""),
52  fDownscaleOADB(nullptr),
53  fDownscaleFactors(nullptr),
54  fNameMaskedFastorOADB(),
55  fMaskedFastorOADB(nullptr),
56  fMaskedFastors(),
57  fOnlineTriggerThresholds(),
58  fNameAcceptanceOADB(),
59  fSelectNoiseEvents(false),
60  fRejectNoiseEvents(false),
61  fEnableDCALTriggers(true)
62 {
63  SetNeedEmcalGeom(true);
65  SetCaloTriggerPatchInfoName("EmcalTriggers");
66 }
67 
69  AliAnalysisTaskEmcal(name, true),
70  fTriggerSelection(nullptr),
71  fUseTriggerBits(kTRUE),
72  fRequireBunchCrossing(kTRUE),
73  fHistos(nullptr),
74  fTriggerStringFromPatches(kFALSE),
75  fSelectedTriggers(),
76  fRequireAnalysisUtils(kTRUE),
77  fVertexCut(-10., 10.),
78  fNameDownscaleOADB(""),
79  fDownscaleOADB(nullptr),
80  fDownscaleFactors(nullptr),
81  fNameMaskedFastorOADB(),
82  fMaskedFastorOADB(nullptr),
83  fMaskedFastors(),
84  fOnlineTriggerThresholds(),
85  fNameAcceptanceOADB(),
86  fSelectNoiseEvents(false),
87  fRejectNoiseEvents(false),
88  fEnableDCALTriggers(true)
89 {
90  SetNeedEmcalGeom(true);
92  SetCaloTriggerPatchInfoName("EmcalTriggers");
93 }
94 
97  if(fHistos) delete fHistos;
98  if(fDownscaleOADB) delete fDownscaleOADB;
99 }
100 
103  if(fRequireAnalysisUtils && !fAliAnalysisUtils) fAliAnalysisUtils = new AliAnalysisUtils;
104 
105  fHistos = new THistManager(Form("Histos_%s", GetName()));
106 
109 
110  for(auto h : *(fHistos->GetListOfHistograms())) fOutput->Add(h);
111 
112  PostData(1, fOutput);
113 }
114 
116  // Apply trigger selection
118  if(!fSelectedTriggers.size()) return false;
119 
121 
122  const AliVVertex *vtx = fInputEvent->GetPrimaryVertex();
123  //if(!fInputEvent->IsPileupFromSPD(3, 0.8, 3., 2., 5.)) return; // reject pileup event
124  if(vtx->GetNContributors() < 1) return false;
125 
127  if(fInputEvent->IsA() == AliESDEvent::Class() && fAliAnalysisUtils->IsFirstEventInChunk(fInputEvent)) return false;
128  if(fAliAnalysisUtils->IsPileUpEvent(fInputEvent)) return false; // Apply new vertex cut
129  if(!fAliAnalysisUtils->IsVertexSelected2013pA(fInputEvent))return false; // Apply new vertex cut
130  }
131 
132  if(!fVertexCut.IsInRange(fVertex[2])) return false;
133  if(!IsUserEventSelected()) return false;
134 
135  // Do MC outlier cut
136  if(fIsPythia){
137  if(!CheckMCOutliers()){
138  AliDebugStream(1) << GetName() << ": Reject MC outliers" << std::endl;
139  return false;
140  }
141  }
142 
144  return true;
145 }
146 
147 
149  fSelectedTriggers.clear();
150  Bool_t isMC = MCEvent() != nullptr;
151 
152  TString triggerstring = "";
155  } else {
156  triggerstring = fInputEvent->GetFiredTriggerClasses();
157  }
158 
159 
160  UInt_t selectionstatus = fInputHandler->IsEventSelected();
161  Bool_t isMinBias = selectionstatus & AliVEvent::kINT7,
163  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++) emcalTriggers[itrg] = true;
164  if(!isMC){
165  // In case of data select events as bunch-bunch (-B-) events.
166  // Cut not applied in simulations
167  if(fRequireBunchCrossing && ! triggerstring.Contains("-B-")) return;
168 
169  // In case of data use information from the physics selection and event record
170  // Further cleanup of trigger events can be performed depending on the presence
171  // of recalc patches (after masking hot fastors in the trigger maker) above
172  // threshold
173  if(fUseTriggerBits){
174  const std::array<ULong_t, AliEmcalTriggerOfflineSelection::kTrgn> kSelectTriggerBits = {
175  AliVEvent::kEMC7, AliVEvent::kEMCEGA, AliVEvent::kEMCEGA, AliVEvent::kEMCEJE, AliVEvent::kEMCEJE,
176  AliVEvent::kEMC7, AliVEvent::kEMCEGA, AliVEvent::kEMCEGA, AliVEvent::kEMCEJE, AliVEvent::kEMCEJE,
177  };
178  for(int iclass = 0; iclass < AliEmcalTriggerOfflineSelection::kTrgn; iclass++)
179  emcalTriggers[iclass] &= bool(selectionstatus & kSelectTriggerBits[iclass]);
180  }
181 
182  // Apply cut on the trigger string - this basically discriminates high- and low-threshold
183  // triggers
184  const std::array<TString, AliEmcalTriggerOfflineSelection::kTrgn> kSelectTriggerStrings = {
185  "CEMC7", "EG1", "EG2", "EJ1", "EJ2", "CDMC7", "DG1", "DG2", "DJ1", "DJ2"
186  };
187  if(triggerstring.Contains("EMC")) AliDebugStream(1) << GetName() << ": Trigger string " << triggerstring << std::endl;
188  for(int iclass = 0; iclass < AliEmcalTriggerOfflineSelection::kTrgn; iclass++){
189  emcalTriggers[iclass] &= triggerstring.Contains(kSelectTriggerStrings[iclass]);
190  if(emcalTriggers[iclass])
191  AliDebugStream(1) << GetName() << ": Event selected as trigger " << kSelectTriggerStrings[iclass] << std::endl;
192  }
193 
194  // Online selection / rejection
196  if(fRejectNoiseEvents){
197  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++){
198  if(emcalTriggers[itrg])
200  }
201  } else {
202  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++){
203  if(emcalTriggers[itrg])
205  }
206  }
207  }
208  }
209  // Apply offline trigger selection: In this case cuts are performed on the
210  // patch energy from EMCAL cells after calibration. This method is most relevant
211  // for simulations. It can have a special use case in data in case a stronger
212  // offline selection is applied in addition to the online selection.
214  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++)
216  }
217  if(isMinBias) fSelectedTriggers.push_back("MB");
218  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]){
219  fSelectedTriggers.push_back("EMC7");
220  if(!isMinBias) fSelectedTriggers.push_back("EMC7excl");
221  }
222  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]){
223  fSelectedTriggers.push_back("EJ2");
224  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0])) fSelectedTriggers.push_back("EJ2excl");
225  }
226  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ1]){
227  fSelectedTriggers.push_back("EJ1");
228  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2])) fSelectedTriggers.push_back("EJ1excl");
229  }
230  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2]){
231  fSelectedTriggers.push_back("EG2");
232  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0])) fSelectedTriggers.push_back("EG2excl");
233  }
234  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG1]){
235  fSelectedTriggers.push_back("EG1");
236  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2])) fSelectedTriggers.push_back("EG1excl");
237  }
238 
240  // Handle DCAL triggers only in case DCAL triggers are enabled,
241  // otherwise ignore results of the online/offline trigger selection
242  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]){
243  fSelectedTriggers.push_back("DMC7");
244  if(!isMinBias) fSelectedTriggers.push_back("DMC7excl");
245  }
246  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]){
247  fSelectedTriggers.push_back("DJ2");
248  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0])) fSelectedTriggers.push_back("DJ2excl");
249  }
250  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ1]){
251  fSelectedTriggers.push_back("DJ1");
252  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2])) fSelectedTriggers.push_back("DJ1excl");
253  }
254  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2]){
255  fSelectedTriggers.push_back("DG2");
256  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0])) fSelectedTriggers.push_back("DG2excl");
257  }
258  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG1]){
259  fSelectedTriggers.push_back("DG1");
260  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2])) fSelectedTriggers.push_back("DG1excl");
261  }
262  }
263 }
264 
267 
268  if(!fLocalInitialized){
269  return;
270  }
271 
272  // Handle OADB container with downscaling factors
273  if(fNameDownscaleOADB.Length()){
274  if(fNameDownscaleOADB.Contains("alien://") && ! gGrid) TGrid::Connect("alien://");
275  fDownscaleOADB = new AliOADBContainer("AliEmcalDownscaleFactors");
276  fDownscaleOADB->InitFromFile(fNameDownscaleOADB.Data(), "AliEmcalDownscaleFactors");
277  }
278  // Load OADB container with masked fastors (in case fastor masking is switched on)
280  if(fNameMaskedFastorOADB.Contains("alien://") && ! gGrid) TGrid::Connect("alien://");
281  fMaskedFastorOADB = new AliOADBContainer("AliEmcalMaskedFastors");
282  fMaskedFastorOADB->InitFromFile(fNameMaskedFastorOADB.Data(), "AliEmcalMaskedFastors");
283  }
284 
285  // Setting online threshold for trigger
287  if(fInputEvent->GetRunNumber() >= 15344 && fInputEvent->GetRunNumber() <= 197388){
292  SetOnlineTriggerThreshold("DG1", 0);
293  SetOnlineTriggerThreshold("DG2", 0);
294  SetOnlineTriggerThreshold("DJ1", 0);
295  SetOnlineTriggerThreshold("DJ2", 0);
296  SetOnlineTriggerThreshold("EMC7", 0);
297  SetOnlineTriggerThreshold("DMC7", 0);
298  }
299  }
300 
301  // Load acceptance OADB
302  if(fNameAcceptanceOADB.Length() && fTriggerSelection){
303  AliDebugStream(1) << GetName() << ": Loading acceptance map from OADB file " << fNameAcceptanceOADB << std::endl;
304  AliOADBContainer acceptanceCont("AliEmcalTriggerAcceptance");
305  acceptanceCont.InitFromFile(fNameAcceptanceOADB.Data(), "AliEmcalTriggerAcceptance");
306  TObjArray *acceptanceMaps = dynamic_cast<TObjArray *>(acceptanceCont.GetObject(fInputEvent->GetRunNumber()));
307  TH2 *map(nullptr);
308  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("EG1")))){
309  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger EG1" << std::endl;
310  map->SetDirectory(nullptr);
312  }
313  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("EG2")))){
314  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger EG2" << std::endl;
315  map->SetDirectory(nullptr);
317  }
318  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("DG1")))){
319  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger DG1" << std::endl;
320  map->SetDirectory(nullptr);
322  }
323  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("DG2")))){
324  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger DG2" << std::endl;
325  map->SetDirectory(nullptr);
327  }
328  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("EJ1")))){
329  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger EJ1" << std::endl;
330  map->SetDirectory(nullptr);
332  }
333  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("EJ2")))){
334  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger EJ2" << std::endl;
335  map->SetDirectory(nullptr);
337  }
338  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("DJ1")))){
339  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger DJ1" << std::endl;
340  map->SetDirectory(nullptr);
342  }
343  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("DJ2")))){
344  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger DJ2" << std::endl;
345  map->SetDirectory(nullptr);
347  }
348  }
349 }
350 
352  if(fDownscaleOADB){
353  fDownscaleFactors = static_cast<TObjArray *>(fDownscaleOADB->GetObject(runnumber));
354  }
355  if(fMaskedFastorOADB){
356  fMaskedFastors.clear();
357  TObjArray *ids = static_cast<TObjArray *>(fMaskedFastorOADB->GetObject(runnumber));
358  for(auto m : *ids){
359  TParameter<int> *id = static_cast<TParameter<int> *>(m);
360  fMaskedFastors.push_back(id->GetVal());
361  }
362  }
363 }
364 
366  // Exclusive means classes without lower trigger classes (which are downscaled) -
367  // in order to make samples statistically independent: MBExcl means MinBias && !EMCAL trigger
368  std::vector<TString> triggers = {
369  "MB", "EMC7", "EJ1", "EJ2", "EG1", "EG2", "EMC7excl", "EG2excl", "EJ2excl", "EJ1excl", "EG1excl"
370  };
371  std::vector<TString> dcaltriggers = {
372  "DMC7", "DJ1", "DJ2", "DG1", "DG2", "DMC7excl", "DG2excl", "DJ2excl", "DJ1excl", "DG1excl"
373  };
375  for(const auto &t : dcaltriggers) triggers.push_back(t);
376  }
377  return triggers;
378 }
379 
381  AliDebugStream(1) << "Using V1 online trigger selector" << std::endl;
383  int ngood(0);
384  for(auto p : *fTriggerPatchInfo){
385  AliEMCALTriggerPatchInfo *patch = static_cast<AliEMCALTriggerPatchInfo *>(p);
386  if((AliEmcalTriggerOfflineSelection::IsSingleShower(trigger) && patch->IsGammaLowRecalc()) ||
387  (!AliEmcalTriggerOfflineSelection::IsSingleShower(trigger) && patch->IsJetLowRecalc())){
388  if(patch->GetADCAmp() >= GetOnlineTriggerThresholdByIndex(trigger)) ngood++;
389  }
390  }
391  return ngood > 0;
392 }
393 
395  if(fDownscaleFactors){
396  TParameter<double> *result(nullptr);
397  // Downscaling only done on MB, L0 and the low threshold triggers
398  if(triggerclass.Contains("MB")) result = static_cast<TParameter<double> *>(fDownscaleFactors->FindObject("INT7"));
399  else if(triggerclass.Contains("EMC7")) result = static_cast<TParameter<double> *>(fDownscaleFactors->FindObject("EMC7"));
400  else if(triggerclass.Contains("EJ2")) result = static_cast<TParameter<double> *>(fDownscaleFactors->FindObject("EJ2"));
401  else if(triggerclass.Contains("EG2")) result = static_cast<TParameter<double> *>(fDownscaleFactors->FindObject("EG2"));
402  if(result) return 1./result->GetVal();
403  }
404  return 1.;
405 }
406 
408  TParameter<int> *threshpar(nullptr);
409  if((threshpar = static_cast<TParameter<int> *>(fOnlineTriggerThresholds.FindObject(triggerclass.Data())))){
410  threshpar->SetVal(threshold);
411  } else {
412  fOnlineTriggerThresholds.Add(new TParameter<int>(triggerclass.Data(), threshold));
413  }
414 }
415 
417  Int_t threshold(0);
418  TParameter<int> *val(nullptr);
419  if((val = static_cast<TParameter<int> *>(fOnlineTriggerThresholds.FindObject(name))))
420  threshold = val->GetVal();
421  return threshold;
422 }
423 
425  const TString triggernames[AliEmcalTriggerOfflineSelection::kTrgn] = {"EMC7", "EG1", "EG2", "EJ1", "EJ2", "DMC7",
426  "DG1", "DG2", "DJ1", "DJ2"};
427  return GetOnlineTriggerThresholdByName(triggernames[trigger]);
428 }
429 
431  const TString triggernames[AliEmcalTriggerOfflineSelection::kTrgn] = {"EMC7", "EG1", "EG2", "EJ1", "EJ2", "DMC7",
432  "DG1", "DG2", "DJ1", "DJ2"};
433  bool isInitialized = true;
434  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++){
435  if(!fOnlineTriggerThresholds.FindObject(triggernames[itrg].Data())) {
436  isInitialized = false;
437  break;
438  }
439  }
440  return isInitialized;
441 }
442 
444  return adc > GetOnlineTriggerThresholdByName(triggerclass);
445 }
446 
448  TString triggerstring = "";
449  Int_t nEJ1 = 0, nEJ2 = 0, nEG1 = 0, nEG2 = 0, nDJ1 = 0, nDJ2 = 0, nDG1 = 0, nDG2 = 0;
450  for(auto patchIter : *triggerpatches){
451  AliEMCALTriggerPatchInfo *patch = dynamic_cast<AliEMCALTriggerPatchInfo *>(patchIter);
452  if(!patch->IsRecalc()) continue;
453  if(patch->IsEMCal()){
454  if(patch->IsGammaLowRecalc() && SelectFiredPatch("EG1", patch->GetADCAmp())) nEG1++;
455  if(patch->IsGammaLowRecalc() && SelectFiredPatch("EG2", patch->GetADCAmp())) nEG2++;
456  if(patch->IsJetLowRecalc() && SelectFiredPatch("EJ1", patch->GetADCAmp())) nEJ1++;
457  if(patch->IsJetLowRecalc() && SelectFiredPatch("EJ2", patch->GetADCAmp())) nEJ2++;
458  } else {
459  if(patch->IsGammaLowRecalc() && SelectFiredPatch("DG1", patch->GetADCAmp())) nDG1++;
460  if(patch->IsGammaLowRecalc() && SelectFiredPatch("DG2", patch->GetADCAmp())) nDG2++;
461  if(patch->IsJetLowRecalc() && SelectFiredPatch("DJ1", patch->GetADCAmp())) nDJ1++;
462  if(patch->IsJetLowRecalc() && SelectFiredPatch("DJ2", patch->GetADCAmp())) nDJ2++;
463  }
464  }
465  if(nEJ1) triggerstring += "EJ1";
466  if(nEJ2){
467  if(triggerstring.Length()) triggerstring += ",";
468  triggerstring += "EJ2";
469  }
470  if(nEG1){
471  if(triggerstring.Length()) triggerstring += ",";
472  triggerstring += "EG1";
473  }
474  if(nEG2){
475  if(triggerstring.Length()) triggerstring += ",";
476  triggerstring += "EG2";
477  }
478  if(nDJ1){
479  if(triggerstring.Length()) triggerstring += ",";
480  triggerstring += "DJ2";
481  }
482  if(nDJ2){
483  if(triggerstring.Length()) triggerstring += ",";
484  triggerstring += "DJ2";
485  }
486  if(nDG1){
487  if(triggerstring.Length()) triggerstring += ",";
488  triggerstring += "DG1";
489  }
490  if(nDG2){
491  if(triggerstring.Length()) triggerstring += ",";
492  triggerstring += "DG2";
493  }
494  return triggerstring;
495 }
496 
497 } /* namespace EMCalTriggerPtAnalysis */
std::vector< TString > fSelectedTriggers
! Triggers selected for given event
Bool_t fIsPythia
trigger, if it is a PYTHIA production
double Double_t
Definition: External.C:58
Int_t GetOnlineTriggerThresholdByIndex(AliEmcalTriggerOfflineSelection::EmcalTriggerClass trg) const
Bool_t fRejectNoiseEvents
Reject events triggered by noisy fastors.
Base task in the EMCAL framework.
void SetOnlineTriggerThreshold(const TString &triggerclass, Int_t threshold)
Bool_t fLocalInitialized
whether or not the task has been already initialized
TString GetFiredTriggerClassesFromPatches(const TClonesArray *triggerpatches) const
AliEmcalTriggerOfflineSelection * fTriggerSelection
Offline trigger selection.
TObjArray fOnlineTriggerThresholds
Trigger thresholds applied at online level.
Bool_t fEnableDCALTriggers
Enable / Disable event selection for DCAL trigger classes.
void SetCaloTriggerPatchInfoName(const char *n)
TString fNameMaskedFastorOADB
Name of the masked fastor OADB container.
Bool_t fRequireAnalysisUtils
Switch whether to require event selection in AliAnalysisUtils.
bool SelectOnlineTrigger(AliEmcalTriggerOfflineSelection::EmcalTriggerClass trigger) const
Bool_t fRequireBunchCrossing
Require bunch-bunch events (tag -B- in trigger string)
void SetAcceptanceMap(EmcalTriggerClass trgcls, const TH2 *accmap)
int Int_t
Definition: External.C:63
unsigned int UInt_t
Definition: External.C:33
THashList * GetListOfHistograms() const
Definition: THistManager.h:504
EmcalTriggerClass
Definition of the various supported trigger types.
AliAnalysisUtils * fAliAnalysisUtils
!vertex selection (optional)
TString fNameDownscaleOADB
Name of the downscale OADB container.
TString fNameAcceptanceOADB
Name of the OADB container with the trigger acceptance.
AliOADBContainer * fMaskedFastorOADB
! Container with masked fastors
Bool_t fSelectNoiseEvents
Explicitly select events triggered only by noisy fastors.
Bool_t IsOfflineSelected(EmcalTriggerClass trgcls, const TClonesArray *const triggerpatches) const
Bool_t fUseTriggerBits
Switch whether using trigger bits (relies on physics selection)
Bool_t fTriggerStringFromPatches
Do rebuild the trigger string from trigger patches.
Bool_t isMC
AliEmcalList * fOutput
!output list
Definition: External.C:220
AliOADBContainer * fDownscaleOADB
! Container with downscale factors for different triggers
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
Double_t fVertex[3]
!event vertex
void SetMakeGeneralHistograms(Bool_t g)
TClonesArray * fTriggerPatchInfo
!trigger patch info array
void SetNeedEmcalGeom(Bool_t n)
Container class for histograms.
Definition: THistManager.h:43
AliCutValueRange< double > fVertexCut
Cut on the z-position of the primary vertex.
bool Bool_t
Definition: External.C:53
Bool_t SelectFiredPatch(const TString &triggerclass, Int_t adc) const