AliPhysics  7273240 (7273240)
 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);
59  SetCaloTriggerPatchInfoName("EmcalTriggers");
60 }
61 
63  AliAnalysisTaskEmcal(name, true),
64  fTriggerSelection(nullptr),
65  fHistos(nullptr),
66  fTriggerStringFromPatches(kFALSE),
67  fSelectedTriggers(),
68  fVertexCut(-10., 10.),
69  fNameDownscaleOADB(""),
70  fDownscaleOADB(nullptr),
71  fDownscaleFactors(nullptr),
72  fNameMaskedFastorOADB(),
73  fMaskedFastorOADB(nullptr),
74  fMaskedFastors(),
75  fOnlineTriggerThresholds(),
76  fNameAcceptanceOADB(),
77  fSelectNoiseEvents(false),
78  fRejectNoiseEvents(false)
79 {
80  SetNeedEmcalGeom(true);
81  SetCaloTriggerPatchInfoName("EmcalTriggers");
82 }
83 
86  if(fHistos) delete fHistos;
87  if(fDownscaleOADB) delete fDownscaleOADB;
88 }
89 
92  if(!fAliAnalysisUtils) fAliAnalysisUtils = new AliAnalysisUtils;
93 
94  fHistos = new THistManager(Form("Histos_%s", GetName()));
95 
98 
99  for(auto h : *(fHistos->GetListOfHistograms())) fOutput->Add(h);
100 
101  PostData(1, fOutput);
102 }
103 
105  // Apply trigger selection
107  if(!fSelectedTriggers.size()) return false;
108 
110 
111  const AliVVertex *vtx = fInputEvent->GetPrimaryVertex();
112  //if(!fInputEvent->IsPileupFromSPD(3, 0.8, 3., 2., 5.)) return; // reject pileup event
113  if(vtx->GetNContributors() < 1) return false;
114  if(fInputEvent->IsA() == AliESDEvent::Class() && fAliAnalysisUtils->IsFirstEventInChunk(fInputEvent)) return false;
115  if(fAliAnalysisUtils->IsPileUpEvent(fInputEvent)) return false; // Apply new vertex cut
116 
117  if(!fAliAnalysisUtils->IsVertexSelected2013pA(fInputEvent))return false; // Apply new vertex cut
118  if(!fVertexCut.IsInRange(fVertex[2])) return false;
119  if(!IsUserEventSelected()) return false;
120 
121  // Do MC outlier cut
122  if(fIsPythia){
123  if(!CheckMCOutliers()){
124  AliDebugStream(1) << GetName() << ": Reject MC outliers" << std::endl;
125  return false;
126  }
127  }
128 
130  return true;
131 }
132 
133 
135  fSelectedTriggers.clear();
136 
137  TString triggerstring = "";
140  } else {
141  triggerstring = fInputEvent->GetFiredTriggerClasses();
142  }
143  UInt_t selectionstatus = fInputHandler->IsEventSelected();
144  Bool_t isMinBias = selectionstatus & AliVEvent::kINT7,
146  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ1] = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains("EJ1");
147  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2] = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains("EJ2");
148  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG1] = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains("EG1"),
149  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2] = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains("EG2");
150  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] = (selectionstatus & AliVEvent::kEMC7) && triggerstring.Contains("CEMC7");
151  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ1] = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains("DJ1");
152  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2] = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains("DJ2");
153  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG1] = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains("DG1");
154  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2] = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains("DG2");
155  emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] = (selectionstatus & AliVEvent::kEMC7) && triggerstring.Contains("CDMC7");
157  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++)
159  }
160  // Online selection / rejection
162  if(fRejectNoiseEvents){
163  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++){
164  if(emcalTriggers[itrg])
166  }
167  } else {
168  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++){
169  if(emcalTriggers[itrg])
171  }
172  }
173  }
174  if(isMinBias) fSelectedTriggers.push_back("MB");
175  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]){
176  fSelectedTriggers.push_back("EMC7");
177  if(!isMinBias) fSelectedTriggers.push_back("EMC7excl");
178  }
179  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]){
180  fSelectedTriggers.push_back("DMC7");
181  if(!isMinBias) fSelectedTriggers.push_back("DMC7excl");
182  }
183  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]){
184  fSelectedTriggers.push_back("EJ2");
185  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0])) fSelectedTriggers.push_back("EJ2excl");
186  }
187  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ1]){
188  fSelectedTriggers.push_back("EJ1");
189  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2])) fSelectedTriggers.push_back("EJ1excl");
190  }
191  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]){
192  fSelectedTriggers.push_back("DJ2");
193  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0])) fSelectedTriggers.push_back("DJ2excl");
194  }
195  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ1]){
196  fSelectedTriggers.push_back("DJ1");
197  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2])) fSelectedTriggers.push_back("DJ1excl");
198  }
199  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2]){
200  fSelectedTriggers.push_back("EG2");
201  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0])) fSelectedTriggers.push_back("EG2excl");
202  }
203  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG1]){
204  fSelectedTriggers.push_back("EG1");
205  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2])) fSelectedTriggers.push_back("EG1excl");
206  }
207  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2]){
208  fSelectedTriggers.push_back("DG2");
209  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0])) fSelectedTriggers.push_back("DG2excl");
210  }
211  if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG1]){
212  fSelectedTriggers.push_back("DG1");
213  if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2])) fSelectedTriggers.push_back("DG1excl");
214  }
215 }
216 
219 
220  if(!fLocalInitialized){
221  return;
222  }
223 
224  // Handle OADB container with downscaling factors
225  if(fNameDownscaleOADB.Length()){
226  if(fNameDownscaleOADB.Contains("alien://") && ! gGrid) TGrid::Connect("alien://");
227  fDownscaleOADB = new AliOADBContainer("AliEmcalDownscaleFactors");
228  fDownscaleOADB->InitFromFile(fNameDownscaleOADB.Data(), "AliEmcalDownscaleFactors");
229  }
230  // Load OADB container with masked fastors (in case fastor masking is switched on)
232  if(fNameMaskedFastorOADB.Contains("alien://") && ! gGrid) TGrid::Connect("alien://");
233  fMaskedFastorOADB = new AliOADBContainer("AliEmcalMaskedFastors");
234  fMaskedFastorOADB->InitFromFile(fNameMaskedFastorOADB.Data(), "AliEmcalMaskedFastors");
235  }
236 
237  // Setting online threshold for trigger
239  if(fInputEvent->GetRunNumber() >= 15344 && fInputEvent->GetRunNumber() <= 197388){
244  SetOnlineTriggerThreshold("DG1", 0);
245  SetOnlineTriggerThreshold("DG2", 0);
246  SetOnlineTriggerThreshold("DJ1", 0);
247  SetOnlineTriggerThreshold("DJ2", 0);
248  SetOnlineTriggerThreshold("EMC7", 0);
249  SetOnlineTriggerThreshold("DMC7", 0);
250  }
251  }
252 
253  // Load acceptance OADB
254  if(fNameAcceptanceOADB.Length() && fTriggerSelection){
255  AliDebugStream(1) << GetName() << ": Loading acceptance map from OADB file " << fNameAcceptanceOADB << std::endl;
256  AliOADBContainer acceptanceCont("AliEmcalTriggerAcceptance");
257  acceptanceCont.InitFromFile(fNameAcceptanceOADB.Data(), "AliEmcalTriggerAcceptance");
258  TObjArray *acceptanceMaps = dynamic_cast<TObjArray *>(acceptanceCont.GetObject(fInputEvent->GetRunNumber()));
259  TH2 *map(nullptr);
260  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("EG1")))){
261  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger EG1" << std::endl;
262  map->SetDirectory(nullptr);
264  }
265  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("EG2")))){
266  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger EG2" << std::endl;
267  map->SetDirectory(nullptr);
269  }
270  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("DG1")))){
271  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger DG1" << std::endl;
272  map->SetDirectory(nullptr);
274  }
275  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("DG2")))){
276  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger DG2" << std::endl;
277  map->SetDirectory(nullptr);
279  }
280  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("EJ1")))){
281  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger EJ1" << std::endl;
282  map->SetDirectory(nullptr);
284  }
285  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("EJ2")))){
286  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger EJ2" << std::endl;
287  map->SetDirectory(nullptr);
289  }
290  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("DJ1")))){
291  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger DJ1" << std::endl;
292  map->SetDirectory(nullptr);
294  }
295  if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject("DJ2")))){
296  AliDebugStream(1) << GetName() << ": Found acceptance map for trigger DJ2" << std::endl;
297  map->SetDirectory(nullptr);
299  }
300  }
301 }
302 
304  if(fDownscaleOADB){
305  fDownscaleFactors = static_cast<TObjArray *>(fDownscaleOADB->GetObject(runnumber));
306  }
307  if(fMaskedFastorOADB){
308  fMaskedFastors.clear();
309  TObjArray *ids = static_cast<TObjArray *>(fMaskedFastorOADB->GetObject(runnumber));
310  for(auto m : *ids){
311  TParameter<int> *id = static_cast<TParameter<int> *>(m);
312  fMaskedFastors.push_back(id->GetVal());
313  }
314  }
315 }
316 
318  // Exclusive means classes without lower trigger classes (which are downscaled) -
319  // in order to make samples statistically independent: MBExcl means MinBias && !EMCAL trigger
320  std::vector<TString> triggers = {
321  "MB", "EMC7", "DMC7",
322  "EJ1", "EJ2", "EG1", "EG2", "DJ1", "DJ2", "DG1", "DG2",
323  "EMC7excl", "DMC7excl", "EG2excl", "EJ2excl", "DG2excl", "DJ2excl",
324  "EJ1excl", "DJ1excl", "EG1excl", "DG1excl"
325  };
326  return triggers;
327 }
328 
330  AliDebugStream(1) << "Using V1 online trigger selector" << std::endl;
332  double onlinethresholds[5] = {140., 89., 260., 127., 0.};
333  int ngood(0);
334  for(auto p : *fTriggerPatchInfo){
335  AliEMCALTriggerPatchInfo *patch = static_cast<AliEMCALTriggerPatchInfo *>(p);
336  if((AliEmcalTriggerOfflineSelection::IsSingleShower(trigger) && patch->IsGammaLowRecalc()) ||
337  (!AliEmcalTriggerOfflineSelection::IsSingleShower(trigger) && patch->IsJetLowRecalc())){
338  if(patch->GetADCAmp() >= GetOnlineTriggerThresholdByIndex(trigger)) ngood++;
339  }
340  }
341  return ngood > 0;
342 }
343 
345  if(fDownscaleFactors){
346  TParameter<double> *result(nullptr);
347  // Downscaling only done on MB, L0 and the low threshold triggers
348  if(triggerclass.Contains("MB")) result = static_cast<TParameter<double> *>(fDownscaleFactors->FindObject("INT7"));
349  else if(triggerclass.Contains("EMC7")) result = static_cast<TParameter<double> *>(fDownscaleFactors->FindObject("EMC7"));
350  else if(triggerclass.Contains("EJ2")) result = static_cast<TParameter<double> *>(fDownscaleFactors->FindObject("EJ2"));
351  else if(triggerclass.Contains("EG2")) result = static_cast<TParameter<double> *>(fDownscaleFactors->FindObject("EG2"));
352  if(result) return 1./result->GetVal();
353  }
354  return 1.;
355 }
356 
358  TParameter<int> *threshpar(nullptr);
359  if((threshpar = static_cast<TParameter<int> *>(fOnlineTriggerThresholds.FindObject(triggerclass.Data())))){
360  threshpar->SetVal(threshold);
361  } else {
362  fOnlineTriggerThresholds.Add(new TParameter<int>(triggerclass.Data(), threshold));
363  }
364 }
365 
367  Int_t threshold(0);
368  TParameter<int> *val(nullptr);
369  if((val = static_cast<TParameter<int> *>(fOnlineTriggerThresholds.FindObject(name))))
370  threshold = val->GetVal();
371  return threshold;
372 }
373 
375  const TString triggernames[AliEmcalTriggerOfflineSelection::kTrgn] = {"EMC7", "EG1", "EG2", "EJ1", "EJ2", "DMC7",
376  "DG1", "DG2", "DJ1", "DJ2"};
377  return GetOnlineTriggerThresholdByName(triggernames[trigger]);
378 }
379 
381  const TString triggernames[AliEmcalTriggerOfflineSelection::kTrgn] = {"EMC7", "EG1", "EG2", "EJ1", "EJ2", "DMC7",
382  "DG1", "DG2", "DJ1", "DJ2"};
383  bool isInitialized = true;
384  for(int itrg = 0; itrg < AliEmcalTriggerOfflineSelection::kTrgn; itrg++){
385  if(!fOnlineTriggerThresholds.FindObject(triggernames[itrg].Data())) {
386  isInitialized = false;
387  break;
388  }
389  }
390  return isInitialized;
391 }
392 
394  return adc > GetOnlineTriggerThresholdByName(triggerclass);
395 }
396 
398  TString triggerstring = "";
399  Int_t nEJ1 = 0, nEJ2 = 0, nEG1 = 0, nEG2 = 0, nDJ1 = 0, nDJ2 = 0, nDG1 = 0, nDG2 = 0;
400  for(auto patchIter : *triggerpatches){
401  AliEMCALTriggerPatchInfo *patch = dynamic_cast<AliEMCALTriggerPatchInfo *>(patchIter);
402  if(!patch->IsRecalc()) continue;
403  if(patch->IsEMCal()){
404  if(patch->IsGammaLowRecalc() && SelectFiredPatch("EG1", patch->GetADCAmp())) nEG1++;
405  if(patch->IsGammaLowRecalc() && SelectFiredPatch("EG2", patch->GetADCAmp())) nEG2++;
406  if(patch->IsJetLowRecalc() && SelectFiredPatch("EJ1", patch->GetADCAmp())) nEJ1++;
407  if(patch->IsJetLowRecalc() && SelectFiredPatch("EJ2", patch->GetADCAmp())) nEJ2++;
408  } else {
409  if(patch->IsGammaLowRecalc() && SelectFiredPatch("DG1", patch->GetADCAmp())) nDG1++;
410  if(patch->IsGammaLowRecalc() && SelectFiredPatch("DG2", patch->GetADCAmp())) nDG2++;
411  if(patch->IsJetLowRecalc() && SelectFiredPatch("DJ1", patch->GetADCAmp())) nDJ1++;
412  if(patch->IsJetLowRecalc() && SelectFiredPatch("DJ2", patch->GetADCAmp())) nDJ2++;
413  }
414  }
415  if(nEJ1) triggerstring += "EJ1";
416  if(nEJ2){
417  if(triggerstring.Length()) triggerstring += ",";
418  triggerstring += "EJ2";
419  }
420  if(nEG1){
421  if(triggerstring.Length()) triggerstring += ",";
422  triggerstring += "EG1";
423  }
424  if(nEG2){
425  if(triggerstring.Length()) triggerstring += ",";
426  triggerstring += "EG2";
427  }
428  if(nDJ1){
429  if(triggerstring.Length()) triggerstring += ",";
430  triggerstring += "DJ2";
431  }
432  if(nDJ2){
433  if(triggerstring.Length()) triggerstring += ",";
434  triggerstring += "DJ2";
435  }
436  if(nDG1){
437  if(triggerstring.Length()) triggerstring += ",";
438  triggerstring += "DG1";
439  }
440  if(nDG2){
441  if(triggerstring.Length()) triggerstring += ",";
442  triggerstring += "DG2";
443  }
444  return triggerstring;
445 }
446 
447 } /* 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.
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
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