source: sans/Analysis/branches/ajj_23APR07/XOPs/SANSAnalysis/SANSAnalysis.c @ 93

Last change on this file since 93 was 93, checked in by ajj, 16 years ago

Add combined XOP code. Currently only contains XCode project file to build Universal binary suitable for Igor 6.

File size: 11.3 KB
RevLine 
[93]1/*
2 *  SANSAnalysis.c
3 *  SANSAnalysis
4 *
5 *  Created by Andrew Jackson on 4/23/07.
6 *  Copyright 2007 __MyCompanyName__. All rights reserved.
7 *
8 */
9
10/*
11 *  SANSAnalysis.h
12 *  SANSAnalysis
13 *
14 *  Created by Andrew Jackson on 4/23/07.
15 *  Copyright 2007 __MyCompanyName__. All rights reserved.
16 *
17 */
18 
19#pragma XOP_SET_STRUCT_PACKING                  // All structures are 2-byte-aligned.
20
21#include "XOPStandardHeaders.h"                 // Include ANSI headers, Mac headers, IgorXOP.h, XOP.h and XOPSupport.h
22#include "SANSAnalysis.h"
23#include "Cylinder.h"
24#include "Sphere.h"
25#include "TwoPhase.h"
26#include "StructureFactor.h"
27#include "ResolutionSmearing.h"
28
29static long
30RegisterFunction()
31{
32        int funcIndex;
33       
34        funcIndex = GetXOPItem(0);                      // Which function invoked ?
35        switch (funcIndex) {
36        //
37        // Sphere Model Functions
38        //
39                case 0:                                                 // y = MultiShellX(w,x) (curve fitting function).
40                        return((long)MultiShellX);      // This function is called using the direct method.
41                        break;
42                case 1:                                                 // y = PolyMultiShellX(w,x) (curve fitting function).
43                        return((long)PolyMultiShellX);  // This function is called using the direct method.
44                        break;
45                case 2:                                                 // y = SphereFormX(w,x) (curve fitting function).
46                        return((long)SphereFormX);      // This function is called using the direct method.
47                        break;
48                case 3:                                                 // y = CoreShellX(w,x) (curve fitting function).
49                        return((long)CoreShellFormX);   // This function is called using the direct method.
50                        break;
51                case 4:                                                 // y = PolyCoreX(w,x) (curve fitting function).
52                        return((long)PolyCoreFormX);    // This function is called using the direct method.
53                        break;
54                case 5:                                                 // y = PolyCoreShellRatioX(w,x) (curve fitting function).
55                        return((long)PolyCoreShellRatioX);      // This function is called using the direct method.
56                        break;
57                case 6:                                                 // y = Vesicle_ULX(w,x) (curve fitting function).
58                        return((long)VesicleFormX);     // This function is called using the direct method.
59                        break;
60                case 7:                                                 // y = SchulzSpheresX(w,x) (curve fitting function).
61                        return((long)SchulzSpheresX);   // This function is called using the direct method.
62                        break;
63                case 8:                                                 // y = PolyRectSpheresX(w,x) (curve fitting function).
64                        return((long)PolyRectSpheresX); // This function is called using the direct method.
65                        break;
66                case 9:                                                 // y = PolyHardSphereIntensityX(w,x) (curve fitting function).
67                        return((long)PolyHardSphereIntensityX); // This function is called using the direct method.
68                        break;
69                case 10:                                                        // y = BimodalSchulzSpheresX(w,x) (curve fitting function).
70                        return((long)BimodalSchulzSpheresX);    // This function is called using the direct method.
71                        break;
72                case 11:                                                        // y = GaussPolySphereX(w,x) (curve fitting function).
73                        return((long)GaussPolySphereX); // This function is called using the direct method.
74                        break;
75                case 12:                                                        // y = LogNormalPolySphereX(w,x) (curve fitting function).
76                        return((long)LogNormalPolySphereX);     // This function is called using the direct method.
77                        break;
78                case 13:                                                        // y = BinaryHSX(w,x) (curve fitting function).
79                        return((long)BinaryHSX);        // This function is called using the direct method.
80                        break;
81                case 14:                                                        // y = BinaryHS_PSF11X(w,x) (curve fitting function).
82                        return((long)BinaryHS_PSF11X);  // This function is called using the direct method.
83                        break;
84        case 15:                                                        // y = BinaryHS_PSF12X(w,x) (curve fitting function).
85                        return((long)BinaryHS_PSF12X);  // This function is called using the direct method.
86                        break;
87                case 16:                                                        // y = BinaryHS_PSF22X(w,x) (curve fitting function).
88                        return((long)BinaryHS_PSF22X);  // This function is called using the direct method.
89                        break;
90        //
91        // Cylinder Model Functions
92        //
93                case 17:                                                        // y = CylinderFormX(w,x) (curve fitting function).
94                        return((long)CylinderFormX);    // This function is called using the direct method.
95                        break;
96                case 18:                                                        // y = EllipCylFit76X(w,x) (curve fitting function).
97                        return((long)EllipCyl76X);      // This function is called using the direct method.
98                        break;
99                case 19:                                                        // y = EllipCylFit20X(w,x) (curve fitting function).
100                        return((long)EllipCyl20X);      // This function is called using the direct method.
101                        break;
102                case 20:                                                        // y = TriaxialEllipsoidX(w,x) (curve fitting function).
103                        return((long)TriaxialEllipsoidX);       // This function is called using the direct method.
104                        break;
105                case 21:                                                        // y = ParallelepipedX(w,x) (curve fitting function).
106                        return((long)ParallelepipedX);  // This function is called using the direct method.
107                        break;
108                case 22:                                                        // y = HollowCylinderX(w,x) (curve fitting function).
109                        return((long)HollowCylinderX);  // This function is called using the direct method.
110                        break;
111                case 23:                                                        // y = EllipsoidFormX(w,x) (curve fitting function).
112                        return((long)EllipsoidFormX);   // This function is called using the direct method.
113                        break;       
114                case 24:                                                        // y = Cyl_PolyRadiusX(w,x) (curve fitting function).
115                        return((long)Cyl_PolyRadiusX);  // This function is called using the direct method.
116                        break; 
117                case 25:                                                        // y = Cyl_PolyLengthX(w,x) (curve fitting function).
118                        return((long)Cyl_PolyLengthX);  // This function is called using the direct method.
119                        break; 
120                case 26:                                                        // y = CoreShellCylinderX(w,x) (curve fitting function).
121                        return((long)CoreShellCylinderX);       // This function is called using the direct method.
122                        break;
123                case 27:                                        // y = OblateFormX(w,x) (curve fitting function).
124                        return((long)OblateFormX);      // This function is called using the direct method.
125                        break;
126                case 28:                                        // y = ProlateFormX(w,x) (curve fitting function).
127                        return((long)ProlateFormX);     // This function is called using the direct method.
128                        break;
129                case 29:                                        // y = FlexExclVolCylX(w,x) (curve fitting function).
130                        return((long)FlexExclVolCylX);  // This function is called using the direct method.
131                        break;                       
132                case 30:                                        // y = FlexCyl_PolyLenX(w,x) (curve fitting function).
133                        return((long)FlexCyl_PolyLenX); // This function is called using the direct method.
134                        break;
135                case 31:                                        // y = FlexCyl_PolyRadX(w,x) (curve fitting function).
136                        return((long)FlexCyl_PolyRadX); // This function is called using the direct method.
137                        break;
138                case 32:                                        // y = FlexCyl_EllipX(w,x) (curve fitting function).
139                        return((long)FlexCyl_EllipX);   // This function is called using the direct method.
140                        break;
141                case 33:                                        // y = PolyCoShCylinderX(w,x) (curve fitting function).
142                        return((long)PolyCoShCylinderX);        // This function is called using the direct method.
143                        break;
144                case 34:                                        // y = StackedDisksX(w,x) (curve fitting function).
145                        return((long)StackedDiscsX);    // This function is called using the direct method.
146                        break;
147                case 35:                                        // y = LamellarFFX(w,x) (curve fitting function).
148                        return((long)LamellarFFX);      // This function is called using the direct method.
149                        break;
150                case 36:                                        // y = LamellarFF_HGX(w,x) (curve fitting function).
151                        return((long)LamellarFF_HGX);   // This function is called using the direct method.
152                        break;
153                case 37:                                        // y = LamellarPSX(w,x) (curve fitting function).
154                        return((long)LamellarPSX);      // This function is called using the direct method.
155                        break;
156                case 38:                                        // y = LamellarPS_HGX(w,x) (curve fitting function).
157                        return((long)LamellarPS_HGX);   // This function is called using the direct method.
158                        break;
159        //
160        // Two Phase Model Functions
161        //
162                case 39:                                                        // y = TeubnerStreyModelX(w,x) (curve fitting function).
163                        return((long)TeubnerStreyModelX);       // This function is called using the direct method.
164                        break;
165                case 40:                                                        // y = Power_Law_ModelX(w,x) (curve fitting function).
166                        return((long)Power_Law_ModelX); // This function is called using the direct method.
167                        break;
168                case 41:                                                        // y = Peak_Lorentz_ModelX(w,x) (curve fitting function).
169                        return((long)Peak_Lorentz_ModelX);      // This function is called using the direct method.
170                        break;
171                case 42:                                                        // y = Peak_Gauss_ModelX(w,x) (curve fitting function).
172                        return((long)Peak_Gauss_ModelX);        // This function is called using the direct method.
173                        break;
174                case 43:                                                        // y = Lorentz_ModelX(w,x) (curve fitting function).
175                        return((long)Lorentz_ModelX);   // This function is called using the direct method.
176                        break;
177                case 44:                                                        // y = FractalX(w,x) (curve fitting function).
178                        return((long)FractalX); // This function is called using the direct method.
179                        break;
180                case 45:                                                        // y = DAB_ModelX(w,x) (curve fitting function).
181                        return((long)DAB_ModelX);       // This function is called using the direct method.
182                        break;
183                case 46:                                                        // y = OneLevelX(w,x) (curve fitting function).
184                        return((long)OneLevelX);        // This function is called using the direct method.
185                        break;
186                case 47:                                                        // y = TwoLevelX(w,x) (curve fitting function).
187                        return((long)TwoLevelX);        // This function is called using the direct method.
188                        break;
189                case 48:                                                        // y = ThreeLevelX(w,x) (curve fitting function).
190                        return((long)ThreeLevelX);      // This function is called using the direct method.
191                        break;
192                case 49:                                                        // y = FourLevelX(w,x) (curve fitting function).
193                        return((long)FourLevelX);       // This function is called using the direct method.
194                        break;
195        //
196        // Structure Factor Functions
197        //
198                case 50:                                                        // y = HardSphereStructX(w,x) (curve fitting function).
199                        return((long)HardSphereStructX);        // This function is called using the direct method.
200                        break;
201                case 51:                                                        // y = SquareWellStructX(w,x) (curve fitting function).
202                        return((long)SquareWellStructX);        // This function is called using the direct method.
203                        break;
204                case 52:                                                        // y = StickyHS_StructX(w,x) (curve fitting function).
205                        return((long)StickyHS_StructX); // This function is called using the direct method.
206                        break;
207                case 53:                                                        // y = HayterPenfoldMSAX(w,x) (curve fitting function).
208                        return((long)HayterPenfoldMSAX);        // This function is called using the direct method.
209                        break;
210                case 54:                                                        // y = DiamCylX(a,b) (utility).
211                        return((long)DiamCylX);                 // This function is called using the direct method.
212                        break;
213                case 55:                                                        // y = DiamEllipX(a,b) (utility).
214                        return((long)DiamEllipX);                       // This function is called using the direct method.
215                        break;
216        //
217        // Resolution Smearing Functions
218                case 56:                                                        // y = Smear_Model_20_X (utility).
219                        return((long)Smear_Model_20_X);                 // This function is called using the direct method.
220                        break;
221                case 57:                                                        // y =Smear_Model_76_X (utility).
222                        return((long)Smear_Model_76_X);                 // This function is called using the direct method.
223                        break; 
224        }
225        return NIL;
226}
227
228/*      XOPEntry()
229
230        This is the entry point from the host application to the XOP for all
231        messages after the INIT message.
232*/
233static void
234XOPEntry(void)
235{       
236        long result = 0;
237
238        switch (GetXOPMessage()) {
239                case FUNCADDRS:
240                        result = RegisterFunction();    // This tells Igor the address of our function.
241                        break;
242        }
243        SetXOPResult(result);
244}
245
246/*      main(ioRecHandle)
247
248        This is the initial entry point at which the host application calls XOP.
249        The message sent by the host must be INIT.
250        main() does any necessary initialization and then sets the XOPEntry field of the
251        ioRecHandle to the address to be called for future messages.
252*/
253HOST_IMPORT void
254main(IORecHandle ioRecHandle)
255{       
256        XOPInit(ioRecHandle);                                                   // Do standard XOP initialization.
257        SetXOPEntry(XOPEntry);                                                  // Set entry point for future calls.
258       
259        if (igorVersion < 200)
260                SetXOPResult(REQUIRES_IGOR_200);
261        else
262                SetXOPResult(0L);
263}
264
265
266
267#pragma XOP_RESET_STRUCT_PACKING                        // All structures are 2-byte-aligned.
268// All structures are 2-byte-aligned.
269
Note: See TracBrowser for help on using the repository browser.