source: sasview/sansmodels/src/c_models/models.hh @ 37805e9

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 37805e9 was 37805e9, checked in by Mathieu Doucet <doucetm@…>, 13 years ago

spheresld refactor

  • Property mode set to 100644
File size: 15.5 KB
Line 
1/**
2        This software was developed by the University of Tennessee as part of the
3        Distributed Data Analysis of Neutron Scattering Experiments (DANSE)
4        project funded by the US National Science Foundation.
5
6        If you use DANSE applications to do scientific research that leads to
7        publication, we ask that you acknowledge the use of the software with the
8        following sentence:
9
10        "This work benefited from DANSE software developed under NSF award DMR-0520547."
11
12        copyright 2008, University of Tennessee
13 */
14#ifndef MODEL_CLASS_H
15#define MODEL_CLASS_H
16
17#include <vector>
18#include "parameters.hh"
19extern "C" {
20        #include "cylinder.h"
21        #include "parallelepiped.h"
22        #include "lamellarPS.h"
23        #include "lamellar.h"
24        #include "fuzzysphere.h"
25}
26
27using namespace std;
28
29
30
31
32
33
34class SCCrystalModel{
35public:
36        // Model parameters
37        Parameter scale;
38        Parameter dnn;
39        Parameter d_factor;
40        Parameter radius;
41        Parameter sldSph;
42        Parameter sldSolv;
43        Parameter background;
44        Parameter theta;
45        Parameter phi;
46        Parameter psi;
47
48        // Constructor
49        SCCrystalModel();
50
51        // Operators to get I(Q)
52        double operator()(double q);
53        double operator()(double qx, double qy);
54        double calculate_ER();
55        double evaluate_rphi(double q, double phi);
56};
57
58
59class PearlNecklaceModel{
60public:
61        // Model parameters
62        Parameter scale;
63        Parameter radius;
64        Parameter edge_separation;
65        Parameter thick_string;
66        Parameter num_pearls;
67        Parameter sld_pearl;
68        Parameter sld_string;
69        Parameter sld_solv;
70        Parameter background;
71
72        // Constructor
73        PearlNecklaceModel();
74
75        // Operators to get I(Q)
76        double operator()(double q);
77        double operator()(double qx, double qy);
78        double calculate_ER();
79        double evaluate_rphi(double q, double phi);
80};
81
82class FCCrystalModel{
83public:
84        // Model parameters
85        Parameter scale;
86        Parameter dnn;
87        Parameter d_factor;
88        Parameter radius;
89        Parameter sldSph;
90        Parameter sldSolv;
91        Parameter background;
92        Parameter theta;
93        Parameter phi;
94        Parameter psi;
95
96        // Constructor
97        FCCrystalModel();
98
99        // Operators to get I(Q)
100        double operator()(double q);
101        double operator()(double qx, double qy);
102        double calculate_ER();
103        double evaluate_rphi(double q, double phi);
104};
105
106
107class BCCrystalModel{
108public:
109        // Model parameters
110        Parameter scale;
111        Parameter dnn;
112        Parameter d_factor;
113        Parameter radius;
114        Parameter sldSph;
115        Parameter sldSolv;
116        Parameter background;
117        Parameter theta;
118        Parameter phi;
119        Parameter psi;
120
121        // Constructor
122        BCCrystalModel();
123
124        // Operators to get I(Q)
125        double operator()(double q);
126        double operator()(double qx, double qy);
127        double calculate_ER();
128        double evaluate_rphi(double q, double phi);
129};
130
131
132class FuzzySphereModel{
133public:
134        // Model parameters
135        Parameter radius;
136        Parameter scale;
137        Parameter fuzziness;
138        Parameter sldSph;
139        Parameter sldSolv;
140        Parameter background;
141
142        // Constructor
143        FuzzySphereModel();
144
145        // Operators to get I(Q)
146        double operator()(double q);
147        double operator()(double qx, double qy);
148        double calculate_ER();
149        double evaluate_rphi(double q, double phi);
150};
151
152class HardsphereStructure{
153public:
154        // Model parameters
155        Parameter effect_radius;
156        Parameter volfraction;
157
158        // Constructor
159        HardsphereStructure();
160
161        // Operators to get I(Q)
162        double operator()(double q);
163        double operator()(double qx, double qy);
164        double calculate_ER();
165        double evaluate_rphi(double q, double phi);
166};
167
168class StickyHSStructure{
169public:
170        // Model parameters
171        Parameter effect_radius;
172        Parameter volfraction;
173        Parameter perturb;
174        Parameter stickiness;
175
176        // Constructor
177        StickyHSStructure();
178
179        // Operators to get I(Q)
180        double operator()(double q);
181        double operator()(double qx, double qy);
182        double calculate_ER();
183        double evaluate_rphi(double q, double phi);
184};
185
186class SquareWellStructure{
187public:
188        // Model parameters
189        Parameter effect_radius;
190        Parameter volfraction;
191        Parameter welldepth;
192        Parameter wellwidth;
193
194        // Constructor
195        SquareWellStructure();
196
197        // Operators to get I(Q)
198        double operator()(double q);
199        double operator()(double qx, double qy);
200        double calculate_ER();
201        double evaluate_rphi(double q, double phi);
202};
203
204class HayterMSAStructure{
205public:
206        // Model parameters
207        Parameter effect_radius;
208        Parameter charge;
209        Parameter volfraction;
210        Parameter temperature;
211        Parameter saltconc;
212        Parameter dielectconst;
213
214        // Constructor
215        HayterMSAStructure();
216
217        // Operators to get I(Q)
218        double operator()(double q);
219        double operator()(double qx, double qy);
220        double calculate_ER();
221        double evaluate_rphi(double q, double phi);
222};
223
224class DiamEllipFunc{
225public:
226        // Model parameters
227        Parameter radius_a;
228        Parameter radius_b;
229
230        // Constructor
231        DiamEllipFunc();
232
233        // Operators to get I(Q)
234        double operator()(double q);
235        double operator()(double qx, double qy);
236        double calculate_ER();
237        double evaluate_rphi(double q, double phi);
238};
239
240class DiamCylFunc{
241public:
242        // Model parameters
243        Parameter radius;
244        Parameter length;
245
246        // Constructor
247        DiamCylFunc();
248
249        // Operators to get I(Q)
250        double operator()(double q);
251        double operator()(double qx, double qy);
252        double calculate_ER();
253        double evaluate_rphi(double q, double phi);
254};
255
256
257class SLDCalFunc{
258public:
259        // Model parameters
260        Parameter fun_type;
261        Parameter npts_inter;
262        Parameter shell_num;
263        Parameter nu_inter;
264        Parameter sld_left;
265        Parameter sld_right;
266
267        // Constructor
268        SLDCalFunc();
269
270        // Operators to get SLD
271        double operator()(double q);
272        double operator()(double qx, double qy);
273        double calculate_ER();
274        double evaluate_rphi(double q, double phi);
275};
276
277
278class CoreShellModel{
279public:
280        // Model parameters
281        Parameter radius;
282        Parameter scale;
283        Parameter thickness;
284        Parameter core_sld;
285        Parameter shell_sld;
286        Parameter solvent_sld;
287        Parameter background;
288
289        // Constructor
290        CoreShellModel();
291
292        // Operators to get I(Q)
293        double operator()(double q);
294        double operator()(double qx, double qy);
295        double calculate_ER();
296        double evaluate_rphi(double q, double phi);
297};
298
299class CoreFourShellModel{
300public:
301        // Model parameters
302        Parameter scale;
303        Parameter rad_core0;
304        Parameter sld_core0;
305        Parameter thick_shell1;
306        Parameter sld_shell1;
307        Parameter thick_shell2;
308        Parameter sld_shell2;
309        Parameter thick_shell3;
310        Parameter sld_shell3;
311        Parameter thick_shell4;
312        Parameter sld_shell4;
313        Parameter sld_solv;
314        Parameter background;
315
316        // Constructor
317        CoreFourShellModel();
318
319        // Operators to get I(Q)
320        double operator()(double q);
321        double operator()(double qx, double qy);
322        double calculate_ER();
323        double evaluate_rphi(double q, double phi);
324};
325
326class CoreShellCylinderModel{
327public:
328        // Model parameters
329        Parameter radius;
330        Parameter scale;
331        Parameter thickness;
332        Parameter length;
333        Parameter core_sld;
334        Parameter shell_sld;
335        Parameter solvent_sld;
336        Parameter background;
337        Parameter axis_theta;
338        Parameter axis_phi;
339
340        // Constructor
341        CoreShellCylinderModel();
342
343        // Operators to get I(Q)
344        double operator()(double q);
345        double operator()(double qx, double qy);
346        double calculate_ER();
347        double evaluate_rphi(double q, double phi);
348};
349
350class EllipsoidModel{
351public:
352        // Model parameters
353        Parameter radius_a;
354        Parameter scale;
355        Parameter radius_b;
356        Parameter sldEll;
357        Parameter sldSolv;
358        Parameter background;
359        Parameter axis_theta;
360        Parameter axis_phi;
361
362        // Constructor
363        EllipsoidModel();
364
365        // Operators to get I(Q)
366        double operator()(double q);
367        double operator()(double qx, double qy);
368        double calculate_ER();
369        double evaluate_rphi(double q, double phi);
370};
371
372class EllipticalCylinderModel{
373public:
374        // Model parameters
375        Parameter r_minor;
376        Parameter scale;
377        Parameter r_ratio;
378        Parameter length;
379        Parameter sldCyl;
380        Parameter sldSolv;
381        Parameter background;
382        Parameter cyl_theta;
383        Parameter cyl_phi;
384        Parameter cyl_psi;
385
386        // Constructor
387        EllipticalCylinderModel();
388
389        // Operators to get I(Q)
390        double operator()(double q);
391        double operator()(double qx, double qy);
392        double calculate_ER();
393        double evaluate_rphi(double q, double phi);
394};
395class TriaxialEllipsoidModel{
396public:
397        // Model parameters
398        Parameter scale;
399        Parameter semi_axisA;
400        Parameter semi_axisB;
401        Parameter semi_axisC;
402        Parameter sldEll;
403        Parameter sldSolv;
404        Parameter background;
405        Parameter axis_theta;
406        Parameter axis_phi;
407        Parameter axis_psi;
408
409        // Constructor
410        TriaxialEllipsoidModel();
411
412        // Operators to get I(Q)
413        double operator()(double q);
414        double operator()(double qx, double qy);
415        double calculate_ER();
416        double evaluate_rphi(double q, double phi);
417};
418
419class FlexibleCylinderModel{
420public:
421        // Model parameters
422        Parameter scale;
423        Parameter length;
424        Parameter kuhn_length;
425        Parameter radius;
426        Parameter sldCyl;
427        Parameter sldSolv;
428        Parameter background;
429
430        // Constructor
431        FlexibleCylinderModel();
432
433        // Operators to get I(Q)
434        double operator()(double q);
435        double operator()(double qx, double qy);
436        double calculate_ER();
437        double evaluate_rphi(double q, double phi);
438};
439
440class FlexCylEllipXModel{
441public:
442        // Model parameters
443        Parameter scale;
444        Parameter length;
445        Parameter kuhn_length;
446        Parameter radius;
447        Parameter axis_ratio;
448        Parameter sldCyl;
449        Parameter sldSolv;
450        Parameter background;
451
452        // Constructor
453        FlexCylEllipXModel();
454
455        // Operators to get I(Q)
456        double operator()(double q);
457        double operator()(double qx, double qy);
458        double calculate_ER();
459        double evaluate_rphi(double q, double phi);
460};
461
462class StackedDisksModel{
463public:
464        // Model parameters
465        Parameter scale;
466        Parameter core_thick;
467        Parameter radius;
468        Parameter layer_thick;
469        Parameter core_sld;
470        Parameter layer_sld;
471        Parameter solvent_sld;
472        Parameter n_stacking;
473        Parameter sigma_d;
474        Parameter background;
475        Parameter axis_theta;
476        Parameter axis_phi;
477
478        // Constructor
479        StackedDisksModel();
480
481        // Operators to get I(Q)
482        double operator()(double q);
483        double operator()(double qx, double qy);
484        double calculate_ER();
485        double evaluate_rphi(double q, double phi);
486};
487
488class LamellarModel{
489public:
490        // Model parameters
491        Parameter scale;
492        Parameter bi_thick;
493        Parameter sld_bi;
494        Parameter sld_sol;
495        Parameter background;
496
497        // Constructor
498        LamellarModel();
499
500        // Operators to get I(Q)
501        double operator()(double q);
502        double operator()(double qx, double qy);
503        double calculate_ER();
504        double evaluate_rphi(double q, double phi);
505
506};
507
508class LamellarFFHGModel{
509public:
510        // Model parameters
511        Parameter scale;
512        Parameter t_length;
513        Parameter h_thickness;
514        Parameter sld_tail;
515        Parameter sld_head;
516        Parameter sld_solvent;
517        Parameter background;
518
519        // Constructor
520        LamellarFFHGModel();
521
522        // Operators to get I(Q)
523        double operator()(double q);
524        double operator()(double qx, double qy);
525        double calculate_ER();
526        double evaluate_rphi(double q, double phi);
527
528};
529
530
531
532class LamellarPSModel{
533public:
534        // Model parameters
535        Parameter scale;
536        Parameter spacing;
537        Parameter delta;
538        Parameter sld_bi;
539        Parameter sld_sol;
540        Parameter n_plates;
541        Parameter caille;
542        Parameter background;
543
544        // Constructor
545        LamellarPSModel();
546
547        // Operators to get I(Q)
548        double operator()(double q);
549        double operator()(double qx, double qy);
550        double calculate_ER();
551        double evaluate_rphi(double q, double phi);
552};
553
554class LamellarPSHGModel{
555public:
556        // Model parameters
557        Parameter scale;
558        Parameter spacing;
559        Parameter deltaT;
560        Parameter deltaH;
561        Parameter sld_tail;
562        Parameter sld_head;
563        Parameter sld_solvent;
564        Parameter n_plates;
565        Parameter caille;
566        Parameter background;
567
568        // Constructor
569        LamellarPSHGModel();
570
571        // Operators to get I(Q)
572        double operator()(double q);
573        double operator()(double qx, double qy);
574        double calculate_ER();
575        double evaluate_rphi(double q, double phi);
576};
577
578
579class LamellarPCrystalModel{
580public:
581        // Model parameters
582        Parameter scale;
583        Parameter thickness;
584        Parameter Nlayers;
585        Parameter spacing;
586        Parameter pd_spacing;
587        Parameter sld_layer;
588        Parameter sld_solvent;
589        Parameter background;
590
591        // Constructor
592        LamellarPCrystalModel();
593
594        // Operators to get I(Q)
595        double operator()(double q);
596        double operator()(double qx, double qy);
597        double calculate_ER();
598        double evaluate_rphi(double q, double phi);
599};
600
601class CoreShellEllipsoidModel{
602public:
603        // Model parameters
604        Parameter scale;
605        Parameter equat_core;
606        Parameter polar_core;
607        Parameter equat_shell;
608        Parameter polar_shell;
609        Parameter sld_core;
610        Parameter sld_shell;
611        Parameter sld_solvent;
612        Parameter background;
613        Parameter axis_theta;
614        Parameter axis_phi;
615
616        // Constructor
617        CoreShellEllipsoidModel();
618
619        // Operators to get I(Q)
620        double operator()(double q);
621        double operator()(double qx, double qy);
622        double calculate_ER();
623        double evaluate_rphi(double q, double phi);
624};
625
626class HollowCylinderModel{
627public:
628        // Model parameters
629        Parameter scale;
630        Parameter core_radius;
631        Parameter radius;
632        Parameter length;
633        Parameter sldCyl;
634        Parameter sldSolv;
635        Parameter background;
636        Parameter axis_theta;
637        Parameter axis_phi;
638
639        //Constructor
640        HollowCylinderModel();
641
642        //Operators to get I(Q)
643        double operator()(double q);
644        double operator()(double qx , double qy);
645        double calculate_ER();
646        double evaluate_rphi(double q, double phi);
647};
648
649class MultiShellModel{
650public:
651        // Model parameters
652        Parameter scale;
653        Parameter core_radius;
654        Parameter s_thickness;
655        Parameter w_thickness;
656        Parameter core_sld;
657        Parameter shell_sld;
658        Parameter n_pairs;
659        Parameter background;
660
661        //Constructor
662        MultiShellModel();
663
664        //Operators to get I(Q)
665        double operator()(double q);
666        double operator()(double qx , double qy);
667        double calculate_ER();
668        double evaluate_rphi(double q, double phi);
669};
670
671class VesicleModel{
672public:
673        // Model parameters
674        Parameter scale;
675        Parameter radius;
676        Parameter thickness;
677        Parameter core_sld;
678        Parameter shell_sld;
679        Parameter background;
680
681        //Constructor
682        VesicleModel();
683
684        //Operators to get I(Q)
685        double operator()(double q);
686        double operator()(double qx , double qy);
687        double calculate_ER();
688        double evaluate_rphi(double q, double phi);
689};
690
691class BinaryHSModel{
692public:
693        // Model parameters
694        Parameter l_radius;
695        Parameter s_radius;
696        Parameter vol_frac_ls;
697        Parameter vol_frac_ss;
698        Parameter ls_sld;
699        Parameter ss_sld;
700        Parameter solvent_sld;
701        Parameter background;
702
703        //Constructor
704        BinaryHSModel();
705
706        //Operators to get I(Q)
707        double operator()(double q);
708        double operator()(double qx , double qy);
709        double calculate_ER();
710        double evaluate_rphi(double q, double phi);
711};
712
713class BinaryHSPSF11Model{
714public:
715        // Model parameters
716        Parameter l_radius;
717        Parameter s_radius;
718        Parameter vol_frac_ls;
719        Parameter vol_frac_ss;
720        Parameter ls_sld;
721        Parameter ss_sld;
722        Parameter solvent_sld;
723        Parameter background;
724
725        //Constructor
726        BinaryHSPSF11Model();
727
728        //Operators to get I(Q)
729        double operator()(double q);
730        double operator()(double qx , double qy);
731        double calculate_ER();
732        double evaluate_rphi(double q, double phi);
733};
734
735class Poly_GaussCoil{
736public:
737        // Model parameters
738        Parameter rg;
739        Parameter scale;
740        Parameter poly_m;
741        Parameter background;
742
743        // Constructor
744        Poly_GaussCoil();
745
746        // Operators to get I(Q)
747        double operator()(double q);
748        double operator()(double qx, double qy);
749        double calculate_ER();
750        double evaluate_rphi(double q, double phi);
751};
752
753class FractalModel{
754public:
755        // Model parameters
756        Parameter radius;
757        Parameter scale;
758        Parameter fractal_dim;
759        Parameter cor_length;
760        Parameter sldBlock;
761        Parameter sldSolv;
762        Parameter background;
763
764        // Constructor
765        FractalModel();
766
767        // Operators to get I(Q)
768        double operator()(double q);
769        double operator()(double qx, double qy);
770        double calculate_ER();
771        double evaluate_rphi(double q, double phi);
772};
773
774#endif
Note: See TracBrowser for help on using the repository browser.