|
Go to the documentation of this file. 1 #ifndef NPSTAT_LOCALPOLYFILTER1D_HH_
2 #define NPSTAT_LOCALPOLYFILTER1D_HH_
18 #include "geners/CPP11_auto_ptr.hh"
19 #include "geners/ClassId.hh"
31 #include "npstat/wrap/arrayNDToNumpy.hh"
32 #include "npstat/wrap/numpyArrayUtils.hh"
76 { return !(* this == r);}
80 double taper( unsigned degree) const;
81 inline unsigned maxDegree() const { return maxDegree_;}
82 inline unsigned dataLen() const { return nbins_;}
83 inline const std::vector<double>& getBandwidthFactors() const
84 { return bandwidthFactors_;}
98 template < typename Tin, typename Tout>
107 template < typename Tin, typename Tout>
124 double tolerance, unsigned maxIterations) const;
130 inline virtual gs::ClassId classId() const { return gs::ClassId(* this);}
131 virtual bool write(std::ostream& os) const;
133 static inline const char* classname()
134 { return "npstat::LocalPolyFilter1D";}
135 static inline unsigned version() { return 2;}
141 mutable std::vector<long double> sumBuffer_;
142 std::vector<PolyFilter1D*> unique_;
144 PolyFilter1D** bins_;
147 std::vector<double> bandwidthFactors_;
149 template < typename T>
150 double convolute( const T* data, const PolyFilter1D* filter) const;
152 void addWeightedFilter( long double w, unsigned binNum) const;
154 void clearSumBuffer() const;
157 void copyOtherData( const LocalPolyFilter1D&);
161 void fillFilterMatrix(Matrix<double>* fm) const;
166 double tolerance, unsigned maxIterations) const
169 tolerance, maxIterations);
179 inline PyObject* filter_2( const double* in, unsigned dataLen,
180 const bool makeNonNegative = false) const
182 if ( dataLen != nbins_) throw std::invalid_argument(
183 "In npstat::LocalPolyFilter1D::filter_2: "
184 "incompatible data length");
187 const int typenum = NumpyTypecode<double>::code;
189 PyObject* xarr = PyArray_SimpleNew(1, &sh, typenum);
192 double* out = ( double*)PyArray_DATA((PyArrayObject*)xarr);
197 catch ( const std::exception& e)
203 for ( unsigned i=0; i< dataLen; ++i)
210 inline PyObject* convolve_2( const double* in, unsigned dataLen,
211 const bool makeNonNegative = false) const
213 if ( dataLen != nbins_) throw std::invalid_argument(
214 "In npstat::LocalPolyFilter1D::convolve_2: "
215 "incompatible data length");
218 const int typenum = NumpyTypecode<double>::code;
220 PyObject* xarr = PyArray_SimpleNew(1, &sh, typenum);
223 double* out = ( double*)PyArray_DATA((PyArrayObject*)xarr);
228 catch ( const std::exception& e)
234 for ( unsigned i=0; i< dataLen; ++i)
241 inline void filterIntoBuffer( const double* in, unsigned dataLen,
242 double* out, unsigned outLen,
243 const bool makeNonNegative = false) const
245 if ( dataLen != outLen) throw std::invalid_argument(
246 "In npstat::LocalPolyFilter1D::filterIntoBuffer: "
247 "incompatible array sizes");
250 for ( unsigned i=0; i< dataLen; ++i)
255 inline void convolveIntoBuffer( const double* in, unsigned dataLen,
256 double* out, unsigned outLen,
257 const bool makeNonNegative = false) const
259 if ( dataLen != outLen) throw std::invalid_argument(
260 "In npstat::LocalPolyFilter1D::convolveIntoBuffer: incompatible array sizes");
263 for ( unsigned i=0; i< dataLen; ++i)
284 inline virtual gs::ClassId classId() const { return gs::ClassId(* this);}
285 virtual bool write(std::ostream& os) const;
287 static inline const char* classname()
288 { return "npstat::DummyLocalPolyFilter1D";}
289 static inline unsigned version() { return 1;}
326 int m, double bandwidth, double maxDegree,
327 unsigned numberOfGridPoints, double gridCellSize,
329 const unsigned char* exclusionMask = 0,
330 bool excludeCentralPoint = false);
338 double symbetaWeightAt0( int m, double bandwidth);
342 int m, double bandwidth, double maxDegree,
343 unsigned numberOfGridPoints, double gridCellSize,
345 const std::vector<int>* exclusionMask = 0,
346 bool excludeCentralPoint = false);
351 return ptr.release();
356 #include "npstat/stat/LocalPolyFilter1D.icc"
Abstract interface for building local polynomial filter weights in 1-d.
Interface definition for 1-d smoothers useable with cross-validation.
Complete set of parameters for building 1-d filters from the symmetric beta family.
Definition: AllSymbetaParams1D.hh:22
Definition: BoundaryHandling.hh:21
Definition: LocalPolyFilter1D.hh:277
Definition: LocalPolyFilter1D.hh:38
const PolyFilter1D & getFilter(unsigned binNumber) const
Matrix< double > getFilterMatrix() const
void convolve(const Tin *in, unsigned dataLen, Tout *out) const
CPP11_auto_ptr< LocalPolyFilter1D > eigenGroomedFilter() const
LocalPolyFilter1D(const double *taper, unsigned maxDegree, const AbsFilter1DBuilder &filterBuilder, unsigned dataLen)
void filter(const Tin *in, unsigned dataLen, Tout *out) const
double taper(unsigned degree) const
unsigned dataLen() const Definition: LocalPolyFilter1D.hh:82
double selfContribution(unsigned binNumber) const
CPP11_auto_ptr< LocalPolyFilter1D > doublyStochasticFilter(double tolerance, unsigned maxIterations) const
Definition: AbsFilter1DBuilder.hh:34
Definition: AbsArrayProjector.hh:14
CPP11_auto_ptr< LocalPolyFilter1D > symbetaLOrPEFilter1D(int m, double bandwidth, double maxDegree, unsigned numberOfGridPoints, double gridCellSize, const BoundaryHandling &boundaryMethod, const unsigned char *exclusionMask=0, bool excludeCentralPoint=false)
Definition: AbsFilter1DBuilder.hh:71
Definition: AbsPolyFilter1D.hh:27
|