CLHEP 2.4.7.1
C++ Class Library for High Energy Physics
DoubleParamToArgAdaptor.icc
Go to the documentation of this file.
1// -*- C++ -*-
2// $Id: DoubleParamToArgAdaptor.icc,v 1.2 2003/09/06 14:04:13 boudreau Exp $
4#include <assert.h>
5#include <iostream>
6
7namespace Genfun {
8
9
10//FUNCTION_OBJECT_IMP(DoubleParamToArgAdaptor) Do it by hand here:
11
12template <class F>
13FunctionComposition DoubleParamToArgAdaptor<F>::operator()(const AbsFunction & function) const
14{
15 return AbsFunction::operator() (function);
16}
17
18template <class F>
19DoubleParamToArgAdaptor<F> *DoubleParamToArgAdaptor<F>::clone () const {
20 return (DoubleParamToArgAdaptor<F> *) _clone();
21}
22
23template <class F>
24AbsFunction *DoubleParamToArgAdaptor<F>::_clone () const {
25 return new DoubleParamToArgAdaptor<F>(*this);
26}
27
28
29
30template<class F>
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)
39{
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());
44}
45
46template <class F>
50
51template <class F>
53 _scaleFactor0(right._scaleFactor0),
54 _scaleFactor1(right._scaleFactor1),
55 _parameterFetchMethod0(right._parameterFetchMethod0),
56 _parameterFetchMethod1(right._parameterFetchMethod1),
57 _function(right._function->clone())
58{
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());
63}
64
65
66template <class F>
68{
69 std::cerr
70 << "Warning. DoubleParamToArgAdaptor called with scalar argument"
71 << std::endl;
72 assert(0);
73 return 0;
74}
75
76template <class F>
78 return _scaleFactor0;
79}
80
81template <class F>
83 return _scaleFactor0;
84}
85
86template <class F>
88 return _scaleFactor1;
89}
90
91template <class F>
93 return _scaleFactor1;
94}
95
96template <class F>
98 return _function->dimensionality()+1;
99}
100
101template <class F>
103 if (dimensionality()!= a.dimension()) {
104 std::cerr
105 << "Warning: DoubleParamToArgAdaptor function/argument dimension mismatch"
106 << std::endl;
107 assert(0);
108 return 0;
109 }
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);
116}
117
118} // end of namespace Genfun
119
virtual AbsFunction * clone() const =0
virtual double operator()(double argument) const =0
unsigned int dimension() const
Definition Argument.hh:61
DoubleParamToArgAdaptor(const F &function, ScopedMethodPtr parameterFetchMethod0, ScopedMethodPtr paraemterFetchMethod1)
virtual double operator()(double argument) const override
virtual unsigned int dimensionality() const override
Definition Abs.hh:14