AliPhysics  c923f52 (c923f52)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskEGAMonitor.cxx
Go to the documentation of this file.
1 #include <array>
2 #include <bitset>
3 #include <string>
4 #include <vector>
5 
6 #include <TClonesArray.h>
7 #include <THistManager.h>
8 #include <TGrid.h>
9 #include <THashList.h>
10 #include <TObjArray.h>
11 #include <TParameter.h>
12 
13 #include "AliAnalysisUtils.h"
15 #include "AliEMCALGeometry.h"
16 #include "AliEMCALTriggerMapping.h"
17 #include "AliEMCALTriggerPatchInfo.h"
18 #include "AliEMCALTriggerTypes.h"
19 #include "AliInputEventHandler.h"
20 #include "AliLog.h"
21 #include "AliOADBContainer.h"
22 #include "AliVVertex.h"
23 #include "AliVCaloTrigger.h"
24 
28 
29 namespace EMCalTriggerPtAnalysis {
30 
31 AliAnalysisTaskEGAMonitor::AliAnalysisTaskEGAMonitor() :
33  fHistos(nullptr),
34  fUseRecalcPatches(false),
35  fRecalcLow(0.),
36  fRecalcHigh(0.),
37  fNameMaskedFastorOADB(""),
38  fMaskedFastorOADB(nullptr),
39  fMaskedFastors()
40 {
41  this->SetNeedEmcalGeom(true);
42  this->SetCaloTriggerPatchInfoName("EmcalTriggers");
43 }
44 
46  AliAnalysisTaskEmcal(name, true),
47  fHistos(nullptr),
48  fUseRecalcPatches(false),
49  fRecalcLow(0.),
50  fRecalcHigh(0.),
51  fNameMaskedFastorOADB(""),
52  fMaskedFastorOADB(nullptr),
53  fMaskedFastors()
54 {
55  this->SetNeedEmcalGeom(true);
56  this->SetCaloTriggerPatchInfoName("EmcalTriggers");
57 }
58 
60  if(fHistos) delete fHistos;
61  if(fGeom) delete fGeom;
62 }
63 
66 
67  fAliAnalysisUtils = new AliAnalysisUtils;
68 
69  fHistos = new THistManager("EGAhistos");
70  fHistos->CreateTH1("hEventCountEGA", "Number of EGA triggered events", 1, 0.5, 1.5);
71  fHistos->CreateTH1("hEventCountINT7", "Number of INT7 triggered events", 1, 0.5, 1.5);
72  std::array<std::string, 5> triggers = {"EG1", "EG2", "DG1", "DG2", "MB"};
73  for(const auto &t : triggers){
74  fHistos->CreateTH2(Form("hColRowG1%s", t.c_str()), Form("Col-Row distribution of online G1 patches for trigger %s", t.c_str()), 48, -0.5, 47.5, 104, -0.5, 103.5);
75  fHistos->CreateTH2(Form("hColRowG2%s", t.c_str()), Form("Col-Row distribution of online G2 patches for trigger %s", t.c_str()), 48, -0.5, 47.5, 104, -0.5, 103.5);
76  fHistos->CreateTH2(Form("hColRowGall%s", t.c_str()), Form("Col-Row distribution of online gamma patches for trigger %s", t.c_str()), 48, -0.5, 47.5, 104, -0.5, 103.5);
77  fHistos->CreateTH1(Form("hADCRecalcGall%s", t.c_str()), Form("ADC distribution of gamma recalc patches for trigger %s", t.c_str()), 2049, -0.5, 2048.5);
78  fHistos->CreateTH1(Form("hADCRecalcG1%s", t.c_str()), Form("ADC distribution of G1 recalc patches for trigger %s", t.c_str()), 2049, -0.5, 2048.5);
79  fHistos->CreateTH1(Form("hADCRecalcG2%s", t.c_str()), Form("ADC distribution of G2 recalc patches for trigger %s", t.c_str()), 2049, -0.5, 2048.5);
80  }
81  for(auto h : *(fHistos->GetListOfHistograms())) fOutput->Add(h);
82 
83  PostData(1, fOutput);
84 }
85 
87  if(!fAliAnalysisUtils->IsVertexSelected2013pA(InputEvent())) return false;
88  if(fAliAnalysisUtils->IsPileUpEvent(InputEvent())) return false;
89  if(!(fInputHandler->IsEventSelected() & (AliVEvent::kEMCEGA | AliVEvent::kINT7))) return false;
90  AliDebugStream(1) << GetName() << ": Event is selected" << std::endl;
91  return true;
92 }
93 
95  std::vector<std::string> triggers;
96  if(fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA){
97  if(InputEvent()->GetFiredTriggerClasses().Contains("EG1")) triggers.push_back("EG1");
98  if(InputEvent()->GetFiredTriggerClasses().Contains("EG2")) triggers.push_back("EG2");
99  if(InputEvent()->GetFiredTriggerClasses().Contains("DG1")) triggers.push_back("DG1");
100  if(InputEvent()->GetFiredTriggerClasses().Contains("DG2")) triggers.push_back("DG2");
101  fHistos->FillTH1("hEventCountEGA", 1);
102  } else if(fInputHandler->IsEventSelected() & AliVEvent::kINT7){
103  triggers.push_back("MB");
104  fHistos->FillTH1("hEventCountINT7", 1);
105  }
106  if(!triggers.size()) return false;
107 
108  AliDebugStream(1) << GetName() << ": Finding firing trigger patches" << std::endl;
109  if(fUseRecalcPatches){
110  for(auto p : *(this->fTriggerPatchInfo)){
111  AliEMCALTriggerPatchInfo *patch = static_cast<AliEMCALTriggerPatchInfo *>(p);
112  if(!patch->IsGammaLowRecalc()) continue;
113 
114  // reject patches having a masked fastor
115  if(IsPatchRejected(patch->GetColStart(), patch->GetRowStart())) continue;
116 
117  for(const auto &t : triggers){
118  fHistos->FillTH2(Form("hColRowGall%s", t.c_str()), patch->GetColStart(), patch->GetRowStart());
119  fHistos->FillTH1(Form("hADCRecalcGall%s", t.c_str()), patch->GetADCAmp());
120  }
121  if(patch->GetADCAmp() > fRecalcLow){
122  for(const auto &t : triggers){
123  fHistos->FillTH2(Form("hColRowG2%s", t.c_str()), patch->GetColStart(), patch->GetRowStart());
124  fHistos->FillTH1(Form("hADCRecalcG2%s", t.c_str()), patch->GetADCAmp());
125  }
126  }
127  if(patch->GetADCAmp() > fRecalcHigh){
128  for(const auto &t : triggers){
129  fHistos->FillTH2(Form("hColRowG1%s", t.c_str()), patch->GetColStart(), patch->GetRowStart());
130  fHistos->FillTH1(Form("hADCRecalcG1%s", t.c_str()), patch->GetADCAmp());
131  }
132  }
133  }
134  } else {
135  AliVCaloTrigger *emctrigraw = InputEvent()->GetCaloTrigger("EMCAL");
136 
137  emctrigraw->Reset();
138  Int_t col(-1), row(-1), triggerbits(0);
139  while(emctrigraw->Next()){
140  emctrigraw->GetTriggerBits(triggerbits);
141  if(triggerbits) AliDebugStream(2) << "Trigger bits: " << std::bitset<sizeof(Int_t) * 8>(triggerbits) << std::endl;
142  if(!((triggerbits & (BIT(kL1GammaHigh) | BIT(kL1GammaLow))) || (triggerbits & (BIT(kL1GammaHigh+kTriggerTypeEnd) | BIT(kL1GammaLow+kTriggerTypeEnd))))) continue;
143  AliDebugStream(2) << "Found gamma trigger bits" << std::endl;
144 
145  emctrigraw->GetPosition(col, row);
146  if(IsPatchRejected(col, row)) continue;
147  if((triggerbits & BIT(kL1GammaHigh)) || (triggerbits & BIT(kL1GammaHigh+kTriggerTypeEnd))){
148  for(const auto &t : triggers) fHistos->FillTH2(Form("hColRowG1%s", t.c_str()), col, row);
149  }
150  if((triggerbits & BIT(kL1GammaLow)) || (triggerbits & BIT(kL1GammaLow+kTriggerTypeEnd))){
151  for(const auto &t : triggers) fHistos->FillTH2(Form("hColRowG2%s", t.c_str()), col, row);
152  }
153  }
154  }
155 
156  return true;
157 }
158 
161 
162  if(!fLocalInitialized) return;
163 
164  if(fNameMaskedFastorOADB.Length()){
165  if(fNameMaskedFastorOADB.Contains("alien://") && ! gGrid) TGrid::Connect("alien://");
166  fMaskedFastorOADB = new AliOADBContainer("AliEmcalMaskedFastors");
167  fMaskedFastorOADB->InitFromFile(fNameMaskedFastorOADB.Data(), "AliEmcalMaskedFastors");
168  }
169 }
170 
172  if(fMaskedFastorOADB){
173  fMaskedFastors.clear();
174  for(auto p : *(static_cast<TObjArray *>(fMaskedFastorOADB->GetObject(runnumber)))){
175  fMaskedFastors.push_back(static_cast<TParameter<int> *>(p)->GetVal());
176  }
177  }
178 }
179 
181  bool rejected(false);
182  for(int icol = col; icol < col + 2; icol++){
183  for(int irow = row; irow < row + 2; irow++){
184  int fabsID;
185  fGeom->GetTriggerMapping()->GetAbsFastORIndexFromPositionInEMCAL(icol,irow, fabsID);
186  for(auto m : fMaskedFastors){
187  if(fabsID == m){
188  rejected = true;
189  break;
190  }
191  }
192  }
193  }
194  return rejected;
195 }
196 
197 } /* namespace EMCalTriggerPtAnalysis */
Double_t fRecalcHigh
High threshold for recalc gamma trigger.
Base task in the EMCAL framework.
Bool_t fLocalInitialized
whether or not the task has been already initialized
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
TString fNameMaskedFastorOADB
Name of the OADB container with the masked fastor information.
void SetCaloTriggerPatchInfoName(const char *n)
Bool_t fUseRecalcPatches
Defined whether to use recalc patches.
Simplistic class, checks distribution of the online EGA trigger patches.
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
int Int_t
Definition: External.C:63
THashList * GetListOfHistograms() const
Definition: THistManager.h:504
AliEMCALGeometry * fGeom
!emcal geometry
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
AliAnalysisUtils * fAliAnalysisUtils
!vertex selection (optional)
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
AliOADBContainer * fMaskedFastorOADB
OADB container with masked fastor information.
AliEmcalList * fOutput
!output list
Double_t fRecalcLow
Low threshold for recalc gamma trigger.
TClonesArray * fTriggerPatchInfo
!trigger patch info array
void SetNeedEmcalGeom(Bool_t n)
std::vector< int > fMaskedFastors
List of masked fastors.
Container class for histograms for the high- charged particle analysis.
Definition: THistManager.h:43
ClassImp(AliAnalysisTaskCascadeTester) AliAnalysisTaskCascadeTester