Skip to content

Commit 8497c1c

Browse files
committed
[PWGJE] emcalCorrectionTask.cxx: Add max number of table size per DF
- Add max number of table size per DF for (ambigous) clusters and cells per (ambigous) clusters which are used to reserve memory per DF for these tables. Also removed the old reserve calls done per BC iteration.
1 parent e587889 commit 8497c1c

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)