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)
129 std::vector<std::string> binlabels = {
"MB"};
131 const std::array<const std::string, 5> vzlabels = {{
"EMC7",
"EG1",
"EG2",
"EJ1",
"EJ2"}};
132 for(
const auto & vlab : vzlabels) binlabels.emplace_back(vlab);
134 const std::array<const std::string, 5> dclabels = {{
"DMC7",
"DG1",
"DG2",
"DJ1",
"DJ2"}};
135 for(
const auto & dlab : dclabels) binlabels.emplace_back(dlab);
139 binlabels.emplace_back(
"MBT0");
140 const std::array<const std::string, 5> t0labels = {{
"EMC8",
"EMC8EG1",
"EMC8EG2",
"EMC8EJ1",
"EMC8EJ2"}};
141 for(
const auto & tlab : t0labels) binlabels.emplace_back(tlab);
143 const std::array<const std::string, 5> dtclabels = {{
"DMC8",
"DMC8DG1",
"DMC8DG2",
"DMC8DJ1",
"DMC8DJ2"}};
144 for(
const auto & dtlab : dtclabels) binlabels.emplace_back(dtlab);
147 fHistos->
CreateTH2(
"hTriggerCorrelation",
"Correlation selected trigger classes", binlabels.size(), -0.5, binlabels.size() - 0.5, binlabels.size(), -0.5, binlabels.size() - 0.5);
149 for(decltype(binlabels.size()) ib = 0; ib < binlabels.size(); ib++){
150 correlationHist->GetXaxis()->SetBinLabel(ib+1, binlabels[ib].data());
151 correlationHist->GetYaxis()->SetBinLabel(ib+1, binlabels[ib].data());
167 AliDebugStream(1) <<
"Failed trigger selection" << std::endl;
174 const AliVVertex *vtx =
fUseSPDVertex ? fInputEvent->GetPrimaryVertexSPD() : fInputEvent->GetPrimaryVertex();
176 if(vtx->GetNContributors() < 1) {
177 AliDebugStream(1) <<
"Failed Vertex Selection" << std::endl;
181 AliDebugStream(1) <<
"Failed vertex-z cut" << std::endl;
187 AliDebugStream(1) <<
"Checking cuts in AliAnalysisUtils" << std::endl;
188 if(fInputEvent->IsA() == AliESDEvent::Class() &&
fAliAnalysisUtils->IsFirstEventInChunk(fInputEvent))
return false;
194 AliDebugStream(1) <<
"Failed user extra cuts" << std::endl;
201 AliDebugStream(1) << GetName() <<
": Reject MC outliers" << std::endl;
209 for(
int itrg = 0; itrg < corrhist->GetXaxis()->GetNbins(); itrg++){
210 const char *xlabel = corrhist->GetXaxis()->GetBinLabel(itrg+1);
213 for(
int jtrg = 0; jtrg < corrhist->GetYaxis()->GetNbins(); jtrg++){
214 const char *ylabel = corrhist->GetYaxis()->GetBinLabel(jtrg+1);
216 if(hasTriggerB)
fHistos->
FillTH2(
"hTriggerCorrelation", xlabel, ylabel);
222 AliDebugStream(1) <<
"Event is selected" << std::endl;
228 AliDebugStream(1) <<
"Entering trigger selection\n";
232 UInt_t selectionstatus = fInputHandler->IsEventSelected();
233 Bool_t isMinBias = selectionstatus & AliVEvent::kINT7,
234 isMinBiasT0 = selectionstatus & AliVEvent::kINT8,
235 isCENT = selectionstatus & AliVEvent::kCentral,
236 isSemiCENT = selectionstatus & AliVEvent::kSemiCentral,
242 AliDebugStream(1) <<
"Min bias mode\n";
258 AliErrorStream() <<
"Trigger selection container requested but not found - not possible to select EMCAL triggers" << std::endl;
263 AliDebugStream(1) <<
"Found triggers " << fInputEvent->GetFiredTriggerClasses() << std::endl;
268 const std::array<std::string, AliEmcalTriggerOfflineSelection::kTrgn> kEmcalSelectTriggerStrings = {
269 "=CEMC7|CEMC8|C0EMC",
"EG1|EGA",
"EG2",
"EJ1|EJE",
"EJ2",
"=CDMC7|CDMC8|C0DMC",
"DG1",
"DG2",
"DJ1",
"DJ2" 274 if(
fRequireBunchCrossing && ! (fInputEvent->GetFiredTriggerClasses().Contains(
"-B-") || fInputEvent->GetFiredTriggerClasses().Contains(
"-S-")))
return;
281 AliDebugStream(1) <<
"Require trigger bits" << std::endl;
282 const std::array<ULong_t, AliEmcalTriggerOfflineSelection::kTrgn> kSelectTriggerBits = {
283 AliVEvent::kEMC7|AliVEvent::kEMC8, AliVEvent::kEMCEGA, AliVEvent::kEMCEGA, AliVEvent::kEMCEJE, AliVEvent::kEMCEJE,
284 AliVEvent::kEMC7|AliVEvent::kEMC8, AliVEvent::kEMCEGA, AliVEvent::kEMCEGA, AliVEvent::kEMCEJE, AliVEvent::kEMCEJE
287 if(!(selectionstatus & kSelectTriggerBits[iclass])) {
288 emcNoIntTriggers[iclass] = emc8Triggers[iclass] = emcalTriggers[iclass] =
false;
293 if(fInputEvent->GetFiredTriggerClasses().Contains(
"EMC") || fInputEvent->GetFiredTriggerClasses().Contains(
"DMC")){
297 std::map<int, std::array<bool, 3>> matchedTriggers;
298 for(
auto t : triggers) {
299 const auto &triggerclass = t.Triggerclass();
300 if((triggerclass.find(
"EMC") != std::string::npos) || (triggerclass.find(
"DMC") != std::string::npos))
301 AliDebugStream(1) << GetName() <<
": Trigger string " << t.ExpandClassName() << std::endl;
303 bool isT0trigger = (triggerclass.find(
"EMC8") != std::string::npos) || (triggerclass.find(
"DMC8") != std::string::npos),
304 isVZEROtrigger = (triggerclass.find(
"EMC7") != std::string::npos) || (triggerclass.find(
"DMC7") != std::string::npos);
306 AliDebugStream(1) <<
"Next trigger: " << kEmcalSelectTriggerStrings[iclass] << std::endl;
309 if(emcalSelectionStatus) {
310 auto entry = matchedTriggers.find(iclass);
311 if(entry == matchedTriggers.end()) {
312 std::array<bool, 3> interactions = {{isVZEROtrigger, isT0trigger, !(isVZEROtrigger || isT0trigger)}};
313 matchedTriggers.insert(std::pair<
int, std::array<bool, 3>>(iclass, interactions));
315 auto &interactions = entry->second;
316 if(isVZEROtrigger) interactions[0] =
true;
317 if(isT0trigger) interactions[1] =
true;
318 if(!(isVZEROtrigger || isT0trigger)) interactions[2] =
true;
325 auto entry = matchedTriggers.find(iclass);
326 if(entry != matchedTriggers.end()){
328 const auto &interactions = entry->second;
329 emcalTriggers[iclass] &= interactions[0];
330 emc8Triggers[iclass] &= interactions[1];
331 emcNoIntTriggers[iclass] &= interactions[2];
334 emcalTriggers[iclass] =
false;
335 emc8Triggers[iclass] =
false;
336 emcNoIntTriggers[iclass] =
false;
339 if(emcalTriggers[iclass])
340 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (INT7 suite)" << std::endl;
341 if(emc8Triggers[iclass])
342 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (INT8 suite)" << std::endl;
343 if(emcNoIntTriggers[iclass])
344 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (No INT coincidence)" << std::endl;
349 bool isT0trigger = selectionstatus & AliVEvent::kINT7, isVZEROtrigger = selectionstatus & AliVEvent::kINT8;
354 emc8Triggers[iclass] &= emcalSelectionStatus;
357 emcalTriggers[iclass] &= emcalSelectionStatus;
359 if(!(isT0trigger || isVZEROtrigger)){
361 emcNoIntTriggers[iclass] &= emcalSelectionStatus;
363 if(emcalTriggers[iclass])
364 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (INT7 suite)" << std::endl;
365 if(emc8Triggers[iclass])
366 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (INT8 suite)" << std::endl;
367 if(emcNoIntTriggers[iclass])
368 AliDebugStream(1) << GetName() <<
": Event selected as trigger " << kEmcalSelectTriggerStrings[iclass] <<
" (No INT coincidence)" << std::endl;
388 AliDebugStream(1) <<
"Event selected as EMC7" << std::endl;
393 AliDebugStream(1) <<
"Event selected as EJ2" << std::endl;
395 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EJ2excl");
398 AliDebugStream(1) <<
"Event selected as EJ1" << std::endl;
400 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]))
fSelectedTriggers.push_back(
"EJ1excl");
403 AliDebugStream(1) <<
"Event selected as EG2" << std::endl;
405 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EG2excl");
408 AliDebugStream(1) <<
"Event selected as EG1" << std::endl;
410 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2]))
fSelectedTriggers.push_back(
"EG1excl");
417 AliDebugStream(1) <<
"Event selected as DMC7" << std::endl;
422 AliDebugStream(1) <<
"Event selected as DJ2" << std::endl;
424 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DJ2excl");
427 AliDebugStream(1) <<
"Event selected as DJ1" << std::endl;
429 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]))
fSelectedTriggers.push_back(
"DJ1excl");
432 AliDebugStream(1) <<
"Event selected as DG2" << std::endl;
434 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DG2excl");
437 AliDebugStream(1) <<
"Event selected as DG1" << std::endl;
439 if(!(isMinBias || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcalTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2]))
fSelectedTriggers.push_back(
"DG1excl");
448 AliDebugStream(1) <<
"Event selected as EMC8" << std::endl;
453 AliDebugStream(1) <<
"Event selected as EJ2 (EMC8)" << std::endl;
455 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EMC8EJ2excl");
458 AliDebugStream(1) <<
"Event selected as EJ1 (EMC8)" << std::endl;
460 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]))
fSelectedTriggers.push_back(
"EMC8EJ1excl");
463 AliDebugStream(1) <<
"Event selected as EG2 (EMC8)" << std::endl;
465 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEL0]))
fSelectedTriggers.push_back(
"EMC8EG2excl");
468 AliDebugStream(1) <<
"Event selected as EG1 (EMC8)" << std::endl;
470 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgEG2]))
fSelectedTriggers.push_back(
"EMC8EG1excl");
477 AliDebugStream(1) <<
"Event selected as DMC8" << std::endl;
482 AliDebugStream(1) <<
"Event selected as DJ2 (DMC8)" << std::endl;
484 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DMC8DJ2excl");
487 AliDebugStream(1) <<
"Event selected as DJ1 (DMC8)" << std::endl;
489 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]))
fSelectedTriggers.push_back(
"DMC8DJ1excl");
492 AliDebugStream(1) <<
"Event selected as DG2 (DMC8)" << std::endl;
494 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDL0]))
fSelectedTriggers.push_back(
"DMC8DG2excl");
497 AliDebugStream(1) <<
"Event selected as DG1 (DMC8)" << std::endl;
499 if(!(isMinBiasT0 || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emc8Triggers[AliEmcalTriggerOfflineSelection::kTrgDG2]))
fSelectedTriggers.push_back(
"DMC8DG1excl");
507 AliDebugStream(1) <<
"Event selected as 0EMC" << std::endl;
511 AliDebugStream(1) <<
"Event selected as EJ2 (E0MC)" << std::endl;
513 if(!emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0])
fSelectedTriggers.push_back(
"0EMCEJ2excl");
516 AliDebugStream(1) <<
"Event selected as EJ1 (0EMC)" << std::endl;
518 if(!(emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEJ2]))
fSelectedTriggers.push_back(
"0EMCEJ1excl");
521 AliDebugStream(1) <<
"Event selected as EG2 (0EMC)" << std::endl;
523 if(!emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0])
fSelectedTriggers.push_back(
"0EMCEG2excl");
526 AliDebugStream(1) <<
"Event selected as EG1 (EMC8)" << std::endl;
528 if(!(emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEL0] || emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgEG2]))
fSelectedTriggers.push_back(
"0EMCEG1excl");
535 AliDebugStream(1) <<
"Event selected as 0DMC" << std::endl;
539 AliDebugStream(1) <<
"Event selected as DJ2 (0DMC)" << std::endl;
541 if(!emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0])
fSelectedTriggers.push_back(
"0DMCDJ2excl");
544 AliDebugStream(1) <<
"Event selected as DJ1 (0DMC)" << std::endl;
546 if(!(emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDJ2]))
fSelectedTriggers.push_back(
"0DMCDJ1excl");
549 AliDebugStream(1) <<
"Event selected as DG2 (0DMC)" << std::endl;
551 if(!emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0])
fSelectedTriggers.push_back(
"0DMCDG2excl");
554 AliDebugStream(1) <<
"Event selected as DG1 (0DMC)" << std::endl;
556 if(!(emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDL0] || emcNoIntTriggers[AliEmcalTriggerOfflineSelection::kTrgDG2]))
fSelectedTriggers.push_back(
"0DMCDG1excl");
572 fDownscaleOADB =
new AliOADBContainer(
"AliEmcalDownscaleFactors");
585 AliInfoStream() << GetName() <<
": No downscale factors provided for run " << runnumber << std::endl;
587 AliInfoStream() << GetName() <<
": Downscale factors used for run " << runnumber << std::endl;
590 AliInfoStream() << GetName() <<
": Trigger " << dfactor->GetName() <<
", downscale factor " << dfactor->GetVal() << std::endl;
598 std::vector<TString> triggers;
599 const std::array<TString, 5> emcaltriggers = {{
"EMC7",
"EJ1",
"EJ2",
"EG1",
"EG2"}},
600 dcaltriggers = {{
"DMC7",
"DJ1",
"DJ2",
"DG1",
"DG2"}},
601 emcalexclusive = {{
"EMC7excl",
"EG2excl",
"EJ2excl",
"EJ1excl",
"EG1excl"}},
602 dcalexclusive = {{
"DMC7excl",
"DG2excl",
"DJ2excl",
"DJ1excl",
"DG1excl"}},
603 t0triggers = {{
"EMC8",
"EMC8EJ1",
"EMC8EJ2",
"EMC8EG1",
"EMC8EG2"}},
604 t0exclusive = {{
"EMC8excl",
"EMC8EG2excl",
"EMC8EJ2excl",
"EMC8EJ1excl",
"EMC8EG1excl"}},
605 t0dcaltriggers = {{
"DMC8",
"DMC8DJ1",
"DMC8DJ2",
"DMC8DG1",
"DMC8DG2"}},
606 t0dcalexclusive = {{
"DMC8excl",
"DMC8DG2excl",
"DMC8DJ2excl",
"DMC8DJ1excl",
"DMC8DG1excl"}},
607 nointEMCAL = {{
"0EMC",
"0EMCEJ1",
"0EMCEJ2",
"0EMCEG1",
"0EMCEG2"}},
608 nointDCAL = {{
"0DMC",
"0DMCDJ1",
"0DMCDJ2",
"0DMCDG1",
"0DMCDG2"}};
609 const std::array<TString, 4> nointemcalexclusive = {{
"0EMCEG2excl",
"0EMCEJ2excl",
"0EMCEJ1excl",
"0EMCEG1excl"}},
610 nointdcalexclusive = {{
"0DMCDG2excl",
"0DMCDJ2excl",
"0DMCDJ1excl",
"0DMCDG1excl"}};
611 const std::array<TString, 2> centralitytriggers = {{
"CENT",
"SEMICENT"}};
613 triggers.push_back(
"MB");
615 for(
const auto &t : emcaltriggers) triggers.push_back(t);
616 if(useExclusiveTriggers)
617 for(
const auto &t : emcalexclusive) triggers.push_back(t);
620 for(
const auto &t : dcaltriggers) triggers.push_back(t);
621 if(useExclusiveTriggers)
622 for(
const auto &t : dcalexclusive) triggers.push_back(t);
625 for(
const auto &t : centralitytriggers) triggers.push_back(t);
629 triggers.push_back(
"MBT0");
631 for(
const auto &t: t0triggers) triggers.push_back(t);
632 if(useExclusiveTriggers)
633 for(
const auto &t : t0exclusive) triggers.push_back(t);
636 for(
const auto &t: t0dcaltriggers) triggers.push_back(t);
637 if(useExclusiveTriggers)
638 for(
const auto &t : t0dcalexclusive) triggers.push_back(t);
644 for(
const auto &t: nointEMCAL) triggers.push_back(t);
645 if(useExclusiveTriggers)
646 for(
const auto &t : nointemcalexclusive) triggers.push_back(t);
649 for(
const auto &t: nointDCAL) triggers.push_back(t);
650 if(useExclusiveTriggers)
651 for(
const auto &t : nointdcalexclusive) triggers.push_back(t);
658 std::string patternstring = pattern;
659 bool isEqual = pattern[0] ==
'=';
660 if(pattern[0] ==
'=') patternstring = pattern.substr(1);
661 std::vector<std::string> classes;
662 if(patternstring.find(
"|") != std::string::npos){
663 std::stringstream decoder(patternstring);
665 while(std::getline(decoder, tmp,
'|')) classes.emplace_back(tmp);
666 }
else classes.emplace_back(patternstring);
668 for(
const auto &t : classes){
669 if(isEqual && (trigger == t)) {
673 if(!isEqual && (trigger.find(t) != std::string::npos)){
682 if(!trgsel)
return false;
683 std::string patternstring = pattern;
684 if(pattern[0] ==
'=') patternstring = pattern.substr(1);
685 std::vector<std::string> classes;
686 if(patternstring.find(
"|") != std::string::npos){
687 std::stringstream decoder(patternstring);
689 while(std::getline(decoder, tmp,
'|')) classes.emplace_back(tmp);
690 }
else classes.emplace_back(patternstring);
692 for(
const auto &t : classes) {
714 double triggerweight = 1.;
715 if(result) triggerweight = 1./result->GetVal();
716 AliDebugStream(1) <<
"Using trigger weight " << triggerweight <<
" for trigger " << triggerclass << std::endl;
717 return triggerweight;
719 AliDebugStream(1) <<
"No downscale factors loaded - using trigger weight 1" << std::endl;
725 AliInfoStream() <<
"Reading downscale factors from OCDB for run " << fInputEvent->GetRunNumber() << std::endl;
732 if(downscaleOCDB->GetCurrentRun() != fInputEvent->GetRunNumber()) downscaleOCDB->SetRun(fInputEvent->GetRunNumber());
733 const std::array<TString, 11> khwtriggers = {
"INT7",
"EMC7",
"DMC7",
"EJ1",
"EJ2",
"DJ1",
"DJ2",
"EG1",
"EG2",
"DG1",
"DG2"};
734 std::vector<TString> runtriggers = downscaleOCDB->GetTriggerClasses();
735 for(
const auto &t : khwtriggers){
736 std::function<bool (TString)> triggerfinder = [t](
const TString &
test) ->
bool {
737 if(!
test.Contains(t +
"-B-"))
return false;
740 auto entry = std::find_if(runtriggers.begin(), runtriggers.end(), triggerfinder);
741 if(entry != runtriggers.end()){
743 double downscalefactor = downscaleOCDB->GetDownscaleFactorForTriggerClass(triggername);
744 AliInfoStream() <<
"Applying downscale factor " << downscalefactor <<
" for trigger " << t <<
" (" << triggername <<
") for run " << fInputEvent->GetRunNumber() << std::endl;
747 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)
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