Classes | |
struct | CircleFit |
class | helixFit |
Helix fit by three step: -fast pre-fit (see Fast_fit() for further info); -circle fit of hits projected in the transverse plane by Riemann-Chernov algorithm (see Circle_fit() for further info); -line fit of hits projected on cylinder surface by orthogonal distance regression (see Line_fit for further info). Points must be passed ordered (from inner to outer layer). More... | |
struct | HelixFit |
struct | LineFit |
Typedefs | |
template<int N> | |
using | Array2xNd = Eigen::Array< double, 2, N > |
template<int N> | |
using | ArrayNd = Eigen::Array< double, N, N > |
using | Map3x4d = Eigen::Map< Matrix3x4d, 0, Eigen::Stride< 3 *stride, stride > > |
template<int N> | |
using | Map3xNd = Eigen::Map< Matrix3xNd< N >, 0, Eigen::Stride< 3 *stride, stride > > |
using | Map4d = Eigen::Map< Vector4d, 0, Eigen::InnerStride< stride > > |
using | Map6x4f = Eigen::Map< Matrix6x4f, 0, Eigen::Stride< 6 *stride, stride > > |
template<int N> | |
using | Map6xNf = Eigen::Map< Matrix6xNf< N >, 0, Eigen::Stride< 6 *stride, stride > > |
using | Matrix2d = Eigen::Matrix2d |
template<int N> | |
using | Matrix2Nd = Eigen::Matrix< double, 2 *N, 2 *N > |
using | Matrix2x3d = Eigen::Matrix< double, 2, 3 > |
template<int N> | |
using | Matrix2xNd = Eigen::Matrix< double, 2, N > |
using | Matrix3d = Eigen::Matrix3d |
using | Matrix3f = Eigen::Matrix3f |
template<int N> | |
using | Matrix3Nd = Eigen::Matrix< double, 3 *N, 3 *N > |
using | Matrix3x4d = Eigen::Matrix< double, 3, 4 > |
template<int N> | |
using | Matrix3xNd = Eigen::Matrix< double, 3, N > |
using | Matrix4d = Eigen::Matrix4d |
using | Matrix5d = Eigen::Matrix< double, 5, 5 > |
using | Matrix6d = Eigen::Matrix< double, 6, 6 > |
using | Matrix6x4f = Eigen::Matrix< float, 6, 4 > |
template<int N> | |
using | Matrix6xNf = Eigen::Matrix< float, 6, N > |
template<int N> | |
using | MatrixNd = Eigen::Matrix< double, N, N > |
template<int N> | |
using | MatrixNplusONEd = Eigen::Matrix< double, N+1, N+1 > |
template<int N> | |
using | MatrixNx3d = Eigen::Matrix< double, N, 3 > |
template<int N> | |
using | MatrixNx5d = Eigen::Matrix< double, N, 5 > |
using | MatrixXd = Eigen::MatrixXd |
template<int N> | |
using | RowVector2Nd = Eigen::Matrix< double, 1, 2 *N > |
template<int N> | |
using | RowVectorNd = Eigen::Matrix< double, 1, 1, N > |
using | Vector2d = Eigen::Vector2d |
template<int N> | |
using | Vector2Nd = Eigen::Matrix< double, 2 *N, 1 > |
using | Vector3d = Eigen::Vector3d |
using | Vector3f = Eigen::Vector3f |
template<int N> | |
using | Vector3Nd = Eigen::Matrix< double, 3 *N, 1 > |
using | Vector4d = Eigen::Vector4d |
using | Vector4f = Eigen::Vector4f |
using | Vector5d = Eigen::Matrix< double, 5, 1 > |
using | Vector6f = Eigen::Matrix< double, 6, 1 > |
template<int N> | |
using | VectorNd = Eigen::Matrix< double, N, 1 > |
template<int N> | |
using | VectorNplusONEd = Eigen::Matrix< double, N+1, 1 > |
using | VectorXd = Eigen::VectorXd |
Functions | |
template<typename M2xN > | |
__host__ __device__ int32_t | charge (const M2xN &p2D, const Vector3d &par_uvr) |
Find particle q considering the sign of cross product between particles velocity (estimated by the first 2 hits) and the vector radius between the first hit and the center of the fitted circle. More... | |
template<typename M2xN , typename V4 , int N> | |
__host__ __device__ CircleFit | circleFit (const M2xN &hits2D, const Matrix2Nd< N > &hits_cov2D, const V4 &fast_fit, const VectorNd< N > &rad, const double bField, const bool error) |
Fit a generic number of 2D points with a circle using Riemann-Chernov algorithm. Covariance matrix of fitted parameter is optionally computed. Multiple scattering (currently only in barrel layer) is optionally handled. More... | |
template<typename VNd1 , typename VNd2 > | |
__host__ __device__ void | computeRadLenUniformMaterial (const VNd1 &length_values, VNd2 &rad_lengths) |
template<typename M2xN , int N> | |
__host__ __device__ VectorNd< N > | cov_carttorad (const M2xN &p2D, const Matrix2Nd< N > &cov_cart, const VectorNd< N > &rad) |
Transform covariance matrix from Cartesian coordinates (only transverse plane component) to radial coordinates (both radial and tangential component but only diagonal terms, correlation between different point are not managed). More... | |
template<typename M2xN , typename V4 , int N> | |
__host__ __device__ VectorNd< N > | cov_carttorad_prefit (const M2xN &p2D, const Matrix2Nd< N > &cov_cart, V4 &fast_fit, const VectorNd< N > &rad) |
Transform covariance matrix from Cartesian coordinates (only transverse plane component) to coordinates system orthogonal to the pre-fitted circle in each point. Further information in attached documentation. More... | |
template<typename M2xN , int N> | |
__host__ __device__ Matrix2Nd< N > | cov_radtocart (const M2xN &p2D, const MatrixNd< N > &cov_rad, const VectorNd< N > &rad) |
Transform covariance matrix from radial (only tangential component) to Cartesian coordinates (only transverse plane component). More... | |
__host__ __device__ double | cross2D (const Vector2d &a, const Vector2d &b) |
Compute cross product of two 2D vector (assuming z component 0), returning z component of the result. More... | |
template<typename M3xN , typename V4 > | |
__host__ __device__ void | fastFit (const M3xN &hits, V4 &result) |
A very fast helix fit: it fits a circle by three points (first, middle and last point) and a line by two points (first and last). More... | |
__host__ __device__ void | fromCircleToPerigee (CircleFit &circle) |
Transform circle parameter from (X0,Y0,R) to (phi,Tip,q/R) and consequently covariance matrix. More... | |
template<int N> | |
HelixFit | helixFit (const Matrix3xNd< N > &hits, const Eigen::Matrix< float, 6, N > &hits_ge, const double bField, const bool error) |
Helix fit by three step: -fast pre-fit (see Fast_fit() for further info); -circle fit of hits projected in the transverse plane by Riemann-Chernov algorithm (see Circle_fit() for further info); -line fit of hits projected on cylinder surface by orthogonal distance regression (see Line_fit for further info). Points must be passed ordered (from inner to outer layer). More... | |
template<typename M3xN , typename M6xN , typename V4 > | |
__host__ __device__ LineFit | lineFit (const M3xN &hits, const M6xN &hits_ge, const CircleFit &circle, const V4 &fast_fit, const double bField, const bool error) |
Perform an ordinary least square fit in the s-z plane to compute the parameters cotTheta and Zip. More... | |
template<typename M6xNf , typename M3xNd > | |
__host__ __device__ void | loadCovariance (M6xNf const &ge, M3xNd &hits_cov) |
template<typename M6xNf , typename M2Nd > | |
__host__ __device__ void | loadCovariance2D (M6xNf const &ge, M2Nd &hits_cov) |
__host__ __device__ Vector2d | min_eigen2D (const Matrix2d &aMat, double &chi2) |
2D version of min_eigen3D(). More... | |
__host__ __device__ Vector3d | min_eigen3D (const Matrix3d &A, double &chi2) |
Compute the eigenvector associated to the minimum eigenvalue. More... | |
__host__ __device__ Vector3d | min_eigen3D_fast (const Matrix3d &A) |
A faster version of min_eigen3D() where double precision is not needed. More... | |
__host__ __device__ void | par_uvrtopak (CircleFit &circle, const double B, const bool error) |
Transform circle parameter from (X0,Y0,R) to (phi,Tip,p_t) and consequently covariance matrix. More... | |
template<class C > | |
__host__ __device__ void | printIt (C *m, const char *prefix="") |
template<auto Start, auto End, auto Inc, class F > | |
constexpr void | rolling_fits (F &&f) |
template<typename M2xN , typename V4 , int N> | |
__host__ __device__ MatrixNd< N > | scatter_cov_rad (const M2xN &p2D, const V4 &fast_fit, VectorNd< N > const &rad, double B) |
Compute the covariance matrix (in radial coordinates) of points in the transverse plane due to multiple Coulomb scattering. More... | |
template<typename V4 , typename VNd1 , typename VNd2 , int N> | |
__host__ __device__ auto | scatterCovLine (Matrix2d const *cov_sz, const V4 &fast_fit, VNd1 const &s_arcs, VNd2 const &z_values, const double theta, const double bField, MatrixNd< N > &ret) |
Compute the covariance matrix along cartesian S-Z of points due to multiple Coulomb scattering to be used in the line_fit, for the barrel and forward cases. The input covariance matrix is in the variables s-z, original and unrotated. The multiple scattering component is computed in the usual linear approximation, using the 3D path which is computed as the squared root of the squared sum of the s and z components passed in. Internally a rotation by theta is performed and the covariance matrix returned is the one in the direction orthogonal to the rotated S3D axis, i.e. along the rotated Z axis. The choice of the rotation is not arbitrary, but derived from the fact that putting the horizontal axis along the S3D direction allows the usage of the ordinary least squared fitting techiques with the trivial parametrization y = mx + q, avoiding the patological case with m = +/- inf, that would correspond to the case at eta = 0. More... | |
template<typename T > | |
constexpr T | sqr (const T a) |
raise to square. More... | |
template<typename VI5 , typename MI5 , typename VO5 , typename MO5 > | |
void | transformToPerigeePlane (VI5 const &ip, MI5 const &icov, VO5 &op, MO5 &ocov) |
template<typename VI5 , typename MI5 , typename VO5 , typename MO5 > | |
__host__ __device__ void | transformToPerigeePlane (VI5 const &ip, MI5 const &icov, VO5 &op, MO5 &ocov) |
template<int N> | |
__host__ __device__ VectorNd< N > | weightCircle (const MatrixNd< N > &cov_rad_inv) |
Compute the points' weights' vector for the circle fit when multiple scattering is managed. Further information in attached documentation. More... | |
Variables | |
constexpr double | epsilon = 1.e-4 |
used in numerical derivative (J2 in Circle_fit()) More... | |
constexpr uint32_t | maxNumberOfConcurrentFits = 32 * 1024 |
constexpr uint32_t | stride = maxNumberOfConcurrentFits |
using riemannFit::Array2xNd = typedef Eigen::Array<double, 2, N> |
Definition at line 31 of file FitUtils.h.
using riemannFit::ArrayNd = typedef Eigen::Array<double, N, N> |
Definition at line 23 of file FitUtils.h.
typedef Eigen::Map< Matrix3x4d, 0, Eigen::Stride< 3 *stride, stride > > riemannFit::Map3x4d |
Definition at line 24 of file HelixFit.h.
using riemannFit::Map3xNd = typedef Eigen::Map<Matrix3xNd<N>, 0, Eigen::Stride<3 * stride, stride> > |
Definition at line 32 of file HelixFit.h.
typedef Eigen::Map< Vector4d, 0, Eigen::InnerStride< stride > > riemannFit::Map4d |
Definition at line 39 of file HelixFit.h.
typedef Eigen::Map< Matrix6x4f, 0, Eigen::Stride< 6 *stride, stride > > riemannFit::Map6x4f |
Definition at line 26 of file HelixFit.h.
using riemannFit::Map6xNf = typedef Eigen::Map<Matrix6xNf<N>, 0, Eigen::Stride<6 * stride, stride> > |
Definition at line 37 of file HelixFit.h.
typedef Eigen::Matrix2d riemannFit::Matrix2d |
Definition at line 14 of file FitResult.h.
using riemannFit::Matrix2Nd = typedef Eigen::Matrix<double, 2 * N, 2 * N> |
Definition at line 25 of file FitUtils.h.
typedef Eigen::Matrix< double, 2, 3 > riemannFit::Matrix2x3d |
Definition at line 49 of file FitUtils.h.
using riemannFit::Matrix2xNd = typedef Eigen::Matrix<double, 2, N> |
Definition at line 29 of file FitUtils.h.
typedef Eigen::Matrix3d riemannFit::Matrix3d |
Definition at line 15 of file FitResult.h.
typedef Eigen::Matrix3f riemannFit::Matrix3f |
Definition at line 51 of file FitUtils.h.
using riemannFit::Matrix3Nd = typedef Eigen::Matrix<double, 3 * N, 3 * N> |
Definition at line 27 of file FitUtils.h.
typedef Eigen::Matrix< double, 3, 4 > riemannFit::Matrix3x4d |
Definition at line 23 of file HelixFit.h.
using riemannFit::Matrix3xNd = typedef Eigen::Matrix<double, 3, N> |
Definition at line 30 of file HelixFit.h.
typedef Eigen::Matrix4d riemannFit::Matrix4d |
Definition at line 16 of file FitResult.h.
typedef Eigen::Matrix< double, 5, 5 > riemannFit::Matrix5d |
Definition at line 17 of file FitResult.h.
typedef Eigen::Matrix< double, 6, 6 > riemannFit::Matrix6d |
Definition at line 18 of file FitResult.h.
typedef Eigen::Matrix< float, 6, 4 > riemannFit::Matrix6x4f |
Definition at line 25 of file HelixFit.h.
using riemannFit::Matrix6xNf = typedef Eigen::Matrix<float, 6, N> |
Definition at line 35 of file HelixFit.h.
using riemannFit::MatrixNd = typedef Eigen::Matrix<double, N, N> |
Definition at line 19 of file FitUtils.h.
using riemannFit::MatrixNplusONEd = typedef Eigen::Matrix<double, N + 1, N + 1> |
Definition at line 21 of file FitUtils.h.
using riemannFit::MatrixNx3d = typedef Eigen::Matrix<double, N, 3> |
Definition at line 33 of file FitUtils.h.
using riemannFit::MatrixNx5d = typedef Eigen::Matrix<double, N, 5> |
Definition at line 35 of file FitUtils.h.
typedef Eigen::MatrixXd riemannFit::MatrixXd |
Definition at line 17 of file FitUtils.h.
using riemannFit::RowVector2Nd = typedef Eigen::Matrix<double, 1, 2 * N> |
Definition at line 47 of file FitUtils.h.
using riemannFit::RowVectorNd = typedef Eigen::Matrix<double, 1, 1, N> |
Definition at line 45 of file FitUtils.h.
typedef Eigen::Vector2d riemannFit::Vector2d |
Definition at line 10 of file FitResult.h.
using riemannFit::Vector2Nd = typedef Eigen::Matrix<double, 2 * N, 1> |
Definition at line 41 of file FitUtils.h.
typedef Eigen::Vector3d riemannFit::Vector3d |
Definition at line 11 of file FitResult.h.
typedef Eigen::Vector3f riemannFit::Vector3f |
Definition at line 52 of file FitUtils.h.
using riemannFit::Vector3Nd = typedef Eigen::Matrix<double, 3 * N, 1> |
Definition at line 43 of file FitUtils.h.
typedef Eigen::Vector4d riemannFit::Vector4d |
Definition at line 12 of file FitResult.h.
typedef Eigen::Vector4f riemannFit::Vector4f |
Definition at line 53 of file FitUtils.h.
typedef Eigen::Matrix< double, 5, 1 > riemannFit::Vector5d |
Definition at line 13 of file FitResult.h.
typedef Eigen::Matrix< double, 6, 1 > riemannFit::Vector6f |
Definition at line 54 of file FitUtils.h.
using riemannFit::VectorNd = typedef Eigen::Matrix<double, N, 1> |
Definition at line 37 of file FitUtils.h.
using riemannFit::VectorNplusONEd = typedef Eigen::Matrix<double, N + 1, 1> |
Definition at line 39 of file FitUtils.h.
typedef Eigen::VectorXd riemannFit::VectorXd |
Definition at line 16 of file FitUtils.h.
|
inline |
Find particle q considering the sign of cross product between particles velocity (estimated by the first 2 hits) and the vector radius between the first hit and the center of the fitted circle.
p2D | 2D points in transverse plane. |
par_uvr | result of the circle fit in this form: (X0,Y0,R). |
Definition at line 291 of file RiemannFit.h.
Referenced by circleFit().
|
inline |
Fit a generic number of 2D points with a circle using Riemann-Chernov algorithm. Covariance matrix of fitted parameter is optionally computed. Multiple scattering (currently only in barrel layer) is optionally handled.
hits2D | 2D points to be fitted. |
hits_cov2D | covariance matrix of 2D points. |
fast_fit | pre-fit result in this form: (X0,Y0,R,tan(theta)). (tan(theta) is not used). |
bField | magnetic field |
error | flag for error computation. |
scattering | flag for multiple scattering |
Definition at line 458 of file RiemannFit.h.
References a, funct::abs(), b, Calorimetry_cff::bField, charge(), riemannFit::CircleFit::chi2, nano_mu_local_reco_cff::chi2, ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), riemannFit::CircleFit::cov, cov_carttorad_prefit(), cov_radtocart(), dumpMFGeometry_cfg::delta, epsilon, relativeConstraints::error, ALPAKA_ACCELERATOR_NAMESPACE::brokenline::fast_fit, mps_fire::i, l1tstage2_dqm_sourceclient-live_cfg::invert, dqmiolumiharvest::j, dqmdumpme::k, MainPageGenerator::l, CaloTowersParam_cfi::mc, min_eigen3D(), min_eigen3D_fast(), N, dqmiodumpmetadata::n, riemannFit::CircleFit::par, printIt(), riemannFit::CircleFit::qCharge, scatter_cov_rad(), Validation_hcalonly_cfi::sign, sqr(), mathSSE::sqrt(), submitPVValidationJobs::t, FrontierCondition_GT_autoExpress_cfi::t0, RandomServiceHelper::t1, createJobs::tmp, parallelization::uint, mps_merge::weight, and weightCircle().
Referenced by helixFit().
|
inline |
Compute the Radiation length in the uniform hypothesis
The Pixel detector, barrel and forward, is considered as an homogeneous cylinder of material, whose radiation lengths has been derived from the TDR plot that shows that 16cm correspond to 0.06 radiation lengths. Therefore one radiation length corresponds to 16cm/0.06 =~ 267 cm. All radiation lengths are computed using this unique number, in both regions, barrel and endcap.
NB: no angle corrections nor projections are computed inside this routine. It is therefore the responsibility of the caller to supply the proper lengths in input. These lengths are the path traveled by the particle along its trajectory, namely the so called S of the helix in 3D space.
length_values | vector of incremental distances that will be translated into radiation length equivalent. Each radiation length i is computed incrementally with respect to the previous length i-1. The first length has no reference point (i.e. it has the dca). |
Definition at line 34 of file RiemannFit.h.
References funct::abs(), ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), dqmiolumiharvest::j, dqmiodumpmetadata::n, and parallelization::uint.
Referenced by scatter_cov_rad(), and scatterCovLine().
|
inline |
Transform covariance matrix from Cartesian coordinates (only transverse plane component) to radial coordinates (both radial and tangential component but only diagonal terms, correlation between different point are not managed).
p2D | 2D points in transverse plane. |
cov_cart | covariance matrix in Cartesian coordinates. |
< in case you have (0,0) to avoid dividing by 0 radius
Definition at line 211 of file RiemannFit.h.
References ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), MillePedeFileConverter_cfg::e, mps_fire::i, N, dqmiodumpmetadata::n, sqr(), and parallelization::uint.
|
inline |
Transform covariance matrix from Cartesian coordinates (only transverse plane component) to coordinates system orthogonal to the pre-fitted circle in each point. Further information in attached documentation.
p2D | 2D points in transverse plane. |
cov_cart | covariance matrix in Cartesian coordinates. |
fast_fit | fast_fit Vector4d result of the previous pre-fit structured in this form:(X0, Y0, R, tan(theta))). |
< in case you have (0,0) to avoid dividing by 0 radius
Definition at line 242 of file RiemannFit.h.
References a, b, ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), cross2D(), MillePedeFileConverter_cfg::e, ALPAKA_ACCELERATOR_NAMESPACE::brokenline::fast_fit, mps_fire::i, N, dqmiodumpmetadata::n, sqr(), parallelization::uint, and testProducerWithPsetDescEmpty_cfi::y2.
Referenced by circleFit().
|
inline |
Transform covariance matrix from radial (only tangential component) to Cartesian coordinates (only transverse plane component).
p2D | 2D points in the transverse plane. |
cov_rad | covariance matrix in radial coordinate. |
Definition at line 174 of file RiemannFit.h.
References ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), mps_fire::i, dqmiolumiharvest::j, N, dqmiodumpmetadata::n, printIt(), and parallelization::uint.
Referenced by circleFit().
|
inline |
Compute cross product of two 2D vector (assuming z component 0), returning z component of the result.
a | first 2D vector in the product. |
b | second 2D vector in the product. |
Definition at line 79 of file FitUtils.h.
Referenced by cov_carttorad_prefit(), brokenline::fastFit(), fastFit(), lineFit(), brokenline::prepareBrokenLineData(), and scatter_cov_rad().
|
inline |
A very fast helix fit: it fits a circle by three points (first, middle and last point) and a line by two points (first and last).
hits | points to be fitted |
This fast fit is used as pre-fit which is needed for:
< in case b.x is 0 (2 hits with same x)
Definition at line 378 of file RiemannFit.h.
References funct::abs(), b2, nano_mu_digi_cff::bx, ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), cross2D(), ALPAKA_ACCELERATOR_NAMESPACE::brokenline::dVec, PVValHelper::dz, ALPAKA_ACCELERATOR_NAMESPACE::brokenline::eVec, HLT_2024v12_cff::flip, hfClusterShapes_cfi::hits, N, dqmiodumpmetadata::n, printIt(), mps_fire::result, sqr(), and mathSSE::sqrt().
Referenced by for(), and helixFit().
|
inline |
Transform circle parameter from (X0,Y0,R) to (phi,Tip,q/R) and consequently covariance matrix.
circle_uvr | parameter (X0,Y0,R), covariance matrix to be transformed and particle charge. |
Definition at line 196 of file FitUtils.h.
References riemannFit::CircleFit::cov, riemannFit::CircleFit::par, riemannFit::CircleFit::qCharge, sqr(), and mathSSE::sqrt().
|
inline |
Helix fit by three step: -fast pre-fit (see Fast_fit() for further info);
-circle fit of hits projected in the transverse plane by Riemann-Chernov algorithm (see Circle_fit() for further info);
-line fit of hits projected on cylinder surface by orthogonal distance regression (see Line_fit for further info).
Points must be passed ordered (from inner to outer layer).
hits | Matrix3xNd hits coordinates in this form: |x0|x1|x2|...|xn| |y0|y1|y2|...|yn| |z0|z1|z2|...|zn| |
hits_cov | Matrix3Nd covariance matrix in this form (()->cov()): |(x0,x0)|(x1,x0)|(x2,x0)|.|(y0,x0)|(y1,x0)|(y2,x0)|.|(z0,x0)|(z1,x0)|(z2,x0)| |(x0,x1)|(x1,x1)|(x2,x1)|.|(y0,x1)|(y1,x1)|(y2,x1)|.|(z0,x1)|(z1,x1)|(z2,x1)| |(x0,x2)|(x1,x2)|(x2,x2)|.|(y0,x2)|(y1,x2)|(y2,x2)|.|(z0,x2)|(z1,x2)|(z2,x2)| . . . . . . . . . . . |(x0,y0)|(x1,y0)|(x2,y0)|.|(y0,y0)|(y1,y0)|(y2,x0)|.|(z0,y0)|(z1,y0)|(z2,y0)| |(x0,y1)|(x1,y1)|(x2,y1)|.|(y0,y1)|(y1,y1)|(y2,x1)|.|(z0,y1)|(z1,y1)|(z2,y1)| |(x0,y2)|(x1,y2)|(x2,y2)|.|(y0,y2)|(y1,y2)|(y2,x2)|.|(z0,y2)|(z1,y2)|(z2,y2)| . . . . . . . . . . . |(x0,z0)|(x1,z0)|(x2,z0)|.|(y0,z0)|(y1,z0)|(y2,z0)|.|(z0,z0)|(z1,z0)|(z2,z0)| |(x0,z1)|(x1,z1)|(x2,z1)|.|(y0,z1)|(y1,z1)|(y2,z1)|.|(z0,z1)|(z1,z1)|(z2,z1)| |(x0,z2)|(x1,z2)|(x2,z2)|.|(y0,z2)|(y1,z2)|(y2,z2)|.|(z0,z2)|(z1,z2)|(z2,z2)| |
bField | magnetic field in the center of the detector in Gev/cm/c unit, in order to perform pt calculation. |
error | flag for error computation. |
scattering | flag for multiple scattering treatment. (see Circle_fit() documentation for further info). |
Definition at line 978 of file RiemannFit.h.
References Calorimetry_cff::bField, riemannFit::CircleFit::chi2, riemannFit::HelixFit::chi2_circle, riemannFit::HelixFit::chi2_line, circleFit(), ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), riemannFit::CircleFit::cov, riemannFit::HelixFit::cov, relativeConstraints::error, ALPAKA_ACCELERATOR_NAMESPACE::brokenline::fast_fit, fastFit(), hfClusterShapes_cfi::hits, mps_splice::line, lineFit(), loadCovariance2D(), N, dqmiodumpmetadata::n, riemannFit::CircleFit::par, riemannFit::HelixFit::par, par_uvrtopak(), riemannFit::CircleFit::qCharge, riemannFit::HelixFit::qCharge, and parallelization::uint.
Referenced by PixelNtupletsFitter::run().
|
inline |
Perform an ordinary least square fit in the s-z plane to compute the parameters cotTheta and Zip.
The fit is performed in the rotated S3D-Z' plane, following the formalism of Frodesen, Chapter 10, p. 259.
The system has been rotated to both try to use the combined errors in s-z along Z', as errors in the Y direction and to avoid the patological case of degenerate lines with angular coefficient m = +/- inf.
The rotation is using the information on the theta angle computed in the fast fit. The rotation is such that the S3D axis will be the X-direction, while the rotated Z-axis will be the Y-direction. This pretty much follows what is done in the same fit in the Broken Line approach.
Definition at line 788 of file RiemannFit.h.
References Calorimetry_cff::bField, nano_mu_local_reco_cff::chi2, ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), funct::cos(), riemannFit::CircleFit::cov, cross(), cross2D(), alignCSCRings::d_x, alignCSCRings::d_y, dot(), relativeConstraints::error, ALPAKA_ACCELERATOR_NAMESPACE::brokenline::fast_fit, hfClusterShapes_cfi::hits, mps_fire::i, l1tstage2_dqm_sourceclient-live_cfg::invert, mps_splice::line, M_PI, N, dqmiodumpmetadata::n, riemannFit::CircleFit::par, printIt(), riemannFit::CircleFit::qCharge, makeMuonMisalignmentScenario::rot, scatterCovLine(), funct::sin(), mkfit::Const::sol, sqr(), theta(), createJobs::tmp, and parallelization::uint.
Referenced by helixFit().
__host__ __device__ void riemannFit::loadCovariance | ( | M6xNf const & | ge, |
M3xNd & | hits_cov | ||
) |
Definition at line 120 of file FitUtils.h.
References ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), mps_fire::i, dqmiolumiharvest::j, and MainPageGenerator::l.
__host__ __device__ void riemannFit::loadCovariance2D | ( | M6xNf const & | ge, |
M2Nd & | hits_cov | ||
) |
load error in CMSSW format to our formalism
Definition at line 88 of file FitUtils.h.
References ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), mps_fire::i, dqmiolumiharvest::j, and MainPageGenerator::l.
Referenced by helixFit().
|
inline |
2D version of min_eigen3D().
aMat | the Matrix you want to know eigenvector and eigenvalue. |
chi2 | the double were the chi2-related quantity will be stored |
Definition at line 356 of file RiemannFit.h.
References nano_mu_local_reco_cff::chi2.
|
inline |
Compute the eigenvector associated to the minimum eigenvalue.
A | the Matrix you want to know eigenvector and eigenvalue. |
chi2 | the double were the chi2-related quantity will be stored. |
The minimus eigenvalue is related to chi2. We exploit the fact that the matrix is symmetrical and small (2x2 for line fit and 3x3 for circle fit), so the SelfAdjointEigenSolver from Eigen library is used, with the computedDirect method (available only for 2x2 and 3x3 Matrix) wich computes eigendecomposition of given matrix using a fast closed-form algorithm. For this optimization the matrix type must be known at compiling time.
Definition at line 313 of file RiemannFit.h.
References A, and nano_mu_local_reco_cff::chi2.
Referenced by circleFit().
|
inline |
A faster version of min_eigen3D() where double precision is not needed.
A | the Matrix you want to know eigenvector and eigenvalue. |
chi2 | the double were the chi2-related quantity will be stored |
Definition at line 338 of file RiemannFit.h.
References A.
Referenced by circleFit().
|
inline |
Transform circle parameter from (X0,Y0,R) to (phi,Tip,p_t) and consequently covariance matrix.
circle_uvr | parameter (X0,Y0,R), covariance matrix to be transformed and particle charge. |
B | magnetic field in Gev/cm/c unit. |
error | flag for errors computation. |
Definition at line 173 of file FitUtils.h.
References B, riemannFit::CircleFit::cov, relativeConstraints::error, riemannFit::CircleFit::par, riemannFit::CircleFit::qCharge, sqr(), and mathSSE::sqrt().
Referenced by helixFit().
__host__ __device__ void riemannFit::printIt | ( | C * | m, |
const char * | prefix = "" |
||
) |
Definition at line 53 of file FitUtils.h.
References HltBtagPostValidation_cff::c, visualization-live-secondInstance_cfg::m, hcallasereventfilter2012_cfi::prefix, and parallelization::uint.
Referenced by circleFit(), cov_radtocart(), fastFit(), lineFit(), scatter_cov_rad(), and scatterCovLine().
constexpr void riemannFit::rolling_fits | ( | F && | f | ) |
Definition at line 42 of file HelixFit.h.
References ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), PixelRegions::End, and f.
|
inline |
Compute the covariance matrix (in radial coordinates) of points in the transverse plane due to multiple Coulomb scattering.
p2D | 2D points in the transverse plane. |
fast_fit | fast_fit Vector4d result of the previous pre-fit structured in this form:(X0, Y0, R, Tan(Theta))). |
B | magnetic field use to compute p |
Only the tangential component is computed (the radial one is negligible).
Definition at line 126 of file RiemannFit.h.
References funct::abs(), B, computeRadLenUniformMaterial(), ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), cross(), cross2D(), dot(), ALPAKA_ACCELERATOR_NAMESPACE::brokenline::fast_fit, mps_fire::i, dqmdumpme::k, MainPageGenerator::l, M_PI, SiStripPI::min, N, dqmiodumpmetadata::n, printIt(), funct::sin(), sqr(), mathSSE::sqrt(), theta(), and parallelization::uint.
Referenced by circleFit().
|
inline |
Compute the covariance matrix along cartesian S-Z of points due to multiple Coulomb scattering to be used in the line_fit, for the barrel and forward cases. The input covariance matrix is in the variables s-z, original and unrotated. The multiple scattering component is computed in the usual linear approximation, using the 3D path which is computed as the squared root of the squared sum of the s and z components passed in. Internally a rotation by theta is performed and the covariance matrix returned is the one in the direction orthogonal to the rotated S3D axis, i.e. along the rotated Z axis. The choice of the rotation is not arbitrary, but derived from the fact that putting the horizontal axis along the S3D direction allows the usage of the ordinary least squared fitting techiques with the trivial parametrization y = mx + q, avoiding the patological case with m = +/- inf, that would correspond to the case at eta = 0.
Definition at line 65 of file RiemannFit.h.
References funct::abs(), Calorimetry_cff::bField, computeRadLenUniformMaterial(), ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), ALPAKA_ACCELERATOR_NAMESPACE::brokenline::fast_fit, mps_fire::i, dqmdumpme::k, MainPageGenerator::l, SiStripPI::min, N, dqmiodumpmetadata::n, printIt(), runTheMatrix::ret, sqr(), createJobs::tmp, and parallelization::uint.
Referenced by lineFit().
raise to square.
Definition at line 67 of file FitUtils.h.
References a.
Referenced by brokenline::circleFit(), circleFit(), cov_carttorad(), cov_carttorad_prefit(), fastFit(), fromCircleToPerigee(), brokenline::helixFit(), brokenline::lineFit(), lineFit(), brokenline::matrixC_u(), brokenline::multScatt(), par_uvrtopak(), brokenline::rotationMatrix(), scatter_cov_rad(), scatterCovLine(), and brokenline::translateKarimaki().
|
inline |
Definition at line 60 of file FitUtils.h.
References findAndChange::op, and mathSSE::sqrt().
Referenced by L2TauNNProducerAlpaka::impactParameter(), L2TauNNProducer::impactParameter(), SeedProducerFromSoAT< TrackerTraits >::produce(), PixelTrackProducerFromSoAAlpaka< TrackerTraits >::produce(), and PixelTrackProducerFromSoAT< TrackerTraits >::produce().
|
inline |
|
inline |
Compute the points' weights' vector for the circle fit when multiple scattering is managed. Further information in attached documentation.
cov_rad_inv | covariance matrix inverse in radial coordinated (or, beter, pre-fitted circle's orthogonal system). |
Definition at line 278 of file RiemannFit.h.
Referenced by circleFit().
constexpr double riemannFit::epsilon = 1.e-4 |
used in numerical derivative (J2 in Circle_fit())
Definition at line 14 of file FitUtils.h.
Referenced by circleFit().
constexpr uint32_t riemannFit::maxNumberOfConcurrentFits = 32 * 1024 |
Definition at line 21 of file HelixFit.h.
Referenced by ALPAKA_ACCELERATOR_NAMESPACE::Kernel_BLFastFit< N, TrackerTraits >::operator()(), ALPAKA_ACCELERATOR_NAMESPACE::Kernel_FastFit< N, TrackerTraits >::operator()(), ALPAKA_ACCELERATOR_NAMESPACE::Kernel_CircleFit< N, TrackerTraits >::operator()(), ALPAKA_ACCELERATOR_NAMESPACE::Kernel_LineFit< N, TrackerTraits >::operator()(), and ALPAKA_ACCELERATOR_NAMESPACE::Kernel_BLFit< N, TrackerTraits >::operator()().
constexpr uint32_t riemannFit::stride = maxNumberOfConcurrentFits |
Definition at line 22 of file HelixFit.h.
Referenced by caHitNtupletGeneratorKernels::__attribute__(), HcalDigisProducerGPU::acquire(), cms::rocmtest::add_vectors_d(), cms::rocmtest::add_vectors_f(), PhysicsPerformanceDBWriterFromFile_WPandPayload::beginJob(), PhysicsPerformanceDBWriterFromFile_WPandPayload_IOV::beginJob(), ALPAKA_ACCELERATOR_NAMESPACE::CAHitNtupletGeneratorKernels< TTTraits >::buildDoublets(), cms::soa::SoAParametersImpl< SoAColumnType::eigen, T >::checkAlignment(), calo::multifit::compute_decomposition_unrolled(), cms::alpakatools::detail::UniformGroupsAlong< TAcc, Dim, typename >::const_iterator::const_iterator(), cms::alpakatools::detail::IndependentGroupsAlong< TAcc, Dim, typename >::const_iterator::const_iterator(), npstat::ArrayND< Numeric >::contract(), npstat::ArrayND< Numeric >::contractLoop(), npstat::ArrayND< Numeric >::convertToLastDimCdfLoop(), npstat::ArrayND< Numeric >::functorFillLoop(), ALPAKA_ACCELERATOR_NAMESPACE::hcalFastCluster_exotic(), ALPAKA_ACCELERATOR_NAMESPACE::hcalFastCluster_multiSeedIterative(), ALPAKA_ACCELERATOR_NAMESPACE::hcalFastCluster_multiSeedParallel(), npstat::ArrayND< Numeric >::jointSliceLoop(), ALPAKA_ACCELERATOR_NAMESPACE::CAHitNtupletGeneratorKernels< TTTraits >::launchKernels(), npstat::ArrayND< Numeric >::linearFillLoop(), npstat::ArrayND< Numeric >::makeUnit(), npstat::ArrayND< Numeric >::processSubrangeLoop(), npstat::ArrayND< Numeric >::projectInnerLoop(), npstat::ArrayND< Numeric >::projectInnerLoop2(), npstat::ArrayND< Numeric >::projectLoop(), npstat::ArrayND< Numeric >::projectLoop2(), npstat::ArrayND< Numeric >::scaleBySliceInnerLoop(), npstat::ArrayND< Numeric >::scaleBySliceLoop(), l1tVertexFinder::VertexFinder::strided_iota(), npstat::ArrayND< Numeric >::sumBelowLoop(), and ALPAKA_ACCELERATOR_NAMESPACE::testESAlgoAsync().