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 fNameAcceptanceOADB(),
55 fSelectNoiseEvents(false),
56 fRejectNoiseEvents(false)
67 fTriggerStringFromPatches(kFALSE),
69 fVertexCut(-10., 10.),
70 fNameDownscaleOADB(
""),
73 fNameMaskedFastorOADB(),
76 fOnlineTriggerThresholds(),
77 fNameAcceptanceOADB(),
78 fSelectNoiseEvents(false),
79 fRejectNoiseEvents(false)
113 const AliVVertex *vtx = fInputEvent->GetPrimaryVertex();
115 if(vtx->GetNContributors() < 1)
return false;
116 if(fInputEvent->IsA() == AliESDEvent::Class() &&
fAliAnalysisUtils->IsFirstEventInChunk(fInputEvent))
return false;
126 AliDebugStream(1) << GetName() <<
": Reject MC outliers" << std::endl;
144 triggerstring = fInputEvent->GetFiredTriggerClasses();
146 UInt_t selectionstatus = fInputHandler->IsEventSelected();
147 Bool_t isMinBias = selectionstatus & AliVEvent::kINT7,
169 if(emcalTriggers[itrg])
174 if(emcalTriggers[itrg])
199 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EJ2excl");
203 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]))
fSelectedTriggers.push_back(
"EJ1excl");
207 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DJ2excl");
211 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]))
fSelectedTriggers.push_back(
"DJ1excl");
215 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EG2excl");
219 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2]))
fSelectedTriggers.push_back(
"EG1excl");
223 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DG2excl");
227 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2]))
fSelectedTriggers.push_back(
"DG1excl");
241 fDownscaleOADB =
new AliOADBContainer(
"AliEmcalDownscaleFactors");
253 if(fInputEvent->GetRunNumber() >= 15344 && fInputEvent->GetRunNumber() <= 197388){
269 AliDebugStream(1) << GetName() <<
": Loading acceptance map from OADB file " <<
fNameAcceptanceOADB << std::endl;
270 AliOADBContainer acceptanceCont(
"AliEmcalTriggerAcceptance");
272 TObjArray *acceptanceMaps =
dynamic_cast<TObjArray *
>(acceptanceCont.GetObject(fInputEvent->GetRunNumber()));
274 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"EG1")))){
275 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger EG1" << std::endl;
276 map->SetDirectory(
nullptr);
279 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"EG2")))){
280 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger EG2" << std::endl;
281 map->SetDirectory(
nullptr);
284 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"DG1")))){
285 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger DG1" << std::endl;
286 map->SetDirectory(
nullptr);
289 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"DG2")))){
290 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger DG2" << std::endl;
291 map->SetDirectory(
nullptr);
294 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"EJ1")))){
295 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger EJ1" << std::endl;
296 map->SetDirectory(
nullptr);
299 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"EJ2")))){
300 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger EJ2" << std::endl;
301 map->SetDirectory(
nullptr);
304 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"DJ1")))){
305 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger DJ1" << std::endl;
306 map->SetDirectory(
nullptr);
309 if((map = dynamic_cast<TH2 *>(acceptanceMaps->FindObject(
"DJ2")))){
310 AliDebugStream(1) << GetName() <<
": Found acceptance map for trigger DJ2" << std::endl;
311 map->SetDirectory(
nullptr);
334 std::vector<TString> triggers = {
335 "MB",
"EMC7",
"DMC7",
336 "EJ1",
"EJ2",
"EG1",
"EG2",
"DJ1",
"DJ2",
"DG1",
"DG2",
337 "EMC7excl",
"DMC7excl",
"EG2excl",
"EJ2excl",
"DG2excl",
"DJ2excl",
338 "EJ1excl",
"DJ1excl",
"EG1excl",
"DG1excl"
344 AliDebugStream(1) <<
"Using V1 online trigger selector" << std::endl;
346 double onlinethresholds[5] = {140., 89., 260., 127., 0.};
349 AliEMCALTriggerPatchInfo *patch =
static_cast<AliEMCALTriggerPatchInfo *
>(p);
366 if(result)
return 1./result->GetVal();
374 threshpar->SetVal(threshold);
384 threshold = val->GetVal();
390 "DG1",
"DG2",
"DJ1",
"DJ2"};
396 "DG1",
"DG2",
"DJ1",
"DJ2"};
397 bool isInitialized =
true;
400 isInitialized =
false;
404 return isInitialized;
413 Int_t nEJ1 = 0, nEJ2 = 0, nEG1 = 0, nEG2 = 0, nDJ1 = 0, nDJ2 = 0, nDG1 = 0, nDG2 = 0;
414 for(
auto patchIter : *triggerpatches){
415 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(patchIter);
416 if(!patch->IsRecalc())
continue;
417 if(patch->IsEMCal()){
418 if(patch->IsGammaLowRecalc() &&
SelectFiredPatch(
"EG1", patch->GetADCAmp())) nEG1++;
419 if(patch->IsGammaLowRecalc() &&
SelectFiredPatch(
"EG2", patch->GetADCAmp())) nEG2++;
420 if(patch->IsJetLowRecalc() &&
SelectFiredPatch(
"EJ1", patch->GetADCAmp())) nEJ1++;
421 if(patch->IsJetLowRecalc() &&
SelectFiredPatch(
"EJ2", patch->GetADCAmp())) nEJ2++;
423 if(patch->IsGammaLowRecalc() &&
SelectFiredPatch(
"DG1", patch->GetADCAmp())) nDG1++;
424 if(patch->IsGammaLowRecalc() &&
SelectFiredPatch(
"DG2", patch->GetADCAmp())) nDG2++;
425 if(patch->IsJetLowRecalc() &&
SelectFiredPatch(
"DJ1", patch->GetADCAmp())) nDJ1++;
426 if(patch->IsJetLowRecalc() &&
SelectFiredPatch(
"DJ2", patch->GetADCAmp())) nDJ2++;
429 if(nEJ1) triggerstring +=
"EJ1";
431 if(triggerstring.Length()) triggerstring +=
",";
432 triggerstring +=
"EJ2";
435 if(triggerstring.Length()) triggerstring +=
",";
436 triggerstring +=
"EG1";
439 if(triggerstring.Length()) triggerstring +=
",";
440 triggerstring +=
"EG2";
443 if(triggerstring.Length()) triggerstring +=
",";
444 triggerstring +=
"DJ2";
447 if(triggerstring.Length()) triggerstring +=
",";
448 triggerstring +=
"DJ2";
451 if(triggerstring.Length()) triggerstring +=
",";
452 triggerstring +=
"DG1";
455 if(triggerstring.Length()) triggerstring +=
",";
456 triggerstring +=
"DG2";
458 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
void SetMakeGeneralHistograms(Bool_t g)
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