23 #include <TClonesArray.h> 26 #include <TObjArray.h> 27 #include <TObjString.h> 28 #include <TParameter.h> 31 #include "AliAnalysisUtils.h" 32 #include "AliAODEvent.h" 33 #include "AliAODInputHandler.h" 36 #include "AliEMCALGeometry.h" 37 #include "AliEMCALTriggerPatchInfo.h" 38 #include "AliEMCALTriggerMapping.h" 41 #include "AliESDEvent.h" 42 #include "AliInputEventHandler.h" 44 #include "AliOADBContainer.h" 45 #include "AliVVertex.h" 53 AliAnalysisTaskEmcalTriggerBase::AliAnalysisTaskEmcalTriggerBase():
56 fUseTriggerBits(kTRUE),
57 fRequireBunchCrossing(kTRUE),
58 fUseDownscaleCorrectionFormOCDB(kFALSE),
61 fNameClusterContainer(
""),
62 fRequireAnalysisUtils(kTRUE),
64 fApplyVertexCuts(true),
65 fVertexCut(-10., 10.),
66 fNameDownscaleOADB(
""),
69 fNameTriggerSelectionContainer(
"EmcalTriggerDecision"),
70 fEnableDCALTriggers(true),
71 fEnableV0Triggers(true),
72 fEnableT0Triggers(false),
73 fEnableNoINTTriggers(false),
74 fEnableCentralityTriggers(false),
75 fExclusiveMinBias(false),
76 fUseTriggerSelectionContainer(false)
131 std::vector<std::string> binlabels = {
"MB"};
133 const std::array<const std::string, 5> vzlabels = {{
"EMC7",
"EG1",
"EG2",
"EJ1",
"EJ2"}};
134 for(
const auto & vlab : vzlabels) binlabels.emplace_back(vlab);
136 const std::array<const std::string, 5> dclabels = {{
"DMC7",
"DG1",
"DG2",
"DJ1",
"DJ2"}};
137 for(
const auto & dlab : dclabels) binlabels.emplace_back(dlab);
141 binlabels.emplace_back(
"MBT0");
142 const std::array<const std::string, 5> t0labels = {{
"EMC8",
"EMC8EG1",
"EMC8EG2",
"EMC8EJ1",
"EMC8EJ2"}};
143 for(
const auto & tlab : t0labels) binlabels.emplace_back(tlab);
145 const std::array<const std::string, 5> dtclabels = {{
"DMC8",
"DMC8DG1",
"DMC8DG2",
"DMC8DJ1",
"DMC8DJ2"}};
146 for(
const auto & dtlab : dtclabels) binlabels.emplace_back(dtlab);
149 fHistos->
CreateTH2(
"hTriggerCorrelation",
"Correlation selected trigger classes", binlabels.size(), -0.5, binlabels.size() - 0.5, binlabels.size(), -0.5, binlabels.size() - 0.5);
151 for(decltype(binlabels.size()) ib = 0; ib < binlabels.size(); ib++){
152 correlationHist->GetXaxis()->SetBinLabel(ib+1, binlabels[ib].data());
153 correlationHist->GetYaxis()->SetBinLabel(ib+1, binlabels[ib].data());
169 AliDebugStream(1) <<
"Failed trigger selection" << std::endl;
176 const AliVVertex *vtx =
fUseSPDVertex ? fInputEvent->GetPrimaryVertexSPD() : fInputEvent->GetPrimaryVertex();
178 if(vtx->GetNContributors() < 1) {
179 AliDebugStream(1) <<
"Failed Vertex Selection" << std::endl;
183 AliDebugStream(1) <<
"Failed vertex-z cut" << std::endl;
189 AliDebugStream(1) <<
"Checking cuts in AliAnalysisUtils" << std::endl;
190 if(fInputEvent->IsA() == AliESDEvent::Class() &&
fAliAnalysisUtils->IsFirstEventInChunk(fInputEvent))
return false;
196 AliDebugStream(1) <<
"Failed user extra cuts" << std::endl;
203 AliDebugStream(1) << GetName() <<
": Reject MC outliers" << std::endl;
211 for(
int itrg = 0; itrg < corrhist->GetXaxis()->GetNbins(); itrg++){
212 const char *xlabel = corrhist->GetXaxis()->GetBinLabel(itrg+1);
215 for(
int jtrg = 0; jtrg < corrhist->GetYaxis()->GetNbins(); jtrg++){
216 const char *ylabel = corrhist->GetYaxis()->GetBinLabel(jtrg+1);
218 if(hasTriggerB)
fHistos->
FillTH2(
"hTriggerCorrelation", xlabel, ylabel);
224 AliDebugStream(1) <<
"Event is selected" << std::endl;
230 AliDebugStream(1) <<
"Entering trigger selection\n";
234 UInt_t selectionstatus = fInputHandler->IsEventSelected();
235 Bool_t isMinBias = selectionstatus & AliVEvent::kINT7,
236 isMinBiasT0 = selectionstatus & AliVEvent::kINT8,
237 isCENT = selectionstatus & AliVEvent::kCentral,
238 isSemiCENT = selectionstatus & AliVEvent::kSemiCentral,
244 AliDebugStream(1) <<
"Min bias mode\n";
260 AliErrorStream() <<
"Trigger selection container requested but not found - not possible to select EMCAL triggers" << std::endl;
265 AliDebugStream(1) <<
"Found triggers " << fInputEvent->GetFiredTriggerClasses() << std::endl;
270 const std::array<std::string, AliEmcalTriggerOfflineSelection::kTrgn> kEmcalSelectTriggerStrings = {
271 "=CEMC7|CEMC8|C0EMC",
"EG1|EGA",
"EG2",
"EJ1|EJE",
"EJ2",
"=CDMC7|CDMC8|C0DMC",
"DG1",
"DG2",
"DJ1",
"DJ2" 276 if(
fRequireBunchCrossing && ! (fInputEvent->GetFiredTriggerClasses().Contains(
"-B-") || fInputEvent->GetFiredTriggerClasses().Contains(
"-S-")))
return;
283 AliDebugStream(1) <<
"Require trigger bits" << std::endl;
284 const std::array<ULong_t, AliEmcalTriggerOfflineSelection::kTrgn> kSelectTriggerBits = {
285 AliVEvent::kEMC7|AliVEvent::kEMC8, AliVEvent::kEMCEGA, AliVEvent::kEMCEGA, AliVEvent::kEMCEJE, AliVEvent::kEMCEJE,
286 AliVEvent::kEMC7|AliVEvent::kEMC8, AliVEvent::kEMCEGA, AliVEvent::kEMCEGA, AliVEvent::kEMCEJE, AliVEvent::kEMCEJE
289 if(!(selectionstatus & kSelectTriggerBits[iclass])) {
290 emcNoIntTriggers[iclass] = emc8Triggers[iclass] = emcalTriggers[iclass] =
false;
295 if(fInputEvent->GetFiredTriggerClasses().Contains(
"EMC") || fInputEvent->GetFiredTriggerClasses().Contains(
"DMC")){
299 std::map<int, std::array<bool, 3>> matchedTriggers;
300 for(
auto t : triggers) {
301 const auto &triggerclass = t.Triggerclass();
302 if((triggerclass.find(
"EMC") != std::string::npos) || (triggerclass.find(
"DMC") != std::string::npos))
303 AliDebugStream(1) << GetName() <<
": Trigger string " << t.ExpandClassName() << std::endl;
305 bool isT0trigger = (triggerclass.find(
"EMC8") != std::string::npos) || (triggerclass.find(
"DMC8") != std::string::npos),
306 isVZEROtrigger = (triggerclass.find(
"EMC7") != std::string::npos) || (triggerclass.find(
"DMC7") != std::string::npos);
308 AliDebugStream(1) <<
"Next trigger: " << kEmcalSelectTriggerStrings[iclass] << std::endl;
311 if(emcalSelectionStatus) {
312 auto entry = matchedTriggers.find(iclass);
313 if(entry == matchedTriggers.end()) {
314 std::array<bool, 3> interactions = {{isVZEROtrigger, isT0trigger, !(isVZEROtrigger || isT0trigger)}};
315 matchedTriggers.insert(std::pair<
int, std::array<bool, 3>>(iclass, interactions));
317 auto &interactions = entry->second;
318 if(isVZEROtrigger) interactions[0] =
true;
319 if(isT0trigger) interactions[1] =
true;
320 if(!(isVZEROtrigger || isT0trigger)) interactions[2] =
true;
327 auto entry = matchedTriggers.find(iclass);
328 if(entry != matchedTriggers.end()){
330 const auto &interactions = entry->second;
331 emcalTriggers[iclass] &= interactions[0];
332 emc8Triggers[iclass] &= interactions[1];
333 emcNoIntTriggers[iclass] &= interactions[2];
336 emcalTriggers[iclass] =
false;
337 emc8Triggers[iclass] =
false;
338 emcNoIntTriggers[iclass] =
false;
341 if(emcalTriggers[iclass])
342 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (INT7 suite)" << std::endl;
343 if(emc8Triggers[iclass])
344 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (INT8 suite)" << std::endl;
345 if(emcNoIntTriggers[iclass])
346 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (No INT coincidence)" << std::endl;
351 bool isT0trigger = selectionstatus & AliVEvent::kINT7, isVZEROtrigger = selectionstatus & AliVEvent::kINT8;
356 emc8Triggers[iclass] &= emcalSelectionStatus;
359 emcalTriggers[iclass] &= emcalSelectionStatus;
361 if(!(isT0trigger || isVZEROtrigger)){
363 emcNoIntTriggers[iclass] &= emcalSelectionStatus;
365 if(emcalTriggers[iclass])
366 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (INT7 suite)" << std::endl;
367 if(emc8Triggers[iclass])
368 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (INT8 suite)" << std::endl;
369 if(emcNoIntTriggers[iclass])
370 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (No INT coincidence)" << std::endl;
390 AliDebugStream(1) <<
"Event selected as EMC7" << std::endl;
395 AliDebugStream(1) <<
"Event selected as EJ2" << std::endl;
397 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EJ2excl");
400 AliDebugStream(1) <<
"Event selected as EJ1" << std::endl;
402 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]))
fSelectedTriggers.push_back(
"EJ1excl");
405 AliDebugStream(1) <<
"Event selected as EG2" << std::endl;
407 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EG2excl");
410 AliDebugStream(1) <<
"Event selected as EG1" << std::endl;
412 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2]))
fSelectedTriggers.push_back(
"EG1excl");
419 AliDebugStream(1) <<
"Event selected as DMC7" << std::endl;
424 AliDebugStream(1) <<
"Event selected as DJ2" << std::endl;
426 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DJ2excl");
429 AliDebugStream(1) <<
"Event selected as DJ1" << std::endl;
431 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]))
fSelectedTriggers.push_back(
"DJ1excl");
434 AliDebugStream(1) <<
"Event selected as DG2" << std::endl;
436 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DG2excl");
439 AliDebugStream(1) <<
"Event selected as DG1" << std::endl;
441 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2]))
fSelectedTriggers.push_back(
"DG1excl");
450 AliDebugStream(1) <<
"Event selected as EMC8" << std::endl;
455 AliDebugStream(1) <<
"Event selected as EJ2 (EMC8)" << std::endl;
457 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EMC8EJ2excl");
460 AliDebugStream(1) <<
"Event selected as EJ1 (EMC8)" << std::endl;
462 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]))
fSelectedTriggers.push_back(
"EMC8EJ1excl");
465 AliDebugStream(1) <<
"Event selected as EG2 (EMC8)" << std::endl;
467 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EMC8EG2excl");
470 AliDebugStream(1) <<
"Event selected as EG1 (EMC8)" << std::endl;
472 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEG2]))
fSelectedTriggers.push_back(
"EMC8EG1excl");
479 AliDebugStream(1) <<
"Event selected as DMC8" << std::endl;
484 AliDebugStream(1) <<
"Event selected as DJ2 (DMC8)" << std::endl;
486 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DMC8DJ2excl");
489 AliDebugStream(1) <<
"Event selected as DJ1 (DMC8)" << std::endl;
491 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]))
fSelectedTriggers.push_back(
"DMC8DJ1excl");
494 AliDebugStream(1) <<
"Event selected as DG2 (DMC8)" << std::endl;
496 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DMC8DG2excl");
499 AliDebugStream(1) <<
"Event selected as DG1 (DMC8)" << std::endl;
501 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDG2]))
fSelectedTriggers.push_back(
"DMC8DG1excl");
509 AliDebugStream(1) <<
"Event selected as 0EMC" << std::endl;
513 AliDebugStream(1) <<
"Event selected as EJ2 (E0MC)" << std::endl;
515 if(!emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0])
fSelectedTriggers.push_back(
"0EMCEJ2excl");
518 AliDebugStream(1) <<
"Event selected as EJ1 (0EMC)" << std::endl;
520 if(!(emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]))
fSelectedTriggers.push_back(
"0EMCEJ1excl");
523 AliDebugStream(1) <<
"Event selected as EG2 (0EMC)" << std::endl;
525 if(!emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0])
fSelectedTriggers.push_back(
"0EMCEG2excl");
528 AliDebugStream(1) <<
"Event selected as EG1 (EMC8)" << std::endl;
530 if(!(emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2]))
fSelectedTriggers.push_back(
"0EMCEG1excl");
537 AliDebugStream(1) <<
"Event selected as 0DMC" << std::endl;
541 AliDebugStream(1) <<
"Event selected as DJ2 (0DMC)" << std::endl;
543 if(!emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0])
fSelectedTriggers.push_back(
"0DMCDJ2excl");
546 AliDebugStream(1) <<
"Event selected as DJ1 (0DMC)" << std::endl;
548 if(!(emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]))
fSelectedTriggers.push_back(
"0DMCDJ1excl");
551 AliDebugStream(1) <<
"Event selected as DG2 (0DMC)" << std::endl;
553 if(!emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0])
fSelectedTriggers.push_back(
"0DMCDG2excl");
556 AliDebugStream(1) <<
"Event selected as DG1 (0DMC)" << std::endl;
558 if(!(emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2]))
fSelectedTriggers.push_back(
"0DMCDG1excl");
574 fDownscaleOADB =
new AliOADBContainer(
"AliEmcalDownscaleFactors");
587 AliInfoStream() << GetName() <<
": No downscale factors provided for run " << runnumber << std::endl;
589 AliInfoStream() << GetName() <<
": Downscale factors used for run " << runnumber << std::endl;
592 AliInfoStream() << GetName() <<
": Trigger " << dfactor->GetName() <<
", downscale factor " << dfactor->GetVal() << std::endl;
600 std::vector<TString> triggers;
601 const std::array<TString, 5> emcaltriggers = {{
"EMC7",
"EJ1",
"EJ2",
"EG1",
"EG2"}},
602 dcaltriggers = {{
"DMC7",
"DJ1",
"DJ2",
"DG1",
"DG2"}},
603 emcalexclusive = {{
"EMC7excl",
"EG2excl",
"EJ2excl",
"EJ1excl",
"EG1excl"}},
604 dcalexclusive = {{
"DMC7excl",
"DG2excl",
"DJ2excl",
"DJ1excl",
"DG1excl"}},
605 t0triggers = {{
"EMC8",
"EMC8EJ1",
"EMC8EJ2",
"EMC8EG1",
"EMC8EG2"}},
606 t0exclusive = {{
"EMC8excl",
"EMC8EG2excl",
"EMC8EJ2excl",
"EMC8EJ1excl",
"EMC8EG1excl"}},
607 t0dcaltriggers = {{
"DMC8",
"DMC8DJ1",
"DMC8DJ2",
"DMC8DG1",
"DMC8DG2"}},
608 t0dcalexclusive = {{
"DMC8excl",
"DMC8DG2excl",
"DMC8DJ2excl",
"DMC8DJ1excl",
"DMC8DG1excl"}},
609 nointEMCAL = {{
"0EMC",
"0EMCEJ1",
"0EMCEJ2",
"0EMCEG1",
"0EMCEG2"}},
610 nointDCAL = {{
"0DMC",
"0DMCDJ1",
"0DMCDJ2",
"0DMCDG1",
"0DMCDG2"}};
611 const std::array<TString, 4> nointemcalexclusive = {{
"0EMCEG2excl",
"0EMCEJ2excl",
"0EMCEJ1excl",
"0EMCEG1excl"}},
612 nointdcalexclusive = {{
"0DMCDG2excl",
"0DMCDJ2excl",
"0DMCDJ1excl",
"0DMCDG1excl"}};
613 const std::array<TString, 2> centralitytriggers = {{
"CENT",
"SEMICENT"}};
615 triggers.push_back(
"MB");
617 for(
const auto &t : emcaltriggers) triggers.push_back(t);
618 if(useExclusiveTriggers)
619 for(
const auto &t : emcalexclusive) triggers.push_back(t);
622 for(
const auto &t : dcaltriggers) triggers.push_back(t);
623 if(useExclusiveTriggers)
624 for(
const auto &t : dcalexclusive) triggers.push_back(t);
627 for(
const auto &t : centralitytriggers) triggers.push_back(t);
631 triggers.push_back(
"MBT0");
633 for(
const auto &t: t0triggers) triggers.push_back(t);
634 if(useExclusiveTriggers)
635 for(
const auto &t : t0exclusive) triggers.push_back(t);
638 for(
const auto &t: t0dcaltriggers) triggers.push_back(t);
639 if(useExclusiveTriggers)
640 for(
const auto &t : t0dcalexclusive) triggers.push_back(t);
646 for(
const auto &t: nointEMCAL) triggers.push_back(t);
647 if(useExclusiveTriggers)
648 for(
const auto &t : nointemcalexclusive) triggers.push_back(t);
651 for(
const auto &t: nointDCAL) triggers.push_back(t);
652 if(useExclusiveTriggers)
653 for(
const auto &t : nointdcalexclusive) triggers.push_back(t);
660 std::string patternstring = pattern;
661 bool isEqual = pattern[0] ==
'=';
662 if(pattern[0] ==
'=') patternstring = pattern.substr(1);
663 std::vector<std::string> classes;
664 if(patternstring.find(
"|") != std::string::npos){
665 std::stringstream decoder(patternstring);
667 while(std::getline(decoder, tmp,
'|')) classes.emplace_back(tmp);
668 }
else classes.emplace_back(patternstring);
670 for(
const auto &t : classes){
671 if(isEqual && (trigger == t)) {
675 if(!isEqual && (trigger.find(t) != std::string::npos)){
684 if(!trgsel)
return false;
685 std::string patternstring = pattern;
686 if(pattern[0] ==
'=') patternstring = pattern.substr(1);
687 std::vector<std::string> classes;
688 if(patternstring.find(
"|") != std::string::npos){
689 std::stringstream decoder(patternstring);
691 while(std::getline(decoder, tmp,
'|')) classes.emplace_back(tmp);
692 }
else classes.emplace_back(patternstring);
694 for(
const auto &t : classes) {
716 double triggerweight = 1.;
717 if(result) triggerweight = 1./result->GetVal();
718 AliDebugStream(1) <<
"Using trigger weight " << triggerweight <<
" for trigger " << triggerclass << std::endl;
719 return triggerweight;
721 AliDebugStream(1) <<
"No downscale factors loaded - using trigger weight 1" << std::endl;
727 AliInfoStream() <<
"Reading downscale factors from OCDB for run " << fInputEvent->GetRunNumber() << std::endl;
734 if(downscaleOCDB->GetCurrentRun() != fInputEvent->GetRunNumber()) downscaleOCDB->SetRun(fInputEvent->GetRunNumber());
735 const std::array<TString, 11> khwtriggers = {
"INT7",
"EMC7",
"DMC7",
"EJ1",
"EJ2",
"DJ1",
"DJ2",
"EG1",
"EG2",
"DG1",
"DG2"};
736 std::vector<TString> runtriggers = downscaleOCDB->GetTriggerClasses();
737 for(
const auto &t : khwtriggers){
738 std::function<bool (TString)> triggerfinder = [t](
const TString &
test) ->
bool {
739 if(!
test.Contains(t +
"-B-"))
return false;
742 auto entry = std::find_if(runtriggers.begin(), runtriggers.end(), triggerfinder);
743 if(entry != runtriggers.end()){
745 double downscalefactor = downscaleOCDB->GetDownscaleFactorForTriggerClass(triggername);
746 AliInfoStream() <<
"Applying downscale factor " << downscalefactor <<
" for trigger " << t <<
" (" << triggername <<
") for run " << fInputEvent->GetRunNumber() << std::endl;
749 AliErrorStream() <<
"No downscale factor found for trigger " << t <<
" for run " << fInputEvent->GetRunNumber() << std::endl;
EMCAL L1 Jet trigger, low threshold.
std::vector< TString > fSelectedTriggers
! Triggers selected for given event
Bool_t fApplyVertexCuts
Apply vertex cuts (default: True)
bool IsEventSelected(const char *name) const
Checks whether the events is selected for a given trigger type.
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
virtual void CreateUserHistos()=0
THistManager * fHistos
Task Histogram container.
Double_t fVertexSPD[3]
!event Svertex
Bool_t fExclusiveMinBias
Only look at Min. Bias trigger.
Base task in the EMCAL framework.
Bool_t fLocalInitialized
whether or not the task has been already initialized
Double_t GetTriggerWeight(const TString &triggerclass) const
DCAL L1 Gamma trigger, low threshold.
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
DCAL L1 Jet trigger, high threshold.
Bool_t fEnableV0Triggers
Enable VZERO-based triggers (default)
AliAnalysisTaskEmcalTriggerBase()
Dummy I/O constructor.
static AliEmcalDownscaleFactorsOCDB * Instance()
Bool_t fEnableNoINTTriggers
Process EMCAL triggers without coincidence with INT triggers - exotic case - default off...
AliEmcalTriggerOfflineSelection * fTriggerSelection
Offline trigger selection.
Number of supported triggers.
virtual void UserCreateOutputObjects()
Steering of object creation.
void PrepareDownscaleFactorsFormOCDB()
Read the downscale factors from the OCDB.
EMCAL L1 Gamma trigger, high threshold.
Bool_t fEnableDCALTriggers
Enable / Disable event selection for DCAL trigger classes.
static std::vector< PWG::EMCAL::Triggerinfo > DecodeTriggerString(const std::string &triggerstring)
Decoding trigger string.
DCAL L1 Jet trigger, low threshold.
TObjArray * fDownscaleFactors
! Downscalfactors for given run
virtual void RunChanged(Int_t runnuber)
void SetCaloTriggerPatchInfoName(const char *n)
EMCAL L1 Jet trigger, high threshold.
Bool_t fRequireAnalysisUtils
Switch whether to require event selection in AliAnalysisUtils.
Bool_t fUseDownscaleCorrectionFormOCDB
Use downscale factors from OCDB.
Bool_t CheckMCOutliers()
Filter the mc tails in pt-hard distributions.
Base class for analyses using EMCAL triggers.
Bool_t fRequireBunchCrossing
Require bunch-bunch events (tag -B- in trigger string)
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
Create a new TH2 within the container.
TObject * FindObject(const char *name) const
Find an object inside the container.
TString fNameClusterContainer
Name of the cluster container in the event.
TString fNameTriggerSelectionContainer
Name of the trigger selection container.
THashList * GetListOfHistograms() const
Get the list of histograms.
EmcalTriggerClass
Definition of the various supported trigger types.
AliAnalysisUtils * fAliAnalysisUtils
!vertex selection (optional)
TString fNameDownscaleOADB
Name of the downscale OADB container.
void SetClusterContainer(const TString &clustercont)
DCAL L1 Gamma trigger, high threshold.
Bool_t fEnableT0Triggers
Enable triggers depending on T0 (INT8, EMC8, EMC8EGA, EMC8EJE) - default off.
virtual ~AliAnalysisTaskEmcalTriggerBase()
Destructor.
EMCAL L1 Gamma trigger, low threshold.
const TString & GetNameClusterContainer() const
Get the name of the cluster container.
Container for trigger decision object.
Bool_t fEnableCentralityTriggers
Enable central / semi-central trigger.
Bool_t fUseTriggerBits
Switch whether using trigger bits (relies on physics selection)
AliEmcalList * fOutput
!output list
virtual bool IsUserEventSelected()
AliOADBContainer * fDownscaleOADB
! Container with downscale factors for different triggers
Analysis of high- tracks in triggered events.
Bool_t fUseSPDVertex
Use SPD vertex (for productions without TPC)
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.
virtual void ExecOnce()
Perform steps needed to initialize the analysis.
void test(int runnumber=195345)
void UserCreateOutputObjects()
Main initialization function on the worker.
virtual void UserFillHistosBeforeEventSelection()
AliCutValueRange< double > fVertexCut
Cut on the z-position of the primary vertex.
bool MatchTriggerFromPattern(const std::string &pattern, const std::string &triggerclass) const
Match trigger pattern.
Bool_t fUseTriggerSelectionContainer
Use trigger decision in trigger selection container.
std::vector< TString > GetSupportedTriggers(Bool_t useExclusiveTriggers=true) const
virtual void UserFillHistosAfterEventSelection()
bool MatchTriggerFromContainer(const std::string &pattern, const PWG::EMCAL::AliEmcalTriggerDecisionContainer *trgcont) const
Matching triggers in pattern with entry in trigger decision container.
bool IsInRange(t value) const
static TString ClusterContainerNameFactory(Bool_t isAOD)
Get name of the default cluster container.
virtual void CreateUserObjects()=0