Changeset 42f193a in sasview for sansmodels/src/sans/models/c_models
- Timestamp:
- Aug 4, 2009 1:20:01 PM (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:
- 8e91f01
- Parents:
- 2cc633b
- Location:
- sansmodels/src/sans/models/c_models
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
sansmodels/src/sans/models/c_models/CLamellarModel.cpp
r34c3020 r42f193a 91 91 DispersionVisitor* visitor = new DispersionVisitor(); 92 92 PyObject * disp_dict; 93 disp_dict = PyDict_New();94 self->model->delta.dispersion->accept_as_source(visitor, self->model->delta.dispersion, disp_dict);95 PyDict_SetItemString(self->dispersion, "delta", disp_dict);96 93 97 94 … … 154 151 PyObject* disp_dict; 155 152 DispersionVisitor* visitor = new DispersionVisitor(); 156 disp_dict = PyDict_GetItemString(self->dispersion, "delta");157 self->model->delta.dispersion->accept_as_destination(visitor, self->model->delta.dispersion, disp_dict);158 153 159 154 … … 215 210 PyObject* disp_dict; 216 211 DispersionVisitor* visitor = new DispersionVisitor(); 217 disp_dict = PyDict_GetItemString(self->dispersion, "delta");218 self->model->delta.dispersion->accept_as_destination(visitor, self->model->delta.dispersion, disp_dict);219 212 220 213 … … 272 265 // Ugliness necessary to go from python to C 273 266 // TODO: refactor this 274 if (!strcmp(par_name, "delta")) { 275 self->model->delta.dispersion = dispersion; 276 } else { 267 { 277 268 PyErr_SetString(CLamellarModelError, 278 269 "CLamellarModel.set_dispersion expects a valid parameter name."); -
sansmodels/src/sans/models/c_models/CVesicleModel.cpp
r3d25331f r42f193a 95 95 self->model->core_radius.dispersion->accept_as_source(visitor, self->model->core_radius.dispersion, disp_dict); 96 96 PyDict_SetItemString(self->dispersion, "core_radius", disp_dict); 97 disp_dict = PyDict_New(); 98 self->model->thickness.dispersion->accept_as_source(visitor, self->model->thickness.dispersion, disp_dict); 99 PyDict_SetItemString(self->dispersion, "thickness", disp_dict); 97 100 98 101 … … 158 161 disp_dict = PyDict_GetItemString(self->dispersion, "core_radius"); 159 162 self->model->core_radius.dispersion->accept_as_destination(visitor, self->model->core_radius.dispersion, disp_dict); 163 disp_dict = PyDict_GetItemString(self->dispersion, "thickness"); 164 self->model->thickness.dispersion->accept_as_destination(visitor, self->model->thickness.dispersion, disp_dict); 160 165 161 166 … … 220 225 disp_dict = PyDict_GetItemString(self->dispersion, "core_radius"); 221 226 self->model->core_radius.dispersion->accept_as_destination(visitor, self->model->core_radius.dispersion, disp_dict); 227 disp_dict = PyDict_GetItemString(self->dispersion, "thickness"); 228 self->model->thickness.dispersion->accept_as_destination(visitor, self->model->thickness.dispersion, disp_dict); 222 229 223 230 … … 277 284 if (!strcmp(par_name, "core_radius")) { 278 285 self->model->core_radius.dispersion = dispersion; 286 } else if (!strcmp(par_name, "thickness")) { 287 self->model->thickness.dispersion = dispersion; 279 288 } else { 280 289 PyErr_SetString(CVesicleModelError, -
sansmodels/src/sans/models/c_models/lamellar.cpp
r34c3020 r42f193a 34 34 LamellarModel :: LamellarModel() { 35 35 scale = Parameter(1.0); 36 delta = Parameter(50.0 , true);36 delta = Parameter(50.0); 37 37 delta.set_min(0.0); 38 sigma = Parameter(0.15, true); 38 sigma = Parameter(0.15); 39 sigma.set_min(0.0); 39 40 contrast = Parameter(5.3e-6); 40 41 background = Parameter(0.0); … … 59 60 dp[4] = background(); 60 61 61 62 // Get the dispersion points for the bilayer thickness(delta) 63 vector<WeightPoint> weights_delta; 64 delta.get_weights(weights_delta); 65 66 // Perform the computation, with all weight points 67 double sum = 0.0; 68 double norm = 0.0; 69 70 // Loop over semi axis A weight points 71 for(int i=0; i< (int)weights_delta.size(); i++) { 72 dp[1] = weights_delta[i].value; 73 sum += weights_delta[i].weight* LamellarFF(dp, q); 74 norm += weights_delta[i].weight; 75 76 } 77 return sum/norm + background(); 62 return LamellarFF(dp, q); 78 63 } 79 64 … … 86 71 87 72 double LamellarModel :: operator()(double qx, double qy) { 88 LamellarParameters dp; 89 90 // Fill parameter array for IGOR library 91 // Add the background after averaging 92 dp.scale = scale(); 93 dp.delta = delta(); 94 dp.sigma = sigma(); 95 dp.contrast = contrast(); 96 dp.background = background(); 97 98 99 // Get the dispersion points for the bilayer thickness(delta) 100 vector<WeightPoint> weights_delta; 101 delta.get_weights(weights_delta); 102 103 // Perform the computation, with all weight points 104 double sum = 0.0; 105 double norm = 0.0; 106 107 // Loop over detla weight points 108 for(int i=0; i< (int)weights_delta.size(); i++) { 109 dp.delta = weights_delta[i].value; 110 sum += weights_delta[i].weight* lamellar_analytical_2DXY(&dp, qx, qy); 111 norm += weights_delta[i].weight; 112 113 } 114 return sum/norm + background(); 73 double q = sqrt(qx*qx + qy*qy); 74 return (*this).operator()(q); 115 75 } 116 76 … … 123 83 */ 124 84 double LamellarModel :: evaluate_rphi(double q, double phi) { 125 double qx = q*cos(phi); 126 double qy = q*sin(phi); 127 return (*this).operator()(qx, qy); 85 return (*this).operator()(q); 128 86 } -
sansmodels/src/sans/models/c_models/multishell.cpp
r2cc633b r42f193a 34 34 core_radius = Parameter(60.0, true); 35 35 core_radius.set_min(0.0); 36 s_thickness = Parameter(10.0); 37 w_thickness = Parameter(10.0); 36 s_thickness = Parameter(10.0, true); 37 s_thickness.set_min(0.0); 38 w_thickness = Parameter(10.0, true); 39 w_thickness.set_min(0.0); 38 40 core_sld = Parameter(6.4e-6); 39 41 shell_sld = Parameter(4.0e-7); … … 60 62 dp[5] = shell_sld(); 61 63 dp[6] = n_pairs(); 62 dp[7] = background();64 dp[7] = 0.0; 63 65 64 66 // Get the dispersion points for the core radius -
sansmodels/src/sans/models/c_models/vesicle.cpp
r3d25331f r42f193a 34 34 core_radius = Parameter(100.0, true); 35 35 core_radius.set_min(0.0); 36 thickness = Parameter(30.0); 36 thickness = Parameter(30.0, true); 37 thickness.set_min(0.0); 37 38 core_sld = Parameter(6.36e-6); 38 39 shell_sld = Parameter(5.0e-7); … … 57 58 dp[4] = shell_sld(); 58 59 dp[5] = background(); 59 60 60 61 61 62 // Get the dispersion points for the core radius 62 63 vector<WeightPoint> weights_core_radius; 63 64 core_radius.get_weights(weights_core_radius); 65 // Get the dispersion points for the thickness 66 vector<WeightPoint> weights_thickness; 67 thickness.get_weights(weights_thickness); 64 68 65 69 // Perform the computation, with all weight points … … 70 74 for(int i=0; i< (int)weights_core_radius.size(); i++) { 71 75 dp[1] = weights_core_radius[i].value; 72 73 sum += weights_core_radius[i].weight 74 * VesicleForm(dp, q); 75 norm += weights_core_radius[i].weight; 76 for(int j=0; j< (int)weights_core_radius.size(); j++) { 77 dp[2] = weights_thickness[j].value; 78 sum += weights_core_radius[i].weight 79 * weights_thickness[j].weight * VesicleForm(dp, q); 80 norm += weights_core_radius[i].weight * weights_thickness[j].weight; 81 } 76 82 } 77 83 return sum/norm + background();
Note: See TracChangeset
for help on using the changeset viewer.