-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSplitGaussian.h
48 lines (43 loc) · 1.48 KB
/
SplitGaussian.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#ifndef __SPLIT_GAUSSIAN_H__
#define __SPLIT_GAUSSIAN_H__
#include <cmath>
#include <vector>
#include <iostream>
class SplitGaussian {
public:
double amplitude;
double mode;
double lsigma;
double rsigma;
double area;
double mean;
double sigma;
double skew;
SplitGaussian();
SplitGaussian(double a, double m, double l, double r);
SplitGaussian operator+(const SplitGaussian &rhs) const;
SplitGaussian& operator+=(const SplitGaussian &rhs);
double operator[](double x) const;
double Area(double b1, double b2) const;
double CF(double x) const;
void Derive();
void InverseDerive();
double Distance(double x) const;
double BhattacharyyaDistance(SplitGaussian &g) const;
double BhattacharyyaDistance2(SplitGaussian &g) const;
double EarthsMoversDistance(SplitGaussian &g, double b1, double b2) const;
void Fit(std::vector<float>::iterator s, std::vector<float>::iterator e, double offset);
void Print(size_t verbosity=0) const {
std::cout << amplitude << " " << mode << " " << lsigma << " " << rsigma;
if (verbosity>0) std::cout << " " << area;
if (verbosity>1) std::cout << " " << mean;
if (verbosity>2) std::cout << " " << sigma;
if (verbosity>3) std::cout << " " << skew;
std::cout << "\n";
}
SplitGaussian Sub(double b1, double b2) const;
std::vector<float> Waveform(double b1, double b2, double spacing) const;
private:
double c1, c2, c3;
};
#endif