Changeset c1c29b6 in sasview for sansmodels/src/sans/models/c_models/CLamellarPSModel.cpp
- Timestamp:
- Aug 21, 2009 10:34:33 AM (15 years ago)
- Branches:
- master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- 14c3887
- Parents:
- bda194e3
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sansmodels/src/sans/models/c_models/CLamellarPSModel.cpp
r9bd69098 rc1c29b6 92 92 PyDict_SetItemString(self->params,"background",Py_BuildValue("d",0.000000)); 93 93 PyDict_SetItemString(self->params,"delta",Py_BuildValue("d",30.000000)); 94 PyDict_SetItemString(self->params,"sigma",Py_BuildValue("d",0.150000));95 94 PyDict_SetItemString(self->params,"contrast",Py_BuildValue("d",0.000005)); 96 95 // Initialize dispersion / averaging parameter dict 97 96 DispersionVisitor* visitor = new DispersionVisitor(); 98 97 PyObject * disp_dict; 98 disp_dict = PyDict_New(); 99 self->model->delta.dispersion->accept_as_source(visitor, self->model->delta.dispersion, disp_dict); 100 PyDict_SetItemString(self->dispersion, "delta", disp_dict); 99 101 disp_dict = PyDict_New(); 100 102 self->model->spacing.dispersion->accept_as_source(visitor, self->model->spacing.dispersion, disp_dict); … … 167 169 return PyArray_Return(result); 168 170 } 169 /** 170 * Function to call to evaluate model 171 * @param args: input numpy array [q[],phi[]] 172 * @return: numpy array object 173 */ 174 static PyObject * evaluateTwoDim( LamellarPSModel* model, 175 PyArrayObject *q, PyArrayObject *phi) 176 { 177 PyArrayObject *result; 178 //check validity of input vectors 179 if (q->nd != 1 || q->descr->type_num != PyArray_DOUBLE 180 || phi->nd != 1 || phi->descr->type_num != PyArray_DOUBLE 181 || phi->dimensions[0] != q->dimensions[0]){ 182 183 //const char * message= "Invalid array: q->nd=%d,type_num=%d\n",q->nd,q->descr->type_num; 184 PyErr_SetString(PyExc_ValueError ,"wrong input"); 185 return NULL; 186 } 187 result= (PyArrayObject *)PyArray_FromDims(q->nd,(int*)(q->dimensions), PyArray_DOUBLE); 188 189 if (result == NULL){ 190 const char * message= "Could not create result "; 191 PyErr_SetString(PyExc_RuntimeError , message); 192 return NULL; 193 } 194 195 for (int i = 0; i < q->dimensions[0]; i++) { 196 double q_value = *(double *)(q->data + i*q->strides[0]); 197 double phi_value = *(double *)(phi->data + i*phi->strides[0]); 198 double *result_value = (double *)(result->data + i*result->strides[0]); 199 if (q_value == 0) 200 *result_value = 0.0; 201 else 202 *result_value = model->evaluate_rphi(q_value, phi_value); 203 } 204 return PyArray_Return(result); 205 } 171 206 172 /** 207 173 * Function to call to evaluate model … … 272 238 self->model->background = PyFloat_AsDouble( PyDict_GetItemString(self->params, "background") ); 273 239 self->model->delta = PyFloat_AsDouble( PyDict_GetItemString(self->params, "delta") ); 274 self->model->sigma = PyFloat_AsDouble( PyDict_GetItemString(self->params, "sigma") );275 240 self->model->contrast = PyFloat_AsDouble( PyDict_GetItemString(self->params, "contrast") ); 276 241 // Read in dispersion parameters 277 242 PyObject* disp_dict; 278 243 DispersionVisitor* visitor = new DispersionVisitor(); 244 disp_dict = PyDict_GetItemString(self->dispersion, "delta"); 245 self->model->delta.dispersion->accept_as_destination(visitor, self->model->delta.dispersion, disp_dict); 279 246 disp_dict = PyDict_GetItemString(self->dispersion, "spacing"); 280 247 self->model->spacing.dispersion->accept_as_destination(visitor, self->model->spacing.dispersion, disp_dict); … … 347 314 self->model->background = PyFloat_AsDouble( PyDict_GetItemString(self->params, "background") ); 348 315 self->model->delta = PyFloat_AsDouble( PyDict_GetItemString(self->params, "delta") ); 349 self->model->sigma = PyFloat_AsDouble( PyDict_GetItemString(self->params, "sigma") );350 316 self->model->contrast = PyFloat_AsDouble( PyDict_GetItemString(self->params, "contrast") ); 351 317 // Read in dispersion parameters 352 318 PyObject* disp_dict; 353 319 DispersionVisitor* visitor = new DispersionVisitor(); 320 disp_dict = PyDict_GetItemString(self->dispersion, "delta"); 321 self->model->delta.dispersion->accept_as_destination(visitor, self->model->delta.dispersion, disp_dict); 354 322 disp_dict = PyDict_GetItemString(self->dispersion, "spacing"); 355 323 self->model->spacing.dispersion->accept_as_destination(visitor, self->model->spacing.dispersion, disp_dict); … … 411 379 self->model->background = PyFloat_AsDouble( PyDict_GetItemString(self->params, "background") ); 412 380 self->model->delta = PyFloat_AsDouble( PyDict_GetItemString(self->params, "delta") ); 413 self->model->sigma = PyFloat_AsDouble( PyDict_GetItemString(self->params, "sigma") );414 381 self->model->contrast = PyFloat_AsDouble( PyDict_GetItemString(self->params, "contrast") ); 415 382 // Read in dispersion parameters 416 383 PyObject* disp_dict; 417 384 DispersionVisitor* visitor = new DispersionVisitor(); 385 disp_dict = PyDict_GetItemString(self->dispersion, "delta"); 386 self->model->delta.dispersion->accept_as_destination(visitor, self->model->delta.dispersion, disp_dict); 418 387 disp_dict = PyDict_GetItemString(self->dispersion, "spacing"); 419 388 self->model->spacing.dispersion->accept_as_destination(visitor, self->model->spacing.dispersion, disp_dict); … … 473 442 // Ugliness necessary to go from python to C 474 443 // TODO: refactor this 475 if (!strcmp(par_name, "spacing")) { 444 if (!strcmp(par_name, "delta")) { 445 self->model->delta.dispersion = dispersion; 446 } else if (!strcmp(par_name, "spacing")) { 476 447 self->model->spacing.dispersion = dispersion; 477 448 } else {
Note: See TracChangeset
for help on using the changeset viewer.