DoubleGauss.hh
00001
00002
00003
00004 #include <math.h>
00005 #include "TMath.h"
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 Double_t doublegauss(Double_t *x, Double_t *par);
00019
00020 Double_t doublegauss(Double_t *x, Double_t *par)
00021 {
00022 Double_t f;
00023
00024 static const double sqrt2Pi = 2.50662827;
00025
00026 double delta = par[7]-par[6];
00027 double mid = .5*(par[6]+par[7]);
00028
00029
00030 f = par[0]*(1+(x[0]-mid)*par[1])/delta;
00031
00032
00033 f += ((1-par[0])/(sqrt(par[2]*par[2])*sqrt2Pi))*(1-par[4])*exp(-(x[0]-par[3])*(x[0]-par[3])/(2*par[2]*par[2]));
00034
00035 f += ((1-par[0])/(sqrt(par[2]*par[2])*sqrt2Pi))*(par[4])*exp(-(x[0]-(par[3]+par[5]))*(x[0]-(par[3]+par[5]))/(2*par[2]*par[2]));
00036
00037 return f;
00038 }
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 Double_t doublegauss2(Double_t *x, Double_t *par)
00053 {
00054 Double_t f = 0;
00055
00056 static const double sqrt2Pi = 2.50662827;
00057
00058 Double_t f_bkg = par[0];
00059 Double_t m_bkg = par[1];
00060 Double_t width = par[2];
00061 Double_t mean1 = par[3];
00062 Double_t amp2 = par[4];
00063 Double_t mean_ratio = par[5];
00064 Double_t mean2 = mean1 * mean_ratio;
00065 Double_t min = par[6];
00066 Double_t max = par[7];
00067
00068 double delta = max - min;
00069 double mid = 0.5 * (min + max);
00070
00071
00072 f += f_bkg * (1.0 + (x[0] - mid) * m_bkg) / delta;
00073
00074
00075 f += (1.0 - f_bkg) * (1.0 - amp2) / (sqrt2Pi * sqrt(width*width))
00076 * exp( -(x[0] - mean1) * (x[0] - mean1) / (2.0 * width * width) );
00077
00078
00079 f += (1.0 - f_bkg) * amp2 / (sqrt2Pi * sqrt(width*width))
00080 * exp( -(x[0] - mean2) * (x[0] - mean2) / (2.0 * width * width) );
00081
00082 return f;
00083 }