19 #include <TClonesArray.h>
22 #include <TParameter.h>
25 #include "AliAnalysisUtils.h"
26 #include "AliAODEvent.h"
27 #include "AliAODInputHandler.h"
29 #include "AliEMCALGeometry.h"
30 #include "AliEMCALTriggerPatchInfo.h"
31 #include "AliEMCALTriggerMapping.h"
32 #include "AliESDEvent.h"
33 #include "AliInputEventHandler.h"
35 #include "AliOADBContainer.h"
36 #include "AliVVertex.h"
42 namespace EMCalTriggerPtAnalysis {
44 AliAnalysisTaskEmcalTriggerBase::AliAnalysisTaskEmcalTriggerBase():
47 fUseTriggerBits(kTRUE),
48 fRequireBunchCrossing(kTRUE),
50 fTriggerStringFromPatches(kFALSE),
52 fNameClusterContainer(
""),
53 fRequireAnalysisUtils(kTRUE),
54 fVertexCut(-10., 10.),
55 fNameDownscaleOADB(
""),
58 fNameMaskedFastorOADB(),
61 fOnlineTriggerThresholds(),
62 fNameAcceptanceOADB(),
63 fSelectNoiseEvents(false),
64 fRejectNoiseEvents(false),
65 fEnableDCALTriggers(true),
66 fExclusiveMinBias(false)
76 fUseTriggerBits(kTRUE),
77 fRequireBunchCrossing(kTRUE),
79 fTriggerStringFromPatches(kFALSE),
81 fNameClusterContainer(
""),
82 fRequireAnalysisUtils(kTRUE),
83 fVertexCut(-10., 10.),
84 fNameDownscaleOADB(
""),
87 fNameMaskedFastorOADB(),
90 fOnlineTriggerThresholds(),
91 fNameAcceptanceOADB(),
92 fSelectNoiseEvents(false),
93 fRejectNoiseEvents(false),
94 fEnableDCALTriggers(true),
95 fExclusiveMinBias(false)
134 const AliVVertex *vtx = fInputEvent->GetPrimaryVertex();
136 if(vtx->GetNContributors() < 1)
return false;
139 if(fInputEvent->IsA() == AliESDEvent::Class() &&
fAliAnalysisUtils->IsFirstEventInChunk(fInputEvent))
return false;
150 AliDebugStream(1) << GetName() <<
": Reject MC outliers" << std::endl;
168 triggerstring = fInputEvent->GetFiredTriggerClasses();
172 UInt_t selectionstatus = fInputHandler->IsEventSelected();
173 Bool_t isMinBias = selectionstatus & AliVEvent::kINT7,
194 const std::array<ULong_t, AliEmcalTriggerOfflineSelection::kTrgn> kSelectTriggerBits = {
195 AliVEvent::kEMC7, AliVEvent::kEMCEGA, AliVEvent::kEMCEGA, AliVEvent::kEMCEJE, AliVEvent::kEMCEJE,
196 AliVEvent::kEMC7, AliVEvent::kEMCEGA, AliVEvent::kEMCEGA, AliVEvent::kEMCEJE, AliVEvent::kEMCEJE,
199 emcalTriggers[iclass] &=
bool(selectionstatus & kSelectTriggerBits[iclass]);
204 const std::array<TString, AliEmcalTriggerOfflineSelection::kTrgn> kSelectTriggerStrings = {
205 "CEMC7",
"EG1",
"EG2",
"EJ1",
"EJ2",
"CDMC7",
"DG1",
"DG2",
"DJ1",
"DJ2"
207 if(triggerstring.Contains(
"EMC")) AliDebugStream(1) << GetName() <<
": Trigger string " << triggerstring << std::endl;
209 emcalTriggers[iclass] &= triggerstring.Contains(kSelectTriggerStrings[iclass]);
210 if(emcalTriggers[iclass])
211 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kSelectTriggerStrings[iclass] << std::endl;
218 if(emcalTriggers[itrg])
223 if(emcalTriggers[itrg])
244 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EJ2excl");
248 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]))
fSelectedTriggers.push_back(
"EJ1excl");
252 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EG2excl");
256 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2]))
fSelectedTriggers.push_back(
"EG1excl");
268 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DJ2excl");
272 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]))
fSelectedTriggers.push_back(
"DJ1excl");
276 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DG2excl");
280 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2]))
fSelectedTriggers.push_back(
"DG1excl");
295 fDownscaleOADB =
new AliOADBContainer(
"AliEmcalDownscaleFactors");
312 if(fInputEvent->GetRunNumber() >= 15344 && fInputEvent->GetRunNumber() <= 197388){
328 AliDebugStream(1) << GetName() <<
": Loading acceptance map from OADB file " <<
fNameAcceptanceOADB << std::endl;
329 AliOADBContainer acceptanceCont(
"AliEmcalTriggerAcceptance");
331 TObjArray *acceptanceMaps =
dynamic_cast<TObjArray *
>(acceptanceCont.GetObject(fInputEvent->GetRunNumber()));
333 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"EG1")))){
334 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger EG1" << std::endl;
335 map->SetDirectory(
nullptr);
338 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"EG2")))){
339 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger EG2" << std::endl;
340 map->SetDirectory(
nullptr);
343 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"DG1")))){
344 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger DG1" << std::endl;
345 map->SetDirectory(
nullptr);
348 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"DG2")))){
349 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger DG2" << std::endl;
350 map->SetDirectory(
nullptr);
353 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"EJ1")))){
354 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger EJ1" << std::endl;
355 map->SetDirectory(
nullptr);
358 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"EJ2")))){
359 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger EJ2" << std::endl;
360 map->SetDirectory(
nullptr);
363 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"DJ1")))){
364 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger DJ1" << std::endl;
365 map->SetDirectory(
nullptr);
368 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"DJ2")))){
369 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger DJ2" << std::endl;
370 map->SetDirectory(
nullptr);
396 std::vector<TString> triggers = {
"MB"};
397 const std::array<TString, 10> emcaltriggers = {
"EMC7",
"EJ1",
"EJ2",
"EG1",
"EG2",
"EMC7excl",
"EG2excl",
"EJ2excl",
"EJ1excl",
"EG1excl"},
398 dcaltriggers = {
"DMC7",
"DJ1",
"DJ2",
"DG1",
"DG2",
"DMC7excl",
"DG2excl",
"DJ2excl",
"DJ1excl",
"DG1excl"};
400 for(
const auto &t : emcaltriggers) triggers.push_back(t);
403 for(
const auto &t : dcaltriggers) triggers.push_back(t);
409 AliDebugStream(1) <<
"Using V1 online trigger selector" << std::endl;
413 AliEMCALTriggerPatchInfo *patch =
static_cast<AliEMCALTriggerPatchInfo *
>(p);
430 if(result)
return 1./result->GetVal();
438 threshpar->SetVal(threshold);
448 threshold = val->GetVal();
454 "DG1",
"DG2",
"DJ1",
"DJ2"};
460 "DG1",
"DG2",
"DJ1",
"DJ2"};
461 bool isInitialized =
true;
464 isInitialized =
false;
468 return isInitialized;
477 Int_t nEJ1 = 0, nEJ2 = 0, nEG1 = 0, nEG2 = 0, nDJ1 = 0, nDJ2 = 0, nDG1 = 0, nDG2 = 0;
478 for(
auto patchIter : *triggerpatches){
479 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(patchIter);
480 if(!patch->IsRecalc())
continue;
481 if(patch->IsEMCal()){
482 if(patch->IsGammaLowRecalc() &&
SelectFiredPatch(
"EG1", patch->GetADCAmp())) nEG1++;
483 if(patch->IsGammaLowRecalc() &&
SelectFiredPatch(
"EG2", patch->GetADCAmp())) nEG2++;
484 if(patch->IsJetLowRecalc() &&
SelectFiredPatch(
"EJ1", patch->GetADCAmp())) nEJ1++;
485 if(patch->IsJetLowRecalc() &&
SelectFiredPatch(
"EJ2", patch->GetADCAmp())) nEJ2++;
487 if(patch->IsGammaLowRecalc() &&
SelectFiredPatch(
"DG1", patch->GetADCAmp())) nDG1++;
488 if(patch->IsGammaLowRecalc() &&
SelectFiredPatch(
"DG2", patch->GetADCAmp())) nDG2++;
489 if(patch->IsJetLowRecalc() &&
SelectFiredPatch(
"DJ1", patch->GetADCAmp())) nDJ1++;
490 if(patch->IsJetLowRecalc() &&
SelectFiredPatch(
"DJ2", patch->GetADCAmp())) nDJ2++;
493 if(nEJ1) triggerstring +=
"EJ1";
495 if(triggerstring.Length()) triggerstring +=
",";
496 triggerstring +=
"EJ2";
499 if(triggerstring.Length()) triggerstring +=
",";
500 triggerstring +=
"EG1";
503 if(triggerstring.Length()) triggerstring +=
",";
504 triggerstring +=
"EG2";
507 if(triggerstring.Length()) triggerstring +=
",";
508 triggerstring +=
"DJ2";
511 if(triggerstring.Length()) triggerstring +=
",";
512 triggerstring +=
"DJ2";
515 if(triggerstring.Length()) triggerstring +=
",";
516 triggerstring +=
"DG1";
519 if(triggerstring.Length()) triggerstring +=
",";
520 triggerstring +=
"DG2";
522 return triggerstring;
EMCAL L1 Jet trigger, low threshold.
std::vector< TString > fSelectedTriggers
! Triggers selected for given event
Bool_t IsOfflineSelected(EmcalTriggerClass trgcls, const AliVEvent *const data) const
Select event as triggered event.
Bool_t fIsPythia
trigger, if it is a PYTHIA production
std::vector< TString > GetSupportedTriggers()
Int_t GetOnlineTriggerThresholdByIndex(AliEmcalTriggerOfflineSelection::EmcalTriggerClass trg) const
virtual void CreateUserHistos()=0
Bool_t fRejectNoiseEvents
Reject events triggered by noisy fastors.
THistManager * fHistos
Task Histogram container.
Bool_t fExclusiveMinBias
Only look at Min. Bias trigger.
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
Double_t GetTriggerWeight(const TString &triggerclass) const
TString GetFiredTriggerClassesFromPatches(const TClonesArray *triggerpatches) const
DCAL L1 Gamma trigger, low threshold.
DCAL L1 Jet trigger, high threshold.
AliAnalysisTaskEmcalTriggerBase()
Dummy I/O constructor.
AliEmcalTriggerOfflineSelection * fTriggerSelection
Offline trigger selection.
Number of supported triggers.
virtual void UserCreateOutputObjects()
EMCAL L1 Gamma trigger, high threshold.
TObjArray fOnlineTriggerThresholds
Trigger thresholds applied at online level.
Bool_t fEnableDCALTriggers
Enable / Disable event selection for DCAL trigger classes.
DCAL L1 Jet trigger, low threshold.
TObjArray * fDownscaleFactors
! Downscalfactors for given run
virtual void RunChanged(Int_t runnuber)
void SetCaloTriggerPatchInfoName(const char *n)
TString fNameMaskedFastorOADB
Name of the masked fastor OADB container.
EMCAL L1 Jet trigger, high threshold.
Bool_t fRequireAnalysisUtils
Switch whether to require event selection in AliAnalysisUtils.
bool SelectOnlineTrigger(AliEmcalTriggerOfflineSelection::EmcalTriggerClass trigger) const
Base class for analyses using EMCAL triggers.
Bool_t fRequireBunchCrossing
Require bunch-bunch events (tag -B- in trigger string)
void SetAcceptanceMap(EmcalTriggerClass trgcls, const TH2 *accmap)
Set acceptance map for a given trigger class.
TString fNameClusterContainer
Name of the cluster container in the event.
THashList * GetListOfHistograms() const
EmcalTriggerClass
Definition of the various supported trigger types.
Int_t GetOnlineTriggerThresholdByName(const TString &name) const
AliAnalysisUtils * fAliAnalysisUtils
!vertex selection (optional)
TString fNameDownscaleOADB
Name of the downscale OADB container.
static Bool_t IsSingleShower(EmcalTriggerClass cls)
Checks if the trigger class is a single shower patch trigger class.
void SetClusterContainer(const TString &clustercont)
DCAL L1 Gamma trigger, high threshold.
virtual ~AliAnalysisTaskEmcalTriggerBase()
Destructor.
EMCAL L1 Gamma trigger, low threshold.
TString fNameAcceptanceOADB
Name of the OADB container with the trigger acceptance.
const TString & GetNameClusterContainer() const
Get the name of the cluster container.
AliOADBContainer * fMaskedFastorOADB
! Container with masked fastors
bool OnlineThresholdsInitialized() const
Bool_t fSelectNoiseEvents
Explicitly select events triggered only by noisy fastors.
Bool_t fUseTriggerBits
Switch whether using trigger bits (relies on physics selection)
Bool_t fTriggerStringFromPatches
Do rebuild the trigger string from trigger patches.
AliEmcalList * fOutput
!output list
virtual bool IsUserEventSelected()
std::vector< int > fMaskedFastors
List of masked fastors.
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)
virtual bool IsEventSelected()
Container class for histograms.
void UserCreateOutputObjects()
virtual void UserFillHistosBeforeEventSelection()
AliCutValueRange< double > fVertexCut
Cut on the z-position of the primary vertex.
Bool_t SelectFiredPatch(const TString &triggerclass, Int_t adc) const
virtual void UserFillHistosAfterEventSelection()
bool IsInRange(t value) const
static TString ClusterContainerNameFactory(Bool_t isAOD)
Get name of the default cluster container.
virtual void CreateUserObjects()=0