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

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

refl_adv model refactor

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