Skip to content

Commit bbe74a0

Browse files
committed
GPUTRDRecoParam initialization, use in GPUTRDTracker
TODO passing initialized param to GPUConstantMem
1 parent bd6d027 commit bbe74a0

File tree

10 files changed

+38
-71
lines changed

10 files changed

+38
-71
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: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
#include "GPUTPCGMMerger.h"
2424
#include "GPUTRDTracker.h"
25+
#include "GPUTRDRecoParam.h"
2526

2627
#include "GPUTPCCompression.h"
2728
#include "GPUTPCDecompression.h"
@@ -57,7 +58,7 @@ struct GPUConstantMem {
5758
#ifdef GPUCA_HAS_ONNX
5859
GPUTPCNNClusterizer tpcNNClusterer[GPUCA_NSECTORS];
5960
#endif
60-
61+
GPUTRDRecoParam trdRecoParam;
6162
template <int32_t I>
6263
GPUd() auto& getTRDTracker();
6364
};

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: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ namespace o2
2626
{
2727
namespace gpu
2828
{
29+
struct GPUSettingsRec;
2930

3031
class GPUTRDRecoParam
3132
{
@@ -35,7 +36,7 @@ class GPUTRDRecoParam
3536
~GPUTRDRecoParam() = default;
3637

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

4041
#if !defined(GPUCA_GPUCODE_DEVICE)
4142
/// Recalculate tracklet covariance based on phi angle of related track

GPU/GPUTracking/TRDTracking/GPUTRDTracker.cxx

Lines changed: 5 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ void* GPUTRDTracker_t<TRDTRK, PROP>::SetPointersTracks(void* base)
9292
}
9393

9494
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>())
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), mRecoParam(nullptr), mDebugOutput(false), mMaxEta(0.84f), mRoadZ(18.f), mZCorrCoefNRC(1.4f), mTPCVdrift(2.58f), mTPCTDriftOffset(0.f), mDebug(new GPUTRDTrackerDebug<TRDTRK>())
9696
{
9797
//--------------------------------------------------------------------
9898
// Default constructor
@@ -114,9 +114,8 @@ void GPUTRDTracker_t<TRDTRK, PROP>::InitializeProcessor()
114114
//--------------------------------------------------------------------
115115
// Initialise tracker
116116
//--------------------------------------------------------------------
117-
117+
mRecoParam = &GetConstantMem()->trdRecoParam;
118118
UpdateGeometry();
119-
120119
mDebug->ExpandVectors();
121120
mIsInitialized = true;
122121
}
@@ -131,42 +130,6 @@ void GPUTRDTracker_t<TRDTRK, PROP>::UpdateGeometry()
131130
if (!mGeo) {
132131
GPUFatal("TRD geometry must be provided externally");
133132
}
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-
170133
// obtain average radius of TRD chambers
171134
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
172135
auto* matrix = mGeo->GetClusterMatrix(0);
@@ -967,7 +930,7 @@ GPUd() void GPUTRDTracker_t<TRDTRK, PROP>::RecalcTrkltCov(const float tilt, cons
967930
//--------------------------------------------------------------------
968931
float t2 = tilt * tilt; // tan^2 (tilt)
969932
float c2 = 1.f / (1.f + t2); // cos^2 (tilt)
970-
float sy2 = GetRPhiRes(snp);
933+
float sy2 = mRecoParam->getRPhiRes(snp);
971934
float sz2 = rowSize * rowSize / 12.f;
972935
cov[0] = c2 * (sy2 + t2 * sz2);
973936
cov[1] = c2 * tilt * (sz2 - sy2);
@@ -977,8 +940,8 @@ GPUd() void GPUTRDTracker_t<TRDTRK, PROP>::RecalcTrkltCov(const float tilt, cons
977940
template <class TRDTRK, class PROP>
978941
GPUd() float GPUTRDTracker_t<TRDTRK, PROP>::GetAngularPull(float dYtracklet, float snp) const
979942
{
980-
float dYtrack = ConvertAngleToDy(snp);
981-
float dYresolution = GetAngularResolution(snp);
943+
float dYtrack = mRecoParam->convertAngleToDy(snp);
944+
float dYresolution = mRecoParam->getDyRes(snp);
982945
if (dYresolution < 1e-6f) {
983946
return 999.f;
984947
}

GPU/GPUTracking/TRDTracking/GPUTRDTracker.h

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "GPUDef.h"
2424
#include "GPUTRDTrack.h"
2525
#include "GPUTRDSpacePoint.h"
26+
#include "GPUTRDRecoParam.h"
2627
#include "GPULogging.h"
2728
#include "GPUTRDInterfaces.h"
2829

@@ -114,9 +115,6 @@ class GPUTRDTracker_t : public GPUProcessor
114115
GPUd() bool AdjustSector(PROP* prop, TRDTRK* t) const;
115116
GPUd() int32_t GetSector(float alpha) const;
116117
GPUd() float GetAlphaOfSector(const int32_t sec) const;
117-
GPUd() float GetRPhiRes(float snp) const { return (mRPhiA2 + mRPhiC2 * (snp - mRPhiB) * (snp - mRPhiB)); } // parametrization obtained from track-tracklet residuals:
118-
GPUd() float GetAngularResolution(float snp) const { return mDyA2 + mDyC2 * (snp - mDyB) * (snp - mDyB); } // a^2 + c^2 * (snp - b)^2
119-
GPUd() float ConvertAngleToDy(float snp) const { return mAngleToDyA + mAngleToDyB * snp + mAngleToDyC * snp * snp; } // a + b*snp + c*snp^2 is more accurate than sin(phi) = (dy / xDrift) / sqrt(1+(dy/xDrift)^2)
120118
GPUd() float GetAngularPull(float dYtracklet, float snp) const;
121119
GPUd() void RecalcTrkltCov(const float tilt, const float snp, const float rowSize, float (&cov)[3]);
122120
GPUd() void FindChambersInRoad(const TRDTRK* t, const float roadY, const float roadZ, const int32_t iLayer, int32_t* det, const float zMax, const float alpha, const float zShiftTrk) const;
@@ -174,16 +172,7 @@ class GPUTRDTracker_t : public GPUProcessor
174172
TRDTRK* mCandidates; // array of tracks for multiple hypothesis tracking
175173
GPUTRDSpacePoint* mSpacePoints; // array with tracklet coordinates in global tracking frame
176174
const GPUTRDGeometry* mGeo; // TRD geometry
177-
/// ---- error parametrization depending on magnetic field ----
178-
float mRPhiA2; // parameterization for tracklet position resolution
179-
float mRPhiB; // parameterization for tracklet position resolution
180-
float mRPhiC2; // parameterization for tracklet position resolution
181-
float mDyA2; // parameterization for tracklet angular resolution
182-
float mDyB; // parameterization for tracklet angular resolution
183-
float mDyC2; // parameterization for tracklet angular resolution
184-
float mAngleToDyA; // parameterization for conversion track angle -> tracklet deflection
185-
float mAngleToDyB; // parameterization for conversion track angle -> tracklet deflection
186-
float mAngleToDyC; // parameterization for conversion track angle -> tracklet deflection
175+
const GPUTRDRecoParam* mRecoParam; // TRD RecoParam
187176
/// ---- end error parametrization ----
188177
bool mDebugOutput; // store debug output
189178
static constexpr const float sRadialOffset = -0.1f; // due to (possible) mis-calibration of t0 -> will become obsolete when tracklet conversion is done outside of the tracker

0 commit comments

Comments
 (0)