source: branches/maven/projects/slim-curve/src/main/c/ecf.h @ 7387

Revision 7387, 8.6 KB checked in by aivar, 9 years ago (diff)

A version of Paul Barber's ECF library with functions used in SLIM Plugin. These have been rewritten to remove NR dependencies. Functions not used and other code that still uses NR all removed.

Line 
1/* This is Ecf.h, the public header file for the 2003 version of the
2   ECF library. */
3
4#ifndef _GCI_ECF
5#define _GCI_ECF
6
7#define ELIMINATE_NR 1 //TODO ARG 9/14/10
8
9/* #defines which are publically needed */
10
11typedef enum { NOISE_CONST, NOISE_GIVEN, NOISE_POISSON_DATA,
12               NOISE_POISSON_FIT, NOISE_GAUSSIAN_FIT, NOISE_MLE } noise_type;
13
14typedef enum { FIT_GLOBAL_MULTIEXP, FIT_GLOBAL_STRETCHEDEXP } fit_type;
15
16typedef enum { ECF_RESTRAIN_DEFAULT, ECF_RESTRAIN_USER } restrain_type;
17
18/* Single transient analysis functions */
19
20// the next fn uses GCI_triple_integral_*() to fit repeatedly until chisq_target is met
21int GCI_triple_integral_fitting_engine(float xincr, float y[], int fit_start, int fit_end,
22                                                          float instr[], int ninstr, noise_type noise, float sig[],
23                                                          float *Z, float *A, float *tau, float *fitted, float *residuals,
24                                                          float *chisq, float chisq_target);
25// the next fn uses GCI_marquardt_instr() to fit repeatedly until chisq_target is met
26int GCI_marquardt_fitting_engine(float xincr, float *trans, int ndata, int fit_start, int fit_end, 
27                                                float prompt[], int nprompt,
28                                                noise_type noise, float sig[],
29                                                float param[], int paramfree[],
30                                           int nparam, restrain_type restrain,
31                                           void (*fitfunc)(float, float [], float *, float [], int),
32                                           float *fitted, float *residuals, float *chisq,
33                                           float **covar, float **alpha, float **erraxes,
34                                           float chisq_target, float chisq_delta, int chisq_percent);
35
36int GCI_triple_integral(float xincr, float y[],
37                                                int fit_start, int fit_end,
38                                                noise_type noise, float sig[],
39                                                float *Z, float *A, float *tau,
40                                                float *fitted, float *residuals,
41                                                float *chisq, int division);
42int GCI_triple_integral_instr(float xincr, float y[],
43                                                          int fit_start, int fit_end,
44                                                          float instr[], int ninstr,
45                                                          noise_type noise, float sig[],
46                                                          float *Z, float *A, float *tau,
47                                                          float *fitted, float *residuals,
48                                                          float *chisq, int division);
49
50int GCI_marquardt(float x[], float y[], int ndata,
51                                  noise_type noise, float sig[],
52                                  float param[], int paramfree[], int nparam,
53                                  restrain_type restrain,
54                                  void (*fitfunc)(float, float [], float *, float [], int),
55                                  float *fitted, float *residuals,
56                                  float **covar, float **alpha, float *chisq,
57                                  float chisq_delta, float chisq_percent, float **erraxes);
58int GCI_marquardt_instr(float xincr, float y[],
59                                        int ndata, int fit_start, int fit_end,
60                                        float instr[], int ninstr,
61                                        noise_type noise, float sig[],
62                                        float param[], int paramfree[], int nparam,
63                                        restrain_type restrain,
64                                        void (*fitfunc)(float, float [], float *, float [], int),
65                                        float *fitted, float *residuals,
66                                        float **covar, float **alpha, float *chisq,
67                                        float chisq_delta, float chisq_percent, float **erraxes);
68void GCI_marquardt_cleanup(void);
69
70/* Global analysis analysis functions */
71
72int GCI_marquardt_global_exps_instr(float xincr, float **trans,
73                                        int ndata, int ntrans, int fit_start, int fit_end,
74                                        float instr[], int ninstr,
75                                        noise_type noise, float sig[], int ftype,
76                                        float **param, int paramfree[], int nparam,
77                                        restrain_type restrain, float chisq_delta, 
78                                        float **fitted, float **residuals,
79                                        float chisq_trans[], float *chisq_global, int *df,
80                                        int drop_bad_transients);
81int GCI_marquardt_global_generic_instr(float xincr, float **trans,
82                                        int ndata, int ntrans, int fit_start, int fit_end,
83                                        float instr[], int ninstr,
84                                        noise_type noise, float sig[],
85                                        float **param, int paramfree[], int nparam, int gparam[],
86                                        restrain_type restrain, float chisq_delta, 
87                                        void (*fitfunc)(float, float [], float *, float [], int),
88                                        float **fitted, float **residuals,
89                                        float chisq_trans[], float *chisq_global, int *df);
90
91/* Support plane analysis functions */
92
93int GCI_SPA_1D_marquardt(
94                                float x[], float y[], int ndata,
95                                noise_type noise, float sig[],
96                                float param[], int paramfree[], int nparam,
97                                restrain_type restrain, float chisq_delta,
98                                void (*fitfunc)(float, float [], float *, float [], int),
99                                int spa_param, int spa_nvalues,
100                                float spa_low, float spa_high,
101                                float chisq[], void (*progressfunc)(float));
102int GCI_SPA_2D_marquardt(
103                                float x[], float y[], int ndata,
104                                noise_type noise, float sig[],
105                                float param[], int paramfree[], int nparam,
106                                restrain_type restrain, float chisq_delta,
107                                void (*fitfunc)(float, float [], float *, float [], int),
108                                int spa_param1, int spa_nvalues1,
109                                float spa_low1, float spa_high1,
110                                int spa_param2, int spa_nvalues2,
111                                float spa_low2, float spa_high2,
112                                float **chisq, void (*progressfunc)(float));
113int GCI_SPA_1D_marquardt_instr(
114                                float xincr, float y[],
115                                int ndata, int fit_start, int fit_end,
116                                float instr[], int ninstr,
117                                noise_type noise, float sig[],
118                                float param[], int paramfree[], int nparam,
119                                restrain_type restrain, float chisq_delta,
120                                void (*fitfunc)(float, float [], float *, float [], int),
121                                int spa_param, int spa_nvalues,
122                                float spa_low, float spa_high,
123                                float chisq[], float chisq_target, void (*progressfunc)(float));
124int GCI_SPA_2D_marquardt_instr(
125                                float xincr, float y[],
126                                int ndata, int fit_start, int fit_end,
127                                float instr[], int ninstr,
128                                noise_type noise, float sig[],
129                                float param[], int paramfree[], int nparam,
130                                restrain_type restrain, float chisq_delta,
131                                void (*fitfunc)(float, float [], float *, float [], int),
132                                int spa_param1, int spa_nvalues1,
133                                float spa_low1, float spa_high1,
134                                int spa_param2, int spa_nvalues2,
135                                float spa_low2, float spa_high2,
136                                float **chisq, float chisq_target, void (*progressfunc)(float));
137int GCI_SPA_1D_marquardt_global_exps_instr(
138                                        float xincr, float **trans,
139                                        int ndata, int ntrans, int fit_start, int fit_end,
140                                        float instr[], int ninstr,
141                                        noise_type noise, float sig[], int ftype,
142                                        float **param, int paramfree[], int nparam,
143                                        restrain_type restrain, float chisq_delta, int drop_bad_transients,
144                                        int spa_param, int spa_nvalues,
145                                        float spa_low, float spa_high,
146                                        float chisq_global[], int df[], void (*progressfunc)(float));
147int GCI_SPA_2D_marquardt_global_exps_instr(
148                                        float xincr, float **trans,
149                                        int ndata, int ntrans, int fit_start, int fit_end,
150                                        float instr[], int ninstr,
151                                        noise_type noise, float sig[], int ftype,
152                                        float **param, int paramfree[], int nparam,
153                                        restrain_type restrain, float chisq_delta, int drop_bad_transients,
154                                        int spa_param1, int spa_nvalues1,
155                                        float spa_low1, float spa_high1,
156                                        int spa_param2, int spa_nvalues2,
157                                        float spa_low2, float spa_high2,
158                                        float **chisq_global, int **df, void (*progressfunc)(float));
159int GCI_SPA_1D_marquardt_global_generic_instr(
160                                        float xincr, float **trans,
161                                        int ndata, int ntrans, int fit_start, int fit_end,
162                                        float instr[], int ninstr,
163                                        noise_type noise, float sig[],
164                                        float **param, int paramfree[], int nparam, int gparam[],
165                                        restrain_type restrain, float chisq_delta,
166                                        void (*fitfunc)(float, float [], float *, float [], int),
167                                        int spa_param, int spa_nvalues,
168                                        float spa_low, float spa_high,
169                                        float chisq_global[], int df[], void (*progressfunc)(float));
170int GCI_SPA_2D_marquardt_global_generic_instr(
171                                        float xincr, float **trans,
172                                        int ndata, int ntrans, int fit_start, int fit_end,
173                                        float instr[], int ninstr,
174                                        noise_type noise, float sig[],
175                                        float **param, int paramfree[], int nparam, int gparam[],
176                                        restrain_type restrain, float chisq_delta,
177                                        void (*fitfunc)(float, float [], float *, float [], int),
178                                        int spa_param1, int spa_nvalues1,
179                                        float spa_low1, float spa_high1,
180                                        int spa_param2, int spa_nvalues2,
181                                        float spa_low2, float spa_high2,
182                                        float **chisq_global, int **df, void (*progressfunc)(float));
183
184/* Setting restraints */
185
186int GCI_set_restrain_limits(int nparam, int restrain[],
187                                                        float minval[], float maxval[]);
188
189/* Predefined fitting models */
190
191void GCI_multiexp_lambda(float x, float param[],
192                         float *y, float dy_dparam[], int nparam);
193void GCI_multiexp_tau(float x, float param[],
194                      float *y, float dy_dparam[], int nparam);
195void GCI_stretchedexp(float x, float param[],
196                      float *y, float dy_dparam[], int nparam);
197
198/* Utility functions */
199float **GCI_ecf_matrix(long nrows, long ncols);
200void GCI_ecf_free_matrix(float **m);
201
202void ECF_ExportParams_start (char path[]);
203void ECF_ExportParams_stop (void);
204
205#endif /* _GCI_ECF */
206
207// Emacs settings:
208// Local variables:
209// mode: c
210// c-basic-offset: 4
211// tab-width: 4
212// End:
Note: See TracBrowser for help on using the repository browser.