19 #include <TProfile2D.h>
20 #include <TStreamerInfo.h>
24 #include "AliVCluster.h"
25 #include "AliVCaloCells.h"
26 #include "AliVEvent.h"
27 #include "AliCentrality.h"
29 #include "AliVEvent.h"
30 #include "AliVCaloTrigger.h"
31 #include "AliESDVZERO.h"
33 #include "AliEMCALGeometry.h"
34 #include "AliEMCALRecoUtils.h"
35 #include "AliOADBContainer.h"
36 #include "AliAnalysisManager.h"
48 AliAnalysisTaskSE(name),
49 fOutputList(0), fRecoUtils(0x0),
50 fGeoSet(0), fGeometry(0), fGeoName(
""),
51 fOADBSet(kFALSE), fAccessOADB(kTRUE), fOADBFilePath(
""),
52 fBitEGA(0), fBitEJE(0),
54 fSTUTotal(0), fTRUTotal(0),
55 fV0Trigger(0), fV0A(0), fV0C(0),
56 fFillV0SigHisto(1), fFillClusAcceptHisto(0),
58 fEventMB (0), fEventL0 (0),
59 fEventL1G (0), fEventL1G2 (0),
60 fEventL1J (0), fEventL1J2 (0),
61 fEventCen (0), fEventSem (0),
64 fhNEvents(0), fhFORAmp(0),
65 fhFORAmpL1G(0), fhFORAmpL1G2(0),
66 fhFORAmpL1J(0), fhFORAmpL1J2(0),
67 fhL0Amp(0), fhL0AmpL1G(0), fhL0AmpL1J(0),
68 fhL1Amp(0), fhL1GAmp(0), fhL1G2Amp(0),
69 fhL1JAmp(0), fhL1J2Amp(0), fhL1FOREnergy(0),
70 fhL0Patch(0), fhL1GPatch(0), fhL1G2Patch(0),
71 fhL1GPatchNotFake(0), fhL1GPatchFake(0), fhL1GPatchNotAllFake(0),
72 fhL1GPatchAllFake(0), fhL1GPatchNotAllFakeMax(0),
73 fhL1GPatchAllFakeMax(0), fhL1GPatchNotAllFakeMaxE(0),
74 fhL1GPatchAllFakeMaxE(0), fhL1GPatchNotAllFakeE(0),
75 fhL1GPatchAllFakeE(0), fhL1GPatchFakeE(0),
76 fhL1GPatchNotFakeE(0), fhNPatchFake(0), fhNPatchNotFake(0),
77 fhL1JPatch(0), fhL1J2Patch(0),
78 fhFEESTU(0), fhTRUSTU(0), fhV0STU(0),
79 fhGPMaxVV0TT(0), fhJPMaxVV0TT(0),
80 fhFORMeanAmp(0), fhL0MeanAmp(0), fhL1MeanAmp(0),
81 fhL1GPatchMax(0), fhL1G2PatchMax(0),
82 fhL1JPatchMax(0), fhL1J2PatchMax(0),
84 fNBinsSTUSignal (300), fMaxSTUSignal (30000),
85 fNBinsTRUSignal (300), fMaxTRUSignal (30000),
86 fNBinsV0Signal (300), fMaxV0Signal (30000),
87 fNBinsSTUFEERatio(300), fMaxSTUFEERatio(100),
88 fNBinsSTUTRURatio(300), fMaxSTUTRURatio(100),
89 fNBinsClusterE (100), fMaxClusterE (50),
90 fNBinsClusterPhi (110), fMaxClusterPhi (3.15), fMinClusterPhi (1.39),
91 fNBinsClusterEta (96), fMaxClusterEta (0.7),
93 fMapCellL1G (), fMapCellL1G2 (),
94 fMapCellL1J (), fMapCellL1J2 (),
95 fMapTrigL0 (), fMapTrigL1 (),
96 fMapTrigL0L1G(), fMapTrigL0L1J(),
97 fMapTrigL1G (), fMapTrigL1G2 (),
98 fMapTrigL1J (), fMapTrigL1J2 ()
102 DefineOutput(1, TList::Class());
115 Int_t runnumber = InputEvent()->GetRunNumber() ;
117 AliInfo(Form(
"Get AODB parameters from EMCAL in %s for run %d",
fOADBFilePath.Data(),runnumber));
119 Int_t nSM =
fGeometry->GetNumberOfSuperModules();
122 if(
fRecoUtils->IsBadChannelsRemovalSwitchedOn())
124 AliOADBContainer *contBC=
new AliOADBContainer(
"");
125 contBC->InitFromFile(Form(
"%s/EMCALBadChannels.root",
fOADBFilePath.Data()),
"AliEMCALBadChannels");
127 TObjArray *arrayBC=(TObjArray*)contBC->GetObject(runnumber);
131 AliInfo(
"Remove EMCAL bad cells");
133 for (Int_t i=0; i<nSM; ++i)
135 TH2I *hbm =
fRecoUtils->GetEMCALChannelStatusMap(i);
140 hbm=(TH2I*)arrayBC->FindObject(Form(
"EMCALBadChannelMap_Mod%d",i));
144 AliError(Form(
"Can not get EMCALBadChannelMap_Mod%d",i));
148 hbm->SetDirectory(0);
152 }
else AliInfo(
"Do NOT remove EMCAL bad channels");
165 Int_t posX = -1, posY = -1;
166 Int_t nSupMod = -1, ieta = -1, iphi = -1, nModule = -1, nIphi = -1, nIeta = -1;
170 AliVCaloCells& cells= *(InputEvent()->GetEMCALCells());
174 for (Int_t icell = 0; icell < cells.GetNumberOfCells(); icell++)
178 Double_t amp =0., time = 0., efrac = 0;
181 cells.GetCell(icell, absId, amp, time,mclabel,efrac);
183 fGeometry->GetCellIndex(absId, nSupMod, nModule, nIphi, nIeta);
184 fGeometry->GetCellPhiEtaIndexInSModule(nSupMod, nModule, nIphi, nIeta, iphi, ieta);
186 posX = (nSupMod % 2) ? ieta + AliEMCALGeoParams::fgkEMCALCols : ieta;
187 posY = iphi + AliEMCALGeoParams::fgkEMCALRows * int(nSupMod / 2);
189 Int_t indexX = Int_t(posX/2);
190 Int_t indexY = Int_t(posY/2);
194 AliWarning(Form(
"Wrong Position (x,y) = (%d,%d)",posX,posY));
227 AliVCaloTrigger& trg= * (InputEvent()->GetCaloTrigger(
"EMCAL"));
231 Int_t posX = -1, posY = -1;
243 trg.GetPosition(posX,posY);
245 if (posX > -1 && posY > -1)
249 trg.GetNL0Times(nTimes);
251 trg.GetL0Times(l0Times);
254 trg.GetAmplitude(ampL0);
255 if (ampL0 > 0)
fMapTrigL0[posY][posX] = ampL0;
257 if(triggerclasses.Contains(
"CEMC7EGA-B-NOPF-CENTNOTRD") || triggerclasses.Contains(
"CPBI2EGA") || triggerclasses.Contains(
"CPBI2EG1"))
fMapTrigL0L1G[posY][posX] += ampL0;
258 if(triggerclasses.Contains(
"CEMC7EJE-B-NOPF-CENTNOTRD") || triggerclasses.Contains(
"CPBI2EJE") || triggerclasses.Contains(
"CPBI2EJ1"))
fMapTrigL0L1J[posY][posX] += ampL0;
262 for (Int_t itime = 0; itime < nTimes; itime++)
264 if (l0Times[itime] > 7 && l0Times[itime] < 10) l0fired = 1;
275 trg.GetTriggerBits(bit);
278 trg.GetL1TimeSum(ts);
331 AliInfo(Form(
"Large fTRUTotal %f",
fTRUTotal));
334 AliInfo(Form(
"Large fSTUTotal %d",
fSTUTotal));
349 Double_t v[3] = {0,0,0};
350 InputEvent()->GetPrimaryVertex()->GetXYZ(v);
353 TRefArray* caloClus =
new TRefArray();
354 InputEvent()->GetEMCALClusters(caloClus);
356 Int_t nCaloClusters = caloClus->GetEntriesFast();
368 Int_t nSupMod = -1, ieta = -1, iphi = -1;
371 Double_t vertex[] = {0.0,0.0,0.0};
375 if(InputEvent()->GetCentrality()) centrality = InputEvent()->GetCentrality()->GetCentralityPercentile(
"V0M");
380 for(Int_t icalo = 0; icalo < nCaloClusters; icalo++)
382 AliVCluster *clus = (AliVCluster*) (caloClus->At(icalo));
384 if(!clus->IsEMCAL())
continue;
386 if(!
fRecoUtils->IsGoodCluster(clus,
fGeometry,InputEvent()->GetEMCALCells(),InputEvent()->GetBunchCrossNumber()))
389 if(clus->GetNCells() < 2)
continue ;
393 Bool_t shared = kFALSE;
394 Int_t idAbs = -1, iphi0 = -1, ieta0 = -1;
396 idAbs,nSupMod,ieta0,iphi0,shared);
398 ieta = (nSupMod % 2) ? ieta0 + AliEMCALGeoParams::fgkEMCALCols : ieta0;
399 iphi = iphi0 + AliEMCALGeoParams::fgkEMCALRows * int(nSupMod / 2);
404 AliWarning(Form(
"Wrong Position (x,y) = (%d,%d)",ieta,iphi));
409 if( phi < 0 ) phi+=TMath::TwoPi();
476 Float_t e, Float_t eta, Float_t phi,
477 Float_t ieta, Float_t iphi,
482 fhClus [triggerNumber]->Fill(e);
483 fhClusCen[triggerNumber]->Fill(e,centrality);
539 Double_t ampFOR[30] = {0.}, ampL0[30] = {0.}, ampL1[30] = {0.};
546 fGeometry->GetAbsFastORIndexFromPositionInEMCAL(j,i,idFOR);
549 fGeometry->GetTRUFromAbsFastORIndex(idFOR,iTRU,iADC);
564 for (Int_t i = 0; i < 30; i++)
566 if (ampFOR[i] != 0 && ampL1[i] != 0)
568 fhFEESTU->Fill(ampL1[i]/ampFOR[i],i);
570 AliWarning(Form(
"Large STU/FEE ratio %f",ampL1[i]/ampFOR[i]));
573 if (ampL0[i] != 0 && ampL1[i] != 0)
575 fhTRUSTU->Fill(ampL1[i]/ampL0[i] ,i);
577 AliWarning(Form(
"Large STU/TRU ratio %f",ampL1[i]/ampL0[i]));
646 Int_t areAllFakes = 2;
647 Int_t numberpatchNotFake = 0;
648 Int_t numberpatchFake = 0;
650 Int_t threshold = 10;
651 Bool_t enoughE = kFALSE;
652 Double_t patchMax = 0;
663 Double_t patchEnergy = 0;
667 for(Int_t irow = 0; irow < 2; irow++)
669 for(Int_t icol = 0; icol < 2; icol++)
672 shiftCol = posx+icol;
673 shiftRow = posy+irow;
676 if(shiftRow < fgkFALTRORows && shiftCol < fgkFALTROCols)
680 if(
fMapCellL1G[shiftRow][shiftCol] > threshold/2 ) enoughE = kTRUE;
685 if (patchEnergy > patchMax)
687 patchMax = patchEnergy;
692 if(patchEnergy>threshold || (patchEnergy>threshold-3 && enoughE))
694 numberpatchNotFake++;
725 Double_t patchEnergy=0;
726 for(Int_t irow = 0; irow < 2; irow++)
728 for(Int_t icol = 0; icol < 2; icol++)
733 if(shiftRow < fgkFALTRORows && shiftCol < fgkFALTROCols)
762 Double_t patchEnergy = 0;
763 for(Int_t irow = 0; irow < 2; irow++)
765 for(Int_t icol = 0; icol < 2; icol++)
770 if(shiftRow < fgkFALTRORows && shiftCol < fgkFALTROCols)
798 Double_t patchMax = 0;
803 for (Int_t i = 0; i < 9; i++)
805 for (Int_t j = 0; j < 12; j++)
811 for (Int_t k = 0; k < 16; k++)
813 for (Int_t l = 0; l < 16; l++)
815 patchJ += Int_t(
fMapTrigL1[4*j + l][4*i + k]);
819 if (patchJ > patchMax)
869 AliESDVZERO* eventV0 =
dynamic_cast<AliESDVZERO*
> (InputEvent()->GetVZEROData());
873 for (Int_t i = 0; i < 32; i++)
875 fV0C += eventV0->GetAdcV0C(i);
876 fV0A += eventV0->GetAdcV0A(i);
884 AliWarning(Form(
"Large fV0A+fV0C %f",
fV0A+
fV0C));
959 TFile*
file = AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile();
961 const TList *clist = file->GetStreamerInfoCache();
965 TStreamerInfo *cinfo = (TStreamerInfo*)clist->FindObject(
"AliESDCaloTrigger");
969 cinfo = (TStreamerInfo*)clist->FindObject(
"AliAODCaloTrigger");
974 Int_t classversionid = cinfo->GetClassVersion();
977 if (classversionid >= verid)
982 }
else AliInfo(
"Streamer info for trigger class not available, bit not changed");
983 }
else AliInfo(
"Streamer list not available!, bit not changed");
985 Int_t runnumber = InputEvent()->GetRunNumber() ;
991 fGeometry = AliEMCALGeometry::GetInstanceFromRunNumber(runnumber);
992 AliInfo(Form(
"Get EMCAL geometry name to <%s> for run %d",
fGeometry->GetName(),runnumber));
997 AliInfo(Form(
"Set EMCAL geometry name to <%s>",
fGeoName.Data()));
1044 if((triggerclasses.Contains(
"CINT") || triggerclasses.Contains(
"CPBI2_B1") ) &&
1045 (triggerclasses.Contains(
"-B-") || triggerclasses.Contains(
"-I-")) &&
1046 triggerclasses.Contains(
"-NOPF-ALLNOTRD") )
fEventMB = kTRUE;
1051 if( triggerclasses.Contains(
"-B-") || triggerclasses.Contains(
"-S-") || triggerclasses.Contains(
"-I-") )
1053 if( triggerclasses.Contains(
"CEMC") &&
1054 !triggerclasses.Contains(
"EGA" ) &&
1055 !triggerclasses.Contains(
"EJE" ) &&
1056 !triggerclasses.Contains(
"EG1" ) &&
1057 !triggerclasses.Contains(
"EJ1" ) &&
1058 !triggerclasses.Contains(
"EG2" ) &&
1059 !triggerclasses.Contains(
"EJ2" ) )
fEventL0 = kTRUE;
1061 if( triggerclasses.Contains(
"EGA" ) || triggerclasses.Contains(
"EG1" ) )
fEventL1G = kTRUE;
1062 if( triggerclasses.Contains(
"EG2" ) )
fEventL1G2 = kTRUE;
1064 if( triggerclasses.Contains(
"EJE" ) || triggerclasses.Contains(
"EJ1" ) )
fEventL1J = kTRUE;
1065 if( triggerclasses.Contains(
"EJ2" ) )
fEventL1J2 = kTRUE;
1069 if (triggerclasses.Contains(
"CCENT_R2-B-NOPF-ALLNOTRD"))
fEventCen = kTRUE;
1070 else if(triggerclasses.Contains(
"CSEMI_R1-B-NOPF-ALLNOTRD"))
fEventSem = kTRUE;
1084 fhNEvents =
new TH1F(
"hNEvents",
"Number of selected events",20,0,20);
1086 fhNEvents ->GetXaxis()->SetBinLabel(1 ,
"All");
1087 fhNEvents ->GetXaxis()->SetBinLabel(2 ,
"MB");
1088 fhNEvents ->GetXaxis()->SetBinLabel(3 ,
"Central Pb");
1089 fhNEvents ->GetXaxis()->SetBinLabel(4 ,
"SemiCentral Pb");
1090 fhNEvents ->GetXaxis()->SetBinLabel(5 ,
"L0");
1091 fhNEvents ->GetXaxis()->SetBinLabel(6 ,
"L1-G1");
1092 fhNEvents ->GetXaxis()->SetBinLabel(7 ,
"L1-G2");
1093 fhNEvents ->GetXaxis()->SetBinLabel(8 ,
"L1-J1");
1094 fhNEvents ->GetXaxis()->SetBinLabel(9 ,
"L1-J2");
1095 fhNEvents ->GetXaxis()->SetBinLabel(10 ,
"L1-G1 & !L1-J1");
1096 fhNEvents ->GetXaxis()->SetBinLabel(11 ,
"L1-J1 & !L1-G1");
1097 fhNEvents ->GetXaxis()->SetBinLabel(12 ,
"L1-J1 & L1-G1");
1098 fhNEvents ->GetXaxis()->SetBinLabel(13 ,
"MB & !L1 & !L0");
1099 fhNEvents ->GetXaxis()->SetBinLabel(14,
"L0 & !MB");
1100 fhNEvents ->GetXaxis()->SetBinLabel(15,
"L1-G1 & !MB");
1101 fhNEvents ->GetXaxis()->SetBinLabel(16,
"L1-J1 & !MB");
1102 fhNEvents ->GetXaxis()->SetBinLabel(17,
"L1-G1 & (Cen | Semi)");
1103 fhNEvents ->GetXaxis()->SetBinLabel(18,
"L1-J1 & (Cen | Semi)");
1104 fhNEvents ->GetXaxis()->SetBinLabel(19,
"L1-G2 & !L1-G1");
1105 fhNEvents ->GetXaxis()->SetBinLabel(20,
"L1-J2 & !L1-J1");
1107 fhFORAmp =
new TH2F(
"hFORAmp",
"FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column",
1109 fhFORAmp ->SetXTitle(
"Index #eta (columnns)");
1110 fhFORAmp ->SetYTitle(
"Index #phi (rows)");
1113 fhFORAmpL1G =
new TH2F(
"hFORAmpL1G1",
"FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1G1 trigger condition",
1119 fhFORAmpL1G2 =
new TH2F(
"hFORAmpL1G2",
"FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1G2 trigger condition",
1125 fhFORAmpL1J =
new TH2F(
"hFORAmpL1J1",
"FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1J1 trigger condition",
1131 fhFORAmpL1J2 =
new TH2F(
"hFORAmpL1J2",
"FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1J2 trigger condition",
1138 fhL0Amp =
new TH2F(
"hL0Amp",
"FALTRO signal per Row and Column",
1140 fhL0Amp ->SetXTitle(
"Index #eta (columnns)");
1141 fhL0Amp ->SetYTitle(
"Index #phi (rows)");
1142 fhL0Amp ->SetZTitle(
"Amplitude");
1144 fhL0AmpL1G =
new TH2F(
"hL0AmpL1G",
"FALTRO signal per Row and Column, with L1G trigger condition",
1146 fhL0AmpL1G ->SetXTitle(
"Index #eta (columnns)");
1151 fhL0AmpL1J =
new TH2F(
"hL0AmpL1J",
"FALTRO signal per Row and Column, with L1j trigger condition",
1153 fhL0AmpL1J ->SetXTitle(
"Index #eta (columnns)");
1158 fhL1Amp =
new TH2F(
"hL1Amp",
"STU signal per Row and Column",
1160 fhL1Amp ->SetXTitle(
"Index #eta (columnns)");
1161 fhL1Amp ->SetYTitle(
"Index #phi (rows)");
1162 fhL1Amp ->SetZTitle(
"Amplitude");
1164 fhL1GAmp =
new TH2F(
"hL1G1Amp",
"STU signal per Row and Column for L1 Gamma1",
1166 fhL1GAmp ->SetXTitle(
"Index #eta (columnns)");
1167 fhL1GAmp ->SetYTitle(
"Index #phi (rows)");
1170 fhL1G2Amp =
new TH2F(
"hL1G2Amp",
"STU signal per Row and Column for L1 Gamma2",
1172 fhL1G2Amp ->SetXTitle(
"Index #eta (columnns)");
1173 fhL1G2Amp ->SetYTitle(
"Index #phi (rows)");
1176 fhL1JAmp =
new TH2F(
"hL1J1Amp",
"STU signal per Row and Column for L1 Jet1",
1178 fhL1JAmp ->SetXTitle(
"Index #eta (columnns)");
1179 fhL1JAmp ->SetYTitle(
"Index #phi (rows)");
1182 fhL1J2Amp =
new TH2F(
"hL1J2Amp",
"STU signal per Row and Column for L1 Jet2",
1184 fhL1J2Amp ->SetXTitle(
"Index #eta (columnns)");
1185 fhL1J2Amp ->SetYTitle(
"Index #phi (rows)");
1188 fhL1FOREnergy =
new TH2F(
"hL1FOREnergy",
"FOR index vs FOR energy",
1193 fhL0Patch =
new TH2F(
"hL0Patch",
"FOR with associated L0 Patch",
1195 fhL0Patch ->SetXTitle(
"Index #eta (columnns)");
1196 fhL0Patch ->SetYTitle(
"Index #phi (rows)");
1199 fhL1GPatch =
new TH2F(
"hL1G1Patch",
"FOR with associated L1 Gamma Patch1",
1201 fhL1GPatch ->SetXTitle(
"Index #eta (columnns)");
1205 fhL1G2Patch =
new TH2F(
"hL1G2Patch",
"FOR with associated L1 Gamma2 Patch",
1211 fhL1GPatchNotFake =
new TH2F(
"hL1G1PatchNotFake",
"FOR with L1 Gamma1 Patch associated to energetic cells",
1217 fhL1GPatchFake =
new TH2F(
"hL1G1PatchFake",
"FOR without L1 Gamma1 Patch associated to energetic cells",
1224 fhL1GPatchNotAllFake =
new TH2F(
"hL1G1PatchNotAllFake",
"FOR with one L1 Gamma1 Patch associated to an energetic cell",
1230 fhL1GPatchAllFake =
new TH2F(
"hL1G1PatchAllFake",
"FOR without any L1 Gamma1 Patch associated to an energetic cell",
1236 fhL1GPatchAllFakeMax =
new TH2F(
"hL1G1PatchAllFakeMax",
"FOR with L1 Gamma1 Patch Max not associated to an energetic cell",
1242 fhL1GPatchNotAllFakeMax =
new TH2F(
"hL1G1PatchNotAllFakeMax",
"FOR with one L1 Gamma1 Patch Max associated to an energetic cell",
1248 fhL1GPatchNotAllFakeMaxE =
new TH1F(
"hL1G1PatchNotAllFakeMaxE",
"Energy distribution of FOR in events with L1 Gamma1 Patch Max associated to an energetic cell",
1253 fhL1GPatchAllFakeMaxE =
new TH1F(
"hL1G1PatchAllFakeMaxE",
"Energy distribution of FOR in events with L1 Gamma1 Patch Max not associated to an energetic cell",
1257 fhL1GPatchNotAllFakeE =
new TH1F(
"hL1G1PatchNotAllFakeE",
"Energy distribution of FOR in events with L1 Gamma1 Patch not associated to an energetic cell",
1261 fhL1GPatchAllFakeE =
new TH1F(
"hL1G1PatchAllFakeE",
"Energy distribution of FOR in events with L1 Gamma1 Patch associated to an energetic cell",
1266 fhL1GPatchFakeE =
new TH1F(
"hL1G1PatchFakeE",
"Energy distribution of FOR with L1 Gamma1 Patch not associated to an energetic cell",
1270 fhL1GPatchNotFakeE =
new TH1F(
"hL1G1PatchNotFakeE",
"Energy distribution of FOR with L1 Gamma1 Patch associated to an energetic cell",
1274 fhNPatchFake =
new TH2F(
"hNPatchFake",
"number of fake patchs vs. all patchs are fake",
1275 3,0,3, 2880,0,2880);
1281 fhNPatchNotFake =
new TH2F(
"hNPatchNotFake",
"number of Not fake patchs vs. all patchs are fake",
1282 3, 0, 3, 200,0,1000);
1288 fhL1JPatch =
new TH2F(
"hL1J1Patch",
"FOR with associated L1 Jet1 Patch",
1290 fhL1JPatch ->SetXTitle(
"Index #eta (columnns)");
1294 fhL1J2Patch =
new TH2F(
"hL1J2Patch",
"FOR with associated L1 Jet2 Patch",
1301 fhFEESTU ->SetXTitle(
"STU/FEE signal");
1306 fhTRUSTU ->SetXTitle(
"STU/TRU signal");
1322 fhL1GPatchMax =
new TH2F(
"hL1G1PatchMax",
"FOR of max amplitude patch with associated L1 Gamma1 Patch",
1328 fhL1G2PatchMax =
new TH2F(
"hL1G2PatchMax",
"FOR of max amplitude patch with associated L1 Gamma2 Patch",
1334 fhL1JPatchMax =
new TH2F(
"hL1J1PatchMax",
"FOR of max amplitude patch with associated L1 Jet1 Patch",
1340 fhL1J2PatchMax =
new TH2F(
"hL1J2PatchMax",
"FOR of max amplitude patch with associated L1 Jet2 Patch",
1395 fhV0STU =
new TH2I(
"hV0STU",
"Total signal STU vs V0C+V0S",
1397 fhV0STU ->SetXTitle(
"Signal V0C+V0A");
1398 fhV0STU ->SetYTitle(
"Total signal STU");
1399 fhV0STU ->SetZTitle(
"counts");
1421 TString hName [] = {
"MB",
"L0",
"L1G1",
"L1G2",
"L1J1",
"L1J2",
"L1G1NoL1J1",
"L1J1NoLG1",
"L1G2NoL1G1",
"L1J2NoL1J1",
"Central",
"SemiCentral"};
1422 TString hTitle [] = {
"MB trigger",
"L0 trigger",
"L1 Gamma1 trigger",
"L1 Gamma2 trigger",
"L1 Jet1 trigger",
"L1 Jet2 trigger",
1423 "L1 Gamma1 trigger and not L1 Jet1" ,
"L1 Jet1 trigger and not L1 Gamma1",
1424 "L1 Gamma2 trigger and not L1 Gamma1",
"L1 Jet2 trigger and not L1 Jet1",
1425 "Central trigger",
"SemiCentral trigger"};
1427 for(Int_t i=0; i < 3; i++)
1433 Form(
"clusters E distribution for %s, no other EMCAL trigger on",hTitle[j].
Data()),
1439 Form(
"maximum energy cluster per event for %s, no other EMCAL trigger on",hTitle[j].
Data()),
1449 fhV0[i] =
new TH1F(Form(
"hV0%s",hName[i].
Data()),
1450 Form(
"V0 distribution for %s",hTitle[i].
Data()),
1452 fhV0[i]->SetXTitle(
"V0");
1456 fhClus[i] =
new TH1F(Form(
"hClus%s",hName[i].
Data()),
1457 Form(
"clusters E distribution for %s",hTitle[i].
Data()),
1459 fhClus[i] ->SetXTitle(
"Energy (GeV)");
1463 Form(
"maximum energy cluster per event for %s",hTitle[i].
Data()),
1465 fhClusMax[i]->SetXTitle(
"Energy (GeV)");
1471 Form(
"clusters E distribution vs centrality for %s",hTitle[i].
Data()),
1473 fhClusCen[i] ->SetXTitle(
"Energy (GeV)");
1478 Form(
"maximum energy cluster per event vs centrality for %s",hTitle[i].
Data()),
1488 fhClusV0[i] =
new TH2F(Form(
"hClusV0%s",hName[i].
Data()),
1489 Form(
"clusters E distribution vs V0 for %s",hTitle[i].
Data()),
1491 fhClusV0[i] ->SetXTitle(
"Energy (GeV)");
1496 Form(
"maximum energy cluster per event vs V0 for %s",hTitle[i].
Data()),
1506 Form(
"clusters distribution #eta vs #phi for %s, E > %1.1f GeV",hTitle[i].
Data(),
fEtaPhiEnMin),
1513 Form(
"clusters distribution #eta vs #phi for %s, E < %1.1f GeV",hTitle[i].
Data(),
fEtaPhiEnMin),
1522 Form(
"maximum energy cluster per event #eta vs #phi for %s, E > %1.1f GeV",hTitle[i].
Data(),
fEtaPhiEnMin),
1529 Form(
"maximum energy cluster per event #eta vs #phi for %s, E < %1.1f GeV",hTitle[i].
Data(),
fEtaPhiEnMin),
1536 Form(
"Cluster hit map in calorimeter (max cell), column vs row for %s, E > %1.1f GeV",hTitle[i].
Data(),
fEtaPhiEnMin),
1543 Form(
"Max E cluster hit map in calorimeter (max cell), column vs row for %s, E > %1.1f GeV",
1550 Form(
"Cluster hit map in calorimeter (max cell), column vs row for %s, E < %1.1f GeV",hTitle[i].
Data(),
fEtaPhiEnMin),
1557 Form(
"Max E cluster hit map in calorimeter (max cell), column vs row for %s, E < %1.1f GeV",
1566 Form(
"clusters distribution vs #eta for %s",hTitle[i].
Data()),
1568 fhClusEta[i] ->SetXTitle(
"Energy (GeV)");
1573 Form(
"maximum energy cluster per event vs #eta for %s",hTitle[i].
Data()),
1582 Form(
"clusters distribution vs #phi for %s",hTitle[i].
Data()),
1584 fhClusPhi[i] ->SetXTitle(
"Energy (GeV)");
1589 Form(
"maximum energy cluster per event vs #phi for %s",hTitle[i].
Data()),
1605 AliVEvent*
event = InputEvent();
1609 AliError(
"No Event, exit");
1617 TString triggerclasses =
event->GetFiredTriggerClasses();
1620 Int_t eventType = ((AliVHeader*)event->GetHeader())->GetEventType();
1625 if(triggerclasses==
"" || eventType != 7)
return;
Bool_t fEventSem
Bit for Semi Central events.
TH2F * fhL0Amp
! FALTRO signal per Row and Column for FOR involves L0 patch
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
TH2F * fhL1Amp
! STU signal per Row and Column for FOR involves L0 patch
void FillTriggerPatchMaps(TString triggerclasses)
Fill L0, L1 patch arrays.
TH2F * fhClusPhi[fgkTriggerCombi]
! Clusters Phi vs E distribution for a trigger
void UserCreateOutputObjects()
Init histograms and geometry.
TH2F * fhNPatchFake
! number of fake patchs per event vs. if all were fakes or not
TH2F * fhL1GPatchMax
! FOR of max. amplitude patch with L1 Gamma patch associated
static const int fgkFALTROCols
Total number of fake altro collumns in EMCAL, (ALTRO channels in one SM times 2 SM divided by 2 per F...
TH1F * fhClusMax[fgkTriggerCombi]
! Maximum E Cluster per event distribution for MB trigger
TH2F * fhClusV0[fgkTriggerCombi]
! Clusters V0 vs E distribution for a trigger
TH2F * fhNPatchNotFake
! number of non fake patchs per events vs. if all were fakes or not
TH2F * fhClusPhiMax[fgkTriggerCombi]
! Maximum E Cluster vs Phi per event distribution for a trigger
TH2F * fhClusCenMax[fgkTriggerCombi]
! Maximum E Cluster vs Centrality per event distribution for a trigger
TH2F * fhL1JPatch
! FOR with L1 Jet patch associated
void FillV0Histograms()
Fill V0 histograms, only for ESDs.
TH2F * fhL1J2Patch
! FOR with L1 Jet patch associated
TProfile2D * fhFORMeanAmp
! Mean FastOR(FEE) signal per Row and Column
void AccessOADB()
Set the AODB bad channels at least once.
void FillL1JetPatchHistograms()
L1 jet trigger patches histograms.
void FillCorrelationHistograms()
FEE-TRU-STU correlation checks.
static const int fgkFALTRORows
Total number of fake altro rows in EMCAL, temporary, not considers DCal yet (ALTRO channels in one SM...
TH2F * fhClusEtaPhiHighCellMaxCluMax[fgkTriggerCombi]
! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for MB trigger...
TH2F * fhClusEtaPhiHighCellMax[fgkTriggerCombi]
! Clusters maximum energy cell index eta vs phi distribution for a trigger, energy above fEtaPhiEnMin...
Int_t fSTUTotal
Sum of STU time sums.
TH2F * fhClusEtaPhiLowCellMax[fgkTriggerCombi]
! Clusters maximum energy cell index eta vs phi distribution for a trigger, energy below fEtaPhiEnMin...
TProfile2D * fhL0MeanAmp
! Mean FastOR(TRU) signal per Row and Column
TH2F * fhClusEta[fgkTriggerCombi]
! Clusters eta vs E distribution for a trigger
void FillEventCounterHistogram()
Fill a TH1 histogram, each bin corresponds to a even trigger type.
TH2F * fhClusEtaPhiHighCluMax[fgkTriggerCombi]
! Maximum E Cluster, Phi vs Eta per event distribution for a trigger, energy above fEtaPhiEnMin GeV ...
TH2F * fhL0AmpL1G
! FALTRO signal per Row and Column for FOR involves L0 patch, with L1G trigger event ...
TH2F * fhClusEtaPhiLowCellMaxCluMax[fgkTriggerCombi]
! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for MB trigger...
AliEMCALGeometry * fGeometry
Access to EMCAL geometry utils.
TH2F * fhL1JPatchMax
! FOR of max. amplitude patch with L1 Jet patch associated
Bool_t fMCData
Simulation On/Off.
TH1F * fhNEvents
! Number of selected events
AliEMCALRecoUtils * fRecoUtils
RecoUtils.
Double_t fMapTrigL1J2[fgkFALTRORows][fgkFALTROCols]
TH1F * fhL1GPatchAllFakeE
! Energy distrib of FOR forfake events, all patch energy
TH1F * fhL1GPatchNotFakeE
! Energy distrib of FOR for non fake events, all patch energy
TH2F * fhL1GAmp
! STU signal per Row and Column for FOR position of L1 Gamma patch (top-left)
TH2F * fhL0Patch
! FOR with L0 patch associated
Double_t fMapTrigL0L1G[fgkFALTRORows][fgkFALTROCols]
TString fGeoName
Name of geometry used.
Int_t fNBinsSTUSignal
V0 distribution for a triggered event.
void FillClusterHistograms(Int_t triggerNumber, Bool_t maxCluster, Float_t e, Float_t eta, Float_t phi, Float_t ietamax, Float_t iphimax, Float_t centrality, Float_t v0AC)
TH2F * fhL1JAmp
! STU signal per Row and Column for FOR position of L1 Jet patch (top-left)
TH2F * fhFORAmpL1G
! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Gamma trigger event...
Double_t fMapTrigL0[fgkFALTRORows][fgkFALTROCols]
TH1F * fhV0[fgkTriggerCombi]
Bool_t fAccessOADB
Get calibration from OADB for EMCAL.
TH2F * fhL1GPatchAllFakeMax
! FOR without any L1 Gamma patch associated with energy in the related cell, maximal energy patch : f...
TH1F * fhClusMBPure[3]
! Clusters E distribution for pure MB trigger
TH2F * fhL1G2Patch
! FOR with L1 Gamma patch associated
Float_t fTRUTotal
Sum of TRU amplitudes.
Double_t fMapTrigL1[fgkFALTRORows][fgkFALTROCols]
Double_t fMapTrigL1G[fgkFALTRORows][fgkFALTROCols]
TH2F * fhL0AmpL1J
! FALTRO signal per Row and Column for FOR involves L0 patch, with L1J trigger event ...
void Init()
Init analysis parameters not set before.
TH2F * fhJPMaxVV0TT
! V0 signal vs maximum jet L1 patch
TH1F * fhClus[fgkTriggerCombi]
! Clusters E distribution for a trigger
TH2F * fhTRUSTU
! Correlation TRU vs STU
TH1F * fhL1GPatchAllFakeMaxE
! Energy distrib FOR for fake events, patch of maximal energy
AliAnalysisTaskEMCALTriggerQA(const char *name)
Constructor. Init stuff.
TH2F * fhClusEtaPhiLowCluMax[fgkTriggerCombi]
! Maximum E Cluster, Phi vs Eta per event distribution for MB trigger, energy below fEtaPhiEnMin GeV ...
TH2F * fhL1GPatchNotAllFakeMax
! FOR with at least one L1 Gamma patch associated with energy in the related cell, maximal energy patch : not fake events
TH2F * fhFORAmpL1J2
! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Jet2 trigger event ...
TH2F * fhL1GPatchAllFake
! FOR without any L1 Gamma patch associated with energy in the related cells: fake patch ...
TH1F * fhClusMaxMBPure[3]
! Maximum E Cluster per event distribution for pure MB trigger
TH2F * fhClusEtaMax[fgkTriggerCombi]
! Maximum E Cluster vs Eta per event distribution for a trigger
Bool_t fEventL1J
Bit for L1 Jet 1 events.
TH2F * fhL1J2Amp
! STU signal per Row and Column for FOR position of L1 Jet2 patch (top-left)
TH2F * fhFEESTU
! Correlation FEE vs STU
TH2F * fhL1J2PatchMax
! FOR of max. amplitude patch with L1 Jet patch associated
void FillL1GammaPatchHistograms()
L1 Gamma trigger patches histograms.
TH2F * fhClusEtaPhiHigh[fgkTriggerCombi]
! Clusters eta vs phi distribution for a trigger, energy above fEtaPhiEnMin GeV
Bool_t fEventL1J2
Bit for L1 JEt 2 events.
Double_t fMapCellL1G[fgkFALTRORows][fgkFALTROCols]
static const int fgkTriggerCombi
Total number of trigger combinations defined above.
TH2F * fhClusCen[fgkTriggerCombi]
! Clusters Centrality vs E distribution for a trigger
Double_t fMapTrigL1G2[fgkFALTRORows][fgkFALTROCols]
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)
void FillMapHistograms()
Matrix with signal per channel.
TH2F * fhL1G2PatchMax
! FOR of max. amplitude patch with L1 Gamma patch associated
Bool_t fFillV0SigHisto
V0 signal creation and fill.
Int_t fBitEJE
EJE trigger bit.
TH1F * fhL1GPatchNotAllFakeE
! Energy distrib of FOR for non fake events, all patch energy
TH2F * fhFORAmp
! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column
void InitHistogramArrays()
Histograms array initialization called in constructor.
Int_t fBitEGA
EGA trigger bit.
TProfile2D * fhL1MeanAmp
! Mean FastOR(STU) signal per Row and Column
Bool_t fFillClusAcceptHisto
Fill eta/phi distributions.
TH2I * fhV0STU
! Total signal STU vs V0C+V0S
TString fOADBFilePath
Default path $ALICE_PHYSICS/OADB/EMCAL, if needed change.
TLorentzVector fMomentum
Cluster kinematics, temporal, avoid recreation per event.
TH2F * fhL1GPatchNotFake
! FOR with L1 Gamma patch associated but no energy in the related cells
TList * fOutputList
! Output list
Bool_t fEventL1G2
Bit for L1 Gamma 2 events.
TH2F * fhL1GPatchFake
! FOR with L1 Gamma patch associated
Double_t fMapCellL1J2[fgkFALTRORows][fgkFALTROCols]
Double_t fMapCellL1G2[fgkFALTRORows][fgkFALTROCols]
void FillCellMaps()
Cells analysis. Fill FEE energy per channel array.
TH2F * fhClusEtaPhiLow[fgkTriggerCombi]
! Clusters eta vs phi distribution for a trigger, energy below fEtaPhiEnMin GeV
Float_t fV0Trigger
V0 signal from trigger.
TH2F * fhL1GPatchNotAllFake
! FOR with at least 1 L1 Gamma patch associated that has energy in the related celles : not a fake ev...
TH1F * fhL1GPatchNotAllFakeMaxE
! Energy distrib of FOR for non fake events, patch of maximal energy
TH2F * fhGPMaxVV0TT
! V0 signal vs maximum gamma L1 patch
Float_t fEtaPhiEnMin
Min energy for Eta/Phi histograms.
Fill histograms with basic QA information for EMCAL offline trigger.
Bool_t fEventL0
Bit for L0 events.
Bool_t fEventCen
Bit for Central events.
TH2F * fhClusV0Max[fgkTriggerCombi]
! Maximum E Cluster vs Centrality per event distribution for a trigger
TH2F * fhFORAmpL1J
! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Jet trigger event ...
Bool_t fGeoSet
Geometry already set.
Double_t fMapCell[fgkFALTRORows][fgkFALTROCols]
TH2F * fhFORAmpL1G2
! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Gamma2 trigger even...
TH2F * fhL1FOREnergy
! STU signal per Row and Column for FOR position vs FOR energy
Double_t fMapTrigL0L1J[fgkFALTRORows][fgkFALTROCols]
Bool_t fEventMB
Bit for MB events.
Bool_t fOADBSet
AODB parameters already set.
TH2F * fhL1G2Amp
! STU signal per Row and Column for FOR position of L1 Gamma2 patch (top-left)
void UserExec(Option_t *option)
void SetTriggerEventBit(TString list)
Check what trigger is the event, set the corresponding bit.
Double_t fMapCellL1J[fgkFALTRORows][fgkFALTROCols]
TH1F * fhL1GPatchFakeE
! Energy distrib of FOR for fake events, all patch energy
Double_t fMapTrigL1J[fgkFALTRORows][fgkFALTROCols]
Bool_t fEventL1G
Bit for L1 Gamma 1 events.
TH2F * fhL1GPatch
! FOR with L1 Gamma patch associated