3 #include "CLHEP/GenericFunctions/DoubleParamToArgAdaptor.hh" 13 FunctionComposition DoubleParamToArgAdaptor<F>::operator()(
const AbsFunction &
function)
const 15 return AbsFunction::operator() (
function);
19 DoubleParamToArgAdaptor<F> *DoubleParamToArgAdaptor<F>::clone ()
const {
20 return (DoubleParamToArgAdaptor<F> *) _clone();
24 AbsFunction *DoubleParamToArgAdaptor<F>::_clone ()
const {
25 return new DoubleParamToArgAdaptor<F>(*this);
31 DoubleParamToArgAdaptor<F>::DoubleParamToArgAdaptor(
const F &
function,
32 DoubleParamToArgAdaptor<F>::ScopedMethodPtr parameterFetchMethod0,
33 DoubleParamToArgAdaptor<F>::ScopedMethodPtr parameterFetchMethod1):
34 _scaleFactor0(
"Scale 0", 1.0, 0, 10),
35 _scaleFactor1(
"Scale 1", 1.0, 0, 10),
36 _function(function.clone()),
37 _parameterFetchMethod0(parameterFetchMethod0),
38 _parameterFetchMethod1(parameterFetchMethod1)
40 _parameterFetchMethod0(*_function).setLowerLimit(-std::numeric_limits<double>::max());
41 _parameterFetchMethod0(*_function).setUpperLimit(+std::numeric_limits<double>::max());
42 _parameterFetchMethod1(*_function).setLowerLimit(-std::numeric_limits<double>::max());
43 _parameterFetchMethod1(*_function).setUpperLimit(+std::numeric_limits<double>::max());
47 DoubleParamToArgAdaptor<F>::~DoubleParamToArgAdaptor() {
52 DoubleParamToArgAdaptor<F>::DoubleParamToArgAdaptor(
const DoubleParamToArgAdaptor & right):
53 _scaleFactor0(right._scaleFactor0),
54 _scaleFactor1(right._scaleFactor1),
55 _parameterFetchMethod0(right._parameterFetchMethod0),
56 _parameterFetchMethod1(right._parameterFetchMethod1),
57 _function(right._function->clone())
59 _parameterFetchMethod0(*_function).setLowerLimit(-std::numeric_limits<double>::max());
60 _parameterFetchMethod0(*_function).setUpperLimit(+std::numeric_limits<double>::max());
61 _parameterFetchMethod1(*_function).setLowerLimit(-std::numeric_limits<double>::max());
62 _parameterFetchMethod1(*_function).setUpperLimit(+std::numeric_limits<double>::max());
67 double DoubleParamToArgAdaptor<F>::operator ()(
double x)
const 70 <<
"Warning. DoubleParamToArgAdaptor called with scalar argument" 77 Parameter & DoubleParamToArgAdaptor<F>::scaleFactor0() {
82 const Parameter & DoubleParamToArgAdaptor<F>::scaleFactor0()
const {
87 Parameter & DoubleParamToArgAdaptor<F>::scaleFactor1() {
92 const Parameter & DoubleParamToArgAdaptor<F>::scaleFactor1()
const {
97 unsigned int DoubleParamToArgAdaptor<F>::dimensionality()
const {
98 return _function->dimensionality()+1;
102 double DoubleParamToArgAdaptor<F>::operator() (
const Argument & a)
const {
103 if (dimensionality()!= a.dimension()) {
105 <<
"Warning: DoubleParamToArgAdaptor function/argument dimension mismatch" 110 int dMinus = a.dimension()-1;
111 Argument aPrime(dMinus);
112 for (
int i=0;i<dMinus;i++) aPrime[i]=a[i];
113 (_parameterFetchMethod0(*_function)).setValue(_scaleFactor0.getValue()*a[dMinus]);
114 (_parameterFetchMethod1(*_function)).setValue(_scaleFactor1.getValue()*a[dMinus]);
115 return (*_function)(a);