31 #include <TClonesArray.h> 32 #include <THashList.h> 35 #include "AliAnalysisUtils.h" 36 #include "AliEMCALTriggerPatchInfo.h" 38 #include "AliInputEventHandler.h" 50 fSelectTrigger(AliVEvent::kINT7)
52 SetCaloTriggerPatchInfoName(
"EmcalTriggers");
55 AliEmcalTriggerRejectionMaker::AliEmcalTriggerRejectionMaker(
const char *name) :
58 fSelectTrigger(AliVEvent::kINT7)
73 fHistos->
CreateTH1(
"hTrueEventCount",
"Maximum energy patch in the event", 1, 0.5, 1.5);
75 const std::map<TString, TString> triggers {
76 {
"EGAOffline",
"offline EGA"}, {
"EJEOffline",
"offline EJE"}, {
"DGAOffline",
"offline DGA"}, {
"DJEOffline",
"offline DJE"},
77 {
"EGARecalc",
"recalc EGA"}, {
"EJERecalc",
"recalc EJE"}, {
"DGARecalc",
"recalc DGA"}, {
"DJERecalc",
"recalc DJE"},
78 {
"EG1Online",
"online EG1"}, {
"EG2Online",
"online EG2"}, {
"DG1Online",
"online DG1"}, {
"DG2Online",
"online DG2"},
79 {
"EJ1Online",
"online EJ1"}, {
"EJ2Online",
"online EJ2"}, {
"DJ1Online",
"online DJ1"}, {
"DJ2Online",
"online DJ2"},
82 for(
const auto &t : triggers)
83 fHistos->
CreateTH1(
"hPatchEnergyMax" + t.first,
"Energy spectrum of the maximum " + t.second +
" patch", 2000, 0., 200.);
86 for(
const auto &t : triggers)
87 fHistos->
CreateTH1(
"hPatchADCMax" + t.first,
"ADC spectrum of the maximum " + t.second +
" patch", 2049, -0.5, 2048.5);
90 for(
const auto &t : triggers)
91 fHistos->
CreateTH2(
"hPatchADCvsEnergyMax" + t.first,
"ADC vs. Energy of the maximum " + t.second +
" patch", 300, 0., 3000, 200, 0., 200.);
99 AliDebugStream(2) << GetName() <<
": Using custom event selection method" << std::endl;
101 AliErrorStream() << GetName() <<
": Trigger patch container not found but required" << std::endl;
104 if(!(fInputHandler->IsEventSelected() &
fSelectTrigger))
return false;
106 TString triggerstring = InputEvent()->GetFiredTriggerClasses();
109 AliDebugStream(3) << GetName() <<
"Event is selected for the given trigger" << std::endl;
114 AliDebugStream(3) << GetName() <<
": Applying vertex selection" << std::endl;
118 AliDebugStream(3) << GetName() <<
": Vertex selection passed" << std::endl;
121 AliDebugStream(2) << GetName() <<
"Event selected" << std::endl;
128 const AliEMCALTriggerPatchInfo *currentpatch(
nullptr),
129 *maxOfflineEGA(
nullptr),
130 *maxOfflineEJE(
nullptr),
131 *maxOfflineDGA(
nullptr),
132 *maxOfflineDJE(
nullptr),
133 *maxRecalcEGA(
nullptr),
134 *maxRecalcEJE(
nullptr),
135 *maxRecalcDGA(
nullptr),
136 *maxRecalcDJE(
nullptr),
137 *maxOnlineEG1(
nullptr),
138 *maxOnlineEG2(
nullptr),
139 *maxOnlineDG1(
nullptr),
140 *maxOnlineDG2(
nullptr),
141 *maxOnlineEJ1(
nullptr),
142 *maxOnlineEJ2(
nullptr),
143 *maxOnlineDJ1(
nullptr),
144 *maxOnlineDJ2(
nullptr);
148 currentpatch =
static_cast<AliEMCALTriggerPatchInfo *
>(patchiter);
151 if(currentpatch->IsOfflineSimple()){
152 if(currentpatch->IsGammaHighSimple()){
153 if(currentpatch->IsEMCal()){
154 if(!maxOfflineEGA || currentpatch->GetPatchE() > maxOfflineEGA->GetPatchE())
155 maxOfflineEGA = currentpatch;
157 if(!maxOfflineDGA || currentpatch->GetPatchE() > maxOfflineDGA->GetPatchE())
158 maxOfflineDGA = currentpatch;
160 }
else if(currentpatch->IsJetHighSimple()) {
161 if(currentpatch->IsEMCal()){
162 if(!maxOfflineEJE || currentpatch->GetPatchE() > maxOfflineEJE->GetPatchE())
163 maxOfflineEJE = currentpatch;
165 if(!maxOfflineDJE || currentpatch->GetPatchE() > maxOfflineDJE->GetPatchE())
166 maxOfflineDJE = currentpatch;
172 if(currentpatch->IsRecalc()){
173 if(currentpatch->IsGammaHighRecalc()){
174 if(currentpatch->IsEMCal()){
175 if(!maxRecalcEGA || currentpatch->GetADCAmp() > maxRecalcEGA->GetADCAmp())
176 maxRecalcEGA = currentpatch;
178 if(!maxRecalcDGA || currentpatch->GetADCAmp() > maxRecalcDGA->GetADCAmp())
179 maxRecalcDGA = currentpatch;
181 }
else if(currentpatch->IsJetHighSimple()) {
182 if(currentpatch->IsEMCal()){
183 if(!maxRecalcEJE || currentpatch->GetADCAmp() > maxRecalcEJE->GetADCAmp())
184 maxRecalcEJE = currentpatch;
186 if(!maxRecalcDJE || currentpatch->GetADCAmp() > maxRecalcDJE->GetADCAmp())
187 maxRecalcDJE = currentpatch;
193 if(currentpatch->IsGammaHigh() || currentpatch->IsGammaLow()){
194 if(currentpatch->IsEMCal()){
195 if(currentpatch->IsGammaHigh()){
196 if(!maxOnlineEG1 || currentpatch->GetADCAmp() > maxOnlineEG1->GetADCAmp())
197 maxOnlineEG1 = currentpatch;
199 if(currentpatch->IsGammaLow()){
200 if(!maxOnlineEG2 || currentpatch->GetADCAmp() > maxOnlineEG2->GetADCAmp())
201 maxOnlineEG2 = currentpatch;
204 if(currentpatch->IsGammaHigh()){
205 if(!maxOnlineDG1 || currentpatch->GetADCAmp() > maxOnlineDG1->GetADCAmp())
206 maxOnlineDG1 = currentpatch;
208 if(currentpatch->IsGammaLow()){
209 if(!maxOnlineDG2 || currentpatch->GetADCAmp() > maxOnlineDG2->GetADCAmp())
210 maxOnlineDG2 = currentpatch;
215 if(currentpatch->IsJetHigh() || currentpatch->IsJetLow()){
216 if(currentpatch->IsEMCal()){
217 if(currentpatch->IsJetHigh()){
218 if(!maxOnlineEJ1 || currentpatch->GetADCAmp() > maxOnlineEJ1->GetADCAmp())
219 maxOnlineEJ1 = currentpatch;
221 if(currentpatch->IsJetLow()){
222 if(!maxOnlineEJ2 || currentpatch->GetADCAmp() > maxOnlineEJ2->GetADCAmp())
223 maxOnlineEJ2 = currentpatch;
226 if(currentpatch->IsJetHigh()){
227 if(!maxOnlineDG1 || currentpatch->GetADCAmp() > maxOnlineDJ1->GetADCAmp())
228 maxOnlineDG1 = currentpatch;
230 if(currentpatch->IsJetLow()){
231 if(!maxOnlineDJ2 || currentpatch->GetADCAmp() > maxOnlineDJ2->GetADCAmp())
232 maxOnlineDJ2 = currentpatch;
238 std::function<void (const AliEMCALTriggerPatchInfo *, const TString &)> FillHistos = [
this](
const AliEMCALTriggerPatchInfo * testpatch,
const TString & triggername){
239 fHistos->
FillTH1(
"hPatchEnergyMax" + triggername, testpatch ? testpatch->GetPatchE() : 0.);
240 fHistos->
FillTH1(
"hPatchADCMax" + triggername, testpatch ? testpatch->GetADCAmp() : 0.);
241 fHistos->
FillTH2(
"hPatchADCvsEnergyMax" + triggername, testpatch ? testpatch->GetADCAmp() : 0, testpatch ? testpatch->GetPatchE() : 0.);
244 FillHistos(maxOfflineEGA,
"EGAOffline");
245 FillHistos(maxOfflineEJE,
"EJEOffline");
246 FillHistos(maxOfflineDGA,
"DGAOffline");
247 FillHistos(maxOfflineDJE,
"DJEOffline");
248 FillHistos(maxRecalcEGA,
"EGARecalc");
249 FillHistos(maxRecalcEJE,
"EJERecalc");
250 FillHistos(maxRecalcDGA,
"DGARecalc");
251 FillHistos(maxRecalcDJE,
"DJERecalc");
252 FillHistos(maxOnlineEG1,
"EG1Online");
253 FillHistos(maxOnlineEG2,
"EG2Online");
254 FillHistos(maxOnlineDG1,
"DG1Online");
255 FillHistos(maxOnlineDG2,
"DG2Online");
256 FillHistos(maxOnlineEJ1,
"EJ1Online");
257 FillHistos(maxOnlineEJ2,
"EJ2Online");
258 FillHistos(maxOnlineDJ1,
"DJ1Online");
259 FillHistos(maxOnlineDJ2,
"DJ2Online");
virtual void UserCreateOutputObjects()
ULong_t fSelectTrigger
Trigger bit selection.
Base task in the EMCAL framework.
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
virtual ~AliEmcalTriggerRejectionMaker()
Simple task monitoring the energy spectrum of the maximum patch in the event.
void SetCaloTriggerPatchInfoName(const char *n)
Namespace for EMCAL framework classes and task.
virtual Bool_t IsEventSelected()
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.
THashList * GetListOfHistograms() const
Get the list of histograms.
TString fTriggerPattern
Trigger pattern string (i.e. EG1)
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Create a new TH1 within the container.
AliAnalysisUtils * fAliAnalysisUtils
!vertex selection (optional)
Namespace for PWG framework classes.
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Fill a 1D histogram within the container.
THistManager * fHistos
! Local Histogram handler. Histograms are stored in the AliEmcalList later
AliEmcalList * fOutput
!output list
void SetMakeGeneralHistograms(Bool_t g)
TClonesArray * fTriggerPatchInfo
!trigger patch info array
Container class for histograms.
void UserCreateOutputObjects()
Main initialization function on the worker.