Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
functions
Novosibirsk.cxx
Go to the documentation of this file.
1
12
#ifdef _MSC_VER
13
#include "msdevstudio/MSconfig.h"
14
#endif
15
16
#include "
Novosibirsk.h
"
17
18
#include "
FunctionHelper.h
"
19
20
#include <cmath>
21
#include <cassert>
22
23
using
std::exp;
24
using
std::vector;
25
26
using namespace
hippodraw;
27
28
Novosibirsk::Novosibirsk
( )
29
{
30
initialize
();
31
}
32
33
Novosibirsk::Novosibirsk
(
double
n,
double
m,
double
s,
double
t )
34
{
35
initialize
();
36
37
m_parms
[
norm
] = n;
38
m_parms
[
mean
] = m;
39
m_parms
[
sigma
] = s;
40
m_parms
[
tail
] = t;
41
}
42
43
void
Novosibirsk::initialize
()
44
{
45
m_name
=
"Novosibirsk"
;
46
47
m_parm_names
.push_back (
"Norm"
);
48
m_parm_names
.push_back (
"Mean"
);
49
m_parm_names
.push_back (
"Sigma"
);
50
m_parm_names
.push_back (
"Tail"
);
51
52
resize
();
53
}
54
55
FunctionBase
*
Novosibirsk::clone
()
const
56
{
57
return
new
Novosibirsk
( *
this
);
58
}
59
60
double
Novosibirsk::operator ()
(
double
x )
const
61
{
62
//---- If tail is small then Gauss
63
64
double
qa=0,qb=0,qc=0,qx=0,qy=0;
65
double
result=0;
66
67
if
(fabs(
m_parms
[
tail
]) < 1.e-7)
68
qc = 0.5*pow((( x -
m_parms
[
mean
])/
m_parms
[
sigma
]),2);
69
else
{
70
qa =
m_parms
[
tail
]*sqrt(log(4.));
71
qb = sinh(qa)/qa;
72
qx = ( x -
m_parms
[
mean
])/
m_parms
[sigma]*qb;
73
qy = 1.+
m_parms
[
tail
]*qx;
74
75
//---- Cutting curve from right side
76
77
if
( qy > 1.E-7)
78
qc = 0.5*(pow((log(qy)/
m_parms
[tail]),2) +
m_parms
[
tail
]*
m_parms
[
tail
]);
79
else
80
qc = 15.;
81
}
82
//----
83
84
result =
m_parms
[
norm
] * exp(-qc);
85
86
return
result;
87
}
88
89
void
90
Novosibirsk::
91
initialParameters
(
const
FunctionHelper
* helper )
92
{
93
double
min_x = helper->
minCoord
();
94
double
max_x = helper->
maxCoord
();
95
int
size
= helper->
size
();
96
double
total = helper->
getTotal
();
97
98
m_parms
[
norm
] = total * ( max_x - min_x ) / size;
99
m_parms
[
mean
] = helper->
meanCoord
();
100
m_parms[
sigma
] = helper->
stdCoord
();
101
m_parms[
tail
] = 0.;
102
}
103
104
double
105
Novosibirsk::
106
derivByParm
(
int
,
double
)
const
107
{
108
assert (
false
);
109
return
0.;
110
}
111
112
bool
113
Novosibirsk::
114
hasDerivatives
()
const
115
{
116
return
false
;
117
}
Generated for HippoDraw Class Library by