mapfilter.h
Go to the documentation of this file.00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #ifndef CLIPPER_MAPFILTER
00047 #define CLIPPER_MAPFILTER
00048
00049
00050 #include "function_object_bases.h"
00051
00052
00053 namespace clipper {
00054
00056 class MapFilterFn_base {
00057 public:
00058 virtual ~MapFilterFn_base() {};
00059 virtual ftype operator() ( const ftype& radius ) const = 0;
00060 };
00061
00063
00066 template<class T> class MapFilter_slow : public MapFilter_base<T> {
00067 public:
00069 enum TYPE { NONE, Absolute, Relative };
00071 MapFilter_slow( const MapFilterFn_base& fltr, const ftype scale = 1.0, const TYPE type = NONE );
00073 MapFilter_slow( clipper::Xmap<T>& result, const clipper::Xmap<T>& xmap, MapFilterFn_base& fltr, const ftype scale = 1.0, const TYPE type = NONE );
00074 bool operator() ( clipper::Xmap<T>& result, const clipper::Xmap<T>& xmap ) const;
00075 private:
00076 const MapFilterFn_base* fltr_;
00077 ftype scale_;
00078 TYPE type_;
00079 };
00080
00082
00109 template<class T> class MapFilter_fft : public MapFilter_base<T> {
00110 public:
00112 enum TYPE { NONE, Absolute, Relative };
00114 MapFilter_fft( const MapFilterFn_base& fltr, const ftype scale = 1.0, const TYPE type = NONE );
00116 MapFilter_fft( clipper::Xmap<T>& result, const clipper::Xmap<T>& xmap, MapFilterFn_base& fltr, const ftype scale = 1.0, const TYPE type = NONE );
00117 bool operator() ( clipper::Xmap<T>& result, const clipper::Xmap<T>& xmap ) const;
00118 bool operator() ( clipper::NXmap<T>& result, const clipper::NXmap<T>& nxmap ) const;
00119 private:
00120 const MapFilterFn_base* fltr_;
00121 ftype scale_;
00122 TYPE type_;
00123 };
00124
00125
00126
00127
00128
00130
00131 class MapFilterFn_step : public MapFilterFn_base {
00132 public:
00134 MapFilterFn_step( const ftype& radius ) : radius_( radius ) {}
00136 MapFilterFn_step() {}
00138 ftype operator() ( const ftype& radius ) const
00139 { return (radius<radius_)?1.0:0.0; }
00140 private:
00141 ftype radius_;
00142 };
00143
00145
00146 class MapFilterFn_linear : public MapFilterFn_base {
00147 public:
00149 MapFilterFn_linear( const ftype& radius ) : radius_( radius ) {}
00151 MapFilterFn_linear() {}
00153 ftype operator() ( const ftype& radius ) const
00154 { return (radius<radius_)?(1.0-radius/radius_):0.0; }
00155 private:
00156 ftype radius_;
00157 };
00158
00160
00161 class MapFilterFn_quadratic : public MapFilterFn_base {
00162 public:
00164 MapFilterFn_quadratic( const ftype& radius ) : radius_( radius ) {}
00166 MapFilterFn_quadratic() {}
00168 ftype operator() ( const ftype& radius ) const
00169 { return (radius<radius_)?pow(1.0-radius/radius_,2):0.0; }
00170 private:
00171 ftype radius_;
00172 };
00173
00174 }
00175
00176 #endif