CLHEP VERSION Reference Documentation
   
CLHEP Home Page     CLHEP Documentation     CLHEP Bug Reports

LogisticFunction.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 // $Id:
5 #include <assert.h>
6 #define MAXRANGE 1000
7 
8 namespace Genfun {
9 FUNCTION_OBJECT_IMP(LogisticFunction)
10 
12  _x0("X0", 0.0,0.0,1.0),
13  _a("A",2.0,1.0, 4.0)
14 {}
15 
17 }
18 
20 AbsFunction(right),
21 _x0(right._x0),
22 _a(right._a)
23 {
24 }
25 
26 double LogisticFunction::operator() (double x) const {
27  int i = (int) (x+0.5), &back = i, end=back+1;
28 
29  if (i<0 || i>MAXRANGE) {
30  return 0;
31  }
32  else {
33  // Is the vector of values stale?
34  if (__a!=_a.getValue() || __x0!=_x0.getValue()) {
35 
36  // Empty the vector
37  fx.erase(fx.begin(),fx.end());
38 
39  // And update the cache.
40  __a = _a.getValue();
41  __x0 = _x0.getValue();
42 
43  }
44 
45 
46  if (fx.empty()) fx.push_back(__x0);
47 
48  while (fx.size()<size_t(end)) {
49  double v = fx.back();
50  fx.push_back(__a*v*(1.0-v));
51  }
52 
53  return fx[i];
54  }
55 
56 
57 }
58 
60  return _x0;
61 }
62 
64  return _a;
65 }
66 
68  return _x0;
69 }
70 
71 const Parameter & LogisticFunction::a() const {
72  return _a;
73 }
74 
75 
76 } // namespace Genfun