23 #include <TClonesArray.h>
25 #include <THashList.h>
28 #include <TLorentzVector.h>
29 #include <TObjArray.h>
30 #include <TParameter.h>
33 #include "AliAnalysisUtils.h"
34 #include "AliCentrality.h"
35 #include "AliEMCALGeometry.h"
36 #include "AliEMCALTriggerPatchInfo.h"
38 #include "AliESDEvent.h"
39 #include "AliInputEventHandler.h"
41 #include "AliOADBContainer.h"
42 #include "AliVCluster.h"
43 #include "AliVVertex.h"
44 #include "AliMultSelection.h"
45 #include "AliMultEstimator.h"
53 namespace EMCalTriggerPtAnalysis {
58 AliAnalysisTaskEmcalClustersRef::AliAnalysisTaskEmcalClustersRef() :
65 fClusterContainer(
""),
66 fRequestAnalysisUtil(kTRUE),
67 fTriggerStringFromPatches(kFALSE),
68 fCentralityRange(-999., 999.),
69 fVertexRange(-999., 999.),
70 fRequestCentrality(false),
71 fNameDownscaleOADB(
""),
84 AliAnalysisTaskSE(name),
90 fClusterContainer(
""),
91 fRequestAnalysisUtil(kTRUE),
92 fTriggerStringFromPatches(kFALSE),
93 fCentralityRange(-999., 999.),
94 fVertexRange(-999., 999.),
95 fRequestCentrality(false),
96 fNameDownscaleOADB(
""),
102 DefineOutput(1, TList::Class());
116 AliInfoStream() <<
"Creating histograms for task " << GetName() << std::endl;
120 TLinearBinning smbinning(21, -0.5, 20.5), etabinning(100, -0.7, 0.7);
129 std::array<TString, 21> triggers = {
130 "MB",
"EMC7",
"DMC7",
131 "EJ1",
"EJ2",
"EG1",
"EG2",
"DJ1",
"DJ2",
"DG1",
"DG2",
132 "EMC7excl",
"DMC7excl",
"EG2excl",
"EJ2excl",
"DG2excl",
"DJ2excl",
133 "EJ1excl",
"DJ1excl",
"EG1excl",
"DG1excl"
135 std::array<Double_t, 5> encuts = {1., 2., 5., 10., 20.};
136 Int_t sectorsWithEMCAL[10] = {4, 5, 6, 7, 8, 9, 13, 14, 15, 16};
137 for(
auto trg : triggers){
138 fHistos->
CreateTH1(Form(
"hEventCount%s", trg.Data()), Form(
"Event count for trigger class %s", trg.Data()), 1, 0.5, 1.5);
139 fHistos->
CreateTH1(Form(
"hEventCentrality%s", trg.Data()), Form(
"Event centrality for trigger class %s", trg.Data()), 103, -2., 101.);
140 fHistos->
CreateTH1(Form(
"hVertexZ%s", trg.Data()), Form(
"z-position of the primary vertex for trigger class %s", trg.Data()), 200, -40., 40.);
141 fHistos->
CreateTH1(Form(
"hClusterEnergy%s", trg.Data()), Form(
"Cluster energy for trigger class %s", trg.Data()), energybinning);
142 fHistos->
CreateTH1(Form(
"hClusterET%s", trg.Data()), Form(
"Cluster transverse energy for trigger class %s", trg.Data()), energybinning);
143 fHistos->
CreateTH1(Form(
"hClusterEnergyFired%s", trg.Data()), Form(
"Cluster energy for trigger class %s, firing the trigger", trg.Data()), energybinning);
144 fHistos->
CreateTH1(Form(
"hClusterETFired%s", trg.Data()), Form(
"Cluster transverse energy for trigger class %s, firing the trigger", trg.Data()), energybinning);
145 fHistos->
CreateTH2(Form(
"hClusterEnergySM%s", trg.Data()), Form(
"Cluster energy versus supermodule for trigger class %s", trg.Data()), smbinning, energybinning);
146 fHistos->
CreateTH2(Form(
"hClusterETSM%s", trg.Data()), Form(
"Cluster transverse energy versus supermodule for trigger class %s", trg.Data()), smbinning, energybinning);
147 fHistos->
CreateTH2(Form(
"hClusterEnergyFiredSM%s", trg.Data()), Form(
"Cluster energy versus supermodule for trigger class %s, firing the trigger", trg.Data()), smbinning, energybinning);
148 fHistos->
CreateTH2(Form(
"hClusterETFiredSM%s", trg.Data()), Form(
"Cluster transverse energy versus supermodule for trigger class %s, firing the trigger", trg.Data()), smbinning, energybinning);
149 fHistos->
CreateTH2(Form(
"hEtaEnergy%s", trg.Data()), Form(
"Cluster energy vs. eta for trigger class %s", trg.Data()), etabinning, energybinning);
150 fHistos->
CreateTH2(Form(
"hEtaET%s", trg.Data()), Form(
"Cluster transverse energy vs. eta for trigger class %s", trg.Data()), etabinning, energybinning);
151 fHistos->
CreateTH2(Form(
"hEtaEnergyFired%s", trg.Data()), Form(
"Cluster energy vs. eta for trigger class %s, firing the trigger", trg.Data()), etabinning, energybinning);
152 fHistos->
CreateTH2(Form(
"hEtaETFired%s", trg.Data()), Form(
"Cluster transverse energy vs. eta for trigger class %s, firing the trigger", trg.Data()), etabinning, energybinning);
153 for(
int ism = 0; ism < 20; ism++){
154 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);
155 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);
156 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);
157 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);
159 for(
int isec = 0; isec < 10; isec++){
160 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);
161 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);
162 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);
163 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);
165 for(
auto ien : encuts){
166 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());
167 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());
171 AliDebugStream(1) <<
"End creating histograms" << std::endl;
180 AliDebugStream(1) << GetName() <<
": UserExec start" << std::endl;
182 AliInfoStream() << GetName() <<
": Initializing ..." << std::endl;
187 AliInfoStream() << GetName() <<
": Changing run from " <<
fCurrentRun <<
" to " << InputEvent()->GetRunNumber() << std::endl;
192 TString triggerstring =
"";
196 triggerstring = fInputEvent->GetFiredTriggerClasses();
199 UInt_t selectionstatus = fInputHandler->IsEventSelected();
200 std::stringstream triggerdebug;
201 triggerdebug <<
"Offline bits: " << std::bitset<sizeof(UInt_t) * 8>(selectionstatus);
202 AliDebug(2, triggerdebug.str().c_str());
203 Bool_t isMinBias = selectionstatus & AliVEvent::kINT7,
204 isEJ1 = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains(
"EJ1"),
205 isEJ2 = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains(
"EJ2"),
206 isEG1 = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains(
"EG1"),
207 isEG2 = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains(
"EG2"),
208 isEMC7 = (selectionstatus & AliVEvent::kEMC7) && triggerstring.Contains(
"EMC7"),
209 isDJ1 = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains(
"DJ1"),
210 isDJ2 = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains(
"DJ2"),
211 isDG1 = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains(
"DG1"),
212 isDG2 = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains(
"DG2"),
213 isDMC7 = (selectionstatus & AliVEvent::kEMC7) && triggerstring.Contains(
"DMC7");
226 if(!(isMinBias || isEMC7 || isEG1 || isEG2 || isEJ1 || isEJ2 || isDMC7 || isDG1 || isDG2 || isDJ1 || isDJ2)){
227 AliDebugStream(1) << GetName() <<
": Reject trigger" << std::endl;
231 AliDebugStream(1) <<
"Event selected" << std::endl;
233 AliMultSelection *mult =
dynamic_cast<AliMultSelection *
>(InputEvent()->FindListObject(
"MultSelection"));
235 AliErrorStream() << GetName() <<
": Centrality selection enabled but no centrality estimator found" << std::endl;
238 if(mult->IsEventSelected())
return;
239 centrality = mult->GetEstimator(
"V0M")->GetPercentile();
240 AliDebugStream(1) << GetName() <<
": Centrality " << centrality << std::endl;
242 AliDebugStream(1) << GetName() <<
": reject centrality: " << centrality << std::endl;
245 AliDebugStream(1) << GetName() <<
": select centrality " << centrality << std::endl;
248 AliDebugStream(1) << GetName() <<
": No centrality selection applied" << std::endl;
250 const AliVVertex *vtx = fInputEvent->GetPrimaryVertex();
251 if(!vtx) vtx = fInputEvent->GetPrimaryVertexSPD();
253 if(vtx->GetNContributors() < 1){
254 AliDebug(1, Form(
"%s: Reject contributors\n", GetName()));
259 AliDebugStream(1) << GetName() <<
" : Reject analysis util" << std::endl;
260 if(fInputEvent->IsA() == AliESDEvent::Class() &&
fAnalysisUtil->IsFirstEventInChunk(fInputEvent))
return;
261 if(!
fAnalysisUtil->IsVertexSelected2013pA(fInputEvent))
return;
266 AliDebugStream(1) << GetName() <<
": Reject z[" << vtx->GetZ() <<
"]" << std::endl;
269 AliDebugStream(1) << GetName() <<
": Event Selected" << std::endl;
299 if(!(isMinBias || isEMC7 || isEJ2))
FillEventHistograms(
"EJ1excl", centrality, vtx->GetZ());
305 if(!(isMinBias || isDMC7 || isDJ2))
FillEventHistograms(
"DJ1excl", centrality, vtx->GetZ());
322 if(!(isMinBias || isEMC7 || isEG1))
FillEventHistograms(
"EG1excl", centrality, vtx->GetZ());
327 if(!(isMinBias || isDMC7 || isDG1))
FillEventHistograms(
"DG1excl", centrality, vtx->GetZ());
337 TObjArray clusterEvent(1000);
339 TCollection *clusterArray =
dynamic_cast<TClonesArray *
>(fInputEvent->FindListObject(
fClusterContainer.Data()));
341 AliError(Form(
"Cluster array with name %s not found in the event",
fClusterContainer.Data()));
342 for(
int icl = 0; icl < fInputEvent->GetNumberOfCaloClusters(); icl++){
343 clusterEvent.Add(fInputEvent->GetCaloCluster(icl));
345 clusterArray = &clusterEvent;
348 Double_t vertexpos[3];
349 fInputEvent->GetPrimaryVertex()->GetXYZ(vertexpos);
351 Double_t
energy, et, eta, phi;
352 for(TIter clustIter = TIter(clusterArray).Begin(); clustIter != TIter::End(); ++clustIter){
353 AliVCluster *clust =
static_cast<AliVCluster *
>(*clustIter);
354 if(!clust->IsEMCAL())
continue;
355 if(clust->GetIsExotic())
continue;
357 TLorentzVector posvec;
358 energy = clust->GetNonLinCorrEnergy();
360 clust->GetMomentum(posvec, vertexpos);
387 if(!(isMinBias || isEMC7)){
396 if(!(isMinBias || isDMC7)){
405 if(!(isMinBias || isEMC7 || isEJ2)){
414 if(!(isMinBias || isEMC7 || isDJ2)){
423 if(!(isMinBias || isEMC7)){
432 if(!(isMinBias || isDMC7)){
441 if(!(isMinBias || isDMC7 || isEG2)){
450 if(!(isMinBias || isDMC7 || isDG2)){
460 fGeometry = AliEMCALGeometry::GetInstance();
464 fTriggerPatches =
dynamic_cast<TClonesArray *
>(fInputEvent->FindListObject(
"EmcalTriggers"));
468 fDownscaleOADB =
new AliOADBContainer(
"AliEmcalDownscaleFactors");
495 if(result)
return 1./result->GetVal();
501 Bool_t hasTriggerPatch = fTriggerPatches ?
CorrelateToTrigger(eta, phi, fTriggerPatches) : kFALSE;
502 Int_t supermoduleID = -1, sector = -1;
504 AliDebugStream(1) << GetName() <<
": Using weight " << weight <<
" for trigger " << triggerclass << std::endl;
506 fGeometry->SuperModuleNumberFromEtaPhi(eta, phi, supermoduleID);
507 fHistos->
FillTH1(Form(
"hClusterEnergy%s", triggerclass.Data()), energy, weight);
508 fHistos->
FillTH1(Form(
"hClusterET%s", triggerclass.Data()), transverseenergy, weight);
509 fHistos->
FillTH2(Form(
"hEtaEnergy%s", triggerclass.Data()), eta, energy, weight);
510 fHistos->
FillTH2(Form(
"hEtaET%s", triggerclass.Data()), eta, transverseenergy, weight);
511 if(supermoduleID >= 0){
512 fHistos->
FillTH2(Form(
"hClusterEnergySM%s", triggerclass.Data()), supermoduleID, energy, weight);
513 fHistos->
FillTH2(Form(
"hClusterETSM%s", triggerclass.Data()), supermoduleID, transverseenergy, weight);
514 fHistos->
FillTH2(Form(
"hEtaEnergySM%d%s", supermoduleID, triggerclass.Data()), eta, energy, weight);
515 fHistos->
FillTH2(Form(
"hEtaETSM%d%s", supermoduleID, triggerclass.Data()), eta, transverseenergy, weight);
516 if(supermoduleID < 12)
517 sector = 4 + int(supermoduleID/2);
519 sector = 13 + int((supermoduleID-12)/2);
520 fHistos->
FillTH2(Form(
"hEtaEnergySec%d%s", sector, triggerclass.Data()), eta, energy, weight);
521 fHistos->
FillTH2(Form(
"hEtaETSec%d%s", sector, triggerclass.Data()), eta, transverseenergy, weight);
524 fHistos->
FillTH1(Form(
"hClusterEnergyFired%s", triggerclass.Data()), energy, weight);
525 fHistos->
FillTH1(Form(
"hClusterETFired%s", triggerclass.Data()), energy, weight);
526 fHistos->
FillTH2(Form(
"hEtaEnergyFired%s", triggerclass.Data()), eta, energy, weight);
527 fHistos->
FillTH2(Form(
"hEtaETFired%s", triggerclass.Data()), eta, energy, weight);
528 if(supermoduleID >= 0){
529 fHistos->
FillTH2(Form(
"hClusterEnergyFiredSM%s", triggerclass.Data()), supermoduleID, energy, weight);
530 fHistos->
FillTH2(Form(
"hClusterETFiredSM%s", triggerclass.Data()), supermoduleID, transverseenergy, weight);
531 fHistos->
FillTH2(Form(
"hEtaEnergyFiredSM%d%s", supermoduleID, triggerclass.Data()), eta, energy,weight);
532 fHistos->
FillTH2(Form(
"hEtaETFiredSM%d%s", supermoduleID, triggerclass.Data()), eta, transverseenergy, weight);
533 fHistos->
FillTH2(Form(
"hEtaEnergyFiredSec%d%s", sector, triggerclass.Data()), eta, energy, weight);
534 fHistos->
FillTH2(Form(
"hEtaETFiredSec%d%s", sector, triggerclass.Data()), eta, transverseenergy, weight);
537 Double_t encuts[5] = {1., 2., 5., 10., 20.};
538 for(
int ien = 0; ien < 5; ien++){
539 if(energy > encuts[ien]){
540 fHistos->
FillTH2(Form(
"hEtaPhi%dG%s", static_cast<int>(encuts[ien]), triggerclass.Data()), eta, phi, weight);
542 fHistos->
FillTH2(Form(
"hEtaPhiFired%dG%s", static_cast<int>(encuts[ien]), triggerclass.Data()), eta, phi, weight);
561 fHistos->
FillTH1(Form(
"hEventCount%s", triggerclass.Data()), 1, weight);
562 fHistos->
FillTH1(Form(
"hEventCentrality%s", triggerclass.Data()), centrality, weight);
563 fHistos->
FillTH1(Form(
"hVertexZ%s", triggerclass.Data()), vertexz, weight);
574 Bool_t hasfound = kFALSE;
575 for(TIter patchIter = TIter(fTriggerPatches).Begin(); patchIter != TIter::End(); ++patchIter){
576 Double_t boundaries[4];
578 Double_t
etamin = TMath::Min(boundaries[0], boundaries[1]),
579 etamax = TMath::Max(boundaries[0], boundaries[1]),
580 phimin = TMath::Min(boundaries[2], boundaries[3]),
581 phimax = TMath::Max(boundaries[2], boundaries[3]);
582 if(etaclust > etamin && etaclust < etamax && phiclust >
phimin && phiclust < phimax){
599 foundtriggers.Clear();
600 if(!fTriggerPatches)
return;
611 for(TIter patchiter = TIter(fTriggerPatches).Begin(); patchiter != TIter::End(); ++patchiter){
624 if(
GetPatchEnergy(*patchiter) > threshold) foundtriggers.Add(*patchiter);
634 TString triggerstring =
"";
635 if(!fTriggerPatches)
return triggerstring;
636 Int_t nEJ1 = 0, nEJ2 = 0, nEG1 = 0, nEG2 = 0, nDJ1 = 0, nDJ2 = 0, nDG1 = 0, nDG2 = 0;
637 double minADC_J1 = 260.,
641 for(TIter patchIter = TIter(fTriggerPatches).Begin(); patchIter != TIter::End(); ++patchIter){
642 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(*patchIter);
643 if(!patch->IsOfflineSimple())
continue;
644 if(patch->IsJetHighSimple() && patch->GetADCOfflineAmp() > minADC_J1){
645 if(patch->IsDCalPHOS()) nDJ1++;
648 if(patch->IsJetLowSimple() && patch->GetADCOfflineAmp() > minADC_J2){
649 if(patch->IsDCalPHOS()) nDJ2++;
652 if(patch->IsGammaHighSimple() && patch->GetADCOfflineAmp() > minADC_G1){
653 if(patch->IsDCalPHOS()) nDG1++;
656 if(patch->IsGammaLowSimple() && patch->GetADCOfflineAmp() > minADC_G2){
657 if(patch->IsDCalPHOS()) nDG2++;
661 if(nEJ1) triggerstring +=
"EJ1";
663 if(triggerstring.Length()) triggerstring +=
",";
664 triggerstring +=
"EJ2";
667 if(triggerstring.Length()) triggerstring +=
",";
668 triggerstring +=
"EG1";
671 if(triggerstring.Length()) triggerstring +=
",";
672 triggerstring +=
"EG2";
675 if(triggerstring.Length()) triggerstring +=
",";
676 triggerstring +=
"DJ1";
679 if(triggerstring.Length()) triggerstring +=
",";
680 triggerstring +=
"DJ2";
683 if(triggerstring.Length()) triggerstring +=
",";
684 triggerstring +=
"DG1";
687 if(triggerstring.Length()) triggerstring +=
",";
688 triggerstring +=
"DG2";
690 return triggerstring;
694 AliEMCALTriggerPatchInfo *patch=
dynamic_cast<AliEMCALTriggerPatchInfo *
>(o);
695 boundaries[0] = patch->GetEtaMin();
696 boundaries[1] = patch->GetEtaMax();
697 boundaries[2] = patch->GetPhiMin();
698 boundaries[3] = patch->GetPhiMax();
702 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(o);
703 return patch->IsOfflineSimple();
707 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(o);
708 return patch->GetRowStart() >= 64;
712 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(o);
713 return patch->IsGammaLowSimple();
717 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(o);
718 if(!patch->IsOfflineSimple())
return false;
719 return patch->IsJetLowSimple();
724 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(o);
725 energy = patch->GetPatchE();
void GetPatchBoundaries(TObject *o, Double_t *boundaries) const
bool SelectSingleShowerPatch(TObject *o) const
Class creating a linear binning, used in the histogram manager.
Bool_t CorrelateToTrigger(Double_t etaclust, Double_t phiclust, TList *triggerpatches) const
TClonesArray * fTriggerPatches
! Container with trigger patches
AliEMCALGeometry * fGeometry
! EMCAL geometry
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
bool SelectJetPatch(TObject *o) const
Bool_t fRequestCentrality
Swich on request for centrality range.
static Bool_t IsDCAL(EmcalTriggerClass cls)
void FillEventHistograms(const TString &triggerclass, double centrality, double vertexz)
void AddStep(Double_t max, Double_t binwidth)
AliAnalysisUtils * fAnalysisUtil
Analysis utils for additional event selection / pileup rejection.
void FillClusterHistograms(const TString &triggerclass, double energy, double transversenergy, double eta, double phi, TList *triggerpatches)
AliEmcalTriggerOfflineSelection * fTriggerSelection
EMCAL offline trigger selection tool.
Double_t GetTriggerWeight(const TString &triggerclass) const
THistManager * fHistos
! Histogram handler
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
AliAnalysisTaskEmcalClustersRef()
THashList * GetListOfHistograms() const
Bool_t fInitialized
Check for initialized.
TString fClusterContainer
Name of the cluster container in the event.
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Bool_t fTriggerStringFromPatches
Build trigger string from trigger patches.
Helper class creating user defined custom binning.
double GetPatchEnergy(TObject *o) const
Double_t GetThresholdForTrigger(EmcalTriggerClass trgcls) const
TObjArray * fDownscaleFactors
! Downscalfactors for given run
AliOADBContainer * fDownscaleOADB
! Container with downscale factors for different triggers
virtual void RunChanged(Int_t runnumber)
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Bool_t IsOfflineSelected(EmcalTriggerClass trgcls, const TClonesArray *const triggerpatches) const
Int_t fCurrentRun
Current run number (for RunChange method)
void UserCreateOutputObjects()
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
AliCutValueRange< double > fCentralityRange
Selected centrality range.
void UserExec(Option_t *)
TString GetFiredTriggerClassesFromPatches(const TClonesArray *triggerpatches) const
AliCutValueRange< double > fVertexRange
Selected vertex range.
Container class for histograms for the high- charged particle analysis.
Int_t GetRunNumber(TString)
bool SelectDCALPatch(TObject *o) const
Bool_t fRequestAnalysisUtil
Switch on request for event selection using analysis utils.
virtual ~AliAnalysisTaskEmcalClustersRef()
TString fNameDownscaleOADB
Name of the downscale OADB container.
bool IsOfflineSimplePatch(TObject *o) const
static Bool_t IsSingleShower(EmcalTriggerClass cls)
void FindPatchesForTrigger(TString triggerclass, const TClonesArray *triggerpatches, TList &foundpatches) const
bool IsInRange(t value) const
void SetMinimum(Double_t min)