19 #include <THashList.h>
24 #include <TObjString.h>
25 #include <TObjArray.h>
27 #include <AliEMCALTriggerPatchInfo.h>
28 #include <AliEMCALTriggerFastOR.h>
30 #include <AliEMCALGeometry.h>
31 #include <AliVCaloCells.h>
32 #include <AliEMCALTriggerConstants.h>
43 fOfflineBadChannels(),
67 for (
Int_t i = 0; i < 3; i++) {
68 for (
Int_t itype = 0; itype < 6; itype++) {
74 EnablePatchType(kOnlinePatch, EMCALTrigger::kTMEMCalLevel0, kTRUE);
75 EnablePatchType(kOnlinePatch, EMCALTrigger::kTMEMCalGammaL, kTRUE);
76 EnablePatchType(kOnlinePatch, EMCALTrigger::kTMEMCalGammaH, kTRUE);
77 EnablePatchType(kOnlinePatch, EMCALTrigger::kTMEMCalJetL, kTRUE);
78 EnablePatchType(kOnlinePatch, EMCALTrigger::kTMEMCalJetH, kTRUE);
80 EnablePatchType(kRecalcPatch, EMCALTrigger::kTMEMCalLevel0, kTRUE);
81 EnablePatchType(kRecalcPatch, EMCALTrigger::kTMEMCalGammaH, kTRUE);
82 EnablePatchType(kRecalcPatch, EMCALTrigger::kTMEMCalJetH, kTRUE);
84 EnablePatchType(kOfflinePatch, EMCALTrigger::kTMEMCalLevel0, kTRUE);
85 EnablePatchType(kOfflinePatch, EMCALTrigger::kTMEMCalGammaH, kTRUE);
86 EnablePatchType(kOfflinePatch, EMCALTrigger::kTMEMCalJetH, kTRUE);
93 AliEMCALTriggerQA(name),
94 fOfflineBadChannels(),
118 for (
Int_t i = 0; i < 3; i++) {
119 for (
Int_t itype = 0; itype < 6; itype++) {
125 EnablePatchType(kOnlinePatch, EMCALTrigger::kTMEMCalLevel0, kTRUE);
126 EnablePatchType(kOnlinePatch, EMCALTrigger::kTMEMCalGammaL, kTRUE);
127 EnablePatchType(kOnlinePatch, EMCALTrigger::kTMEMCalGammaH, kTRUE);
128 EnablePatchType(kOnlinePatch, EMCALTrigger::kTMEMCalJetL, kTRUE);
129 EnablePatchType(kOnlinePatch, EMCALTrigger::kTMEMCalJetH, kTRUE);
131 EnablePatchType(kRecalcPatch, EMCALTrigger::kTMEMCalLevel0, kTRUE);
132 EnablePatchType(kRecalcPatch, EMCALTrigger::kTMEMCalGammaH, kTRUE);
133 EnablePatchType(kRecalcPatch, EMCALTrigger::kTMEMCalJetH, kTRUE);
135 EnablePatchType(kOfflinePatch, EMCALTrigger::kTMEMCalLevel0, kTRUE);
136 EnablePatchType(kOfflinePatch, EMCALTrigger::kTMEMCalGammaH, kTRUE);
137 EnablePatchType(kOfflinePatch, EMCALTrigger::kTMEMCalJetH, kTRUE);
144 AliEMCALTriggerQA(triggerQA),
145 fOfflineBadChannels(triggerQA.fOfflineBadChannels),
148 fL0MinTime(triggerQA.fL0MinTime),
149 fL0MaxTime(triggerQA.fL0MaxTime),
150 fMinCellAmp(triggerQA.fMinCellAmp),
151 fMinL0FastORAmp(triggerQA.fMinL0FastORAmp),
152 fMinL1FastORAmp(triggerQA.fMinL1FastORAmp),
153 fHistManager(triggerQA.GetName()),
169 for (
Int_t i = 0; i < 3; i++) {
170 for (
Int_t itype = 0; itype < 6; itype++) {
189 while (stream.good()) {
200 std::ifstream
file(fname);
211 while (stream.good()) {
222 std::ifstream
file(fname);
244 hname =
"EMCTRQA_histFastORL0Hits";
245 htitle =
"EMCTRQA_histFastORL0Hits;col;row;entries";
248 hname =
"EMCTRQA_histFastORL0AccumulatedAmplitude";
249 htitle =
"EMCTRQA_histFastORL0AccumulatedAmplitude;col;row;accumulated amplitude";
252 hname =
"EMCTRQA_histFastORL0HitsTriggered";
253 htitle =
"EMCTRQA_histFastORL0HitsTriggered;col;row;entries";
256 hname =
"EMCTRQA_histFastORL0AccumulatedAmplitudeTriggered";
257 htitle =
"EMCTRQA_histFastORL0AccumulatedAmplitudeTriggered;col;row;accumulated amplitude";
260 hname =
"EMCTRQA_histFastORL0Time";
261 htitle =
"EMCTRQA_histFastORL0Time;FastOR abs. ID;time";
264 hname =
"EMCTRQA_histFastORL0AmpVsTime";
265 htitle =
"EMCTRQA_histFastORL0AmpVsTime;time;amplitude";
268 hname =
"EMCTRQA_histFastORL1Hits";
269 htitle =
"EMCTRQA_histFastORL1Hits;col;row;entries";
272 hname =
"EMCTRQA_histFastORL1AccumulatedAmplitude";
273 htitle =
"EMCTRQA_histFastORL1AccumulatedAmplitude;col;row;accumulated amplitude";
276 hname =
"EMCTRQA_histFastORL1AmpVsL0Amp";
277 htitle =
"EMCTRQA_histFastORL1AmpVsL0Amp;L0 amplitude;L1 time sum;entries";
280 hname =
"EMCTRQA_histFastORL1AmpVsL0AmpTriggered";
281 htitle =
"EMCTRQA_histFastORL1AmpVsL0AmpTriggered;L0 amplitude;L1 time sum;entries";
284 hname =
"EMCTRQA_histCellAmpVsFastORL0Amp";
285 htitle =
"EMCTRQA_histCellAmpVsFastORL0Amp;FastOR L0 amplitude;2x2 cell sum energy (GeV)";
288 hname =
"EMCTRQA_histCellAmpVsFastORL0AmpTriggered";
289 htitle =
"EMCTRQA_histCellAmpVsFastORL0AmpTriggered;FastOR L0 amplitude;2x2 cell sum energy (GeV)";
292 hname =
"EMCTRQA_histCellAmpVsFastORL1Amp";
293 htitle =
"EMCTRQA_histCellAmpVsFastORL1Amp;FastOR L1 amplitude;2x2 cell sum energy (GeV)";
297 if (nTRU == 34 || nTRU == 35 ||
298 nTRU == 40 || nTRU == 41 ||
299 nTRU == 46 || nTRU == 47)
continue;
300 hname = TString::Format(
"ByTRU/EMCTRQA_histCellAmpVsFastORL0AmpTRU%d", nTRU);
301 htitle = TString::Format(
"ByTRU/EMCTRQA_histCellAmpVsFastORL0Amp%d;FastOR L0 amplitude;2x2 cell sum energy (GeV)", nTRU);
304 hname = TString::Format(
"ByTRU/EMCTRQA_histFastORAmpSTUVsTRU%d", nTRU);
305 htitle = TString::Format(
"ByTRU/EMCTRQA_histFastORAmpSTUVsTRU%d;TRU amplitude;STU amplitude", nTRU);
308 hname = TString::Format(
"ByTRU/EMCTRQA_histCellAmpVsFastORL1AmpSTU%d", nTRU);
309 htitle = TString::Format(
"ByTRU/EMCTRQA_histCellAmpVsFastORL0Amp%d;FastOR L1 amplitude;2x2 cell sum energy (GeV)", nTRU);
313 const char* det[2] = {
"EMCal",
"DCal" };
315 for (
Int_t itrig = 0; itrig < fgkNTriggerTypes; itrig++) {
317 if (IsPatchTypeEnabled(kOfflinePatch, itrig) && IsPatchTypeEnabled(kRecalcPatch, itrig)) {
318 for (
Int_t idet = 0; idet < ndet; idet++) {
319 hname = TString::Format(
"EMCTRQA_hist%s%sMaxOfflineVsRecalc", det[idet], EMCALTrigger::kEMCalTriggerNames[itrig].
Data());
320 htitle = TString::Format(
"EMCTRQA_hist%s%sMaxOfflineVsRecalc;Recalc;Offline;entries", det[idet], EMCALTrigger::kEMCalTriggerNames[itrig].
Data());
321 fHistManager.
CreateTH2(hname, htitle, fgkMaxPatchAmp[itrig]/fADCperBin, 0, fgkMaxPatchAmp[itrig], fgkMaxPatchAmp[itrig]/fADCperBin, 0, fgkMaxPatchAmp[itrig]);
323 hname = TString::Format(
"EMCTRQA_hist%s%sOfflineVsRecalc", det[idet], EMCALTrigger::kEMCalTriggerNames[itrig].
Data());
324 htitle = TString::Format(
"EMCTRQA_hist%s%sOfflineVsRecalc;Recalc;Offline;entries", det[idet], EMCALTrigger::kEMCalTriggerNames[itrig].
Data());
325 fHistManager.
CreateTH2(hname, htitle, fgkMaxPatchAmp[itrig]/fADCperBin, 0, fgkMaxPatchAmp[itrig], fgkMaxPatchAmp[itrig]/fADCperBin, 0, fgkMaxPatchAmp[itrig]);
329 for (
Int_t itype = 0; itype < fgkNPatchTypes; itype++) {
330 if (!IsPatchTypeEnabled(itype, itrig))
continue;
331 for (
Int_t idet = 0; idet < ndet; idet++) {
332 hname = TString::Format(
"EMCTRQA_hist%sPatchAmp%s%s", det[idet], EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
333 htitle = TString::Format(
"EMCTRQA_hist%sPatchAmp%s%s;amplitude;entries", det[idet], EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
336 hname = TString::Format(
"EMCTRQA_hist%sMaxPatchAmp%s%s", det[idet], EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
337 htitle = TString::Format(
"EMCTRQA_hist%sMaxPatchAmp%s%s;amplitude;entries", det[idet], EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
341 hname = TString::Format(
"EMCTRQA_histMaxEdgePos%s%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
342 htitle = TString::Format(
"EMCTRQA_histMaxEdgePos%s%s;col;row;entries", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
345 hname = TString::Format(
"EMCTRQA_histAccAmpEdgePos%s%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
346 htitle = TString::Format(
"EMCTRQA_histAccAmpEdgePos%s%s;col;row;accumulated amplitude", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
350 hname = TString::Format(
"EMCTRQA_histEMCal%sMaxVsDCal%sMax%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
351 htitle = TString::Format(
"EMCTRQA_histEMCal%sMaxVsDCal%sMax%s;DCal %s max;EMCal %s max;entries", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig].
Data());
352 fHistManager.
CreateTH2(hname, htitle, fgkMaxPatchAmp[itrig]/fADCperBin, 0, fgkMaxPatchAmp[itrig], fgkMaxPatchAmp[itrig]/fADCperBin, 0, fgkMaxPatchAmp[itrig]);
357 for (
Int_t itype = 0; itype < fgkNPatchTypes; itype++) {
358 for (
Int_t itrig = 0; itrig < fgkNTriggerTypes; itrig++) {
359 if (!IsPatchTypeEnabled(itype, itrig))
continue;
360 for (
Int_t itrig2 = itrig+1; itrig2 < 6; itrig2++) {
361 if (!IsPatchTypeEnabled(itype, itrig2))
continue;
363 hname = TString::Format(
"EMCTRQA_histEMCal%sMaxVsEMCal%sMax%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), fgkPatchTypes[itype].
Data());
364 htitle = TString::Format(
"EMCTRQA_histEMCal%sMaxVsEMCal%sMax%s;EMCal %s max;EMCal %s max;entries", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), fgkPatchTypes[itype].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig].
Data());
365 fHistManager.
CreateTH2(hname, htitle, fgkMaxPatchAmp[itrig2]/fADCperBin, 0, fgkMaxPatchAmp[itrig2], fgkMaxPatchAmp[itrig]/fADCperBin, 0, fgkMaxPatchAmp[itrig]);
369 hname = TString::Format(
"EMCTRQA_histDCal%sMaxVsDCal%sMax%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), fgkPatchTypes[itype].
Data());
370 htitle = TString::Format(
"EMCTRQA_histDCal%sMaxVsDCal%sMax%s;DCal %s max;DCal %s max;entries", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), fgkPatchTypes[itype].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig].
Data());
371 fHistManager.
CreateTH2(hname, htitle, fgkMaxPatchAmp[itrig2]/fADCperBin, 0, fgkMaxPatchAmp[itrig2], fgkMaxPatchAmp[itrig]/fADCperBin, 0, fgkMaxPatchAmp[itrig]);
373 hname = TString::Format(
"EMCTRQA_histEMCal%sMaxVsDCal%sMax%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), fgkPatchTypes[itype].
Data());
374 htitle = TString::Format(
"EMCTRQA_histEMCal%sMaxVsDCal%sMax%s;DCal %s max;EMCal %s max;entries", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), fgkPatchTypes[itype].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig].
Data());
375 fHistManager.
CreateTH2(hname, htitle, fgkMaxPatchAmp[itrig2]/fADCperBin, 0, fgkMaxPatchAmp[itrig2], fgkMaxPatchAmp[itrig]/fADCperBin, 0, fgkMaxPatchAmp[itrig]);
377 hname = TString::Format(
"EMCTRQA_histDCal%sMaxVsEMCal%sMax%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), fgkPatchTypes[itype].
Data());
378 htitle = TString::Format(
"EMCTRQA_histDCal%sMaxVsEMCal%sMax%s;EMCal %s max;DCal %s max;entries", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), fgkPatchTypes[itype].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig].
Data());
379 fHistManager.
CreateTH2(hname, htitle, fgkMaxPatchAmp[itrig2]/fADCperBin, 0, fgkMaxPatchAmp[itrig2], fgkMaxPatchAmp[itrig]/fADCperBin, 0, fgkMaxPatchAmp[itrig]);
385 for (
Int_t idet = 0; idet < ndet; idet++) {
386 hname = TString::Format(
"EMCTRQA_hist%sOfflineSumVsL0Sum", det[idet]);
387 htitle = hname +
";Sum of L0 amplitudes;Sum of cell energies (GeV)";
390 hname = TString::Format(
"EMCTRQA_hist%sOfflineSumVsL1Sum", det[idet]);
391 htitle = hname +
";Sum of L1 amplitudes;Sum of cell energies (GeV)";
394 hname = TString::Format(
"EMCTRQA_hist%sL1SumVsL0Sum", det[idet]);
395 htitle = hname +
";Sum of L0 amplitudes;Sum of L1 amplitudes";
398 hname = TString::Format(
"EMCTRQA_hist%sNCellVsNL0", det[idet]);
399 htitle = hname +
";Number of L0 FastORs;Number of cells";
402 hname = TString::Format(
"EMCTRQA_hist%sNCellVsNL1", det[idet]);
403 htitle = hname +
";Number of L1 FastORs;Number of cells";
406 hname = TString::Format(
"EMCTRQA_hist%sNL1VsNL0", det[idet]);
407 htitle = hname +
";Number of L0 FastORs;Number of L1 FastORs";
420 Bool_t (AliEMCALTriggerPatchInfo::* triggerCheck[fgkNPatchTypes][fgkNTriggerTypes])(void)
const = {
421 { &AliEMCALTriggerPatchInfo::IsLevel0,
422 &AliEMCALTriggerPatchInfo::IsGammaLow,
423 &AliEMCALTriggerPatchInfo::IsGammaHigh,
424 &AliEMCALTriggerPatchInfo::IsJetLow,
425 &AliEMCALTriggerPatchInfo::IsJetHigh,
426 &AliEMCALTriggerPatchInfo::IsBkg
428 { &AliEMCALTriggerPatchInfo::IsLevel0Recalc,
429 &AliEMCALTriggerPatchInfo::IsGammaLowRecalc,
430 &AliEMCALTriggerPatchInfo::IsGammaHighRecalc,
431 &AliEMCALTriggerPatchInfo::IsJetLowRecalc,
432 &AliEMCALTriggerPatchInfo::IsJetHighRecalc,
433 &AliEMCALTriggerPatchInfo::IsBkgRecalc
435 { &AliEMCALTriggerPatchInfo::IsLevel0Simple,
436 &AliEMCALTriggerPatchInfo::IsGammaLowSimple,
437 &AliEMCALTriggerPatchInfo::IsGammaHighSimple,
438 &AliEMCALTriggerPatchInfo::IsJetLowSimple,
439 &AliEMCALTriggerPatchInfo::IsJetHighSimple,
440 &AliEMCALTriggerPatchInfo::IsBkgSimple
446 if (patch->IsEMCal()) {
449 else if (patch->IsDCalPHOS()) {
454 AliWarning(Form(
"Patch is not EMCal nor DCal/PHOS (pos: %d, %d)", patch->GetRowStart(), patch->GetColStart()));
457 for (
Int_t itrig = 0; itrig < fgkNTriggerTypes; itrig++) {
458 if (IsPatchTypeEnabled(kRecalcPatch, itrig) && IsPatchTypeEnabled(kOfflinePatch, itrig)) {
459 if ((patch->*(triggerCheck[kRecalcPatch][itrig]))() || (patch->*(triggerCheck[kOfflinePatch][itrig]))()) {
460 hname = TString::Format(
"EMCTRQA_hist%s%sOfflineVsRecalc", det.Data(), EMCALTrigger::kEMCalTriggerNames[itrig].Data());
461 fHistManager.
FillTH2(hname, GetAmplitude(patch, kRecalcPatch) , GetAmplitude(patch, kOfflinePatch));
465 for (
Int_t itype = 0; itype < fgkNPatchTypes; itype++) {
466 if (!IsPatchTypeEnabled(itype, itrig))
continue;
468 if (!(patch->*(triggerCheck[itype][itrig]))())
continue;
472 if (patch->IsEMCal()) {
475 else if (patch->IsDCalPHOS()) {
479 hname = TString::Format(
"EMCTRQA_histAccAmpEdgePos%s%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
480 fHistManager.
FillTH2(hname, patch->GetColStart(), patch->GetRowStart(), GetAmplitude(patch, itype));
482 hname = Form(
"EMCTRQA_hist%sPatchAmp%s%s", det.Data(), EMCALTrigger::kEMCalTriggerNames[itrig].Data(), fgkPatchTypes[itype].Data());
486 Printf(
"Type = %s; global pos = (%d, %d); Amp (online) = %d; Amp (offline) = %d; Patch energy = %.3f\n"
487 "Position (CM): Eta=%.3f, Phi=%.3f\n"
488 "Position (Geo): Eta=%.3f, Phi=%.3f\n",
489 EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), patch->GetRowStart(), patch->GetColStart(), patch->GetADCAmp(), patch->GetADCOfflineAmp(), patch->GetPatchE(),
490 patch->GetEtaCM(), patch->GetPhiCM(),
491 patch->GetEtaGeo(), patch->GetPhiGeo());
509 Int_t sm = fGeom->GetSuperModuleNumber(cell.fAbsId);
510 if (fGeom->IsDCALSM(sm)) {
542 fGeom->GetPositionInSMFromAbsFastORIndex(fastor->GetAbsId(), iSM, iEta, iPhi);
543 isDCal = fGeom->IsDCALSM(iSM);
547 fGeom->GetCellIndexFromFastORIndex(fastor->GetAbsId(), idx);
548 fGeom->GetTRUFromAbsFastORIndex(fastor->GetAbsId(), nTRU, nADC);
551 nTRU == 34 || nTRU == 35 ||
552 nTRU == 40 || nTRU == 41 ||
553 nTRU == 46 || nTRU == 47) {
554 if (fastor->GetL0Amp() > 0) AliError(Form(
"FastOR with abs ID %d (amp = %u) and TRU number %d: this TRU does not exist!!", fastor->GetAbsId(), fastor->GetL0Amp(), nTRU));
561 for (
Int_t i = 0; i < 4; i++) {
562 offlineAmp += cells->GetCellAmplitude(idx[i]);
570 if (fTimeStampBinWidth > 0) {
571 hname = TString::Format(
"ByTimeStamp/EMCTRQA_histFastORL0_%u_%u", fEventTimeStampBin, fEventTimeStampBin+fTimeStampBinWidth);
575 hname =
"EMCTRQA_histFastORL0Hits";
578 hname =
"EMCTRQA_histFastORL0AccumulatedAmplitude";
579 fHistManager.
FillTH2(hname, fastor->GetGlobalCol(), fastor->GetGlobalRow(), fastor->GetL0Amp());
581 hname =
"EMCTRQA_histFastORL0Time";
584 hname =
"EMCTRQA_histFastORL0AmpVsTime";
587 hname =
"EMCTRQA_histCellAmpVsFastORL0Amp";
591 hname =
"EMCTRQA_histFastORL0HitsTriggered";
594 hname =
"EMCTRQA_histFastORL0AccumulatedAmplitudeTriggered";
595 fHistManager.
FillTH2(hname, fastor->GetGlobalCol(), fastor->GetGlobalRow(), fastor->GetL0Amp());
597 hname =
"EMCTRQA_histCellAmpVsFastORL0AmpTriggered";
601 hname = TString::Format(
"ByTRU/EMCTRQA_histCellAmpVsFastORL0AmpTRU%d",nTRU);
615 hname =
"EMCTRQA_histFastORL1Hits";
618 hname =
"EMCTRQA_histFastORL1AccumulatedAmplitude";
619 fHistManager.
FillTH2(hname, fastor->GetGlobalCol(), fastor->GetGlobalRow(), fastor->GetL1Amp());
630 hname =
"EMCTRQA_histCellAmpVsFastORL1Amp";
633 hname = TString::Format(
"ByTRU/EMCTRQA_histCellAmpVsFastORL1AmpSTU%d",nTRU);
637 UInt_t L1ampChopped = (fastor->GetL1Amp() >> 2) * 4;
639 hname = TString::Format(
"ByTRU/EMCTRQA_histFastORAmpSTUVsTRU%d",nTRU);
642 hname =
"EMCTRQA_histFastORL1AmpVsL0Amp";
646 hname =
"EMCTRQA_histFastORL1AmpVsL0AmpTriggered";
658 AliDebug(2, Form(
"Entering AliEmcalTriggerQAAP::EventCompleted"));
662 for (
Int_t itrig = 0; itrig < fgkNTriggerTypes; itrig++) {
663 AliDebug(2, Form(
"Trigger type: %s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data()));
665 if (IsPatchTypeEnabled(itrig, kOfflinePatch) && IsPatchTypeEnabled(itrig, kRecalcPatch)) {
666 hname = TString::Format(
"EMCTRQA_histEMCal%sMaxOfflineVsRecalc", EMCALTrigger::kEMCalTriggerNames[itrig].
Data());
672 hname = TString::Format(
"EMCTRQA_histDCal%sMaxOfflineVsRecalc", EMCALTrigger::kEMCalTriggerNames[itrig].
Data());
677 for (
Int_t itype = 0; itype < fgkNPatchTypes; itype++) {
678 if (!IsPatchTypeEnabled(itype, itrig))
continue;
680 AliDebug(2, Form(
"Patch type %s", fgkPatchTypes[itype].
Data()));
683 hname = TString::Format(
"EMCTRQA_histMaxEdgePos%s%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
687 hname = TString::Format(
"EMCTRQA_histEMCalMaxPatchAmp%s%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
692 hname = TString::Format(
"EMCTRQA_histMaxEdgePos%s%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
696 hname = TString::Format(
"EMCTRQA_histDCalMaxPatchAmp%s%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
699 hname = TString::Format(
"EMCTRQA_histEMCal%sMaxVsDCal%sMax%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), fgkPatchTypes[itype].
Data());
705 for (
Int_t itype = 0; itype < fgkNPatchTypes; itype++) {
706 for (
Int_t itrig = 0; itrig < fgkNTriggerTypes; itrig++) {
707 if (!IsPatchTypeEnabled(itype, itrig))
continue;
709 for (
Int_t itrig2 = itrig+1; itrig2 < fgkNTriggerTypes; itrig2++) {
710 if (!IsPatchTypeEnabled(itype, itrig2))
continue;
712 hname = TString::Format(
"EMCTRQA_histEMCal%sMaxVsEMCal%sMax%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), fgkPatchTypes[itype].
Data());
716 hname = TString::Format(
"EMCTRQA_histDCal%sMaxVsDCal%sMax%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), fgkPatchTypes[itype].
Data());
719 hname = TString::Format(
"EMCTRQA_histEMCal%sMaxVsDCal%sMax%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), fgkPatchTypes[itype].
Data());
722 hname = TString::Format(
"EMCTRQA_histDCal%sMaxVsEMCal%sMax%s", EMCALTrigger::kEMCalTriggerNames[itrig].
Data(), EMCALTrigger::kEMCalTriggerNames[itrig2].
Data(), fgkPatchTypes[itype].
Data());
730 for (
Int_t itype = 0; itype < fgkNPatchTypes; itype++) {
731 for (
Int_t itrig = 0; itrig < fgkNTriggerTypes; itrig++) {
776 AliEMCALTriggerQA::EventTimeStamp(timeStamp);
778 if (fTimeStampBinWidth > 0) {
779 TString hname = TString::Format(
"ByTimeStamp/EMCTRQA_histEvents_%u_%u", fEventTimeStampBin, fEventTimeStampBin+fTimeStampBinWidth);
783 hname = TString::Format(
"ByTimeStamp/EMCTRQA_histEvents_%u_%u", fEventTimeStampBin, fEventTimeStampBin+fTimeStampBinWidth);
784 htitle = TString::Format(
"EMCTRQA_histEvents;;events");
786 hevents->GetXaxis()->SetBinLabel(1, TString::Format(
"%u <= time stamp < %u", fEventTimeStampBin, fEventTimeStampBin+fTimeStampBinWidth));
788 hname = TString::Format(
"ByTimeStamp/EMCTRQA_histFastORL0_%u_%u", fEventTimeStampBin, fEventTimeStampBin+fTimeStampBinWidth);
789 htitle = TString::Format(
"EMCTRQA_histFastORL0;FastOR abs. ID;entries above 0");
793 hname = TString::Format(
"ByTimeStamp/EMCTRQA_histEvents_%u_%u", fEventTimeStampBin, fEventTimeStampBin+fTimeStampBinWidth);
void ProcessCell(const AliEMCALCellInfo &cell)
void ReadFastORBadChannelFromFile(const char *fname)
Int_t fNL0EMCal
! EMCal number of L0 FastORs (will be reset each event)
THashList * CreateHistoGroup(const char *groupname)
Create a new group of histograms within a parent group.
AliEMCALTriggerOfflineQAPP()
Dummy constructor for ROOT I/O.
Int_t fSumL1DCal
! DCal sum of all online energy deposition (will be reset each event)
void ReadOfflineBadChannelFromStream(std::istream &stream)
Int_t fNL1DCal
! DCal number of L1 FastORs (will be reset each event)
Int_t fSumL0DCal
! DCal sum of all online energy deposition (will be reset each event)
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
Int_t fNL0DCal
! DCal number of L0 FastORs (will be reset each event)
std::set< Short_t > fBadChannels
Container of bad channels.
Class to generate EMCal trigger QA plots in pp collisions.
UInt_t fMinL0FastORAmp
Minimum L0 amplitude of the FastORs.
void EventTimeStamp(UInt_t timeStamp)
Double_t fMinCellAmp
Minimum offline amplitude of the cells.
virtual ~AliEMCALTriggerOfflineQAPP()
Destructor.
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.
void ProcessFastor(const AliEMCALTriggerFastOR *fastor, AliVCaloCells *cells=0)
TObject * FindObject(const char *name) const
Find an object inside the container.
Bool_t fDCalPlots
Whether to add DCal QA plots.
Int_t fNL1EMCal
! EMCal number of L1 FastORs (will be reset each event)
Int_t fNTotTRU
! Total number of TRUs
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Create a new TH1 within the container.
void Init()
Initialize the class, i.e. allocate histograms.
Int_t fMaxFORabsId
! Maximum FastOR abs id
const AliEMCALTriggerPatchInfo * fMaxPatchDCal[fgkNTriggerTypes][fgkNPatchTypes]
! DCal max patch (will be reset each event)
Int_t fSumL1EMCal
! EMCal sum of all online energy deposition (will be reset each event)
void ReadFastORBadChannelFromStream(std::istream &stream)
Int_t fL0MinTime
Minimum L0 time.
UInt_t fMinL1FastORAmp
Minimum L1 amplitude of the FastORs.
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Fill a 1D histogram within the container.
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 ReadOfflineBadChannelFromFile(const char *fname)
std::set< Short_t > fOfflineBadChannels
Abs ID of offline bad channels.
void ProcessPatch(const AliEMCALTriggerPatchInfo *patch)
const AliEMCALTriggerPatchInfo * fMaxPatchEMCal[fgkNTriggerTypes][fgkNPatchTypes]
! EMCal max patch (will be reset each event)
void AddFastORBadChannel(Short_t absId)
void AddOfflineBadChannel(Short_t absId)
TFile * file
TList with histograms for a given trigger.
Double_t fSumOfflineDCal
! DCal sum of all offline energy deposition (will be reset each event)
Int_t fNCellEMCal
! EMCal number of offline cells (will be reset each event)
Int_t fSumL0EMCal
! EMCal sum of all online energy deposition (will be reset each event)
Double_t fSumOfflineEMCal
! EMCal sum of all offline energy deposition (will be reset each event)
Int_t fNCellDCal
! DCal number of offline cells (will be reset each event)
Int_t fL0MaxTime
Maximum L0 time.
THistManager fHistManager
Histogram manager.