source: sasview/sansmodels/src/sans/models/c_models/c_models.cpp @ 4cc8285c

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 4cc8285c was fbd09fa0, checked in by Jae Cho <jhjcho@…>, 14 years ago

added missing models

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