Skip to content

Commit ded149f

Browse files
committed
Fix GPU b-field initialization
The 12kA L3 field should be scaled wrt its own nominal rather than 30kA nominal Bz. Keep the old scaling for backward compatibility
1 parent b461fc2 commit ded149f

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

GPU/GPUTracking/Interface/GPUO2InterfaceUtils.cxx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,9 @@ uint32_t GPUO2InterfaceUtils::getTpcMaxTimeBinFromNHbf(uint32_t nHbf)
142142
{
143143
return (nHbf * o2::constants::lhc::LHCMaxBunches + 2 * o2::tpc::constants::LHCBCPERTIMEBIN - 2) / o2::tpc::constants::LHCBCPERTIMEBIN;
144144
}
145+
146+
float GPUO2InterfaceUtils::getNominalGPUBzFromCurrent(float l3curr)
147+
{
148+
float al3curr = CAMath::Abs(l3curr);
149+
return (CAMath::Abs(al3curr - 12000) < CAMath::Abs(al3curr - 30000) ? (2.04487f / 12000.f) : (5.00668f / 30000.f)) * l3curr;
150+
}

GPU/GPUTracking/Interface/GPUO2InterfaceUtils.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,16 @@ class GPUO2InterfaceUtils
5151
template <class S>
5252
static void RunZSEncoder(const S& in, std::unique_ptr<uint64_t[]>* outBuffer, uint32_t* outSizes, o2::raw::RawFileWriter* raw, const o2::InteractionRecord* ir, GPUO2InterfaceConfiguration& config, int32_t version, bool verify, bool padding = false, std::function<void(std::vector<o2::tpc::Digit>&)> digitsFilter = nullptr);
5353
template <class T>
54-
static float getNominalGPUBz(T& src)
54+
static float getNominalGPUBzOld(T& src)
5555
{
5656
return (5.00668f / 30000.f) * src.getL3Current();
5757
}
58+
template <class T>
59+
static float getNominalGPUBz(T& src)
60+
{
61+
return getNominalGPUBzFromCurrent(src.getL3Current());
62+
}
63+
static float getNominalGPUBzFromCurrent(float l3curr);
5864
static std::unique_ptr<GPUParam> getFullParam(float solenoidBz, uint32_t nHbfPerTf = 0, std::unique_ptr<GPUO2InterfaceConfiguration>* pConfiguration = nullptr, std::unique_ptr<GPUSettingsO2>* pO2Settings = nullptr, bool* autoMaxTimeBin = nullptr);
5965
static std::shared_ptr<GPUParam> getFullParamShared(float solenoidBz, uint32_t nHbfPerTf = 0, std::unique_ptr<GPUO2InterfaceConfiguration>* pConfiguration = nullptr, std::unique_ptr<GPUSettingsO2>* pO2Settings = nullptr, bool* autoMaxTimeBin = nullptr); // Return owning pointer
6066
static void paramUseExternalOccupancyMap(GPUParam* param, uint32_t nHbfPerTf, const uint32_t* occupancymap, int32_t occupancyMapSize);

0 commit comments

Comments
 (0)