15 #include <TClonesArray.h>
16 #include <THashList.h>
17 #include <THistManager.h>
18 #include <TObjArray.h>
20 #include "AliEMCALTriggerBitConfig.h"
21 #include "AliEMCALTriggerPatchInfo.h"
37 fCaloTriggersOutName("EmcalTriggers"),
38 fV0InName("AliAODVZERO"),
40 fUseTriggerBitConfig(kNewConfig),
42 fUseL0Amplitudes(kFALSE),
53 fCaloTriggersOutName(
"EmcalTriggers"),
54 fV0InName(
"AliAODVZERO"),
56 fUseTriggerBitConfig(kNewConfig),
58 fUseL0Amplitudes(kFALSE),
59 fCaloTriggersOut(NULL),
75 const TString kTriggerTypeNames[3] = {
"EJE",
"EGA",
"EL0"},
76 kPatchTypes[3] = {
"Online",
"Offline",
"Recalc"};
79 fQAHistos =
new THistManager(
"TriggerQA");
81 for(
const TString *triggertype = kTriggerTypeNames; triggertype < kTriggerTypeNames +
sizeof(kTriggerTypeNames)/
sizeof(TString); triggertype++){
82 for(
const TString *patchtype = kPatchTypes; patchtype < kPatchTypes +
sizeof(kPatchTypes)/
sizeof(TString); ++patchtype){
84 Form(
"RCPos%s%s", triggertype->Data(), patchtype->Data()),
85 Form(
"Lower edge position of %s %s patches (col-row);iEta;iPhi", patchtype->Data(), triggertype->Data()),
86 48, -0.5, 47.5, 104, -0.5, 103.5
89 Form(
"EPCentPos%s%s", triggertype->Data(), patchtype->Data()),
90 Form(
"Center position of the %s %s trigger patches;#eta;#phi", patchtype->Data(), triggertype->Data()),
91 20, -0.8, 0.8, 700, 0., 7.
94 Form(
"PatchADCvsE%s%s", triggertype->Data(), patchtype->Data()),
95 Form(
"Patch ADC value for trigger type %s %s;Trigger ADC;FEE patch energy (GeV)", patchtype->Data(), triggertype->Data()),
96 2000, 0., 2000, 200, 0., 200
99 Form(
"PatchADCOffvsE%s%s", triggertype->Data(), patchtype->Data()),
100 Form(
"Patch offline ADC value for trigger type %s %s;Trigger ADC;FEE patch energy (GeV)", patchtype->Data(), triggertype->Data()),
101 2000, 0., 2000, 200, 0., 200
105 fQAHistos->CreateTH1(
"triggerBitsAll",
"Trigger bits for all incoming patches;bit nr", 64, -0.5, 63.5);
106 fQAHistos->CreateTH1(
"triggerBitsSel",
"Trigger bits for reconstructed patches;bit nr", 64, -0.5, 63.5);
121 AliEMCALTriggerBitConfig *triggerBitConfig(NULL);
122 if(!triggerBitConfig){
125 triggerBitConfig =
new AliEMCALTriggerBitConfigNew();
128 triggerBitConfig =
new AliEMCALTriggerBitConfigOld();
144 AliFatal(Form(
"%s: Container with same name %s already present. Aborting", GetName(),
fCaloTriggersOutName.Data()));
150 fV0 = (AliVVZERO*)InputEvent()->FindListObject(
fV0InName);
172 AliEMCALTriggerPatchInfo *recpatch = NULL;
173 Int_t patchcounter = 0;
174 TString triggerstring;
175 AliDebug(2,Form(
"Trigger maker - Found %d patches\n", patches->GetEntries()));
176 for(TIter patchIter = TIter(patches).Begin(); patchIter != TIter::End(); ++patchIter){
177 recpatch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(*patchIter);
179 std::bitset<32> triggerbits = recpatch->GetTriggerBits();
180 std::stringstream triggerbitstring;
181 AliDebug(1, Form(
"Trigger maker - next patch: size %d, trigger bits %s", recpatch->GetPatchSize(), triggerbitstring.str().c_str()));
183 if(recpatch->IsJetHigh() || recpatch->IsJetLow())
FillQAHistos(
"EJEOnline", *recpatch);
184 if(recpatch->IsGammaHigh() || recpatch->IsGammaLow())
FillQAHistos(
"EGAOnline", *recpatch);
185 if(recpatch->IsJetHighSimple() || recpatch->IsJetLowSimple())
FillQAHistos(
"EJEOffline", *recpatch);
186 if(recpatch->IsGammaHighSimple() || recpatch->IsGammaLowSimple())
FillQAHistos(
"EGAOffline", *recpatch);
187 if(recpatch->IsLevel0())
FillQAHistos(
"EL0Online", *recpatch);
188 if(recpatch->IsRecalcJet())
FillQAHistos(
"EJERecalc", *recpatch);
189 if(recpatch->IsRecalcGamma())
FillQAHistos(
"EGARecalc", *recpatch);
191 int tBits = recpatch->GetTriggerBits();
192 for(
unsigned int ibit = 0; ibit <
sizeof(tBits)*8; ibit++) {
193 if(tBits & (1 << ibit)){
194 fQAHistos->FillTH1(
"triggerBitsSel", ibit);
198 new((*fCaloTriggersOut)[patchcounter++]) AliEMCALTriggerPatchInfo(*recpatch);
200 if(patches)
delete patches;
205 fQAHistos->FillTH2(Form(
"RCPos%s", patchtype.Data()), recpatch.GetColStart(), recpatch.GetRowStart());
206 fQAHistos->FillTH2(Form(
"EPCentPos%s", patchtype.Data()), recpatch.GetEtaGeo(), recpatch.GetPhiGeo());
207 fQAHistos->FillTH2(Form(
"PatchADCvsE%s", patchtype.Data()), recpatch.GetADCAmp(), recpatch.GetPatchE());
208 fQAHistos->FillTH2(Form(
"PatchADCOffvsE%s", patchtype.Data()), recpatch.GetADCOfflineAmp(), recpatch.GetPatchE());
AliVVZERO * fV0
! VZERO data
AliEmcalTriggerMakerTask()
New configuration, distiction between high and low threshold.
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
TriggerMakerBitConfig_t fUseTriggerBitConfig
type of trigger config
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) ...
virtual void UserCreateOutputObjects()
TList * fOutput
event parton info
void SetIsMC(Bool_t isMC)
void SetJetPatchsize(Int_t patchsize)
void ReadTriggerData(AliVCaloTrigger *trigger)
virtual ~AliEmcalTriggerMakerTask()
TString fV0InName
name of output track array
Old configuration, no distinction between high and low threshold.
AliEMCALGeometry * fGeom
whether it's an ESD analysis
AliEmcalTriggerMakerKernel * fTriggerMaker
The actual trigger maker kernel.
EMCAL trigger maker taskThe EMCAL trigger maker task steers the process building trigger patches...
AliVCaloCells * fCaloCells
clusters
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
cells
void UserCreateOutputObjects()
THistManager * fQAHistos
! Histograms for QA
Bool_t fDoQA
Fill QA histograms.
Int_t fJetPatchsize
Size of a jet patch.
void ReadCellData(AliVCaloCells *cells)