source: trunk/projects/slim-curve/src/main/c/Ecf.h @ 7781

Revision 7781, 9.4 KB checked in by paulbarber, 8 years ago (diff)

Added GPL license to all source code.

Line 
1/*
2This file is part of the SLIM-curve package for exponential curve fitting of spectral lifetime data.
3
4Copyright (c) 2010, 2011, Gray Institute University of Oxford & UW-Madison LOCI.
5
6    This program is free software: you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation, either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20/* This is Ecf.h, the public header file for the 2003 version of the
21   ECF library. */
22
23#ifndef _GCI_ECF
24#define _GCI_ECF
25
26/* #defines which are publically needed */
27
28typedef enum { NOISE_CONST, NOISE_GIVEN, NOISE_POISSON_DATA,
29               NOISE_POISSON_FIT, NOISE_GAUSSIAN_FIT, NOISE_MLE } noise_type;
30
31typedef enum { FIT_GLOBAL_MULTIEXP, FIT_GLOBAL_STRETCHEDEXP } fit_type;
32
33typedef enum { ECF_RESTRAIN_DEFAULT, ECF_RESTRAIN_USER } restrain_type;
34
35/* Single transient analysis functions */
36
37// the next fn uses GCI_triple_integral_*() to fit repeatedly until chisq_target is met
38int GCI_triple_integral_fitting_engine(float xincr, float y[], int fit_start, int fit_end,
39                                                          float instr[], int ninstr, noise_type noise, float sig[],
40                                                          float *Z, float *A, float *tau, float *fitted, float *residuals,
41                                                          float *chisq, float chisq_target);
42// the next fn uses GCI_marquardt_instr() to fit repeatedly until chisq_target is met
43int GCI_marquardt_fitting_engine(float xincr, float *trans, int ndata, int fit_start, int fit_end, 
44                                                float prompt[], int nprompt,
45                                                noise_type noise, float sig[],
46                                                float param[], int paramfree[],
47                                           int nparam, restrain_type restrain,
48                                           void (*fitfunc)(float, float [], float *, float [], int),
49                                           float *fitted, float *residuals, float *chisq,
50                                           float **covar, float **alpha, float **erraxes,
51                                           float chisq_target, float chisq_delta, int chisq_percent);
52
53int GCI_triple_integral(float xincr, float y[],
54                                                int fit_start, int fit_end,
55                                                noise_type noise, float sig[],
56                                                float *Z, float *A, float *tau,
57                                                float *fitted, float *residuals,
58                                                float *chisq, int division);
59int GCI_triple_integral_instr(float xincr, float y[],
60                                                          int fit_start, int fit_end,
61                                                          float instr[], int ninstr,
62                                                          noise_type noise, float sig[],
63                                                          float *Z, float *A, float *tau,
64                                                          float *fitted, float *residuals,
65                                                          float *chisq, int division);
66
67int GCI_marquardt(float x[], float y[], int ndata,
68                                  noise_type noise, float sig[],
69                                  float param[], int paramfree[], int nparam,
70                                  restrain_type restrain,
71                                  void (*fitfunc)(float, float [], float *, float [], int),
72                                  float *fitted, float *residuals,
73                                  float **covar, float **alpha, float *chisq,
74                                  float chisq_delta, float chisq_percent, float **erraxes);
75int GCI_marquardt_instr(float xincr, float y[],
76                                        int ndata, int fit_start, int fit_end,
77                                        float instr[], int ninstr,
78                                        noise_type noise, float sig[],
79                                        float param[], int paramfree[], int nparam,
80                                        restrain_type restrain,
81                                        void (*fitfunc)(float, float [], float *, float [], int),
82                                        float *fitted, float *residuals,
83                                        float **covar, float **alpha, float *chisq,
84                                        float chisq_delta, float chisq_percent, float **erraxes);
85void GCI_marquardt_cleanup(void);
86
87/* Global analysis analysis functions */
88
89int GCI_marquardt_global_exps_instr(float xincr, float **trans,
90                                        int ndata, int ntrans, int fit_start, int fit_end,
91                                        float instr[], int ninstr,
92                                        noise_type noise, float sig[], int ftype,
93                                        float **param, int paramfree[], int nparam,
94                                        restrain_type restrain, float chisq_delta, 
95                                        float **fitted, float **residuals,
96                                        float chisq_trans[], float *chisq_global, int *df,
97                                        int drop_bad_transients);
98int GCI_marquardt_global_generic_instr(float xincr, float **trans,
99                                        int ndata, int ntrans, int fit_start, int fit_end,
100                                        float instr[], int ninstr,
101                                        noise_type noise, float sig[],
102                                        float **param, int paramfree[], int nparam, int gparam[],
103                                        restrain_type restrain, float chisq_delta, 
104                                        void (*fitfunc)(float, float [], float *, float [], int),
105                                        float **fitted, float **residuals,
106                                        float chisq_trans[], float *chisq_global, int *df);
107
108/* Support plane analysis functions */
109
110int GCI_SPA_1D_marquardt(
111                                float x[], float y[], int ndata,
112                                noise_type noise, float sig[],
113                                float param[], int paramfree[], int nparam,
114                                restrain_type restrain, float chisq_delta,
115                                void (*fitfunc)(float, float [], float *, float [], int),
116                                int spa_param, int spa_nvalues,
117                                float spa_low, float spa_high,
118                                float chisq[], void (*progressfunc)(float));
119int GCI_SPA_2D_marquardt(
120                                float x[], float y[], int ndata,
121                                noise_type noise, float sig[],
122                                float param[], int paramfree[], int nparam,
123                                restrain_type restrain, float chisq_delta,
124                                void (*fitfunc)(float, float [], float *, float [], int),
125                                int spa_param1, int spa_nvalues1,
126                                float spa_low1, float spa_high1,
127                                int spa_param2, int spa_nvalues2,
128                                float spa_low2, float spa_high2,
129                                float **chisq, void (*progressfunc)(float));
130int GCI_SPA_1D_marquardt_instr(
131                                float xincr, float y[],
132                                int ndata, int fit_start, int fit_end,
133                                float instr[], int ninstr,
134                                noise_type noise, float sig[],
135                                float param[], int paramfree[], int nparam,
136                                restrain_type restrain, float chisq_delta,
137                                void (*fitfunc)(float, float [], float *, float [], int),
138                                int spa_param, int spa_nvalues,
139                                float spa_low, float spa_high,
140                                float chisq[], float chisq_target, void (*progressfunc)(float));
141int GCI_SPA_2D_marquardt_instr(
142                                float xincr, float y[],
143                                int ndata, int fit_start, int fit_end,
144                                float instr[], int ninstr,
145                                noise_type noise, float sig[],
146                                float param[], int paramfree[], int nparam,
147                                restrain_type restrain, float chisq_delta,
148                                void (*fitfunc)(float, float [], float *, float [], int),
149                                int spa_param1, int spa_nvalues1,
150                                float spa_low1, float spa_high1,
151                                int spa_param2, int spa_nvalues2,
152                                float spa_low2, float spa_high2,
153                                float **chisq, float chisq_target, void (*progressfunc)(float));
154int GCI_SPA_1D_marquardt_global_exps_instr(
155                                        float xincr, float **trans,
156                                        int ndata, int ntrans, int fit_start, int fit_end,
157                                        float instr[], int ninstr,
158                                        noise_type noise, float sig[], int ftype,
159                                        float **param, int paramfree[], int nparam,
160                                        restrain_type restrain, float chisq_delta, int drop_bad_transients,
161                                        int spa_param, int spa_nvalues,
162                                        float spa_low, float spa_high,
163                                        float chisq_global[], int df[], void (*progressfunc)(float));
164int GCI_SPA_2D_marquardt_global_exps_instr(
165                                        float xincr, float **trans,
166                                        int ndata, int ntrans, int fit_start, int fit_end,
167                                        float instr[], int ninstr,
168                                        noise_type noise, float sig[], int ftype,
169                                        float **param, int paramfree[], int nparam,
170                                        restrain_type restrain, float chisq_delta, int drop_bad_transients,
171                                        int spa_param1, int spa_nvalues1,
172                                        float spa_low1, float spa_high1,
173                                        int spa_param2, int spa_nvalues2,
174                                        float spa_low2, float spa_high2,
175                                        float **chisq_global, int **df, void (*progressfunc)(float));
176int GCI_SPA_1D_marquardt_global_generic_instr(
177                                        float xincr, float **trans,
178                                        int ndata, int ntrans, int fit_start, int fit_end,
179                                        float instr[], int ninstr,
180                                        noise_type noise, float sig[],
181                                        float **param, int paramfree[], int nparam, int gparam[],
182                                        restrain_type restrain, float chisq_delta,
183                                        void (*fitfunc)(float, float [], float *, float [], int),
184                                        int spa_param, int spa_nvalues,
185                                        float spa_low, float spa_high,
186                                        float chisq_global[], int df[], void (*progressfunc)(float));
187int GCI_SPA_2D_marquardt_global_generic_instr(
188                                        float xincr, float **trans,
189                                        int ndata, int ntrans, int fit_start, int fit_end,
190                                        float instr[], int ninstr,
191                                        noise_type noise, float sig[],
192                                        float **param, int paramfree[], int nparam, int gparam[],
193                                        restrain_type restrain, float chisq_delta,
194                                        void (*fitfunc)(float, float [], float *, float [], int),
195                                        int spa_param1, int spa_nvalues1,
196                                        float spa_low1, float spa_high1,
197                                        int spa_param2, int spa_nvalues2,
198                                        float spa_low2, float spa_high2,
199                                        float **chisq_global, int **df, void (*progressfunc)(float));
200
201/* Setting restraints */
202
203int GCI_set_restrain_limits(int nparam, int restrain[],
204                                                        float minval[], float maxval[]);
205
206/* Predefined fitting models */
207
208void GCI_multiexp_lambda(float x, float param[],
209                         float *y, float dy_dparam[], int nparam);
210void GCI_multiexp_tau(float x, float param[],
211                      float *y, float dy_dparam[], int nparam);
212void GCI_stretchedexp(float x, float param[],
213                      float *y, float dy_dparam[], int nparam);
214
215/* Utility functions */
216float **GCI_ecf_matrix(long nrows, long ncols);
217void GCI_ecf_free_matrix(float **m);
218
219void ECF_ExportParams_start (char path[]);
220void ECF_ExportParams_stop (void);
221
222#endif /* _GCI_ECF */
223
224// Emacs settings:
225// Local variables:
226// mode: c
227// c-basic-offset: 4
228// tab-width: 4
229// End:
Note: See TracBrowser for help on using the repository browser.