30 #include <THashList.h> 33 #include <TLorentzVector.h> 35 #include <TObjArray.h> 36 #include <TParameter.h> 40 #include "AliEMCALGeometry.h" 41 #include "AliEMCALTriggerConstants.h" 42 #include "AliInputEventHandler.h" 44 #include "AliOADBContainer.h" 45 #include "AliVCaloCells.h" 46 #include "AliVCaloTrigger.h" 47 #include "AliVEvent.h" 48 #include "AliVVertex.h" 49 #include "AliDataFile.h" 61 fLocalInitialized(false),
63 fRequestTrigger(AliVEvent::kAny),
68 fNameMaskedFastorOADB(),
69 fNameMaskedCellOADB(AliDataFile::GetFileNameOADB("EMCAL/EMCALBadChannels.root").data()),
70 fMaskedFastorOADB(
nullptr),
71 fMaskedCellOADB(
nullptr)
76 AliEmcalFastOrMonitorTask::AliEmcalFastOrMonitorTask(
const char *name) :
80 fLocalInitialized(false),
82 fRequestTrigger(AliVEvent::kAny),
86 fNameMaskedFastorOADB(),
87 fNameMaskedCellOADB(AliDataFile::GetFileNameOADB(
"EMCAL/EMCALBadChannels.root").data()),
91 DefineOutput(1, TList::Class());
102 const int kMaxCol = 48, kMaxRow = 104, kMaxFastOr = kMaxRow * kMaxCol;
105 fHistos->
CreateTH1(
"hFastOrFrequencyL0",
"FastOr frequency at Level0", kMaxFastOr, -0.5, kMaxFastOr - 0.5);
106 fHistos->
CreateTH1(
"hFastOrFrequencyL1",
"FastOr frequency at Level1", kMaxFastOr, -0.5, kMaxFastOr - 0.5);
107 fHistos->
CreateTH2(
"hFastOrAmplitude",
"FastOr amplitudes; FastOR Abs ID; Amplitude", kMaxFastOr, -0.5, kMaxFastOr - 0.5, 513, -0.5, 512.5);
108 fHistos->
CreateTH2(
"hFastOrTimeSum",
"FastOr time sum; FastOR Abs ID; L0 time sum", kMaxFastOr, -0.5, kMaxFastOr - 0.5, 2049, -0.5, 2048.5);
109 fHistos->
CreateTH2(
"hFastOrTransverseTimeSum",
"FastOr transverse time sum; FastOR Abs ID; L0 transverse time sum", kMaxFastOr, -0.5, kMaxFastOr - 0.5, 2049, -0.5, 2048.5);
110 fHistos->
CreateTH2(
"hFastOrNL0Times",
"FastOr Number of L0 times; FastOR AbsID; Number of L0 times", kMaxFastOr, -0.5, kMaxFastOr - 0.5, 16, -0.5, 15.5);
111 fHistos->
CreateTH2(
"hFastOrColRowFrequencyL0",
"FastOr Frequency (col-row) at Level0; col; row", kMaxCol, -0.5, kMaxCol - 0.5, kMaxRow, -0.5, kMaxRow - 0.5);
112 fHistos->
CreateTH2(
"hFastOrColRowFrequencyL1",
"FastOr Frequency (col-row) at Level1; col; row", kMaxCol, -0.5, kMaxCol - 0.5, kMaxRow, -0.5, kMaxRow - 0.5);
113 fHistos->
CreateTH2(
"hEnergyFastorCell",
"Sum of cell energy vs. fastor Energy", 1000, 0., 20., 1000 , 0., 20.);
116 fHistos->
CreateTH1(
"hMaskedFastors",
"Index of masked FastOR; FastOR index; Counts", 3001, -0.5, 3000.5);
117 fHistos->
CreateTH1(
"hMaskedCells",
"Index of masked cell; Cell index; Counts", 20001, -0.5, 20000.5);
118 fHistos->
CreateTH1(
"hCellEnergyCount",
"Counts of non-0 cell entries; Cell index; Counts", 20001, -0.5, 20000.5);
121 TAxis fastorIDAxis(4992, -0.5, 4991.5), offlineaxis(200, 0., 20.), onlineaxis(200, 0., 20.), cellmaskaxis(5, -0.5, 4.5);
122 const TAxis *sparseaxis[4] = {&fastorIDAxis, &offlineaxis, &onlineaxis, &cellmaskaxis};
123 fastorIDAxis.SetNameTitle(
"fastorAbsID",
"FastOR abs. ID");
124 offlineaxis.SetNameTitle(
"offlinenergy",
"E_{2x2 cells} (GeV)");
125 onlineaxis.SetNameTitle(
"onlineenergy",
"E_{FastOR} (GeV)");
126 cellmaskaxis.SetNameTitle(
"maskedcells",
"Number of masked cells");
133 fGeom = AliEMCALGeometry::GetInstanceFromRunNumber(InputEvent()->
GetRunNumber());
135 int nrow =
fGeom->GetTriggerMappingVersion() == 2 ? 104 : 64;
152 AliInfoStream() <<
"Loading masked cells for run " << newrun << std::endl;
155 if(maskedfastors && maskedfastors->GetEntries()){
156 for(
auto masked : *maskedfastors){
167 AliInfoStream() <<
"Loading masked cells for run " << newrun << std::endl;
170 if(maskhistos && maskhistos->GetEntries()){
171 for(
auto mod : *maskhistos){
172 TH2 *modhist =
static_cast<TH2 *
>(mod);
173 TString modname = modhist->GetName();
174 AliDebugStream(1) <<
"Reading bad channels from histogram " << modname << std::endl;
175 modname.ReplaceAll(
"EMCALBadChannelMap_Mod",
"");
176 Int_t modid = modname.Atoi();
177 for(
int icol = 0; icol < 48; icol++){
178 for(
int irow = 0; irow < 24; irow++){
179 if(modhist->GetBinContent(icol, irow) > 0.){
180 int cellindex =
fGeom->GetAbsCellIdFromCellIndexes(modid, irow, icol);
201 fOldRun = InputEvent()->GetRunNumber();
210 const AliVVertex *vtx = fInputEvent->GetPrimaryVertex();
218 AliVCaloTrigger *triggerdata = InputEvent()->GetCaloTrigger(
"EMCAL");
219 triggerdata->Reset();
220 Int_t nl0times, l1timesum, fastOrID, globCol, globRow;
222 while(triggerdata->Next()){
223 triggerdata->GetAmplitude(amp);
224 triggerdata->GetNL0Times(nl0times);
225 triggerdata->GetL1TimeSum(l1timesum);
226 triggerdata->GetPosition(globCol, globRow);
227 fGeom->GetTriggerMapping()->GetAbsFastORIndexFromPositionInEMCAL(globCol, globRow, fastOrID);
244 fGeom->GetTriggerMapping()->GetCellIndexFromFastORIndex(fastOrID, fastorCells);
245 for(
int icell = 0; icell < 4; icell++){
248 double energydata[4] = {
249 static_cast<double>(fastOrID),
251 l1timesum * EMCALTrigger::kEMCL1ADCtoGeV,
252 static_cast<double>(ncellmasked)
263 AliVCaloCells *emccells = InputEvent()->GetEMCALCells();
264 for(
int icell = 0; icell < emccells->GetNumberOfCells(); icell++){
265 int position = emccells->GetCellNumber(icell);
266 double amplitude = emccells->GetAmplitude(icell);
270 AliErrorStream() <<
"Non-0 cell energy " << amplitude <<
" found for masked cell " << position << std::endl;
272 int absFastor, col, row;
273 fGeom->GetTriggerMapping()->GetFastORIndexFromCellIndex(position, absFastor);
274 fGeom->GetPositionInEMCALFromAbsFastORIndex(absFastor, col, row);
282 fGeom->GetTriggerMapping()->GetCellIndexFromFastORIndex(fastorAbsID, cellIDs);
283 std::vector<double> eta, phi;
284 for(
int i = 0l; i < 4; i++){
285 double etatmp, phitmp;
286 fGeom->EtaPhiFromIndex(cellIDs[i], etatmp, phitmp);
287 eta.push_back(etatmp);
288 phi.push_back(phitmp);
293 TVector3 fastorPos, vertexPos(vertex[0], vertex[1], vertex[2]);
294 fastorPos.SetPtEtaPhi(
fGeom->GetIPDistance(), TMath::Mean(eta.begin(), eta.end()), TMath::Mean(phi.begin(), phi.end()));
295 fastorPos -= vertexPos;
297 TLorentzVector evec(fastorPos, adc);
Bool_t fLocalInitialized
Switch whether task is initialized (for ExecOnce)
virtual void UserExec(Option_t *)
Event loop.
Double_t GetTransverseTimeSum(Int_t fastorAbsID, Double_t adc, const Double_t *vtx) const
Calculate transverse L1 time sum of a FastOR.
std::vector< int > fMaskedCells
List of masked cells.
Int_t fOldRun
Old Run (for RunChanged())
TString fNameMaskedFastorOADB
Name of the OADB container with masked fastors.
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
virtual ~AliEmcalFastOrMonitorTask()
Destructor.
ULong_t fRequestTrigger
Trigger selection bits.
THistManager * fHistos
! Histogram handler
std::vector< int > fMaskedFastors
List of masked fastors.
Namespace for EMCAL framework classes and task.
void FillTHnSparse(const char *name, const double *x, double weight=1., Option_t *opt="")
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.
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Create a new TH1 within the container.
AliOADBContainer * fMaskedFastorOADB
! OADB container with masked fastors
AliEMCALTriggerDataGrid< double > fCellData
Grid with summed cell data.
AliEMCALGeometry * fGeom
! EMCAL Geometry object
TString fNameMaskedCellOADB
Name of the OADB container with masked cells.
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.
virtual void UserCreateOutputObjects()
Creating output objects.
virtual void ExecOnce()
Initialization of the task.
Container class for histograms.
void LoadEventCellData()
Load event-dependent cell data.
Int_t GetRunNumber(TString)
AliOADBContainer * fMaskedCellOADB
! OADB container with masked cells
virtual void RunChanged(Int_t newrun)
Run-dependent setup of the task.
THnSparse * CreateTHnSparse(const char *name, const char *title, int ndim, const int *nbins, const double *min, const double *max, Option_t *opt="")
Create a new THnSparse within the container.
TString fTriggerPattern
Trigger string pattern used in addition to the trigger selection bits.
Simlple monitoring of EMCAL FastOr quantities.