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" 37 #include "AliMultSelection.h" 38 #include "AliDataFile.h" 52 fOutputList(0), fRecoUtils(0x0),
53 fGeoSet(0), fGeometry(0), fGeoName(
""),
54 fOADBSet(kFALSE), fAccessOADB(kTRUE), fOADBFilePath(
""),
55 fBitEGA(0), fBitEJE(0),
57 fSTUTotal(0), fTRUTotal(0),
58 fV0Trigger(0), fV0A(0), fV0C(0),
59 fFillV0SigHisto(0), fFillCenHisto(0), fFillClusAcceptHisto(0),
61 fFirstSM (0), fLastSM (0),
62 fCentEstimator(
"V0M"), fUseAliCentrality(0),
64 fEventL0 (0), fEventL0D (0),
65 fEventL1G (0), fEventL1GD (0),
66 fEventL1G2 (0), fEventL1G2D(0),
67 fEventL1J (0), fEventL1JD (0),
68 fEventL1J2 (0), fEventL1J2D(0),
69 fEventCen (0), fEventSem (0),
72 fhNEvents(0), fhFORAmp(0),
73 fhFORAmpL1G(0), fhFORAmpL1G2(0),
74 fhFORAmpL1J(0), fhFORAmpL1J2(0),
75 fhL0Amp(0), fhL0AmpL1G(0), fhL0AmpL1J(0),
76 fhL1Amp(0), fhL1GAmp(0), fhL1G2Amp(0),
77 fhL1JAmp(0), fhL1J2Amp(0), fhL1FOREnergy(0),
78 fhL0Patch(0), fhL1GPatch(0), fhL1G2Patch(0),
79 fhL1GPatchNotFake(0), fhL1GPatchFake(0), fhL1GPatchNotAllFake(0),
80 fhL1GPatchAllFake(0), fhL1GPatchNotAllFakeMax(0),
81 fhL1GPatchAllFakeMax(0), fhL1GPatchNotAllFakeMaxE(0),
82 fhL1GPatchAllFakeMaxE(0), fhL1GPatchNotAllFakeE(0),
83 fhL1GPatchAllFakeE(0), fhL1GPatchFakeE(0),
84 fhL1GPatchNotFakeE(0), fhNPatchFake(0), fhNPatchNotFake(0),
85 fhL1JPatch(0), fhL1J2Patch(0),
86 fhFEESTU(0), fhTRUSTU(0), fhV0STU(0),
87 fhGPMaxVV0TT(0), fhJPMaxVV0TT(0),
88 fhFORMeanAmp(0), fhL0MeanAmp(0), fhL1MeanAmp(0),
89 fhL1GPatchMax(0), fhL1G2PatchMax(0),
90 fhL1JPatchMax(0), fhL1J2PatchMax(0),
92 fNBinsSTUSignal (300), fMaxSTUSignal (30000),
93 fNBinsTRUSignal (300), fMaxTRUSignal (30000),
94 fNBinsV0Signal (300), fMaxV0Signal (30000),
95 fNBinsSTUFEERatio(300), fMaxSTUFEERatio(100),
96 fNBinsSTUTRURatio(300), fMaxSTUTRURatio(100),
97 fNBinsClusterE (100), fMaxClusterE (50),
98 fNBinsClusterPhi (250), fMaxClusterPhi (5.71), fMinClusterPhi (1.39),
99 fNBinsClusterEta (96), fMaxClusterEta (0.7),
101 fMapCellL1G (), fMapCellL1G2 (),
102 fMapCellL1J (), fMapCellL1J2 (),
103 fMapTrigL0 (), fMapTrigL1 (),
104 fMapTrigL0L1G(), fMapTrigL0L1J(),
105 fMapTrigL1G (), fMapTrigL1G2 (),
106 fMapTrigL1J (), fMapTrigL1J2 ()
174 DefineOutput(1, TList::Class());
185 Int_t runnumber = InputEvent()->GetRunNumber() ;
187 AliInfo(Form(
"Get AODB parameters from EMCAL in %s for run %d",
fOADBFilePath.Data(),runnumber));
192 if(
fRecoUtils->IsBadChannelsRemovalSwitchedOn())
194 AliOADBContainer *contBC=
new AliOADBContainer(
"");
196 contBC->InitFromFile(Form(
"%s/EMCALBadChannels.root",
fOADBFilePath.Data()),
"AliEMCALBadChannels");
198 contBC->InitFromFile(AliDataFile::GetFileNameOADB(
"EMCAL/EMCALBadChannels.root").data(),
"AliEMCALBadChannels");
204 AliInfo(
"Remove EMCAL bad cells");
206 for (
Int_t i=0; i<nSM; ++i)
208 TH2I *hbm =
fRecoUtils->GetEMCALChannelStatusMap(i);
213 hbm=(TH2I*)arrayBC->FindObject(Form(
"EMCALBadChannelMap_Mod%d",i));
216 AliError(Form(
"Can not get EMCALBadChannelMap_Mod%d",i));
220 hbm->SetDirectory(0);
226 }
else AliInfo(
"Do NOT remove EMCAL bad channels");
239 Int_t posX = -1, posY = -1;
240 Int_t nSupMod = -1, ieta = -1, iphi = -1, nModule = -1, nIphi = -1, nIeta = -1;
244 AliVCaloCells& cells= *(InputEvent()->GetEMCALCells());
248 for (
Int_t icell = 0; icell < cells.GetNumberOfCells(); icell++)
252 Double_t amp =0., time = 0., efrac = 0;
255 cells.GetCell(icell, absId, amp, time,mclabel,efrac);
257 fGeometry->GetCellIndex(absId, nSupMod, nModule, nIphi, nIeta);
258 fGeometry->GetCellPhiEtaIndexInSModule(nSupMod, nModule, nIphi, nIeta, iphi, ieta);
262 Int_t shiftEta = AliEMCALGeoParams::fgkEMCALCols;
265 if ( nSupMod > 11 && nSupMod < 18) shiftEta+=AliEMCALGeoParams::fgkEMCALCols/3;
267 posX = (nSupMod % 2) ? ieta + shiftEta : ieta;
268 posY = iphi + AliEMCALGeoParams::fgkEMCALRows * int(nSupMod / 2);
271 if ( nSupMod > 11 && nSupMod < 20) posY -= (2*AliEMCALGeoParams::fgkEMCALRows / 3);
278 AliWarning(Form(
"Wrong Position (x,y) = (%d,%d)",posX,posY));
311 AliVCaloTrigger& trg= * (InputEvent()->GetCaloTrigger(
"EMCAL"));
315 Int_t posX = -1, posY = -1;
327 trg.GetPosition(posX,posY);
329 if (posX > -1 && posY > -1)
333 trg.GetNL0Times(nTimes);
335 trg.GetL0Times(l0Times);
338 trg.GetAmplitude(ampL0);
339 if (ampL0 > 0)
fMapTrigL0[posY][posX] = ampL0;
341 if(triggerclasses.Contains(
"CEMC7EGA-B-NOPF-CENTNOTRD") || triggerclasses.Contains(
"CPBI2EGA") ||
342 triggerclasses.Contains(
"CPBI2EG1") || triggerclasses.Contains(
"CINT7EG1-B-NOPF-CENTNOPMD") ||
343 triggerclasses.Contains(
"CINT7DG1-B-NOPF-CENTNOPMD"))
fMapTrigL0L1G[posY][posX] += ampL0;
345 if(triggerclasses.Contains(
"CEMC7EJE-B-NOPF-CENTNOTRD") || triggerclasses.Contains(
"CPBI2EJE") ||
346 triggerclasses.Contains(
"CPBI2EJ1") || triggerclasses.Contains(
"CINT7EJ1-B-NOPF-CENTNOPMD") ||
347 triggerclasses.Contains(
"CINT7DJ1-B-NOPF-CENTNOPMD"))
fMapTrigL0L1J[posY][posX] += ampL0;
351 for (
Int_t itime = 0; itime < nTimes; itime++)
353 if (l0Times[itime] > 7 && l0Times[itime] < 10) l0fired = 1;
364 trg.GetTriggerBits(bit);
367 trg.GetL1TimeSum(ts);
420 AliInfo(Form(
"Large fTRUTotal %f",
fTRUTotal));
423 AliInfo(Form(
"Large fSTUTotal %d",
fSTUTotal));
439 InputEvent()->GetPrimaryVertex()->GetXYZ(v);
442 TRefArray* caloClus =
new TRefArray();
443 InputEvent()->GetEMCALClusters(caloClus);
445 Int_t nCaloClusters = caloClus->GetEntriesFast();
457 Int_t nSupMod = -1, nSupModMax = -1, ieta = -1, iphi = -1;
466 if(InputEvent()->GetCentrality()) centrality = InputEvent()->GetCentrality()->GetCentralityPercentile(
fCentEstimator);
470 AliMultSelection* multSelection = (AliMultSelection * ) fInputEvent->FindListObject(
"MultSelection") ;
471 if(multSelection) centrality = multSelection->GetMultiplicityPercentile(
fCentEstimator, kTRUE) ;
499 for(
Int_t icalo = 0; icalo < nCaloClusters; icalo++)
501 AliVCluster *clus = (AliVCluster*) (caloClus->At(icalo));
503 if(!clus->IsEMCAL())
continue;
505 if(!
fRecoUtils->IsGoodCluster(clus,
fGeometry,InputEvent()->GetEMCALCells(),InputEvent()->GetBunchCrossNumber()))
508 if(clus->GetNCells() < 2)
continue ;
513 Int_t idAbs = -1, iphi0 = -1, ieta0 = -1;
515 idAbs,nSupMod,ieta0,iphi0,shared);
520 Int_t shiftEta = AliEMCALGeoParams::fgkEMCALCols;
523 if ( nSupMod > 11 && nSupMod < 18) shiftEta+=AliEMCALGeoParams::fgkEMCALCols/3;
525 ieta = (nSupMod % 2) ? ieta0 + shiftEta : ieta0;
526 iphi = iphi0 + AliEMCALGeoParams::fgkEMCALRows * int(nSupMod / 2);
529 if ( nSupMod > 11 && nSupMod < 20) iphi -= (2*AliEMCALGeoParams::fgkEMCALRows / 3);
535 AliWarning(Form(
"Wrong Position (x,y) = (%d,%d)",ieta,iphi));
540 if( phi < 0 ) phi+=TMath::TwoPi();
549 nSupModMax = nSupMod;
659 fhClus [triggerNumber]->Fill(e);
665 fhClusSM [triggerNumber][nSupMod]->Fill(e);
723 Double_t ampFOR[60] = {0.}, ampL0[60] = {0.}, ampL1[60] = {0.};
730 fGeometry->GetAbsFastORIndexFromPositionInEMCAL(j,i,idFOR);
733 fGeometry->GetTRUFromAbsFastORIndex(idFOR,iTRU,iADC);
748 for (
Int_t i = 0; i < 60; i++)
750 if (ampFOR[i] != 0 && ampL1[i] != 0)
752 fhFEESTU->Fill(ampL1[i]/ampFOR[i],i);
754 AliWarning(Form(
"Large STU/FEE ratio %f",ampL1[i]/ampFOR[i]));
757 if (ampL0[i] != 0 && ampL1[i] != 0)
759 fhTRUSTU->Fill(ampL1[i]/ampL0[i] ,i);
761 AliWarning(Form(
"Large STU/TRU ratio %f",ampL1[i]/ampL0[i]));
838 Int_t areAllFakes = 2;
839 Int_t numberpatchNotFake = 0;
840 Int_t numberpatchFake = 0;
842 Int_t threshold = 10;
859 for(
Int_t irow = 0; irow < 2; irow++)
861 for(
Int_t icol = 0; icol < 2; icol++)
864 shiftCol = posx+icol;
865 shiftRow = posy+irow;
868 if(shiftRow < fgkFALTRORows && shiftCol < fgkFALTROCols)
872 if(
fMapCellL1G[shiftRow][shiftCol] > threshold/2 ) enoughE = kTRUE;
877 if (patchEnergy > patchMax)
879 patchMax = patchEnergy;
884 if(patchEnergy>threshold || (patchEnergy>threshold-3 && enoughE))
886 numberpatchNotFake++;
918 for(
Int_t irow = 0; irow < 2; irow++)
920 for(
Int_t icol = 0; icol < 2; icol++)
925 if(shiftRow < fgkFALTRORows && shiftCol < fgkFALTROCols)
955 for(
Int_t irow = 0; irow < 2; irow++)
957 for(
Int_t icol = 0; icol < 2; icol++)
962 if(shiftRow < fgkFALTRORows && shiftCol < fgkFALTROCols)
995 for (
Int_t i = 0; i < 9; i++)
997 for (
Int_t j = 0; j < 12; j++)
1003 for (
Int_t k = 0; k < 16; k++)
1005 for (
Int_t l = 0; l < 16; l++)
1011 if (patchJ > patchMax)
1061 AliESDVZERO* eventV0 =
dynamic_cast<AliESDVZERO*
> (InputEvent()->GetVZEROData());
1065 for (
Int_t i = 0; i < 32; i++)
1067 fV0C += eventV0->GetAdcV0C(i);
1068 fV0A += eventV0->GetAdcV0A(i);
1076 AliWarning(Form(
"Large fV0A+fV0C %f",
fV0A+
fV0C));
1157 TFile*
file = AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile();
1159 const TList *clist = file->GetStreamerInfoCache();
1163 TStreamerInfo *cinfo = (TStreamerInfo*)clist->FindObject(
"AliESDCaloTrigger");
1167 cinfo = (TStreamerInfo*)clist->FindObject(
"AliAODCaloTrigger");
1172 Int_t classversionid = cinfo->GetClassVersion();
1175 if (classversionid >= verid)
1180 }
else AliInfo(
"Streamer info for trigger class not available, bit not changed");
1181 }
else AliInfo(
"Streamer list not available!, bit not changed");
1183 Int_t runnumber = InputEvent()->GetRunNumber() ;
1189 fGeometry = AliEMCALGeometry::GetInstanceFromRunNumber(runnumber);
1190 AliInfo(Form(
"Get EMCAL geometry name to <%s> for run %d",
fGeometry->GetName(),runnumber));
1195 AliInfo(Form(
"Set EMCAL geometry name to <%s>",
fGeoName.Data()));
1223 for(
Int_t ism = 0; ism < 20; ism++)
1254 if((triggerclasses.Contains(
"CINT7") || triggerclasses.Contains(
"CPBI2_B1") ) &&
1255 (triggerclasses.Contains(
"-B-") || triggerclasses.Contains(
"-I-")) &&
1256 triggerclasses.Contains(
"-NOPF") )
fEventMB = kTRUE;
1264 if( triggerclasses.Contains(
"-B-") || triggerclasses.Contains(
"-S-") || triggerclasses.Contains(
"-I-") )
1266 if( triggerclasses.Contains(
"CEMC") &&
1267 !triggerclasses.Contains(
"EGA" ) &&
1268 !triggerclasses.Contains(
"EJE" ) &&
1269 !triggerclasses.Contains(
"EG1" ) &&
1270 !triggerclasses.Contains(
"EJ1" ) &&
1271 !triggerclasses.Contains(
"EG2" ) &&
1272 !triggerclasses.Contains(
"EJ2" ) )
fEventL0 = kTRUE;
1274 if( triggerclasses.Contains(
"CDMC") &&
1275 !triggerclasses.Contains(
"DGA" ) &&
1276 !triggerclasses.Contains(
"DJE" ) &&
1277 !triggerclasses.Contains(
"DG1" ) &&
1278 !triggerclasses.Contains(
"DJ1" ) &&
1279 !triggerclasses.Contains(
"DG2" ) &&
1280 !triggerclasses.Contains(
"DJ2" ) )
fEventL0D = kTRUE;
1283 if( triggerclasses.Contains(
"EGA" ) || triggerclasses.Contains(
"EG1" ) )
fEventL1G = kTRUE;
1284 if( triggerclasses.Contains(
"EG2" ) )
fEventL1G2 = kTRUE;
1286 if( triggerclasses.Contains(
"DGA" ) || triggerclasses.Contains(
"DG1" ) )
fEventL1GD = kTRUE;
1287 if( triggerclasses.Contains(
"DG2" ) )
fEventL1G2D = kTRUE;
1289 if( triggerclasses.Contains(
"EJE" ) || triggerclasses.Contains(
"EJ1" ) )
fEventL1J = kTRUE;
1290 if( triggerclasses.Contains(
"EJ2" ) )
fEventL1J2 = kTRUE;
1292 if( triggerclasses.Contains(
"DJE" ) || triggerclasses.Contains(
"DJ1" ) )
fEventL1JD = kTRUE;
1293 if( triggerclasses.Contains(
"DJ2" ) )
fEventL1J2D = kTRUE;
1297 if (triggerclasses.Contains(
"CCENT_R2-B-NOPF-ALLNOTRD"))
fEventCen = kTRUE;
1298 else if(triggerclasses.Contains(
"CSEMI_R1-B-NOPF-ALLNOTRD"))
fEventSem = kTRUE;
1316 fhNEvents =
new TH1F(
"hNEvents",
"Number of selected events",26,0,26);
1318 fhNEvents ->GetXaxis()->SetBinLabel(1 ,
"All");
1319 fhNEvents ->GetXaxis()->SetBinLabel(2 ,
"MB");
1320 fhNEvents ->GetXaxis()->SetBinLabel(3 ,
"Central Pb");
1321 fhNEvents ->GetXaxis()->SetBinLabel(4 ,
"SemiCentral Pb");
1322 fhNEvents ->GetXaxis()->SetBinLabel(5 ,
"L0");
1323 fhNEvents ->GetXaxis()->SetBinLabel(6 ,
"L1-G1");
1324 fhNEvents ->GetXaxis()->SetBinLabel(7 ,
"L1-G2");
1325 fhNEvents ->GetXaxis()->SetBinLabel(8 ,
"L1-J1");
1326 fhNEvents ->GetXaxis()->SetBinLabel(9 ,
"L1-J2");
1327 fhNEvents ->GetXaxis()->SetBinLabel(10 ,
"L1-G1 & !L1-J1");
1328 fhNEvents ->GetXaxis()->SetBinLabel(11 ,
"L1-J1 & !L1-G1");
1329 fhNEvents ->GetXaxis()->SetBinLabel(12 ,
"L1-J1 & L1-G1");
1330 fhNEvents ->GetXaxis()->SetBinLabel(13 ,
"MB & !L1 & !L0");
1331 fhNEvents ->GetXaxis()->SetBinLabel(14,
"L0 & !MB");
1332 fhNEvents ->GetXaxis()->SetBinLabel(15,
"L1-G1 & !MB");
1333 fhNEvents ->GetXaxis()->SetBinLabel(16,
"L1-J1 & !MB");
1334 fhNEvents ->GetXaxis()->SetBinLabel(17,
"L1-G1 & (Cen | Semi)");
1335 fhNEvents ->GetXaxis()->SetBinLabel(18,
"L1-J1 & (Cen | Semi)");
1336 fhNEvents ->GetXaxis()->SetBinLabel(19,
"L1-G2 & !L1-G1");
1337 fhNEvents ->GetXaxis()->SetBinLabel(20,
"L1-J2 & !L1-J1");
1338 fhNEvents ->GetXaxis()->SetBinLabel(21,
"L0 DCal");
1339 fhNEvents ->GetXaxis()->SetBinLabel(22,
"L1-G1 DCal");
1340 fhNEvents ->GetXaxis()->SetBinLabel(23,
"L1-J1 DCal");
1341 fhNEvents ->GetXaxis()->SetBinLabel(24,
"L0 !DCal");
1342 fhNEvents ->GetXaxis()->SetBinLabel(25,
"L1-G1 !DCal");
1343 fhNEvents ->GetXaxis()->SetBinLabel(26,
"L1-J1 !DCal");
1345 fhFORAmp =
new TH2F(
"hFORAmp",
"FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column",
1347 fhFORAmp ->SetXTitle(
"Index #eta (columnns)");
1348 fhFORAmp ->SetYTitle(
"Index #phi (rows)");
1351 fhFORAmpL1G =
new TH2F(
"hFORAmpL1G1",
"FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1G1 trigger condition",
1357 fhFORAmpL1G2 =
new TH2F(
"hFORAmpL1G2",
"FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1G2 trigger condition",
1363 fhFORAmpL1J =
new TH2F(
"hFORAmpL1J1",
"FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1J1 trigger condition",
1369 fhFORAmpL1J2 =
new TH2F(
"hFORAmpL1J2",
"FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1J2 trigger condition",
1376 fhL0Amp =
new TH2F(
"hL0Amp",
"FALTRO signal per Row and Column",
1378 fhL0Amp ->SetXTitle(
"Index #eta (columnns)");
1379 fhL0Amp ->SetYTitle(
"Index #phi (rows)");
1380 fhL0Amp ->SetZTitle(
"Amplitude");
1382 fhL0AmpL1G =
new TH2F(
"hL0AmpL1G",
"FALTRO signal per Row and Column, with L1G trigger condition",
1384 fhL0AmpL1G ->SetXTitle(
"Index #eta (columnns)");
1389 fhL0AmpL1J =
new TH2F(
"hL0AmpL1J",
"FALTRO signal per Row and Column, with L1j trigger condition",
1391 fhL0AmpL1J ->SetXTitle(
"Index #eta (columnns)");
1396 fhL1Amp =
new TH2F(
"hL1Amp",
"STU signal per Row and Column",
1398 fhL1Amp ->SetXTitle(
"Index #eta (columnns)");
1399 fhL1Amp ->SetYTitle(
"Index #phi (rows)");
1400 fhL1Amp ->SetZTitle(
"Amplitude");
1402 fhL1GAmp =
new TH2F(
"hL1G1Amp",
"STU signal per Row and Column for L1 Gamma1",
1404 fhL1GAmp ->SetXTitle(
"Index #eta (columnns)");
1405 fhL1GAmp ->SetYTitle(
"Index #phi (rows)");
1408 fhL1G2Amp =
new TH2F(
"hL1G2Amp",
"STU signal per Row and Column for L1 Gamma2",
1410 fhL1G2Amp ->SetXTitle(
"Index #eta (columnns)");
1411 fhL1G2Amp ->SetYTitle(
"Index #phi (rows)");
1414 fhL1JAmp =
new TH2F(
"hL1J1Amp",
"STU signal per Row and Column for L1 Jet1",
1416 fhL1JAmp ->SetXTitle(
"Index #eta (columnns)");
1417 fhL1JAmp ->SetYTitle(
"Index #phi (rows)");
1420 fhL1J2Amp =
new TH2F(
"hL1J2Amp",
"STU signal per Row and Column for L1 Jet2",
1422 fhL1J2Amp ->SetXTitle(
"Index #eta (columnns)");
1423 fhL1J2Amp ->SetYTitle(
"Index #phi (rows)");
1431 fhL0Patch =
new TH2F(
"hL0Patch",
"FOR with associated L0 Patch",
1433 fhL0Patch ->SetXTitle(
"Index #eta (columnns)");
1434 fhL0Patch ->SetYTitle(
"Index #phi (rows)");
1437 fhL1GPatch =
new TH2F(
"hL1G1Patch",
"FOR with associated L1 Gamma Patch1",
1439 fhL1GPatch ->SetXTitle(
"Index #eta (columnns)");
1443 fhL1G2Patch =
new TH2F(
"hL1G2Patch",
"FOR with associated L1 Gamma2 Patch",
1449 fhL1GPatchNotFake =
new TH2F(
"hL1G1PatchNotFake",
"FOR with L1 Gamma1 Patch associated to energetic cells",
1455 fhL1GPatchFake =
new TH2F(
"hL1G1PatchFake",
"FOR without L1 Gamma1 Patch associated to energetic cells",
1462 fhL1GPatchNotAllFake =
new TH2F(
"hL1G1PatchNotAllFake",
"FOR with one L1 Gamma1 Patch associated to an energetic cell",
1468 fhL1GPatchAllFake =
new TH2F(
"hL1G1PatchAllFake",
"FOR without any L1 Gamma1 Patch associated to an energetic cell",
1474 fhL1GPatchAllFakeMax =
new TH2F(
"hL1G1PatchAllFakeMax",
"FOR with L1 Gamma1 Patch Max not associated to an energetic cell",
1486 fhL1GPatchNotAllFakeMaxE =
new TH1F(
"hL1G1PatchNotAllFakeMaxE",
"Energy distribution of FOR in events with L1 Gamma1 Patch Max associated to an energetic cell",
1491 fhL1GPatchAllFakeMaxE =
new TH1F(
"hL1G1PatchAllFakeMaxE",
"Energy distribution of FOR in events with L1 Gamma1 Patch Max not associated to an energetic cell",
1495 fhL1GPatchNotAllFakeE =
new TH1F(
"hL1G1PatchNotAllFakeE",
"Energy distribution of FOR in events with L1 Gamma1 Patch not associated to an energetic cell",
1499 fhL1GPatchAllFakeE =
new TH1F(
"hL1G1PatchAllFakeE",
"Energy distribution of FOR in events with L1 Gamma1 Patch associated to an energetic cell",
1504 fhL1GPatchFakeE =
new TH1F(
"hL1G1PatchFakeE",
"Energy distribution of FOR with L1 Gamma1 Patch not associated to an energetic cell",
1508 fhL1GPatchNotFakeE =
new TH1F(
"hL1G1PatchNotFakeE",
"Energy distribution of FOR with L1 Gamma1 Patch associated to an energetic cell",
1512 fhNPatchFake =
new TH2F(
"hNPatchFake",
"number of fake patchs vs. all patchs are fake",
1513 3,0,3, 2880,0,2880);
1519 fhNPatchNotFake =
new TH2F(
"hNPatchNotFake",
"number of Not fake patchs vs. all patchs are fake",
1520 3, 0, 3, 200,0,1000);
1526 fhL1JPatch =
new TH2F(
"hL1J1Patch",
"FOR with associated L1 Jet1 Patch",
1528 fhL1JPatch ->SetXTitle(
"Index #eta (columnns)");
1532 fhL1J2Patch =
new TH2F(
"hL1J2Patch",
"FOR with associated L1 Jet2 Patch",
1561 fhL1GPatchMax =
new TH2F(
"hL1G1PatchMax",
"FOR of max amplitude patch with associated L1 Gamma1 Patch",
1567 fhL1G2PatchMax =
new TH2F(
"hL1G2PatchMax",
"FOR of max amplitude patch with associated L1 Gamma2 Patch",
1573 fhL1JPatchMax =
new TH2F(
"hL1J1PatchMax",
"FOR of max amplitude patch with associated L1 Jet1 Patch",
1579 fhL1J2PatchMax =
new TH2F(
"hL1J2PatchMax",
"FOR of max amplitude patch with associated L1 Jet2 Patch",
1636 fhV0STU =
new TH2I(
"hV0STU",
"Total signal STU vs V0C+V0S",
1638 fhV0STU ->SetXTitle(
"Signal V0C+V0A");
1639 fhV0STU ->SetYTitle(
"Total signal STU");
1640 fhV0STU ->SetZTitle(
"counts");
1662 TString hName [] = {
"MB",
"L0",
"L0D",
1663 "L1G1",
"L1G1D",
"L1G2",
"L1G2D",
1664 "L1J1",
"L1J1D",
"L1J2",
"L2J2D",
1665 "L1G1NoL1J1",
"L1G1NoL1J1D",
"L1J1NoL1G1",
"L1J1NoL1G1D",
1666 "L1G2NoL1G1",
"L1G2NoL1G1D",
"L1J2NoL1J1",
"L1J2NoL1J1D",
1667 "L0E",
"L0D",
"L1EG1",
"L1DG1",
"L1EJ1",
"L1DJ1",
1668 "Central",
"SemiCentral" } ;
1669 TString hTitle [] = {
"MB trigger",
"EMC-L0 trigger",
"DMC L0 trigger",
1670 "EMC-L1 Gamma1 trigger",
"EMC-L1 Gamma1 trigger",
"EMC-L1 Gamma2 trigger",
"EMC-L1 Gamma2 trigger",
1671 "EMC-L1 Jet1 trigger" ,
"DMC-L1 Jet1 trigger" ,
"DMC-L1 Jet2 trigger" ,
"DMC-L1 Jet2 trigger",
1672 "EMC-L1 Gamma1 trigger and not L1 Jet1",
"DMC-L1 Gamma1 trigger and not L1 Jet1",
1673 "EMC-L1 Jet1 trigger and not L1 Gamma1",
"DMC-L1 Jet1 trigger and not L1 Gamma1",
1674 "EMC-L1 Gamma2 trigger and not L1 Gamma1",
"DMC-L1 Gamma2 trigger and not L1 Gamma1",
1675 "EMC-L1 Jet2 trigger and not L1 Jet1",
"DMC-L1 Jet2 trigger and not L1 Jet1",
1676 "L0 EMC Pure",
"L0 DMC Pure",
"L1-Gamma1 EMC Pure",
"L1-Gamma1 DMC Pure",
1677 "L1-Jet EMC Pure",
"L1-Jet DMC Pure" 1678 "Central trigger",
"SemiCentral trigger" } ;
1680 for(
Int_t i=0; i < 3; i++)
1686 Form(
"clusters E distribution for %s, no other EMCAL trigger on",hTitle[j].
Data()),
1692 Form(
"maximum energy cluster per event for %s, no other EMCAL trigger on",hTitle[j].
Data()),
1702 fhV0[i] =
new TH1F(Form(
"hV0%s",hName[i].
Data()),
1703 Form(
"V0 distribution for %s",hTitle[i].
Data()),
1705 fhV0[i]->SetXTitle(
"V0");
1709 fhClus[i] =
new TH1F(Form(
"hClus%s",hName[i].
Data()),
1710 Form(
"clusters E distribution for %s",hTitle[i].
Data()),
1712 fhClus[i] ->SetXTitle(
"Energy (GeV)");
1716 Form(
"maximum energy cluster per event for %s",hTitle[i].
Data()),
1718 fhClusMax[i]->SetXTitle(
"Energy (GeV)");
1727 Form(
"Centrality distribution for %s",hTitle[i].
Data()),
1733 Form(
"clusters E distribution vs centrality for %s",hTitle[i].
Data()),
1735 fhClusCen[i] ->SetXTitle(
"Energy (GeV)");
1736 fhClusCen[i] ->SetYTitle(
"Centrality (%)");
1740 Form(
"maximum energy cluster per event vs centrality for %s",hTitle[i].
Data()),
1752 Form(
"clusters E distribution vs V0 for %s",hTitle[i].
Data()),
1754 fhClusV0[i] ->SetXTitle(
"Energy (GeV)");
1759 Form(
"maximum energy cluster per event vs V0 for %s",hTitle[i].
Data()),
1769 fhClusSM[i][ism] =
new TH1F(Form(
"hClus%s_SM%d",hName[i].
Data(),ism),
1770 Form(
"clusters E distribution for %s and SM%d",hTitle[i].
Data(), ism),
1772 fhClusSM[i][ism]->SetXTitle(
"Energy (GeV)");
1778 Form(
"clusters E distribution vs centrality for %s and SM%d",hTitle[i].
Data(),ism),
1788 Form(
"clusters E distribution vs V0 for %s and SM%d",hTitle[i].
Data(),ism),
1790 fhClusV0SM[i][ism]->SetXTitle(
"Energy (GeV)");
1799 Form(
"clusters distribution #eta vs #phi for %s, E > %1.1f GeV",hTitle[i].
Data(),
fEtaPhiEnMin),
1806 Form(
"clusters distribution #eta vs #phi for %s, E < %1.1f GeV",hTitle[i].
Data(),
fEtaPhiEnMin),
1815 Form(
"maximum energy cluster per event #eta vs #phi for %s, E > %1.1f GeV",hTitle[i].
Data(),
fEtaPhiEnMin),
1822 Form(
"maximum energy cluster per event #eta vs #phi for %s, E < %1.1f GeV",hTitle[i].
Data(),
fEtaPhiEnMin),
1829 Form(
"Cluster hit map in calorimeter (max cell), column vs row for %s, E > %1.1f GeV",hTitle[i].
Data(),
fEtaPhiEnMin),
1836 Form(
"Max E cluster hit map in calorimeter (max cell), column vs row for %s, E > %1.1f GeV",
1843 Form(
"Cluster hit map in calorimeter (max cell), column vs row for %s, E < %1.1f GeV",hTitle[i].
Data(),
fEtaPhiEnMin),
1850 Form(
"Max E cluster hit map in calorimeter (max cell), column vs row for %s, E < %1.1f GeV",
1859 Form(
"clusters distribution vs #eta for %s",hTitle[i].
Data()),
1861 fhClusEta[i] ->SetXTitle(
"Energy (GeV)");
1866 Form(
"maximum energy cluster per event vs #eta for %s",hTitle[i].
Data()),
1875 Form(
"clusters distribution vs #phi for %s",hTitle[i].
Data()),
1877 fhClusPhi[i] ->SetXTitle(
"Energy (GeV)");
1882 Form(
"maximum energy cluster per event vs #phi for %s",hTitle[i].
Data()),
1898 AliVEvent*
event = InputEvent();
1902 AliError(
"No Event, exit");
1910 TString triggerclasses =
event->GetFiredTriggerClasses();
1913 Int_t eventType = ((AliVHeader*)event->GetHeader())->GetEventType();
1918 if(triggerclasses==
"" || eventType != 7)
return;
Bool_t fEventSem
Bit for Semi Central events.
Bool_t fEventL1JD
Bit for L1 Jet 1 events, DCal.
TH2F * fhL0Amp
! FALTRO signal per Row and Column for FOR involves L0 patch
TH2F * fhL1Amp
! STU signal per Row and Column for FOR involves L0 patch
void FillTriggerPatchMaps(TString triggerclasses)
Fill L0, L1 patch arrays.
TH2F * fhClusCenSM[fgkTriggerCombi][20]
! Clusters Centrality vs E distribution for a trigger, per SM
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.
Bool_t fEventL1GD
Bit for L1 Gamma 1 events, DCal.
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
TH1F * fhClusSM[fgkTriggerCombi][20]
! Clusters E distribution for a trigger, per SM
Double_t fMapTrigL0L1G[fgkFALTRORows][fgkFALTROCols]
TString fGeoName
Name of geometry used.
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]
! V0 distribution for a triggered event
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.
TH1F * fhClus[fgkTriggerCombi]
! Clusters E distribution for a trigger
TH2F * fhJPMaxVV0TT
! V0 signal vs maximum jet L1 patch
TH2F * fhTRUSTU
! Correlation TRU vs STU
TH1F * fhL1GPatchAllFakeMaxE
! Energy distrib FOR for fake events, patch of maximal energy
TString fCentEstimator
Centrality estimator string: V0M, TKL, FMD, ZEMvsZDC, ...
Bool_t fEventL1J2D
Bit for L1 JEt 2 events, DCal.
TH2F * fhClusEtaPhiLowCluMax[fgkTriggerCombi]
! Maximum E Cluster, Phi vs Eta per event distribution for MB trigger, energy below fEtaPhiEnMin GeV ...
AliAnalysisTaskEMCALTriggerQA()
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
Bool_t fUseAliCentrality
Use the centrality estimator from AliCentrality or AliMultSelection.
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
Int_t fFirstSM
Fill SM histograms for SM >= fFirstSM.
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
void FillClusterHistograms(Int_t triggerNumber, Bool_t maxCluster, Float_t e, Float_t eta, Float_t phi, Float_t ietamax, Float_t iphimax, Int_t sm, Float_t centrality, Float_t v0AC)
Bool_t fEventL1J2
Bit for L1 JEt 2 events.
TH2F * fhClusV0SM[fgkTriggerCombi][20]
! Clusters V0 vs E distribution for a trigger, per SM
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
TH1F * fhCentrality[fgkTriggerCombi]
! Centrality distribution for a triggered event
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.
Bool_t fEventL1G2D
Bit for L1 Gamma 2 events, DCal.
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
Bool_t fEventL0D
Bit for L0 events, DCal.
TString fOADBFilePath
Default path $ALICE_PHYSICS/OADB/EMCAL, if needed change.
Bool_t fFillCenHisto
Centrality histograms creation and fill.
TLorentzVector fMomentum
Cluster kinematics, temporal, avoid recreation per event.
TH2F * fhL1GPatchNotFake
! FOR with L1 Gamma patch associated but no energy in the related cells
TFile * file
TList with histograms for a given trigger.
Int_t fLastSM
Fill SM histograms for SM <= fLastSM.
Bool_t fEventL1G2
Bit for L1 Gamma 2 events.
TList * fOutputList
! Output list
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