source: trunk/Mars/mbase/MMath.h @ 17161

Last change on this file since 17161 was 17161, checked in by tbretz, 7 years ago
Added a version of GetIntersectionPoint which allows to check for success.
File size: 4.0 KB
RevLine 
[3581]1#ifndef MARS_MMath
2#define MARS_MMath
3
[8978]4#ifndef _MATH_H
5#include <math.h>  // Needed for darwin
6#endif
7
[3581]8#ifndef ROOT_TMath
[7181]9#include <TMath.h> // TMath is included here for convinience
[3581]10#endif
11
[8178]12class TVector2;
[7181]13class TVector3;
[7409]14class TArrayD;
[7181]15
[5832]16namespace MMath
[3581]17{
[7719]18    Double_t GaussProb(Double_t x, Double_t sigma=1, Double_t mean=0);
[11426]19    Double_t GaussProb2D(Double_t x, Double_t sigma=1);
[4716]20
[9219]21    template <class Size, class Element> void ReSortImp(Size n, Element *a, Bool_t down=kFALSE);
22    void ReSort(Long64_t n, Short_t  *a, Bool_t down=kFALSE);
23    void ReSort(Long64_t n, Int_t    *a, Bool_t down=kFALSE);
24    void ReSort(Long64_t n, Float_t  *a, Bool_t down=kFALSE);
25    void ReSort(Long64_t n, Double_t *a, Bool_t down=kFALSE);
26
[7899]27    template <class Size, class Element> Double_t MedianDevImp(Size n, const Element *a) { Double_t med; return MedianDevImp(n, a, med); }
28    template <class Size, class Element> Double_t MedianDevImp(Size n, const Element *a, Double_t &med);
29    Double_t  MedianDev(Long64_t n, const Short_t  *a, Double_t &med);
30    Double_t  MedianDev(Long64_t n, const Int_t    *a, Double_t &med);
31    Double_t  MedianDev(Long64_t n, const Float_t  *a, Double_t &med);
32    Double_t  MedianDev(Long64_t n, const Double_t *a, Double_t &med);
33    Double_t  MedianDev(Long64_t n, const Long_t   *a, Double_t &med);
34    Double_t  MedianDev(Long64_t n, const Long64_t *a, Double_t &med);
[7867]35    Double_t  MedianDev(Long64_t n, const Short_t  *a);
36    Double_t  MedianDev(Long64_t n, const Int_t    *a);
37    Double_t  MedianDev(Long64_t n, const Float_t  *a);
38    Double_t  MedianDev(Long64_t n, const Double_t *a);
39    Double_t  MedianDev(Long64_t n, const Long_t   *a);
40    Double_t  MedianDev(Long64_t n, const Long64_t *a);
41
[5832]42    Double_t Significance(Double_t s, Double_t b);
43    Double_t SignificanceSym(Double_t s, Double_t b);
44    Double_t SignificanceLiMa(Double_t s, Double_t b, Double_t alpha=1);
45    Double_t SignificanceLiMaSigned(Double_t s, Double_t b, Double_t alpha=1);
[8989]46    Double_t SignificanceExc(Double_t s, Double_t b, Double_t alpha=1);
47    Double_t ErrorExc(Double_t s, Double_t b, Double_t alpha=1);
[3581]48
[6078]49    void ReducePrecision(Float_t &val);
[5956]50
[5832]51    TVector3 GetParab(const TVector3 &x, const TVector3 &y);
52    Double_t InterpolParabLin(const TVector3 &vx, const TVector3 &vy, Double_t x);
[8585]53    Double_t InterpolParabLin(const TVector3 &vy, Double_t x);
[5832]54    Double_t InterpolParabLog(const TVector3 &vx, const TVector3 &vy, Double_t x);
55    Double_t InterpolParabCos(const TVector3 &vx, const TVector3 &vy, Double_t x);
[7181]56
[17161]57    TVector2 GetIntersectionPoint(const TVector2 &x1, const TVector2 &y1, const TVector2 &x2, const TVector2 &y2, Bool_t &rc);
[8178]58    TVector2 GetIntersectionPoint(const TVector2 &x1, const TVector2 &y1, const TVector2 &x2, const TVector2 &y2);
59
[7999]60    inline Int_t SolvePol1(Double_t c, Double_t d, Double_t &x1)
61    {
62        if (c==0)
63            return 0;
64
65        x1 = -d/c;
66        return 1;
67    }
68    Int_t SolvePol2(Double_t c, Double_t d, Double_t &x1, Double_t &x2);
69    inline Int_t SolvePol2(Double_t b, Double_t c, Double_t d, Double_t &x1, Double_t &x2)
70    {
71        return b==0 ? SolvePol1(c, d, x1) : SolvePol2(c/b, d/b, x1, x2);
72    }
73    Int_t SolvePol3(Double_t b, Double_t c, Double_t d, Double_t &x1, Double_t &x2, Double_t &x3);
74    inline Int_t SolvePol3(Double_t a, Double_t b, Double_t c, Double_t d, Double_t &x1, Double_t &x2, Double_t &x3)
75    {
76        return a==0 ? SolvePol2(b, c, d, x1, x2) : SolvePol3(b/a, c/a, d/a, x1, x2, x3);
77    }
78
[7409]79    TArrayD LeastSqFitExpW1(Int_t n, Double_t *x, Double_t *y);
80    TArrayD LeastSqFitExp(Int_t n, Double_t *x, Double_t *y);
81    TArrayD LeastSqFitLog(Int_t n, Double_t *x, Double_t *y);
82    TArrayD LeastSqFitPowerLaw(Int_t n, Double_t *x, Double_t *y);
83
[8978]84    inline Int_t ModF(Double_t dbl, Double_t &frac) { Double_t rc; frac = ::modf(dbl, &rc); return TMath::Nint(rc); }
[7971]85
[8978]86    inline Double_t Sqrt3(Double_t x) { return ::cbrt(x); }
[7999]87
[7251]88    inline Double_t Sgn(Double_t d) { return d<0 ? -1 : 1; }
[8978]89
90    void Format(Double_t &v, Double_t &e);
[9226]91
92    Double_t RndmExp(Double_t tau);
[5832]93}
[4966]94
[3581]95#endif
Note: See TracBrowser for help on using the repository browser.