AliPhysics  07fddbf (07fddbf)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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"
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 <sstream>
43 #include <string>
44 
48 
51  fTriggerMaker(NULL),
52  fV0(NULL),
53  fCaloTriggersOutName("EmcalTriggers"),
54  fV0InName("AliAODVZERO"),
55  fBadFEEChannelOADB(""),
56  fMaskedFastorOADB(""),
57  fUseL0Amplitudes(kFALSE),
58  fLoadFastORMaskingFromOCDB(kFALSE),
59  fCaloTriggersOut(0),
60  fDoQA(kFALSE),
61  fQAHistos(NULL)
62 {
63 
64 }
65 
67  AliAnalysisTaskEmcal("AliEmcalTriggerMakerTask", doQA),
68  fTriggerMaker(NULL),
69  fV0(NULL),
70  fCaloTriggersOutName("EmcalTriggers"),
71  fV0InName("AliAODVZERO"),
72  fBadFEEChannelOADB(""),
73  fMaskedFastorOADB(""),
74  fUseL0Amplitudes(kFALSE),
75  fLoadFastORMaskingFromOCDB(kFALSE),
76  fCaloTriggersOut(NULL),
77  fDoQA(doQA),
78  fQAHistos(NULL)
79 {
81 }
82 
84  if(fTriggerMaker) delete fTriggerMaker;
85 }
86 
92  const std::array<const TString, 3> kTriggerTypeNames = {"EJE", "EGA", "EL0"},
93  kPatchTypes = {"Online", "Offline", "Recalc"};
94 
95  if(fDoQA) AliInfoStream() << "Trigger maker - QA requested" << std::endl;
96  else AliInfoStream() << "Trigger maker - no QA requested" << std::endl;
97  if(!fOutput) AliErrorStream() << "No output container initialized" << std::endl;
98 
99  if(fDoQA){
100  if(fOutput){
101  AliInfoStream() << "Enabling QA for trigger maker" << std::endl;
102  fQAHistos = new THistManager("TriggerQA");
103 
104  for(const auto &triggertype : kTriggerTypeNames){
105  for(const auto &patchtype : kPatchTypes){
107  "RCPos" + triggertype + patchtype,
108  "Lower edge position of " + patchtype + " " + triggertype + " patches (col-row);iEta;iPhi",
109  48, -0.5, 47.5, 104, -0.5, 103.5
110  );
112  "EPCentPos" + triggertype + patchtype,
113  "Center position of the " + patchtype + " " + triggertype + " trigger patches;#eta;#phi",
114  20, -0.8, 0.8, 700, 0., 7.
115  );
117  "PatchADCvsE" + triggertype + patchtype,
118  "Patch ADC value for trigger type " + patchtype + " " + triggertype + "; Trigger ADC; FEE patch energy (GeV)",
119  2000, 0., 2000, 200, 0., 200
120  );
122  "PatchEvsEsmear" + triggertype + patchtype,
123  "Patch energy vs. smeared energy for " + patchtype + " " + triggertype +"; FEE patch energy (GeV); smeared FEE energy (GeV)",
124  200, 0., 200, 200, 0., 200
125  );
127  "PatchADCvsEsmear" + triggertype + patchtype,
128  "Patch ADC vs. smeared energy for " + patchtype + " " + triggertype + "; Trigger ADC; smeared FEE energy (GeV)",
129  2000, 0., 2000, 200, 0., 200
130  );
132  "PatchADCOffvsE" + triggertype + patchtype,
133  "Patch offline ADC value for trigger type " + patchtype + " " + triggertype + "; Trigger ADC; FEE patch energy (GeV)",
134  2000, 0., 2000, 200, 0., 200
135  );
137  "PatchEvsADCrough" + triggertype + patchtype,
138  "Patch Energy vs. ADC rough for trigger type " + patchtype + " " + triggertype + "; FEE patch energy (GeV); ADC rough (GeV)",
139  2000, 0., 2000, 200, 0., 200
140  );
141  }
142  }
143  fQAHistos->CreateTH1("triggerBitsAll", "Trigger bits for all incoming patches;bit nr", 64, -0.5, 63.5);
144  fQAHistos->CreateTH1("triggerBitsSel", "Trigger bits for reconstructed patches;bit nr", 64, -0.5, 63.5);
145  fQAHistos->CreateTH2("FastORMaskOnline", "Masked FastORs at online level; col; row", 48, -0.5, 47.5, 104, -0.5, 103.5);
146 
147  // Monitoring of FastOR raw signals:
148  fQAHistos->CreateTH2("FastORCorrEnergyADCrough", "FastOR cell energy vs. ADC energy", 200, 0., 20., 200, 0., 20.);
149  fQAHistos->CreateTH2("FastORCorrEnergyESmear", "FastOR cell energy vs. smeared energy", 200, 0., 20., 200, 0., 20.);
150  fQAHistos->CreateTH2("FastORCorrADCroughEsmear", "FastOR ADC rough vs. smeared energy", 200, 0., 20., 200, 0., 20.);
151  fQAHistos->CreateTH2("FastORDiffEnergyADCrough", "FastOR ADCrough - cell energy", 4994, -0.5, 4993.5, 200, -10., 10);
152  fQAHistos->CreateTH2("FastORDiffEnergyEsmear", "FastOR smeared energy - cell energy", 4994, -0.5, 4993.5, 200, -10., 10);
153  fQAHistos->CreateTH2("FastORDiffEsmearADCrough", "FastOR ADC rough - smeared energy", 4994, -0.5, 4993.5, 200, -10., 10);
154 
155  for(auto h : *(fQAHistos->GetListOfHistograms())) fOutput->Add(h);
156  PostData(1, fOutput);
157  } else {
158  AliWarningStream() << "QA requested but no output container initialized - QA needs to be disabled" << std::endl;
159  fDoQA = kFALSE;
160  }
161  }
162 }
163 
165 {
166  AliEMCALTriggerBitConfig *triggerBitConfig(NULL);
167  switch(bitConfig){
168  case kNewConfig:
169  triggerBitConfig = new AliEMCALTriggerBitConfigNew();
170  break;
171  case kOldConfig:
172  triggerBitConfig = new AliEMCALTriggerBitConfigOld();
173  break;
174  }
175  fTriggerMaker->SetTriggerBitConfig(triggerBitConfig);
176 }
177 
180 
181  if (!fLocalInitialized) return;
182 
183  if (!fCaloTriggersOutName.IsNull()) {
184  fCaloTriggersOut = new TClonesArray("AliEMCALTriggerPatchInfoV1");
186 
187  if (!(InputEvent()->FindListObject(fCaloTriggersOutName))) {
188  InputEvent()->AddObject(fCaloTriggersOut);
189  }
190  else {
191  fLocalInitialized = kFALSE;
192  AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fCaloTriggersOutName.Data()));
193  return;
194  }
195  }
196 
197  if (!fV0InName.IsNull()) {
198  fV0 = (AliVVZERO*)InputEvent()->FindListObject(fV0InName);
199  }
200 
201  // Configure trigger maker
202  if(!fTriggerMaker->IsConfigured()){
203  AliInfoStream() << "Trigger maker not yet configure - automatically configuring ..." << std::endl;
204  int runnumber = InputEvent()->GetRunNumber();
205  std::string dataset = "";
206  if(runnumber >= 145144 && runnumber <= 165746){
208  dataset = "pp 2011";
209  } else if(runnumber >= 167806 && runnumber <= 170593){
211  dataset = "Pb-Pb 2011";
212  } else if(runnumber >= 176326 && runnumber <= 193766){
214  dataset = "pp 2012";
215  } else if(runnumber >= 195344 && runnumber <= 197692){
216  // dataset contains also the setup for pp 2.76 TeV
218  dataset = "p-Pb 2013";
219  } else if((runnumber >= 224891 && runnumber <= 244628) || runnumber >= 253434){
220  // Configuration starting with LHC15f
222  dataset = "pp 2015-2016";
223  } else if(runnumber >= 244824 && runnumber <= 246994){
225  dataset = "Pb-Pb 2015";
226  }
227 
229  AliInfoStream() << "Applying configuration for " << dataset << std::endl;
230  } else {
231  AliErrorStream() << "No valid configuration found for the given dataset - trigger maker disabled" << std::endl;
232  fLocalInitialized = false;
233  }
234  }
235 
237  fTriggerMaker->Init();
238 }
239 
247  fCaloTriggersOut->Clear();
248  // prepare trigger maker
249  fTriggerMaker->Reset();
253  fTriggerMaker->SetIsMC(MCEvent());
254 
255  // QA on FastOR level (if enabled)
256  if(fDoQA){
257  double ecell, eadc, esmear;
258  int fastORAbsID;
259 #if ROOT_VERSION_CODE >= ROOT_VERSION(6,8,0)
260  // beautiful ROOT6 version - with generators
261  for(auto icol : ROOT::TSeqI(0, 48)){
262  for(auto irow : ROOT::TSeqI(0, fTriggerMaker->GetDataGridDimensionRows())){
263 #else
264  // stupid ROOT5-compatible version
265  for(int icol = 0; icol < 48; icol++){
266  for(int irow = 0; irow < fTriggerMaker->GetDataGridDimensionRows(); irow++){
267 #endif
268  ecell = fTriggerMaker->GetTriggerChannelEnergy(icol, irow);
269  eadc = fTriggerMaker->GetTriggerChannelEnergyRough(icol, irow);
270  esmear = fTriggerMaker->GetTriggerChannelEnergySmeared(icol, irow);
271  fGeom->GetTriggerMapping()->GetAbsFastORIndexFromPositionInEMCAL(icol, irow, fastORAbsID);
272  // suppress pairs at (0,0)
273  if(TMath::Abs(ecell) > DBL_EPSILON || TMath::Abs(eadc) > DBL_EPSILON){
274  fQAHistos->FillTH2("FastORCorrEnergyADCrough", ecell, eadc);
275  fQAHistos->FillTH2("FastORDiffEnergyADCrough", fastORAbsID, eadc - ecell);
276  }
277  if(TMath::Abs(ecell) > DBL_EPSILON || TMath::Abs(esmear) > DBL_EPSILON){
278  fQAHistos->FillTH2("FastORCorrEnergyESmear", ecell, esmear);
279  fQAHistos->FillTH2("FastORDiffEnergyEsmear", fastORAbsID, esmear - ecell);
280  }
281  if(TMath::Abs(eadc) > DBL_EPSILON || TMath::Abs(esmear) > DBL_EPSILON){
282  fQAHistos->FillTH2("FastORCorrADCroughEsmear", eadc, esmear);
283  fQAHistos->FillTH2("FastORDiffEsmearADCrough", fastORAbsID, esmear - eadc);
284  }
285  }
286  }
287  }
288 
290  AliEMCALTriggerPatchInfoV1 *recpatch = NULL;
291  Int_t patchcounter = 0;
292  TString triggerstring;
293  AliDebugStream(2) << GetName() << ": Found " << patches->GetEntries() << " patches" << std::endl;
294  for(TIter patchIter = TIter(patches).Begin(); patchIter != TIter::End(); ++patchIter){
295  recpatch = dynamic_cast<AliEMCALTriggerPatchInfoV1 *>(*patchIter);
296  if(fDoQA){
297  AliDebugStream(3) << GetName() << ": Next patch: size " << recpatch->GetPatchSize() << " , trigger bits " << std::bitset<sizeof(Int_t)*8>(recpatch->GetTriggerBits()) << std::endl;
298  // Handle types different - online - offline - re
299  if(recpatch->IsJetHigh() || recpatch->IsJetLow()) FillQAHistos("EJEOnline", *recpatch);
300  if(recpatch->IsGammaHigh() || recpatch->IsGammaLow()) FillQAHistos("EGAOnline", *recpatch);
301  if(recpatch->IsJetHighSimple() || recpatch->IsJetLowSimple()) FillQAHistos("EJEOffline", *recpatch);
302  if(recpatch->IsGammaHighSimple() || recpatch->IsGammaLowSimple()) FillQAHistos("EGAOffline", *recpatch);
303  if(recpatch->IsLevel0()) FillQAHistos("EL0Online", *recpatch);
304  if(recpatch->IsRecalcJet()) FillQAHistos("EJERecalc", *recpatch);
305  if(recpatch->IsRecalcGamma()) FillQAHistos("EGARecalc", *recpatch);
306  // Redo checking of found trigger bits after masking of unwanted triggers
307  int tBits = recpatch->GetTriggerBits();
308  for(unsigned int ibit = 0; ibit < sizeof(tBits)*8; ibit++) {
309  if(tBits & (1 << ibit)){
310  fQAHistos->FillTH1("triggerBitsSel", ibit);
311  }
312  }
313  }
314  new((*fCaloTriggersOut)[patchcounter++]) AliEMCALTriggerPatchInfoV1(*recpatch);
315  }
316  if(patches) delete patches;
317  return true;
318 }
319 
326  // QA: Monitor all channels which are masked in the current run
327  if(fDoQA && fQAHistos){
328  Int_t globCol(-1), globRow(-1) ;
329  for(const auto &ifastOrID : fTriggerMaker->GetListOfBadFastORAbsIDs()){
330  fGeom->GetTriggerMapping()->GetPositionInEMCALFromAbsFastORIndex(ifastOrID, globCol, globRow);
331  fQAHistos->FillTH2("FastORMaskOnline", globCol, globRow);
332  }
333  }
334 }
335 
337  AliInfoStream() << "Loading additional bad FEE channels from OADB container " << fBadFEEChannelOADB << std::endl;
339  if(fBadFEEChannelOADB.Contains("alien://") && !gGrid) TGrid::Connect("alien://");
340  AliOADBContainer badchannelDB("EmcalBadChannelsAdditional");
341  badchannelDB.InitFromFile(fBadFEEChannelOADB.Data(), "EmcalBadChannelsAdditional");
342  TObjArray *badchannelmap = static_cast<TObjArray *>(badchannelDB.GetObject(InputEvent()->GetRunNumber()));
343  if(!badchannelmap || !badchannelmap->GetEntries()) return;
344  for(TIter citer = TIter(badchannelmap).Begin(); citer != TIter::End(); ++citer){
345  TParameter<int> *channelID = static_cast<TParameter<int> *>(*citer);
346  fTriggerMaker->AddOfflineBadChannel(channelID->GetVal());
347  }
348 }
349 
351  AliInfoStream() << "Loading masked fastors from OCDB" << std::endl;
352  AliCDBManager *cdb = AliCDBManager::Instance();
353 
354  AliCDBEntry *en = cdb->Get("EMCAL/Calib/Trigger");
355  if(!en){
356  AliErrorStream() << GetName() << ": FastOR masking from CDB required, but OCDB entry is not available. No masking will be applied." << std::endl;
357  return;
358  }
359 
360  AliEMCALTriggerDCSConfig *trgconf = dynamic_cast<AliEMCALTriggerDCSConfig *>(en->GetObject());
361  if(!trgconf){
362  AliErrorStream() << GetName() << ": Failed decoding OCDB entry: Object is not of type AliEMCALTriggerDCSConfig." << std::endl;
363  return;
364  }
365 
366  // In run 1 the small supermodules were not contributing to triggers.
367  // Still the TRUs are counted. As access to the TRU config is not properly
368  // protected the loop over NTRU from the geometry will produce a segfault.
369  // As temporary workaround the loop limits are obtained from the DCS data itself.
370  Int_t fastOrAbsID(-1), ic(-1);
371  for(int itru = 0; itru < trgconf->GetTRUArr()->GetEntries(); itru++){
372  AliEMCALTriggerTRUDCSConfig *truconf = trgconf->GetTRUDCSConfig(itru);
373  // Test for each channel whether it is masked. The calculation is
374  // done reversely as the channel mapping is different between run1
375  // and run2: The loop is done over all masks and all bits inside the
376  // mask, and a handler matching to the correct mapping converts them
377  // into the channel ID. In case a masked channel is found, the absolute
378  // ID is calculated. For this the function GetAbsFastORIndexFromTRU
379  // is used - it is assumed that parameter 1 (iADC) corresponds to the
380  // channel ID.
381  for(unsigned int ifield = 0; ifield < 6; ifield++){
382  for(unsigned int ibit = 0; ibit < 16; ibit ++){
383  if((truconf->GetMaskReg(ifield) >> ibit) & 0x1){
384  try{
385  fGeom->GetTriggerMapping()->GetAbsFastORIndexFromTRU(itru, (ic = GetMaskHandler()(ifield, ibit)), fastOrAbsID);
386  AliDebugStream(1) << GetName() << "Channel " << ic << " in TRU " << itru << " ( abs fastor " << fastOrAbsID << ") masked." << std::endl;
387  fTriggerMaker->AddFastORBadChannel(fastOrAbsID);
388  } catch (int exept){
389  AliErrorStream() << GetName() << "Invalid mask: (" << ifield << "|" << ibit << "), exception " << exept << " thrown. Mask will not be recognized" << std::endl;
390  }
391  }
392  }
393  }
394  }
395 }
396 
398  AliInfoStream() << "Initializing masked fastors from OADB container " << fMaskedFastorOADB.Data() << std::endl;
399  if(fMaskedFastorOADB.Contains("alien://") && !gGrid) TGrid::Connect("alien://");
400  AliOADBContainer badchannelDB("AliEmcalMaskedFastors");
401  badchannelDB.InitFromFile(fMaskedFastorOADB, "AliEmcalMaskedFastors");
402  TObjArray *badchannelmap = static_cast<TObjArray *>(badchannelDB.GetObject(InputEvent()->GetRunNumber()));
403  if(!badchannelmap || !badchannelmap->GetEntries()) return;
404  for(TIter citer = TIter(badchannelmap).Begin(); citer != TIter::End(); ++citer){
405  TParameter<int> *channelID = static_cast<TParameter<int> *>(*citer);
406  AliDebugStream(1) << GetName() << ": Found masked fastor channel " << channelID->GetVal() << std::endl;
407  fTriggerMaker->AddFastORBadChannel(channelID->GetVal());
408  }
409 }
410 
411 
412 std::function<int (unsigned int, unsigned int)> AliEmcalTriggerMakerTask::GetMaskHandler() const {
413  if(fGeom->GetTriggerMappingVersion() == 2){
414  // Run 2 - complicated TRU layout in 6 subregions
415  return [] (unsigned int ifield, unsigned int ibit) -> int {
416  if(ifield >= 6 || ibit >= 16) throw kInvalidChannelException;
417  const int kChannelMap[6][16] = {{ 8, 9,10,11,20,21,22,23,32,33,34,35,44,45,46,47}, // Channels in mask0
418  {56,57,58,59,68,69,70,71,80,81,82,83,92,93,94,95}, // Channels in mask1
419  { 4, 5, 6, 7,16,17,18,19,28,29,30,31,40,41,42,43}, // Channels in mask2
420  {52,53,54,55,64,65,66,67,76,77,78,79,88,89,90,91}, // Channels in mask3
421  { 0, 1, 2, 3,12,13,14,15,24,25,26,27,36,37,38,39}, // Channels in mask4
422  {48,49,50,51,60,61,62,63,72,73,74,75,84,85,86,87}}; // Channels in mask5
423  return kChannelMap[ifield][ibit];
424  };
425  } else {
426  // Run 1 - linear mapping was used
427  return [] (int ifield, int ibit) -> int {
428  if(ifield >= 6 || ibit >= 16) throw kInvalidChannelException;
429  return ifield * 16 + ibit;
430  };
431  }
432 }
433 
435  fQAHistos->FillTH2("RCPos" + patchtype, recpatch.GetColStart(), recpatch.GetRowStart());
436  fQAHistos->FillTH2("EPCentPos" + patchtype, recpatch.GetEtaGeo(), recpatch.GetPhiGeo());
437  fQAHistos->FillTH2("PatchADCvsE" + patchtype, recpatch.GetADCAmp(), recpatch.GetPatchE());
438  fQAHistos->FillTH2("PatchEvsEsmear" + patchtype, recpatch.GetPatchE(), recpatch.GetSmearedEnergyV1());
439  fQAHistos->FillTH2("PatchADCvsEsmear" + patchtype, recpatch.GetADCAmp(), recpatch.GetSmearedEnergyV1());
440  fQAHistos->FillTH2("PatchADCOffvsE" + patchtype, recpatch.GetADCOfflineAmp(), recpatch.GetPatchE());
441  fQAHistos->FillTH2("PatchEvsADCrough" + patchtype, recpatch.GetPatchE(), recpatch.GetADCAmpGeVRough());
442 }
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
void FillQAHistos(const TString &patchtype, const AliEMCALTriggerPatchInfoV1 &recpatch)
Internal QA handler for trigger pathches of given type.
virtual Bool_t Run()
Run trigger patch finding.
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
TObjArray * CreateTriggerPatches(const AliVEvent *inputevent, Bool_t useL0amp=kFALSE)
Run patch finders on input data.
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 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="")
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
Definition: THistManager.h:504
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="")
Temporary class handling.
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="")
const std::set< Short_t > & GetListOfBadFastORAbsIDs() const
Get the list of online masked FastOR'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.
TString fBadFEEChannelOADB
name of the OADB container containing channels to be masked inside the trigger maker ...
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
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:43
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 ...
Int_t GetRunNumber(TString)
Definition: PlotMuonQA.C:2235
AliVCaloTrigger * fCaloTriggers
!calo triggers
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.