15 #include <TClonesArray.h>
17 #include <THashList.h>
18 #include "AliAODCaloTrigger.h"
19 #include "AliEMCALGeometry.h"
22 #include "AliEMCALTriggerConstants.h"
23 #include "AliEMCALTriggerDataGrid.h"
24 #include "AliEMCALTriggerPatchInfo.h"
26 #include "AliVCaloCells.h"
27 #include "AliVCaloTrigger.h"
28 #include "AliVVZERO.h"
53 fCaloTriggersOutName(
"EmcalTriggers"),
54 fCaloTriggerSetupOutName(
"EmcalTriggersSetup"),
55 fV0InName(
"AliAODVZERO"),
56 fUseTriggerBitConfig(kNewConfig),
57 fTriggerBitConfig(NULL),
59 fCaloTriggerSetupOut(0),
60 fSimpleOfflineTriggers(0),
62 fPatchAmplitudes(NULL),
63 fPatchADCSimple(NULL),
68 fRejectOffAcceptancePatches(kFALSE),
82 fCaloTriggersOutName(
"EmcalTriggers"),
83 fCaloTriggerSetupOutName(
"EmcalTriggersSetup"),
84 fV0InName(
"AliAODVZERO"),
85 fUseTriggerBitConfig(kNewConfig),
86 fTriggerBitConfig(NULL),
88 fCaloTriggerSetupOut(0),
89 fSimpleOfflineTriggers(0),
91 fPatchAmplitudes(NULL),
92 fPatchADCSimple(NULL),
97 fRejectOffAcceptancePatches(kFALSE),
143 AliFatal(Form(
"%s: Container with same name %s already present. Aborting", GetName(),
fCaloTriggersOutName.Data()));
157 AliFatal(Form(
"%s: Container with same name %s already present. Aborting", GetName(),
fCaloTriggerSetupOutName.Data()));
163 fV0 = (AliVVZERO*)InputEvent()->FindListObject(
fV0InName);
168 int nrows =
fGeom->GetNTotalTRU() * 2;
169 std::cout <<
"Allocating channel grid with 48 columns in eta and " << nrows <<
" rows in phi" << std::endl;
195 std::array<std::string, 3> patchtypes = {
"Online",
"Offline",
"Recalc"};
197 for(
int itype = 0; itype < 5; itype++){
198 for(
const auto & patchtype : patchtypes){
199 fQAHistos->
CreateTH2(Form(
"RCPos%s%s",
fgkTriggerTypeNames[itype].
Data(), patchtype.c_str()), Form(
"Lower edge position of %s %s patches (col-row);iEta;iPhi", patchtype.c_str(),
fgkTriggerTypeNames[itype].Data()), 48, -0.5, 47.5, 104, -0.5, 103.5);
200 fQAHistos->
CreateTH2(Form(
"EPCentPos%s%s",
fgkTriggerTypeNames[itype].
Data(), patchtype.c_str()), Form(
"Center position of the %s %s trigger patches;#eta;#phi", patchtype.c_str(),
fgkTriggerTypeNames[itype].Data()), 20, -0.8, 0.8, 700, 0., 7.);
201 fQAHistos->
CreateTH2(Form(
"PatchADCvsE%s%s",
fgkTriggerTypeNames[itype].
Data(), patchtype.c_str()), Form(
"Patch ADC value for trigger type %s %s;Trigger ADC;FEE patch energy (GeV)", patchtype.c_str(),
fgkTriggerTypeNames[itype].Data()), 2000, 0., 2000, 200, 0., 200);
204 fQAHistos->
CreateTH1(
"triggerBitsAll",
"Trigger bits for all incoming patches;bit nr", 64, -0.5, 63.5);
205 fQAHistos->
CreateTH1(
"triggerBitsSel",
"Trigger bits for reconstructed patches;bit nr", 64, -0.5, 63.5);
217 AliEMCALTriggerPatchInfo *trigger(
nullptr), *triggerMainJet(
nullptr),
218 *triggerMainGamma(
nullptr), *triggerMainLevel0(
nullptr),
219 *triggerMainJetSimple(
nullptr), *triggerMainGammaSimple(
nullptr),
220 *triggerMainJetRecalc(
nullptr), *triggerMainGammaRecalc(
nullptr);
227 AliError(Form(
"Calo triggers container %s not available.",
fCaloTriggersName.Data()));
231 AliError(Form(
"Calo cells container %s not available.",
fCaloCellsName.Data()));
235 AliError(Form(
"V0 container %s not available.",
fV0InName.Data()));
268 Int_t globCol=-1, globRow=-1;
277 (*fPatchADC)(globCol,globRow) = adcAmp;
287 if(amplitude < 0) amplitude = 0;
288 (*fPatchAmplitudes)(globCol,globRow) = amplitude;
294 for(
int itime = 0; itime < nl0times; itime++){
295 if(l0times[itime] >7 && l0times[itime] < 10){
296 (*fLevel0TimeMap)(globCol,globRow) = static_cast<Char_t>(l0times[itime]);
306 for(
Int_t iCell = 0; iCell < nCell; ++iCell) {
312 fGeom->GetFastORIndexFromCellIndex(cellId, absId);
313 Int_t globCol=-1, globRow=-1;
314 fGeom->GetPositionInEMCALFromAbsFastORIndex(absId, globCol, globRow);
316 (*fPatchADCSimple)(globCol,globRow) += amp/EMCALTrigger::kEMCL1ADCtoGeV;
329 v0[0] =
fV0->GetTriggerChargeA();
330 v0[1] =
fV0->GetTriggerChargeC();
331 ULong64_t v0S = v0[0] + v0[1];
334 for (
Int_t i = 0; i < 4; ++i) {
368 if (triggerMainJetSimple == 0 || (triggerMainJetSimple->GetPatchE() < trigger->GetPatchE()))
369 triggerMainJetSimple = trigger;
377 if (triggerMainJetRecalc == 0 || (triggerMainJetRecalc->GetPatchE() < trigger->GetPatchE()))
378 triggerMainJetRecalc = trigger;
386 if (triggerMainGammaSimple == 0 || (triggerMainGammaSimple->GetPatchE() < trigger->GetPatchE()))
387 triggerMainGammaSimple = trigger;
395 if (triggerMainGammaRecalc == 0 || (triggerMainGammaRecalc->GetPatchE() < trigger->GetPatchE()))
396 triggerMainGammaRecalc = trigger;
405 if(triggerMainJet == 0 || (triggerMainJet->GetPatchE() < trigger->GetPatchE()))
406 triggerMainJet = trigger;
413 if (triggerMainGamma == 0 || (triggerMainGamma->GetPatchE() < trigger->GetPatchE()))
414 triggerMainGamma = trigger;
419 if (!triggerMainLevel0 || (triggerMainLevel0->GetPatchE() < trigger->GetPatchE()))
420 triggerMainLevel0 = trigger;
427 if (triggerMainJet != 0) {
428 Int_t tBits = triggerMainJet->GetTriggerBits();
431 triggerMainJet->SetTriggerBits( tBits );
433 if (triggerMainJetSimple != 0) {
434 Int_t tBits = triggerMainJetSimple->GetTriggerBits();
437 triggerMainJetSimple->SetTriggerBits(tBits);
439 if (triggerMainJetRecalc != 0) {
440 Int_t tBits = triggerMainJetRecalc->GetTriggerBits();
443 triggerMainJetRecalc->SetTriggerBits(tBits);
445 if (triggerMainGamma != 0) {
446 Int_t tBits = triggerMainGamma->GetTriggerBits();
449 triggerMainGamma->SetTriggerBits( tBits );
451 if (triggerMainGammaSimple != 0) {
452 Int_t tBits = triggerMainGammaSimple->GetTriggerBits();
455 triggerMainGammaSimple->SetTriggerBits( tBits );
457 if (triggerMainGammaRecalc != 0) {
458 Int_t tBits = triggerMainGammaRecalc->GetTriggerBits();
461 triggerMainGammaRecalc->SetTriggerBits( tBits );
463 if(triggerMainLevel0){
464 Int_t tBits = triggerMainLevel0->GetTriggerBits();
467 triggerMainLevel0->SetTriggerBits(tBits);
472 int npatchOnline = 0;
473 for(TIter patchIter = TIter(
fCaloTriggersOut).Begin(); patchIter != TIter::End(); ++patchIter){
474 AliEMCALTriggerPatchInfo *mypatch =
static_cast<AliEMCALTriggerPatchInfo *
>(*patchIter);
475 if(mypatch->IsOfflineSimple())
continue;
476 AliDebug(1,Form(
"Patch with bits: %s, types: JH[%s], JL[%s], GH[%s], GL[%s], L0[%s]",
477 std::bitset<
sizeof(
int)*4>(mypatch->GetTriggerBits()).to_string().c_str(),
478 (mypatch->IsJetHigh() ?
"y" :
"n"), (mypatch->IsJetLow() ?
"y" :
"n"),
479 (mypatch->IsGammaHigh() ?
"y" :
"n"), (mypatch->IsGammaLow() ?
"y" :
"n"),(mypatch->IsLevel0() ?
"y" :
"n")));
482 AliDebug(1, Form(
"Number of online patches: %d", npatchOnline));
498 Int_t tBits=-1, globCol=-1, globRow=-1;
507 if(globCol < 0 || globRow < 0){
510 case kTMOnline: debugpatchtype =
"Online patches";
break;
511 case kTMOffline: debugpatchtype =
"Offline patches";
break;
512 case kTMRecalc: debugpatchtype =
"Recalc patches";
break;
514 AliErrorStream() <<
"Invalid patch position(" << globCol <<
"," << globRow <<
") for " << debugpatchtype << std::endl;
518 for(
unsigned int ibit = 0; ibit <
sizeof(tBits)*8; ibit++) {
519 if(tBits & (1 << ibit)){
541 Int_t runno = InputEvent()->GetRunNumber();
542 if(runno > 176000 && runno <= 197692){
545 AliDebug(1, Form(
"Jet patch in inactive area: row[%d]", globRow));
552 const int kRowsPhi =
fGeom->GetNTotalTRU() * 2;
554 if((globCol + patchsize >=
kColsEta) || (globCol + patchsize >= kRowsPhi)){
555 AliError(Form(
"Invalid patch position for patch type %s: Col[%d], Row[%d] - patch rejected",
fgkTriggerTypeNames[type].
Data(), globCol, globRow));
562 fGeom->GetAbsFastORIndexFromPositionInEMCAL(globCol, globRow, absId);
564 Int_t cellAbsId[4]={-1,-1,-1,-1};
565 fGeom->GetCellIndexFromFastORIndex(absId, cellAbsId);
569 fGeom->GetGlobal(cellAbsId[0], edge1);
570 Int_t colEdge1 = globCol, rowEdge1 = globRow, absIdEdge1 = absId, cellIdEdge1 = cellAbsId[0];
581 for (
Int_t i = 0; i < nfastor; ++i) {
582 for (
Int_t j = 0; j < nfastor; ++j) {
584 fGeom->GetAbsFastORIndexFromPositionInEMCAL(globCol+i, globRow+j, absId);
585 fGeom->GetCellIndexFromFastORIndex(absId, cellAbsId);
587 for (
Int_t k = 0; k < 4; ++k) {
597 adcAmp +=
static_cast<Int_t>((*fPatchAmplitudes)(globCol+i,globRow+j) * 4);
600 std::cerr << e.what() << std::endl;
605 adcAmp += (*fPatchADC)(globCol+i,globRow+j);
608 std::cerr << e.what() << std::endl;
614 adcOfflineAmp += (*fPatchADCSimple)(globCol+i,globRow+j);
617 std::cerr << e.what() << std::endl;
624 AliDebug(2,
"EMCal trigger patch with 0 energy.");
635 fGeom->GetAbsFastORIndexFromPositionInEMCAL( cmCol, cmRow, absId );
636 fGeom->GetCellIndexFromFastORIndex( absId, cellAbsId );
639 Int_t cmiCellCol = TMath::Nint(cmiCol * 2.);
640 Int_t cmiCellRow = TMath::Nint(cmiRow * 2.);
642 fGeom->GetGlobal(cellAbsId[(cmiCellRow%2)*2 + cmiCellCol%2], centerMass);
661 fGeom->GetAbsFastORIndexFromPositionInEMCAL(globCol+posOffset, globRow+posOffset, absId);
662 fGeom->GetCellIndexFromFastORIndex(absId, cellAbsId);
664 fGeom->GetGlobal(cellAbsId[3], edge2);
665 Int_t colEdge2 = globCol+posOffset, rowEdge2 = globRow+posOffset, absIdEdge2 = absId, cellIdEdge2 = cellAbsId[3];
684 fGeom->GetAbsFastORIndexFromPositionInEMCAL(globCol+posOffset, globRow+posOffset, absId);
685 fGeom->GetCellIndexFromFastORIndex(absId, cellAbsId);
687 fGeom->GetGlobal(cellAbsId[3], center1);
700 fGeom->GetAbsFastORIndexFromPositionInEMCAL(globCol+posOffset, globRow+posOffset, absId);
701 fGeom->GetCellIndexFromFastORIndex(absId, cellAbsId);
703 fGeom->GetGlobal(cellAbsId[0], center2);
705 TVector3 centerGeo(center1);
706 centerGeo += center2;
710 TVector3 edge1tmp = edge1, edge2tmp = edge2;
712 centerMass -= vertex;
716 if(!(edge1[0] || edge1[1] || edge1[2])){
717 AliWarning(Form(
"Inconsistency in patch position for edge1: [%f|%f|%f]", edge1[0], edge1[1], edge1[2]));
718 AliWarning(
"Original vectors:");
719 AliWarning(Form(
"edge1: [%f|%f|%f]", edge1tmp[0], edge1tmp[1], edge1tmp[2]));
720 AliWarning(Form(
"vertex: [%f|%f|%f]", vertex[0], vertex[1], vertex[2]));
721 AliWarning(Form(
"Col: %d, Row: %d, FABSID: %d, Cell: %d", colEdge1, rowEdge1, absIdEdge1, cellIdEdge1));
722 AliWarning(Form(
"Offline: %s", (patchSource ==
kTMOffline || patchSource ==
kTMRecalc) ?
"yes" :
"no"));
724 if(!(edge2[0] || edge2[1] || edge2[2])){
725 AliWarning(Form(
"Inconsistency in patch position for edge2: [%f|%f|%f]", edge2[0], edge2[1], edge2[2]));
726 AliWarning(
"Original vectors:");
727 AliWarning(Form(
"edge2: [%f|%f|%f]", edge2tmp[0], edge2tmp[1], edge2tmp[2]));
728 AliWarning(Form(
"vertex: [%f|%f|%f]", vertex[0], vertex[1], vertex[2]));
729 AliWarning(Form(
"Col: %d, Row: %d, FABSID: %d, Cell: %d", colEdge2, rowEdge2, absIdEdge2, cellIdEdge2));
730 AliWarning(Form(
"Offline: %s", (patchSource ==
kTMOffline || patchSource ==
kTMRecalc) ?
"yes" :
"no"));
781 AliEMCALTriggerPatchInfo *trigger =
782 new ((*fCaloTriggersOut)[
fITrigger]) AliEMCALTriggerPatchInfo();
785 trigger->SetCenterGeo(centerGeo, amp);
786 trigger->SetCenterMass(centerMass, amp);
787 trigger->SetEdge1(edge1, amp);
788 trigger->SetEdge2(edge2, amp);
789 trigger->SetADCAmp(adcAmp);
790 trigger->SetADCOfflineAmp(
Int_t(adcOfflineAmp));
791 trigger->SetTriggerBits(tBits);
792 trigger->SetOffSet(offSet);
793 trigger->SetCol0(globCol);
794 trigger->SetRowStart(globRow);
795 trigger->SetEdgeCell(globCol*2, globRow*2);
800 case kTMOnline: patchtype =
"Online";
break;
801 case kTMOffline: patchtype =
"Offline";
break;
802 case kTMRecalc: patchtype =
"Recalc";
break;
808 for(
unsigned int ibit = 0; ibit <
sizeof(tBits)*8; ibit++) {
809 if(tBits & (1 << ibit)){
830 TArrayI tBitsArray(4), rowArray(4), colArray(4);
863 Int_t maxPatchADC = -1;
870 int runnumber = InputEvent()->GetRunNumber();
871 if(runnumber > 139517 && runnumber <= 170593) maxRow = 60;
874 for (
Int_t i = 0; i <= (maxCol-16); i += 4) {
875 for (
Int_t j = 0; j <= (maxRow-16); j += 4) {
880 for (
Int_t k = 0; k < 16; ++k) {
881 for (
Int_t l = 0; l < 16; ++l) {
882 tSumOffline += (*fPatchADCSimple)(i+k,j+l);
883 tSum +=
static_cast<ULong64_t
>((*fPatchADC)(i+k,j+l));
887 if (tSum > maxPatchADC) {
893 if (tSumOffline > maxPatchADCoffline) {
894 maxPatchADCoffline = tSumOffline;
937 tBitsArray.Set( tBitsArray.GetSize() + 1 );
938 colArray.Set( colArray.GetSize() + 1 );
939 rowArray.Set( rowArray.GetSize() + 1 );
940 tBitsArray[tBitsArray.GetSize()-1] = tBits;
941 colArray[colArray.GetSize()-1] = i;
942 rowArray[rowArray.GetSize()-1] = j;
952 tBitsArray[0] = tBitsArray[0] | ( 1 << ( bitOffSet +
fTriggerBitConfig->GetJetLowBit() ));
960 tBitsArray[0] = tBitsArray[0] | ( 1 << ( bitOffSet +
fTriggerBitConfig->GetJetHighBit() ));
968 tBitsArray[1] = tBitsArray[1] | ( 1 << ( bitOffSet +
fTriggerBitConfig->GetJetLowBit() ));
976 tBitsArray[1] = tBitsArray[1] | ( 1 << ( bitOffSet +
fTriggerBitConfig->GetJetHighBit() ));
985 maxPatchADCoffline = -1;
987 for (
Int_t i = 0; i <= (maxCol-2); ++i) {
988 for (
Int_t j = 0; j <= (maxRow-2); ++j) {
994 for (
Int_t k = 0; k < 2; ++k) {
995 for (
Int_t l = 0; l < 2; ++l) {
996 tSumOffline += (*fPatchADCSimple)(i+k,j+l);
997 tSum +=
static_cast<ULong64_t
>((*fPatchADC)(i+k,j+l));
1001 if (tSum > maxPatchADC) {
1006 if (tSumOffline > maxPatchADCoffline) {
1007 maxPatchADCoffline = tSumOffline;
1048 tBitsArray.Set( tBitsArray.GetSize() + 1 );
1049 colArray.Set( colArray.GetSize() + 1 );
1050 rowArray.Set( rowArray.GetSize() + 1 );
1051 tBitsArray[tBitsArray.GetSize()-1] = tBits;
1052 colArray[colArray.GetSize()-1] = i;
1053 rowArray[rowArray.GetSize()-1] = j;
1063 tBitsArray[2] = tBitsArray[2] | ( 1 << ( bitOffSet +
fTriggerBitConfig->GetGammaLowBit() ));
1071 tBitsArray[2] = tBitsArray[2] | ( 1 << ( bitOffSet +
fTriggerBitConfig->GetGammaHighBit() ));
1079 tBitsArray[3] = tBitsArray[3] | ( 1 << ( bitOffSet +
fTriggerBitConfig->GetGammaLowBit() ));
1087 tBitsArray[3] = tBitsArray[3] | ( 1 << ( bitOffSet +
fTriggerBitConfig->GetGammaHighBit() ));
1094 if(tBitsArray.GetSize() - 4 > 0){
1096 for (
Int_t i = 4; i < tBitsArray.GetSize(); ++i){
1112 isOfflineSimple = kFALSE;
1114 if (!loopContinue) {
1116 isOfflineSimple = kTRUE;
1118 return loopContinue;
1128 Int_t row(-1), col(-1); trg.GetPosition(col, row);
1129 if(col < 0 || row < 0){
1130 AliError(Form(
"Patch outside range [col %d, row %d]", col, row));
1133 Int_t truref(-1), trumod(-1), absFastor(-1), adc(-1);
1134 fGeom->GetAbsFastORIndexFromPositionInEMCAL(col, row, absFastor);
1135 fGeom->GetTRUFromAbsFastORIndex(absFastor, truref, adc);
1137 const int kNRowsPhi =
fGeom->GetNTotalTRU() * 2;
1138 for(
int ipos = 0; ipos < 2; ipos++){
1139 if(row + ipos >= kNRowsPhi)
continue;
1140 for(
int jpos = 0; jpos < 2; jpos++){
1141 if(col + jpos >=
kColsEta)
continue;
1144 fGeom->GetAbsFastORIndexFromPositionInEMCAL(col+jpos, row+ipos, absFastor);
1145 fGeom->GetTRUFromAbsFastORIndex(absFastor, trumod, adc);
1146 if(trumod != truref)
continue;
1147 if(col + jpos >=
kColsEta) AliError(Form(
"Boundary error in col [%d, %d + %d]", col + jpos, col, jpos));
1148 if(row + ipos >= kNRowsPhi) AliError(Form(
"Boundary error in row [%d, %d + %d]", row + ipos, row, ipos));
1149 Char_t l0times = (*fLevel0TimeMap)(col + jpos,row + ipos);
1150 if(l0times > 7 && l0times < 10) nvalid++;
1153 if (nvalid != 4)
return false;
Bool_t fRejectOffAcceptancePatches
Switch for rejection of patches outside the acceptance.
Int_t GetThresholdJetHighSimple() const
Int_t GetThresholdGammaHighSimple() const
TString fCaloTriggersOutName
name of output track array
AliEMCALTriggerPatchInfo * ProcessPatch(TriggerMakerTriggerType_t type, TriggerMakerPatchSource_t patchSource)
Class to make array of trigger patch objects in AOD/ESD events.
Old configuration, no distinction between high and low threshold.
AliEMCALTriggerDataGrid< double > * fPatchADCSimple
! patch map for simple offline trigger
TriggerMakerBitConfig_t fUseTriggerBitConfig
type of trigger config
Base task in the EMCAL framework.
Bool_t fLocalInitialized
whether or not the task has been already initialized
TriggerMakerTriggerType_t
Definition of different trigger patch types.
Bool_t fDoQA
Fill QA histograms.
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
Int_t fITrigger
! trigger counter
void UserCreateOutputObjects()
static const int kColsEta
Number of columns in eta direction.
Int_t GetThresholdGammaLowSimple() const
New configuration, distiction between high and low threshold.
static const TString fgkTriggerTypeNames[5]
Histogram name tags.
const AliEMCALTriggerBitConfig * fTriggerBitConfig
Trigger bit configuration, aliroot-dependent.
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.
Trigger bit indicating the main (highest energy) trigger patch of a given type per event...
AliEMCALTriggerDataGrid< float > * fPatchAmplitudes
! TRU Amplitudes (for L0)
THashList * GetListOfHistograms() const
Get the list of histograms.
Bool_t IsEGA(Int_t tBits) const
AliEMCALGeometry * fGeom
!emcal geometry
TString fCaloTriggersName
name of calo triggers collection
Bool_t IsOfflineSimple(Int_t tBits) const
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Create a new TH1 within the container.
Int_t fThresholdConstants[4][3]
simple offline trigger thresholds constants
Bool_t IsEJE(Int_t tBits) const
Int_t GetThresholdJetLowSimple() const
AliEMCALTriggerChannelContainer fBadChannels
Container of bad channels.
TString fCaloCellsName
name of calo cell collection
TString fV0InName
name of output track array
Bool_t IsRecalc(Int_t tBits) const
TriggerMakerPatchSource_t
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Fill a 1D histogram within the container.
Manager for constants used in the trigger maker.
AliEmcalTriggerSetupInfo * fCaloTriggerSetupOut
! trigger setup
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Int_t fDebugLevel
Debug lebel;.
AliVCaloCells * fCaloCells
!cells
AliVVZERO * fV0
! V0 object
ClassImp(AliAnalysisTaskDeltaPt) AliAnalysisTaskDeltaPt
AliAODCaloTrigger * fSimpleOfflineTriggers
! simple offline trigger
EMCAL trigger patch maker.
AliEmcalList * fOutput
!output list
TClonesArray * fCaloTriggersOut
! trigger array out
THistManager * fQAHistos
! Histograms for QA
Double_t fVertex[3]
!event vertex
Bitmask for recalc patches.
Container class for histograms.
virtual void ExecOnce()
Perform steps needed to initialize the analysis.
Int_t GetRunNumber(TString)
AliVCaloTrigger * fCaloTriggers
!calo triggers
void UserCreateOutputObjects()
Main initialization function on the worker.
void RunSimpleOfflineTrigger()
AliEMCALTriggerDataGrid< char > * fLevel0TimeMap
! Map needed to store the level0 times
TString fCaloTriggerSetupOutName
name of output track array
Settings manager for the trigger patch algorithmThis class contains the main settings (trigger thresh...
void SetThresholdsSimple(Int_t i0, Int_t i1, Int_t i2, Int_t i3)
Bitmask for Offline simple patches.
Bool_t NextTrigger(Bool_t &isOfflineSimple)
virtual ~AliEmcalTriggerMaker()
void SetThresholds(Int_t i0, Int_t i1, Int_t i2, Int_t i3)
Bool_t CheckForL0(const AliVCaloTrigger &trg) const
AliEMCALTriggerDataGrid< int > * fPatchADC
! ADC values map