qupid 0.2
Quasi-Signal Generation Model for Pixelized Detector
Loading...
Searching...
No Matches
QPMath.hpp
1#ifndef __QPMATH__
2#define __QPMATH__ 1
3
4#include "QPVector.hpp"
5#include "QPMatrix.hpp"
6
10namespace QPMath{
11
12 const double InvPi = 0.3183098861837906715377675267450287240689192;
13 const double InvSqrtPi = 0.5641895835477562869480794515607725858440506;
14 const double InvSqrt2Pi = 0.3989422804014326779399460599343818684758586;
15 const double Degree = 0.01745329251994329576923690768488612713442871;
16 const double Pi = 3.1415926535897932384626433832795028841971693;
17
21 namespace Gaussian{
29 double Simple1D(double x,
30 double integral =1.,
31 double mean =0.,
32 double sigma =1.);
43 double Simple2D(double x,
44 double y,
45 double integral =1.,
46 double meanx =0,
47 double meany =0,
48 double sigma =1.);
61 double UniAxis2D(double x,
62 double y,
63 double integral =1.,
64 double meanx =0.,
65 double meany =0.,
66 double sigmax =1.,
67 double sigmay =1.);
82 double RotAxis2D(double x,
83 double y,
84 double integral = 1.,
85 double meanx = 0.,
86 double meany = 0.,
87 double sigmax = 1.,
88 double sigmay = 1.,
89 double rotation = 0.);
110 double Assymetry2D(double x,
111 double y,
112 double integral = 1.,
113 double meanx = 0.,
114 double meany = 0.,
115 double sigmax = 1.,
116 double sigmay = 1.,
117 double rotation = 0.,
118 double length = 0.,
119 double tilt = 0.,
120 double dispersion = 1.);
130 double MatrixForm2D(QPVector& x, QPVector& x0, QPMatrix& S);
131 };
132
134 namespace WoodSaxon{
145 double Simple1D(double x,
146 double maximum = 1.0,
147 double mean = 0.0,
148 double a = 1.0,
149 double radius = 1.0);
161 double Simple2D(double x,
162 double y,
163 double maximum = 1.0,
164 double meanx = 0.0,
165 double meany = 0.0,
166 double a = 1.0,
167 double radius = 1.0);
184 double UniAxis2D(double x,
185 double y,
186 double maximum = 1.0,
187 double meanx = 0.0,
188 double meany = 0.0,
189 double ax = 1.0,
190 double ay = 1.0,
191 double radiusX = 1.0,
192 double radiusY = 1.0); //Non-Isometric but same with axis XY
207 double RotAxis2D(double x,
208 double y,
209 double maximum = 1.0,
210 double meanx = 0.0,
211 double meany = 0.0,
212 double ax = 1.0,
213 double ay = 1.0,
214 double radiusX = 1.0,
215 double radiusY = 1.0,
216 double rotation = 0.0); //Non-Isometric but same with axis XY
231 double RotAxis2DUnsync(double x,
232 double y,
233 double maximum = 1.0,
234 double meanx = 0.0,
235 double meany = 0.0,
236 double ax = 1.0,
237 double ay = 1.0,
238 double radiusX = 1.0,
239 double radiusY = 1.0,
240 double rotationA = 0.0,
241 double rotationR = 0.0); //Non-Isometric but same with axis XY
242 };
243
245 namespace GeometryCalc{
255 double EllipseUniAxis(double x, double y, double lx, double ly);
266 double EllipseRotAxis(double x, double y, double lx, double ly, double theta);
277 double Angle(double x, double y, double centx=0., double centy=0.);
278 };
279
283 double Sqrt(const double& x);
288 double Power(const double& x, const double& exponent);
289
293 double Sin(const double& x);
297 double Cos(const double& x);
301 double ATan(const double& x);
312 double ATan2(const double& y, const double& x);
316 double Exp(const double& x);
326 double Gaus(const double& x, const double& mean, const double& sigma, const bool& norm);
327
332 QPMatrix RotationMatrix(double theta);
333
334};
335
336#endif
Dense m×n matrix of double with hand-rolled linear algebra.
Definition QPMatrix.hpp:15
3-component double vector with hand-rolled operations.
Definition QPVector.hpp:13
double MatrixForm2D(QPVector &x, QPVector &x0, QPMatrix &S)
2D Gaussian in covariance-matrix form,
Definition QPMath.cpp:56
double Simple2D(double x, double y, double integral=1., double meanx=0, double meany=0, double sigma=1.)
Isotropic 2D Gaussian .
Definition QPMath.cpp:18
double RotAxis2D(double x, double y, double integral=1., double meanx=0., double meany=0., double sigmax=1., double sigmay=1., double rotation=0.)
Elliptic 2D Gaussian with principal axes rotated by rotation: the offsets are first turned into the e...
Definition QPMath.cpp:41
double Assymetry2D(double x, double y, double integral=1., double meanx=0., double meany=0., double sigmax=1., double sigmay=1., double rotation=0., double length=0., double tilt=0., double dispersion=1.)
Gaussian of an inclined track with depth-dependent widening.
Definition QPMath.cpp:100
double Simple1D(double x, double integral=1., double mean=0., double sigma=1.)
1D Gaussian .
Definition QPMath.cpp:10
double UniAxis2D(double x, double y, double integral=1., double meanx=0., double meany=0., double sigmax=1., double sigmay=1.)
Axis-aligned elliptic 2D Gaussian .
Definition QPMath.cpp:29
double Angle(double x, double y, double centx=0., double centy=0.)
Quadrant-aware angle of the point (x, y) about (centx, centy).
Definition QPMath.cpp:184
double EllipseRotAxis(double x, double y, double lx, double ly, double theta)
Radius of the ellipse with semi-axes rotated by , evaluated in the direction of (x,...
Definition QPMath.cpp:176
double EllipseUniAxis(double x, double y, double lx, double ly)
EllipseRotAxis with : radius of the axis-aligned ellipse with semi-axes in the direction of (x,...
Definition QPMath.cpp:172
double Simple1D(double x, double maximum=1.0, double mean=0.0, double a=1.0, double radius=1.0)
1D Woods-Saxon profile .
Definition QPMath.cpp:134
double Simple2D(double x, double y, double maximum=1.0, double meanx=0.0, double meany=0.0, double a=1.0, double radius=1.0)
Radial 2D Woods-Saxon profile with .
Definition QPMath.cpp:140
double RotAxis2D(double x, double y, double maximum=1.0, double meanx=0.0, double meany=0.0, double ax=1.0, double ay=1.0, double radiusX=1.0, double radiusY=1.0, double rotation=0.0)
Elliptic 2D Woods-Saxon profile with both ellipses rotated by rotation (via GeometryCalc::EllipseRotA...
Definition QPMath.cpp:154
double RotAxis2DUnsync(double x, double y, double maximum=1.0, double meanx=0.0, double meany=0.0, double ax=1.0, double ay=1.0, double radiusX=1.0, double radiusY=1.0, double rotationA=0.0, double rotationR=0.0)
As RotAxis2D, but the diffuseness ellipse and the radius ellipse rotate independently.
Definition QPMath.cpp:163
double UniAxis2D(double x, double y, double maximum=1.0, double meanx=0.0, double meany=0.0, double ax=1.0, double ay=1.0, double radiusX=1.0, double radiusY=1.0)
Elliptic 2D Woods-Saxon profile with axis-aligned axes: where is the distance to the center and bot...
Definition QPMath.cpp:146
Mathematical functions for signal modelling: Gaussian and Woods-Saxon profiles, ellipse geometry,...
Definition QPMath.hpp:10
double Power(const double &x, const double &exponent)
std::pow wrapper.
Definition QPMath.cpp:196
double Exp(const double &x)
std::exp wrapper.
Definition QPMath.cpp:216
double Cos(const double &x)
std::cos wrapper.
Definition QPMath.cpp:204
double Sin(const double &x)
std::sin wrapper.
Definition QPMath.cpp:200
double ATan(const double &x)
std::atan wrapper.
Definition QPMath.cpp:208
double Sqrt(const double &x)
std::sqrt wrapper.
Definition QPMath.cpp:192
double Gaus(const double &x, const double &mean, const double &sigma, const bool &norm)
Gaussian kernel , divided by when norm is true.
Definition QPMath.cpp:220
const double InvSqrtPi
Definition QPMath.hpp:13
double ATan2(const double &y, const double &x)
Quadrant-aware arctangent with swapped argument forwarding.
Definition QPMath.cpp:212
const double InvSqrt2Pi
Definition QPMath.hpp:14
const double Degree
one degree in radians,
Definition QPMath.hpp:15
const double InvPi
Definition QPMath.hpp:12
const double Pi
Definition QPMath.hpp:16
QPMatrix RotationMatrix(double theta)
Counterclockwise 2D rotation matrix.
Definition QPMath.cpp:232