source: trunk/projects/slim-curve/src/main/c/loci_curvefitter_SLIMCurveFitter.c @ 7695

Revision 7695, 4.4 KB checked in by aivar, 9 years ago (diff)

Bug: was substituting z for a!

Line 
1#include "loci_curvefitter_SLIMCurveFitter.h"
2#include "EcfWrapper.h"
3
4/*
5 * Class:     loci_curvefitter_SLIMCurveFitter
6 * Method:    RLD_fit
7 * Signature: (D[DII[DI[D[D[D[D[D[DD)I
8 */
9JNIEXPORT jint JNICALL Java_loci_curvefitter_SLIMCurveFitter_RLD_1fit
10  (JNIEnv *env, jobject obj, jdouble x_inc, jdoubleArray y,
11        jint fit_start, jint fit_end, jdoubleArray instr, jint n_instr,
12        jdoubleArray sig, jdoubleArray z, jdoubleArray a, jdoubleArray tau,
13        jdoubleArray fitted, jdoubleArray chi_square, jdouble chi_square_target) {
14
15    jdouble *y_array;
16    jdouble *instr_array;
17    jdouble *sig_array;
18    jdouble *fitted_array;
19    jdouble *z_ref;
20    jdouble *a_ref;
21    jdouble *tau_ref;
22    jdouble *chi_square_ref;
23    int return_value;
24
25    // convert the arrays
26    y_array = (*env)->GetDoubleArrayElements(env, y, 0);
27    instr_array = NULL;
28    if (NULL != instr) {
29        instr_array  = (*env)->GetDoubleArrayElements(env, instr, 0);
30    }
31    sig_array = NULL;
32    if (NULL != sig) {
33        sig_array    = (*env)->GetDoubleArrayElements(env, sig, 0);
34    }
35    fitted_array = (*env)->GetDoubleArrayElements(env, fitted, 0);
36
37    // also handle double by reference as arrays
38    z_ref = (*env)->GetDoubleArrayElements(env, z, 0);
39    a_ref = (*env)->GetDoubleArrayElements(env, a, 0);
40    tau_ref = (*env)->GetDoubleArrayElements(env, tau, 0);
41    chi_square_ref = (*env)->GetDoubleArrayElements(env, chi_square, 0);
42
43    return_value = RLD_fit(x_inc, y_array, fit_start, fit_end,
44            instr_array, n_instr, sig_array, z_ref, a_ref, tau_ref,
45            fitted_array, chi_square_ref, chi_square_target);
46
47    // pass back the arrays
48    (*env)->ReleaseDoubleArrayElements(env, y, y_array, 0);
49    if (NULL != instr) {
50        (*env)->ReleaseDoubleArrayElements(env, instr, instr_array, 0);
51    }
52    if (NULL != sig) {
53        (*env)->ReleaseDoubleArrayElements(env, sig, sig_array, 0);
54    }
55    (*env)->ReleaseDoubleArrayElements(env, fitted, fitted_array, 0);
56
57    // pass back the double by reference values
58    (*env)->ReleaseDoubleArrayElements(env, z, z_ref, 0);
59    (*env)->ReleaseDoubleArrayElements(env, a, a_ref, 0);
60    (*env)->ReleaseDoubleArrayElements(env, tau, tau_ref, 0);
61    (*env)->ReleaseDoubleArrayElements(env, chi_square, chi_square_ref, 0);
62
63    return return_value;
64}
65
66/*
67 * Class:     loci_curvefitter_SLIMCurveFitter
68 * Method:    LMA_fit
69 * Signature: (D[DII[DI[D[D[II[D[DD)I
70 */
71JNIEXPORT jint JNICALL Java_loci_curvefitter_SLIMCurveFitter_LMA_1fit
72  (JNIEnv *env, jobject obj, jdouble x_inc, jdoubleArray y,
73        jint fit_start, jint fit_end, jdoubleArray instr, jint n_instr,
74        jdoubleArray sig, jdoubleArray param, jintArray param_free, jint n_param,
75        jdoubleArray fitted, jdoubleArray chi_square, jdouble chi_square_target) {
76
77    jdouble *y_array;
78    jdouble *instr_array;
79    jdouble *sig_array;
80    jdouble *param_array;
81    jint *param_free_array;
82    jdouble *fitted_array;
83    jdouble *chi_square_ref;
84    int return_value;
85
86    // convert the arrays
87    y_array = (*env)->GetDoubleArrayElements(env, y, 0);
88    instr_array = NULL;
89    if (NULL != instr) {
90        instr_array  = (*env)->GetDoubleArrayElements(env, instr, 0);
91    }
92    sig_array = NULL;
93    if (NULL != sig) {
94        sig_array    = (*env)->GetDoubleArrayElements(env, sig, 0);
95    }
96    param_array = (*env)->GetDoubleArrayElements(env, param, 0);
97    param_free_array = (*env)->GetIntArrayElements(env, param_free, 0);
98    fitted_array = (*env)->GetDoubleArrayElements(env, fitted, 0);
99
100    // also handle double by reference as array
101    chi_square_ref = (*env)->GetDoubleArrayElements(env, chi_square, 0);
102
103    return_value = LMA_fit(x_inc, y_array, fit_start, fit_end,
104            instr_array, n_instr, sig_array, param_array, param_free_array, n_param,
105            fitted_array, chi_square_ref, chi_square_target);
106
107    // pass back the arrays
108    (*env)->ReleaseDoubleArrayElements(env, y, y_array, 0);
109    if (NULL != instr) {
110        (*env)->ReleaseDoubleArrayElements(env, instr, instr_array, 0);
111    }
112    if (NULL != sig) {
113        (*env)->ReleaseDoubleArrayElements(env, sig, sig_array, 0);
114    }
115    (*env)->ReleaseDoubleArrayElements(env, param, param_array, 0);
116    (*env)->ReleaseIntArrayElements(env, param_free, param_free_array, 0);
117    (*env)->ReleaseDoubleArrayElements(env, fitted, fitted_array, 0);
118
119    // pass back the double by reference value
120    (*env)->ReleaseDoubleArrayElements(env, chi_square, chi_square_ref, 0);
121
122    return return_value;
123  }
Note: See TracBrowser for help on using the repository browser.