Skip to content

Commit 57a9e13

Browse files
authored
[PWGJE] emcalCorrectionTask.cxx: Add max number of table size per DF (AliceO2Group#16762)
1 parent 26055f1 commit 57a9e13

1 file changed

Lines changed: 37 additions & 20 deletions

File tree

PWGJE/TableProducer/emcalCorrectionTask.cxx

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,12 @@ struct EmcalCorrectionTask {
199199
int runNumber{0};
200200

201201
static constexpr float TrackNotOnEMCal = -900.f;
202-
static constexpr int kMaxMatchesPerCluster = 20; // Maximum number of tracks to match per cluster
202+
static constexpr int MaxMatchesPerCluster = 20; // Maximum number of tracks to match per cluster
203+
204+
static constexpr uint MaxClusterPerDFPerClusterizer = 200'000; // memory footprint: 13 MB per clusterizer
205+
static constexpr uint MaxAmbClusterPerDFPerClusterizer = 300'000; // memory footprint: 19.5 MB per clusterizer
206+
static constexpr uint MaxCellsPerClusterPerDFPerClusterizer = 300'000; // memory footprint: 4.8 MB per clusterizer
207+
static constexpr uint MaxCellsPerAmbClusterPerDFPerClusterizer = 450'000; // memory footprint: 7.2 MB per clusterizer
203208

204209
// cluster size
205210
size_t nCluster = 0;
@@ -414,6 +419,10 @@ struct EmcalCorrectionTask {
414419
void processFull(BcEvSels const& bcs, CollEventSels const& collisions, MyGlobTracks const& tracks, FilteredCells const& cells)
415420
{
416421
LOG(debug) << "Starting process full.";
422+
clusters.reserve(MaxClusterPerDFPerClusterizer * mClusterizers.size());
423+
clustersAmbiguous.reserve(MaxAmbClusterPerDFPerClusterizer * mClusterizers.size());
424+
clustercells.reserve(MaxCellsPerClusterPerDFPerClusterizer * mClusterizers.size());
425+
clustercellsambiguous.reserve(MaxCellsPerAmbClusterPerDFPerClusterizer * mClusterizers.size());
417426

418427
int previousCollisionId = 0; // Collision ID of the last unique BC. Needed to skip unordered collisions to ensure ordered collisionIds in the cluster table
419428
int nBCsProcessed = 0;
@@ -570,6 +579,11 @@ struct EmcalCorrectionTask {
570579
{
571580
LOG(debug) << "Starting process full.";
572581

582+
clusters.reserve(MaxClusterPerDFPerClusterizer * mClusterizers.size());
583+
clustersAmbiguous.reserve(MaxAmbClusterPerDFPerClusterizer * mClusterizers.size());
584+
clustercells.reserve(MaxCellsPerClusterPerDFPerClusterizer * mClusterizers.size());
585+
clustercellsambiguous.reserve(MaxCellsPerAmbClusterPerDFPerClusterizer * mClusterizers.size());
586+
573587
int previousCollisionId = 0; // Collision ID of the last unique BC. Needed to skip unordered collisions to ensure ordered collisionIds in the cluster table
574588
int nBCsProcessed = 0;
575589
int nCellsProcessed = 0;
@@ -730,6 +744,13 @@ struct EmcalCorrectionTask {
730744
{
731745
LOG(debug) << "Starting processMCFull.";
732746

747+
clusters.reserve(MaxClusterPerDFPerClusterizer * mClusterizers.size());
748+
mcclusters.reserve(MaxClusterPerDFPerClusterizer * mClusterizers.size());
749+
clustersAmbiguous.reserve(MaxAmbClusterPerDFPerClusterizer * mClusterizers.size());
750+
mcclustersAmbiguous.reserve(MaxAmbClusterPerDFPerClusterizer * mClusterizers.size());
751+
clustercells.reserve(MaxCellsPerClusterPerDFPerClusterizer * mClusterizers.size());
752+
clustercellsambiguous.reserve(MaxCellsPerAmbClusterPerDFPerClusterizer * mClusterizers.size());
753+
733754
int previousCollisionId = 0; // Collision ID of the last unique BC. Needed to skip unordered collisions to ensure ordered collisionIds in the cluster table
734755
int nBCsProcessed = 0;
735756
int nCellsProcessed = 0;
@@ -918,6 +939,13 @@ struct EmcalCorrectionTask {
918939
{
919940
LOG(debug) << "Starting processMCWithSecondaries.";
920941

942+
clusters.reserve(MaxClusterPerDFPerClusterizer * mClusterizers.size());
943+
mcclusters.reserve(MaxClusterPerDFPerClusterizer * mClusterizers.size());
944+
clustersAmbiguous.reserve(MaxAmbClusterPerDFPerClusterizer * mClusterizers.size());
945+
mcclustersAmbiguous.reserve(MaxAmbClusterPerDFPerClusterizer * mClusterizers.size());
946+
clustercells.reserve(MaxCellsPerClusterPerDFPerClusterizer * mClusterizers.size());
947+
clustercellsambiguous.reserve(MaxCellsPerAmbClusterPerDFPerClusterizer * mClusterizers.size());
948+
921949
int previousCollisionId = 0; // Collision ID of the last unique BC. Needed to skip unordered collisions to ensure ordered collisionIds in the cluster table
922950
int nBCsProcessed = 0;
923951
int nCellsProcessed = 0;
@@ -1107,6 +1135,12 @@ struct EmcalCorrectionTask {
11071135
void processStandalone(BcEvSels const& bcs, aod::Collisions const& collisions, FilteredCells const& cells)
11081136
{
11091137
LOG(debug) << "Starting process standalone.";
1138+
1139+
clusters.reserve(MaxClusterPerDFPerClusterizer * mClusterizers.size());
1140+
clustersAmbiguous.reserve(MaxAmbClusterPerDFPerClusterizer * mClusterizers.size());
1141+
clustercells.reserve(MaxCellsPerClusterPerDFPerClusterizer * mClusterizers.size());
1142+
clustercellsambiguous.reserve(MaxCellsPerAmbClusterPerDFPerClusterizer * mClusterizers.size());
1143+
11101144
int previousCollisionId = 0; // Collision ID of the last unique BC. Needed to skip unordered collisions to ensure ordered collisionIds in the cluster table
11111145
int nBCsProcessed = 0;
11121146
int nCellsProcessed = 0;
@@ -1270,16 +1304,6 @@ struct EmcalCorrectionTask {
12701304
template <typename Collision>
12711305
void fillClusterTable(Collision const& col, math_utils::Point3D<float> const& vertexPos, size_t iClusterizer, const gsl::span<int64_t> cellIndicesBC, MatchResult* indexMapPair = nullptr, const std::vector<int64_t>* trackGlobalIndex = nullptr, MatchResult* indexMapPairSecondaries = nullptr, const std::vector<int64_t>* secondariesGlobalIndex = nullptr)
12721306
{
1273-
// average number of cells per cluster, only used the reseve a reasonable amount for the clustercells table
1274-
// const size_t nAvgNcells = 3;
1275-
// we found a collision, put the clusters into the none ambiguous table
1276-
clusters.reserve(nCluster + mAnalysisClusters.size());
1277-
if (!mClusterLabels.empty()) {
1278-
mcclusters.reserve(nCluster + mClusterLabels.size());
1279-
}
1280-
// Since reserve triggers a fatal when its too small, it is not save for cells to use it unless we use a really large buffer...
1281-
// clustercells.reserve(mAnalysisClusters.size() * nAvgNcells);
1282-
12831307
// get the clusterType once
12841308
const auto clusterType = static_cast<int>(mClusterDefinitions[iClusterizer]);
12851309

@@ -1368,14 +1392,7 @@ struct EmcalCorrectionTask {
13681392
template <typename BC>
13691393
void fillAmbigousClusterTable(BC const& bc, size_t iClusterizer, const gsl::span<int64_t> cellIndicesBC, bool hasCollision)
13701394
{
1371-
// average number of cells per cluster, only used the reseve a reasonable amount for the clustercells table
1372-
// const size_t nAvgNcells = 3;
13731395
int cellindex = -1;
1374-
clustersAmbiguous.reserve(mAnalysisClusters.size() + nClusterAmb);
1375-
if (mClusterLabels.size() > 0) {
1376-
mcclustersAmbiguous.reserve(mClusterLabels.size() + nClusterAmb);
1377-
}
1378-
// clustercellsambiguous.reserve(mAnalysisClusters.size() * nAvgNcells);
13791396
unsigned int iCluster = 0;
13801397
float energy = 0.f;
13811398
for (const auto& cluster : mAnalysisClusters) {
@@ -1433,7 +1450,7 @@ struct EmcalCorrectionTask {
14331450
trackGlobalIndex.reserve(nTracksInCol);
14341451
fillTrackInfo<decltype(groupedTracks)>(groupedTracks, trackPhi, trackEta, trackGlobalIndex);
14351452

1436-
indexMapPair = matchTracksToCluster(mClusterPhi, mClusterEta, trackPhi, trackEta, maxMatchingDistance, kMaxMatchesPerCluster);
1453+
indexMapPair = matchTracksToCluster(mClusterPhi, mClusterEta, trackPhi, trackEta, maxMatchingDistance, MaxMatchesPerCluster);
14371454
}
14381455

14391456
template <typename Collision>
@@ -1469,7 +1486,7 @@ struct EmcalCorrectionTask {
14691486
trackEta.emplace_back(trackEtaEmcal);
14701487
trackGlobalIndex.emplace_back(track.globalIndex());
14711488
}
1472-
indexMapPair = matchTracksToCluster(mClusterPhi, mClusterEta, trackPhi, trackEta, maxMatchingDistance, kMaxMatchesPerCluster);
1489+
indexMapPair = matchTracksToCluster(mClusterPhi, mClusterEta, trackPhi, trackEta, maxMatchingDistance, MaxMatchesPerCluster);
14731490
}
14741491

14751492
template <typename Tracks>

0 commit comments

Comments
 (0)