1 #ifndef EMSUNFOLD_ABSSPARSEUNFOLDINGFILTERND_HH_
2 #define EMSUNFOLD_ABSSPARSEUNFOLDINGFILTERND_HH_
16 #include "geners/ClassId.hh"
17 #include "geners/CPP11_auto_ptr.hh"
18 #include "geners/AbsReader.hh"
23 #include "Eigen/SparseCore"
29 typedef Eigen::Triplet<double,int> triplet_type;
39 virtual CPP11_auto_ptr<std::vector<triplet_type> >
40 sparseFilterTriplets()
const = 0;
43 {
return (
typeid(*
this) ==
typeid(r)) && this->isEqual(r);}
46 {
return !(*
this == r);}
51 virtual bool write(std::ostream&)
const = 0;
54 static inline const char* classname()
55 {
return "emsunfold::AbsSparseUnfoldingFilterND";}
56 static inline unsigned version() {
return 1;}
57 static AbsSparseUnfoldingFilterND* read(
const gs::ClassId&
id,
60 virtual bool isEqual(
const AbsSparseUnfoldingFilterND&)
const = 0;
69 : impl_(filt), owns_(own) {assert(impl_);}
73 inline unsigned dim()
const {
return impl_->dim();}
76 {
return impl_->dataShape();}
79 const unsigned* index,
const unsigned lenIndex)
const
80 {
return impl_->selfContribution(index, lenIndex);}
83 {
return impl_->linearSelfContribution(index);}
87 {impl_->filter(in, out);}
91 {impl_->convolve(in, out);}
93 inline CPP11_auto_ptr<std::vector<triplet_type> >
94 sparseFilterTriplets()
const
95 {
return impl_->template sparseFilterTriplets<triplet_type>();}
99 inline virtual gs::ClassId
classId()
const {
return gs::ClassId(*
this);}
100 inline virtual bool write(std::ostream& of)
const
101 {
return impl_->classId().write(of) && impl_->write(of);}
104 static inline const char* classname()
106 static const std::string name(gs::template_class_name<Impl>(
107 "emsunfold::SparseUnfoldingFilterND"));
111 static inline unsigned version() {
return 1;}
113 static inline SparseUnfoldingFilterND* read(
const gs::ClassId&
id,
116 static const gs::ClassId current(
117 gs::ClassId::makeId<SparseUnfoldingFilterND>());
118 current.ensureSameId(
id);
119 gs::ClassId id1(in, 1);
120 CPP11_auto_ptr<Impl> ptr(Impl::read(id1, in));
121 SparseUnfoldingFilterND* p =
122 new SparseUnfoldingFilterND(ptr.get(),
true);
128 inline virtual bool isEqual(
const AbsSparseUnfoldingFilterND& r)
const
129 {
return *impl_ == *(
static_cast<const SparseUnfoldingFilterND&
>(r)).impl_;}
132 SparseUnfoldingFilterND();
133 SparseUnfoldingFilterND(
const SparseUnfoldingFilterND&);
134 SparseUnfoldingFilterND& operator=(
const SparseUnfoldingFilterND&);
143 typedef gs::DefaultReader<AbsSparseUnfoldingFilterND> Base;
150 typedef gs::StaticReader<SparseUnfoldingFilterNDReader>
155 const gs::ClassId&
id, std::istream& in)
157 return StaticSparseUnfoldingFilterNDReader::instance().read(
id, in);
Interface definition for multivariate smoothers that can be cross-validated.
Arbitrary-dimensional array template.
Definition: AbsSparseUnfoldingFilterND.hh:27
virtual gs::ClassId classId() const =0
Definition: AbsSparseUnfoldingFilterND.hh:142
Definition: AbsSparseUnfoldingFilterND.hh:66
double selfContribution(const unsigned *index, const unsigned lenIndex) const
Definition: AbsSparseUnfoldingFilterND.hh:78
double linearSelfContribution(const unsigned long index) const
Definition: AbsSparseUnfoldingFilterND.hh:82
std::vector< unsigned > dataShape() const
Definition: AbsSparseUnfoldingFilterND.hh:75
unsigned dim() const
Definition: AbsSparseUnfoldingFilterND.hh:73
virtual gs::ClassId classId() const
Definition: AbsSparseUnfoldingFilterND.hh:99
Definition: AbsSparseUnfoldingFilterND.hh:25
gs::StaticReader< SparseUnfoldingFilterNDReader > StaticSparseUnfoldingFilterNDReader
Definition: AbsSparseUnfoldingFilterND.hh:151
Definition: AbsPolyFilterND.hh:27