casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
ChebyshevParam.h
Go to the documentation of this file.
00001 //# ChebyshevParam.h: Parameter handling for Chebyshev polynomial
00002 //# Copyright (C) 2000,2001,2002,2003,2005
00003 //# Associated Universities, Inc. Washington DC, USA.
00004 //#
00005 //# This library is free software; you can redistribute it and/or modify it
00006 //# under the terms of the GNU Library General Public License as published by
00007 //# the Free Software Foundation; either version 2 of the License, or (at your
00008 //# option) any later version.
00009 //#
00010 //# This library is distributed in the hope that it will be useful, but WITHOUT
00011 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00012 //# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
00013 //# License for more details.
00014 //#
00015 //# You should have received a copy of the GNU Library General Public License
00016 //# along with this library; if not, write to the Free Software Foundation,
00017 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
00018 //#
00019 //# Correspondence concerning AIPS++ should be addressed as follows:
00020 //#        Internet email: aips2-request@nrao.edu.
00021 //#        Postal address: AIPS++ Project Office
00022 //#                        National Radio Astronomy Observatory
00023 //#                        520 Edgemont Road
00024 //#                        Charlottesville, VA 22903-2475 USA
00025 //#
00026 //#! ========================================================================
00027 //# $Id: ChebyshevParam.h 21024 2011-03-01 11:46:18Z gervandiepen $
00028 
00029 #ifndef SCIMATH_CHEBYSHEVPARAM_H
00030 #define SCIMATH_CHEBYSHEVPARAM_H
00031 
00032 #include <casa/aips.h>
00033 #include <casa/BasicSL/String.h>
00034 #include <scimath/Functionals/Function1D.h>
00035 
00036 namespace casa { //# NAMESPACE CASA - BEGIN
00037 
00038 //# Forward Declarations
00039 template<class T> class Vector;
00040 class RecordInterface;
00041 
00042 // <summary>
00043 // Define enums for Chebyshev classes
00044 // </summary>
00045 class ChebyshevEnums
00046 {
00047 public:
00048     // Modes that identify how this function behaves outside its Chebyshev
00049     // interval (see setInterval()).
00050     enum OutOfIntervalMode {
00051 
00052         // return a constant, default value.  The value returned is 
00053         // set with setDefault().
00054         CONSTANT,
00055 
00056         // return a constant value equal to the zero-th order coefficient
00057         ZEROTH,
00058 
00059         // evaluate the polynomial based on its coefficients just as it
00060         // would be inside the interval.  Thus, the function's range is not
00061         // guaranteed to remain within the characteristic bounds of the
00062         // Chebyshev interval.  
00063         EXTRAPOLATE,
00064 
00065         // evaluate the function as if the range is cyclic, repeating the
00066         // range values from its canonical domain.  The period of the cycle
00067         // will be equal to getIntervalMax()-getIntervalMin().  When the 
00068         // function is evaluated outside this interval, the input value will 
00069         // shifted an integer number of periods until it falls within the 
00070         // Chebyshev interval; the value returned is the polynomial evaluated 
00071         // at the shifted (x-axis) value.  Obviously, this mode is most 
00072         // expensive computationally when evaluating outside the range.
00073         CYCLIC,
00074 
00075         // evaluate the function at nearest interval edge
00076         EDGE,
00077 
00078         // number of enumerators
00079         NOutOfIntervalModes };
00080 };
00081 
00082 
00083 // <summary> Parameter handling for Chebyshev polynomial parameters
00084 // </summary>
00085 
00086 // <use visibility=local>
00087 
00088 // <reviewed reviewer="wbrouw" date="2001/11/12" tests="tChebyshev" demos="">
00089 // </reviewed>
00090 
00091 // <prerequisite>
00092 //   <li> <linkto class="FunctionParam">FunctionParam</linkto> class
00093 //   <li> <linkto class="Function1D">Function1D</linkto>
00094 //   <li> <linkto class="Chebyshev">Chebyshev</linkto>
00095 // </prerequisite>
00096 //
00097 // <etymology>
00098 // This class is named after Chebyshev Type I polynomials; it handles the 
00099 // "fixed" parameters for the function.
00100 // </etymology>
00101 //
00102 // <synopsis>
00103 // This class assists in forming and evaluating a function as a
00104 // Chebyshev series, a linear combination of so-called Chebyshev
00105 // polynomials.  Users do not instantiate this abstract class directly; 
00106 // instead they instantiate the child class 
00107 // <linkto class="Chebyshev">Chebyshev</linkto>.  This class holds the part 
00108 // of the implementation used by the 
00109 // <linkto class="Chebyshev">Chebyshev</linkto> class that manages the "fixed" 
00110 // parameters of the function (e.g. the polynomial coefficients, interval of
00111 // interest, etc.)
00112 // 
00113 // For a full description, see the 
00114 // <linkto class="Chebyshev">Chebyshev</linkto> class.
00115 // 
00116 // </synopsis>
00117 //
00118 // <example>
00119 // In this example, a 2nd order Chebyshev polynomial series is
00120 // created.
00121 // <srcblock>
00122 //   // set coeffs to desired values
00123 //   Vector<Double> coeffs(3, 1);   
00124 //
00125 //   // configure the function   
00126 //   Chebyshev<Double> cheb;
00127 //   cheb.setInterval(-0.8, 7.2);
00128 //   cheb.setDefault(1.0);
00129 //   cheb.setCoefficients(coeffs);
00130 //
00131 //   // evaluate the function as necessary
00132 //   Double z = cheb(-0.5);    // -0.5 is within range, z = 0.78625
00133 //   z = cheb(4.2);            // 4.2 is within range, z = 0.375
00134 //   z = cheb(-3);             // -3 is out of the interval, z = 1
00135 // </srcblock>
00136 // </example>
00137 //
00138 // <motivation>
00139 // This class was created to support systematic errors in the simulator tool.  
00140 // It can be used by Jones matrix classes to vary gains in a predictable way,
00141 // mimicing natural processes of the atmosphere or instrumental effects.  
00142 //
00143 // The Chebyshev implementation is split between this class, 
00144 // <src>ChebyshevParam</src> and its child 
00145 // <linkto class="Chebyshev">Chebyshev</linkto> to better support the 
00146 // <linkto class="AutoDiff">AutoDiff framework</linkto> for evaluating 
00147 // derivatives.
00148 // </motivation>
00149 //
00150 // <templating arg=T>
00151 //  <li> T should have standard numerical operators. Current
00152 //      implementation only tested for real types (and their AutoDiffs).
00153 // </templating>
00154 //
00155 // <thrown>
00156 //    <li> Assertion if indices out-of-range
00157 // </thrown>
00158 //
00159 // <todo asof="2001/08/22">
00160 //    <li> It would be helpful to be able to convert to and from the 
00161 //         Polynomial<T> type; this would be supported via a function,
00162 //         Polynomial<T> polynomial(), and constructor, 
00163 //         Chebyshev(Polynomial<T>)
00164 // </todo>
00165 
00166 template<class T>
00167 class  ChebyshevParam : public Function1D<T>
00168 {
00169 public: 
00170 
00171     //# Constructors
00172     // create a zero-th order Chebyshev polynomial with the first coefficient
00173     // equal to zero.  The bounded domain is [T(-1), T(1)].  The 
00174     // OutOfDomainMode is CONSTANT, and the default value is T(0).
00175     ChebyshevParam();
00176 
00177     // create an n-th order Chebyshev polynomial with the coefficients
00178     // equal to zero.  The bounded domain is [T(-1), T(1)].  The 
00179     // OutOfDomainMode is CONSTANT, and the default value is T(0).
00180     explicit ChebyshevParam(const uInt n);
00181 
00182     // create a zero-th order Chebyshev polynomical with the first coefficient
00183     // equal to one.  
00184     //   min is the minimum value of its Chebyshev interval, and 
00185     //   max is the maximum value.  
00186     //   mode sets the behavior of the function outside the Chebyshev interval
00187     //      (see setOutOfIntervalMode() and OutOfIntervalMode enumeration 
00188     //      definition for details).  
00189     //   defval is the value returned when the function is evaluated outside
00190     //      the Chebyshev interval and mode=CONSTANT.
00191     ChebyshevParam(const T &min, const T &max,
00192                    ChebyshevEnums::OutOfIntervalMode
00193                    mode=ChebyshevEnums::CONSTANT, const T &defval=T(0));
00194   
00195     // create a fully specified Chebyshev polynomial.  
00196     //   coeffs holds the coefficients of the Chebyshev polynomial (see 
00197     //      setCoefficients() for details).
00198     //   min is the minimum value of its canonical range, and 
00199     //   max is the maximum value.  
00200     //   mode sets the behavior of the function outside the Chebyshev interval
00201     //      (see setOutOfIntervalMode() and OutOfIntervalMode enumeration 
00202     //      definition for details).  
00203     //   defval is the value returned when the function is evaluated outside
00204     //      the canonical range and mode=CONSTANT.
00205     ChebyshevParam(const Vector<T> &coeffs, const T &min, const T &max, 
00206                    ChebyshevEnums::OutOfIntervalMode
00207                    mode=ChebyshevEnums::CONSTANT, const T &defval=T(0));
00208   
00209     // create a fully specified Chebyshev polynomial.
00210     //   config  is a record that contains the non-coefficient data 
00211     //             that configures this class.
00212     // The fields recognized by this class are those documented for the 
00213     // setMode() function below.
00214     // <group>
00215     ChebyshevParam(uInt order, const RecordInterface& mode);
00216     ChebyshevParam(const Vector<T> &coeffs, const RecordInterface& mode);
00217     // </group>
00218   
00219     // create a deep copy of another Chebyshev polynomial
00220     // <group>
00221     ChebyshevParam(const  ChebyshevParam &other);
00222     template <class W>
00223       ChebyshevParam(const ChebyshevParam<W> &other) :
00224       Function1D<T>(other), def_p(other.getDefault()), 
00225       minx_p(other.getIntervalMin()), maxx_p(other.getIntervalMax()),
00226       mode_p(other.getOutOfIntervalMode()) {}
00227     // </group>
00228 
00229     // make a (deep) copy of another Chebyshev polynomial
00230     ChebyshevParam<T> &operator=(const ChebyshevParam<T> &other);
00231   
00232     // Destructor
00233     virtual ~ChebyshevParam();
00234   
00235     // set the Chebyshev coefficients.  
00236     //   coeffs holds the coefficients in order, beginning with the zero-th 
00237     //      order term.  The order of the polynomial, then, would be the size 
00238     //      of the Vector minus one.  
00239     void setCoefficients(const Vector<T> &coeffs);
00240 
00241     // set a particular Chebyshev coefficient.
00242     //   which is the coefficient order (i.e. 0 refers to the constant offset).
00243     //   value is the coefficient value.
00244     // If which is larger than current order of the function, the order will
00245     // be increased to the value of which, and that coefficient is set to 
00246     // value; missing coefficients less than this value will be set to zero.
00247     // Thus, the order can be increased with this function; however, it cannot
00248     // be decreased (even if the highest order coefficient is set to zero).
00249     // To lower the order, use setCoefficients() with a Vector having the 
00250     // desired number of coefficients.
00251     void setCoefficient(const uInt which, const T &value);
00252   
00253     // return the current set of coefficients into a given Vector.  
00254     const Vector<T> &getCoefficients() const;
00255   
00256     // return a particular coefficient.  
00257     //   which is the coefficient order (i.e. 0 refers to the constant offset).
00258     //     If which is out of range, zero is returned.
00259     T getCoefficient(const uInt which) const {
00260         return ((which < nparameters()) ? param_p[which] : T(0)); }
00261   
00262     // return the number of coeefficients currently loaded.  This does not
00263     // guarantee that the coefficients are non-zero
00264     uInt nCoefficients() const { return nparameters(); }
00265     
00266     // set the Chebyshev interval for this function.  The function will 
00267     // be scaled and shifted to such that the central bounded range of the 
00268     // Chebyshev polynomials ([-1, 1] in untransformed space) spans the 
00269     // given range.  
00270     //   min is the minimum value for the interval, and 
00271     //   max is the maximum value.  See setOutOfIntervalMode() for the behavior 
00272     //      of this function outside the set range.
00273     void setInterval(T xmin, T xmax) {
00274         if (xmin < xmax) { minx_p = xmin; maxx_p = xmax;
00275         } else { minx_p = xmax; maxx_p = xmin; } }   
00276 
00277     // return the minimum value for the currently Chebyshev interval.
00278     // See setInterval() for additional details.
00279     T getIntervalMin() const { return minx_p; }
00280 
00281     // return the maximum value for the currently Chebyshev interval.
00282     // See setInterval() for additional details.
00283     T getIntervalMax() const { return maxx_p; }
00284 
00285     // set the behavior of this function when it is evaluated outside its
00286     // Chebyshev interval
00287     void setOutOfIntervalMode(ChebyshevEnums::OutOfIntervalMode mode)
00288       { mode_p = mode; }
00289 
00290     // return the behavior of this function when it is evaluated outside of 
00291     // its Chebyshev interval.
00292     ChebyshevEnums::OutOfIntervalMode getOutOfIntervalMode() const
00293       { return mode_p; }
00294 
00295     // set the default value of this function.  This value is used when 
00296     // the getOutOfIntervalMode() returns Chebyshev::CONSTANT; it is returned
00297     // when the a value outside of the Chebyshev interval is passed to 
00298     // the () operator.
00299     void setDefault(const T &val) { def_p = val; }
00300 
00301     // return the currently set default value.  See setDefault() for details 
00302     // on the use of this value.
00303     const T &getDefault() const { return def_p; }
00304 
00305     // return the order of this polynomial.  This returns the value of 
00306     // nCoefficients()-1;
00307     uInt order() const { return param_p.nelements() - 1; }
00308 
00309     // transform a set of Chebyshev polynomial coefficients into a set 
00310     // representing the series' derivative.  coeffs should be assuming
00311     // an interval of [-1, 1].  xmin and xmax can be provided to transform
00312     // the series to another interval.
00313     static void derivativeCoeffs(Vector<T> &coeffs, const T &xmin=T(-1),
00314                                  const T &xmax=T(1));
00315   
00316     // convert a set of Chebyshev polynomial coefficients to power series
00317     // coefficients.  The values passed in coeffs are taken to 
00318     // be chebyshev coefficients; these values will be replaced with the 
00319     // power series coefficients.  They should be ordered beginning
00320     // with the zero-th order coefficient.  
00321     static void chebyshevToPower(Vector<T> &coeffs);
00322 
00323     // convert a set of power series coefficients to Chebyshev
00324     // polynomial coefficients.  The values passed in coeffs are taken to 
00325     // be power series coefficients; these values will be replaced with the 
00326     // Chebyshev polynomial coefficients.  They should be ordered beginning
00327     // with the zero-th order coefficient.  
00328     static void powerToChebyshev(Vector<T> &coeffs);
00329 
00330     // Give name of function
00331     virtual const String &name() const { static String x("chebyshev");
00332     return x; }
00333 
00334 protected:
00335 
00336     // Default value if outside interval
00337     T def_p;
00338     // Lowest interval bound
00339     T minx_p;
00340     // Highest inetrval bound
00341     T maxx_p;
00342     // Out-of-interval handling type
00343     ChebyshevEnums::OutOfIntervalMode mode_p;
00344 
00345     static Vector<String> modes_s;
00346 
00347   //# Make members of parent classes known.
00348 protected:
00349   using Function1D<T>::param_p;
00350 public:
00351   using Function1D<T>::nparameters;
00352   using Function1D<T>::setMode;
00353 };
00354 
00355 
00356 // <summary> A ChebyshevParam with the get/setMode implementation </summary>
00357 //
00358 // <synopsis>
00359 // The get/setMode() implementation is separated from ChebyshevParam
00360 // to enable simple specialization for AutoDiff.  See
00361 // <linkto class="ChebyshevParam">ChebyshevParam</linkto> for documentation
00362 // </synopsis>
00363 template <class T>
00364 class ChebyshevParamModeImpl : public ChebyshevParam<T>
00365 {
00366 public:
00367     ChebyshevParamModeImpl() : ChebyshevParam<T>() { }
00368 
00369     explicit ChebyshevParamModeImpl(const uInt n) : ChebyshevParam<T>(n) {}
00370 
00371     ChebyshevParamModeImpl(const T &min, const T &max,
00372                            typename ChebyshevEnums::OutOfIntervalMode mode=ChebyshevEnums::CONSTANT,
00373                            const T &defval=T(0))
00374         : ChebyshevParam<T>(min, max, mode, defval) {}
00375   
00376     ChebyshevParamModeImpl(const Vector<T> &coeffs, 
00377                            const T &min, const T &max, 
00378                            typename ChebyshevEnums::OutOfIntervalMode mode=ChebyshevEnums::CONSTANT, 
00379                            const T &defval=T(0))
00380         : ChebyshevParam<T>(coeffs, min, max, mode, defval) {}
00381   
00382     ChebyshevParamModeImpl(uInt order, const RecordInterface& mode)
00383         : ChebyshevParam<T>(order, mode) { setMode(mode); }
00384     ChebyshevParamModeImpl(const Vector<T> &coeffs, 
00385                            const RecordInterface& mode)
00386         : ChebyshevParam<T>(coeffs, mode) { setMode(mode); }
00387   
00388     ChebyshevParamModeImpl(const ChebyshevParamModeImpl &other) 
00389         : ChebyshevParam<T>(other) {}
00390   
00391     // get/set the function mode.  This is an alternate way to get/set the 
00392     // non-coefficient data for this function.  The supported record fields 
00393     // are as follows:
00394     // <pre>
00395     // Field Name     Type            Role
00396     // -------------------------------------------------------------------
00397     // min            template type   the minimum value of the Chebyshev 
00398     //                                  interval of interest
00399     // max            template type   the maximum value of the Chebyshev 
00400     //                                  interval of interest
00401     // intervalMode   TpString        the out-of-interval mode; recognized
00402     //                                  values are "constant", "zeroth",
00403     //                                  "extrapolate", "cyclic", and "edge".
00404     //                                  setMode() recognizes a 
00405     //                                  case-insensitive, minimum match.
00406     // default        template type   the out-of-range value that is returned
00407     //                                  when the out-of-interval mode is 
00408     //                                  "constant".
00409     // </pre>
00410     // An exception is thrown if interval mode is unrecognized.
00411     // <group>
00412     virtual void setMode(const RecordInterface& mode);
00413     virtual void getMode(RecordInterface& mode) const;
00414     // </group>
00415 
00416     // return True if the implementing function supports a mode.  This
00417     // implementation always returns True.
00418     virtual Bool hasMode() const;
00419 
00420   //# Make members of parent classes known.
00421 protected:
00422   using ChebyshevParam<T>::modes_s;
00423 public:
00424   using ChebyshevParam<T>::setOutOfIntervalMode;
00425   using ChebyshevParam<T>::getOutOfIntervalMode;
00426   using ChebyshevParam<T>::getIntervalMin;
00427   using ChebyshevParam<T>::getIntervalMax;
00428   using ChebyshevParam<T>::getDefault;
00429 };
00430 
00431 #define ChebyshevParamModeImpl_PS ChebyshevParamModeImpl
00432 
00433 // <summary> Partial specialization of ChebyshevParamModeImpl for 
00434 // <src>AutoDiff</src>
00435 // </summary>
00436 // <synopsis>
00437 // <note role=warning> The name <src>ChebyshevParamModeImpl_PS</src> is only 
00438 // for cxx2html limitations.  
00439 // </note>
00440 // </synopsis>
00441 template <class T>
00442 class ChebyshevParamModeImpl_PS<AutoDiff<T> > 
00443     : public ChebyshevParam<AutoDiff<T> > 
00444 {
00445 public:
00446     ChebyshevParamModeImpl_PS() : ChebyshevParam<AutoDiff<T> >() { }
00447 
00448     explicit ChebyshevParamModeImpl_PS(const uInt n) 
00449         : ChebyshevParam<AutoDiff<T> >(n) {}
00450 
00451     ChebyshevParamModeImpl_PS(const AutoDiff<T> &min, const AutoDiff<T> &max,
00452                               typename ChebyshevEnums::OutOfIntervalMode mode=ChebyshevEnums::CONSTANT,
00453                               const AutoDiff<T> &defval=AutoDiff<T>(0))
00454         : ChebyshevParam<AutoDiff<T> >(min, max, mode, defval) {}
00455   
00456     ChebyshevParamModeImpl_PS(const Vector<AutoDiff<T> > &coeffs, 
00457                               const AutoDiff<T> &min, const AutoDiff<T> &max, 
00458                               typename ChebyshevEnums::OutOfIntervalMode mode=ChebyshevEnums::CONSTANT, 
00459                               const AutoDiff<T> &defval=AutoDiff<T>(0))
00460         : ChebyshevParam<AutoDiff<T> >(coeffs, min, max, mode, defval) {}
00461   
00462     ChebyshevParamModeImpl_PS(uInt order, const RecordInterface& mode)
00463         : ChebyshevParam<AutoDiff<T> >(order, mode) {}
00464     ChebyshevParamModeImpl_PS(const Vector<AutoDiff<T> > &coeffs, 
00465                               const RecordInterface& mode)
00466         : ChebyshevParam<AutoDiff<T> >(coeffs, mode) {}
00467   
00468     ChebyshevParamModeImpl_PS(const ChebyshevParamModeImpl_PS &other) 
00469         : ChebyshevParam<AutoDiff<T> >(other) {}
00470   
00471     virtual void setMode(const RecordInterface& mode);
00472     virtual void getMode(RecordInterface& mode) const;
00473 
00474   //# Make members of parent classes known.
00475 protected:
00476   using ChebyshevParam<AutoDiff<T> >::modes_s;
00477 public:
00478   using ChebyshevParam<AutoDiff<T> >::setOutOfIntervalMode;
00479   using ChebyshevParam<AutoDiff<T> >::getOutOfIntervalMode;
00480   using ChebyshevParam<AutoDiff<T> >::getIntervalMin;
00481   using ChebyshevParam<AutoDiff<T> >::getIntervalMax;
00482   using ChebyshevParam<AutoDiff<T> >::getDefault;
00483 };
00484 
00485 
00486 #define ChebyshevParamModeImpl_PSA ChebyshevParamModeImpl
00487 
00488 // <summary> Partial specialization of ChebyshevParamModeImpl for 
00489 // <src>AutoDiff</src>
00490 // </summary>
00491 // <synopsis>
00492 // <note role=warning> The name <src>ChebyshevParamModeImpl_PS</src> is only 
00493 // for cxx2html limitations.  
00494 // </note>
00495 // </synopsis>
00496 template <class T>
00497 class ChebyshevParamModeImpl_PSA<AutoDiffA<T> > 
00498     : public ChebyshevParam<AutoDiffA<T> > 
00499 {
00500 public:
00501     ChebyshevParamModeImpl_PSA() : ChebyshevParam<AutoDiffA<T> >() { }
00502 
00503     explicit ChebyshevParamModeImpl_PSA(const uInt n) 
00504         : ChebyshevParam<AutoDiffA<T> >(n) {}
00505 
00506     ChebyshevParamModeImpl_PSA(const AutoDiffA<T> &min, 
00507                                const AutoDiffA<T> &max,
00508                                typename ChebyshevEnums::OutOfIntervalMode mode=ChebyshevEnums::CONSTANT,
00509                                const AutoDiffA<T> &defval=AutoDiffA<T>(0))
00510         : ChebyshevParam<AutoDiffA<T> >(min, max, mode, defval) {}
00511   
00512     ChebyshevParamModeImpl_PSA(const Vector<AutoDiffA<T> > &coeffs, 
00513                                const AutoDiffA<T> &min, 
00514                                const AutoDiffA<T> &max, 
00515                                typename ChebyshevEnums::OutOfIntervalMode mode=ChebyshevEnums::CONSTANT, 
00516                                const AutoDiffA<T> &defval=AutoDiffA<T>(0))
00517         : ChebyshevParam<AutoDiffA<T> >(coeffs, min, max, mode, defval) {}
00518   
00519     ChebyshevParamModeImpl_PSA(uInt order, const RecordInterface& mode)
00520         : ChebyshevParam<AutoDiffA<T> >(order, mode) {}
00521     ChebyshevParamModeImpl_PSA(const Vector<AutoDiffA<T> > &coeffs, 
00522                               const RecordInterface& mode)
00523         : ChebyshevParam<AutoDiffA<T> >(coeffs, mode) {}
00524   
00525     ChebyshevParamModeImpl_PSA(const ChebyshevParamModeImpl_PSA &other) 
00526         : ChebyshevParam<AutoDiffA<T> >(other) {}
00527   
00528     virtual void setMode(const RecordInterface& mode);
00529     virtual void getMode(RecordInterface& mode) const;
00530 
00531   //# Make members of parent classes known.
00532 protected:
00533   using ChebyshevParam<AutoDiffA<T> >::modes_s;
00534 public:
00535   using ChebyshevParam<AutoDiffA<T> >::setOutOfIntervalMode;
00536   using ChebyshevParam<AutoDiffA<T> >::getOutOfIntervalMode;
00537   using ChebyshevParam<AutoDiffA<T> >::getIntervalMin;
00538   using ChebyshevParam<AutoDiffA<T> >::getIntervalMax;
00539   using ChebyshevParam<AutoDiffA<T> >::getDefault;
00540 };
00541 
00542 
00543 
00544 
00545 } //# NAMESPACE CASA - END
00546 
00547 #ifndef CASACORE_NO_AUTO_TEMPLATES
00548 #include <scimath/Functionals/ChebyshevParam.tcc>
00549 #endif //# CASACORE_NO_AUTO_TEMPLATES
00550 #endif
00551 
00552