AliPhysics  d20dab4 (d20dab4)
AliEmcalTriggerMakerTask.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-2013, ALICE Experiment at CERN, All rights reserved. *
3  * *
4  * Author: The ALICE Off-line Project. *
5  * Contributors are mentioned in the code where appropriate. *
6  * *
7  * Permission to use, copy, modify and distribute this software and its *
8  * documentation strictly for non-commercial purposes is hereby granted *
9  * without fee, provided that the above copyright notice appears in all *
10  * copies and that both the copyright notice and this permission notice *
11  * appear in the supporting documentation. The authors make no claims *
12  * about the suitability of this software for any purpose. It is *
13  * provided "as is" without express or implied warranty. *
14  **************************************************************************/
15 #include <TClonesArray.h>
16 #include <TGrid.h>
17 #include <THashList.h>
18 #include <THistManager.h>
19 #include <TObjArray.h>
20 #include <TParameter.h>
21 #if ROOT_VERSION_CODE >= ROOT_VERSION(6,8,0)
22 #include <ROOT/TSeq.hxx>
23 #endif
24 
25 #include "AliCDBEntry.h"
26 #include "AliCDBManager.h"
27 #include "AliEMCALGeometry.h"
28 #include "AliEMCALTriggerBitConfig.h"
29 #include "AliEMCALTriggerDCSConfig.h"
30 #include "AliEMCALTriggerTRUDCSConfig.h"
31 #include "AliEMCALTriggerPatchInfo.h"
34 #include "AliEMCALTriggerMapping.h"
35 #include "AliLog.h"
36 #include "AliOADBContainer.h"
37 
38 #include <array>
39 #include <bitset>
40 #include <cfloat>
41 #include <iostream>
42 #include <memory>
43 #include <sstream>
44 #include <string>
45 
49 
52  fTriggerMaker(NULL),
53  fV0(NULL),
54  fCaloTriggersOutName("EmcalTriggers"),
55  fV0InName("AliAODVZERO"),
56  fBadFEEChannelOADB(""),
57  fMaskedFastorOADB(""),
58  fUseL0Amplitudes(kFALSE),
59  fLoadFastORMaskingFromOCDB(kFALSE),
60  fCaloTriggersOut(0),
61  fDoQA(kFALSE),
62  fQAHistos(NULL)
63 {
64 
65 }
66 
68  AliAnalysisTaskEmcal("AliEmcalTriggerMakerTask", doQA),
69  fTriggerMaker(NULL),
70  fV0(NULL),
71  fCaloTriggersOutName("EmcalTriggers"),
72  fV0InName("AliAODVZERO"),
73  fBadFEEChannelOADB(""),
74  fMaskedFastorOADB(""),
75  fUseL0Amplitudes(kFALSE),
76  fLoadFastORMaskingFromOCDB(kFALSE),
77  fCaloTriggersOut(NULL),
78  fDoQA(doQA),
79  fQAHistos(NULL)
80 {
82 }
83 
85  if(fTriggerMaker) delete fTriggerMaker;
86  if(fQAHistos) delete fQAHistos;
88 }
89 
95  const std::array<const TString, 3> kTriggerTypeNames = {{"EJE", "EGA", "EL0"}},
96  kPatchTypes = {{"Online", "Offline", "Recalc"}};
97 
98  if(fDoQA) AliInfoStream() << "Trigger maker - QA requested" << std::endl;
99  else AliInfoStream() << "Trigger maker - no QA requested" << std::endl;
100  if(!fOutput) AliErrorStream() << "No output container initialized" << std::endl;
101 
102  if(fDoQA){
103  if(fOutput){
104  AliInfoStream() << "Enabling QA for trigger maker" << std::endl;
105  fQAHistos = new THistManager("TriggerQA");
106 
107  for(const auto &triggertype : kTriggerTypeNames){
108  for(const auto &patchtype : kPatchTypes){
110  "RCPos" + triggertype + patchtype,
111  "Lower edge position of " + patchtype + " " + triggertype + " patches (col-row);iEta;iPhi",
112  48, -0.5, 47.5, 104, -0.5, 103.5
113  );
115  "EPCentPos" + triggertype + patchtype,
116  "Center position of the " + patchtype + " " + triggertype + " trigger patches;#eta;#phi",
117  20, -0.8, 0.8, 700, 0., 7.
118  );
120  "PatchADCvsE" + triggertype + patchtype,
121  "Patch ADC value for trigger type " + patchtype + " " + triggertype + "; Trigger ADC; FEE patch energy (GeV)",
122  2000, 0., 2000, 200, 0., 200
123  );
125  "PatchEvsEsmear" + triggertype + patchtype,
126  "Patch energy vs. smeared energy for " + patchtype + " " + triggertype +"; FEE patch energy (GeV); smeared FEE energy (GeV)",
127  200, 0., 200, 200, 0., 200
128  );
130  "PatchADCvsEsmear" + triggertype + patchtype,
131  "Patch ADC vs. smeared energy for " + patchtype + " " + triggertype + "; Trigger ADC; smeared FEE energy (GeV)",
132  2000, 0., 2000, 200, 0., 200
133  );
135  "PatchADCOffvsE" + triggertype + patchtype,
136  "Patch offline ADC value for trigger type " + patchtype + " " + triggertype + "; Trigger ADC; FEE patch energy (GeV)",
137  2000, 0., 2000, 200, 0., 200
138  );
140  "PatchEvsADCrough" + triggertype + patchtype,
141  "Patch Energy vs. ADC rough for trigger type " + patchtype + " " + triggertype + "; FEE patch energy (GeV); ADC rough (GeV)",
142  2000, 0., 2000, 200, 0., 200
143  );
144  }
145  }
146  fQAHistos->CreateTH1("triggerBitsAll", "Trigger bits for all incoming patches;bit nr", 64, -0.5, 63.5);
147  fQAHistos->CreateTH1("triggerBitsSel", "Trigger bits for reconstructed patches;bit nr", 64, -0.5, 63.5);
148  fQAHistos->CreateTH2("FastORMaskOnline", "Masked FastORs at online level; col; row", 48, -0.5, 47.5, 104, -0.5, 103.5);
149 
150  // Monitoring of FastOR raw signals:
151  fQAHistos->CreateTH2("FastORCorrEnergyADCrough", "FastOR cell energy vs. ADC energy", 200, 0., 20., 200, 0., 20.);
152  fQAHistos->CreateTH2("FastORCorrEnergyESmear", "FastOR cell energy vs. smeared energy", 200, 0., 20., 200, 0., 20.);
153  fQAHistos->CreateTH2("FastORCorrADCroughEsmear", "FastOR ADC rough vs. smeared energy", 200, 0., 20., 200, 0., 20.);
154  fQAHistos->CreateTH2("FastORDiffEnergyADCrough", "FastOR ADCrough - cell energy", 4994, -0.5, 4993.5, 200, -10., 10);
155  fQAHistos->CreateTH2("FastORDiffEnergyEsmear", "FastOR smeared energy - cell energy", 4994, -0.5, 4993.5, 200, -10., 10);
156  fQAHistos->CreateTH2("FastORDiffEsmearADCrough", "FastOR ADC rough - smeared energy", 4994, -0.5, 4993.5, 200, -10., 10);
157 
158  for(auto h : *(fQAHistos->GetListOfHistograms())) fOutput->Add(h);
159  fQAHistos->GetListOfHistograms()->SetOwner(false);
160  PostData(1, fOutput);
161  } else {
162  AliWarningStream() << "QA requested but no output container initialized - QA needs to be disabled" << std::endl;
163  fDoQA = kFALSE;
164  }
165  }
166 }
167 
169 {
170  AliEMCALTriggerBitConfig *triggerBitConfig(NULL);
171  switch(bitConfig){
172  case kNewConfig:
173  triggerBitConfig = new AliEMCALTriggerBitConfigNew();
174  break;
175  case kOldConfig:
176  triggerBitConfig = new AliEMCALTriggerBitConfigOld();
177  break;
178  }
179  fTriggerMaker->SetTriggerBitConfig(triggerBitConfig);
180 }
181 
184 
185  if (!fLocalInitialized) return;
186 
187  if (!fCaloTriggersOutName.IsNull()) {
188  fCaloTriggersOut = new TClonesArray("AliEMCALTriggerPatchInfo");
190 
191  if (!(InputEvent()->FindListObject(fCaloTriggersOutName))) {
192  InputEvent()->AddObject(fCaloTriggersOut);
193  } else {
194  fLocalInitialized = kFALSE;
195  AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fCaloTriggersOutName.Data()));
196  return;
197  }
198  }
199 
200  if (!fV0InName.IsNull()) {
201  fV0 = (AliVVZERO*)InputEvent()->FindListObject(fV0InName);
202  }
203 
204  // Configure trigger maker
205  if(!fTriggerMaker->IsConfigured()){
206  AliInfoStream() << "Trigger maker not yet configure - automatically configuring ..." << std::endl;
207  int runnumber = InputEvent()->GetRunNumber();
208  std::string dataset = "";
209  if(runnumber >= 145144 && runnumber <= 165746){
211  dataset = "pp 2011";
212  } else if(runnumber >= 167806 && runnumber <= 170593){
214  dataset = "Pb-Pb 2011";
215  } else if(runnumber >= 176326 && runnumber <= 193766){
217  dataset = "pp 2012";
218  } else if(runnumber >= 195344 && runnumber <= 197692){
219  // dataset contains also the setup for pp 2.76 TeV
221  dataset = "p-Pb 2013";
222  } else if((runnumber >= 224891 && runnumber <= 244628) || runnumber >= 253434){
223  // Configuration starting with LHC15f
225  dataset = "pp 2015-2016";
226  } else if(runnumber >= 244824 && runnumber <= 246994){
228  dataset = "Pb-Pb 2015";
229  }
230 
232  AliInfoStream() << "Applying configuration for " << dataset << std::endl;
233  } else {
234  AliErrorStream() << "No valid configuration found for the given dataset - trigger maker run loop disabled" << std::endl;
235  }
236  }
237 
239  fTriggerMaker->Init();
240 }
241 
249  if(!fTriggerMaker->IsConfigured()) return false; // only run trigger maker in case it is configured
250  fCaloTriggersOut->Delete(); // Needed to avoid memory leak
251  // prepare trigger maker
252  fTriggerMaker->Reset();
256  fTriggerMaker->SetIsMC(MCEvent());
257 
258  // QA on FastOR level (if enabled)
259  if(fDoQA){
260  double ecell, eadc, esmear;
261  int fastORAbsID;
262 #if ROOT_VERSION_CODE >= ROOT_VERSION(6,8,0)
263  // beautiful ROOT6 version - with generators
264  for(auto icol : ROOT::TSeqI(0, 48)){
265  for(auto irow : ROOT::TSeqI(0, fTriggerMaker->GetDataGridDimensionRows())){
266 #else
267  // stupid ROOT5-compatible version
268  for(int icol = 0; icol < 48; icol++){
269  for(int irow = 0; irow < fTriggerMaker->GetDataGridDimensionRows(); irow++){
270 #endif
271  ecell = fTriggerMaker->GetTriggerChannelEnergy(icol, irow);
272  eadc = fTriggerMaker->GetTriggerChannelEnergyRough(icol, irow);
273  esmear = fTriggerMaker->GetTriggerChannelEnergySmeared(icol, irow);
274  fGeom->GetTriggerMapping()->GetAbsFastORIndexFromPositionInEMCAL(icol, irow, fastORAbsID);
275  // suppress pairs at (0,0)
276  if(TMath::Abs(ecell) > DBL_EPSILON || TMath::Abs(eadc) > DBL_EPSILON){
277  fQAHistos->FillTH2("FastORCorrEnergyADCrough", ecell, eadc);
278  fQAHistos->FillTH2("FastORDiffEnergyADCrough", fastORAbsID, eadc - ecell);
279  }
280  if(TMath::Abs(ecell) > DBL_EPSILON || TMath::Abs(esmear) > DBL_EPSILON){
281  fQAHistos->FillTH2("FastORCorrEnergyESmear", ecell, esmear);
282  fQAHistos->FillTH2("FastORDiffEnergyEsmear", fastORAbsID, esmear - ecell);
283  }
284  if(TMath::Abs(eadc) > DBL_EPSILON || TMath::Abs(esmear) > DBL_EPSILON){
285  fQAHistos->FillTH2("FastORCorrADCroughEsmear", eadc, esmear);
286  fQAHistos->FillTH2("FastORDiffEsmearADCrough", fastORAbsID, esmear - eadc);
287  }
288  }
289  }
290  }
291 
292  std::vector<AliEMCALTriggerPatchInfo> patches;
293  fTriggerMaker->CreateTriggerPatches(InputEvent(), patches, fUseL0Amplitudes);
294  Int_t patchcounter = 0;
295  TString triggerstring;
296  AliDebugStream(2) << GetName() << ": Found " << patches.size() << " patches" << std::endl;
297  for(const auto &patchIter : patches){
298  if(fDoQA){
299  AliDebugStream(3) << GetName() << ": Next patch: size " << patchIter.GetPatchSize() << " , trigger bits " << std::bitset<sizeof(Int_t)*8>(patchIter.GetTriggerBits()) << std::endl;
300  // Handle types different - online - offline - re
301  if(patchIter.IsJetHigh() || patchIter.IsJetLow()) FillQAHistos("EJEOnline", patchIter);
302  if(patchIter.IsGammaHigh() || patchIter.IsGammaLow()) FillQAHistos("EGAOnline", patchIter);
303  if(patchIter.IsJetHighSimple() || patchIter.IsJetLowSimple()) FillQAHistos("EJEOffline", patchIter);
304  if(patchIter.IsGammaHighSimple() || patchIter.IsGammaLowSimple()) FillQAHistos("EGAOffline", patchIter);
305  if(patchIter.IsLevel0()) FillQAHistos("EL0Online", patchIter);
306  if(patchIter.IsRecalcJet()) FillQAHistos("EJERecalc", patchIter);
307  if(patchIter.IsRecalcGamma()) FillQAHistos("EGARecalc", patchIter);
308  // Redo checking of found trigger bits after masking of unwanted triggers
309  int tBits = patchIter.GetTriggerBits();
310  for(unsigned int ibit = 0; ibit < sizeof(tBits)*8; ibit++) {
311  if(tBits & (1 << ibit)){
312  fQAHistos->FillTH1("triggerBitsSel", ibit);
313  }
314  }
315  }
316  new((*fCaloTriggersOut)[patchcounter++]) AliEMCALTriggerPatchInfo(patchIter);
317  }
318  return true;
319 }
320 
322  AliDebugStream(1) << "Run changed, new run " << newrun << std::endl;
328  // QA: Monitor all channels which are masked in the current run
329  if(fDoQA && fQAHistos){
330  Int_t globCol(-1), globRow(-1) ;
331  for(const auto &ifastOrID : fTriggerMaker->GetListOfBadFastORAbsIDs()){
332  fGeom->GetTriggerMapping()->GetPositionInEMCALFromAbsFastORIndex(ifastOrID, globCol, globRow);
333  fQAHistos->FillTH2("FastORMaskOnline", globCol, globRow);
334  }
335  }
336 }
337 
339  AliInfoStream() << "Loading additional bad FEE channels from OADB container " << fBadFEEChannelOADB << std::endl;
341  if(fBadFEEChannelOADB.Contains("alien://") && !gGrid) TGrid::Connect("alien://");
342  AliOADBContainer badchannelDB("EmcalBadChannelsAdditional");
343  badchannelDB.InitFromFile(fBadFEEChannelOADB.Data(), "EmcalBadChannelsAdditional");
344  TObjArray *badchannelmap = static_cast<TObjArray *>(badchannelDB.GetObject(InputEvent()->GetRunNumber()));
345  if(!badchannelmap || !badchannelmap->GetEntries()) return;
346  for(TIter citer = TIter(badchannelmap).Begin(); citer != TIter::End(); ++citer){
347  TParameter<int> *channelID = static_cast<TParameter<int> *>(*citer);
348  fTriggerMaker->AddOfflineBadChannel(channelID->GetVal());
349  }
350 }
351 
353  AliInfoStream() << "Loading masked fastors from OCDB" << std::endl;
354  AliCDBManager *cdb = AliCDBManager::Instance();
355 
356  AliCDBEntry *en = cdb->Get("EMCAL/Calib/Trigger");
357  if(!en){
358  AliErrorStream() << GetName() << ": FastOR masking from CDB required, but OCDB entry is not available. No masking will be applied." << std::endl;
359  return;
360  }
361 
362  AliEMCALTriggerDCSConfig *trgconf = dynamic_cast<AliEMCALTriggerDCSConfig *>(en->GetObject());
363  if(!trgconf){
364  AliErrorStream() << GetName() << ": Failed decoding OCDB entry: Object is not of type AliEMCALTriggerDCSConfig." << std::endl;
365  return;
366  }
367 
368  // In run 1 the small supermodules were not contributing to triggers.
369  // Still the TRUs are counted. As access to the TRU config is not properly
370  // protected the loop over NTRU from the geometry will produce a segfault.
371  // As temporary workaround the loop limits are obtained from the DCS data itself.
372  Int_t fastOrAbsID(-1), ic(-1);
373  for(int itru = 0; itru < trgconf->GetTRUArr()->GetEntries(); itru++){
374  AliEMCALTriggerTRUDCSConfig *truconf = trgconf->GetTRUDCSConfig(itru);
375  // Test for each channel whether it is masked. The calculation is
376  // done reversely as the channel mapping is different between run1
377  // and run2: The loop is done over all masks and all bits inside the
378  // mask, and a handler matching to the correct mapping converts them
379  // into the channel ID. In case a masked channel is found, the absolute
380  // ID is calculated. For this the function GetAbsFastORIndexFromTRU
381  // is used - it is assumed that parameter 1 (iADC) corresponds to the
382  // channel ID.
383  for(unsigned int ifield = 0; ifield < 6; ifield++){
384  for(unsigned int ibit = 0; ibit < 16; ibit ++){
385  if((truconf->GetMaskReg(ifield) >> ibit) & 0x1){
386  try{
387  fGeom->GetTriggerMapping()->GetAbsFastORIndexFromTRU(itru, (ic = GetMaskHandler()(ifield, ibit)), fastOrAbsID);
388  AliDebugStream(1) << GetName() << "Channel " << ic << " in TRU " << itru << " ( abs fastor " << fastOrAbsID << ") masked." << std::endl;
389  fTriggerMaker->AddFastORBadChannel(fastOrAbsID);
390  } catch (int exept){
391  AliErrorStream() << GetName() << "Invalid mask: (" << ifield << "|" << ibit << "), exception " << exept << " thrown. Mask will not be recognized" << std::endl;
392  }
393  }
394  }
395  }
396  }
397 }
398 
400  AliInfoStream() << "Initializing masked fastors from OADB container " << fMaskedFastorOADB.Data() << std::endl;
401  if(fMaskedFastorOADB.Contains("alien://") && !gGrid) TGrid::Connect("alien://");
402  AliOADBContainer badchannelDB("AliEmcalMaskedFastors");
403  badchannelDB.InitFromFile(fMaskedFastorOADB, "AliEmcalMaskedFastors");
404  TObjArray *badchannelmap = static_cast<TObjArray *>(badchannelDB.GetObject(InputEvent()->GetRunNumber()));
405  if(!badchannelmap || !badchannelmap->GetEntries()) return;
406  for(TIter citer = TIter(badchannelmap).Begin(); citer != TIter::End(); ++citer){
407  TParameter<int> *channelID = static_cast<TParameter<int> *>(*citer);
408  AliDebugStream(1) << GetName() << ": Found masked fastor channel " << channelID->GetVal() << std::endl;
409  fTriggerMaker->AddFastORBadChannel(channelID->GetVal());
410  }
411 }
412 
413 
414 std::function<int (unsigned int, unsigned int)> AliEmcalTriggerMakerTask::GetMaskHandler() const {
415  if(fGeom->GetTriggerMappingVersion() == 2){
416  // Run 2 - complicated TRU layout in 6 subregions
417  return [] (unsigned int ifield, unsigned int ibit) -> int {
418  if(ifield >= 6 || ibit >= 16) throw kInvalidChannelException;
419  const int kChannelMap[6][16] = {{ 8, 9,10,11,20,21,22,23,32,33,34,35,44,45,46,47}, // Channels in mask0
420  {56,57,58,59,68,69,70,71,80,81,82,83,92,93,94,95}, // Channels in mask1
421  { 4, 5, 6, 7,16,17,18,19,28,29,30,31,40,41,42,43}, // Channels in mask2
422  {52,53,54,55,64,65,66,67,76,77,78,79,88,89,90,91}, // Channels in mask3
423  { 0, 1, 2, 3,12,13,14,15,24,25,26,27,36,37,38,39}, // Channels in mask4
424  {48,49,50,51,60,61,62,63,72,73,74,75,84,85,86,87}}; // Channels in mask5
425  return kChannelMap[ifield][ibit];
426  };
427  } else {
428  // Run 1 - linear mapping was used
429  return [] (int ifield, int ibit) -> int {
430  if(ifield >= 6 || ibit >= 16) throw kInvalidChannelException;
431  return ifield * 16 + ibit;
432  };
433  }
434 }
435 
436 void AliEmcalTriggerMakerTask::FillQAHistos(const TString &patchtype, const AliEMCALTriggerPatchInfo &recpatch){
437  fQAHistos->FillTH2("RCPos" + patchtype, recpatch.GetColStart(), recpatch.GetRowStart());
438  fQAHistos->FillTH2("EPCentPos" + patchtype, recpatch.GetEtaGeo(), recpatch.GetPhiGeo());
439  fQAHistos->FillTH2("PatchADCvsE" + patchtype, recpatch.GetADCAmp(), recpatch.GetPatchE());
440  fQAHistos->FillTH2("PatchEvsEsmear" + patchtype, recpatch.GetPatchE(), recpatch.GetSmearedEnergy());
441  fQAHistos->FillTH2("PatchADCvsEsmear" + patchtype, recpatch.GetADCAmp(), recpatch.GetSmearedEnergy());
442  fQAHistos->FillTH2("PatchADCOffvsE" + patchtype, recpatch.GetADCOfflineAmp(), recpatch.GetPatchE());
443  fQAHistos->FillTH2("PatchEvsADCrough" + patchtype, recpatch.GetPatchE(), recpatch.GetADCAmpGeVRough());
444 }
AliVVZERO * fV0
! VZERO data
AliEmcalTriggerMakerTask()
Dummy constructor.
void Reset()
Reset all data grids and VZERO-dependent L1 thresholds.
New configuration, distinction between high and low threshold.
void InitializeBadFEEChannels()
Initialize bad channels from the OADB container.
virtual void ExecOnce()
Initialize the trigger maker kernel.
void ConfigureForPbPb2015()
Configure the class for 2015 PbPb.
Base task in the EMCAL framework.
Bool_t fLocalInitialized
whether or not the task has been already initialized
virtual Bool_t Run()
Run trigger patch finding.
void ConfigureForPP2015()
Configure the class for 2015 pp.
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
void InitializeFastORMaskingFromOADB()
Initialize the FastOR masking from the OADB.
void AddFastORBadChannel(Short_t absId)
Add a FastOR bad channel to the list.
void SetTriggerBitConfig(const AliEMCALTriggerBitConfig *const config)
Set the trigger bit configuration applied for the given data set.
void ConfigureForPbPb2011()
Configure the class for 2011 PbPb.
Bool_t fUseL0Amplitudes
Use L0 amplitudes instead of L1 time sum (useful for runs where STU was not read) ...
virtual void UserCreateOutputObjects()
Initializing output objects.
void Init()
Initialize the trigger maker Kernel.
void CreateTriggerPatches(const AliVEvent *inputevent, std::vector< AliEMCALTriggerPatchInfo > &outputcont, Bool_t useL0amp=kFALSE)
Run patch finders on input data.
void ClearFastORBadChannels()
Clear FastOR bad channel list.
void SetIsMC(Bool_t isMC)
Define whether running on MC or not (for offset)
void ConfigureForPP2011()
Configure the class for 2011 pp.
Bool_t fLoadFastORMaskingFromOCDB
Load FastOR masking from the OCDB.
void ReadTriggerData(AliVCaloTrigger *trigger)
Read the calo trigger data.
virtual ~AliEmcalTriggerMakerTask()
Destructor.
TString fV0InName
name of output track array
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.
int Int_t
Definition: External.C:63
Old configuration, no distinction between high and low threshold.
void ConfigureForPP2012()
Configure the class for 2012 pp.
THashList * GetListOfHistograms() const
Get the list of histograms.
Definition: THistManager.h:671
AliEMCALGeometry * fGeom
!emcal geometry
void SetUseTriggerBitConfig(TriggerMakerBitConfig_t bitConfig)
Trigger bit configuration to be used in the trigger patch maker.
AliEmcalTriggerMakerKernel * fTriggerMaker
The actual trigger maker kernel.
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Create a new TH1 within the container.
void AddOfflineBadChannel(Short_t absId)
Add an offline bad channel to the set.
EMCAL trigger maker task.
double GetTriggerChannelEnergy(Int_t col, Int_t row) const
Get energy of the trigger channel estimated from cells (in col-row space)
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Fill a 1D histogram within the container.
const std::set< Short_t > & GetListOfBadFastORAbsIDs() const
Get the list of online masked FastOR&#39;s used in the trigger maker.
AliVCaloCells * fCaloCells
!cells
void BuildL1ThresholdsOffline(const AliVVZERO *vzdata)
Build VZERO-dependent thresholds for the offline trigger.
std::function< int(unsigned int, unsigned int)> GetMaskHandler() const
AliEmcalList * fOutput
!output list
void SetGeometry(const AliEMCALGeometry *const geo)
Provide the EMCAL geometry to the trigger maker Kernel.
virtual void RunChanged(Int_t newrun)
RunChanged method of the trigger maker.
void FillQAHistos(const TString &patchtype, const AliEMCALTriggerPatchInfo &recpatch)
Internal QA handler for trigger pathches of given type.
TString fBadFEEChannelOADB
name of the OADB container containing channels to be masked inside the trigger maker ...
TString fCaloTriggersOutName
name of output track array
TClonesArray * fCaloTriggersOut
! trigger array out
void ClearOfflineBadChannels()
Clear offline bad channel list.
double GetTriggerChannelEnergyRough(Int_t col, Int_t row) const
Get estimated energy of the trigger channel based on ADC measurement (in col-row space) ...
Container class for histograms.
Definition: THistManager.h:99
double GetTriggerChannelEnergySmeared(Int_t col, Int_t row) const
Get (simulated) smeared energy of a trigger channel estimated based on the measured energy from cells...
Kernel of the EMCAL trigger patch maker.
TString fMaskedFastorOADB
name of the OADB container containing fastors to be masked inside the trigger maker ...
virtual void ExecOnce()
Perform steps needed to initialize the analysis.
Int_t GetRunNumber(TString)
Definition: PlotMuonQA.C:2235
AliVCaloTrigger * fCaloTriggers
!calo triggers
void UserCreateOutputObjects()
Main initialization function on the worker.
void InitializeFastORMaskingFromOCDB()
Initialize the FastOR masking from the OCDB.
bool Bool_t
Definition: External.C:53
THistManager * fQAHistos
! Histograms for QA
double GetDataGridDimensionRows() const
Get the dimension of the underlying data grids in row direction.
Bool_t fDoQA
Fill QA histograms.
void ReadCellData(AliVCaloCells *cells)
Read the EMCAL cell data.
void ConfigureForPPb2013()
Configure the class for 2013 pPb.