Project
Loading...
Searching...
No Matches
Propagator.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
15
16#ifndef ALICEO2_BASE_PROPAGATOR_
17#define ALICEO2_BASE_PROPAGATOR_
18
19#include "GPUCommonRtypes.h"
20#include "GPUCommonArray.h"
26
27#ifndef GPUCA_GPUCODE
28#include <string>
29#endif
30
31namespace o2
32{
33namespace parameters
34{
35class GRPObject;
36class GRPMagField;
37} // namespace parameters
38
39namespace dataformats
40{
41class VertexBase;
42}
43
44namespace field
45{
46class MagFieldFast;
47class MagneticField;
48} // namespace field
49
50namespace gpu
51{
52class GPUTPCGMPolynomialField;
53}
54
55namespace base
56{
57
58template <typename value_T>
60{
61 public:
62 using value_type = value_T;
65
66 enum class MatCorrType : int {
67 USEMatCorrNONE, // flag to not use material corrections
68 USEMatCorrTGeo, // flag to use TGeo for material queries
70 }; // flag to use LUT for material queries (user must provide a pointer
71
72 static constexpr float MAX_SIN_PHI = 0.85f;
73 static constexpr float MAX_STEP = 2.0f;
74
75 GPUd() bool PropagateToXBxByBz(TrackParCov_t& track, value_type x,
77 track::TrackLTIntegral* tofInfo = nullptr, int signCorr = 0) const;
78
79 GPUd() bool PropagateToXBxByBz(TrackPar_t& track, value_type x,
81 track::TrackLTIntegral* tofInfo = nullptr, int signCorr = 0) const;
82
83 GPUd() bool propagateToX(TrackParCov_t& track, value_type x, value_type bZ,
85 track::TrackLTIntegral* tofInfo = nullptr, int signCorr = 0) const;
86
87 GPUd() bool propagateToX(TrackPar_t& track, value_type x, value_type bZ,
89 track::TrackLTIntegral* tofInfo = nullptr, int signCorr = 0) const;
90
91 template <typename track_T>
92 GPUd() bool propagateTo(track_T& track, value_type x, bool bzOnly = false, value_type maxSnp = MAX_SIN_PHI, value_type maxStep = MAX_STEP,
93 MatCorrType matCorr = MatCorrType::USEMatCorrLUT, track::TrackLTIntegral* tofInfo = nullptr, int signCorr = 0) const
94 {
95 return bzOnly ? propagateToX(track, x, getNominalBz(), maxSnp, maxStep, matCorr, tofInfo, signCorr) : PropagateToXBxByBz(track, x, maxSnp, maxStep, matCorr, tofInfo, signCorr);
96 }
97
98 template <typename track_T>
99 GPUd() bool propagateToAlphaX(track_T& track, value_type alpha, value_type x, bool bzOnly = false, value_type maxSnp = MAX_SIN_PHI, value_type maxStep = MAX_STEP, int minSteps = 1,
100 MatCorrType matCorr = MatCorrType::USEMatCorrLUT, track::TrackLTIntegral* tofInfo = nullptr, int signCorr = 0) const;
101
102 GPUd() bool propagateToDCA(const o2::dataformats::VertexBase& vtx, o2::track::TrackParametrizationWithError<value_type>& track, value_type bZ,
104 o2::dataformats::DCA* dcaInfo = nullptr, track::TrackLTIntegral* tofInfo = nullptr,
105 int signCorr = 0, value_type maxD = 999.f) const;
106
107 GPUd() bool propagateToDCABxByBz(const o2::dataformats::VertexBase& vtx, o2::track::TrackParametrizationWithError<value_type>& track,
109 o2::dataformats::DCA* dcaInfo = nullptr, track::TrackLTIntegral* tofInfo = nullptr,
110 int signCorr = 0, value_type maxD = 999.f) const;
111
112 GPUd() bool propagateToDCA(const o2::math_utils::Point3D<value_type>& vtx, o2::track::TrackParametrization<value_type>& track, value_type bZ,
114 gpu::gpustd::array<value_type, 2>* dca = nullptr, track::TrackLTIntegral* tofInfo = nullptr,
115 int signCorr = 0, value_type maxD = 999.f) const;
116
117 GPUd() bool propagateToDCABxByBz(const o2::math_utils::Point3D<value_type>& vtx, o2::track::TrackParametrization<value_type>& track,
119 gpu::gpustd::array<value_type, 2>* dca = nullptr, track::TrackLTIntegral* tofInfo = nullptr,
120 int signCorr = 0, value_type maxD = 999.f) const;
121
124 PropagatorImpl& operator=(PropagatorImpl const&) = delete;
125 PropagatorImpl& operator=(PropagatorImpl&&) = delete;
126
127 // Bz at the origin
128 GPUd() void updateField();
129 GPUd() value_type getNominalBz() const { return mNominalBz; }
130 GPUd() void setTGeoFallBackAllowed(bool v) { mTGeoFallBackAllowed = v; }
131 GPUd() bool isTGeoFallBackAllowed() const { return mTGeoFallBackAllowed; }
132 GPUd() void setMatLUT(const o2::base::MatLayerCylSet* lut) { mMatLUT = lut; }
133 GPUd() const o2::base::MatLayerCylSet* getMatLUT() const { return mMatLUT; }
134 GPUd() void setGPUField(const o2::gpu::GPUTPCGMPolynomialField* field) { mGPUField = field; }
135 GPUd() const o2::gpu::GPUTPCGMPolynomialField* getGPUField() const { return mGPUField; }
136 GPUd() void setNominalBz(value_type bz) { mNominalBz = bz; }
137 GPUd() bool hasMagFieldSet() const { return mField != nullptr; }
138
139 GPUd() value_type estimateLTFast(o2::track::TrackLTIntegral& lt, const o2::track::TrackParametrization<value_type>& trc) const;
140 GPUd() float estimateLTIncrement(const o2::track::TrackParametrization<value_type>& trc, const o2::math_utils::Point3D<value_type>& postStart, const o2::math_utils::Point3D<value_type>& posEnd) const;
141
142#ifndef GPUCA_GPUCODE
143 static PropagatorImpl* Instance(bool uninitialized = false)
144 {
145 static PropagatorImpl instance(uninitialized);
146 return &instance;
147 }
148 static int initFieldFromGRP(const o2::parameters::GRPMagField* grp, bool verbose = false);
149
150 static int initFieldFromGRP(const o2::parameters::GRPObject* grp, bool verbose = false);
151 static int initFieldFromGRP(const std::string grpFileName = "", bool verbose = false);
152#endif
153
154 GPUd() MatBudget getMatBudget(MatCorrType corrType, const o2::math_utils::Point3D<value_type>& p0, const o2::math_utils::Point3D<value_type>& p1) const;
155
156 GPUd() void getFieldXYZ(const math_utils::Point3D<float> xyz, float* bxyz) const;
157
158 GPUd() void getFieldXYZ(const math_utils::Point3D<double> xyz, double* bxyz) const;
159
160 private:
161#ifndef GPUCA_GPUCODE
162 PropagatorImpl(bool uninitialized = false);
163 ~PropagatorImpl() = default;
164#endif
165 static constexpr value_type Epsilon = 0.00001; // precision of propagation to X
166 template <typename T>
167 GPUd() void getFieldXYZImpl(const math_utils::Point3D<T> xyz, T* bxyz) const;
168
169 const o2::field::MagFieldFast* mFieldFast = nullptr;
170 o2::field::MagneticField* mField = nullptr;
171 value_type mNominalBz = 0;
172
173 bool mTGeoFallBackAllowed = true;
174 const o2::base::MatLayerCylSet* mMatLUT = nullptr; // externally set LUT
175 const o2::gpu::GPUTPCGMPolynomialField* mGPUField = nullptr; // externally set GPU Field
176
177 ClassDefNV(PropagatorImpl, 0);
178};
179
183
184} // namespace base
185} // namespace o2
186
187#endif
Base track model for the Barrel, params only, w/o covariance.
constexpr int p1()
constexpr to accelerate the coordinates changing
Declarations for the wrapper for the set of cylindrical material layers.
Header to collect physics constants.
Track Length and TOF integral.
GPUd() bool hasMagFieldSet() const
Definition Propagator.h:137
value_type value_type value_type maxStep
Definition Propagator.h:76
GPUd() void updateField()
value_type value_type value_type MatCorrType matCorr
Definition Propagator.h:76
value_type value_type value_type MatCorrType track::TrackLTIntegral int signCorr
Definition Propagator.h:77
static constexpr float MAX_SIN_PHI
Definition Propagator.h:72
value_type value_type bZ
Definition Propagator.h:83
value_type bool bzOnly
Definition Propagator.h:92
static constexpr float MAX_STEP
Definition Propagator.h:73
GPUd() bool isTGeoFallBackAllowed() const
Definition Propagator.h:131
value_type value_type value_type MatCorrType track::TrackLTIntegral * tofInfo
Definition Propagator.h:77
const o2::math_utils::Point3D< value_type > const o2::math_utils::Point3D< value_type > &p1 const
Definition Propagator.h:154
GPUd() void setTGeoFallBackAllowed(bool v)
Definition Propagator.h:130
value_type value_type maxSnp
Definition Propagator.h:76
GPUd() void setMatLUT(const o2
Definition Propagator.h:132
static int initFieldFromGRP(const o2::parameters::GRPMagField *grp, bool verbose=false)
const o2::math_utils::Point3D< value_type > & p0
Definition Propagator.h:154
GPUd() bool PropagateToXBxByBz(TrackParCov_t &track
GPUd() value_type estimateLTFast(o2 static GPUd() float estimateLTIncrement(const o2 PropagatorImpl * Instance(bool uninitialized=false)
Definition Propagator.h:143
GLfloat GLfloat GLfloat alpha
Definition glcorearb.h:279
GLint GLenum GLint x
Definition glcorearb.h:403
const GLdouble * v
Definition glcorearb.h:832
GLenum array
Definition glcorearb.h:4274
GLdouble f
Definition glcorearb.h:310
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...