3 #include "CLHEP/GenericFunctions/ParamToArgAdaptor.hh" 14 FunctionComposition ParamToArgAdaptor<F>::operator()(
const AbsFunction &
function)
const 16 return AbsFunction::operator() (
function);
20 ParamToArgAdaptor<F> *ParamToArgAdaptor<F>::clone ()
const {
21 return (ParamToArgAdaptor<F> *) _clone();
25 AbsFunction *ParamToArgAdaptor<F>::_clone ()
const {
26 return new ParamToArgAdaptor<F>(*this);
32 ParamToArgAdaptor<F>::ParamToArgAdaptor(
const F &
function,
33 ParamToArgAdaptor<F>::ScopedMethodPtr parameterFetchMethod):
34 _scaleFactor(
"Sigma", 1.0, 0, 10),
35 _function(function.clone()),
36 _parameterFetchMethod(parameterFetchMethod)
38 _parameterFetchMethod(*_function).setLowerLimit(-DBL_MAX);
39 _parameterFetchMethod(*_function).setUpperLimit(+DBL_MAX);
43 ParamToArgAdaptor<F>::~ParamToArgAdaptor() {
48 ParamToArgAdaptor<F>::ParamToArgAdaptor(
const ParamToArgAdaptor & right):
49 _scaleFactor(right._scaleFactor),
50 _parameterFetchMethod(right._parameterFetchMethod),
51 _function(right._function->clone())
53 _parameterFetchMethod(*_function).setLowerLimit(-DBL_MAX);
54 _parameterFetchMethod(*_function).setUpperLimit(+DBL_MAX);
59 double ParamToArgAdaptor<F>::operator ()(
double x)
const 62 <<
"Warning. ParamToArgAdaptor called with scalar argument" 69 Parameter & ParamToArgAdaptor<F>::scaleFactor() {
74 const Parameter & ParamToArgAdaptor<F>::scaleFactor()
const {
79 unsigned int ParamToArgAdaptor<F>::dimensionality()
const {
80 return _function->dimensionality()+1;
84 double ParamToArgAdaptor<F>::operator() (
const Argument & a)
const {
85 if (dimensionality()!= a.dimension()) {
87 <<
"Warning: ParamToArgAdaptor function/argument dimension mismatch" 92 int dMinus = a.dimension()-1;
93 Argument aPrime(dMinus);
94 for (
int i=0;i<dMinus;i++) aPrime[i]=a[i];
95 (_parameterFetchMethod(*_function)).setValue(_scaleFactor.getValue()*a[dMinus]);
96 return (*_function)(a);