source: sasview/sansmodels/src/sans/models/c_models/c_models.cpp @ 943cacb

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2release_4.0.1ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 943cacb was 96656e3, checked in by Jae Cho <jhjcho@…>, 14 years ago

update models due to changes of template

  • Property mode set to 100644
File size: 8.1 KB
RevLine 
[af03ddd]1/** c_models
2 *
3 * Module containing all SANS model extensions
4 *
5 * @author   M.Doucet / UTK
6 */
7#include <Python.h>
8#include <parameters.hh>
[812b901]9#define PY_ARRAY_UNIQUE_SYMBOL PyArray_API_sans
10#include "arrayobject.h"
11
[af03ddd]12
13void addCCylinderModel(PyObject *module);
[fbd09fa0]14void addCBarBellModel(PyObject *module);
15void addCCappedCylinderModel(PyObject *module);
[27a0771]16void addCTriaxialEllipsoidModel(PyObject *module);
[8a48713]17void addCParallelepipedModel(PyObject *module);
[18f2ca1]18void addCCSParallelepipedModel(PyObject *module);
[0f5bc9f]19void addCSphereModel(PyObject *module);
[96d19c6]20void addCSphereSLDModel(PyObject *module);
[e096270]21void addCOnionModel(PyObject *module);
[35aface]22void addCReflModel(PyObject *module);
[96656e3]23void addCReflAdvModel(PyObject *module);
[c724ccd]24void addCFuzzySphereModel(PyObject *module);
[25579e8]25void addCHardsphereStructure(PyObject *module);
26void addCStickyHSStructure(PyObject *module);
[94a3f8f]27void addCSCCrystalModel(PyObject *module);
[d5b6a9d]28void addCFCCrystalModel(PyObject *module);
29void addCBCCrystalModel(PyObject *module);
[25579e8]30void addCSquareWellStructure(PyObject *module);
31void addCHayterMSAStructure(PyObject *module);
[0f5bc9f]32void addCCoreShellModel(PyObject *module);
[c724ccd]33void addCCoreFourShellModel(PyObject *module);
[0f5bc9f]34void addCCoreShellCylinderModel(PyObject *module);
35void addCEllipsoidModel(PyObject *module);
36void addCEllipticalCylinderModel(PyObject *module);
[5068697]37void addCTriaxialEllipsoidModel(PyObject *module);
38void addCFlexibleCylinderModel(PyObject *module);
[c724ccd]39void addCFlexCylEllipXModel(PyObject *module);
[5068697]40void addCStackedDisksModel(PyObject *module);
[27a0771]41void addCLamellarPSModel(PyObject *module);
42void addCLamellarPSHGModel(PyObject *module);
[fbd09fa0]43void addCLamellarPCrystalModel(PyObject *module);
[eddff027]44void addCCoreShellEllipsoidModel(PyObject *module);
[5eb9154]45void addCDiamEllipFunc(PyObject *module);
46void addCDiamCylFunc(PyObject *module);
[96d19c6]47void addCSLDCalFunc(PyObject *module);
[5eb9154]48
49//void addCOblateModel(PyObject *module);
50//void addCProlateModel(PyObject *module);
[34c3020]51void addCLamellarModel(PyObject *module);
52void addCLamellarFFHGModel(PyObject *module);
[27fea3f]53void addCHollowCylinderModel(PyObject *module);
[3d25331f]54void addCMultiShellModel(PyObject *module);
55void addCVesicleModel(PyObject *module);
56void addCBinaryHSModel(PyObject *module);
[35aface]57void addCRPAModel(PyObject *module);
[c724ccd]58void addCFractalModel(PyObject *module);
59void addCPoly_GaussCoil(PyObject *module);
[27a0771]60
[0f5bc9f]61
[af03ddd]62extern "C" {
[0f5bc9f]63        //void addCCoreShellCylinderModel(PyObject *module);
64        //void addCCoreShellModel(PyObject *module);
65        //void addCEllipsoidModel(PyObject *module);
66        //void addCEllipticalCylinderModel(PyObject *module);
[af03ddd]67        void addDisperser(PyObject *module);
68        void addCGaussian(PyObject *module);
69        void addCLorentzian(PyObject *module);
[eba9885]70        void addCLogNormal(PyObject *module);
71        void addCSchulz(PyObject *module);
[af03ddd]72}
73
74/**
75 * Delete a dispersion model object
76 */
77void del_dispersion_model(void *ptr){
78        DispersionModel * disp = static_cast<DispersionModel *>(ptr);
79        delete disp;
80        return;
81}
82
83/**
84 * Create a dispersion model as a python object
85 */
86PyObject * new_dispersion_model(PyObject *, PyObject *args) {
87        DispersionModel *disp = new DispersionModel();
88        return PyCObject_FromVoidPtr(disp, del_dispersion_model);
89}
90
91
92/**
[eba9885]93 * Delete a lognormal dispersion model object
94 */
95void del_lognormal_dispersion(void *ptr){
96        LogNormalDispersion * disp = static_cast<LogNormalDispersion *>(ptr);
97        delete disp;
98        return;
99}
100
101/**
102 * Create a lognormal dispersion model as a python object
103 */
104PyObject * new_lognormal_dispersion(PyObject *, PyObject *args) {
105        LogNormalDispersion *disp = new LogNormalDispersion();
106        return PyCObject_FromVoidPtr(disp, del_lognormal_dispersion);
107}
108
109/**
[af03ddd]110 * Delete a gaussian dispersion model object
111 */
112void del_gaussian_dispersion(void *ptr){
113        GaussianDispersion * disp = static_cast<GaussianDispersion *>(ptr);
114        delete disp;
115        return;
116}
117
118/**
119 * Create a gaussian dispersion model as a python object
120 */
121PyObject * new_gaussian_dispersion(PyObject *, PyObject *args) {
122        GaussianDispersion *disp = new GaussianDispersion();
123        return PyCObject_FromVoidPtr(disp, del_gaussian_dispersion);
124}
125
126/**
[eba9885]127 * Delete a schulz dispersion model object
128 */
129void del_schulz_dispersion(void *ptr){
130        SchulzDispersion * disp = static_cast<SchulzDispersion *>(ptr);
131        delete disp;
132        return;
133}
134/**
135 * Create a schulz dispersion model as a python object
136 */
137PyObject * new_schulz_dispersion(PyObject *, PyObject *args) {
138        SchulzDispersion *disp = new SchulzDispersion();
139        return PyCObject_FromVoidPtr(disp, del_schulz_dispersion);
140}
141
142
143/**
[af03ddd]144 * Delete an array dispersion model object
145 */
146void del_array_dispersion(void *ptr){
147        ArrayDispersion * disp = static_cast<ArrayDispersion *>(ptr);
148        delete disp;
149        return;
150}
151
152/**
153 * Create an array dispersion model as a python object
154 */
155PyObject * new_array_dispersion(PyObject *, PyObject *args) {
156        ArrayDispersion *disp = new ArrayDispersion();
157        return PyCObject_FromVoidPtr(disp, del_array_dispersion);
158}
159
160#define INVECTOR(obj,buf,len)                                                                           \
161    do { \
162        int err = PyObject_AsReadBuffer(obj, (const void **)(&buf), &len); \
163        if (err < 0) return NULL; \
164        len /= sizeof(*buf); \
165    } while (0)
166
167/**
168 * Sets weights from a numpy array
169 */
170PyObject * set_weights(PyObject *, PyObject *args) {
171        PyObject *val_obj;
172        PyObject *wei_obj;
173        PyObject *disp;
174        Py_ssize_t nval;
175        Py_ssize_t nwei;
176        double *values;
177        double *weights;
[812b901]178    //int i;
[af03ddd]179
180        if (!PyArg_ParseTuple(args, "OOO", &disp, &val_obj, &wei_obj)) return NULL;
181        INVECTOR(val_obj, values, nval);
182        INVECTOR(wei_obj, weights, nwei);
183
184        // Sanity check
185        if(nval!=nwei) return NULL;
186
187        // Set the array pointers
188        void *temp = PyCObject_AsVoidPtr(disp);
189        DispersionModel * dispersion = static_cast<DispersionModel *>(temp);
190        dispersion->set_weights(nval, values, weights);
191
192        return Py_BuildValue("i",1);
193}
194
195
196
197/**
198 * Define empty module
199 */
200static PyMethodDef module_methods[] = {
201        {"new_dispersion_model", (PyCFunction)new_dispersion_model     , METH_VARARGS,
202                  "Create a new DispersionModel object"},
203        {"new_gaussian_model",   (PyCFunction)new_gaussian_dispersion, METH_VARARGS,
204                  "Create a new GaussianDispersion object"},
[eba9885]205    {"new_lognormal_model",   (PyCFunction)new_lognormal_dispersion, METH_VARARGS,
206                  "Create a new LogNormalDispersion object"},
207    {"new_schulz_model",   (PyCFunction)new_schulz_dispersion, METH_VARARGS,
208                  "Create a new SchulzDispersion object"},
[af03ddd]209        {"new_array_model",      (PyCFunction)new_array_dispersion  , METH_VARARGS,
210                  "Create a new ArrayDispersion object"},
211        {"set_dispersion_weights",(PyCFunction)set_weights  , METH_VARARGS,
212                        "Create the dispersion weight arrays for an Array Dispersion object"},
213    {NULL}
214};
215
216
217#ifndef PyMODINIT_FUNC  /* declarations for DLL import/export */
218#define PyMODINIT_FUNC void
219#endif
220PyMODINIT_FUNC
221initc_models(void)
222{
223    PyObject* m;
224
225    m = Py_InitModule3("c_models", module_methods,
226                       "C extension module for SANS scattering models.");
[812b901]227        import_array();
[af03ddd]228
229        addCCylinderModel(m);
[fbd09fa0]230        addCBarBellModel(m);
231        addCCappedCylinderModel(m);
[8a48713]232        addCParallelepipedModel(m);
[18f2ca1]233        addCCSParallelepipedModel(m);
[af03ddd]234        addCCoreShellCylinderModel(m);
235        addCCoreShellModel(m);
[c724ccd]236        addCCoreFourShellModel(m);
[af03ddd]237        addCEllipsoidModel(m);
238        addCSphereModel(m);
[96d19c6]239        addCSphereSLDModel(m);
[e096270]240        addCOnionModel(m);
[35aface]241        addCReflModel(m);
[96656e3]242        addCReflAdvModel(m);
[c724ccd]243        addCFuzzySphereModel(m);
[25579e8]244        addCHardsphereStructure(m);
245        addCStickyHSStructure(m);
[94a3f8f]246        addCSCCrystalModel(m);
[d5b6a9d]247        addCFCCrystalModel(m);
248        addCBCCrystalModel(m);
[25579e8]249        addCSquareWellStructure(m);
250        addCHayterMSAStructure(m);
[af03ddd]251        addCEllipticalCylinderModel(m);
[5068697]252        addCTriaxialEllipsoidModel(m);
253        addCFlexibleCylinderModel(m);
[c724ccd]254        addCFlexCylEllipXModel(m);
[5068697]255        addCStackedDisksModel(m);
[27a0771]256        addCLamellarPSModel(m);
257        addCLamellarPSHGModel(m);
[fbd09fa0]258        addCLamellarPCrystalModel(m);
[eddff027]259        addCCoreShellEllipsoidModel(m);
[5eb9154]260        addCDiamEllipFunc(m);
261        addCDiamCylFunc(m);
[96d19c6]262        addCSLDCalFunc(m);
[5eb9154]263
264//      addCOblateModel(m);
265//      addCProlateModel(m);
[34c3020]266        addCLamellarModel(m);
267        addCLamellarFFHGModel(m);
[27fea3f]268        addCHollowCylinderModel(m);
[3d25331f]269        addCMultiShellModel(m);
270        addCBinaryHSModel(m);
[af03ddd]271        addDisperser(m);
272        addCGaussian(m);
[eba9885]273        addCSchulz(m);
274        addCLogNormal(m);
[af03ddd]275        addCLorentzian(m);
[3d25331f]276        addCVesicleModel(m);
[c724ccd]277        addCPoly_GaussCoil(m);
[35aface]278        addCRPAModel(m);
[c724ccd]279        addCFractalModel(m);
[af03ddd]280}
Note: See TracBrowser for help on using the repository browser.