yoda is hosted by Hepforge, IPPP Durham
YODA - Yet more Objects for Data Analysis  1.7.2
Point3D.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // This file is part of YODA -- Yet more Objects for Data Analysis
4 // Copyright (C) 2008-2017 The YODA collaboration (see AUTHORS for details)
5 //
6 #ifndef YODA_POINT3D_H
7 #define YODA_POINT3D_H
8 
9 #include "YODA/Point.h"
10 #include "YODA/Exceptions.h"
11 #include "YODA/Utils/MathUtils.h"
12 #include <utility>
13 
14 namespace YODA {
15 
16 
18  class Point3D : public Point {
19  public:
20 
22 
23 
24  // Default constructor
25  Point3D() { }
26 
27 
29  Point3D(double x, double y, double z, double ex=0.0, double ey=0.0, double ez=0.0, std::string source="")
30  : _x(x), _y(y), _z(z)
31  {
32  _ex = std::make_pair(ex, ex);
33  _ey = std::make_pair(ey, ey);
34  _ez[source] = std::make_pair(ez, ez);
35  }
36 
37 
39  Point3D(double x, double y, double z,
40  double exminus,
41  double explus,
42  double eyminus,
43  double eyplus,
44  double ezminus,
45  double ezplus, std::string source="")
46  : _x(x), _y(y), _z(z)
47  {
48  _ex = std::make_pair(exminus, explus);
49  _ey = std::make_pair(eyminus, eyplus);
50  _ez[source] = std::make_pair(ezminus, ezplus);
51  }
52 
54  Point3D(double x, double y, double z,
55  const std::pair<double,double>& ex,
56  const std::pair<double,double>& ey,
57  const std::pair<double,double>& ez, std::string source="")
58  : _x(x), _y(y), _z(z),
59  _ex(ex), _ey(ey)
60  {
61  _ez[source] = ez;
62  }
63 
64 
66  Point3D(const Point3D& p)
67  : _x(p._x), _y(p._y), _z(p._z),
68  _ex(p._ex), _ey(p._ey), _ez(p._ez)
69  { }
70 
71 
74  _x = p._x;
75  _y = p._y;
76  _z = p._z;
77  _ex = p._ex;
78  _ey = p._ey;
79  _ez = p._ez;
80  return *this;
81  }
82 
83 
85 
86 
87  public:
88 
90  size_t dim() { return 3; }
91 
92 
94 
95 
97  double x() const { return _x; }
98 
100  void setX(double x) { _x = x; }
101 
103  double y() const { return _y; }
104 
106  void setY(double y) { _y = y; }
107 
109  double z() const { return _z;}
110 
112  void setZ(double z) { _z = z;}
113 
115 
116  // /// Get x,y,z value tuple
117  // triple<double,double,double> xyz() const { return std::triple(_x, _y, _z); }
118 
120  void setXYZ(double x, double y, double z) { setX(x); setY(y); setZ(z); }
121 
122  // /// Set x and y values
123  // void setXY(triple<double,double,double> xyz) { setX(xy.first); setY(xy.second); setZ(xy.third); }
124 
126 
127 
129 
130 
132  const std::pair<double,double>& xErrs() const {
133  return _ex;
134  }
135 
137  double xErrMinus() const {
138  return _ex.first;
139  }
140 
142  double xErrPlus() const {
143  return _ex.second;
144  }
145 
147  double xErrAvg() const {
148  return (_ex.first + _ex.second)/2.0;
149  }
150 
152  void setXErrMinus(double exminus) {
153  _ex.first = exminus;
154  }
155 
157  void setXErrPlus(double explus) {
158  _ex.second = explus;
159  }
160 
162  void setXErr(double ex) {
163  setXErrMinus(ex);
164  setXErrPlus(ex);
165  }
166 
168  void setXErrs(double ex) {
169  setXErr(ex);
170  }
171 
173  void setXErrs(double exminus, double explus) {
174  setXErrMinus(exminus);
175  setXErrPlus(explus);
176  }
177 
179  void setXErrs(const std::pair<double,double>& ex) {
180  _ex = ex;
181  }
182 
184  double xMin() const {
185  return _x - _ex.first;
186  }
187 
189  double xMax() const {
190  return _x + _ex.second;
191  }
192 
194 
195 
197 
198 
200  const std::pair<double,double>& yErrs() const {
201  return _ey;
202  }
203 
205  double yErrMinus() const {
206  return _ey.first;
207  }
208 
210  double yErrPlus() const {
211  return _ey.second;
212  }
213 
215  double yErrAvg() const {
216  return (_ey.first + _ey.second)/2.0;
217  }
218 
220  void setYErrMinus(double eyminus) {
221  _ey.first = eyminus;
222  }
223 
225  void setYErrPlus(double eyplus) {
226  _ey.second = eyplus;
227  }
228 
230  void setYErr(double ey) {
231  setYErrMinus(ey);
232  setYErrPlus(ey);
233  }
234 
236  void setYErrs(double ey) {
237  setYErr(ey);
238  }
239 
241  void setYErrs(double eyminus, double eyplus) {
242  setYErrMinus(eyminus);
243  setYErrPlus(eyplus);
244  }
245 
247  void setYErrs(const std::pair<double,double>& ey) {
248  _ey = ey;
249  }
250 
252  double yMin() const {
253  return _y - _ey.first;
254  }
255 
257  double yMax() const {
258  return _y + _ey.second;
259  }
260 
262 
263 
265 
266 
267 
269  const std::pair<double,double>& zErrs( std::string source="") const {
270  if (!_ez.count(source)) throw RangeError("zErrs has no such key: "+source);
271  return _ez.at(source);
272  }
273 
275  double zErrMinus( std::string source="") const {
276  if (!_ez.count(source)) throw RangeError("zErrs has no such key: "+source);
277  return _ez.at(source).first;
278  }
279 
281  double zErrPlus( std::string source="") const {
282  if (!_ez.count(source)) throw RangeError("zErrs has no such key: "+source);
283  return _ez.at(source).second;
284  }
285 
287  double zErrAvg( std::string source="") const {
288  if (!_ez.count(source)) throw RangeError("zErrs has no such key: "+source);
289  return (_ez.at(source).first + _ez.at(source).second)/2.0;
290  }
291 
293  void setZErrMinus(double ezminus, std::string source="") {
294  if (!_ez.count(source)) _ez[source] = std::make_pair(0.,0.);
295  _ez.at(source).first = ezminus;
296  }
297 
299  void setZErrPlus(double ezplus, std::string source="") {
300  if (!_ez.count(source)) _ez[source] = std::make_pair(0.,0.);
301  _ez.at(source).second = ezplus;
302  }
303 
305  void setZErr(double ez, std::string source="") {
306  setZErrMinus(ez, source);
307  setZErrPlus(ez, source);
308  }
309 
311  void setZErrs(double ez, std::string source="") {
312  setZErr(ez, source);
313  }
314 
316  void setZErrs(double ezminus, double ezplus, std::string source="") {
317  setZErrMinus(ezminus, source);
318  setZErrPlus(ezplus, source);
319  }
320 
322  void setZErrs(const std::pair<double,double>& ez, std::string source="") {
323  _ez[source] = ez;
324  }
325 
327  double zMin( std::string source="") const {
328  if (!_ez.count(source)) throw RangeError("zErrs has no such key: "+source);
329  return _z - _ez.at(source).first;
330  }
331 
333  double zMax( std::string source="") const {
334  if (!_ez.count(source)) throw RangeError("zErrs has no such key: "+source);
335  return _z + _ez.at(source).second;
336  }
337 
339 
340 
342 
343 
345  void setX(double x, double ex) {
346  setX(x);
347  setXErrs(ex);
348  }
349 
351  void setX(double x, double exminus, double explus) {
352  setX(x);
353  setXErrs(exminus, explus);
354  }
355 
357  void setX(double x, std::pair<double,double>& ex) {
358  setX(x);
359  setXErrs(ex);
360  }
361 
362 
364  void setY(double y, double ey) {
365  setY(y);
366  setYErrs(ey);
367  }
368 
370  void setY(double y, double eyminus, double eyplus) {
371  setY(y);
372  setYErrs(eyminus, eyplus);
373  }
374 
376  void setY(double y, std::pair<double,double>& ey) {
377  setY(y);
378  setYErrs(ey);
379  }
380 
381 
383  void setZ(double z, double ez, std::string source="") {
384  setZ(z);
385  setZErrs(ez, source);
386  }
387 
389  void setZ(double z, double ezminus, double ezplus, std::string source="") {
390  setZ(z);
391  setZErrs(ezminus, ezplus, source);
392  }
393 
395  void setZ(double z, std::pair<double,double>& ez, std::string source="") {
396  setZ(z);
397  setZErrs(ez, source);
398  }
399 
401 
402 
403  // @name Manipulations
405 
407  void scaleX(double scalex) {
408  setX(x()*scalex);
409  setXErrs(xErrMinus()*scalex, xErrPlus()*scalex);
410  }
411 
413  void scaleY(double scaley) {
414  setY(y()*scaley);
415  setYErrs(yErrMinus()*scaley, yErrPlus()*scaley);
416  }
417 
419  void scaleZ(double scalez) {
420  setZ(z()*scalez);
421  for (const auto &source : _ez){
422  setZErrs(zErrMinus()*scalez, zErrPlus()*scalez, source.first);
423  }
424  }
425 
427  void scaleXYZ(double scalex, double scaley, double scalez) {
428  scaleX(scalex);
429  scaleY(scaley);
430  scaleZ(scalez);
431  }
432 
435  void scale(double scalex, double scaley, double scalez) {
436  scaleXYZ(scalex, scaley, scalez);
437  }
438 
440 
441 
443 
444 
446  double val(size_t i) const {
447  switch (i) {
448  case 1: return x();
449  case 2: return y();
450  case 3: return z();
451  default: throw RangeError("Invalid axis int, must be in range 1..dim");
452  }
453  }
455  void setVal(size_t i, double val) {
456  switch (i) {
457  case 1: setX(val); break;
458  case 2: setY(val); break;
459  case 3: setZ(val); break;
460  default: throw RangeError("Invalid axis int, must be in range 1..dim");
461  }
462  }
463 
465  const std::map< std::string, std::pair<double,double>> & errMap() const {
466  return _ez;
467  }
468 
470  const std::pair<double,double>& errs(size_t i, std::string source="") const {
471  switch (i) {
472  case 1: return xErrs();
473  case 2: return yErrs();
474  case 3: return zErrs(source);
475  default: throw RangeError("Invalid axis int, must be in range 1..dim");
476  }
477  }
479  double errMinus(size_t i, std::string source="") const {
480  switch (i) {
481  case 1: return xErrMinus();
482  case 2: return yErrMinus();
483  case 3: return zErrMinus(source);
484  default: throw RangeError("Invalid axis int, must be in range 1..dim");
485  }
486  }
488  double errPlus(size_t i, std::string source="") const {
489  switch (i) {
490  case 1: return xErrPlus();
491  case 2: return yErrPlus();
492  case 3: return zErrPlus(source);
493  default: throw RangeError("Invalid axis int, must be in range 1..dim");
494  }
495  }
497  double errAvg(size_t i, std::string source="") const {
498  switch (i) {
499  case 1: return xErrAvg();
500  case 2: return yErrAvg();
501  case 3: return zErrAvg(source);
502  default: throw RangeError("Invalid axis int, must be in range 1..dim");
503  }
504  }
505 
507  void setErrMinus(size_t i, double eminus, std::string source="") {
508  switch (i) {
509  case 1: setXErrMinus(eminus); break;
510  case 2: setYErrMinus(eminus); break;
511  case 3: setZErrMinus(eminus, source); break;
512  default: throw RangeError("Invalid axis int, must be in range 1..dim");
513  }
514  }
516  void setErrPlus(size_t i, double eplus, std::string source="") {
517  switch (i) {
518  case 1: setXErrPlus(eplus); break;
519  case 2: setYErrPlus(eplus); break;
520  case 3: setZErrPlus(eplus, source); break;
521  default: throw RangeError("Invalid axis int, must be in range 1..dim");
522  }
523  }
524 
526  void setErr(size_t i, double e, std::string source="") {
527  switch (i) {
528  case 1: setXErrs(e); break;
529  case 2: setYErrs(e); break;
530  case 3: setZErrs(e, source); break;
531  default: throw RangeError("Invalid axis int, must be in range 1..dim");
532  }
533  }
535  void setErrs(size_t i, double eminus, double eplus, std::string source="") {
536  switch (i) {
537  case 1: setXErrs(eminus, eplus); break;
538  case 2: setYErrs(eminus, eplus); break;
539  case 3: setZErrs(eminus, eplus, source); break;
540  default: throw RangeError("Invalid axis int, must be in range 1..dim");
541  }
542  }
544  void setErrs(size_t i, std::pair<double,double>& e, std::string source="") {
545  switch (i) {
546  case 1: setXErrs(e); break;
547  case 2: setYErrs(e); break;
548  case 3: setZErrs(e, source); break;
549  default: throw RangeError("Invalid axis int, must be in range 1..dim");
550  }
551  }
552 
554  void set(size_t i, double val, double e, std::string source="") {
555  switch (i) {
556  case 1: setX(val, e); break;
557  case 2: setY(val, e); break;
558  case 3: setZ(val, e, source); break;
559  default: throw RangeError("Invalid axis int, must be in range 1..dim");
560  }
561  }
563  void set(size_t i, double val, double eminus, double eplus, std::string source="") {
564  switch (i) {
565  case 1: setX(val, eminus, eplus); break;
566  case 2: setY(val, eminus, eplus); break;
567  case 3: setZ(val, eminus, eplus, source); break;
568  default: throw RangeError("Invalid axis int, must be in range 1..dim");
569  }
570  }
572  void set(size_t i, double val, std::pair<double,double>& e, std::string source="") {
573  switch (i) {
574  case 1: setX(val, e); break;
575  case 2: setY(val, e); break;
576  case 3: setZ(val, e, source); break;
577  default: throw RangeError("Invalid axis int, must be in range 1..dim");
578  }
579  }
580 
582 
583 
584  protected:
585 
587 
588 
589  double _x;
590  double _y;
591  double _z;
592  std::pair<double,double> _ex;
593  std::pair<double,double> _ey;
594  // a map of the errors for each source. Nominal stored under ""
595  // to ensure backward compatibility
596  std::map< std::string, std::pair<double,double> >_ez;
597 
599 
600  };
601 
602 
603 
605 
606 
608  inline bool operator==(const Point3D& a, const YODA::Point3D& b) {
609  const bool same_val = fuzzyEquals(a.x(), b.x()) && fuzzyEquals(a.y(), b.y());
610  const bool same_eminus = fuzzyEquals(a.xErrMinus(), b.xErrMinus()) &&
611  fuzzyEquals(a.yErrMinus(), b.yErrMinus());
612  const bool same_eplus = fuzzyEquals(a.xErrPlus(), b.xErrPlus()) &&
613  fuzzyEquals(a.yErrPlus(), b.yErrPlus());
614  return same_val && same_eminus && same_eplus;
615  }
616 
618  inline bool operator != (const Point3D& a, const YODA::Point3D& b) {
619  return !(a == b);
620  }
621 
623  inline bool operator < (const Point3D& a, const YODA::Point3D& b) {
624  if (! fuzzyEquals(a.x(), b.x())) {
625  return a.x() < b.x();
626  }
627  if (!fuzzyEquals(a.y(), b.y())) {
628  return a.y() < b.y();
629  }
630  if (! fuzzyEquals(a.xErrMinus(), b.xErrMinus())) {
631  return a.xErrMinus() < b.xErrMinus();
632  }
633  if (!fuzzyEquals(a.yErrMinus(), b.yErrMinus())) {
634  return a.yErrMinus() < b.yErrMinus();
635  }
636  if (! fuzzyEquals(a.xErrPlus(), b.xErrPlus())) {
637  return a.xErrPlus() < b.xErrPlus();
638  }
639  if (!fuzzyEquals(a.yErrPlus(), b.yErrPlus())) {
640  return a.yErrPlus() < b.yErrPlus();
641  }
642  return false;
643  }
644 
646  inline bool operator <= (const Point3D& a, const YODA::Point3D& b) {
647  if (a == b) return true;
648  return a < b;
649  }
650 
652  inline bool operator > (const Point3D& a, const YODA::Point3D& b) {
653  return !(a <= b);
654  }
655 
657  inline bool operator >= (const Point3D& a, const YODA::Point3D& b) {
658  return !(a < b);
659  }
660 
662 
663 
664 }
665 
666 #endif
Point3D & operator=(const Point3D &p)
Copy assignment.
Definition: Point3D.h:73
void setErrMinus(size_t i, double eminus, std::string source="")
Set negative error for direction i.
Definition: Point3D.h:507
void setXErrs(const std::pair< double, double > &ex)
Set asymmetric x error.
Definition: Point3D.h:179
void setY(double y, double eyminus, double eyplus)
Set y value and asymmetric error.
Definition: Point3D.h:370
double errPlus(size_t i, std::string source="") const
Get positive error value for direction i.
Definition: Point3D.h:488
void scaleY(double scaley)
Scaling of y axis.
Definition: Point3D.h:413
void setZErrs(const std::pair< double, double > &ez, std::string source="")
Set asymmetric z error.
Definition: Point3D.h:322
void setVal(size_t i, double val)
Set the point value for direction i.
Definition: Point3D.h:455
double zErrMinus(std::string source="") const
Get negative z-error value.
Definition: Point3D.h:275
double z() const
Get z value.
Definition: Point3D.h:109
void setYErrMinus(double eyminus)
Set negative y error.
Definition: Point3D.h:220
Base class for all Point*Ds, providing generic access to their numerical properties.
Definition: Point.h:15
void setXYZ(double x, double y, double z)
Set x, y and z values.
Definition: Point3D.h:120
double xErrPlus() const
Get positive x-error value.
Definition: Point3D.h:142
void setYErrs(double eyminus, double eyplus)
Set asymmetric y error.
Definition: Point3D.h:241
void setZ(double z, double ez, std::string source="")
Set z value and symmetric error.
Definition: Point3D.h:383
double errAvg(size_t i, std::string source="") const
Get average error value for direction i.
Definition: Point3D.h:497
double xErrAvg() const
Get average x-error value.
Definition: Point3D.h:147
Error for e.g. use of invalid bin ranges.
Definition: Exceptions.h:34
bool fuzzyEquals(double a, double b, double tolerance=1E-5)
Compare two floating point numbers for equality with a degree of fuzziness.
Definition: MathUtils.h:72
double zErrAvg(std::string source="") const
Get average z-error value.
Definition: Point3D.h:287
Point3D(double x, double y, double z, const std::pair< double, double > &ex, const std::pair< double, double > &ey, const std::pair< double, double > &ez, std::string source="")
Constructor from asymmetric errors given as vectors.
Definition: Point3D.h:54
double yMax() const
Get value plus positive y-error.
Definition: Point3D.h:257
const std::pair< double, double > & errs(size_t i, std::string source="") const
Get error values for direction i.
Definition: Point3D.h:470
void setYErrs(double ey)
Set symmetric y error (alias)
Definition: Point3D.h:236
void scaleZ(double scalez)
Scaling of z axis.
Definition: Point3D.h:419
double y() const
Get y value.
Definition: Point3D.h:103
double val(size_t i) const
Get the point value for direction i.
Definition: Point3D.h:446
bool operator<(const Bin1D< DBN > &a, const Bin1D< DBN > &b)
Bin1Ds are compared for axis sorting by lower edge position.
Definition: Bin1D.h:347
void setYErr(double ey)
Set symmetric y error.
Definition: Point3D.h:230
void setZErrMinus(double ezminus, std::string source="")
Set negative z error.
Definition: Point3D.h:293
void setZErrs(double ez, std::string source="")
Set symmetric z error (alias)
Definition: Point3D.h:311
size_t dim()
Space dimension of the point.
Definition: Point3D.h:90
const std::pair< double, double > & yErrs() const
Get y-error values.
Definition: Point3D.h:200
void setX(double x, double exminus, double explus)
Set x value and asymmetric error.
Definition: Point3D.h:351
bool operator>(const Error< N > &a, const Error< N > &b)
Greater-than operator used to sort errors.
Definition: ErrorND.h:206
A 3D data point to be contained in a Scatter3D.
Definition: Point3D.h:18
Point3D(double x, double y, double z, double exminus, double explus, double eyminus, double eyplus, double ezminus, double ezplus, std::string source="")
Constructor from values with explicit asymmetric errors.
Definition: Point3D.h:39
void setXErrPlus(double explus)
Set positive x error.
Definition: Point3D.h:157
void setY(double y, std::pair< double, double > &ey)
Set y value and asymmetric error.
Definition: Point3D.h:376
void setX(double x, double ex)
Set x value and symmetric error.
Definition: Point3D.h:345
void setY(double y, double ey)
Set y value and symmetric error.
Definition: Point3D.h:364
const std::pair< double, double > & xErrs() const
Get x-error values.
Definition: Point3D.h:132
void scale(double scalex, double scaley, double scalez)
Definition: Point3D.h:435
double yErrMinus() const
Get negative y-error value.
Definition: Point3D.h:205
void setErrs(size_t i, std::pair< double, double > &e, std::string source="")
Set asymmetric error for direction i.
Definition: Point3D.h:544
void setErrs(size_t i, double eminus, double eplus, std::string source="")
Set asymmetric error for direction i.
Definition: Point3D.h:535
void setZErr(double ez, std::string source="")
Set symmetric z error.
Definition: Point3D.h:305
double xMax() const
Get value plus positive x-error.
Definition: Point3D.h:189
void setErrPlus(size_t i, double eplus, std::string source="")
Set positive error for direction i.
Definition: Point3D.h:516
double zMax(std::string source="") const
Get value plus positive z-error.
Definition: Point3D.h:333
bool operator!=(const Error< N > &a, const Error< N > &b)
Inequality test.
Definition: ErrorND.h:180
void setErr(size_t i, double e, std::string source="")
Set symmetric error for direction i.
Definition: Point3D.h:526
void setYErrPlus(double eyplus)
Set positive y error.
Definition: Point3D.h:225
Point3D(const Point3D &p)
Copy constructor.
Definition: Point3D.h:66
double yMin() const
Get value minus negative y-error.
Definition: Point3D.h:252
void setZErrPlus(double ezplus, std::string source="")
Set positive z error.
Definition: Point3D.h:299
Point3D(double x, double y, double z, double ex=0.0, double ey=0.0, double ez=0.0, std::string source="")
Constructor from values with optional symmetric errors.
Definition: Point3D.h:29
const std::map< std::string, std::pair< double, double > > & errMap() const
Get error map for direction i.
Definition: Point3D.h:465
void setXErrs(double ex)
Set symmetric x error (alias)
Definition: Point3D.h:168
void setZ(double z, double ezminus, double ezplus, std::string source="")
Set z value and asymmetric error.
Definition: Point3D.h:389
bool operator>=(const Error< N > &a, const Error< N > &b)
Greater-than-or-equals operator used to sort errors.
Definition: ErrorND.h:212
void setX(double x, std::pair< double, double > &ex)
Set x value and asymmetric error.
Definition: Point3D.h:357
double xErrMinus() const
Get negative x-error value.
Definition: Point3D.h:137
void scaleXYZ(double scalex, double scaley, double scalez)
Scaling of all three axes.
Definition: Point3D.h:427
void setX(double x)
Set x value.
Definition: Point3D.h:100
void setZErrs(double ezminus, double ezplus, std::string source="")
Set asymmetric z error.
Definition: Point3D.h:316
double errMinus(size_t i, std::string source="") const
Get negative error value for direction i.
Definition: Point3D.h:479
void setZ(double z, std::pair< double, double > &ez, std::string source="")
Set z value and asymmetric error.
Definition: Point3D.h:395
void setY(double y)
Set y value.
Definition: Point3D.h:106
double yErrAvg() const
Get average y-error value.
Definition: Point3D.h:215
void setXErrMinus(double exminus)
Set negative x error.
Definition: Point3D.h:152
double zMin(std::string source="") const
Get value minus negative z-error.
Definition: Point3D.h:327
const std::pair< double, double > & zErrs(std::string source="") const
Get z-error values.
Definition: Point3D.h:269
void setYErrs(const std::pair< double, double > &ey)
Set asymmetric y error.
Definition: Point3D.h:247
void setXErr(double ex)
Set symmetric x error.
Definition: Point3D.h:162
void setZ(double z)
Set z value.
Definition: Point3D.h:112
double xMin() const
Get value minus negative x-error.
Definition: Point3D.h:184
double yErrPlus() const
Get positive y-error value.
Definition: Point3D.h:210
bool operator<=(const Error< N > &a, const Error< N > &b)
Less-than-or-equals operator used to sort errors.
Definition: ErrorND.h:199
double x() const
Get x value.
Definition: Point3D.h:97
void setXErrs(double exminus, double explus)
Set asymmetric x error.
Definition: Point3D.h:173
double zErrPlus(std::string source="") const
Get positive z-error value.
Definition: Point3D.h:281
void scaleX(double scalex)
Scaling of x axis.
Definition: Point3D.h:407
bool operator==(const Error< N > &a, const Error< N > &b)
Equality test.
Definition: ErrorND.h:169