source: sasview/sansmodels/src/c_models/models.hh @ bbbed8c

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

cscrystal model refactor

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