From d10841cea00d69bc353e4067186d8af09c5ee59f Mon Sep 17 00:00:00 2001 From: Nicolo Valle Date: Thu, 21 Nov 2024 17:47:38 +0100 Subject: [PATCH 1/6] ITS - Anomalous clusters plots --- Modules/ITS/include/ITS/ITSClusterTask.h | 6 ++- Modules/ITS/src/ITSClusterTask.cxx | 55 ++++++++++++++++++++++-- 2 files changed, 56 insertions(+), 5 deletions(-) diff --git a/Modules/ITS/include/ITS/ITSClusterTask.h b/Modules/ITS/include/ITS/ITSClusterTask.h index febab72dda..3fdf485364 100644 --- a/Modules/ITS/include/ITS/ITSClusterTask.h +++ b/Modules/ITS/include/ITS/ITSClusterTask.h @@ -92,11 +92,15 @@ class ITSClusterTask : public TaskInterface std::shared_ptr hAverageClusterOccupancySummaryOB[NLayer]; std::shared_ptr hAverageClusterSizeSummaryOB[NLayer]; - // Layer synnary + // Layer summary TH1D* hClusterSizeLayerSummary[NLayer] = { nullptr }; TH1D* hClusterTopologyLayerSummary[NLayer] = { nullptr }; TH1D* hGroupedClusterSizeLayerSummary[NLayer] = { nullptr }; + // Anomalies plots + TH2D* hLongClustersPerChip[3] = { nullptr }; + TH2D* hMultPerChipWhenLongClusters[3] = { nullptr }; + // General TH2D* hClusterVsBunchCrossing = nullptr; std::unique_ptr mGeneralOccupancy = nullptr; diff --git a/Modules/ITS/src/ITSClusterTask.cxx b/Modules/ITS/src/ITSClusterTask.cxx index f2612a2fea..c3f6bce2a4 100644 --- a/Modules/ITS/src/ITSClusterTask.cxx +++ b/Modules/ITS/src/ITSClusterTask.cxx @@ -137,8 +137,6 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) auto clusPatternArr = ctx.inputs().get>("patterns"); auto pattIt = clusPatternArr.begin(); - int ChipIDprev = -1; - // Reset this histo to have the latest picture hEmptyLaneFractionGlobal->Reset("ICES"); @@ -153,6 +151,9 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) const auto& ROF = clusRofArr[iROF]; const auto bcdata = ROF.getBCData(); int nClustersForBunchCrossing = 0; + int nLongClusters[ChipBoundary[NLayerIB]] = { 0 }; + int nHitsFromClusters[ChipBoundary[NLayerIB]] = { 0 }; // only IB is implemented at the moment + for (int icl = ROF.getFirstEntry(); icl < ROF.getFirstEntry() + ROF.getNEntries(); icl++) { auto& cluster = clusArr[icl]; @@ -160,13 +161,15 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) int ClusterID = cluster.getPatternID(); // used for normal (frequent) cluster shapes int lay, sta, ssta, mod, chip, lane; - if (ChipID != ChipIDprev) { + if (ChipID != -1) { // TODO: is this needed? mGeom->getChipId(ChipID, lay, sta, ssta, mod, chip); mod = mod + (ssta * (mNHicPerStave[lay] / 2)); int chipIdLocal = (ChipID - ChipBoundary[lay]) % (14 * mNHicPerStave[lay]); lane = (chipIdLocal % (14 * mNHicPerStave[lay])) / (14 / 2); } int npix = -1; + int colspan = -1; + int rowspan = -1; int isGrouped = -1; o2::math_utils::Point3D locC; // local coordinates @@ -174,6 +177,9 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) if (ClusterID != o2::itsmft::CompCluster::InvalidPatternID) { // Normal (frequent) cluster shapes if (!mDict->isGroup(ClusterID)) { npix = mDict->getNpixels(ClusterID); + // to do: is there way other than calling the pattern? + colspan = mDict->getPattern(ClusterID).getColumnSpan(); + rowspan = mDict->getPattern(ClusterID).getRowSpan(); if (mDoPublishDetailedSummary == 1) { locC = mDict->getClusterCoordinates(cluster); } @@ -181,6 +187,8 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) } else { o2::itsmft::ClusterPattern patt(pattIt); npix = patt.getNPixels(); + colspan = patt.getColumnSpan(); + rowspan = patt.getRowSpan(); if (mDoPublishDetailedSummary == 1) { locC = mDict->getClusterCoordinates(cluster, patt, true); } @@ -190,6 +198,8 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) } else { // invalid pattern o2::itsmft::ClusterPattern patt(pattIt); npix = patt.getNPixels(); + colspan = patt.getColumnSpan(); + rowspan = patt.getRowSpan(); isGrouped = 0; if (mDoPublishDetailedSummary == 1) { locC = mDict->getClusterCoordinates(cluster, patt, false); @@ -200,6 +210,15 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) nClustersForBunchCrossing++; } + if (lay < NLayerIB) { + nHitsFromClusters[ChipID] += npix; + } + + if (lay < NLayerIB && colspan > 127 && rowspan < 30) { + // definition of long cluster. 127 is driven by o2::itsmft::ClusterPattern::MaxColSpan = 128 + nLongClusters[ChipID]++; + } + if (lay < NLayerIB) { hAverageClusterOccupancySummaryIB[lay]->getNum()->Fill(chip, sta); hAverageClusterSizeSummaryIB[lay]->getNum()->Fill(chip, sta, (double)npix); @@ -249,6 +268,23 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) } } hClusterVsBunchCrossing->Fill(bcdata.bc, nClustersForBunchCrossing); // we count only the number of clusters, not their sizes + + // filling these anomaly plots once per ROF, ignoring chips w/o long clusters + for (int ichip = 0; ichip < ChipBoundary[NLayerIB]; ichip++) { + + int nLong = nLongClusters[ichip] <= 20 ? nLongClusters[ichip] : 21; + + if (nLong < 1) { + continue; + } + + int ilayer = -1; + while (ichip >= ChipBoundary[ilayer + 1]) { + ilayer++; + } + hLongClustersPerChip[ilayer]->Fill(ichip, nLong); + hMultPerChipWhenLongClusters[ilayer]->Fill(ichip, nHitsFromClusters[ichip]); + } } if ((int)clusRofArr.size() > 0) { @@ -396,7 +432,7 @@ void ITSClusterTask::reset() void ITSClusterTask::createAllHistos() { - hClusterVsBunchCrossing = new TH2D("BunchCrossingIDvsClusters", "BunchCrossingIDvsClusters", nBCbins, 0, 4095, 100, 0, 1000); + hClusterVsBunchCrossing = new TH2D("BunchCrossingIDvsClusters", "BunchCrossingIDvsClusters", nBCbins, 0, 4095, 100, 0, 2000); hClusterVsBunchCrossing->SetTitle("#clusters vs BC id for clusters with npix > 2"); addObject(hClusterVsBunchCrossing); formatAxes(hClusterVsBunchCrossing, "Bunch Crossing ID", "Number of clusters with npix > 2 in ROF", 1, 1.10); @@ -419,6 +455,17 @@ void ITSClusterTask::createAllHistos() if (!mEnableLayers[iLayer]) continue; + if (iLayer < NLayerIB) { + hLongClustersPerChip[iLayer] = new TH2D(Form("Anomalies/Layer%d/LongClusters", iLayer), Form("Layer%d/LongClusters", iLayer), ChipBoundary[iLayer + 1] - ChipBoundary[iLayer], ChipBoundary[iLayer], ChipBoundary[iLayer + 1], 21, 0, 21); + hMultPerChipWhenLongClusters[iLayer] = new TH2D(Form("Anomalies/Layer%d/HitsWhenLongClusters", iLayer), Form("Layer%d/HitsWhenLongClusters", iLayer), ChipBoundary[iLayer + 1] - ChipBoundary[iLayer], ChipBoundary[iLayer], ChipBoundary[iLayer + 1], 150, 0, 15000); + addObject(hLongClustersPerChip[iLayer]); + formatAxes(hLongClustersPerChip[iLayer], "Chip ID", "events with long clusters", 1, 1.10); + hLongClustersPerChip[iLayer]->SetStats(0); + addObject(hMultPerChipWhenLongClusters[iLayer]); + formatAxes(hMultPerChipWhenLongClusters[iLayer], "Chip ID", "Sum of clusters size (events w/ long clus)", 1, 1.10); + hMultPerChipWhenLongClusters[iLayer]->SetStats(0); + } + hClusterSizeLayerSummary[iLayer] = new TH1D(Form("Layer%d/AverageClusterSizeSummary", iLayer), Form("Layer%dAverageClusterSizeSummary", iLayer), 100, 0, 100); hClusterSizeLayerSummary[iLayer]->SetTitle(Form("Cluster size summary for Layer %d", iLayer)); addObject(hClusterSizeLayerSummary[iLayer]); From fccba5e22f4b6fbf5b023beb181da4464fca9f2d Mon Sep 17 00:00:00 2001 From: Nicolo Valle Date: Thu, 21 Nov 2024 17:52:34 +0100 Subject: [PATCH 2/6] ITS - Anomalous clusters plots --- Modules/ITS/src/ITSClusterTask.cxx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Modules/ITS/src/ITSClusterTask.cxx b/Modules/ITS/src/ITSClusterTask.cxx index c3f6bce2a4..e7ef57d30a 100644 --- a/Modules/ITS/src/ITSClusterTask.cxx +++ b/Modules/ITS/src/ITSClusterTask.cxx @@ -47,6 +47,10 @@ ITSClusterTask::~ITSClusterTask() if (!mEnableLayers[iLayer]) continue; + if (iLayer < NLayerIB) { + delete hLongClustersPerChip[iLayer]; + delete hMultPerChipWhenLongClusters[iLayer]; + } delete hClusterSizeLayerSummary[iLayer]; delete hClusterTopologyLayerSummary[iLayer]; delete hGroupedClusterSizeLayerSummary[iLayer]; @@ -400,6 +404,8 @@ void ITSClusterTask::reset() hClusterTopologyLayerSummary[iLayer]->Reset(); if (iLayer < NLayerIB) { + hLongClustersPerChip[iLayer]->Reset(); + hMultPerChipWhenLongClusters[iLayer]->Reset(); hAverageClusterOccupancySummaryIB[iLayer]->Reset(); hAverageClusterSizeSummaryIB[iLayer]->Reset(); if (mDoPublish1DSummary == 1) { From 9c69133ff9cddecf6fec75460cc7b8cf4f796e25 Mon Sep 17 00:00:00 2001 From: Nicolo Valle Date: Thu, 21 Nov 2024 18:04:17 +0100 Subject: [PATCH 3/6] fix typo in axis title --- Modules/ITS/src/ITSClusterTask.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/ITS/src/ITSClusterTask.cxx b/Modules/ITS/src/ITSClusterTask.cxx index e7ef57d30a..cbcae2e411 100644 --- a/Modules/ITS/src/ITSClusterTask.cxx +++ b/Modules/ITS/src/ITSClusterTask.cxx @@ -465,7 +465,7 @@ void ITSClusterTask::createAllHistos() hLongClustersPerChip[iLayer] = new TH2D(Form("Anomalies/Layer%d/LongClusters", iLayer), Form("Layer%d/LongClusters", iLayer), ChipBoundary[iLayer + 1] - ChipBoundary[iLayer], ChipBoundary[iLayer], ChipBoundary[iLayer + 1], 21, 0, 21); hMultPerChipWhenLongClusters[iLayer] = new TH2D(Form("Anomalies/Layer%d/HitsWhenLongClusters", iLayer), Form("Layer%d/HitsWhenLongClusters", iLayer), ChipBoundary[iLayer + 1] - ChipBoundary[iLayer], ChipBoundary[iLayer], ChipBoundary[iLayer + 1], 150, 0, 15000); addObject(hLongClustersPerChip[iLayer]); - formatAxes(hLongClustersPerChip[iLayer], "Chip ID", "events with long clusters", 1, 1.10); + formatAxes(hLongClustersPerChip[iLayer], "Chip ID", "number of long clusters", 1, 1.10); hLongClustersPerChip[iLayer]->SetStats(0); addObject(hMultPerChipWhenLongClusters[iLayer]); formatAxes(hMultPerChipWhenLongClusters[iLayer], "Chip ID", "Sum of clusters size (events w/ long clus)", 1, 1.10); From 2ba02b0133008a540c1b10fecd5bed7a7996f02d Mon Sep 17 00:00:00 2001 From: Nicolo Valle Date: Tue, 26 Nov 2024 15:32:36 +0100 Subject: [PATCH 4/6] minor --- Modules/ITS/include/ITS/ITSClusterTask.h | 3 +++ Modules/ITS/src/ITSClusterTask.cxx | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Modules/ITS/include/ITS/ITSClusterTask.h b/Modules/ITS/include/ITS/ITSClusterTask.h index 3fdf485364..f738b96330 100644 --- a/Modules/ITS/include/ITS/ITSClusterTask.h +++ b/Modules/ITS/include/ITS/ITSClusterTask.h @@ -137,6 +137,9 @@ class ITSClusterTask : public TaskInterface std::string mLaneStatusFlag[NFlags] = { "IB", "ML", "OL", "Total" }; int mDoPublishDetailedSummary = 0; + int minColSpanLongCluster = 128; // driven by o2::itsmft::ClusterPattern::MaxColSpan = 128 + int maxRowSpanLongCluster = 29; + const int mNStaves[NLayer] = { 12, 16, 20, 24, 30, 42, 48 }; const int mNHicPerStave[NLayer] = { 1, 1, 1, 8, 8, 14, 14 }; const int mNChipsPerHic[NLayer] = { 9, 9, 9, 14, 14, 14, 14 }; diff --git a/Modules/ITS/src/ITSClusterTask.cxx b/Modules/ITS/src/ITSClusterTask.cxx index cbcae2e411..bcb1df9cf7 100644 --- a/Modules/ITS/src/ITSClusterTask.cxx +++ b/Modules/ITS/src/ITSClusterTask.cxx @@ -218,8 +218,8 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) nHitsFromClusters[ChipID] += npix; } - if (lay < NLayerIB && colspan > 127 && rowspan < 30) { - // definition of long cluster. 127 is driven by o2::itsmft::ClusterPattern::MaxColSpan = 128 + if (lay < NLayerIB && colspan >= minColSpanLongCluster && rowspan <= maxRowSpanLongCluster) { + // definition of long cluster nLongClusters[ChipID]++; } @@ -276,7 +276,7 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) // filling these anomaly plots once per ROF, ignoring chips w/o long clusters for (int ichip = 0; ichip < ChipBoundary[NLayerIB]; ichip++) { - int nLong = nLongClusters[ichip] <= 20 ? nLongClusters[ichip] : 21; + int nLong = TMath::Min(nLongClusters[ichip], 21); if (nLong < 1) { continue; @@ -463,7 +463,7 @@ void ITSClusterTask::createAllHistos() if (iLayer < NLayerIB) { hLongClustersPerChip[iLayer] = new TH2D(Form("Anomalies/Layer%d/LongClusters", iLayer), Form("Layer%d/LongClusters", iLayer), ChipBoundary[iLayer + 1] - ChipBoundary[iLayer], ChipBoundary[iLayer], ChipBoundary[iLayer + 1], 21, 0, 21); - hMultPerChipWhenLongClusters[iLayer] = new TH2D(Form("Anomalies/Layer%d/HitsWhenLongClusters", iLayer), Form("Layer%d/HitsWhenLongClusters", iLayer), ChipBoundary[iLayer + 1] - ChipBoundary[iLayer], ChipBoundary[iLayer], ChipBoundary[iLayer + 1], 150, 0, 15000); + hMultPerChipWhenLongClusters[iLayer] = new TH2D(Form("Anomalies/Layer%d/HitsWhenLongClusters", iLayer), Form("Layer%d/HitsWhenLongClusters", iLayer), ChipBoundary[iLayer + 1] - ChipBoundary[iLayer], ChipBoundary[iLayer], ChipBoundary[iLayer + 1], 200, 0, 20000); addObject(hLongClustersPerChip[iLayer]); formatAxes(hLongClustersPerChip[iLayer], "Chip ID", "number of long clusters", 1, 1.10); hLongClustersPerChip[iLayer]->SetStats(0); From a5d68b0e06efbc66a868bf248f47f8c771030a97 Mon Sep 17 00:00:00 2001 From: Nicolo Valle Date: Tue, 26 Nov 2024 22:43:04 +0100 Subject: [PATCH 5/6] Fix MacOS build errors --- Modules/ITS/src/ITSClusterTask.cxx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Modules/ITS/src/ITSClusterTask.cxx b/Modules/ITS/src/ITSClusterTask.cxx index bcb1df9cf7..8d0b85d644 100644 --- a/Modules/ITS/src/ITSClusterTask.cxx +++ b/Modules/ITS/src/ITSClusterTask.cxx @@ -155,8 +155,8 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) const auto& ROF = clusRofArr[iROF]; const auto bcdata = ROF.getBCData(); int nClustersForBunchCrossing = 0; - int nLongClusters[ChipBoundary[NLayerIB]] = { 0 }; - int nHitsFromClusters[ChipBoundary[NLayerIB]] = { 0 }; // only IB is implemented at the moment + int nLongClusters[ChipBoundary[3]] = {}; + int nHitsFromClusters[ChipBoundary[3]] = {}; // only IB is implemented at the moment for (int icl = ROF.getFirstEntry(); icl < ROF.getFirstEntry() + ROF.getNEntries(); icl++) { @@ -165,12 +165,12 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) int ClusterID = cluster.getPatternID(); // used for normal (frequent) cluster shapes int lay, sta, ssta, mod, chip, lane; - if (ChipID != -1) { // TODO: is this needed? - mGeom->getChipId(ChipID, lay, sta, ssta, mod, chip); - mod = mod + (ssta * (mNHicPerStave[lay] / 2)); - int chipIdLocal = (ChipID - ChipBoundary[lay]) % (14 * mNHicPerStave[lay]); - lane = (chipIdLocal % (14 * mNHicPerStave[lay])) / (14 / 2); - } + // TODO: avoid call Geom if ChipID is the same as previous cluster + mGeom->getChipId(ChipID, lay, sta, ssta, mod, chip); + mod = mod + (ssta * (mNHicPerStave[lay] / 2)); + int chipIdLocal = (ChipID - ChipBoundary[lay]) % (14 * mNHicPerStave[lay]); + lane = (chipIdLocal % (14 * mNHicPerStave[lay])) / (14 / 2); + int npix = -1; int colspan = -1; int rowspan = -1; @@ -181,7 +181,7 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) if (ClusterID != o2::itsmft::CompCluster::InvalidPatternID) { // Normal (frequent) cluster shapes if (!mDict->isGroup(ClusterID)) { npix = mDict->getNpixels(ClusterID); - // to do: is there way other than calling the pattern? + // TODO: is there way other than calling the pattern? colspan = mDict->getPattern(ClusterID).getColumnSpan(); rowspan = mDict->getPattern(ClusterID).getRowSpan(); if (mDoPublishDetailedSummary == 1) { From d3b453843f9313bf598678fbfa9d97a190d328da Mon Sep 17 00:00:00 2001 From: Nicolo Valle Date: Wed, 27 Nov 2024 12:22:55 +0100 Subject: [PATCH 6/6] MacOS build failure: defininig constexpr arrays --- Modules/ITS/include/ITS/ITSClusterTask.h | 14 +++++++------- Modules/ITS/src/ITSClusterTask.cxx | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Modules/ITS/include/ITS/ITSClusterTask.h b/Modules/ITS/include/ITS/ITSClusterTask.h index f738b96330..6122176fe4 100644 --- a/Modules/ITS/include/ITS/ITSClusterTask.h +++ b/Modules/ITS/include/ITS/ITSClusterTask.h @@ -140,13 +140,13 @@ class ITSClusterTask : public TaskInterface int minColSpanLongCluster = 128; // driven by o2::itsmft::ClusterPattern::MaxColSpan = 128 int maxRowSpanLongCluster = 29; - const int mNStaves[NLayer] = { 12, 16, 20, 24, 30, 42, 48 }; - const int mNHicPerStave[NLayer] = { 1, 1, 1, 8, 8, 14, 14 }; - const int mNChipsPerHic[NLayer] = { 9, 9, 9, 14, 14, 14, 14 }; - const int mNLanePerHic[NLayer] = { 3, 3, 3, 2, 2, 2, 2 }; - const int ChipBoundary[NLayer + 1] = { 0, 108, 252, 432, 3120, 6480, 14712, 24120 }; - const int StaveBoundary[NLayer + 1] = { 0, 12, 28, 48, 72, 102, 144, 192 }; - const float mLength[NLayer] = { 14., 14., 14., 43., 43., 74., 74. }; + static constexpr int mNStaves[NLayer] = { 12, 16, 20, 24, 30, 42, 48 }; + static constexpr int mNHicPerStave[NLayer] = { 1, 1, 1, 8, 8, 14, 14 }; + static constexpr int mNChipsPerHic[NLayer] = { 9, 9, 9, 14, 14, 14, 14 }; + static constexpr int mNLanePerHic[NLayer] = { 3, 3, 3, 2, 2, 2, 2 }; + static constexpr int ChipBoundary[NLayer + 1] = { 0, 108, 252, 432, 3120, 6480, 14712, 24120 }; + static constexpr int StaveBoundary[NLayer + 1] = { 0, 12, 28, 48, 72, 102, 144, 192 }; + static constexpr float mLength[NLayer] = { 14., 14., 14., 43., 43., 74., 74. }; const std::string mYlabels[NLayer * 2] = { "L6B(S24#rightarrow47)", "L5B(S21#rightarrow41)", "L4B(S15#rightarrow29)", "L3B(S12#rightarrow23)", "L2B(S10#rightarrow19)", "L1B(S08#rightarrow15)", "L0B(S06#rightarrow11)", "L0T(S00#rightarrow05)", "L1T(S00#rightarrow07)", "L2T(S00#rightarrow09)", "L3T(S00#rightarrow11)", "L4T(S00#rightarrow14)", "L5T(S00#rightarrow20)", "L6T(S00#rightarrow23)" }; int mEnableLayers[NLayer] = { 0 }; diff --git a/Modules/ITS/src/ITSClusterTask.cxx b/Modules/ITS/src/ITSClusterTask.cxx index 8d0b85d644..4825f9b4cc 100644 --- a/Modules/ITS/src/ITSClusterTask.cxx +++ b/Modules/ITS/src/ITSClusterTask.cxx @@ -155,8 +155,8 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) const auto& ROF = clusRofArr[iROF]; const auto bcdata = ROF.getBCData(); int nClustersForBunchCrossing = 0; - int nLongClusters[ChipBoundary[3]] = {}; - int nHitsFromClusters[ChipBoundary[3]] = {}; // only IB is implemented at the moment + int nLongClusters[ChipBoundary[NLayerIB]] = {}; + int nHitsFromClusters[ChipBoundary[NLayerIB]] = {}; // only IB is implemented at the moment for (int icl = ROF.getFirstEntry(); icl < ROF.getFirstEntry() + ROF.getNEntries(); icl++) { @@ -181,9 +181,11 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) if (ClusterID != o2::itsmft::CompCluster::InvalidPatternID) { // Normal (frequent) cluster shapes if (!mDict->isGroup(ClusterID)) { npix = mDict->getNpixels(ClusterID); + // TODO: is there way other than calling the pattern? colspan = mDict->getPattern(ClusterID).getColumnSpan(); rowspan = mDict->getPattern(ClusterID).getRowSpan(); + if (mDoPublishDetailedSummary == 1) { locC = mDict->getClusterCoordinates(cluster); } @@ -277,11 +279,9 @@ void ITSClusterTask::monitorData(o2::framework::ProcessingContext& ctx) for (int ichip = 0; ichip < ChipBoundary[NLayerIB]; ichip++) { int nLong = TMath::Min(nLongClusters[ichip], 21); - if (nLong < 1) { continue; } - int ilayer = -1; while (ichip >= ChipBoundary[ilayer + 1]) { ilayer++;