AliPhysics  251aa1e (251aa1e)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskEmcalClustersRef.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-2015, 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 <bitset>
17 #include <iostream>
18 #include <map>
19 #include <vector>
20 
21 #include <TArrayD.h>
22 #include <TClonesArray.h>
23 #include <TGrid.h>
24 #include <THashList.h>
25 #include <THistManager.h>
26 #include <TLinearBinning.h>
27 #include <TLorentzVector.h>
28 #include <TObjArray.h>
29 #include <TParameter.h>
30 #include <TMath.h>
31 
32 #include "AliAnalysisManager.h"
33 #include "AliAnalysisUtils.h"
34 #include "AliClusterContainer.h"
36 #include "AliEMCALGeometry.h"
37 #include "AliEmcalList.h"
38 #include "AliEMCALTriggerPatchInfo.h"
40 #include "AliESDEvent.h"
41 #include "AliInputEventHandler.h"
42 #include "AliLog.h"
43 #include "AliMultSelection.h"
44 #include "AliMultEstimator.h"
45 #include "AliVCluster.h"
46 #include "AliVEvent.h"
47 #include "AliVEventHandler.h"
48 #include "AliVVertex.h"
49 
51 
55 
56 namespace EMCalTriggerPtAnalysis {
57 
58 AliAnalysisTaskEmcalClustersRef::AliAnalysisTaskEmcalClustersRef() :
60  fNameClusterContainer(""),
61  fCentralityRange(-999., 999.),
62  fRequestCentrality(false),
63  fEventCentrality(-1),
64  fCentralityEstimator("V0M"),
65  fEnergyDefinition(kDefaultEnergy),
66  fEnableSumw2(false)
67 {
68 }
69 
72  fNameClusterContainer(""),
73  fCentralityRange(-999., 999.),
74  fRequestCentrality(false),
75  fEventCentrality(-1),
76  fCentralityEstimator("V0M"),
77  fEnergyDefinition(kDefaultEnergy),
78  fEnableSumw2(false)
79 {
80 }
81 
83 }
84 
85 
87 
88  EnergyBinning energybinning;
89  TLinearBinning smbinning(21, -0.5, 20.5), etabinning(100, -0.7, 0.7);
90  TString optionstring = fEnableSumw2 ? "s" : "";
91 
92  /*
93  * Exclusive classes are defined as triggered events
94  * in a class without lower threshold classes firing.
95  * This is needed to make the triggers statistically
96  * independent.
97  */
98  std::array<Double_t, 5> encuts = {1., 2., 5., 10., 20.};
99  Int_t sectorsWithEMCAL[10] = {4, 5, 6, 7, 8, 9, 13, 14, 15, 16};
100  for(auto trg : GetSupportedTriggers()){
101  fHistos->CreateTH1(Form("hEventCount%s", trg.Data()), Form("Event count for trigger class %s", trg.Data()), 1, 0.5, 1.5, optionstring);
102  fHistos->CreateTH1(Form("hEventCentrality%s", trg.Data()), Form("Event centrality for trigger class %s", trg.Data()), 103, -2., 101., optionstring);
103  fHistos->CreateTH1(Form("hVertexZ%s", trg.Data()), Form("z-position of the primary vertex for trigger class %s", trg.Data()), 200, -40., 40., optionstring);
104  fHistos->CreateTH1(Form("hClusterEnergy%s", trg.Data()), Form("Cluster energy for trigger class %s", trg.Data()), energybinning, optionstring);
105  fHistos->CreateTH1(Form("hClusterET%s", trg.Data()), Form("Cluster transverse energy for trigger class %s", trg.Data()), energybinning, optionstring);
106  fHistos->CreateTH1(Form("hClusterEnergyFired%s", trg.Data()), Form("Cluster energy for trigger class %s, firing the trigger", trg.Data()), energybinning, optionstring);
107  fHistos->CreateTH1(Form("hClusterETFired%s", trg.Data()), Form("Cluster transverse energy for trigger class %s, firing the trigger", trg.Data()), energybinning, optionstring);
108  fHistos->CreateTH2(Form("hClusterEnergySM%s", trg.Data()), Form("Cluster energy versus supermodule for trigger class %s", trg.Data()), smbinning, energybinning, optionstring);
109  fHistos->CreateTH2(Form("hClusterETSM%s", trg.Data()), Form("Cluster transverse energy versus supermodule for trigger class %s", trg.Data()), smbinning, energybinning, optionstring);
110  fHistos->CreateTH2(Form("hClusterEnergyFiredSM%s", trg.Data()), Form("Cluster energy versus supermodule for trigger class %s, firing the trigger", trg.Data()), smbinning, energybinning, optionstring);
111  fHistos->CreateTH2(Form("hClusterETFiredSM%s", trg.Data()), Form("Cluster transverse energy versus supermodule for trigger class %s, firing the trigger", trg.Data()), smbinning, energybinning, optionstring);
112  fHistos->CreateTH2(Form("hEtaEnergy%s", trg.Data()), Form("Cluster energy vs. eta for trigger class %s", trg.Data()), etabinning, energybinning, optionstring);
113  fHistos->CreateTH2(Form("hEtaET%s", trg.Data()), Form("Cluster transverse energy vs. eta for trigger class %s", trg.Data()), etabinning, energybinning, optionstring);
114  fHistos->CreateTH2(Form("hEtaEnergyFired%s", trg.Data()), Form("Cluster energy vs. eta for trigger class %s, firing the trigger", trg.Data()), etabinning, energybinning, optionstring);
115  fHistos->CreateTH2(Form("hEtaETFired%s", trg.Data()), Form("Cluster transverse energy vs. eta for trigger class %s, firing the trigger", trg.Data()), etabinning, energybinning, optionstring);
116  for(int ism = 0; ism < 20; ism++){
117  fHistos->CreateTH2(Form("hEtaEnergySM%d%s", ism, trg.Data()), Form("Cluster energy vs. eta in Supermodule %d for trigger %s", ism, trg.Data()), etabinning, energybinning, optionstring);
118  fHistos->CreateTH2(Form("hEtaETSM%d%s", ism, trg.Data()), Form("Cluster transverse energy vs. eta in Supermodule %d for trigger %s", ism, trg.Data()), etabinning, energybinning, optionstring);
119  fHistos->CreateTH2(Form("hEtaEnergyFiredSM%d%s", ism, trg.Data()), Form("Cluster energy vs. eta in Supermodule %d for trigger %s, firing the trigger", ism, trg.Data()), etabinning, energybinning, optionstring);
120  fHistos->CreateTH2(Form("hEtaETFiredSM%d%s", ism, trg.Data()), Form("Cluster transverse energy vs. eta in Supermodule %d for trigger %s, firing the trigger", ism, trg.Data()), etabinning, energybinning, optionstring);
121  }
122  for(int isec = 0; isec < 10; isec++){
123  fHistos->CreateTH2(Form("hEtaEnergySec%d%s", sectorsWithEMCAL[isec], trg.Data()), Form("Cluster energy vs.eta in tracking sector %d for trigger %s", sectorsWithEMCAL[isec], trg.Data()), etabinning, energybinning, optionstring);
124  fHistos->CreateTH2(Form("hEtaETSec%d%s", sectorsWithEMCAL[isec], trg.Data()), Form("Cluster transverse energy vs.eta in tracking sector %d for trigger %s", sectorsWithEMCAL[isec], trg.Data()), etabinning, energybinning, optionstring);
125  fHistos->CreateTH2(Form("hEtaEnergyFiredSec%d%s", sectorsWithEMCAL[isec], trg.Data()), Form("Cluster energy vs.eta in tracking sector %d for trigger %s, firing the trigger", sectorsWithEMCAL[isec], trg.Data()), etabinning, energybinning, optionstring);
126  fHistos->CreateTH2(Form("hEtaETFiredSec%d%s", sectorsWithEMCAL[isec], trg.Data()), Form("Cluster transverse energy vs.eta in tracking sector %d for trigger %s, firing the trigger", sectorsWithEMCAL[isec], trg.Data()), etabinning, energybinning, optionstring);
127  }
128  for(auto ien : encuts){
129  fHistos->CreateTH2(Form("hEtaPhi%dG%s", static_cast<int>(ien), trg.Data()), Form("cluster #eta-#phi map for clusters with energy larger than %f GeV/c for trigger class %s", ien, trg.Data()), 100, -0.7, 0.7, 200, 0, 2*TMath::Pi(), optionstring);
130  fHistos->CreateTH2(Form("hEtaPhiFired%dG%s", static_cast<int>(ien), trg.Data()), Form("cluster #eta-#phi map for clusters fired the trigger with energy larger than %f GeV/c for trigger class %s", ien, trg.Data()), 200, -0.7, 0.7, 200, 0, 2*TMath::Pi(), optionstring);
131  }
132  }
133 }
134 
136  fEventCentrality = -1;
137  if(fRequestCentrality){
138  AliMultSelection *mult = dynamic_cast<AliMultSelection *>(InputEvent()->FindListObject("MultSelection"));
139  if(!mult){
140  AliErrorStream() << GetName() << ": Centrality selection enabled but no centrality estimator found" << std::endl;
141  return false;
142  }
143  if(mult->IsEventSelected()) return false;
144  fEventCentrality = mult->GetEstimator(fCentralityEstimator)->GetPercentile();
145  AliDebugStream(1) << GetName() << ": Centrality " << fEventCentrality << std::endl;
147  AliDebugStream(1) << GetName() << ": reject centrality: " << fEventCentrality << std::endl;
148  return false;
149  } else {
150  AliDebugStream(1) << GetName() << ": select centrality " << fEventCentrality << std::endl;
151  }
152  } else {
153  AliDebugStream(1) << GetName() << ": No centrality selection applied" << std::endl;
154  }
155  return true;
156 }
157 
159  AliDebugStream(1) << GetName() << ": UserExec start" << std::endl;
160 
161  TList ej1patches, dj1patches, ej2patches, dj2patches, eg1patches, dg1patches, eg2patches, dg2patches;
162  FindPatchesForTrigger("EJ2", fTriggerPatchInfo, ej2patches);
163  FindPatchesForTrigger("DJ2", fTriggerPatchInfo, dj2patches);
164  FindPatchesForTrigger("EJ1", fTriggerPatchInfo, ej1patches);
165  FindPatchesForTrigger("DJ1", fTriggerPatchInfo, dj1patches);
166  FindPatchesForTrigger("EG2", fTriggerPatchInfo, eg2patches);
167  FindPatchesForTrigger("DG2", fTriggerPatchInfo, dg2patches);
168  FindPatchesForTrigger("EG1", fTriggerPatchInfo, eg1patches);
169  FindPatchesForTrigger("DG1", fTriggerPatchInfo, dg1patches);
170 
171  Double_t energy, et, eta, phi;
172  TList *selpatches(nullptr);
173  for(auto clust : GetClusterContainer(fNameClusterContainer.Data())->all()){
174  //AliVCluster *clust = static_cast<AliVCluster *>(*clustIter);
175  if(!clust->IsEMCAL()) continue;
176  if(clust->GetIsExotic()) continue;
177 
178  // Distinguish energy definition
179  switch(fEnergyDefinition){
180  case kDefaultEnergy:
181  AliDebugStream(2) << GetName() << ": Using cluster energy definition: default" << std::endl;
182  energy = clust->E();
183  break;
184  case kNonLinCorrEnergy:
185  AliDebugStream(2) << GetName() << ": Using cluster energy definition: corrected for non-linearity" << std::endl;
186  energy = clust->GetNonLinCorrEnergy();
187  break;
188  case kHadCorrEnergy:
189  AliDebugStream(2) << GetName() << ": Using cluster energy definition: corrected for hadronic contribution" << std::endl;
190  energy = clust->GetHadCorrEnergy();
191  break;
192  };
193 
194  AliDebugStream(2) << GetName() << ": Using energy " << energy << " (def: " << clust->E()
195  << " | NL: " << clust->GetNonLinCorrEnergy()
196  << " | HD: " << clust->GetHadCorrEnergy()
197  << ")" << std::endl;
198 
199  TLorentzVector posvec;
200  clust->GetMomentum(posvec, fVertex);
201  posvec.SetE(energy); // use energy definition as selected in the task
202  et = posvec.Et();
203  eta = posvec.Eta();
204  phi = posvec.Phi();
205 
206  // fill histograms allEta
207  for(const auto & trg : fSelectedTriggers){
208  selpatches = nullptr;
209  if(trg.Contains("EJ2")) selpatches = &ej2patches;
210  if(trg.Contains("DJ2")) selpatches = &dj2patches;
211  if(trg.Contains("EJ1")) selpatches = &ej1patches;
212  if(trg.Contains("DJ1")) selpatches = &dj1patches;
213  if(trg.Contains("EG2")) selpatches = &eg2patches;
214  if(trg.Contains("DG2")) selpatches = &dg2patches;
215  if(trg.Contains("EG1")) selpatches = &eg1patches;
216  if(trg.Contains("DG1")) selpatches = &dg1patches;
217  FillClusterHistograms(trg.Data(), energy, et, eta, phi, nullptr);
218  }
219  }
220  return true;
221 }
222 
223 void AliAnalysisTaskEmcalClustersRef::FillClusterHistograms(const TString &triggerclass, double energy, double transverseenergy, double eta, double phi, TList *fTriggerPatches){
224  Bool_t hasTriggerPatch = fTriggerPatches ? CorrelateToTrigger(eta, phi, fTriggerPatches) : kFALSE;
225  Int_t supermoduleID = -1, sector = -1;
226  Double_t weight = GetTriggerWeight(triggerclass);
227  AliDebugStream(1) << GetName() << ": Using weight " << weight << " for trigger " << triggerclass << std::endl;
228 
229  fGeom->SuperModuleNumberFromEtaPhi(eta, phi, supermoduleID);
230  fHistos->FillTH1(Form("hClusterEnergy%s", triggerclass.Data()), energy, weight);
231  fHistos->FillTH1(Form("hClusterET%s", triggerclass.Data()), transverseenergy, weight);
232  fHistos->FillTH2(Form("hEtaEnergy%s", triggerclass.Data()), eta, energy, weight);
233  fHistos->FillTH2(Form("hEtaET%s", triggerclass.Data()), eta, transverseenergy, weight);
234  if(supermoduleID >= 0){
235  fHistos->FillTH2(Form("hClusterEnergySM%s", triggerclass.Data()), supermoduleID, energy, weight);
236  fHistos->FillTH2(Form("hClusterETSM%s", triggerclass.Data()), supermoduleID, transverseenergy, weight);
237  fHistos->FillTH2(Form("hEtaEnergySM%d%s", supermoduleID, triggerclass.Data()), eta, energy, weight);
238  fHistos->FillTH2(Form("hEtaETSM%d%s", supermoduleID, triggerclass.Data()), eta, transverseenergy, weight);
239  if(supermoduleID < 12)
240  sector = 4 + int(supermoduleID/2); // EMCAL
241  else
242  sector = 13 + int((supermoduleID-12)/2); // DCAL
243  fHistos->FillTH2(Form("hEtaEnergySec%d%s", sector, triggerclass.Data()), eta, energy, weight);
244  fHistos->FillTH2(Form("hEtaETSec%d%s", sector, triggerclass.Data()), eta, transverseenergy, weight);
245  }
246  if(hasTriggerPatch){
247  fHistos->FillTH1(Form("hClusterEnergyFired%s", triggerclass.Data()), energy, weight);
248  fHistos->FillTH1(Form("hClusterETFired%s", triggerclass.Data()), energy, weight);
249  fHistos->FillTH2(Form("hEtaEnergyFired%s", triggerclass.Data()), eta, energy, weight);
250  fHistos->FillTH2(Form("hEtaETFired%s", triggerclass.Data()), eta, energy, weight);
251  if(supermoduleID >= 0){
252  fHistos->FillTH2(Form("hClusterEnergyFiredSM%s", triggerclass.Data()), supermoduleID, energy, weight);
253  fHistos->FillTH2(Form("hClusterETFiredSM%s", triggerclass.Data()), supermoduleID, transverseenergy, weight);
254  fHistos->FillTH2(Form("hEtaEnergyFiredSM%d%s", supermoduleID, triggerclass.Data()), eta, energy,weight);
255  fHistos->FillTH2(Form("hEtaETFiredSM%d%s", supermoduleID, triggerclass.Data()), eta, transverseenergy, weight);
256  fHistos->FillTH2(Form("hEtaEnergyFiredSec%d%s", sector, triggerclass.Data()), eta, energy, weight);
257  fHistos->FillTH2(Form("hEtaETFiredSec%d%s", sector, triggerclass.Data()), eta, transverseenergy, weight);
258  }
259  }
260  Double_t encuts[5] = {1., 2., 5., 10., 20.};
261  for(int ien = 0; ien < 5; ien++){
262  if(energy > encuts[ien]){
263  fHistos->FillTH2(Form("hEtaPhi%dG%s", static_cast<int>(encuts[ien]), triggerclass.Data()), eta, phi, weight);
264  if(hasTriggerPatch){
265  fHistos->FillTH2(Form("hEtaPhiFired%dG%s", static_cast<int>(encuts[ien]), triggerclass.Data()), eta, phi, weight);
266  }
267  }
268  }
269 }
270 
272  for(const auto &t : fSelectedTriggers){
273  Double_t weight = GetTriggerWeight(t);
274  fHistos->FillTH1(Form("hEventCount%s", t.Data()), 1, weight);
275  fHistos->FillTH1(Form("hEventCentrality%s", t.Data()), fEventCentrality, weight);
276  fHistos->FillTH1(Form("hVertexZ%s", t.Data()), fVertex[2], weight);
277  }
278 }
279 
281  Bool_t hasfound = kFALSE;
282  for(TIter patchIter = TIter(fTriggerPatches).Begin(); patchIter != TIter::End(); ++patchIter){
283  Double_t boundaries[4];
284  GetPatchBoundaries(*patchIter, boundaries);
285  Double_t etamin = TMath::Min(boundaries[0], boundaries[1]),
286  etamax = TMath::Max(boundaries[0], boundaries[1]),
287  phimin = TMath::Min(boundaries[2], boundaries[3]),
288  phimax = TMath::Max(boundaries[2], boundaries[3]);
289  if(etaclust > etamin && etaclust < etamax && phiclust > phimin && phiclust < phimax){
290  hasfound = kTRUE;
291  break;
292  }
293  }
294  return hasfound;
295 }
296 
297 void AliAnalysisTaskEmcalClustersRef::FindPatchesForTrigger(TString triggerclass, const TClonesArray * triggerPatches, TList &foundtriggers) const {
298  foundtriggers.Clear();
299  if(!triggerPatches) return;
301  if(triggerclass == "EG1") myclass = AliEmcalTriggerOfflineSelection::kTrgEG1;
302  if(triggerclass == "EG2") myclass = AliEmcalTriggerOfflineSelection::kTrgEG2;
303  if(triggerclass == "EJ1") myclass = AliEmcalTriggerOfflineSelection::kTrgEJ1;
304  if(triggerclass == "EJ2") myclass = AliEmcalTriggerOfflineSelection::kTrgEJ2;
305  if(triggerclass == "DMC7") myclass = AliEmcalTriggerOfflineSelection::kTrgDL0;
306  if(triggerclass == "DG1") myclass = AliEmcalTriggerOfflineSelection::kTrgDG1;
307  if(triggerclass == "DG2") myclass = AliEmcalTriggerOfflineSelection::kTrgDG2;
308  if(triggerclass == "DJ1") myclass = AliEmcalTriggerOfflineSelection::kTrgDJ1;
309  if(triggerclass == "DJ2") myclass = AliEmcalTriggerOfflineSelection::kTrgDJ2;
310  for(auto patchiter : *triggerPatches){
311  AliEMCALTriggerPatchInfo *mypatch = static_cast<AliEMCALTriggerPatchInfo *>(patchiter);
312  if(!mypatch->IsOfflineSimple()) continue;
314  if(!mypatch->IsDCalPHOS()) continue;
315  } else {
316  if(mypatch->IsDCalPHOS()) continue;
317  }
319  if(!mypatch->IsGammaLowSimple()) continue;
320  } else {
321  if(!mypatch->IsJetLowSimple()) continue;
322  }
323  double threshold = fTriggerSelection ? fTriggerSelection->GetThresholdForTrigger(myclass) : -1;
324  if(mypatch->GetPatchE() > threshold) foundtriggers.Add(patchiter);
325  }
326 }
327 
329  AliEMCALTriggerPatchInfo *patch= dynamic_cast<AliEMCALTriggerPatchInfo *>(o);
330  boundaries[0] = patch->GetEtaMin();
331  boundaries[1] = patch->GetEtaMax();
332  boundaries[2] = patch->GetPhiMin();
333  boundaries[3] = patch->GetPhiMax();
334 }
335 
337  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
338 
339  //-------------------------------------------------------
340  // Init the task and do settings
341  //-------------------------------------------------------
342 
343  TString clusName(nclusters == "usedefault" ? AliEmcalAnalysisFactory::ClusterContainerNameFactory(mgr->GetInputEventHandler()->InheritsFrom("AliAODInputHandler")) : nclusters);
344 
345  TString taskname = "emcalClusterQA_" + suffix;
346 
348  task->AddClusterContainer(clusName);
349  task->SetClusterContainer(clusName);
350  mgr->AddTask(task);
351 
352  TString outfile(mgr->GetCommonFileName());
353  outfile += ":ClusterQA_" + TString(suffix);
354  TString containername = "ClusterResults_" + TString(suffix);
355  printf("Outfile: %s, container: %s\n", outfile.Data(), containername.Data());
356 
357  task->ConnectInput(0, mgr->GetCommonInputContainer());
358  mgr->ConnectOutput(task, 1, mgr->CreateContainer(containername.Data(), TList::Class(), AliAnalysisManager::kOutputContainer, outfile.Data()));
359 
360  return task;
361 }
362 
364  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
365 
367  mgr->AddTask(task);
368 
369  // Adding cluster container
370  TString clusName(nClusters == "usedefault" ? AliEmcalAnalysisFactory::ClusterContainerNameFactory(mgr->GetInputEventHandler()->InheritsFrom("AliAODInputHandler")) : nClusters);
371  task->AddClusterContainer(clusName.Data());
372  task->SetClusterContainer(clusName);
373 
374  // Set Energy thresholds for additional patch selection:
375  // These are events with offline patches of a given type where the trigger reached already the plateau
376  // These numers are determined as:
377  // EMC7: 3.5 GeV
378  // EG1: 14 GeV
379  // EG2: 8 GeV
380  // EJ1: 22 GeV
381  // EJ2: 12 GeV
384  );
385 
386  TString outfile(mgr->GetCommonFileName());
387  outfile += ":ClusterQA";
388 
389  task->ConnectInput(0, mgr->GetCommonInputContainer());
390  mgr->ConnectOutput(task, 1, mgr->CreateContainer("ClusterResults", AliEmcalList::Class(), AliAnalysisManager::kOutputContainer, outfile.Data()));
391 
392  return task;
393 }
394 
395 
401 {
402  this->SetMinimum(0.);
403  this->AddStep(1, 0.05);
404  this->AddStep(2, 0.1);
405  this->AddStep(4, 0.2);
406  this->AddStep(7, 0.5);
407  this->AddStep(16, 1);
408  this->AddStep(32, 2);
409  this->AddStep(40, 4);
410  this->AddStep(50, 5);
411  this->AddStep(100, 10);
412  this->AddStep(200, 20);
413 }
414 
415 
416 } /* namespace EMCalTriggerPtAnalysis */
void GetPatchBoundaries(TObject *o, Double_t *boundaries) const
std::vector< TString > fSelectedTriggers
! Triggers selected for given event
double Double_t
Definition: External.C:58
Class creating a linear binning, used in the histogram manager.
Bool_t CorrelateToTrigger(Double_t etaclust, Double_t phiclust, TList *triggerpatches) const
static TString ClusterContainerNameFactory(Bool_t isAOD)
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Simple monitoring task for cluster-related quantities in EMCAL-triggered events.
AliEmcalTriggerOfflineSelection * fTriggerSelection
Offline trigger selection.
Bool_t fRequestCentrality
Switch on request for centrality range.
void AddStep(Double_t max, Double_t binwidth)
void SetOfflineTriggerSelection(AliEmcalTriggerOfflineSelection *sel)
AliClusterContainer * AddClusterContainer(const char *n)
void FillClusterHistograms(const TString &triggerclass, double energy, double transversenergy, double eta, double phi, TList *triggerpatches)
const Double_t etamin
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
int Int_t
Definition: External.C:63
TString fNameClusterContainer
Name of the cluster container in the event.
AliEMCALGeometry * fGeom
!emcal geometry
EmcalTriggerClass
Definition of the various supported trigger types.
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Helper class creating user defined custom binning.
static AliAnalysisTaskEmcalClustersRef * AddTaskEmcalClustersRef(const TString &nClusters="usedefault", const TString &suffix="")
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
TString fCentralityEstimator
Centrality estimator (default: V0M for PbPb)
energy
static AliAnalysisTaskEmcalClustersRef * AddTaskEmcalClustersRefDefault(const TString &nClusters="usedefault")
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
Double_t fVertex[3]
!event vertex
AliCutValueRange< double > fCentralityRange
Selected centrality range.
const Double_t etamax
TClonesArray * fTriggerPatchInfo
!trigger patch info array
EnergyDefinition_t fEnergyDefinition
Energy definition used for a given cluster.
bool Bool_t
Definition: External.C:53
static AliEmcalTriggerOfflineSelection * TriggerSelectionFactory(Double_t el0, Double_t eg1, Double_t eg2, Double_t ej1, Double_t ej2)
const Double_t phimin
void FindPatchesForTrigger(TString triggerclass, const TClonesArray *triggerpatches, TList &foundpatches) const
void SetMinimum(Double_t min)