Skip to content

Commit 685b2ac

Browse files
committed
GPUTRDRecoParam initialization, use in GPUTRDTracker
TODO passing initialized param to GPUConstantMem
1 parent 9f3064c commit 685b2ac

File tree

11 files changed

+41
-76
lines changed

11 files changed

+41
-76
lines changed

Detectors/Align/src/AlignableDetectorTRD.cxx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "DataFormatsTRD/TrackTRD.h"
2727
#include "DataFormatsTRD/Tracklet64.h"
2828
#include "DataFormatsTRD/CalibratedTracklet.h"
29+
#include "GPUO2InterfaceConfiguration.h"
2930
#include <TMath.h>
3031
#include <TGeoManager.h>
3132

@@ -175,10 +176,12 @@ int AlignableDetectorTRD::processPoints(GIndex gid, int npntCut, bool inv)
175176
return -1;
176177
}
177178
auto propagator = o2::base::Propagator::Instance(); // float version!
178-
static float prevBz = -99999.;
179-
if (prevBz != propagator->getNominalBz()) {
180-
prevBz = propagator->getNominalBz();
181-
mRecoParam.setBfield(prevBz);
179+
static bool firstCall = true;
180+
if (firstCall) {
181+
o2::gpu::GPUO2InterfaceConfiguration config;
182+
config.ReadConfigurableParam(config);
183+
mRecoParam.init(propagator->getNominalBz(), &config.configReconstruction);
184+
firstCall = false;
182185
}
183186
const auto* transformer = mController->getTRDTransformer();
184187
auto algTrack = mController->getAlgTrack();

Detectors/TPC/calibration/SpacePoints/src/TrackInterpolation.cxx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,9 @@ void TrackInterpolation::init(o2::dataformats::GlobalTrackID::mask_t src, o2::da
126126
mFastTransform = std::move(TPCFastTransformHelperO2::instance()->create(0));
127127

128128
mBz = o2::base::Propagator::Instance()->getNominalBz();
129-
mRecoParam.setBfield(mBz);
129+
o2::gpu::GPUO2InterfaceConfiguration config;
130+
config.ReadConfigurableParam(config);
131+
mRecoParam.init(mBz, &config.configReconstruction);
130132
mGeoTRD = o2::trd::Geometry::instance();
131133
mParams = &SpacePointsCalibConfParam::Instance();
132134

Detectors/TRD/calibration/src/TrackBasedCalib.cxx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
/// \brief Provides information required for TRD calibration which is based on the global tracking
1414
/// \author Ole Schmidt
1515

16+
#include "GPUO2InterfaceConfiguration.h"
1617
#include "TRDCalibration/TrackBasedCalib.h"
1718
#include "TRDCalibration/CalibrationParams.h"
1819
#include "DataFormatsTRD/Constants.h"
@@ -35,7 +36,9 @@ void TrackBasedCalib::reset()
3536
void TrackBasedCalib::init()
3637
{
3738
bz = o2::base::Propagator::Instance()->getNominalBz();
38-
mRecoParam.setBfield(bz);
39+
o2::gpu::GPUO2InterfaceConfiguration config;
40+
config.ReadConfigurableParam(config);
41+
mRecoParam.init(bz, &config.configReconstruction);
3942
}
4043

4144
void TrackBasedCalib::setInput(const o2::globaltracking::RecoContainer& input)

Detectors/TRD/qc/src/Tracking.cxx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
/// \brief Check the performance of the TRD in global tracking
1414
/// \author Ole Schmidt
1515

16+
#include "GPUO2InterfaceConfiguration.h"
1617
#include "TRDQC/Tracking.h"
1718
#include "DataFormatsGlobalTracking/RecoContainer.h"
1819
#include "DetectorsBase/GeometryManager.h"
@@ -25,7 +26,9 @@ using namespace o2::trd::constants;
2526

2627
void Tracking::init()
2728
{
28-
mRecoParam.setBfield(o2::base::Propagator::Instance()->getNominalBz());
29+
o2::gpu::GPUO2InterfaceConfiguration config;
30+
config.ReadConfigurableParam(config);
31+
mRecoParam.init(o2::base::Propagator::Instance()->getNominalBz(), &config.configReconstruction);
2932
}
3033

3134
void Tracking::setInput(const o2::globaltracking::RecoContainer& input)

Detectors/TRD/workflow/src/TRDGlobalTrackingSpec.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ void TRDGlobalTracking::updateTimeDependentParams(ProcessingContext& pc)
112112
config.ReadConfigurableParam(config);
113113
config.configGRP.solenoidBzNominalGPU = GPUO2InterfaceUtils::getNominalGPUBz(*o2::base::GRPGeomHelper::instance().getGRPMagField());
114114
config.configProcessing.o2PropagatorUseGPUField = false;
115+
mRecoParam.init(o2::base::Propagator::Instance()->getNominalBz(), &config.configReconstruction);
116+
115117
mRec->SetSettings(&config.configGRP, &config.configReconstruction, &config.configProcessing, &cfgRecoStep);
116118

117119
mChainTracking = mRec->AddChain<GPUChainTracking>();
@@ -131,8 +133,6 @@ void TRDGlobalTracking::updateTimeDependentParams(ProcessingContext& pc)
131133
LOG(fatal) << "GPUReconstruction could not be initialized";
132134
}
133135

134-
mRecoParam.setBfield(o2::base::Propagator::Instance()->getNominalBz());
135-
136136
mTracker->PrintSettings();
137137
LOG(info) << "Strict matching mode is " << ((mStrict) ? "ON" : "OFF");
138138
LOGF(info, "The search road in time for ITS-TPC tracks is set to %.1f sigma and %.2f us are added to it on top",

GPU/GPUTracking/Base/GPUConstantMem.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ struct GPUConstantMem {
5757
#ifdef GPUCA_HAS_ONNX
5858
GPUTPCNNClusterizer tpcNNClusterer[GPUCA_NSECTORS];
5959
#endif
60-
6160
template <int32_t I>
6261
GPUd() auto& getTRDTracker();
6362
};

GPU/GPUTracking/DataTypes/GPUDataTypesIO.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ class TPCFastTransform;
9595
struct TPCPadGainCalib;
9696
struct TPCZSLinkMapping;
9797

98+
class GPUTRDRecoParam;
9899
class GPUTPCTrack;
99100
class GPUTPCHitId;
100101
class GPUTPCGMMergedTrack;
@@ -135,7 +136,7 @@ struct GPUCalibObjectsTemplate { // use only pointers on PODs or flat objects he
135136
typename S<o2::tpc::CalibdEdxContainer>::type* dEdxCalibContainer = nullptr;
136137
typename S<o2::base::PropagatorImpl<float>>::type* o2Propagator = nullptr;
137138
typename S<o2::itsmft::TopologyDictionary>::type* itsPatternDict = nullptr;
138-
139+
typename S<GPUTRDRecoParam>::type* trdRecoParam = nullptr;
139140
// NN clusterizer objects
140141
typename S<o2::tpc::ORTRootSerializer>::type* nnClusterizerNetworks[3] = {nullptr, nullptr, nullptr};
141142
};

GPU/GPUTracking/DataTypes/GPUTRDRecoParam.cxx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,20 @@
1313
/// \brief Error parameterizations and helper functions for TRD reconstruction
1414
/// \author Ole Schmidt
1515

16+
#include "GPUSettings.h"
1617
#include "GPUTRDRecoParam.h"
1718
#include "GPUCommonLogger.h"
1819

1920
using namespace o2::gpu;
2021

2122
// error parameterizations taken from http://cds.cern.ch/record/2724259 Appendix A
22-
void GPUTRDRecoParam::setBfield(float bz)
23+
void GPUTRDRecoParam::init(float bz, const GPUSettingsRec* rec)
2324
{
25+
float resRPhiIdeal2 = rec ? rec->trd.trkltResRPhiIdeal * rec->trd.trkltResRPhiIdeal : 1.6e-3f;
2426
if (std::fabs(std::fabs(bz) - 2) < 0.1) {
2527
if (bz > 0) {
2628
// magnetic field +0.2 T
27-
mRPhiA2 = 1.6e-3f;
29+
mRPhiA2 = resRPhiIdeal2;
2830
mRPhiB = -1.43e-2f;
2931
mRPhiC2 = 4.55e-2f;
3032

@@ -37,7 +39,7 @@ void GPUTRDRecoParam::setBfield(float bz)
3739
mAngleToDyC = -0.4f;
3840
} else {
3941
// magnetic field -0.2 T
40-
mRPhiA2 = 1.6e-3f;
42+
mRPhiA2 = resRPhiIdeal2;
4143
mRPhiB = 1.43e-2f;
4244
mRPhiC2 = 4.55e-2f;
4345

@@ -52,7 +54,7 @@ void GPUTRDRecoParam::setBfield(float bz)
5254
} else if (std::fabs(std::fabs(bz) - 5) < 0.1) {
5355
if (bz > 0) {
5456
// magnetic field +0.5 T
55-
mRPhiA2 = 1.6e-3f;
57+
mRPhiA2 = resRPhiIdeal2;
5658
mRPhiB = 0.125f;
5759
mRPhiC2 = 0.0961f;
5860

@@ -65,7 +67,7 @@ void GPUTRDRecoParam::setBfield(float bz)
6567
mAngleToDyC = -0.58f;
6668
} else {
6769
// magnetic field -0.5 T
68-
mRPhiA2 = 1.6e-3f;
70+
mRPhiA2 = resRPhiIdeal2;
6971
mRPhiB = -0.14f;
7072
mRPhiC2 = 0.1156f;
7173

GPU/GPUTracking/DataTypes/GPUTRDRecoParam.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,15 @@
1616
#ifndef O2_GPU_TRD_RECOPARAM_H
1717
#define O2_GPU_TRD_RECOPARAM_H
1818

19-
#if !defined(GPUCA_GPUCODE_DEVICE)
20-
#include <array>
21-
#endif
2219
#include "GPUCommonDef.h"
2320
#include "GPUCommonRtypes.h"
21+
#include "GPUCommonArray.h"
2422

2523
namespace o2
2624
{
2725
namespace gpu
2826
{
27+
struct GPUSettingsRec;
2928

3029
class GPUTRDRecoParam
3130
{
@@ -35,11 +34,11 @@ class GPUTRDRecoParam
3534
~GPUTRDRecoParam() = default;
3635

3736
/// Load parameterization for given magnetic field
38-
void setBfield(float bz);
37+
void init(float bz, const GPUSettingsRec* rec = nullptr);
3938

4039
#if !defined(GPUCA_GPUCODE_DEVICE)
4140
/// Recalculate tracklet covariance based on phi angle of related track
42-
void recalcTrkltCov(const float tilt, const float snp, const float rowSize, std::array<float, 3>& cov) const
41+
GPUd() void recalcTrkltCov(const float tilt, const float snp, const float rowSize, std::array<float, 3>& cov) const
4342
{
4443
recalcTrkltCov(tilt, snp, rowSize, cov.data());
4544
}

GPU/GPUTracking/TRDTracking/GPUTRDTracker.cxx

Lines changed: 6 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "GPUCommonMath.h"
2424
#include "GPUCommonAlgorithm.h"
2525
#include "GPUConstantMem.h"
26+
#include "GPUTRDRecoParam.h"
2627

2728
using namespace o2::gpu;
2829

@@ -92,7 +93,7 @@ void* GPUTRDTracker_t<TRDTRK, PROP>::SetPointersTracks(void* base)
9293
}
9394

9495
template <class TRDTRK, class PROP>
95-
GPUTRDTracker_t<TRDTRK, PROP>::GPUTRDTracker_t() : mR(nullptr), mIsInitialized(false), mGenerateSpacePoints(false), mProcessPerTimeFrame(false), mNAngleHistogramBins(25), mAngleHistogramRange(50), mMemoryPermanent(-1), mMemoryTracklets(-1), mMemoryTracks(-1), mNMaxCollisions(0), mNMaxTracks(0), mNMaxSpacePoints(0), mTracks(nullptr), mTrackAttribs(nullptr), mNCandidates(1), mNTracks(0), mNEvents(0), mMaxBackendThreads(100), mTrackletIndexArray(nullptr), mHypothesis(nullptr), mCandidates(nullptr), mSpacePoints(nullptr), mGeo(nullptr), mRPhiA2(0), mRPhiB(0), mRPhiC2(0), mDyA2(0), mDyB(0), mDyC2(0), mAngleToDyA(0), mAngleToDyB(0), mAngleToDyC(0), mDebugOutput(false), mMaxEta(0.84f), mRoadZ(18.f), mZCorrCoefNRC(1.4f), mTPCVdrift(2.58f), mTPCTDriftOffset(0.f), mDebug(new GPUTRDTrackerDebug<TRDTRK>())
96+
GPUTRDTracker_t<TRDTRK, PROP>::GPUTRDTracker_t() : mR(nullptr), mIsInitialized(false), mGenerateSpacePoints(false), mProcessPerTimeFrame(false), mNAngleHistogramBins(25), mAngleHistogramRange(50), mMemoryPermanent(-1), mMemoryTracklets(-1), mMemoryTracks(-1), mNMaxCollisions(0), mNMaxTracks(0), mNMaxSpacePoints(0), mTracks(nullptr), mTrackAttribs(nullptr), mNCandidates(1), mNTracks(0), mNEvents(0), mMaxBackendThreads(100), mTrackletIndexArray(nullptr), mHypothesis(nullptr), mCandidates(nullptr), mSpacePoints(nullptr), mGeo(nullptr), mRecoParam(nullptr), mDebugOutput(false), mMaxEta(0.84f), mRoadZ(18.f), mZCorrCoefNRC(1.4f), mTPCVdrift(2.58f), mTPCTDriftOffset(0.f), mDebug(new GPUTRDTrackerDebug<TRDTRK>())
9697
{
9798
//--------------------------------------------------------------------
9899
// Default constructor
@@ -114,9 +115,8 @@ void GPUTRDTracker_t<TRDTRK, PROP>::InitializeProcessor()
114115
//--------------------------------------------------------------------
115116
// Initialise tracker
116117
//--------------------------------------------------------------------
117-
118+
mRecoParam = GetConstantMem()->calibObjects.trdRecoParam;
118119
UpdateGeometry();
119-
120120
mDebug->ExpandVectors();
121121
mIsInitialized = true;
122122
}
@@ -131,42 +131,6 @@ void GPUTRDTracker_t<TRDTRK, PROP>::UpdateGeometry()
131131
if (!mGeo) {
132132
GPUFatal("TRD geometry must be provided externally");
133133
}
134-
float Bz = Param().bzkG;
135-
float resRPhiIdeal2 = Param().rec.trd.trkltResRPhiIdeal * Param().rec.trd.trkltResRPhiIdeal;
136-
GPUInfo("Initializing with B-field: %f kG", Bz);
137-
if (CAMath::Abs(CAMath::Abs(Bz) - 2) < 0.1f) {
138-
// magnetic field +-0.2 T
139-
if (Bz > 0) {
140-
GPUInfo("Loading error parameterization for Bz = +2 kG");
141-
mRPhiA2 = resRPhiIdeal2, mRPhiB = -1.43e-2f, mRPhiC2 = 4.55e-2f;
142-
mDyA2 = 1.225e-3f, mDyB = -9.8e-3f, mDyC2 = 3.88e-2f;
143-
mAngleToDyA = -0.1f, mAngleToDyB = 1.89f, mAngleToDyC = -0.4f;
144-
} else {
145-
GPUInfo("Loading error parameterization for Bz = -2 kG");
146-
mRPhiA2 = resRPhiIdeal2, mRPhiB = 1.43e-2f, mRPhiC2 = 4.55e-2f;
147-
mDyA2 = 1.225e-3f, mDyB = 9.8e-3f, mDyC2 = 3.88e-2f;
148-
mAngleToDyA = 0.1f, mAngleToDyB = 1.89f, mAngleToDyC = 0.4f;
149-
}
150-
} else if (CAMath::Abs(CAMath::Abs(Bz) - 5) < 0.1f) {
151-
// magnetic field +-0.5 T
152-
if (Bz > 0) {
153-
GPUInfo("Loading error parameterization for Bz = +5 kG");
154-
mRPhiA2 = resRPhiIdeal2, mRPhiB = 0.125f, mRPhiC2 = 0.0961f;
155-
mDyA2 = 1.681e-3f, mDyB = 0.15f, mDyC2 = 0.1849f;
156-
mAngleToDyA = 0.13f, mAngleToDyB = 2.43f, mAngleToDyC = -0.58f;
157-
} else {
158-
GPUInfo("Loading error parameterization for Bz = -5 kG");
159-
mRPhiA2 = resRPhiIdeal2, mRPhiB = -0.14f, mRPhiC2 = 0.1156f;
160-
mDyA2 = 2.209e-3f, mDyB = -0.15f, mDyC2 = 0.2025f;
161-
mAngleToDyA = -0.15f, mAngleToDyB = 2.34f, mAngleToDyC = 0.56f;
162-
}
163-
} else {
164-
// magnetic field 0 T or another value which is not covered by the error parameterizations
165-
// using default values instead
166-
GPUWarning("No error parameterization available for Bz = %.2f kG. Keeping default value (sigma_y = const. = 1cm)", Bz);
167-
mRPhiA2 = 1.f;
168-
}
169-
170134
// obtain average radius of TRD chambers
171135
float x0[kNLayers] = {300.2f, 312.8f, 325.4f, 338.0f, 350.6f, 363.2f}; // used as default value in case no transformation matrix can be obtained
172136
auto* matrix = mGeo->GetClusterMatrix(0);
@@ -967,7 +931,7 @@ GPUd() void GPUTRDTracker_t<TRDTRK, PROP>::RecalcTrkltCov(const float tilt, cons
967931
//--------------------------------------------------------------------
968932
float t2 = tilt * tilt; // tan^2 (tilt)
969933
float c2 = 1.f / (1.f + t2); // cos^2 (tilt)
970-
float sy2 = GetRPhiRes(snp);
934+
float sy2 = mRecoParam->getRPhiRes(snp);
971935
float sz2 = rowSize * rowSize / 12.f;
972936
cov[0] = c2 * (sy2 + t2 * sz2);
973937
cov[1] = c2 * tilt * (sz2 - sy2);
@@ -977,8 +941,8 @@ GPUd() void GPUTRDTracker_t<TRDTRK, PROP>::RecalcTrkltCov(const float tilt, cons
977941
template <class TRDTRK, class PROP>
978942
GPUd() float GPUTRDTracker_t<TRDTRK, PROP>::GetAngularPull(float dYtracklet, float snp) const
979943
{
980-
float dYtrack = ConvertAngleToDy(snp);
981-
float dYresolution = GetAngularResolution(snp);
944+
float dYtrack = mRecoParam->convertAngleToDy(snp);
945+
float dYresolution = mRecoParam->getDyRes(snp);
982946
if (dYresolution < 1e-6f) {
983947
return 999.f;
984948
}

0 commit comments

Comments
 (0)