npstat is hosted by Hepforge, IPPP Durham
NPStat  5.10.0
AbsUnfoldingFilterND.hh
Go to the documentation of this file.
1 #ifndef NPSTAT_ABSUNFOLDINGFILTERND_HH_
2 #define NPSTAT_ABSUNFOLDINGFILTERND_HH_
3 
4 /*!
5 // \file AbsUnfoldingFilterND.hh
6 //
7 // \brief Interface for smoothing filters used in multivariate
8  unfolding problems
9 //
10 // Author: I. Volobouev
11 //
12 // June 2014
13 */
14 
15 #include <cassert>
16 #include <typeinfo>
17 
18 #include "geners/ClassId.hh"
19 #include "geners/CPP11_auto_ptr.hh"
20 
21 #include "npstat/nm/ArrayND.hh"
22 #include "npstat/nm/Matrix.hh"
23 
25 
26 namespace npstat {
28  {
29  public:
31 
32  inline virtual ~AbsUnfoldingFilterND() {}
33 
34  virtual void filter(const ArrayND<double>& in,
35  ArrayND<double>* out) const = 0;
36 
37  virtual void convolve(const ArrayND<double>& in,
38  ArrayND<double>* out) const = 0;
39 
40  virtual Matrix<double> getFilterMatrix() const = 0;
41 
42  inline bool operator==(const AbsUnfoldingFilterND& r) const
43  {return (typeid(*this) == typeid(r)) && this->isEqual(r);}
44 
45  inline bool operator!=(const AbsUnfoldingFilterND& r) const
46  {return !(*this == r);}
47 
48  //@{
49  /** Prototype needed for I/O */
50  virtual gs::ClassId classId() const = 0;
51  virtual bool write(std::ostream&) const = 0;
52  //@}
53 
54  static inline const char* classname()
55  {return "npstat::AbsUnfoldingFilterND";}
56  static inline unsigned version() {return 1;}
57  static AbsUnfoldingFilterND* read(const gs::ClassId& id, std::istream&);
58 
59  protected:
60  virtual bool isEqual(const AbsUnfoldingFilterND&) const = 0;
61  };
62 
63 
64  template<class Impl>
66  {
67  public:
68  inline UnfoldingFilterND(const Impl *filt, const bool assumeOwnership)
69  : impl_(filt), owns_(assumeOwnership) {assert(impl_);}
70 
71  inline virtual ~UnfoldingFilterND() {if (owns_) delete impl_;}
72 
73  inline unsigned dim() const {return impl_->dim();}
74 
75  inline std::vector<unsigned> dataShape() const
76  {return impl_->dataShape();}
77 
78  inline double selfContribution(
79  const unsigned* index, const unsigned lenIndex) const
80  {return impl_->selfContribution(index, lenIndex);}
81 
82  inline double linearSelfContribution(const unsigned long index) const
83  {return impl_->linearSelfContribution(index);}
84 
85  inline void filter(const ArrayND<double>& in,
86  ArrayND<double>* out) const
87  {impl_->filter(in, out);}
88 
89  inline void convolve(const ArrayND<double>& in,
90  ArrayND<double>* out) const
91  {impl_->convolve(in, out);}
92 
93  inline Matrix<double> getFilterMatrix() const
94  {return impl_->getFilterMatrix();}
95 
96  //@{
97  /** Method related to "geners" I/O */
98  inline virtual gs::ClassId classId() const {return gs::ClassId(*this);}
99  inline virtual bool write(std::ostream& of) const
100  {return impl_->classId().write(of) && impl_->write(of);}
101  //@}
102 
103  static inline const char* classname()
104  {
105  static const std::string name(
106  gs::template_class_name<Impl>("npstat::UnfoldingFilterND"));
107  return name.c_str();
108  }
109 
110  static inline unsigned version() {return 1;}
111 
112  static inline UnfoldingFilterND* read(const gs::ClassId& id,
113  std::istream& in)
114  {
115  static const gs::ClassId current(
116  gs::ClassId::makeId<UnfoldingFilterND>());
117  current.ensureSameId(id);
118  gs::ClassId id1(in, 1);
119  CPP11_auto_ptr<Impl> ptr(Impl::read(id1, in));
120  UnfoldingFilterND* p = new UnfoldingFilterND(ptr.get(), true);
121  ptr.release();
122  return p;
123  }
124 
125  protected:
126  inline virtual bool isEqual(const AbsUnfoldingFilterND& r) const
127  {return *impl_ == *(static_cast<const UnfoldingFilterND&>(r)).impl_;}
128 
129  private:
130  UnfoldingFilterND();
131  UnfoldingFilterND(const UnfoldingFilterND&);
132  UnfoldingFilterND& operator=(const UnfoldingFilterND&);
133 
134  const Impl* impl_;
135  bool owns_;
136  };
137 }
138 
139 #endif // NPSTAT_ABSUNFOLDINGFILTERND_HH_
Interface definition for multivariate smoothers that can be cross-validated.
Arbitrary-dimensional array template.
Template matrix class.
Definition: AbsUnfoldingFilterND.hh:28
virtual gs::ClassId classId() const =0
Definition: AbsUnfoldingFilterND.hh:66
double selfContribution(const unsigned *index, const unsigned lenIndex) const
Definition: AbsUnfoldingFilterND.hh:78
std::vector< unsigned > dataShape() const
Definition: AbsUnfoldingFilterND.hh:75
unsigned dim() const
Definition: AbsUnfoldingFilterND.hh:73
virtual gs::ClassId classId() const
Definition: AbsUnfoldingFilterND.hh:98
double linearSelfContribution(const unsigned long index) const
Definition: AbsUnfoldingFilterND.hh:82
Definition: AbsArrayProjector.hh:14
Definition: AbsPolyFilterND.hh:27