CLHEP 2.4.7.1
C++ Class Library for High Energy Physics
ParamToArgAdaptor.icc
Go to the documentation of this file.
1// -*- C++ -*-
2// $Id: ParamToArgAdaptor.icc,v 1.2 2003/09/06 14:04:13 boudreau Exp $
4#include <assert.h>
5#include <iostream>
6#include <cfloat>
7
8namespace Genfun {
9
10
11//FUNCTION_OBJECT_IMP(ParamToArgAdaptor) Do it by hand here:
12
13template <class F>
14FunctionComposition ParamToArgAdaptor<F>::operator()(const AbsFunction & function) const
15{
17}
18
19template <class F>
20ParamToArgAdaptor<F> *ParamToArgAdaptor<F>::clone () const {
21 return (ParamToArgAdaptor<F> *) _clone();
22}
23
24template <class F>
25AbsFunction *ParamToArgAdaptor<F>::_clone () const {
26 return new ParamToArgAdaptor<F>(*this);
27}
28
29
30
31template<class F>
33 ParamToArgAdaptor<F>::ScopedMethodPtr parameterFetchMethod):
34 _scaleFactor("Sigma", 1.0, 0, 10),
35 _function(function.clone()),
36 _parameterFetchMethod(parameterFetchMethod)
37{
38 _parameterFetchMethod(*_function).setLowerLimit(-DBL_MAX);
39 _parameterFetchMethod(*_function).setUpperLimit(+DBL_MAX);
40}
41
42template <class F>
44 delete _function;
45}
46
47template <class F>
49 _scaleFactor(right._scaleFactor),
50 _parameterFetchMethod(right._parameterFetchMethod),
51 _function(right._function->clone())
52{
53 _parameterFetchMethod(*_function).setLowerLimit(-DBL_MAX);
54 _parameterFetchMethod(*_function).setUpperLimit(+DBL_MAX);
55}
56
57
58template <class F>
60{
61 std::cerr
62 << "Warning. ParamToArgAdaptor called with scalar argument"
63 << std::endl;
64 assert(0);
65 return 0;
66}
67
68template <class F>
70 return _scaleFactor;
71}
72
73template <class F>
75 return _scaleFactor;
76}
77
78template <class F>
80 return _function->dimensionality()+1;
81}
82
83template <class F>
85 if (dimensionality()!= a.dimension()) {
86 std::cerr
87 << "Warning: ParamToArgAdaptor function/argument dimension mismatch"
88 << std::endl;
89 assert(0);
90 return 0;
91 }
92 int dMinus = a.dimension()-1;
94 for (int i=0;i<dMinus;i++) aPrime[i]=a[i];
95 (_parameterFetchMethod(*_function)).setValue(_scaleFactor.getValue()*a[dMinus]);
96 return (*_function)(a);
97}
98
99} // end of namespace Genfun
100
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 unsigned int dimensionality() const override
virtual double operator()(double argument) const override
virtual unsigned int dimensionality() const override
ParamToArgAdaptor(const F &function, ScopedMethodPtr parameterFetchMethod)
Parameter &(F::* ScopedMethodPtr)()
Definition Abs.hh:14