Port of CERNLIB routines vvidis/vviden (G116) to calculate higher quality Vavilov density and distribution functions
Definition at line 24 of file VVIObj.h.
VVIObj::VVIObj |
( |
double |
kappa = 0.01 , |
|
|
double |
beta2 = 1. , |
|
|
int |
mode = 0 |
|
) |
| |
Constructor.
Constructor Set Vavilov parameters kappa and beta2 and define whether to calculate density fcn or distribution fcn
- Parameters
-
kappa | - (input) Vavilov kappa parameter [0.01 (Landau-like) < kappa < 10. (Gaussian-like)] |
beta2 | - (input) Vavilov beta2 parameter (square of particle speed in v/c units) |
mode | - (input) set to 0 to calculate the density function and to 1 to calculate the distribution function |
Definition at line 42 of file VVIObj.cc.
References a_, funct::abs(), b_, alignmentValidation::c1, funct::cos(), ztail::d, d1, VVIObjDetails::dzero(), MillePedeFileConverter_cfg::e, JetChargeProducer_cfi::exp, VVIObjDetails::expint(), sistripvvi::VVIObjDetails::f1(), sistripvvi::VVIObjDetails::f2(), dqmdumpme::k, hgcalLayerClusters_cfi::kappa, MainPageGenerator::l, dqm-mbProfile::log, mode_, dqmiodumpmetadata::n, omega_, submitPVResolutionJobs::q, funct::sin(), VVIObjDetails::sincosint(), t0_, t1_, t_, x, x0_, and testProducerWithPsetDescEmpty_cfi::x1.
43 const double xp[9] = {9.29, 2.47, .89, .36, .15, .07, .03, .02, 0.0};
44 const double xq[7] = {.012, .03, .08, .26, .87, 3.83, 11.0};
46 double q, u,
x,
c1, c2, c3, c4,
d1, h4, h5, h6, q2,
x1,
d, ll, ul, xf1, xf2, rv;
60 h_[4] = 1. - beta2 * 0.42278433999999998 + 7.6 /
kappa;
63 h4 = -7.6 /
kappa - (beta2 * .57721566 + 1);
70 for (lp = 0; lp < 9; ++lp) {
75 for (lq = 0; lq < 7; ++lq) {
80 auto f2 = [h_](
double x) {
88 h_[0] =
kappa * (beta2 * .57721566 + 2.) + 9.9166128600000008;
92 h_[1] = beta2 *
kappa;
94 h_[3] =
omega_ * 1.5707963250000001;
95 auto f1 = [h_](
double x) {
return h_[0] + h_[1] *
std::log(h_[2] *
x) - h_[3] *
x; };
98 d =
exp(
kappa * (beta2 * (.57721566 - h5) + 1.)) * .31830988654751274;
105 for (
k = 1;
k <
n; ++
k) {
113 xf1 =
kappa * (beta2 *
c1 - c4) -
x * c2;
123 a_[
n - 1] += q2 *
a_[
l - 1];
Sin< T >::type sin(const T &t)
int dzero(double a, double b, double &x0, double &rv, double eps, int mxf, F func)
Private version of the exponential integral.
Cos< T >::type cos(const T &t)
double f1(double x, double const *h_)
Private version of the exponential integral.
Abs< T >::type abs(const T &t)
double f2(double x, double const *h_)
void sincosint(double x, double &sint, double &cint)
const int mode_
returns the limits on the non-zero (mode=0) or normalized region (mode=1)
static constexpr float d1
double expint(double x)
Private version of the sine integral.
double VVIObj::fcn |
( |
double |
x | ) |
const |
Vavilov function method Returns density fcn (mode=0) or distribution fcn (mode=1)
- Parameters
-
x | - (input) Argument of function [typically defined as (Q-mpv)/sigma] |
Definition at line 137 of file VVIObj.cc.
References a0, testProducerWithPsetDescEmpty_cfi::a2, a_, b0, b1, b2, b_, funct::cos(), f, dqmdumpme::k, mode_, dqmiodumpmetadata::n, omega_, funct::sin(), t0_, t1_, t_, x, x0_, and y.
Referenced by SiPixelTemplateSplit::PixelTempSplit().
140 double f, u,
y,
a0, a1;
148 }
else if (
x <=
t1_) {
150 u =
omega_ *
y - 3.141592653589793;
155 for (
k = 2;
k <= n1; ++
k) {
158 a0 =
a_[
k - 1] + cof * a1 -
a2;
162 for (
k = 2;
k <=
n; ++
k) {
Sin< T >::type sin(const T &t)
Cos< T >::type cos(const T &t)
static constexpr float a0
const int mode_
returns the limits on the non-zero (mode=0) or normalized region (mode=1)
static constexpr float b2
static constexpr float b0
static constexpr float b1