npstat is hosted by Hepforge, IPPP Durham
NPStat  5.10.0
Filter1DBuilders.hh
Go to the documentation of this file.
1 #ifndef NPSTAT_FILTER1DBUILDERS_HH_
2 #define NPSTAT_FILTER1DBUILDERS_HH_
3 
4 /*!
5 // \file Filter1DBuilders.hh
6 //
7 // \brief Builders of local polynomial filters in one dimension
8 //
9 // The filters are intended for use with the "LocalPolyFilter1D" class.
10 // This particular file declares filter builders that inherit from
11 // the "AbsBoundaryFilter1DBuilder" class.
12 //
13 // Author: I. Volobouev
14 //
15 // June 2015
16 */
17 
19 
20 namespace npstat {
21  /**
22  // This class will simply truncate the kernel at the boundary
23  */
25  {
26  public:
27  inline TruncatingFilter1DBuilder(const AbsDistribution1D* distro,
28  double stepSize,
29  const unsigned char* exclusionMask=0,
30  unsigned exclusionMaskLen = 0,
31  bool excludeCentralPoint = false)
32  : AbsBoundaryFilter1DBuilder(distro, stepSize,
33  exclusionMask, exclusionMaskLen,
34  excludeCentralPoint) {}
35 
36  inline virtual ~TruncatingFilter1DBuilder() {}
37 
38  inline virtual bool isFolding() const {return false;}
39 
40  private:
41  inline virtual double calculateCriterion(
42  const AbsDistribution1D*, double, int, int, double, double*) const
43  {return 1.0;}
44  };
45 
46  /**
47  // This class will mirror (or "fold") the kernel so that it fits
48  // inside the boundaries. The kernel is assumed to be an even function.
49  */
51  {
52  public:
53  inline FoldingFilter1DBuilder(const AbsDistribution1D* distro,
54  double stepSize,
55  const unsigned char* exclusionMask = 0,
56  unsigned exclusionMaskLen = 0,
57  bool excludeCentralPoint = false)
58  : AbsBoundaryFilter1DBuilder(distro, stepSize,
59  exclusionMask, exclusionMaskLen,
60  excludeCentralPoint) {}
61 
62  inline virtual ~FoldingFilter1DBuilder() {}
63 
64  inline virtual bool isFolding() const {return true;}
65 
66  private:
67  inline virtual double calculateCriterion(
68  const AbsDistribution1D*, double, int, int, double, double*) const
69  {return 1.0;}
70  };
71 
72  /**
73  // This class will construct a local polynomial filter out of
74  // an AbsDistribution1D weight function assumed to be even.
75  //
76  // The weight function will be stretched near the boundaries
77  // by the factor Iw_max / Iw, where Iw is the integral of the
78  // weight function inside the support boundary (Iw_max is the
79  // same integral calculated far away from any boundary).
80  */
82  {
83  public:
84  inline StretchingFilter1DBuilder(const AbsDistribution1D* distro,
85  const double stepSize,
86  const unsigned char* exclusionMask=0,
87  unsigned exclusionMaskLen = 0,
88  bool excludeCentralPoint = false)
89  : AbsBoundaryFilter1DBuilder(distro, stepSize,
90  exclusionMask, exclusionMaskLen,
91  excludeCentralPoint) {}
92 
93  inline virtual ~StretchingFilter1DBuilder() {}
94 
95  inline virtual bool isFolding() const {return false;}
96 
97  private:
98  virtual double calculateCriterion(
99  const AbsDistribution1D*, double, int, int, double, double*) const;
100  };
101 
102  /**
103  // This class will construct a local polynomial filter out of
104  // an AbsDistribution1D weight function assumed to be even.
105  //
106  // The weight function will be stretched near the boundaries
107  // so that the integral of the weight function squared is
108  // preserved when the weight is normalized.
109  */
111  {
112  public:
113  inline ConstSqFilter1DBuilder(const AbsDistribution1D* distro,
114  double centralStepSize,
115  const unsigned char* exclusionMask = 0,
116  unsigned exclusionMaskLen = 0,
117  bool excludeCentralPoint = false)
118  : AbsBoundaryFilter1DBuilder(distro, centralStepSize,
119  exclusionMask, exclusionMaskLen,
120  excludeCentralPoint) {}
121 
122  inline virtual ~ConstSqFilter1DBuilder() {}
123 
124  inline virtual bool isFolding() const {return false;}
125 
126  private:
127  virtual double calculateCriterion(
128  const AbsDistribution1D*, double, int, int, double, double*) const;
129  };
130 
131  /**
132  // This class will both fold and stretch the kernel to preserve its
133  // squared integral. The kernel is assumed to be an even function.
134  */
136  {
137  public:
138  inline FoldingSqFilter1DBuilder(const AbsDistribution1D* distro,
139  double stepSize,
140  const unsigned char* exclusionMask = 0,
141  unsigned exclusionMaskLen = 0,
142  bool excludeCentralPoint = false)
143  : ConstSqFilter1DBuilder(distro, stepSize,
144  exclusionMask, exclusionMaskLen,
145  excludeCentralPoint) {}
146 
147  inline virtual ~FoldingSqFilter1DBuilder() {}
148 
149  inline virtual bool isFolding() const {return true;}
150  };
151 
152  /**
153  // This class will construct a local polynomial filter out of
154  // an AbsDistribution1D weight function assumed to be even.
155  //
156  // The weight function will be stretched near the boundaries
157  // so that the weight function variance is preserved when
158  // the weight is normalized.
159  */
161  {
162  public:
163  inline ConstVarFilter1DBuilder(const AbsDistribution1D* distro,
164  double centralStepSize,
165  const unsigned char* exclusionMask = 0,
166  unsigned exclusionMaskLen = 0,
167  bool excludeCentralPoint = false)
168  : AbsBoundaryFilter1DBuilder(distro, centralStepSize,
169  exclusionMask, exclusionMaskLen,
170  excludeCentralPoint) {}
171 
172  inline virtual ~ConstVarFilter1DBuilder() {}
173 
174  inline virtual bool isFolding() const {return false;}
175 
176  private:
177  virtual double calculateCriterion(
178  const AbsDistribution1D*, double, int, int, double, double*) const;
179  };
180 
181  /**
182  // This class will construct a local polynomial filter out of
183  // an AbsDistribution1D weight function assumed to be even.
184  //
185  // The weight function will be stretched and folded near the
186  // boundaries so that the weight function variance is preserved.
187  */
189  {
190  public:
191  inline FoldingVarFilter1DBuilder(const AbsDistribution1D* distro,
192  double centralStepSize,
193  const unsigned char* exclusionMask=0,
194  unsigned exclusionMaskLen = 0,
195  bool excludeCentralPoint = false)
196  : ConstVarFilter1DBuilder(distro, centralStepSize,
197  exclusionMask, exclusionMaskLen,
198  excludeCentralPoint) {}
199 
200  inline virtual ~FoldingVarFilter1DBuilder() {}
201 
202  inline virtual bool isFolding() const {return true;}
203  };
204 
205  /**
206  // This class will construct a local polynomial filter out of
207  // an AbsDistribution1D weight function assumed to be even.
208  //
209  // The weight function will be stretched near the boundaries
210  // so that the ratio of the squared kernel integral to the
211  // squared bias is preserved. This corresponds to constant
212  // AMISE bandwidth.
213  //
214  // "filterDegree" is the degree of the filter. filterDegree = 0
215  // corresponds to the second order kernel.
216  //
217  // "typicalDistributionWidth" is the parameter which connects
218  // typical values of density derivatives at the boundary.
219  */
221  {
222  public:
223  ConstBwFilter1DBuilder(double filterDegree,
224  double typicalDistributionWidth,
225  const AbsDistribution1D* distro,
226  double centralStepSize,
227  const unsigned char* exclusionMask = 0,
228  unsigned exclusionMaskLen = 0,
229  bool excludeCentralPoint = false);
230 
231  inline virtual ~ConstBwFilter1DBuilder() {}
232 
233  inline virtual bool isFolding() const {return false;}
234 
235  private:
236  double filterDeg_;
237  double typicalWidth_;
238  std::vector<double> taperVec_;
239 
240  virtual double calculateCriterion(
241  const AbsDistribution1D*, double, int, int, double, double*) const;
242  };
243 
244  /**
245  // This class will construct a local polynomial filter out of
246  // an AbsDistribution1D weight function assumed to be even.
247  //
248  // The weight function will be stretched and folded near the
249  // boundaries so that the ratio of the squared kernel integral
250  // to the squared bias is preserved. This corresponds to constant
251  // AMISE bandwidth.
252  */
254  {
255  public:
256  inline FoldBwFilter1DBuilder(const double filterDegree,
257  const double typicalDistributionWidth,
258  const AbsDistribution1D* distro,
259  const double centralStepSize,
260  const unsigned char* exclusionMask = 0,
261  unsigned exclusionMaskLen = 0,
262  bool excludeCentralPoint = false)
263  : ConstBwFilter1DBuilder(filterDegree, typicalDistributionWidth,
264  distro, centralStepSize, exclusionMask,
265  exclusionMaskLen, excludeCentralPoint) {}
266 
267  inline virtual ~FoldBwFilter1DBuilder() {}
268 
269  inline virtual bool isFolding() const {return true;}
270  };
271 }
272 
273 #endif // NPSTAT_FILTER1DBUILDERS_HH_
Abstract interface for building local polynomial filter weights in 1-d.
Definition: AbsFilter1DBuilder.hh:156
Definition: Filter1DBuilders.hh:221
virtual bool isFolding() const
Definition: Filter1DBuilders.hh:233
Definition: Filter1DBuilders.hh:111
virtual bool isFolding() const
Definition: Filter1DBuilders.hh:124
Definition: Filter1DBuilders.hh:161
virtual bool isFolding() const
Definition: Filter1DBuilders.hh:174
Definition: Filter1DBuilders.hh:254
virtual bool isFolding() const
Definition: Filter1DBuilders.hh:269
Definition: Filter1DBuilders.hh:51
virtual bool isFolding() const
Definition: Filter1DBuilders.hh:64
Definition: Filter1DBuilders.hh:136
virtual bool isFolding() const
Definition: Filter1DBuilders.hh:149
Definition: Filter1DBuilders.hh:189
virtual bool isFolding() const
Definition: Filter1DBuilders.hh:202
Definition: Filter1DBuilders.hh:82
virtual bool isFolding() const
Definition: Filter1DBuilders.hh:95
Definition: Filter1DBuilders.hh:25
virtual bool isFolding() const
Definition: Filter1DBuilders.hh:38
Definition: AbsArrayProjector.hh:14
Definition: AbsDistribution1D.hh:31