AliPhysics  8bb951a (8bb951a)
 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 <THashList.h>
17 #include <THistManager.h>
18 #include <TObjArray.h>
19 
20 #include "AliEMCALTriggerBitConfig.h"
21 #include "AliEMCALTriggerPatchInfo.h"
24 #include "AliLog.h"
25 
26 #include <bitset>
27 #include <sstream>
28 #include <string>
29 
33 
36  fTriggerMaker(NULL),
37  fV0(NULL),
38  fCaloTriggersOutName("EmcalTriggers"),
39  fV0InName("AliAODVZERO"),
40  fUseL0Amplitudes(kFALSE),
41  fCaloTriggersOut(0),
42  fDoQA(kFALSE),
43  fQAHistos(NULL)
44 {
45 
46 }
47 
49  AliAnalysisTaskEmcal("AliEmcalTriggerMakerTask", doQA),
50  fTriggerMaker(NULL),
51  fV0(NULL),
52  fCaloTriggersOutName("EmcalTriggers"),
53  fV0InName("AliAODVZERO"),
54  fUseL0Amplitudes(kFALSE),
55  fCaloTriggersOut(NULL),
56  fDoQA(doQA),
57  fQAHistos(NULL)
58 {
60 }
61 
63  if(fTriggerMaker) delete fTriggerMaker;
64 }
65 
71  const TString kTriggerTypeNames[3] = {"EJE", "EGA", "EL0"},
72  kPatchTypes[3] = {"Online", "Offline", "Recalc"};
73 
74  if(fDoQA && fOutput){
75  fQAHistos = new THistManager("TriggerQA");
76 
77  for(const TString *triggertype = kTriggerTypeNames; triggertype < kTriggerTypeNames + sizeof(kTriggerTypeNames)/sizeof(TString); triggertype++){
78  for(const TString *patchtype = kPatchTypes; patchtype < kPatchTypes + sizeof(kPatchTypes)/sizeof(TString); ++patchtype){
79  fQAHistos->CreateTH2(
80  Form("RCPos%s%s", triggertype->Data(), patchtype->Data()),
81  Form("Lower edge position of %s %s patches (col-row);iEta;iPhi", patchtype->Data(), triggertype->Data()),
82  48, -0.5, 47.5, 104, -0.5, 103.5
83  );
84  fQAHistos->CreateTH2(
85  Form("EPCentPos%s%s", triggertype->Data(), patchtype->Data()),
86  Form("Center position of the %s %s trigger patches;#eta;#phi", patchtype->Data(), triggertype->Data()),
87  20, -0.8, 0.8, 700, 0., 7.
88  );
89  fQAHistos->CreateTH2(
90  Form("PatchADCvsE%s%s", triggertype->Data(), patchtype->Data()),
91  Form("Patch ADC value for trigger type %s %s;Trigger ADC;FEE patch energy (GeV)", patchtype->Data(), triggertype->Data()),
92  2000, 0., 2000, 200, 0., 200
93  );
94  fQAHistos->CreateTH2(
95  Form("PatchADCOffvsE%s%s", triggertype->Data(), patchtype->Data()),
96  Form("Patch offline ADC value for trigger type %s %s;Trigger ADC;FEE patch energy (GeV)", patchtype->Data(), triggertype->Data()),
97  2000, 0., 2000, 200, 0., 200
98  );
99  }
100  }
101  fQAHistos->CreateTH1("triggerBitsAll", "Trigger bits for all incoming patches;bit nr", 64, -0.5, 63.5);
102  fQAHistos->CreateTH1("triggerBitsSel", "Trigger bits for reconstructed patches;bit nr", 64, -0.5, 63.5);
103  fOutput->Add(fQAHistos->GetListOfHistograms());
104  PostData(1, fOutput);
105  }
106 }
107 
109 {
110  AliEMCALTriggerBitConfig *triggerBitConfig(NULL);
111  switch(bitConfig){
112  case kNewConfig:
113  triggerBitConfig = new AliEMCALTriggerBitConfigNew();
114  break;
115  case kOldConfig:
116  triggerBitConfig = new AliEMCALTriggerBitConfigOld();
117  break;
118  }
119  fTriggerMaker->SetTriggerBitConfig(triggerBitConfig);
120 }
121 
127 
128  if (!fInitialized) return;
129 
130  if (!fCaloTriggersOutName.IsNull()) {
131  fCaloTriggersOut = new TClonesArray("AliEMCALTriggerPatchInfo");
133 
134  if (!(InputEvent()->FindListObject(fCaloTriggersOutName))) {
135  InputEvent()->AddObject(fCaloTriggersOut);
136  }
137  else {
138  fInitialized = kFALSE;
139  AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fCaloTriggersOutName.Data()));
140  return;
141  }
142  }
143 
144  if (!fV0InName.IsNull()) {
145  fV0 = (AliVVZERO*)InputEvent()->FindListObject(fV0InName);
146  }
147 
149  fTriggerMaker->Init();
150 }
151 
159  fCaloTriggersOut->Clear();
160  // prepare trigger maker
161  fTriggerMaker->Reset();
165  fTriggerMaker->SetIsMC(MCEvent());
166  TObjArray *patches = fTriggerMaker->CreateTriggerPatches(InputEvent(), fUseL0Amplitudes);
167  AliEMCALTriggerPatchInfo *recpatch = NULL;
168  Int_t patchcounter = 0;
169  TString triggerstring;
170  AliDebug(2,Form("Trigger maker - Found %d patches\n", patches->GetEntries()));
171  for(TIter patchIter = TIter(patches).Begin(); patchIter != TIter::End(); ++patchIter){
172  recpatch = dynamic_cast<AliEMCALTriggerPatchInfo *>(*patchIter);
173  if(fDoQA){
174  //std::bitset<32> triggerbits = recpatch->GetTriggerBits();
175  std::stringstream triggerbitstring;
176  AliDebug(1, Form("Trigger maker - next patch: size %d, trigger bits %s", recpatch->GetPatchSize(), triggerbitstring.str().c_str()));
177  // Handle types different - online - offline - re
178  if(recpatch->IsJetHigh() || recpatch->IsJetLow()) FillQAHistos("EJEOnline", *recpatch);
179  if(recpatch->IsGammaHigh() || recpatch->IsGammaLow()) FillQAHistos("EGAOnline", *recpatch);
180  if(recpatch->IsJetHighSimple() || recpatch->IsJetLowSimple()) FillQAHistos("EJEOffline", *recpatch);
181  if(recpatch->IsGammaHighSimple() || recpatch->IsGammaLowSimple()) FillQAHistos("EGAOffline", *recpatch);
182  if(recpatch->IsLevel0()) FillQAHistos("EL0Online", *recpatch);
183  if(recpatch->IsRecalcJet()) FillQAHistos("EJERecalc", *recpatch);
184  if(recpatch->IsRecalcGamma()) FillQAHistos("EGARecalc", *recpatch);
185  // Redo checking of found trigger bits after masking of unwanted triggers
186  int tBits = recpatch->GetTriggerBits();
187  for(unsigned int ibit = 0; ibit < sizeof(tBits)*8; ibit++) {
188  if(tBits & (1 << ibit)){
189  fQAHistos->FillTH1("triggerBitsSel", ibit);
190  }
191  }
192  }
193  new((*fCaloTriggersOut)[patchcounter++]) AliEMCALTriggerPatchInfo(*recpatch);
194  }
195  if(patches) delete patches;
196  return true;
197 }
198 
199 void AliEmcalTriggerMakerTask::FillQAHistos(const TString &patchtype, const AliEMCALTriggerPatchInfo &recpatch){
200  fQAHistos->FillTH2(Form("RCPos%s", patchtype.Data()), recpatch.GetColStart(), recpatch.GetRowStart());
201  fQAHistos->FillTH2(Form("EPCentPos%s", patchtype.Data()), recpatch.GetEtaGeo(), recpatch.GetPhiGeo());
202  fQAHistos->FillTH2(Form("PatchADCvsE%s", patchtype.Data()), recpatch.GetADCAmp(), recpatch.GetPatchE());
203  fQAHistos->FillTH2(Form("PatchADCOffvsE%s", patchtype.Data()), recpatch.GetADCOfflineAmp(), recpatch.GetPatchE());
204 }
AliVVZERO * fV0
! VZERO data
New configuration, distiction between high and low threshold.
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Base task in the EMCAL framework.
TObjArray * CreateTriggerPatches(const AliVEvent *inputevent, Bool_t useL0amp=kFALSE)
void SetTriggerBitConfig(const AliEMCALTriggerBitConfig *const config)
Bool_t fUseL0Amplitudes
Use L0 amplitudes instead of L1 time sum (useful for runs where STU was not read) ...
TList * fOutput
!output list
void ReadTriggerData(AliVCaloTrigger *trigger)
TString fV0InName
name of output track array
Old configuration, no distinction between high and low threshold.
AliEMCALGeometry * fGeom
!emcal geometry
void SetUseTriggerBitConfig(TriggerMakerBitConfig_t bitConfig)
AliEmcalTriggerMakerKernel * fTriggerMaker
The actual trigger maker kernel.
EMCAL trigger maker taskThe EMCAL trigger maker task steers the process building trigger patches...
AliVCaloCells * fCaloCells
!cells
void BuildL1ThresholdsOffline(const AliVVZERO *vzdata)
void SetGeometry(const AliEMCALGeometry *const geo)
void FillQAHistos(const TString &patchtype, const AliEMCALTriggerPatchInfo &recpatch)
TString fCaloTriggersOutName
name of output track array
TClonesArray * fCaloTriggersOut
! trigger array out
Kernel of the EMCAL trigger patch makerThe trigger maker kernel contains the core functionality of th...
AliVCaloTrigger * fCaloTriggers
!calo triggers
Bool_t fInitialized
whether or not the task has been already initialized
THistManager * fQAHistos
! Histograms for QA
Bool_t fDoQA
Fill QA histograms.
void ReadCellData(AliVCaloCells *cells)