source: sasview/sansmodels/src/sans/models/c_models/models.hh @ 6d48919

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 6d48919 was e096270, checked in by Jae Cho <jhjcho@…>, 14 years ago

added a new model

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