18 #include <TClonesArray.h>
21 #include <TParameter.h>
24 #include "AliAnalysisUtils.h"
25 #include "AliEMCALGeometry.h"
26 #include "AliEMCALTriggerPatchInfo.h"
27 #include "AliEMCALTriggerMapping.h"
28 #include "AliESDEvent.h"
29 #include "AliInputEventHandler.h"
31 #include "AliOADBContainer.h"
32 #include "AliVVertex.h"
38 namespace EMCalTriggerPtAnalysis {
40 AliAnalysisTaskEmcalTriggerBase::AliAnalysisTaskEmcalTriggerBase():
44 fTriggerStringFromPatches(kFALSE),
46 fVertexCut(-10., 10.),
47 fNameDownscaleOADB(
""),
50 fNameMaskedFastorOADB(),
53 fOnlineTriggerThresholds(),
54 fSelectNoiseEvents(false),
55 fRejectNoiseEvents(false)
65 fTriggerStringFromPatches(kFALSE),
67 fVertexCut(-10., 10.),
68 fNameDownscaleOADB(
""),
71 fNameMaskedFastorOADB(),
74 fOnlineTriggerThresholds(),
75 fSelectNoiseEvents(false),
76 fRejectNoiseEvents(false)
109 const AliVVertex *vtx = fInputEvent->GetPrimaryVertex();
111 if(vtx->GetNContributors() < 1)
return false;
112 if(fInputEvent->IsA() == AliESDEvent::Class() &&
fAliAnalysisUtils->IsFirstEventInChunk(fInputEvent))
return false;
122 AliDebugStream(1) << GetName() <<
": Reject MC outliers" << std::endl;
139 triggerstring = fInputEvent->GetFiredTriggerClasses();
141 UInt_t selectionstatus = fInputHandler->IsEventSelected();
142 Bool_t isMinBias = selectionstatus & AliVEvent::kINT7,
162 if(emcalTriggers[itrg])
167 if(emcalTriggers[itrg])
183 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EJ2excl");
187 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]))
fSelectedTriggers.push_back(
"EJ1excl");
191 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DJ2excl");
195 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]))
fSelectedTriggers.push_back(
"DJ1excl");
199 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EG2excl");
203 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2]))
fSelectedTriggers.push_back(
"EG1excl");
207 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DG2excl");
209 if(emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG1]){
211 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2]))
fSelectedTriggers.push_back(
"DG1excl");
225 fDownscaleOADB =
new AliOADBContainer(
"AliEmcalDownscaleFactors");
237 if(fInputEvent->GetRunNumber() >= 15344 && fInputEvent->GetRunNumber() <= 197388){
253 AliOADBContainer acceptanceCont;
255 TObjArray *acceptanceMaps =
dynamic_cast<TObjArray *
>(acceptanceCont.GetObject(fInputEvent->GetRunNumber()));
257 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"EG1")))){
258 map->SetDirectory(
nullptr);
261 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"EG2")))){
262 map->SetDirectory(
nullptr);
265 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"DG1")))){
266 map->SetDirectory(
nullptr);
269 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"DG2")))){
270 map->SetDirectory(
nullptr);
273 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"EJ1")))){
274 map->SetDirectory(
nullptr);
277 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"EJ2")))){
278 map->SetDirectory(
nullptr);
281 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"DJ1")))){
282 map->SetDirectory(
nullptr);
285 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"DJ2")))){
286 map->SetDirectory(
nullptr);
309 std::vector<TString> triggers = {
310 "MB",
"EMC7",
"DMC7",
311 "EJ1",
"EJ2",
"EG1",
"EG2",
"DJ1",
"DJ2",
"DG1",
"DG2",
312 "EMC7excl",
"DMC7excl",
"EG2excl",
"EJ2excl",
"DG2excl",
"DJ2excl",
313 "EJ1excl",
"DJ1excl",
"EG1excl",
"DG1excl"
319 AliDebugStream(1) <<
"Using V1 online trigger selector" << std::endl;
321 double onlinethresholds[5] = {140., 89., 260., 127., 0.};
324 AliEMCALTriggerPatchInfo *patch =
static_cast<AliEMCALTriggerPatchInfo *
>(p);
341 if(result)
return 1./result->GetVal();
349 threshpar->SetVal(threshold);
359 threshold = val->GetVal();
365 "DG1",
"DG2",
"DJ1",
"DJ2"};
371 "DG1",
"DG2",
"DJ1",
"DJ2"};
372 bool isInitialized =
true;
375 isInitialized =
false;
379 return isInitialized;
388 Int_t nEJ1 = 0, nEJ2 = 0, nEG1 = 0, nEG2 = 0, nDJ1 = 0, nDJ2 = 0, nDG1 = 0, nDG2 = 0;
389 for(
auto patchIter : *triggerpatches){
390 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(patchIter);
391 if(!patch->IsRecalc())
continue;
392 if(patch->IsEMCal()){
393 if(patch->IsGammaLowRecalc() &&
SelectFiredPatch(
"EG1", patch->GetADCAmp())) nEG1++;
394 if(patch->IsGammaLowRecalc() &&
SelectFiredPatch(
"EG2", patch->GetADCAmp())) nEG2++;
395 if(patch->IsJetLowRecalc() &&
SelectFiredPatch(
"EJ1", patch->GetADCAmp())) nEJ1++;
396 if(patch->IsJetLowRecalc() &&
SelectFiredPatch(
"EJ2", patch->GetADCAmp())) nEJ2++;
398 if(patch->IsGammaLowRecalc() &&
SelectFiredPatch(
"DG1", patch->GetADCAmp())) nDG1++;
399 if(patch->IsGammaLowRecalc() &&
SelectFiredPatch(
"DG2", patch->GetADCAmp())) nDG2++;
400 if(patch->IsJetLowRecalc() &&
SelectFiredPatch(
"DJ1", patch->GetADCAmp())) nDJ1++;
401 if(patch->IsJetLowRecalc() &&
SelectFiredPatch(
"DJ2", patch->GetADCAmp())) nDJ2++;
404 if(nEJ1) triggerstring +=
"EJ1";
406 if(triggerstring.Length()) triggerstring +=
",";
407 triggerstring +=
"EJ2";
410 if(triggerstring.Length()) triggerstring +=
",";
411 triggerstring +=
"EG1";
414 if(triggerstring.Length()) triggerstring +=
",";
415 triggerstring +=
"EG2";
418 if(triggerstring.Length()) triggerstring +=
",";
419 triggerstring +=
"DJ2";
422 if(triggerstring.Length()) triggerstring +=
",";
423 triggerstring +=
"DJ2";
426 if(triggerstring.Length()) triggerstring +=
",";
427 triggerstring +=
"DG1";
430 if(triggerstring.Length()) triggerstring +=
",";
431 triggerstring +=
"DG2";
433 return triggerstring;
EMCAL L1 Jet trigger, low threshold.
std::vector< TString > fSelectedTriggers
! Triggers selected for given 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.
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()
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.
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 SelectOnlineTrigger(AliEmcalTriggerOfflineSelection::EmcalTriggerClass trigger) const
Base class for analyses using EMCAL triggers.
void SetAcceptanceMap(EmcalTriggerClass trgcls, const TH2 *accmap)
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)
DCAL L1 Gamma trigger, high threshold.
virtual ~AliAnalysisTaskEmcalTriggerBase()
EMCAL L1 Gamma trigger, low threshold.
TString fNameAcceptanceOADB
Name of the OADB container with the trigger acceptance.
AliOADBContainer * fMaskedFastorOADB
! Container with masked fastors
bool OnlineThresholdsInitialized() const
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
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
TClonesArray * fTriggerPatchInfo
!trigger patch info array
void SetNeedEmcalGeom(Bool_t n)
virtual bool IsEventSelected()
Container class for histograms for the high- charged particle analysis.
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
virtual void CreateUserObjects()=0