00001 #ifndef SPLINEIMAGER1D_H
00002 #define SPLINEIMAGER1D_H
00003
00004 #include <string>
00005 #include "parametermap.h"
00006 #include "basis_spline1d.h"
00007 #include "basisfunc_imager1d.h"
00008
00009 #define __USE_GSL__
00010
00011 #ifdef __USE_GSL__
00012 #include <gsl/gsl_multimin.h>
00013 #endif
00014
00015 using namespace std;
00016 using namespace TNT;
00017
00018
00019
00021 struct zero_struct{
00022 double result;
00023 bool iszero;
00024 };
00025
00026
00027
00028
00029 class CBasisSplineImager1d: public CBasisFuncImager1d{
00030
00031 public:
00032
00033
00034 CBasisSplineImager1d( void ):
00035 CBasisFuncImager1d(),
00036 qscale(50.),
00037 spline_degree(3),
00038 knot_tolerance(0.01),
00039 knot_init_scheme("default"),
00040 optimize_knots(false),
00041 optimize_knots_max_iter(500),
00042 optimize_knots_minimizer_func_weight(1.),
00043 optimize_knots_coellesce_knot_tol(0.01),
00044 optimize_knots_simplex_min_size(0.01),
00045 colloc_pts(0),
00046 user_knots(0),
00047 souWork(){}
00048
00049
00050 ~CBasisSplineImager1d( void ){}
00051
00052
00053 bool Read( const parameterMap& m );
00054 bool Write( parameterMap& m );
00055
00056
00057 bool convertCorrelationToSource( const CCorrFtn1dHisto& corrin, CSourceFtnBase& souout, const parameterMap& m, const CKernel* _kernelPtr=NULL );
00058 bool convertSourceToCorrelation( const CSourceFtnBase& souin, CCorrFtn1dHisto& corrout, const parameterMap& m, const CKernel* _kernelPtr=NULL );
00059 double imageit(CBasisFunctionExpansion1d& souout);
00060
00061
00062 double qscale;
00063 int spline_degree;
00064 double knot_tolerance;
00065
00066
00067 string knot_init_scheme;
00068 bool optimize_knots;
00069 int optimize_knots_max_iter;
00070 double optimize_knots_minimizer_func_weight;
00071 double optimize_knots_coellesce_knot_tol;
00072 double optimize_knots_simplex_min_size;
00073
00074
00075 vector< double > colloc_pts;
00076
00077
00078 vector< double > user_knots;
00079
00080
00081 CBasisSpline1d souWork;
00082
00083
00084 bool set_no_data( CSourceFtnBase& souout );
00085 bool initialize_source( const CCorrFtn1dHisto& corrin, CSourceFtnBase& souout, const parameterMap& m );
00086
00087
00088 void set_knots(CBasisSpline1d& souout);
00089 void set_knots_default(CBasisSpline1d& souout);
00090 void set_knots_from_colloc_points(CBasisSpline1d& souout);
00091 void set_knots_user_defined(CBasisSpline1d& souout);
00092
00093
00094 void set_colloc_sampling_thm(void);
00095 vector< double > get_zeros(double q, int nZeros, int l, double eps=1e-2);
00096 zero_struct find_zero(double xmin, double xmax, double q, int l, double eps);
00097
00098
00099 double do_optimal_knots(CBasisSpline1d& souout);
00100 #ifdef __USE_GSL__
00101 static double static_imageit(const gsl_vector *variableKnots, void* classPtr);
00102 #endif
00103 };
00104
00105 #endif