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),
77 fSelectCentralityTriggers2018(false)
131 std::vector<std::string> binlabels = {
"MB"};
133 binlabels.emplace_back(
"CENT");
134 binlabels.emplace_back(
"SEMICENT");
137 const std::array<const std::string, 5> vzlabels = {{
"EMC7",
"EG1",
"EG2",
"EJ1",
"EJ2"}};
138 for(
const auto & vlab : vzlabels) binlabels.emplace_back(vlab);
140 const std::array<const std::string, 5> dclabels = {{
"DMC7",
"DG1",
"DG2",
"DJ1",
"DJ2"}};
141 for(
const auto & dlab : dclabels) binlabels.emplace_back(dlab);
145 binlabels.emplace_back(
"MBT0");
146 const std::array<const std::string, 5> t0labels = {{
"EMC8",
"EMC8EG1",
"EMC8EG2",
"EMC8EJ1",
"EMC8EJ2"}};
147 for(
const auto & tlab : t0labels) binlabels.emplace_back(tlab);
149 const std::array<const std::string, 5> dtclabels = {{
"DMC8",
"DMC8DG1",
"DMC8DG2",
"DMC8DJ1",
"DMC8DJ2"}};
150 for(
const auto & dtlab : dtclabels) binlabels.emplace_back(dtlab);
153 fHistos->
CreateTH2(
"hTriggerCorrelation",
"Correlation selected trigger classes", binlabels.size(), -0.5, binlabels.size() - 0.5, binlabels.size(), -0.5, binlabels.size() - 0.5);
155 for(decltype(binlabels.size()) ib = 0; ib < binlabels.size(); ib++){
156 correlationHist->GetXaxis()->SetBinLabel(ib+1, binlabels[ib].data());
157 correlationHist->GetYaxis()->SetBinLabel(ib+1, binlabels[ib].data());
173 AliDebugStream(1) <<
"Failed trigger selection" << std::endl;
180 const AliVVertex *vtx =
fUseSPDVertex ? fInputEvent->GetPrimaryVertexSPD() : fInputEvent->GetPrimaryVertex();
182 if(vtx->GetNContributors() < 1) {
183 AliDebugStream(1) <<
"Failed Vertex Selection" << std::endl;
187 AliDebugStream(1) <<
"Failed vertex-z cut" << std::endl;
193 AliDebugStream(1) <<
"Checking cuts in AliAnalysisUtils" << std::endl;
194 if(fInputEvent->IsA() == AliESDEvent::Class() &&
fAliAnalysisUtils->IsFirstEventInChunk(fInputEvent))
return false;
200 AliDebugStream(1) <<
"Failed user extra cuts" << std::endl;
207 AliDebugStream(1) << GetName() <<
": Reject MC outliers" << std::endl;
215 for(
int itrg = 0; itrg < corrhist->GetXaxis()->GetNbins(); itrg++){
216 const char *xlabel = corrhist->GetXaxis()->GetBinLabel(itrg+1);
219 for(
int jtrg = 0; jtrg < corrhist->GetYaxis()->GetNbins(); jtrg++){
220 const char *ylabel = corrhist->GetYaxis()->GetBinLabel(jtrg+1);
222 if(hasTriggerB)
fHistos->
FillTH2(
"hTriggerCorrelation", xlabel, ylabel);
228 AliDebugStream(1) <<
"Event is selected" << std::endl;
234 AliDebugStream(1) <<
"Entering trigger selection\n";
238 UInt_t selectionstatus = fInputHandler->IsEventSelected();
239 Bool_t isMinBias = selectionstatus & AliVEvent::kINT7,
240 isMinBiasT0 = selectionstatus & AliVEvent::kINT8,
241 isCENT = selectionstatus & AliVEvent::kCentral,
242 isSemiCENT = selectionstatus & AliVEvent::kSemiCentral,
252 for(
auto t : triggers) {
253 if(t.Triggercluster() !=
"CENT")
continue;
254 if(t.Triggerclass() ==
"CV0H7") isCENT =
true;
255 else if(t.Triggerclass() ==
"CMID7") isSemiCENT =
true;
261 AliDebugStream(1) <<
"Min bias mode\n";
277 AliErrorStream() <<
"Trigger selection container requested but not found - not possible to select EMCAL triggers" << std::endl;
282 AliDebugStream(1) <<
"Found triggers " << fInputEvent->GetFiredTriggerClasses() << std::endl;
287 const std::array<std::string, AliEmcalTriggerOfflineSelection::kTrgn> kEmcalSelectTriggerStrings = {
288 "=CEMC7|CEMC8|C0EMC",
"EG1|EGA",
"EG2",
"EJ1|EJE",
"EJ2",
"=CDMC7|CDMC8|C0DMC",
"DG1",
"DG2",
"DJ1",
"DJ2" 293 if(
fRequireBunchCrossing && ! (fInputEvent->GetFiredTriggerClasses().Contains(
"-B-") || fInputEvent->GetFiredTriggerClasses().Contains(
"-S-")))
return;
300 AliDebugStream(1) <<
"Require trigger bits" << std::endl;
301 const std::array<ULong_t, AliEmcalTriggerOfflineSelection::kTrgn> kSelectTriggerBits = {
302 AliVEvent::kEMC7|AliVEvent::kEMC8, AliVEvent::kEMCEGA, AliVEvent::kEMCEGA, AliVEvent::kEMCEJE, AliVEvent::kEMCEJE,
303 AliVEvent::kEMC7|AliVEvent::kEMC8, AliVEvent::kEMCEGA, AliVEvent::kEMCEGA, AliVEvent::kEMCEJE, AliVEvent::kEMCEJE
306 if(!(selectionstatus & kSelectTriggerBits[iclass])) {
307 emcNoIntTriggers[iclass] = emc8Triggers[iclass] = emcalTriggers[iclass] =
false;
311 auto triggerstring = fInputEvent->GetFiredTriggerClasses();
312 if(triggerstring.Contains(
"EMC") || triggerstring.Contains(
"DMC") ||
313 triggerstring.Contains(
"INT7E") || triggerstring.Contains(
"INT7D")){
317 std::map<int, std::array<bool, 3>> matchedTriggers;
318 for(
auto t : triggers) {
319 const auto &triggerclass = t.Triggerclass();
320 if((triggerclass.find(
"EMC") != std::string::npos) || (triggerclass.find(
"DMC") != std::string::npos) ||
321 (triggerclass.find(
"INT7E") != std::string::npos) || (triggerclass.find(
"INT7D") != std::string::npos))
322 AliDebugStream(1) << GetName() <<
": Trigger string " << t.ExpandClassName() << std::endl;
324 bool isT0trigger = (triggerclass.find(
"EMC8") != std::string::npos) || (triggerclass.find(
"DMC8") != std::string::npos) || (triggerclass.find(
"INT8") != std::string::npos),
325 isVZEROtrigger = (triggerclass.find(
"EMC7") != std::string::npos) || (triggerclass.find(
"DMC7") != std::string::npos) || (triggerclass.find(
"INT7") != std::string::npos);
327 AliDebugStream(1) <<
"Next trigger: " << kEmcalSelectTriggerStrings[iclass] << std::endl;
330 if(emcalSelectionStatus) {
331 auto entry = matchedTriggers.find(iclass);
332 if(entry == matchedTriggers.end()) {
333 std::array<bool, 3> interactions = {{isVZEROtrigger, isT0trigger, !(isVZEROtrigger || isT0trigger)}};
334 matchedTriggers.insert(std::pair<
int, std::array<bool, 3>>(iclass, interactions));
336 auto &interactions = entry->second;
337 if(isVZEROtrigger) interactions[0] =
true;
338 if(isT0trigger) interactions[1] =
true;
339 if(!(isVZEROtrigger || isT0trigger)) interactions[2] =
true;
346 auto entry = matchedTriggers.find(iclass);
347 if(entry != matchedTriggers.end()){
349 const auto &interactions = entry->second;
350 emcalTriggers[iclass] &= interactions[0];
351 emc8Triggers[iclass] &= interactions[1];
352 emcNoIntTriggers[iclass] &= interactions[2];
355 emcalTriggers[iclass] =
false;
356 emc8Triggers[iclass] =
false;
357 emcNoIntTriggers[iclass] =
false;
360 if(emcalTriggers[iclass])
361 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (INT7 suite)" << std::endl;
362 if(emc8Triggers[iclass])
363 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (INT8 suite)" << std::endl;
364 if(emcNoIntTriggers[iclass])
365 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (No INT coincidence)" << std::endl;
370 bool isT0trigger = selectionstatus & AliVEvent::kINT7, isVZEROtrigger = selectionstatus & AliVEvent::kINT8;
375 emc8Triggers[iclass] &= emcalSelectionStatus;
378 emcalTriggers[iclass] &= emcalSelectionStatus;
380 if(!(isT0trigger || isVZEROtrigger)){
382 emcNoIntTriggers[iclass] &= emcalSelectionStatus;
384 if(emcalTriggers[iclass])
385 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (INT7 suite)" << std::endl;
386 if(emc8Triggers[iclass])
387 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (INT8 suite)" << std::endl;
388 if(emcNoIntTriggers[iclass])
389 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (No INT coincidence)" << std::endl;
409 AliDebugStream(1) <<
"Event selected as EMC7" << std::endl;
414 AliDebugStream(1) <<
"Event selected as EJ2" << std::endl;
416 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EJ2excl");
419 AliDebugStream(1) <<
"Event selected as EJ1" << std::endl;
421 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]))
fSelectedTriggers.push_back(
"EJ1excl");
424 AliDebugStream(1) <<
"Event selected as EG2" << std::endl;
426 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EG2excl");
429 AliDebugStream(1) <<
"Event selected as EG1" << std::endl;
431 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2]))
fSelectedTriggers.push_back(
"EG1excl");
438 AliDebugStream(1) <<
"Event selected as DMC7" << std::endl;
443 AliDebugStream(1) <<
"Event selected as DJ2" << std::endl;
445 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DJ2excl");
448 AliDebugStream(1) <<
"Event selected as DJ1" << std::endl;
450 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]))
fSelectedTriggers.push_back(
"DJ1excl");
453 AliDebugStream(1) <<
"Event selected as DG2" << std::endl;
455 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DG2excl");
458 AliDebugStream(1) <<
"Event selected as DG1" << std::endl;
460 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2]))
fSelectedTriggers.push_back(
"DG1excl");
469 AliDebugStream(1) <<
"Event selected as EMC8" << std::endl;
474 AliDebugStream(1) <<
"Event selected as EJ2 (EMC8)" << std::endl;
476 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EMC8EJ2excl");
479 AliDebugStream(1) <<
"Event selected as EJ1 (EMC8)" << std::endl;
481 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]))
fSelectedTriggers.push_back(
"EMC8EJ1excl");
484 AliDebugStream(1) <<
"Event selected as EG2 (EMC8)" << std::endl;
486 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EMC8EG2excl");
489 AliDebugStream(1) <<
"Event selected as EG1 (EMC8)" << std::endl;
491 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEG2]))
fSelectedTriggers.push_back(
"EMC8EG1excl");
498 AliDebugStream(1) <<
"Event selected as DMC8" << std::endl;
503 AliDebugStream(1) <<
"Event selected as DJ2 (DMC8)" << std::endl;
505 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DMC8DJ2excl");
508 AliDebugStream(1) <<
"Event selected as DJ1 (DMC8)" << std::endl;
510 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]))
fSelectedTriggers.push_back(
"DMC8DJ1excl");
513 AliDebugStream(1) <<
"Event selected as DG2 (DMC8)" << std::endl;
515 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DMC8DG2excl");
518 AliDebugStream(1) <<
"Event selected as DG1 (DMC8)" << std::endl;
520 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDG2]))
fSelectedTriggers.push_back(
"DMC8DG1excl");
528 AliDebugStream(1) <<
"Event selected as 0EMC" << std::endl;
532 AliDebugStream(1) <<
"Event selected as EJ2 (E0MC)" << std::endl;
534 if(!emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0])
fSelectedTriggers.push_back(
"0EMCEJ2excl");
537 AliDebugStream(1) <<
"Event selected as EJ1 (0EMC)" << std::endl;
539 if(!(emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]))
fSelectedTriggers.push_back(
"0EMCEJ1excl");
542 AliDebugStream(1) <<
"Event selected as EG2 (0EMC)" << std::endl;
544 if(!emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0])
fSelectedTriggers.push_back(
"0EMCEG2excl");
547 AliDebugStream(1) <<
"Event selected as EG1 (EMC8)" << std::endl;
549 if(!(emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2]))
fSelectedTriggers.push_back(
"0EMCEG1excl");
556 AliDebugStream(1) <<
"Event selected as 0DMC" << std::endl;
560 AliDebugStream(1) <<
"Event selected as DJ2 (0DMC)" << std::endl;
562 if(!emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0])
fSelectedTriggers.push_back(
"0DMCDJ2excl");
565 AliDebugStream(1) <<
"Event selected as DJ1 (0DMC)" << std::endl;
567 if(!(emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]))
fSelectedTriggers.push_back(
"0DMCDJ1excl");
570 AliDebugStream(1) <<
"Event selected as DG2 (0DMC)" << std::endl;
572 if(!emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0])
fSelectedTriggers.push_back(
"0DMCDG2excl");
575 AliDebugStream(1) <<
"Event selected as DG1 (0DMC)" << std::endl;
577 if(!(emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2]))
fSelectedTriggers.push_back(
"0DMCDG1excl");
593 fDownscaleOADB =
new AliOADBContainer(
"AliEmcalDownscaleFactors");
606 AliInfoStream() << GetName() <<
": No downscale factors provided for run " << runnumber << std::endl;
608 AliInfoStream() << GetName() <<
": Downscale factors used for run " << runnumber << std::endl;
611 AliInfoStream() << GetName() <<
": Trigger " << dfactor->GetName() <<
", downscale factor " << dfactor->GetVal() << std::endl;
619 std::vector<TString> triggers;
620 const std::array<TString, 5> emcaltriggers = {{
"EMC7",
"EJ1",
"EJ2",
"EG1",
"EG2"}},
621 dcaltriggers = {{
"DMC7",
"DJ1",
"DJ2",
"DG1",
"DG2"}},
622 emcalexclusive = {{
"EMC7excl",
"EG2excl",
"EJ2excl",
"EJ1excl",
"EG1excl"}},
623 dcalexclusive = {{
"DMC7excl",
"DG2excl",
"DJ2excl",
"DJ1excl",
"DG1excl"}},
624 t0triggers = {{
"EMC8",
"EMC8EJ1",
"EMC8EJ2",
"EMC8EG1",
"EMC8EG2"}},
625 t0exclusive = {{
"EMC8excl",
"EMC8EG2excl",
"EMC8EJ2excl",
"EMC8EJ1excl",
"EMC8EG1excl"}},
626 t0dcaltriggers = {{
"DMC8",
"DMC8DJ1",
"DMC8DJ2",
"DMC8DG1",
"DMC8DG2"}},
627 t0dcalexclusive = {{
"DMC8excl",
"DMC8DG2excl",
"DMC8DJ2excl",
"DMC8DJ1excl",
"DMC8DG1excl"}},
628 nointEMCAL = {{
"0EMC",
"0EMCEJ1",
"0EMCEJ2",
"0EMCEG1",
"0EMCEG2"}},
629 nointDCAL = {{
"0DMC",
"0DMCDJ1",
"0DMCDJ2",
"0DMCDG1",
"0DMCDG2"}};
630 const std::array<TString, 4> nointemcalexclusive = {{
"0EMCEG2excl",
"0EMCEJ2excl",
"0EMCEJ1excl",
"0EMCEG1excl"}},
631 nointdcalexclusive = {{
"0DMCDG2excl",
"0DMCDJ2excl",
"0DMCDJ1excl",
"0DMCDG1excl"}};
632 const std::array<TString, 2> centralitytriggers = {{
"CENT",
"SEMICENT"}};
634 triggers.push_back(
"MB");
636 for(
const auto &t : emcaltriggers) triggers.push_back(t);
637 if(useExclusiveTriggers)
638 for(
const auto &t : emcalexclusive) triggers.push_back(t);
641 for(
const auto &t : dcaltriggers) triggers.push_back(t);
642 if(useExclusiveTriggers)
643 for(
const auto &t : dcalexclusive) triggers.push_back(t);
646 for(
const auto &t : centralitytriggers) triggers.push_back(t);
650 triggers.push_back(
"MBT0");
652 for(
const auto &t: t0triggers) triggers.push_back(t);
653 if(useExclusiveTriggers)
654 for(
const auto &t : t0exclusive) triggers.push_back(t);
657 for(
const auto &t: t0dcaltriggers) triggers.push_back(t);
658 if(useExclusiveTriggers)
659 for(
const auto &t : t0dcalexclusive) triggers.push_back(t);
665 for(
const auto &t: nointEMCAL) triggers.push_back(t);
666 if(useExclusiveTriggers)
667 for(
const auto &t : nointemcalexclusive) triggers.push_back(t);
670 for(
const auto &t: nointDCAL) triggers.push_back(t);
671 if(useExclusiveTriggers)
672 for(
const auto &t : nointdcalexclusive) triggers.push_back(t);
679 std::string patternstring = pattern;
680 bool isEqual = pattern[0] ==
'=';
681 if(pattern[0] ==
'=') patternstring = pattern.substr(1);
682 std::vector<std::string> classes;
683 if(patternstring.find(
"|") != std::string::npos){
684 std::stringstream decoder(patternstring);
686 while(std::getline(decoder, tmp,
'|')) classes.emplace_back(tmp);
687 }
else classes.emplace_back(patternstring);
689 for(
const auto &t : classes){
690 if(isEqual && (trigger == t)) {
694 if(!isEqual && (trigger.find(t) != std::string::npos)){
703 if(!trgsel)
return false;
704 std::string patternstring = pattern;
705 if(pattern[0] ==
'=') patternstring = pattern.substr(1);
706 std::vector<std::string> classes;
707 if(patternstring.find(
"|") != std::string::npos){
708 std::stringstream decoder(patternstring);
710 while(std::getline(decoder, tmp,
'|')) classes.emplace_back(tmp);
711 }
else classes.emplace_back(patternstring);
713 for(
const auto &t : classes) {
735 double triggerweight = 1.;
736 if(result) triggerweight = 1./result->GetVal();
737 AliDebugStream(1) <<
"Using trigger weight " << triggerweight <<
" for trigger " << triggerclass << std::endl;
738 return triggerweight;
740 AliDebugStream(1) <<
"No downscale factors loaded - using trigger weight 1" << std::endl;
746 AliInfoStream() <<
"Reading downscale factors from OCDB for run " << fInputEvent->GetRunNumber() << std::endl;
753 if(downscaleOCDB->GetCurrentRun() != fInputEvent->GetRunNumber()) downscaleOCDB->SetRun(fInputEvent->GetRunNumber());
754 const std::array<TString, 11> khwtriggers = {
"INT7",
"EMC7",
"DMC7",
"EJ1",
"EJ2",
"DJ1",
"DJ2",
"EG1",
"EG2",
"DG1",
"DG2"};
755 std::vector<TString> runtriggers = downscaleOCDB->GetTriggerClasses();
756 for(
const auto &t : khwtriggers){
757 std::function<bool (TString)> triggerfinder = [t](
const TString &
test) ->
bool {
758 if(!
test.Contains(t +
"-B-"))
return false;
761 auto entry = std::find_if(runtriggers.begin(), runtriggers.end(), triggerfinder);
762 if(entry != runtriggers.end()){
764 double downscalefactor = downscaleOCDB->GetDownscaleFactorForTriggerClass(triggername);
765 AliInfoStream() <<
"Applying downscale factor " << downscalefactor <<
" for trigger " << t <<
" (" << triggername <<
") for run " << fInputEvent->GetRunNumber() << std::endl;
768 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)
Bool_t fSelectCentralityTriggers2018
Select centrality triggers 2018 based on trigger string (missing support by physics selection yet) ...
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)
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