Home  · Classes  · Annotated Classes  · Modules  · Members  · Namespaces  · Related Pages
BilinearInterpolation.h
Go to the documentation of this file.
1 // --------------------------------------------------------------------------
2 // OpenMS -- Open-Source Mass Spectrometry
3 // --------------------------------------------------------------------------
4 // Copyright The OpenMS Team -- Eberhard Karls University Tuebingen,
5 // ETH Zurich, and Freie Universitaet Berlin 2002-2017.
6 //
7 // This software is released under a three-clause BSD license:
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of any author or any participating institution
14 // may be used to endorse or promote products derived from this software
15 // without specific prior written permission.
16 // For a full list of authors, refer to the file AUTHORS.
17 // --------------------------------------------------------------------------
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 // ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING
22 // INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 //
30 // --------------------------------------------------------------------------
31 // $Maintainer: Timo Sachsenberg $
32 // $Authors: $
33 // --------------------------------------------------------------------------
34 
35 #ifndef OPENMS_MATH_MISC_BILINEARINTERPOLATION_H
36 #define OPENMS_MATH_MISC_BILINEARINTERPOLATION_H
37 
39 
40 namespace OpenMS
41 {
42 
43  namespace Math
44  {
45 
72  template <typename Key = double, typename Value = Key>
74  {
75 
76 public:
77 
79 
80  typedef Value value_type;
81 
82  typedef Key key_type;
84 
85  typedef value_type ValueType;
86  typedef key_type KeyType;
87  typedef container_type ContainerType;
89 
90 public:
91 
95 
98  scale_0_(1),
99  offset_0_(0),
100  scale_1_(1),
101  offset_1_(0),
102  inside_0_(0),
103  outside_0_(0),
104  inside_1_(0),
105  outside_1_(0),
106  data_()
107  {}
108 
111  scale_0_(arg.scale_0_),
112  offset_0_(arg.offset_0_),
113  scale_1_(arg.scale_1_),
114  offset_1_(arg.offset_1_),
115  inside_0_(arg.inside_0_),
116  outside_0_(arg.outside_0_),
117  inside_1_(arg.inside_1_),
118  outside_1_(arg.outside_1_),
119  data_(arg.data_)
120  {}
121 
124  {
125  if (&arg == this)
126  return *this;
127 
128  scale_0_ = arg.scale_0_;
129  offset_0_ = arg.offset_0_;
130  scale_1_ = arg.scale_1_;
131  offset_1_ = arg.offset_1_;
132  inside_0_ = arg.inside_0_;
133  outside_1_ = arg.outside_1_;
134  inside_1_ = arg.inside_1_;
135  outside_0_ = arg.outside_0_;
136  data_ = arg.data_;
137  return *this;
138  }
139 
142  {}
143 
145 
146  // ----------------------------------------------------------------------
147 
149 
150 
152  ValueType value(KeyType arg_pos_0, KeyType arg_pos_1) const
153  {
154  // apply the key transformations
155  KeyType const pos_0 = key2index_0(arg_pos_0);
156  KeyType const pos_1 = key2index_1(arg_pos_1);
157 
158  // ???? should use modf() here!
159 
160  SignedSize const size_0 = data_.rows();
161  SignedSize const lower_0 = SignedSize(pos_0); // this rounds towards zero
162  SignedSize const size_1 = data_.cols();
163  SignedSize const lower_1 = SignedSize(pos_1); // this rounds towards zero
164 
165  // small pos_0
166  if (pos_0 <= 0)
167  {
168  if (lower_0 != 0)
169  {
170  return 0;
171  }
172  else // that is: -1 < pos_0 <= 0
173  { // small pos_1
174  if (pos_1 <= 0)
175  {
176  if (lower_1 != 0)
177  {
178  return 0;
179  }
180  else // that is: -1 < pos_1 <= 0
181  {
182  return data_(0, 0) * (1. + pos_0) * (1. + pos_1);
183  }
184  }
185 
186  // big pos_1
187  if (lower_1 >= size_1 - 1)
188  {
189  if (lower_1 != size_1 - 1)
190  {
191  return 0;
192  }
193  else
194  {
195  return data_(0, lower_1) * (1. + pos_0) * (size_1 - pos_1);
196  }
197  }
198 
199  // medium pos_1
200  KeyType const factor_1 = pos_1 - KeyType(lower_1);
201  KeyType const factor_1_complement = KeyType(1.) - factor_1;
202  return (
203  data_(0, lower_1 + 1) * factor_1 +
204  data_(0, lower_1) * factor_1_complement
205  ) * (1. + pos_0);
206  }
207  }
208 
209  // big pos_0
210  if (lower_0 >= size_0 - 1)
211  {
212  if (lower_0 != size_0 - 1)
213  {
214  return 0;
215  }
216  else // that is: size_0 - 1 <= pos_0 < size_0
217  { // small pos_1
218  if (pos_1 <= 0)
219  {
220  if (lower_1 != 0)
221  {
222  return 0;
223  }
224  else // that is: -1 < pos_1 <= 0
225  {
226  return data_(lower_0, 0) * (size_0 - pos_0) * (1. + pos_1);
227  }
228  }
229 
230  // big pos_1
231  if (lower_1 >= size_1 - 1)
232  {
233  if (lower_1 != size_1 - 1)
234  {
235  return 0;
236  }
237  else
238  {
239  return data_(lower_0, lower_1) * (size_0 - pos_0) * (size_1 - pos_1);
240  }
241  }
242 
243  // medium pos_1
244  KeyType const factor_1 = pos_1 - KeyType(lower_1);
245  KeyType const factor_1_complement = KeyType(1.) - factor_1;
246  return (
247  data_(lower_0, lower_1 + 1) * factor_1 +
248  data_(lower_0, lower_1) * factor_1_complement
249  )
250  * (size_0 - pos_0);
251  }
252  }
253 
254  // medium pos_0
255  {
256  KeyType const factor_0 = pos_0 - KeyType(lower_0);
257  KeyType const factor_0_complement = KeyType(1.) - factor_0;
258 
259  // small pos_1
260  if (pos_1 <= 0)
261  {
262  if (lower_1 != 0)
263  {
264  return 0;
265  }
266  else // that is: -1 < pos_1 <= 0
267  {
268  return (
269  data_(lower_0 + 1, 0) * factor_0
270  +
271  data_(lower_0, 0) * factor_0_complement
272  )
273  * (1. + pos_1);
274  }
275  }
276 
277  // big pos_1
278  if (lower_1 >= size_1 - 1)
279  {
280  if (lower_1 != size_1 - 1)
281  {
282  return 0;
283  }
284  else
285  {
286  return (
287  data_(lower_0 + 1, lower_1) * factor_0
288  +
289  data_(lower_0, lower_1) * factor_0_complement
290  )
291  * (size_1 - pos_1);
292  }
293  }
294  KeyType const factor_1 = pos_1 - KeyType(lower_1);
295  KeyType const factor_1_complement = KeyType(1.) - factor_1;
296 
297  // medium pos_0 and medium pos_1 --> "within" the matrix
298  return (
299  data_(lower_0 + 1, lower_1 + 1) * factor_0
300  +
301  data_(lower_0, lower_1 + 1) * factor_0_complement
302  )
303  * factor_1
304  +
305  (
306  data_(lower_0 + 1, lower_1) * factor_0
307  +
308  data_(lower_0, lower_1) * factor_0_complement
309  )
310  * factor_1_complement;
311  }
312  }
313 
317  void addValue(KeyType arg_pos_0, KeyType arg_pos_1, ValueType arg_value)
318  {
319 
320  typedef typename container_type::difference_type DiffType;
321 
322  // apply key transformation _0
323  KeyType const pos_0 = key2index_0(arg_pos_0);
324  KeyType lower_0_key;
325  KeyType const frac_0 = std::modf(pos_0, &lower_0_key);
326  DiffType const lower_0 = DiffType(lower_0_key);
327 
328  // Small pos_0 ?
329  if (pos_0 < 0)
330  {
331  if (lower_0)
332  {
333  return;
334  }
335  else // lower_0 == 0
336  { // apply key transformation _1
337  KeyType const pos_1 = key2index_1(arg_pos_1);
338  KeyType lower_1_key;
339  KeyType const frac_1 = std::modf(pos_1, &lower_1_key);
340  DiffType const lower_1 = DiffType(lower_1_key);
341 
342  // Small pos_1 ?
343  if (pos_1 < 0)
344  {
345  if (lower_1)
346  {
347  return;
348  }
349  else // lower_1 == 0
350  {
351  data_(0, 0) += arg_value * (1 + frac_0) * (1 + frac_1);
352  return;
353  }
354  }
355  else // pos_1 >= 0
356  {
357  DiffType const back_1 = data_.cols() - 1;
358  // big pos_1
359  if (lower_1 >= back_1)
360  {
361  if (lower_1 != back_1)
362  {
363  return;
364  }
365  else // lower_1 == back_1
366  {
367  data_(0, lower_1) += arg_value * (1 + frac_0) * (1 - frac_1);
368  return;
369  }
370  }
371  else
372  {
373  // medium pos_1
374  KeyType const tmp_prod = KeyType(arg_value * (1. + frac_0));
375  data_(0, lower_1 + 1) += tmp_prod * frac_1;
376  data_(0, lower_1) += tmp_prod * (1. - frac_1);
377  return;
378  }
379  }
380  }
381  }
382  else // pos_0 >= 0
383  {
384  DiffType const back_0 = data_.rows() - 1;
385  if (lower_0 >= back_0)
386  {
387  if (lower_0 != back_0)
388  {
389  return;
390  }
391  else // lower_0 == back_0
392  {
393 
394  KeyType const tmp_prod = KeyType(arg_value * (1. - frac_0));
395 
396  // apply key transformation _1
397  KeyType const pos_1 = key2index_1(arg_pos_1);
398  KeyType lower_1_key;
399  KeyType const frac_1 = std::modf(pos_1, &lower_1_key);
400  DiffType const lower_1 = DiffType(lower_1_key);
401 
402  // Small pos_1 ?
403  if (pos_1 < 0)
404  {
405  if (lower_1)
406  {
407  return;
408  }
409  else // lower_1 == 0
410  {
411  data_(lower_0, 0) += tmp_prod * (1 + frac_1);
412  return;
413  }
414  }
415  else // pos_1 >= 0
416  {
417  DiffType const back_1 = data_.cols() - 1;
418  // big pos_1
419  if (lower_1 >= back_1)
420  {
421  if (lower_1 != back_1)
422  {
423  return;
424  }
425  else // lower_1 == back_1
426  {
427  data_(lower_0, lower_1) += tmp_prod * (1 - frac_1);
428  return;
429  }
430  }
431  else
432  {
433  // medium pos_1
434  data_(lower_0, lower_1 + 1) += tmp_prod * frac_1;
435  data_(lower_0, lower_1) += tmp_prod * (1 - frac_1);
436  return;
437  }
438  }
439  }
440  }
441  else // lower_0 < back_0
442  {
443 
444  // Medium pos_0 !
445 
446  // apply key transformation _1
447  KeyType const pos_1 = key2index_1(arg_pos_1);
448  KeyType lower_1_key;
449  KeyType const frac_1 = std::modf(pos_1, &lower_1_key);
450  DiffType const lower_1 = DiffType(lower_1_key);
451 
452  // Small pos_1 ?
453  if (pos_1 < 0)
454  {
455  if (lower_1)
456  {
457  return;
458  }
459  else // lower_1 == 0
460  {
461  KeyType const tmp_prod = KeyType(arg_value * (1 + frac_1));
462  data_(lower_0 + 1, 0) += tmp_prod * frac_0;
463  data_(lower_0, 0) += tmp_prod * (1 - frac_0);
464  return;
465  }
466  }
467  else // pos_1 >= 0
468  {
469  DiffType const back_1 = data_.cols() - 1;
470  // big pos_1
471  if (lower_1 >= back_1)
472  {
473  if (lower_1 != back_1)
474  {
475  return;
476  }
477  else // lower_1 == back_1
478  {
479  KeyType const tmp_prod = KeyType(arg_value * (1 - frac_1));
480  data_(lower_0 + 1, lower_1) += tmp_prod * frac_0;
481  data_(lower_0, lower_1) += tmp_prod * (1 - frac_0);
482  return;
483  }
484  }
485  else
486  {
487  // Medium pos_1 !
488 
489  // medium pos_0 and medium pos_1 --> "within" the matrix
490  KeyType tmp_prod = KeyType(arg_value * frac_0);
491  data_(lower_0 + 1, lower_1 + 1) += tmp_prod * frac_1;
492  data_(lower_0 + 1, lower_1) += tmp_prod * (1 - frac_1);
493  tmp_prod = KeyType(arg_value * (1 - frac_0));
494  data_(lower_0, lower_1 + 1) += tmp_prod * frac_1;
495  data_(lower_0, lower_1) += tmp_prod * (1 - frac_1);
496  return;
497  }
498  }
499  }
500  }
501  }
502 
504 
505  // ----------------------------------------------------------------------
506 
508 
509 
511  ContainerType & getData()
512  {
513  return data_;
514  }
515 
517  ContainerType const & getData() const
518  {
519  return data_;
520  }
521 
527  template <typename SourceContainer>
528  void setData(SourceContainer const & data)
529  {
530  data_ = data;
531  }
532 
534  bool empty() const
535  {
536  return data_.empty();
537  }
538 
540 
541  // ----------------------------------------------------------------------
542 
544 
545 
547  KeyType key2index_0(KeyType pos) const
548  {
549  if (scale_0_)
550  {
551  pos -= offset_0_;
552  pos /= scale_0_;
553  return pos;
554  }
555  else
556  {
557  return 0;
558  }
559  }
560 
562  KeyType index2key_0(KeyType pos) const
563  {
564  pos *= scale_0_;
565  pos += offset_0_;
566  return pos;
567  }
568 
570  KeyType key2index_1(KeyType pos) const
571  {
572  if (scale_1_)
573  {
574  pos -= offset_1_;
575  pos /= scale_1_;
576  return pos;
577  }
578  else
579  {
580  return 0;
581  }
582  }
583 
585  KeyType index2key_1(KeyType pos) const
586  {
587  pos *= scale_1_;
588  pos += offset_1_;
589  return pos;
590  }
591 
593  KeyType const & getScale_0() const
594  {
595  return scale_0_;
596  }
597 
599  KeyType const & getScale_1() const
600  {
601  return scale_1_;
602  }
603 
609  void setScale_0(KeyType const & scale)
610  {
611  scale_0_ = scale;
612  }
613 
619  void setScale_1(KeyType const & scale)
620  {
621  scale_1_ = scale;
622  }
623 
625  KeyType const & getOffset_0() const
626  {
627  return offset_0_;
628  }
629 
631  KeyType const & getOffset_1() const
632  {
633  return offset_1_;
634  }
635 
642  void setOffset_0(KeyType const & offset)
643  {
644  offset_0_ = offset;
645  }
646 
653  void setOffset_1(KeyType const & offset)
654  {
655  offset_1_ = offset;
656  }
657 
671  void setMapping_0(KeyType const & scale, KeyType const & inside_low, KeyType const & outside_low)
672  {
673  scale_0_ = scale;
674  inside_0_ = inside_low;
675  outside_0_ = outside_low;
676  offset_0_ = outside_low - scale * inside_low;
677  return;
678  }
679 
686  void setMapping_0(KeyType const & inside_low, KeyType const & outside_low,
687  KeyType const & inside_high, KeyType const & outside_high)
688  {
689  if (inside_high != inside_low)
690  {
691  setMapping_0((outside_high - outside_low) / (inside_high - inside_low),
692  inside_low, outside_low);
693  }
694  else
695  {
696  setMapping_0(0, inside_low, outside_low);
697  }
698  return;
699  }
700 
714  void setMapping_1(KeyType const & scale, KeyType const & inside_low, KeyType const & outside_low)
715  {
716  scale_1_ = scale;
717  inside_1_ = inside_low;
718  outside_1_ = outside_low;
719  offset_1_ = outside_low - scale * inside_low;
720  return;
721  }
722 
729  void setMapping_1(KeyType const & inside_low, KeyType const & outside_low,
730  KeyType const & inside_high, KeyType const & outside_high)
731  {
732  if (inside_high != inside_low)
733  {
734  setMapping_1((outside_high - outside_low) / (inside_high - inside_low),
735  inside_low, outside_low);
736  }
737  else
738  {
739  setMapping_1(0, inside_low, outside_low);
740  }
741  return;
742  }
743 
745  KeyType const & getInsideReferencePoint_0() const
746  {
747  return inside_0_;
748  }
749 
751  KeyType const & getInsideReferencePoint_1() const
752  {
753  return inside_1_;
754  }
755 
757  KeyType const & getOutsideReferencePoint_0() const
758  {
759  return outside_0_;
760  }
761 
763  KeyType const & getOutsideReferencePoint_1() const
764  {
765  return outside_1_;
766  }
767 
769  KeyType supportMin_0() const
770  {
771  return index2key_0(empty() ? KeyType(0.) : KeyType(-1.));
772  }
773 
775  KeyType supportMin_1() const
776  {
777  return index2key_1(empty() ? KeyType(0.) : KeyType(-1.));
778  }
779 
781  KeyType supportMax_0() const
782  {
783  return index2key_0(KeyType(data_.rows()));
784  }
785 
787  KeyType supportMax_1() const
788  {
789  return index2key_1(KeyType(data_.cols()));
790  }
791 
793 
794 protected:
795 
798  KeyType scale_0_;
799  KeyType offset_0_;
800  KeyType scale_1_;
801  KeyType offset_1_;
802  KeyType inside_0_;
803  KeyType outside_0_;
804  KeyType inside_1_;
805  KeyType outside_1_;
806  ContainerType data_;
808  };
809 
810  } // namespace Math
811 
812 } // namespace OpenMS
813 
814 #endif // OPENMS_MATH_MISC_BILINEARINTERPOLATION_H
container_type ContainerType
Definition: BilinearInterpolation.h:87
KeyType scale_1_
Definition: BilinearInterpolation.h:800
ContainerType data_
Definition: BilinearInterpolation.h:806
void setMapping_1(KeyType const &inside_low, KeyType const &outside_low, KeyType const &inside_high, KeyType const &outside_high)
Specifies the mapping from "outside" to "inside" coordinates by the following data: ...
Definition: BilinearInterpolation.h:729
KeyType offset_0_
Definition: BilinearInterpolation.h:799
KeyType offset_1_
Definition: BilinearInterpolation.h:801
void setData(SourceContainer const &data)
Assigns data to the internal random access container storing the data.
Definition: BilinearInterpolation.h:528
KeyType supportMin_1() const
Lower boundary of the support, in "outside" coordinates.
Definition: BilinearInterpolation.h:775
void setMapping_1(KeyType const &scale, KeyType const &inside_low, KeyType const &outside_low)
Specifies the mapping from "outside" to "inside" coordinates by the following data: ...
Definition: BilinearInterpolation.h:714
void setOffset_0(KeyType const &offset)
Accessor. "Offset" is the point (in "outside" units) which corresponds to "Data(0,0)".
Definition: BilinearInterpolation.h:642
KeyType supportMin_0() const
Lower boundary of the support, in "outside" coordinates.
Definition: BilinearInterpolation.h:769
key_type KeyType
Definition: BilinearInterpolation.h:86
ContainerType const & getData() const
Returns the internal random access container storing the data.
Definition: BilinearInterpolation.h:517
KeyType index2key_0(KeyType pos) const
The transformation from "inside" to "outside" coordinates.
Definition: BilinearInterpolation.h:562
KeyType const & getInsideReferencePoint_1() const
Accessor. See setMapping().
Definition: BilinearInterpolation.h:751
void setScale_0(KeyType const &scale)
Accessor. "Scale" is the difference (in "outside" units) between consecutive entries in "Data"...
Definition: BilinearInterpolation.h:609
Base::difference_type difference_type
Definition: Matrix.h:88
ptrdiff_t SignedSize
Signed Size type e.g. used as pointer difference.
Definition: Types.h:135
KeyType inside_1_
Definition: BilinearInterpolation.h:804
KeyType const & getOffset_1() const
Accessor. "Offset" is the point (in "outside" units) which corresponds to "Data(0,0)".
Definition: BilinearInterpolation.h:631
KeyType outside_1_
Definition: BilinearInterpolation.h:805
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47
void setMapping_0(KeyType const &inside_low, KeyType const &outside_low, KeyType const &inside_high, KeyType const &outside_high)
Specifies the mapping from "outside" to "inside" coordinates by the following data: ...
Definition: BilinearInterpolation.h:686
BilinearInterpolation()
Constructors and destructor.
Definition: BilinearInterpolation.h:97
void setScale_1(KeyType const &scale)
Accessor. "Scale" is the difference (in "outside" units) between consecutive entries in "Data"...
Definition: BilinearInterpolation.h:619
void setOffset_1(KeyType const &offset)
Accessor. "Offset" is the point (in "outside" units) which corresponds to "Data(0,0)".
Definition: BilinearInterpolation.h:653
Provides access to bilinearly interpolated values (and derivatives) from discrete data points...
Definition: BilinearInterpolation.h:73
KeyType const & getOutsideReferencePoint_1() const
Accessor. See setMapping().
Definition: BilinearInterpolation.h:763
BilinearInterpolation(BilinearInterpolation const &arg)
Copy constructor.
Definition: BilinearInterpolation.h:110
BilinearInterpolation & operator=(BilinearInterpolation const &arg)
Assignment operator.
Definition: BilinearInterpolation.h:123
KeyType supportMax_0() const
Upper boundary of the support, in "outside" coordinates.
Definition: BilinearInterpolation.h:781
KeyType const & getScale_0() const
Accessor. "Scale" is the difference (in "outside" units) between consecutive entries in "Data"...
Definition: BilinearInterpolation.h:593
Matrix< value_type > container_type
Definition: BilinearInterpolation.h:83
KeyType index2key_1(KeyType pos) const
The transformation from "inside" to "outside" coordinates.
Definition: BilinearInterpolation.h:585
KeyType outside_0_
Definition: BilinearInterpolation.h:803
ContainerType & getData()
Returns the internal random access container storing the data.
Definition: BilinearInterpolation.h:511
KeyType const & getOffset_0() const
Accessor. "Offset" is the point (in "outside" units) which corresponds to "Data(0,0)".
Definition: BilinearInterpolation.h:625
KeyType const & getOutsideReferencePoint_0() const
Accessor. See setMapping().
Definition: BilinearInterpolation.h:757
KeyType scale_0_
Data members.
Definition: BilinearInterpolation.h:798
void addValue(KeyType arg_pos_0, KeyType arg_pos_1, ValueType arg_value)
Performs bilinear resampling. The arg_value is split up and added to the data points around arg_pos...
Definition: BilinearInterpolation.h:317
KeyType key2index_1(KeyType pos) const
The transformation from "outside" to "inside" coordinates.
Definition: BilinearInterpolation.h:570
KeyType key2index_0(KeyType pos) const
The transformation from "outside" to "inside" coordinates.
Definition: BilinearInterpolation.h:547
ValueType value(KeyType arg_pos_0, KeyType arg_pos_1) const
Returns the interpolated value ("backward resampling")
Definition: BilinearInterpolation.h:152
SizeType cols() const
Number of columns.
Definition: Matrix.h:265
Value value_type
Definition: BilinearInterpolation.h:80
KeyType const & getScale_1() const
Accessor. "Scale" is the difference (in "outside" units) between consecutive entries in "Data"...
Definition: BilinearInterpolation.h:599
Key key_type
Definition: BilinearInterpolation.h:82
KeyType supportMax_1() const
Upper boundary of the support, in "outside" coordinates.
Definition: BilinearInterpolation.h:787
value_type ValueType
Definition: BilinearInterpolation.h:85
bool empty() const
Returns true if getData() is empty.
Definition: BilinearInterpolation.h:534
void setMapping_0(KeyType const &scale, KeyType const &inside_low, KeyType const &outside_low)
Specifies the mapping from "outside" to "inside" coordinates by the following data: ...
Definition: BilinearInterpolation.h:671
SizeType rows() const
Number of rows.
Definition: Matrix.h:259
KeyType const & getInsideReferencePoint_0() const
Accessor. See setMapping().
Definition: BilinearInterpolation.h:745
KeyType inside_0_
Definition: BilinearInterpolation.h:802
~BilinearInterpolation()
Destructor.
Definition: BilinearInterpolation.h:141
A two-dimensional matrix. Similar to std::vector, but uses a binary operator(,) for element access...
Definition: IsobaricQuantitationMethod.h:50

OpenMS / TOPP release 2.3.0 Documentation generated on Tue Jan 9 2018 18:21:59 using doxygen 1.8.13