GET library
GETSignalFunctions.hh
Go to the documentation of this file.
1 //======================================================================
2 /*! \file GETSignalFunctions.hh
3  *
4  * Include file for signal analysis functions.
5  */
6 //======================================================================
7 
8 #ifndef GET_SIGNAL_FUNCTIONS_HH
9 #define GET_SIGNAL_FUNCTIONS_HH
10 
11 //----------------------------------------------------------------------
12 
13 #include "GETChannel.hh"
14 
15 //! Value of sqrt(2*pi) constant
16 #define GET_SQRT_2PI 2.506628274631000241612
17 
18 //! Conversion factor from standard deviation to FWHM
19 #define GET_SIGMA_TO_FWHM 2.354820045030949327014013761072419583797L
20 
21 //! Conversion factor from FWHM to standard deviation
22 #define GET_FWHM_TO_SIGMA 0.424660900144009534340483469350147061050L
23 
24 //----------------------------------------------------------
25 
26 // global variable for integration step.
27 extern u_int getIntegPoints;
28 extern double getIntegStep;
29 
30 // global variables for convolution with the GSC function
31 extern u_int getGSCConvPoints;
32 extern double getGSCConvWidth;
33 
34 
35 //----------------------------------------------------------
36 /** @name Base function */
37 //@{
38 
39 extern double GETGaus ( const double x[], const double p[] ); // inline
40 extern double GETGaus ( double t, double srf, double ctr, double sig );
41 
42 extern double GETSinC ( const double x[], const double p[] ); // inline
43 extern double GETSinC ( double t, double srf, double ctr, double scw );
44 
45 extern double GETSquare ( const double x[], const double p[] );
46 extern double GETSquare ( double t, double srf, double ctr, double wid );
47 
48 extern double GETGausSinC ( const double x[], const double p[] ); // inline
49 extern double GETGausSinC ( double t, double srf, double ctr, double sig, double w );
50 //@}
51 
52 
53 //----------------------------------------------------------
54 /** @name Functions for fitting the signals */
55 //@{
56 
57 // convolution of a centered square distribution with a Gauss or GSC function
58 extern double GETSquareGaus ( const double x[], const double p[] ); // inline
59 extern double GETSquareGaus ( double t, double srf, double ctr, double wid, double sig, double bg );
60 
61 extern double GETSquareSinC ( const double x[], const double p[] ); // inline
62 extern double GETSquareSinC ( double t, double srf, double ctr, double wid, double scw, double bg );
63 
64 extern double GETSquareGSC ( const double x[], const double p[] ); // inline
65 extern double GETSquareGSC ( double t, double srf, double ctr, double wid, double sig, double scw, double bg );
66 
67 
68 // --- obsolete functions ---
69 extern double GETConvolutionSinC ( double t, double scw,
70  double(*fct)(const double[], const double[]),
71  const double pf[] );
72 extern double GETConvolutionGSC ( double t, double sig, double scw,
73  double(*fct)(const double[], const double[]),
74  const double pf[] );
75 
76 // --- obsolete functions ---
77 // convolution of a square distribution with a Gauss function
78 extern double GETSquareCurrent ( const double x[], const double p[] );
79 extern double GETSquareCurrentGaus ( const double x[], const double p[] );
80 extern double GETSquareCurrentGSC ( const double x[], const double p[] );
81 
82 // --- obsolete functions ---
83 // same as the previous one, but the time information is the dist. center
84 extern double GETSquareCurrent2 ( const double x[], const double p[] );
85 extern double GETSquareCurrent2Gaus ( const double x[], const double p[] );
86 extern double GETSquareCurrent2GSC ( const double x[], const double p[] );
87 
88 //@}
89 
90 //======================================================================
91 // Inline functions
92 
93 /*! Gaus function with integral parameter.
94  * - p[0] integral
95  * - p[1] center
96  * - p[2] sigma
97  * \param x array of coordinates (only x[0] is used)
98  * \param p array of parameters
99  */
100 inline double GETGaus ( const double x[], const double p[] )
101  { return ( GETGaus (x[0], p[0], p[1], p[2]) ); }
102 
103 /*! SinC function with integral parameter.
104  * - p[0] integral
105  * - p[1] center
106  * - p[2] scale factor
107  * \param x array of coordinates (only x[0] is used)
108  * \param p array of parameters
109  */
110 inline double GETSinC ( const double x[], const double p[] )
111  { return ( GETSinC (x[0], p[0], p[1], p[2]) ); }
112 
113 /*! Function for a square current distribution.
114  * - p[0] total charge: time width multiplied by the current value
115  * - p[1] distribution center time
116  * - p[2] width of the square current
117  * \param x coordinates array (only 1 used)
118  * \param p parameters array
119  */
120 inline double GETSquare ( const double x[], const double p[] )
121  { return ( GETSquare (x[0], p[0], p[1], p[2]) ); }
122 
123 /*! Product of a Gaus function with sinc function: G(x) * sin(x/w) / (x/w).
124  * - p[0] amplitude
125  * - p[1] center
126  * - p[2] sigma
127  * - p[3] sin cardinal dilatation factor
128  * \param x array of coordinates (only x[0] is used)
129  * \param p array of parameters
130  */
131 inline double GETGausSinC ( const double x[], const double p[] )
132  { return ( GETGausSinC (x[0], p[0], p[1], p[2], p[3]) ); }
133 
134 /*! Function for a square current distribution, convoluted with
135  * a gaus function (smoothing).
136  * - p[0] total charge: time width multiplied by the current value
137  * - p[1] distribution center time
138  * - p[2] width of the square current
139  * - p[3] sigma of the convolution gaus function
140  * - p[4] offset (background)
141  * \param x array of coordinates (only x[0] is used)
142  * \param p array of parameters
143  */
144 inline double GETSquareGaus ( const double x[], const double p[] )
145  { return ( GETSquareGaus (x[0], p[0], p[1], p[2], p[3], p[4]) ); }
146 
147 /*! Function for a square current distribution, convoluted with
148  * a SinC function.
149  * - p[0] total charge: time width multiplied by the current value
150  * - p[1] distribution center time
151  * - p[2] width of the square current
152  * - p[3] sinc coordinate factor
153  * - p[4] offset (background)
154  * \param x coordinates array (only 1 used)
155  * \param p parameters array
156  */
157 inline double GETSquareSinC ( const double x[], const double p[] )
158  { return ( GETSquareSinC (x[0], p[0], p[1], p[2], p[3], p[4] ) ); }
159 
160 /*! Function for a square current distribution, convoluted with
161  * a Gaus x SinC function.
162  * - p[0] total charge: time width multiplied by the current value
163  * - p[1] distribution center time
164  * - p[2] width of the square current
165  * - p[3] sigma of the convolution gaus function
166  * - p[4] sinc coordinate factor
167  * - p[5] offset (background)
168  * \param x coordinates array (only 1 used)
169  * \param p parameters array
170  */
171 inline double GETSquareGSC ( const double x[], const double p[] )
172  { return ( GETSquareGSC (x[0], p[0], p[1], p[2], p[3], p[4], p[5]) ); }
173 
174 //----------------------------------------------------------------------
175 #endif
double GETSquareCurrent(const double x[], const double p[])
Definition: GETSignalFunctions.cpp:274
double GETGausSinC(double t, double srf, double ctr, double sig, double scw)
Definition: GETSignalFunctions.cpp:96
u_int getIntegPoints
Definition: GETSignalFunctions.cpp:11
double GETConvolutionSinC(double t, double scw, double(*fct)(const double[], const double[]), const double pf[])
Definition: GETSignalFunctions.cpp:217
double getGSCConvWidth
Definition: GETSignalFunctions.cpp:22
double GETSquareCurrent2GSC(const double x[], const double p[])
Definition: GETSignalFunctions.cpp:391
double GETSinC(double t, double srf, double ctr, double scw)
Definition: GETSignalFunctions.cpp:54
double GETSquareCurrent2(const double x[], const double p[])
Definition: GETSignalFunctions.cpp:341
double GETSquareCurrent2Gaus(const double x[], const double p[])
Definition: GETSignalFunctions.cpp:364
double GETGaus(double t, double srf, double ctr, double sig)
Definition: GETSignalFunctions.cpp:38
double GETSquareGaus(double t, double srf, double ctr, double wid, double sig, double bg)
Definition: GETSignalFunctions.cpp:124
double GETSquareSinC(double t, double srf, double ctr, double wid, double scw, double bg)
Definition: GETSignalFunctions.cpp:149
double GETConvolutionGSC(double t, double sig, double scw, double(*fct)(const double[], const double[]), const double pf[])
Definition: GETSignalFunctions.cpp:246
u_int getGSCConvPoints
Definition: GETSignalFunctions.cpp:17
double getIntegStep
Definition: GETSignalFunctions.cpp:14
double GETSquareGSC(double t, double srf, double ctr, double wid, double sig, double scw, double bg)
Definition: GETSignalFunctions.cpp:182
double GETSquareCurrentGaus(const double x[], const double p[])
Definition: GETSignalFunctions.cpp:296
double GETSquare(double t, double srf, double ctr, double wid)
Definition: GETSignalFunctions.cpp:75
double GETSquareCurrentGSC(const double x[], const double p[])
Definition: GETSignalFunctions.cpp:322