mailr14465 - /branches/inversion-recovery/maths_fns/relax_fit.c


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by sebastien . morin on August 26, 2011 - 10:10:
Author: semor
Date: Fri Aug 26 10:10:59 2011
New Revision: 14465

URL: http://svn.gna.org/viewcvs/relax?rev=14465&view=rev
Log:
A further step at getting the chosen equation passed from Python to C.

Not clear if it works.
Need for fixing the dependency check, as relax thinks the C module is 
not compiled, although compilation seems to happen without error...


Modified:
    branches/inversion-recovery/maths_fns/relax_fit.c

Modified: branches/inversion-recovery/maths_fns/relax_fit.c
URL: 
http://svn.gna.org/viewcvs/relax/branches/inversion-recovery/maths_fns/relax_fit.c?rev=14465&r1=14464&r2=14465&view=diff
==============================================================================
--- branches/inversion-recovery/maths_fns/relax_fit.c (original)
+++ branches/inversion-recovery/maths_fns/relax_fit.c Fri Aug 26 10:10:59 2011
@@ -32,20 +32,21 @@
 static PyObject *
 setup(PyObject *self, PyObject *args, PyObject *keywords) {
     /* Python object declarations */
-    PyObject *values_arg, *sd_arg, *relax_times_arg, *scaling_matrix_arg;
+    PyObject *curve_type_arg, *values_arg, *sd_arg, *relax_times_arg, 
*scaling_matrix_arg;
     PyObject *element;
 
     /* Normal declarations */
+    extern char *curve_type;
     extern double *params, *values, *sd, *relax_times, *scaling_matrix;
     extern double relax_time_array;
     extern int num_params, num_times;
     int i;
 
     /* The keyword list */
-    static char *keyword_list[] = {"num_params", "num_times", "values", 
"sd", "relax_times", "scaling_matrix", NULL};
+    static char *keyword_list[] = {"curve_type", "num_params", "num_times", 
"values", "sd", "relax_times", "scaling_matrix", NULL};
 
     /* Parse the function arguments */
-    if (!PyArg_ParseTupleAndKeywords(args, keywords, "iiOOOO", keyword_list, 
&num_params, &num_times, &values_arg, &sd_arg, &relax_times_arg, 
&scaling_matrix_arg))
+    if (!PyArg_ParseTupleAndKeywords(args, keywords, "iiOOOO", keyword_list, 
&curve_type, &num_params, &num_times, &values_arg, &sd_arg, &relax_times_arg, 
&scaling_matrix_arg))
         return NULL;
 
     /* Dynamic C arrays */
@@ -55,6 +56,15 @@
     relax_times = (double *) malloc(sizeof(double)*num_times);
     scaling_matrix = (double *) malloc(sizeof(double)*num_params);
 
+    /* Place the curve_type element into the C array */
+    for (i = 0; i < PySequence_Fast_GET_SIZE(curve_type); i++) {
+        /* Get the element */
+        element = PySequence_GetItem(curve_type_arg, i);
+
+        /* Convert to a C char array */
+        curve_type[i] = PyString_AsChar(element);
+    }
+
     /* Place the value elements into the C array */
     for (i = 0; i < num_times; i++) {
         /* Get the element */
@@ -107,6 +117,7 @@
     /* Declarations */
     PyObject *params_arg;
     PyObject *element;
+    char *curve_type;
     extern double *params;
     int i;
 
@@ -124,9 +135,9 @@
     }
 
     /* Back calculated the peak intensities */
-    if(sizeof(num_params) == 2)
+    if (curve_type == "exp_2param_neg")
         exp_2param_neg(params, relax_times, back_calc, num_times);
-    if(sizeof(num_params) == 3)
+    if (curve_type == "exp_3param_inv_neg")
         exp_3param_inv_neg(params, relax_times, back_calc, num_times);
 
     /* Calculate and return the chi-squared value */
@@ -139,9 +150,11 @@
     /* Function for calculating and returning the chi-squared gradient. */
 
     /* Declarations */
+    PyObject *curve_type_arg;
     PyObject *params_arg;
 
     /* Temp Declarations */
+    char *curve_type;
     double aaa[MAXPARAMS] = {1.0, 2.0};
     int i;
     double *params;
@@ -151,9 +164,9 @@
         return NULL;
 
     /* Back calculated the peak intensities */
-    if(sizeof(num_params) == 2)
+    if (curve_type == "exp_2param_neg")
         exp_2param_neg(params, relax_times, back_calc, num_times);
-    if(sizeof(num_params) == 3)
+    if (curve_type == "exp_3param_inv_neg")
         exp_3param_inv_neg(params, relax_times, back_calc, num_times);
 
 




Related Messages


Powered by MHonArc, Updated Fri Aug 26 10:40:02 2011