Skip to content

Commit 1de0de3

Browse files
committed
GPU Interface: provide setter for external occuapancy map
1 parent aa88464 commit 1de0de3

File tree

3 files changed

+25
-15
lines changed

3 files changed

+25
-15
lines changed

GPU/GPUTracking/Interface/GPUO2InterfaceRefit.cxx

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -99,35 +99,26 @@ size_t GPUO2InterfaceRefit::fillOccupancyMapGetSize(unsigned int nHbfPerTf, cons
9999
GPUO2InterfaceRefit::GPUO2InterfaceRefit(const ClusterNativeAccess* cl, const CorrectionMapsHelper* trans, float bzNominalGPU, const TPCClRefElem* trackRef, unsigned int nHbfPerTf, const unsigned char* sharedmap, const unsigned int* occupancymap, int occupancyMapSize, const std::vector<TrackTPC>* trks, o2::base::Propagator* p)
100100
{
101101
mParam = GPUO2InterfaceUtils::getFullParam(bzNominalGPU, nHbfPerTf);
102-
size_t expectedSharedMapSize = nHbfPerTf ? fillOccupancyMapGetSize(nHbfPerTf, mParam.get()) : 0;
102+
size_t expectedOccMapSize = nHbfPerTf ? fillOccupancyMapGetSize(nHbfPerTf, mParam.get()) : 0;
103103
if (cl->nClustersTotal) {
104104
if (sharedmap == nullptr && trks == nullptr) {
105105
throw std::runtime_error("Must provide either shared cluster map or vector of tpc tracks to build the map");
106106
}
107-
if ((sharedmap == nullptr) ^ (expectedSharedMapSize && occupancymap == nullptr)) {
107+
if ((sharedmap == nullptr) ^ (expectedOccMapSize && occupancymap == nullptr)) {
108108
throw std::runtime_error("Must provide either both shared cluster map and occupancy map or none of them");
109109
}
110110
if (sharedmap == nullptr) {
111111
mSharedMap.resize(cl->nClustersTotal);
112112
sharedmap = mSharedMap.data();
113-
mOccupancyMap.resize(expectedSharedMapSize / sizeof(*mOccupancyMap.data()));
113+
mOccupancyMap.resize(expectedOccMapSize / sizeof(*mOccupancyMap.data()));
114114
occupancymap = mOccupancyMap.data();
115+
occupancyMapSize = expectedOccMapSize;
115116
fillSharedClustersAndOccupancyMap(cl, *trks, trackRef, mSharedMap.data(), mOccupancyMap.data(), nHbfPerTf, mParam.get());
116117
}
117118
}
118-
if (occupancymap && occupancyMapSize > sizeof(*occupancymap) && occupancymap[1] != (mParam->rec.tpc.occupancyMapTimeBins * 0x10000 + mParam->rec.tpc.occupancyMapTimeBinsAverage)) {
119-
throw std::runtime_error("Occupancy map has invalid paramters occupancyMapTimeBins and occupancyMapTimeBinsAverage");
120-
}
121-
if (occupancyMapSize != -1 && nHbfPerTf && (size_t)occupancyMapSize != expectedSharedMapSize) {
122-
throw std::runtime_error("Received occupancy map of wrong size, most likely --configKeyValues or HBperTF of map creator and map consumer are different");
123-
}
119+
GPUO2InterfaceUtils::paramUseExternalOccupancyMap(mParam.get(), nHbfPerTf, occupancymap, occupancyMapSize);
120+
124121
mRefit = std::make_unique<GPUTrackingRefit>();
125-
if (occupancymap) {
126-
mParam->occupancyTotal = *occupancymap;
127-
if (mParam->rec.tpc.occupancyMapTimeBins) {
128-
mParam->occupancyMap = occupancymap + 2;
129-
}
130-
}
131122
mRefit->SetGPUParam(mParam.get());
132123
mRefit->SetClusterStateArray(sharedmap);
133124
mRefit->SetPropagator(p);

GPU/GPUTracking/Interface/GPUO2InterfaceUtils.cxx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#include "GPUO2InterfaceUtils.h"
1616
#include "GPUO2InterfaceConfiguration.h"
17+
#include "GPUO2InterfaceRefit.h"
1718
#include "TPCPadGainCalib.h"
1819
#include "CalibdEdxContainer.h"
1920
#include "TPCBase/Sector.h"
@@ -115,3 +116,20 @@ std::shared_ptr<GPUParam> GPUO2InterfaceUtils::getFullParamShared(float solenoid
115116
{
116117
return std::move(getFullParam(solenoidBz, nHbfPerTf, pConfiguration, pO2Settings, autoMaxTimeBin));
117118
}
119+
120+
void GPUO2InterfaceUtils::paramUseExternalOccupancyMap(GPUParam* param, unsigned int nHbfPerTf, const unsigned int* occupancymap, int occupancyMapSize)
121+
{
122+
size_t expectedOccMapSize = nHbfPerTf ? GPUO2InterfaceRefit::fillOccupancyMapGetSize(nHbfPerTf, param) : 0;
123+
if (occupancyMapSize != -1 && nHbfPerTf && (size_t)occupancyMapSize != expectedOccMapSize) {
124+
throw std::runtime_error("Received occupancy map of wrong size, most likely --configKeyValues or HBperTF of map creator and map consumer are different");
125+
}
126+
if (occupancymap && occupancyMapSize > sizeof(*occupancymap) && occupancymap[1] != (param->rec.tpc.occupancyMapTimeBins * 0x10000 + param->rec.tpc.occupancyMapTimeBinsAverage)) {
127+
throw std::runtime_error("Occupancy map has invalid paramters occupancyMapTimeBins and occupancyMapTimeBinsAverage");
128+
}
129+
if (occupancymap) {
130+
param->occupancyTotal = *occupancymap;
131+
if (param->rec.tpc.occupancyMapTimeBins) {
132+
param->occupancyMap = occupancymap + 2;
133+
}
134+
}
135+
}

GPU/GPUTracking/Interface/GPUO2InterfaceUtils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class GPUO2InterfaceUtils
5757
}
5858
static std::unique_ptr<GPUParam> getFullParam(float solenoidBz, unsigned int nHbfPerTf = 0, std::unique_ptr<GPUO2InterfaceConfiguration>* pConfiguration = nullptr, std::unique_ptr<GPUSettingsO2>* pO2Settings = nullptr, bool* autoMaxTimeBin = nullptr);
5959
static std::shared_ptr<GPUParam> getFullParamShared(float solenoidBz, unsigned int nHbfPerTf = 0, std::unique_ptr<GPUO2InterfaceConfiguration>* pConfiguration = nullptr, std::unique_ptr<GPUSettingsO2>* pO2Settings = nullptr, bool* autoMaxTimeBin = nullptr); // Return owning pointer
60+
static void paramUseExternalOccupancyMap(GPUParam* param, unsigned int nHbfPerTf, const unsigned int* occupancymap, int occupancyMapSize);
6061

6162
class GPUReconstructionZSDecoder
6263
{

0 commit comments

Comments
 (0)