CLHEP  2.4.7.2
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 $
3 #include "CLHEP/GenericFunctions/ParamToArgAdaptor.hh"
4 #include <assert.h>
5 #include <iostream>
6 #include <cfloat>
7 
8 namespace Genfun {
9 
10 
11 //FUNCTION_OBJECT_IMP(ParamToArgAdaptor) Do it by hand here:
12 
13 template <class F>
14 FunctionComposition ParamToArgAdaptor<F>::operator()(const AbsFunction & function) const
15 {
16  return AbsFunction::operator() (function);
17 }
18 
19 template <class F>
20 ParamToArgAdaptor<F> *ParamToArgAdaptor<F>::clone () const {
21  return (ParamToArgAdaptor<F> *) _clone();
22 }
23 
24 template <class F>
25 AbsFunction *ParamToArgAdaptor<F>::_clone () const {
26  return new ParamToArgAdaptor<F>(*this);
27 }
28 
29 
30 
31 template<class F>
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)
37 {
38  _parameterFetchMethod(*_function).setLowerLimit(-DBL_MAX);
39  _parameterFetchMethod(*_function).setUpperLimit(+DBL_MAX);
40 }
41 
42 template <class F>
43 ParamToArgAdaptor<F>::~ParamToArgAdaptor() {
44  delete _function;
45 }
46 
47 template <class F>
48 ParamToArgAdaptor<F>::ParamToArgAdaptor(const ParamToArgAdaptor & right):
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 
58 template <class F>
59 double ParamToArgAdaptor<F>::operator ()(double x) const
60 {
61  std::cerr
62  << "Warning. ParamToArgAdaptor called with scalar argument"
63  << std::endl;
64  assert(0);
65  return 0;
66 }
67 
68 template <class F>
69 Parameter & ParamToArgAdaptor<F>::scaleFactor() {
70  return _scaleFactor;
71 }
72 
73 template <class F>
74 const Parameter & ParamToArgAdaptor<F>::scaleFactor() const {
75  return _scaleFactor;
76 }
77 
78 template <class F>
79 unsigned int ParamToArgAdaptor<F>::dimensionality() const {
80  return _function->dimensionality()+1;
81 }
82 
83 template <class F>
84 double ParamToArgAdaptor<F>::operator() (const Argument & a) const {
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;
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);
97 }
98 
99 } // end of namespace Genfun
100 
Definition: Airy.icc:9