Changeset 2cb89e7 in sasview for sansmodels/src/sans
- Timestamp:
- Aug 16, 2009 10:30:27 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:
- 7d11b81
- Parents:
- b0d0723
- Location:
- sansmodels/src/sans/models
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
sansmodels/src/sans/models/ParallelepipedModel.py
r975ec8e r2cb89e7 33 33 List of default parameters: 34 34 scale = 1.0 35 short_ edgeA= 35.0 [A]36 long er_edgeB= 75.0 [A]37 long uest_edgeC= 400.0 [A]35 short_a = 35.0 [A] 36 long_b = 75.0 [A] 37 longer_c = 400.0 [A] 38 38 contrast = 5.3e-006 [1/A²] 39 39 background = 0.0 [1/cm] … … 54 54 self.name = "ParallelepipedModel" 55 55 ## Model description 56 self.description =""" Calculates the form factor for a rectangular solid with uniform scattering length density.56 self.description =""" Form factor for a rectangular solid with uniform scattering length density. 57 57 58 58 scale:Scale factor 59 short_ edgeA: Shortest edge of the parallelepiped [A]60 long er_edgeB: Longer edge of the parallelepiped [A]61 long uest_edgeC: Longuest edge of the parallelepiped [A]62 con strast: particle_sld - solvent_sld59 short_a: length of short side of the parallelepiped [A] 60 long_b: length of long side of the parallelepiped [A] 61 longer_c: length of longer side of the parallelepiped [A] 62 contrast: particle_sld - solvent_sld 63 63 background:Incoherent Background [1/cm]""" 64 64 … … 66 66 self.details = {} 67 67 self.details['scale'] = ['', None, None] 68 self.details['short_ edgeA'] = ['[A]', None, None]69 self.details['long er_edgeB'] = ['[A]', None, None]70 self.details['long uest_edgeC'] = ['[A]', None, None]68 self.details['short_a'] = ['[A]', None, None] 69 self.details['long_b'] = ['[A]', None, None] 70 self.details['longer_c'] = ['[A]', None, None] 71 71 self.details['contrast'] = ['[1/A²]', None, None] 72 72 self.details['background'] = ['[1/cm]', None, None] … … 76 76 77 77 ## fittable parameters 78 self.fixed=['short_ edgeA.width', 'longer_edgeB.width', 'longuest_edgeC.width', 'parallel_phi.width', 'parallel_psi.width', 'parallel_theta.width']78 self.fixed=['short_a.width', 'long_b.width', 'longer_c.width', 'parallel_phi.width', 'parallel_psi.width', 'parallel_theta.width'] 79 79 80 80 ## parameters with orientation -
sansmodels/src/sans/models/c_extensions/parallelepiped.c
rd5bd424 r2cb89e7 22 22 // Fill paramater array 23 23 dp[0] = pars->scale; 24 dp[1] = pars->short_ edgeA;25 dp[2] = pars->long er_edgeB;26 dp[3] = pars->long uest_edgeC;24 dp[1] = pars->short_a; 25 dp[2] = pars->long_b; 26 dp[3] = pars->longer_c; 27 27 dp[4] = pars->contrast; 28 28 dp[5] = pars->background; … … 38 38 39 39 //handle arg=0 separately, as sin(t)/t -> 1 as t->0 40 argA = a*ala ;41 argB = b*alb ;42 argC = c*alc ;40 argA = a*ala/2; 41 argB = b*alb/2; 42 argC = c*alc/2; 43 43 if(argA==0.0) { 44 44 tmp1 = 1.0; … … 105 105 double pi = 4.0*atan(1.0); 106 106 107 edgeA = pars->short_ edgeA;108 edgeB = pars->long er_edgeB;109 edgeC = pars->long uest_edgeC;107 edgeA = pars->short_a; 108 edgeB = pars->long_b; 109 edgeC = pars->longer_c; 110 110 111 111 … … 152 152 //normalize by cylinder volume 153 153 //NOTE that for this (Fournet) definition of the integral, one must MULTIPLY by Vparallel 154 vol = 8*edgeA* edgeB * edgeC;154 vol = edgeA* edgeB * edgeC; 155 155 answer *= vol; 156 156 -
sansmodels/src/sans/models/c_extensions/parallelepiped.h
r975ec8e r2cb89e7 7 7 /** Structure definition for Parallelepiped parameters 8 8 * [PYTHONCLASS] = ParallelepipedModel 9 * [DISP_PARAMS] = short_ edgeA, longer_edgeB, longuest_edgeC,parallel_phi,parallel_psi, parallel_theta10 [DESCRIPTION] = <text> Calculates the form factor for a rectangular solid with uniform scattering length density.9 * [DISP_PARAMS] = short_a, long_b, longer_c,parallel_phi,parallel_psi, parallel_theta 10 [DESCRIPTION] = <text> Form factor for a rectangular solid with uniform scattering length density. 11 11 12 12 scale:Scale factor 13 short_ edgeA: Shortest edge of the parallelepiped [A]14 long er_edgeB: Longer edge of the parallelepiped [A]15 long uest_edgeC: Longuest edge of the parallelepiped [A]16 con strast: particle_sld - solvent_sld13 short_a: length of short side of the parallelepiped [A] 14 long_b: length of long side of the parallelepiped [A] 15 longer_c: length of longer side of the parallelepiped [A] 16 contrast: particle_sld - solvent_sld 17 17 background:Incoherent Background [1/cm] 18 18 </text> 19 [FIXED]= <text>short_ edgeA.width; longer_edgeB.width; longuest_edgeC.width;parallel_phi.width;parallel_psi.width; parallel_theta.width</text>19 [FIXED]= <text>short_a.width; long_b.width; longer_c.width;parallel_phi.width;parallel_psi.width; parallel_theta.width</text> 20 20 [ORIENTATION_PARAMS]= <text>parallel_phi;parallel_psi; parallel_theta; parallel_phi.width;parallel_psi.width; parallel_theta.width</text> 21 21 … … 26 26 // [DEFAULT]=scale=1.0 27 27 double scale; 28 /// Shortest edge of the parallelepiped [A]29 // [DEFAULT]=short_ edgeA=35 [A]30 double short_ edgeA;31 /// L ongeredge of the parallelepiped [A]32 // [DEFAULT]=long er_edgeB=75 [A]33 double long er_edgeB;34 /// L onguest edge of the parallelepiped [A]35 // [DEFAULT]=long uest_edgeC=400 [A]36 double long uest_edgeC;28 /// Length of short side of the parallelepiped [A] 29 // [DEFAULT]=short_a=35 [A] 30 double short_a; 31 /// Length of long side edge of the parallelepiped [A] 32 // [DEFAULT]=long_b=75 [A] 33 double long_b; 34 /// Length of longer side of the parallelepiped [A] 35 // [DEFAULT]=longer_c=400 [A] 36 double longer_c; 37 37 /// Contrast [1/A²] 38 38 // [DEFAULT]=contrast=5.3e-6 [1/A²] -
sansmodels/src/sans/models/c_models/CParallelepipedModel.cpp
r975ec8e r2cb89e7 86 86 87 87 // Initialize parameter dictionary 88 PyDict_SetItemString(self->params,"short_a",Py_BuildValue("d",35.000000)); 88 89 PyDict_SetItemString(self->params,"scale",Py_BuildValue("d",1.000000)); 89 PyDict_SetItemString(self->params,"longer_edgeB",Py_BuildValue("d",75.000000)); 90 PyDict_SetItemString(self->params,"long_b",Py_BuildValue("d",75.000000)); 91 PyDict_SetItemString(self->params,"longer_c",Py_BuildValue("d",400.000000)); 90 92 PyDict_SetItemString(self->params,"parallel_psi",Py_BuildValue("d",0.000000)); 91 PyDict_SetItemString(self->params,"longuest_edgeC",Py_BuildValue("d",400.000000));92 93 PyDict_SetItemString(self->params,"parallel_phi",Py_BuildValue("d",0.000000)); 93 94 PyDict_SetItemString(self->params,"parallel_theta",Py_BuildValue("d",0.000000)); 94 95 PyDict_SetItemString(self->params,"background",Py_BuildValue("d",0.000000)); 95 PyDict_SetItemString(self->params,"short_edgeA",Py_BuildValue("d",35.000000));96 96 PyDict_SetItemString(self->params,"contrast",Py_BuildValue("d",0.000005)); 97 97 // Initialize dispersion / averaging parameter dict … … 99 99 PyObject * disp_dict; 100 100 disp_dict = PyDict_New(); 101 self->model->short_ edgeA.dispersion->accept_as_source(visitor, self->model->short_edgeA.dispersion, disp_dict);102 PyDict_SetItemString(self->dispersion, "short_ edgeA", disp_dict);101 self->model->short_a.dispersion->accept_as_source(visitor, self->model->short_a.dispersion, disp_dict); 102 PyDict_SetItemString(self->dispersion, "short_a", disp_dict); 103 103 disp_dict = PyDict_New(); 104 self->model->long er_edgeB.dispersion->accept_as_source(visitor, self->model->longer_edgeB.dispersion, disp_dict);105 PyDict_SetItemString(self->dispersion, "long er_edgeB", disp_dict);104 self->model->long_b.dispersion->accept_as_source(visitor, self->model->long_b.dispersion, disp_dict); 105 PyDict_SetItemString(self->dispersion, "long_b", disp_dict); 106 106 disp_dict = PyDict_New(); 107 self->model->long uest_edgeC.dispersion->accept_as_source(visitor, self->model->longuest_edgeC.dispersion, disp_dict);108 PyDict_SetItemString(self->dispersion, "long uest_edgeC", disp_dict);107 self->model->longer_c.dispersion->accept_as_source(visitor, self->model->longer_c.dispersion, disp_dict); 108 PyDict_SetItemString(self->dispersion, "longer_c", disp_dict); 109 109 disp_dict = PyDict_New(); 110 110 self->model->parallel_phi.dispersion->accept_as_source(visitor, self->model->parallel_phi.dispersion, disp_dict); … … 246 246 247 247 // Reader parameter dictionary 248 self->model->short_a = PyFloat_AsDouble( PyDict_GetItemString(self->params, "short_a") ); 248 249 self->model->scale = PyFloat_AsDouble( PyDict_GetItemString(self->params, "scale") ); 249 self->model->longer_edgeB = PyFloat_AsDouble( PyDict_GetItemString(self->params, "longer_edgeB") ); 250 self->model->long_b = PyFloat_AsDouble( PyDict_GetItemString(self->params, "long_b") ); 251 self->model->longer_c = PyFloat_AsDouble( PyDict_GetItemString(self->params, "longer_c") ); 250 252 self->model->parallel_psi = PyFloat_AsDouble( PyDict_GetItemString(self->params, "parallel_psi") ); 251 self->model->longuest_edgeC = PyFloat_AsDouble( PyDict_GetItemString(self->params, "longuest_edgeC") );252 253 self->model->parallel_phi = PyFloat_AsDouble( PyDict_GetItemString(self->params, "parallel_phi") ); 253 254 self->model->parallel_theta = PyFloat_AsDouble( PyDict_GetItemString(self->params, "parallel_theta") ); 254 255 self->model->background = PyFloat_AsDouble( PyDict_GetItemString(self->params, "background") ); 255 self->model->short_edgeA = PyFloat_AsDouble( PyDict_GetItemString(self->params, "short_edgeA") );256 256 self->model->contrast = PyFloat_AsDouble( PyDict_GetItemString(self->params, "contrast") ); 257 257 // Read in dispersion parameters 258 258 PyObject* disp_dict; 259 259 DispersionVisitor* visitor = new DispersionVisitor(); 260 disp_dict = PyDict_GetItemString(self->dispersion, "short_ edgeA");261 self->model->short_ edgeA.dispersion->accept_as_destination(visitor, self->model->short_edgeA.dispersion, disp_dict);262 disp_dict = PyDict_GetItemString(self->dispersion, "long er_edgeB");263 self->model->long er_edgeB.dispersion->accept_as_destination(visitor, self->model->longer_edgeB.dispersion, disp_dict);264 disp_dict = PyDict_GetItemString(self->dispersion, "long uest_edgeC");265 self->model->long uest_edgeC.dispersion->accept_as_destination(visitor, self->model->longuest_edgeC.dispersion, disp_dict);260 disp_dict = PyDict_GetItemString(self->dispersion, "short_a"); 261 self->model->short_a.dispersion->accept_as_destination(visitor, self->model->short_a.dispersion, disp_dict); 262 disp_dict = PyDict_GetItemString(self->dispersion, "long_b"); 263 self->model->long_b.dispersion->accept_as_destination(visitor, self->model->long_b.dispersion, disp_dict); 264 disp_dict = PyDict_GetItemString(self->dispersion, "longer_c"); 265 self->model->longer_c.dispersion->accept_as_destination(visitor, self->model->longer_c.dispersion, disp_dict); 266 266 disp_dict = PyDict_GetItemString(self->dispersion, "parallel_phi"); 267 267 self->model->parallel_phi.dispersion->accept_as_destination(visitor, self->model->parallel_phi.dispersion, disp_dict); … … 332 332 333 333 // Reader parameter dictionary 334 self->model->short_a = PyFloat_AsDouble( PyDict_GetItemString(self->params, "short_a") ); 334 335 self->model->scale = PyFloat_AsDouble( PyDict_GetItemString(self->params, "scale") ); 335 self->model->longer_edgeB = PyFloat_AsDouble( PyDict_GetItemString(self->params, "longer_edgeB") ); 336 self->model->long_b = PyFloat_AsDouble( PyDict_GetItemString(self->params, "long_b") ); 337 self->model->longer_c = PyFloat_AsDouble( PyDict_GetItemString(self->params, "longer_c") ); 336 338 self->model->parallel_psi = PyFloat_AsDouble( PyDict_GetItemString(self->params, "parallel_psi") ); 337 self->model->longuest_edgeC = PyFloat_AsDouble( PyDict_GetItemString(self->params, "longuest_edgeC") );338 339 self->model->parallel_phi = PyFloat_AsDouble( PyDict_GetItemString(self->params, "parallel_phi") ); 339 340 self->model->parallel_theta = PyFloat_AsDouble( PyDict_GetItemString(self->params, "parallel_theta") ); 340 341 self->model->background = PyFloat_AsDouble( PyDict_GetItemString(self->params, "background") ); 341 self->model->short_edgeA = PyFloat_AsDouble( PyDict_GetItemString(self->params, "short_edgeA") );342 342 self->model->contrast = PyFloat_AsDouble( PyDict_GetItemString(self->params, "contrast") ); 343 343 // Read in dispersion parameters 344 344 PyObject* disp_dict; 345 345 DispersionVisitor* visitor = new DispersionVisitor(); 346 disp_dict = PyDict_GetItemString(self->dispersion, "short_ edgeA");347 self->model->short_ edgeA.dispersion->accept_as_destination(visitor, self->model->short_edgeA.dispersion, disp_dict);348 disp_dict = PyDict_GetItemString(self->dispersion, "long er_edgeB");349 self->model->long er_edgeB.dispersion->accept_as_destination(visitor, self->model->longer_edgeB.dispersion, disp_dict);350 disp_dict = PyDict_GetItemString(self->dispersion, "long uest_edgeC");351 self->model->long uest_edgeC.dispersion->accept_as_destination(visitor, self->model->longuest_edgeC.dispersion, disp_dict);346 disp_dict = PyDict_GetItemString(self->dispersion, "short_a"); 347 self->model->short_a.dispersion->accept_as_destination(visitor, self->model->short_a.dispersion, disp_dict); 348 disp_dict = PyDict_GetItemString(self->dispersion, "long_b"); 349 self->model->long_b.dispersion->accept_as_destination(visitor, self->model->long_b.dispersion, disp_dict); 350 disp_dict = PyDict_GetItemString(self->dispersion, "longer_c"); 351 self->model->longer_c.dispersion->accept_as_destination(visitor, self->model->longer_c.dispersion, disp_dict); 352 352 disp_dict = PyDict_GetItemString(self->dispersion, "parallel_phi"); 353 353 self->model->parallel_phi.dispersion->accept_as_destination(visitor, self->model->parallel_phi.dispersion, disp_dict); … … 407 407 408 408 // Reader parameter dictionary 409 self->model->short_a = PyFloat_AsDouble( PyDict_GetItemString(self->params, "short_a") ); 409 410 self->model->scale = PyFloat_AsDouble( PyDict_GetItemString(self->params, "scale") ); 410 self->model->longer_edgeB = PyFloat_AsDouble( PyDict_GetItemString(self->params, "longer_edgeB") ); 411 self->model->long_b = PyFloat_AsDouble( PyDict_GetItemString(self->params, "long_b") ); 412 self->model->longer_c = PyFloat_AsDouble( PyDict_GetItemString(self->params, "longer_c") ); 411 413 self->model->parallel_psi = PyFloat_AsDouble( PyDict_GetItemString(self->params, "parallel_psi") ); 412 self->model->longuest_edgeC = PyFloat_AsDouble( PyDict_GetItemString(self->params, "longuest_edgeC") );413 414 self->model->parallel_phi = PyFloat_AsDouble( PyDict_GetItemString(self->params, "parallel_phi") ); 414 415 self->model->parallel_theta = PyFloat_AsDouble( PyDict_GetItemString(self->params, "parallel_theta") ); 415 416 self->model->background = PyFloat_AsDouble( PyDict_GetItemString(self->params, "background") ); 416 self->model->short_edgeA = PyFloat_AsDouble( PyDict_GetItemString(self->params, "short_edgeA") );417 417 self->model->contrast = PyFloat_AsDouble( PyDict_GetItemString(self->params, "contrast") ); 418 418 // Read in dispersion parameters 419 419 PyObject* disp_dict; 420 420 DispersionVisitor* visitor = new DispersionVisitor(); 421 disp_dict = PyDict_GetItemString(self->dispersion, "short_ edgeA");422 self->model->short_ edgeA.dispersion->accept_as_destination(visitor, self->model->short_edgeA.dispersion, disp_dict);423 disp_dict = PyDict_GetItemString(self->dispersion, "long er_edgeB");424 self->model->long er_edgeB.dispersion->accept_as_destination(visitor, self->model->longer_edgeB.dispersion, disp_dict);425 disp_dict = PyDict_GetItemString(self->dispersion, "long uest_edgeC");426 self->model->long uest_edgeC.dispersion->accept_as_destination(visitor, self->model->longuest_edgeC.dispersion, disp_dict);421 disp_dict = PyDict_GetItemString(self->dispersion, "short_a"); 422 self->model->short_a.dispersion->accept_as_destination(visitor, self->model->short_a.dispersion, disp_dict); 423 disp_dict = PyDict_GetItemString(self->dispersion, "long_b"); 424 self->model->long_b.dispersion->accept_as_destination(visitor, self->model->long_b.dispersion, disp_dict); 425 disp_dict = PyDict_GetItemString(self->dispersion, "longer_c"); 426 self->model->longer_c.dispersion->accept_as_destination(visitor, self->model->longer_c.dispersion, disp_dict); 427 427 disp_dict = PyDict_GetItemString(self->dispersion, "parallel_phi"); 428 428 self->model->parallel_phi.dispersion->accept_as_destination(visitor, self->model->parallel_phi.dispersion, disp_dict); … … 486 486 // Ugliness necessary to go from python to C 487 487 // TODO: refactor this 488 if (!strcmp(par_name, "short_ edgeA")) {489 self->model->short_ edgeA.dispersion = dispersion;490 } else if (!strcmp(par_name, "long er_edgeB")) {491 self->model->long er_edgeB.dispersion = dispersion;492 } else if (!strcmp(par_name, "long uest_edgeC")) {493 self->model->long uest_edgeC.dispersion = dispersion;488 if (!strcmp(par_name, "short_a")) { 489 self->model->short_a.dispersion = dispersion; 490 } else if (!strcmp(par_name, "long_b")) { 491 self->model->long_b.dispersion = dispersion; 492 } else if (!strcmp(par_name, "longer_c")) { 493 self->model->longer_c.dispersion = dispersion; 494 494 } else if (!strcmp(par_name, "parallel_phi")) { 495 495 self->model->parallel_phi.dispersion = dispersion; -
sansmodels/src/sans/models/c_models/models.hh
r975ec8e r2cb89e7 49 49 // Model parameters 50 50 Parameter scale; 51 Parameter short_ edgeA;52 Parameter long er_edgeB;53 Parameter long uest_edgeC;51 Parameter short_a; 52 Parameter long_b; 53 Parameter longer_c; 54 54 Parameter contrast; 55 55 Parameter background;
Note: See TracChangeset
for help on using the changeset viewer.