DoubleGauss.hh

00001 
00002 // Fit function for "double gaussian" lineshapes
00003 
00004 #include <math.h>
00005 #include "TMath.h"
00006 
00007 // Here are the parameters for the fit:
00008 // x[0] = x
00009 // par[0] = f_bkg (0 to 1)
00010 // par[1] = m_bkg
00011 // par[2] = width
00012 // par[3] = mean
00013 // par[4] = amp2 (0 to .5)
00014 // par[5] = mean2 (relative to peak 1) 
00015 // par[6] = range.min
00016 // par[7] = range.max
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]; // x_max-x_min of fit region
00027         double mid = .5*(par[6]+par[7]); // x value at center of fit region
00028         
00029         // linear background 
00030         f = par[0]*(1+(x[0]-mid)*par[1])/delta;
00031         
00032         // gaussian signal
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         // second gaussian peakk
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 // Here are the parameters for the fit function doublegauss2:
00042 // x[0] = x
00043 // par[0] = f_bkg (0 to 1)
00044 // par[1] = m_bkg
00045 // par[2] = width
00046 // par[3] = mean of primary gaussian
00047 // par[4] = amp of secondary gaussian (0 to 1)
00048 // par[5] = ratio mean2/mean1
00049 // par[6] = range.min
00050 // par[7] = range.max
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;       // x_max-x_min of fit region
00069     double mid = 0.5 * (min + max); // x value at center of fit region
00070     
00071     // linear background
00072     f += f_bkg * (1.0 + (x[0] - mid) * m_bkg) / delta;
00073     
00074     // primary gaussian peak
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     // secondary guassian peak
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 }

Generated on Tue Nov 16 10:49:57 2010 for CUORE Software by  doxygen 1.5.6