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

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 fbae881 was 35aface, checked in by Jae Cho <jhjcho@…>, 14 years ago

addede new models and attr. non_fittable

  • Property mode set to 100644
File size: 17.9 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
152
153class RPAModel{
154public:
155        // Model parameters
156        Parameter lcase_n;
157        Parameter ba;
158        Parameter bb;
159        Parameter bc;
160        Parameter bd;
161
162        Parameter Kab;
163        Parameter Kac;
164        Parameter Kad;
165        Parameter Kbc;
166        Parameter Kbd;
167        Parameter Kcd;
168
169        Parameter scale;
170        Parameter background;
171
172        Parameter Na;
173        Parameter Phia;
174        Parameter va;
175        Parameter La;
176
177        Parameter Nb;
178        Parameter Phib;
179        Parameter vb;
180        Parameter Lb;
181
182        Parameter Nc;
183        Parameter Phic;
184        Parameter vc;
185        Parameter Lc;
186
187        Parameter Nd;
188        Parameter Phid;
189        Parameter vd;
190        Parameter Ld;
191
192        // Constructor
193        RPAModel();
194
195        // Operators to get I(Q)
196        double operator()(double q);
197        double operator()(double qx, double qy);
198        double calculate_ER();
199        double evaluate_rphi(double q, double phi);
200};
201
202
203class ReflModel{
204public:
205        // Model parameters
206        Parameter n_layers;
207        Parameter scale;
208        Parameter thick_inter0;
209        Parameter func_inter0;
210        Parameter sld_sub0;
211        Parameter sld_medium;
212        Parameter background;
213
214        Parameter sld_flat1;
215        Parameter sld_flat2;
216        Parameter sld_flat3;
217        Parameter sld_flat4;
218        Parameter sld_flat5;
219        Parameter sld_flat6;
220        Parameter sld_flat7;
221        Parameter sld_flat8;
222        Parameter sld_flat9;
223        Parameter sld_flat10;
224
225        Parameter thick_inter1;
226        Parameter thick_inter2;
227        Parameter thick_inter3;
228        Parameter thick_inter4;
229        Parameter thick_inter5;
230        Parameter thick_inter6;
231        Parameter thick_inter7;
232        Parameter thick_inter8;
233        Parameter thick_inter9;
234        Parameter thick_inter10;
235
236        Parameter thick_flat1;
237        Parameter thick_flat2;
238        Parameter thick_flat3;
239        Parameter thick_flat4;
240        Parameter thick_flat5;
241        Parameter thick_flat6;
242        Parameter thick_flat7;
243        Parameter thick_flat8;
244        Parameter thick_flat9;
245        Parameter thick_flat10;
246
247        Parameter func_inter1;
248        Parameter func_inter2;
249        Parameter func_inter3;
250        Parameter func_inter4;
251        Parameter func_inter5;
252        Parameter func_inter6;
253        Parameter func_inter7;
254        Parameter func_inter8;
255        Parameter func_inter9;
256        Parameter func_inter10;
257
258        // Constructor
259        ReflModel();
260
261        // Operators to get I(Q)
262        double operator()(double q);
263        double operator()(double qx, double qy);
264        double calculate_ER();
265        double evaluate_rphi(double q, double phi);
266};
267
268
269class SphereModel{
270public:
271        // Model parameters
272        Parameter radius;
273        Parameter scale;
274        Parameter sldSph;
275        Parameter sldSolv;
276        Parameter background;
277
278        // Constructor
279        SphereModel();
280
281        // Operators to get I(Q)
282        double operator()(double q);
283        double operator()(double qx, double qy);
284        double calculate_ER();
285        double evaluate_rphi(double q, double phi);
286};
287
288
289class FuzzySphereModel{
290public:
291        // Model parameters
292        Parameter radius;
293        Parameter scale;
294        Parameter fuzziness;
295        Parameter sldSph;
296        Parameter sldSolv;
297        Parameter background;
298
299        // Constructor
300        FuzzySphereModel();
301
302        // Operators to get I(Q)
303        double operator()(double q);
304        double operator()(double qx, double qy);
305        double calculate_ER();
306        double evaluate_rphi(double q, double phi);
307};
308
309class HardsphereStructure{
310public:
311        // Model parameters
312        Parameter effect_radius;
313        Parameter volfraction;
314
315        // Constructor
316        HardsphereStructure();
317
318        // Operators to get I(Q)
319        double operator()(double q);
320        double operator()(double qx, double qy);
321        double calculate_ER();
322        double evaluate_rphi(double q, double phi);
323};
324
325class StickyHSStructure{
326public:
327        // Model parameters
328        Parameter effect_radius;
329        Parameter volfraction;
330        Parameter perturb;
331        Parameter stickiness;
332
333        // Constructor
334        StickyHSStructure();
335
336        // Operators to get I(Q)
337        double operator()(double q);
338        double operator()(double qx, double qy);
339        double calculate_ER();
340        double evaluate_rphi(double q, double phi);
341};
342
343class SquareWellStructure{
344public:
345        // Model parameters
346        Parameter effect_radius;
347        Parameter volfraction;
348        Parameter welldepth;
349        Parameter wellwidth;
350
351        // Constructor
352        SquareWellStructure();
353
354        // Operators to get I(Q)
355        double operator()(double q);
356        double operator()(double qx, double qy);
357        double calculate_ER();
358        double evaluate_rphi(double q, double phi);
359};
360
361class HayterMSAStructure{
362public:
363        // Model parameters
364        Parameter effect_radius;
365        Parameter charge;
366        Parameter volfraction;
367        Parameter temperature;
368        Parameter saltconc;
369        Parameter dielectconst;
370
371        // Constructor
372        HayterMSAStructure();
373
374        // Operators to get I(Q)
375        double operator()(double q);
376        double operator()(double qx, double qy);
377        double calculate_ER();
378        double evaluate_rphi(double q, double phi);
379};
380
381class DiamEllipFunc{
382public:
383        // Model parameters
384        Parameter radius_a;
385        Parameter radius_b;
386
387        // Constructor
388        DiamEllipFunc();
389
390        // Operators to get I(Q)
391        double operator()(double q);
392        double operator()(double qx, double qy);
393        double calculate_ER();
394        double evaluate_rphi(double q, double phi);
395};
396
397class DiamCylFunc{
398public:
399        // Model parameters
400        Parameter radius;
401        Parameter length;
402
403        // Constructor
404        DiamCylFunc();
405
406        // Operators to get I(Q)
407        double operator()(double q);
408        double operator()(double qx, double qy);
409        double calculate_ER();
410        double evaluate_rphi(double q, double phi);
411};
412
413class CoreShellModel{
414public:
415        // Model parameters
416        Parameter radius;
417        Parameter scale;
418        Parameter thickness;
419        Parameter core_sld;
420        Parameter shell_sld;
421        Parameter solvent_sld;
422        Parameter background;
423
424        // Constructor
425        CoreShellModel();
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 CoreFourShellModel{
435public:
436        // Model parameters
437        Parameter scale;
438        Parameter rad_core;
439        Parameter sld_core;
440        Parameter thick_shell1;
441        Parameter sld_shell1;
442        Parameter thick_shell2;
443        Parameter sld_shell2;
444        Parameter thick_shell3;
445        Parameter sld_shell3;
446        Parameter thick_shell4;
447        Parameter sld_shell4;
448        Parameter sld_solv;
449        Parameter background;
450
451        // Constructor
452        CoreFourShellModel();
453
454        // Operators to get I(Q)
455        double operator()(double q);
456        double operator()(double qx, double qy);
457        double calculate_ER();
458        double evaluate_rphi(double q, double phi);
459};
460
461class CoreShellCylinderModel{
462public:
463        // Model parameters
464        Parameter radius;
465        Parameter scale;
466        Parameter thickness;
467        Parameter length;
468        Parameter core_sld;
469        Parameter shell_sld;
470        Parameter solvent_sld;
471        Parameter background;
472        Parameter axis_theta;
473        Parameter axis_phi;
474
475        // Constructor
476        CoreShellCylinderModel();
477
478        // Operators to get I(Q)
479        double operator()(double q);
480        double operator()(double qx, double qy);
481        double calculate_ER();
482        double evaluate_rphi(double q, double phi);
483};
484
485class EllipsoidModel{
486public:
487        // Model parameters
488        Parameter radius_a;
489        Parameter scale;
490        Parameter radius_b;
491        Parameter sldEll;
492        Parameter sldSolv;
493        Parameter background;
494        Parameter axis_theta;
495        Parameter axis_phi;
496
497        // Constructor
498        EllipsoidModel();
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
507class EllipticalCylinderModel{
508public:
509        // Model parameters
510        Parameter r_minor;
511        Parameter scale;
512        Parameter r_ratio;
513        Parameter length;
514        Parameter sldCyl;
515        Parameter sldSolv;
516        Parameter background;
517        Parameter cyl_theta;
518        Parameter cyl_phi;
519        Parameter cyl_psi;
520
521        // Constructor
522        EllipticalCylinderModel();
523
524        // Operators to get I(Q)
525        double operator()(double q);
526        double operator()(double qx, double qy);
527        double calculate_ER();
528        double evaluate_rphi(double q, double phi);
529};
530class TriaxialEllipsoidModel{
531public:
532        // Model parameters
533        Parameter scale;
534        Parameter semi_axisA;
535        Parameter semi_axisB;
536        Parameter semi_axisC;
537        Parameter sldEll;
538        Parameter sldSolv;
539        Parameter background;
540        Parameter axis_theta;
541        Parameter axis_phi;
542        Parameter axis_psi;
543
544        // Constructor
545        TriaxialEllipsoidModel();
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 FlexibleCylinderModel{
555public:
556        // Model parameters
557        Parameter scale;
558        Parameter length;
559        Parameter kuhn_length;
560        Parameter radius;
561        Parameter sldCyl;
562        Parameter sldSolv;
563        Parameter background;
564
565        // Constructor
566        FlexibleCylinderModel();
567
568        // Operators to get I(Q)
569        double operator()(double q);
570        double operator()(double qx, double qy);
571        double calculate_ER();
572        double evaluate_rphi(double q, double phi);
573};
574
575class FlexCylEllipXModel{
576public:
577        // Model parameters
578        Parameter scale;
579        Parameter length;
580        Parameter kuhn_length;
581        Parameter radius;
582        Parameter axis_ratio;
583        Parameter sldCyl;
584        Parameter sldSolv;
585        Parameter background;
586
587        // Constructor
588        FlexCylEllipXModel();
589
590        // Operators to get I(Q)
591        double operator()(double q);
592        double operator()(double qx, double qy);
593        double calculate_ER();
594        double evaluate_rphi(double q, double phi);
595};
596
597class StackedDisksModel{
598public:
599        // Model parameters
600        Parameter scale;
601        Parameter core_thick;
602        Parameter radius;
603        Parameter layer_thick;
604        Parameter core_sld;
605        Parameter layer_sld;
606        Parameter solvent_sld;
607        Parameter n_stacking;
608        Parameter sigma_d;
609        Parameter background;
610        Parameter axis_theta;
611        Parameter axis_phi;
612
613        // Constructor
614        StackedDisksModel();
615
616        // Operators to get I(Q)
617        double operator()(double q);
618        double operator()(double qx, double qy);
619        double calculate_ER();
620        double evaluate_rphi(double q, double phi);
621};
622
623class LamellarModel{
624public:
625        // Model parameters
626        Parameter scale;
627        Parameter bi_thick;
628        Parameter sld_bi;
629        Parameter sld_sol;
630        Parameter background;
631
632        // Constructor
633        LamellarModel();
634
635        // Operators to get I(Q)
636        double operator()(double q);
637        double operator()(double qx, double qy);
638        double calculate_ER();
639        double evaluate_rphi(double q, double phi);
640
641};
642
643class LamellarFFHGModel{
644public:
645        // Model parameters
646        Parameter scale;
647        Parameter t_length;
648        Parameter h_thickness;
649        Parameter sld_tail;
650        Parameter sld_head;
651        Parameter sld_solvent;
652        Parameter background;
653
654        // Constructor
655        LamellarFFHGModel();
656
657        // Operators to get I(Q)
658        double operator()(double q);
659        double operator()(double qx, double qy);
660        double calculate_ER();
661        double evaluate_rphi(double q, double phi);
662
663};
664
665
666
667class LamellarPSModel{
668public:
669        // Model parameters
670        Parameter scale;
671        Parameter spacing;
672        Parameter delta;
673        Parameter sld_bi;
674        Parameter sld_sol;
675        Parameter n_plates;
676        Parameter caille;
677        Parameter background;
678
679        // Constructor
680        LamellarPSModel();
681
682        // Operators to get I(Q)
683        double operator()(double q);
684        double operator()(double qx, double qy);
685        double calculate_ER();
686        double evaluate_rphi(double q, double phi);
687};
688
689class LamellarPSHGModel{
690public:
691        // Model parameters
692        Parameter scale;
693        Parameter spacing;
694        Parameter deltaT;
695        Parameter deltaH;
696        Parameter sld_tail;
697        Parameter sld_head;
698        Parameter sld_solvent;
699        Parameter n_plates;
700        Parameter caille;
701        Parameter background;
702
703        // Constructor
704        LamellarPSHGModel();
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 CoreShellEllipsoidModel{
714public:
715        // Model parameters
716        Parameter scale;
717        Parameter equat_core;
718        Parameter polar_core;
719        Parameter equat_shell;
720        Parameter polar_shell;
721        Parameter sld_core;
722        Parameter sld_shell;
723        Parameter sld_solvent;
724        Parameter background;
725        Parameter axis_theta;
726        Parameter axis_phi;
727
728        // Constructor
729        CoreShellEllipsoidModel();
730
731        // Operators to get I(Q)
732        double operator()(double q);
733        double operator()(double qx, double qy);
734        double calculate_ER();
735        double evaluate_rphi(double q, double phi);
736};
737
738class HollowCylinderModel{
739public:
740        // Model parameters
741        Parameter scale;
742        Parameter core_radius;
743        Parameter radius;
744        Parameter length;
745        Parameter sldCyl;
746        Parameter sldSolv;
747        Parameter background;
748        Parameter axis_theta;
749        Parameter axis_phi;
750
751        //Constructor
752        HollowCylinderModel();
753
754        //Operators to get I(Q)
755        double operator()(double q);
756        double operator()(double qx , double qy);
757        double calculate_ER();
758        double evaluate_rphi(double q, double phi);
759};
760
761class MultiShellModel{
762public:
763        // Model parameters
764        Parameter scale;
765        Parameter core_radius;
766        Parameter s_thickness;
767        Parameter w_thickness;
768        Parameter core_sld;
769        Parameter shell_sld;
770        Parameter n_pairs;
771        Parameter background;
772
773        //Constructor
774        MultiShellModel();
775
776        //Operators to get I(Q)
777        double operator()(double q);
778        double operator()(double qx , double qy);
779        double calculate_ER();
780        double evaluate_rphi(double q, double phi);
781};
782
783class VesicleModel{
784public:
785        // Model parameters
786        Parameter scale;
787        Parameter radius;
788        Parameter thickness;
789        Parameter core_sld;
790        Parameter shell_sld;
791        Parameter background;
792
793        //Constructor
794        VesicleModel();
795
796        //Operators to get I(Q)
797        double operator()(double q);
798        double operator()(double qx , double qy);
799        double calculate_ER();
800        double evaluate_rphi(double q, double phi);
801};
802
803class BinaryHSModel{
804public:
805        // Model parameters
806        Parameter l_radius;
807        Parameter s_radius;
808        Parameter vol_frac_ls;
809        Parameter vol_frac_ss;
810        Parameter ls_sld;
811        Parameter ss_sld;
812        Parameter solvent_sld;
813        Parameter background;
814
815        //Constructor
816        BinaryHSModel();
817
818        //Operators to get I(Q)
819        double operator()(double q);
820        double operator()(double qx , double qy);
821        double calculate_ER();
822        double evaluate_rphi(double q, double phi);
823};
824
825class BinaryHSPSF11Model{
826public:
827        // Model parameters
828        Parameter l_radius;
829        Parameter s_radius;
830        Parameter vol_frac_ls;
831        Parameter vol_frac_ss;
832        Parameter ls_sld;
833        Parameter ss_sld;
834        Parameter solvent_sld;
835        Parameter background;
836
837        //Constructor
838        BinaryHSPSF11Model();
839
840        //Operators to get I(Q)
841        double operator()(double q);
842        double operator()(double qx , double qy);
843        double calculate_ER();
844        double evaluate_rphi(double q, double phi);
845};
846
847class Poly_GaussCoil{
848public:
849        // Model parameters
850        Parameter rg;
851        Parameter scale;
852        Parameter poly_m;
853        Parameter background;
854
855        // Constructor
856        Poly_GaussCoil();
857
858        // Operators to get I(Q)
859        double operator()(double q);
860        double operator()(double qx, double qy);
861        double calculate_ER();
862        double evaluate_rphi(double q, double phi);
863};
864
865class FractalModel{
866public:
867        // Model parameters
868        Parameter radius;
869        Parameter scale;
870        Parameter fractal_dim;
871        Parameter cor_length;
872        Parameter sldBlock;
873        Parameter sldSolv;
874        Parameter background;
875
876        // Constructor
877        FractalModel();
878
879        // Operators to get I(Q)
880        double operator()(double q);
881        double operator()(double qx, double qy);
882        double calculate_ER();
883        double evaluate_rphi(double q, double phi);
884};
885
886#endif
Note: See TracBrowser for help on using the repository browser.