AliPhysics  31210d0 (31210d0)
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()){
250  AliErrorStream() << "Trigger maker not configured" << std::endl;
251  return false; // only run trigger maker in case it is configured
252  }
253  AliDebugStream(1) << "Looking for trigger patches ..." << std::endl;
254  fCaloTriggersOut->Delete(); // Needed to avoid memory leak
255  // prepare trigger maker
256  fTriggerMaker->Reset();
260  fTriggerMaker->SetIsMC(MCEvent());
261 
262  // QA on FastOR level (if enabled)
263  if(fDoQA){
264  double ecell, eadc, esmear;
265  int fastORAbsID;
266 #if ROOT_VERSION_CODE >= ROOT_VERSION(6,8,0)
267  // beautiful ROOT6 version - with generators
268  for(auto icol : ROOT::TSeqI(0, 48)){
269  for(auto irow : ROOT::TSeqI(0, fTriggerMaker->GetDataGridDimensionRows())){
270 #else
271  // stupid ROOT5-compatible version
272  for(int icol = 0; icol < 48; icol++){
273  for(int irow = 0; irow < fTriggerMaker->GetDataGridDimensionRows(); irow++){
274 #endif
275  ecell = fTriggerMaker->GetTriggerChannelEnergy(icol, irow);
276  eadc = fTriggerMaker->GetTriggerChannelEnergyRough(icol, irow);
277  esmear = fTriggerMaker->GetTriggerChannelEnergySmeared(icol, irow);
278  fGeom->GetTriggerMapping()->GetAbsFastORIndexFromPositionInEMCAL(icol, irow, fastORAbsID);
279  // suppress pairs at (0,0)
280  if(TMath::Abs(ecell) > DBL_EPSILON || TMath::Abs(eadc) > DBL_EPSILON){
281  fQAHistos->FillTH2("FastORCorrEnergyADCrough", ecell, eadc);
282  fQAHistos->FillTH2("FastORDiffEnergyADCrough", fastORAbsID, eadc - ecell);
283  }
284  if(TMath::Abs(ecell) > DBL_EPSILON || TMath::Abs(esmear) > DBL_EPSILON){
285  fQAHistos->FillTH2("FastORCorrEnergyESmear", ecell, esmear);
286  fQAHistos->FillTH2("FastORDiffEnergyEsmear", fastORAbsID, esmear - ecell);
287  }
288  if(TMath::Abs(eadc) > DBL_EPSILON || TMath::Abs(esmear) > DBL_EPSILON){
289  fQAHistos->FillTH2("FastORCorrADCroughEsmear", eadc, esmear);
290  fQAHistos->FillTH2("FastORDiffEsmearADCrough", fastORAbsID, esmear - eadc);
291  }
292  }
293  }
294  }
295 
296  std::vector<AliEMCALTriggerPatchInfo> patches;
297  fTriggerMaker->CreateTriggerPatches(InputEvent(), patches, fUseL0Amplitudes);
298  Int_t patchcounter = 0;
299  TString triggerstring;
300  AliDebugStream(2) << GetName() << ": Found " << patches.size() << " patches" << std::endl;
301  for(const auto &patchIter : patches){
302  if(fDoQA){
303  AliDebugStream(3) << GetName() << ": Next patch: size " << patchIter.GetPatchSize() << " , trigger bits " << std::bitset<sizeof(Int_t)*8>(patchIter.GetTriggerBits()) << std::endl;
304  // Handle types different - online - offline - re
305  if(patchIter.IsJetHigh() || patchIter.IsJetLow()) FillQAHistos("EJEOnline", patchIter);
306  if(patchIter.IsGammaHigh() || patchIter.IsGammaLow()) FillQAHistos("EGAOnline", patchIter);
307  if(patchIter.IsJetHighSimple() || patchIter.IsJetLowSimple()) FillQAHistos("EJEOffline", patchIter);
308  if(patchIter.IsGammaHighSimple() || patchIter.IsGammaLowSimple()) FillQAHistos("EGAOffline", patchIter);
309  if(patchIter.IsLevel0()) FillQAHistos("EL0Online", patchIter);
310  if(patchIter.IsRecalcJet()) FillQAHistos("EJERecalc", patchIter);
311  if(patchIter.IsRecalcGamma()) FillQAHistos("EGARecalc", patchIter);
312  // Redo checking of found trigger bits after masking of unwanted triggers
313  int tBits = patchIter.GetTriggerBits();
314  for(unsigned int ibit = 0; ibit < sizeof(tBits)*8; ibit++) {
315  if(tBits & (1 << ibit)){
316  fQAHistos->FillTH1("triggerBitsSel", ibit);
317  }
318  }
319  }
320  new((*fCaloTriggersOut)[patchcounter++]) AliEMCALTriggerPatchInfo(patchIter);
321  }
322  return true;
323 }
324 
326  AliDebugStream(1) << "Run changed, new run " << newrun << std::endl;
332  // QA: Monitor all channels which are masked in the current run
333  if(fDoQA && fQAHistos){
334  Int_t globCol(-1), globRow(-1) ;
335  for(const auto &ifastOrID : fTriggerMaker->GetListOfBadFastORAbsIDs()){
336  fGeom->GetTriggerMapping()->GetPositionInEMCALFromAbsFastORIndex(ifastOrID, globCol, globRow);
337  fQAHistos->FillTH2("FastORMaskOnline", globCol, globRow);
338  }
339  }
340 }
341 
343  AliInfoStream() << "Loading additional bad FEE channels from OADB container " << fBadFEEChannelOADB << std::endl;
345  if(fBadFEEChannelOADB.Contains("alien://") && !gGrid) TGrid::Connect("alien://");
346  AliOADBContainer badchannelDB("EmcalBadChannelsAdditional");
347  badchannelDB.InitFromFile(fBadFEEChannelOADB.Data(), "EmcalBadChannelsAdditional");
348  TObjArray *badchannelmap = static_cast<TObjArray *>(badchannelDB.GetObject(InputEvent()->GetRunNumber()));
349  if(!badchannelmap || !badchannelmap->GetEntries()) return;
350  for(TIter citer = TIter(badchannelmap).Begin(); citer != TIter::End(); ++citer){
351  TParameter<int> *channelID = static_cast<TParameter<int> *>(*citer);
352  fTriggerMaker->AddOfflineBadChannel(channelID->GetVal());
353  }
354 }
355 
357  AliInfoStream() << "Loading masked fastors from OCDB" << std::endl;
358  AliCDBManager *cdb = AliCDBManager::Instance();
359 
360  AliCDBEntry *en = cdb->Get("EMCAL/Calib/Trigger");
361  if(!en){
362  AliErrorStream() << GetName() << ": FastOR masking from CDB required, but OCDB entry is not available. No masking will be applied." << std::endl;
363  return;
364  }
365 
366  AliEMCALTriggerDCSConfig *trgconf = dynamic_cast<AliEMCALTriggerDCSConfig *>(en->GetObject());
367  if(!trgconf){
368  AliErrorStream() << GetName() << ": Failed decoding OCDB entry: Object is not of type AliEMCALTriggerDCSConfig." << std::endl;
369  return;
370  }
371 
372  // In run 1 the small supermodules were not contributing to triggers.
373  // Still the TRUs are counted. As access to the TRU config is not properly
374  // protected the loop over NTRU from the geometry will produce a segfault.
375  // As temporary workaround the loop limits are obtained from the DCS data itself.
376  Int_t fastOrAbsID(-1), ic(-1);
377  for(int itru = 0; itru < trgconf->GetTRUArr()->GetEntries(); itru++){
378  AliEMCALTriggerTRUDCSConfig *truconf = trgconf->GetTRUDCSConfig(itru);
379  // Test for each channel whether it is masked. The calculation is
380  // done reversely as the channel mapping is different between run1
381  // and run2: The loop is done over all masks and all bits inside the
382  // mask, and a handler matching to the correct mapping converts them
383  // into the channel ID. In case a masked channel is found, the absolute
384  // ID is calculated. For this the function GetAbsFastORIndexFromTRU
385  // is used - it is assumed that parameter 1 (iADC) corresponds to the
386  // channel ID.
387  for(unsigned int ifield = 0; ifield < 6; ifield++){
388  for(unsigned int ibit = 0; ibit < 16; ibit ++){
389  if((truconf->GetMaskReg(ifield) >> ibit) & 0x1){
390  try{
391  fGeom->GetTriggerMapping()->GetAbsFastORIndexFromTRU(RemapTRUIndex(itru), (ic = GetMaskHandler(itru)(ifield, ibit)), fastOrAbsID);
392  AliDebugStream(1) << GetName() << "Channel " << ic << " in TRU " << itru << " ( abs fastor " << fastOrAbsID << ") masked." << std::endl;
393  fTriggerMaker->AddFastORBadChannel(fastOrAbsID);
394  } catch (int exept){
395  AliErrorStream() << GetName() << "Invalid mask: (" << ifield << "|" << ibit << "), exception " << exept << " thrown. Mask will not be recognized" << std::endl;
396  }
397  }
398  }
399  }
400  }
401 }
402 
404  AliInfoStream() << "Initializing masked fastors from OADB container " << fMaskedFastorOADB.Data() << std::endl;
405  if(fMaskedFastorOADB.Contains("alien://") && !gGrid) TGrid::Connect("alien://");
406  AliOADBContainer badchannelDB("AliEmcalMaskedFastors");
407  badchannelDB.InitFromFile(fMaskedFastorOADB, "AliEmcalMaskedFastors");
408  TObjArray *badchannelmap = static_cast<TObjArray *>(badchannelDB.GetObject(InputEvent()->GetRunNumber()));
409  if(!badchannelmap || !badchannelmap->GetEntries()) return;
410  for(TIter citer = TIter(badchannelmap).Begin(); citer != TIter::End(); ++citer){
411  TParameter<int> *channelID = static_cast<TParameter<int> *>(*citer);
412  AliDebugStream(1) << GetName() << ": Found masked fastor channel " << channelID->GetVal() << std::endl;
413  fTriggerMaker->AddFastORBadChannel(channelID->GetVal());
414  }
415 }
416 
417 
418 std::function<int (unsigned int, unsigned int)> AliEmcalTriggerMakerTask::GetMaskHandler(int itru) const {
419  bool isTRUsmallSM = ((itru >= 30 && itru < 31) || (itru >= 44 && itru < 45)) ;
420  if(fGeom->GetTriggerMappingVersion() == 2 && !isTRUsmallSM){
421  // Run 2 - complicated TRU layout in 6 subregions
422  return [] (unsigned int ifield, unsigned int ibit) -> int {
423  if(ifield >= 6 || ibit >= 16) throw kInvalidChannelException;
424  const int kChannelMap[6][16] = {{ 8, 9,10,11,20,21,22,23,32,33,34,35,44,45,46,47}, // Channels in mask0
425  {56,57,58,59,68,69,70,71,80,81,82,83,92,93,94,95}, // Channels in mask1
426  { 4, 5, 6, 7,16,17,18,19,28,29,30,31,40,41,42,43}, // Channels in mask2
427  {52,53,54,55,64,65,66,67,76,77,78,79,88,89,90,91}, // Channels in mask3
428  { 0, 1, 2, 3,12,13,14,15,24,25,26,27,36,37,38,39}, // Channels in mask4
429  {48,49,50,51,60,61,62,63,72,73,74,75,84,85,86,87}}; // Channels in mask5
430  return kChannelMap[ifield][ibit];
431  };
432  } else {
433  // Run 1 - linear mapping was used
434  return [] (int ifield, int ibit) -> int {
435  if(ifield >= 6 || ibit >= 16) throw kInvalidChannelException;
436  return ifield * 16 + ibit;
437  };
438  }
439 }
440 
442  if(fGeom->GetTriggerMappingVersion() == 2){
443  const int trumapping[46] = {0,1,2,5,4,3,6,7,8,11,10,9,12,13,14,17,16,15,18,19,20,23,22,21,24,25,26,29,28,27,30,31,32,33,37,36,38,39,43,42,44,45,49,48,50,51};
444  return trumapping[itru];
445  } else return itru;
446 }
447 
448 void AliEmcalTriggerMakerTask::FillQAHistos(const TString &patchtype, const AliEMCALTriggerPatchInfo &recpatch){
449  fQAHistos->FillTH2("RCPos" + patchtype, recpatch.GetColStart(), recpatch.GetRowStart());
450  fQAHistos->FillTH2("EPCentPos" + patchtype, recpatch.GetEtaGeo(), recpatch.GetPhiGeo());
451  fQAHistos->FillTH2("PatchADCvsE" + patchtype, recpatch.GetADCAmp(), recpatch.GetPatchE());
452  fQAHistos->FillTH2("PatchEvsEsmear" + patchtype, recpatch.GetPatchE(), recpatch.GetSmearedEnergy());
453  fQAHistos->FillTH2("PatchADCvsEsmear" + patchtype, recpatch.GetADCAmp(), recpatch.GetSmearedEnergy());
454  fQAHistos->FillTH2("PatchADCOffvsE" + patchtype, recpatch.GetADCOfflineAmp(), recpatch.GetPatchE());
455  fQAHistos->FillTH2("PatchEvsADCrough" + patchtype, recpatch.GetPatchE(), recpatch.GetADCAmpGeVRough());
456 }
AliVVZERO * fV0
! VZERO data
AliEmcalTriggerMakerTask()
Dummy constructor.
void Reset()
Reset all data grids and VZERO-dependent L1 thresholds.
int RemapTRUIndex(int itru) const
Fix mapping in TRU index.
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.
std::function< int(unsigned int, unsigned int)> GetMaskHandler(int itru) const
Create functor handling the conversion between reg mask and channel.
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.
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.