AliPhysics  1a228f7 (1a228f7)
 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 <functional>
16 #include <iostream>
17 
18 #include <TClonesArray.h>
19 #include <TGrid.h>
20 #include <THistManager.h>
21 #include <TParameter.h>
22 
24 #include "AliAnalysisUtils.h"
25 #include "AliEMCALGeometry.h"
26 #include "AliEMCALTriggerPatchInfo.h"
27 #include "AliEMCALTriggerMapping.h"
28 #include "AliESDEvent.h"
29 #include "AliInputEventHandler.h"
30 #include "AliLog.h"
31 #include "AliOADBContainer.h"
32 #include "AliVVertex.h"
33 
37 
38 namespace EMCalTriggerPtAnalysis {
39 
40 AliAnalysisTaskEmcalTriggerBase::AliAnalysisTaskEmcalTriggerBase():
42  fTriggerSelection(nullptr),
43  fHistos(nullptr),
44  fTriggerStringFromPatches(kFALSE),
45  fSelectedTriggers(),
46  fVertexCut(-10., 10.),
47  fNameDownscaleOADB(""),
48  fDownscaleOADB(nullptr),
49  fDownscaleFactors(nullptr),
50  fNameMaskedFastorOADB(),
51  fMaskedFastorOADB(nullptr),
52  fMaskedFastors(),
53  fOnlineTriggerThresholds(),
54  fNameAcceptanceOADB(),
55  fSelectNoiseEvents(false),
56  fRejectNoiseEvents(false)
57 {
58  SetNeedEmcalGeom(true);
60  SetCaloTriggerPatchInfoName("EmcalTriggers");
61 }
62 
64  AliAnalysisTaskEmcal(name, true),
65  fTriggerSelection(nullptr),
66  fHistos(nullptr),
67  fTriggerStringFromPatches(kFALSE),
68  fSelectedTriggers(),
69  fVertexCut(-10., 10.),
70  fNameDownscaleOADB(""),
71  fDownscaleOADB(nullptr),
72  fDownscaleFactors(nullptr),
73  fNameMaskedFastorOADB(),
74  fMaskedFastorOADB(nullptr),
75  fMaskedFastors(),
76  fOnlineTriggerThresholds(),
77  fNameAcceptanceOADB(),
78  fSelectNoiseEvents(false),
79  fRejectNoiseEvents(false)
80 {
81  SetNeedEmcalGeom(true);
83  SetCaloTriggerPatchInfoName("EmcalTriggers");
84 }
85 
88  if(fHistos) delete fHistos;
89  if(fDownscaleOADB) delete fDownscaleOADB;
90 }
91 
94  if(!fAliAnalysisUtils) fAliAnalysisUtils = new AliAnalysisUtils;
95 
96  fHistos = new THistManager(Form("Histos_%s", GetName()));
97 
100 
101  for(auto h : *(fHistos->GetListOfHistograms())) fOutput->Add(h);
102 
103  PostData(1, fOutput);
104 }
105 
107  // Apply trigger selection
109  if(!fSelectedTriggers.size()) return false;
110 
112 
113  const AliVVertex *vtx = fInputEvent->GetPrimaryVertex();
114  //if(!fInputEvent->IsPileupFromSPD(3, 0.8, 3., 2., 5.)) return; // reject pileup event
115  if(vtx->GetNContributors() < 1) return false;
116  if(fInputEvent->IsA() == AliESDEvent::Class() && fAliAnalysisUtils->IsFirstEventInChunk(fInputEvent)) return false;
117  if(fAliAnalysisUtils->IsPileUpEvent(fInputEvent)) return false; // Apply new vertex cut
118 
119  if(!fAliAnalysisUtils->IsVertexSelected2013pA(fInputEvent))return false; // Apply new vertex cut
120  if(!fVertexCut.IsInRange(fVertex[2])) return false;
121  if(!IsUserEventSelected()) return false;
122 
123  // Do MC outlier cut
124  if(fIsPythia){
125  if(!CheckMCOutliers()){
126  AliDebugStream(1) << GetName() << ": Reject MC outliers" << std::endl;
127  return false;
128  }
129  }
130 
132  return true;
133 }
134 
135 
137  fSelectedTriggers.clear();
138  Bool_t isMC = MCEvent() != nullptr;
139 
140  TString triggerstring = "";
143  } else {
144  triggerstring = fInputEvent->GetFiredTriggerClasses();
145  }
146  UInt_t selectionstatus = fInputHandler->IsEventSelected();
147  Bool_t isMinBias = selectionstatus & AliVEvent::kINT7,
149  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++) emcalTriggers[itrg] = true;
150  if(!isMC){
151  // In case of data use information from the physics selection and event record
152  // Further cleanup of trigger events can be performed depending on the presence
153  // of recalc patches (after masking hot fastors in the trigger maker) above
154  // threshold
155  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ1] = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains("EJ1");
156  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2] = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains("EJ2");
157  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG1] = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains("EG1"),
158  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2] = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains("EG2");
159  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] = (selectionstatus & AliVEvent::kEMC7) && triggerstring.Contains("CEMC7");
160  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ1] = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains("DJ1");
161  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2] = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains("DJ2");
162  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG1] = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains("DG1");
163  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2] = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains("DG2");
164  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] = (selectionstatus & AliVEvent::kEMC7) && triggerstring.Contains("CDMC7");
165  // Online selection / rejection
167  if(fRejectNoiseEvents){
168  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++){
169  if(emcalTriggers[itrg])
171  }
172  } else {
173  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++){
174  if(emcalTriggers[itrg])
176  }
177  }
178  }
179  }
180  // Apply offline trigger selection: In this case cuts are performed on the
181  // patch energy from EMCAL cells after calibration. This method is most relevant
182  // for simulations. It can have a special use case in data in case a stronger
183  // offline selection is applied in addition to the online selection.
185  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++)
187  }
188  if(isMinBias) fSelectedTriggers.push_back("MB");
189  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]){
190  fSelectedTriggers.push_back("EMC7");
191  if(!isMinBias) fSelectedTriggers.push_back("EMC7excl");
192  }
193  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]){
194  fSelectedTriggers.push_back("DMC7");
195  if(!isMinBias) fSelectedTriggers.push_back("DMC7excl");
196  }
197  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]){
198  fSelectedTriggers.push_back("EJ2");
199  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0])) fSelectedTriggers.push_back("EJ2excl");
200  }
201  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ1]){
202  fSelectedTriggers.push_back("EJ1");
203  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2])) fSelectedTriggers.push_back("EJ1excl");
204  }
205  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]){
206  fSelectedTriggers.push_back("DJ2");
207  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0])) fSelectedTriggers.push_back("DJ2excl");
208  }
209  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ1]){
210  fSelectedTriggers.push_back("DJ1");
211  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2])) fSelectedTriggers.push_back("DJ1excl");
212  }
213  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2]){
214  fSelectedTriggers.push_back("EG2");
215  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0])) fSelectedTriggers.push_back("EG2excl");
216  }
217  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG1]){
218  fSelectedTriggers.push_back("EG1");
219  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2])) fSelectedTriggers.push_back("EG1excl");
220  }
221  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2]){
222  fSelectedTriggers.push_back("DG2");
223  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0])) fSelectedTriggers.push_back("DG2excl");
224  }
225  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG1]){
226  fSelectedTriggers.push_back("DG1");
227  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2])) fSelectedTriggers.push_back("DG1excl");
228  }
229 }
230 
233 
234  if(!fLocalInitialized){
235  return;
236  }
237 
238  // Handle OADB container with downscaling factors
239  if(fNameDownscaleOADB.Length()){
240  if(fNameDownscaleOADB.Contains("alien://") && ! gGrid) TGrid::Connect("alien://");
241  fDownscaleOADB = new AliOADBContainer("AliEmcalDownscaleFactors");
242  fDownscaleOADB->InitFromFile(fNameDownscaleOADB.Data(), "AliEmcalDownscaleFactors");
243  }
244  // Load OADB container with masked fastors (in case fastor masking is switched on)
246  if(fNameMaskedFastorOADB.Contains("alien://") && ! gGrid) TGrid::Connect("alien://");
247  fMaskedFastorOADB = new AliOADBContainer("AliEmcalMaskedFastors");
248  fMaskedFastorOADB->InitFromFile(fNameMaskedFastorOADB.Data(), "AliEmcalMaskedFastors");
249  }
250 
251  // Setting online threshold for trigger
253  if(fInputEvent->GetRunNumber() >= 15344 && fInputEvent->GetRunNumber() <= 197388){
258  SetOnlineTriggerThreshold("DG1", 0);
259  SetOnlineTriggerThreshold("DG2", 0);
260  SetOnlineTriggerThreshold("DJ1", 0);
261  SetOnlineTriggerThreshold("DJ2", 0);
262  SetOnlineTriggerThreshold("EMC7", 0);
263  SetOnlineTriggerThreshold("DMC7", 0);
264  }
265  }
266 
267  // Load acceptance OADB
268  if(fNameAcceptanceOADB.Length() && fTriggerSelection){
269  AliDebugStream(1) << GetName() << ": Loading acceptance map from OADB file " << fNameAcceptanceOADB << std::endl;
270  AliOADBContainer acceptanceCont("AliEmcalTriggerAcceptance");
271  acceptanceCont.InitFromFile(fNameAcceptanceOADB.Data(), "AliEmcalTriggerAcceptance");
272  TObjArray *acceptanceMaps = dynamic_cast<TObjArray *>(acceptanceCont.GetObject(fInputEvent->GetRunNumber()));
273  TH2 *map(nullptr);
274  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("EG1")))){
275  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger EG1" << std::endl;
276  map->SetDirectory(nullptr);
278  }
279  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("EG2")))){
280  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger EG2" << std::endl;
281  map->SetDirectory(nullptr);
283  }
284  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("DG1")))){
285  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger DG1" << std::endl;
286  map->SetDirectory(nullptr);
288  }
289  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("DG2")))){
290  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger DG2" << std::endl;
291  map->SetDirectory(nullptr);
293  }
294  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("EJ1")))){
295  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger EJ1" << std::endl;
296  map->SetDirectory(nullptr);
298  }
299  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("EJ2")))){
300  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger EJ2" << std::endl;
301  map->SetDirectory(nullptr);
303  }
304  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("DJ1")))){
305  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger DJ1" << std::endl;
306  map->SetDirectory(nullptr);
308  }
309  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("DJ2")))){
310  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger DJ2" << std::endl;
311  map->SetDirectory(nullptr);
313  }
314  }
315 }
316 
318  if(fDownscaleOADB){
319  fDownscaleFactors = static_cast<TObjArray *>(fDownscaleOADB->GetObject(runnumber));
320  }
321  if(fMaskedFastorOADB){
322  fMaskedFastors.clear();
323  TObjArray *ids = static_cast<TObjArray *>(fMaskedFastorOADB->GetObject(runnumber));
324  for(auto m : *ids){
325  TParameter<int> *id = static_cast<TParameter<int> *>(m);
326  fMaskedFastors.push_back(id->GetVal());
327  }
328  }
329 }
330 
332  // Exclusive means classes without lower trigger classes (which are downscaled) -
333  // in order to make samples statistically independent: MBExcl means MinBias && !EMCAL trigger
334  std::vector<TString> triggers = {
335  "MB", "EMC7", "DMC7",
336  "EJ1", "EJ2", "EG1", "EG2", "DJ1", "DJ2", "DG1", "DG2",
337  "EMC7excl", "DMC7excl", "EG2excl", "EJ2excl", "DG2excl", "DJ2excl",
338  "EJ1excl", "DJ1excl", "EG1excl", "DG1excl"
339  };
340  return triggers;
341 }
342 
344  AliDebugStream(1) << "Using V1 online trigger selector" << std::endl;
346  double onlinethresholds[5] = {140., 89., 260., 127., 0.};
347  int ngood(0);
348  for(auto p : *fTriggerPatchInfo){
349  AliEMCALTriggerPatchInfo *patch = static_cast<AliEMCALTriggerPatchInfo *>(p);
350  if((AliEmcalTriggerOfflineSelection::IsSingleShower(trigger) && patch->IsGammaLowRecalc()) ||
351  (!AliEmcalTriggerOfflineSelection::IsSingleShower(trigger) && patch->IsJetLowRecalc())){
352  if(patch->GetADCAmp() >= GetOnlineTriggerThresholdByIndex(trigger)) ngood++;
353  }
354  }
355  return ngood > 0;
356 }
357 
359  if(fDownscaleFactors){
360  TParameter<double> *result(nullptr);
361  // Downscaling only done on MB, L0 and the low threshold triggers
362  if(triggerclass.Contains("MB")) result = static_cast<TParameter<double> *>(fDownscaleFactors->FindObject("INT7"));
363  else if(triggerclass.Contains("EMC7")) result = static_cast<TParameter<double> *>(fDownscaleFactors->FindObject("EMC7"));
364  else if(triggerclass.Contains("EJ2")) result = static_cast<TParameter<double> *>(fDownscaleFactors->FindObject("EJ2"));
365  else if(triggerclass.Contains("EG2")) result = static_cast<TParameter<double> *>(fDownscaleFactors->FindObject("EG2"));
366  if(result) return 1./result->GetVal();
367  }
368  return 1.;
369 }
370 
372  TParameter<int> *threshpar(nullptr);
373  if((threshpar = static_cast<TParameter<int> *>(fOnlineTriggerThresholds.FindObject(triggerclass.Data())))){
374  threshpar->SetVal(threshold);
375  } else {
376  fOnlineTriggerThresholds.Add(new TParameter<int>(triggerclass.Data(), threshold));
377  }
378 }
379 
381  Int_t threshold(0);
382  TParameter<int> *val(nullptr);
383  if((val = static_cast<TParameter<int> *>(fOnlineTriggerThresholds.FindObject(name))))
384  threshold = val->GetVal();
385  return threshold;
386 }
387 
389  const TString triggernames[AliEmcalTriggerOfflineSelection::kTrgn] = {"EMC7", "EG1", "EG2", "EJ1", "EJ2", "DMC7",
390  "DG1", "DG2", "DJ1", "DJ2"};
391  return GetOnlineTriggerThresholdByName(triggernames[trigger]);
392 }
393 
395  const TString triggernames[AliEmcalTriggerOfflineSelection::kTrgn] = {"EMC7", "EG1", "EG2", "EJ1", "EJ2", "DMC7",
396  "DG1", "DG2", "DJ1", "DJ2"};
397  bool isInitialized = true;
398  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++){
399  if(!fOnlineTriggerThresholds.FindObject(triggernames[itrg].Data())) {
400  isInitialized = false;
401  break;
402  }
403  }
404  return isInitialized;
405 }
406 
408  return adc > GetOnlineTriggerThresholdByName(triggerclass);
409 }
410 
412  TString triggerstring = "";
413  Int_t nEJ1 = 0, nEJ2 = 0, nEG1 = 0, nEG2 = 0, nDJ1 = 0, nDJ2 = 0, nDG1 = 0, nDG2 = 0;
414  for(auto patchIter : *triggerpatches){
415  AliEMCALTriggerPatchInfo *patch = dynamic_cast<AliEMCALTriggerPatchInfo *>(patchIter);
416  if(!patch->IsRecalc()) continue;
417  if(patch->IsEMCal()){
418  if(patch->IsGammaLowRecalc() && SelectFiredPatch("EG1", patch->GetADCAmp())) nEG1++;
419  if(patch->IsGammaLowRecalc() && SelectFiredPatch("EG2", patch->GetADCAmp())) nEG2++;
420  if(patch->IsJetLowRecalc() && SelectFiredPatch("EJ1", patch->GetADCAmp())) nEJ1++;
421  if(patch->IsJetLowRecalc() && SelectFiredPatch("EJ2", patch->GetADCAmp())) nEJ2++;
422  } else {
423  if(patch->IsGammaLowRecalc() && SelectFiredPatch("DG1", patch->GetADCAmp())) nDG1++;
424  if(patch->IsGammaLowRecalc() && SelectFiredPatch("DG2", patch->GetADCAmp())) nDG2++;
425  if(patch->IsJetLowRecalc() && SelectFiredPatch("DJ1", patch->GetADCAmp())) nDJ1++;
426  if(patch->IsJetLowRecalc() && SelectFiredPatch("DJ2", patch->GetADCAmp())) nDJ2++;
427  }
428  }
429  if(nEJ1) triggerstring += "EJ1";
430  if(nEJ2){
431  if(triggerstring.Length()) triggerstring += ",";
432  triggerstring += "EJ2";
433  }
434  if(nEG1){
435  if(triggerstring.Length()) triggerstring += ",";
436  triggerstring += "EG1";
437  }
438  if(nEG2){
439  if(triggerstring.Length()) triggerstring += ",";
440  triggerstring += "EG2";
441  }
442  if(nDJ1){
443  if(triggerstring.Length()) triggerstring += ",";
444  triggerstring += "DJ2";
445  }
446  if(nDJ2){
447  if(triggerstring.Length()) triggerstring += ",";
448  triggerstring += "DJ2";
449  }
450  if(nDG1){
451  if(triggerstring.Length()) triggerstring += ",";
452  triggerstring += "DG1";
453  }
454  if(nDG2){
455  if(triggerstring.Length()) triggerstring += ",";
456  triggerstring += "DG2";
457  }
458  return triggerstring;
459 }
460 
461 } /* 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.
void SetCaloTriggerPatchInfoName(const char *n)
TString fNameMaskedFastorOADB
Name of the masked fastor OADB container.
bool SelectOnlineTrigger(AliEmcalTriggerOfflineSelection::EmcalTriggerClass trigger) const
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 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 for the high- charged particle analysis.
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