source: sans/XOP_Dev/SANSAnalysis/XOP/SANSAnalysis.c @ 834

Last change on this file since 834 was 834, checked in by srkline, 11 years ago

Changes to the XOP code to upgrade to ToolKit? v6. Changes are the ones outlined in the Appendix A of the TK6 manual. SOme of the XOP support routines and the #pragma for 2-byte structures have changed. Per Howard Rodstein, there is no need to change the c files to cpp. c should work and compile just fine.

These changes work correctly on my mac. Next is to make sure that they work correctly on the two build machines.

File size: 16.3 KB
Line 
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#include "XOPStandardHeaders.h"                 // Include ANSI headers, Mac headers, IgorXOP.h, XOP.h and XOPSupport.h
12#include "SANSAnalysis.h"
13#include "Cylinder.h"
14#include "Sphere.h"
15#include "TwoPhase.h"
16#include "StructureFactor.h"
17#include "ResolutionSmearing.h"
18#include "Func2D.h"
19
20static long
21RegisterFunction()
22{
23        int funcIndex;
24       
25        funcIndex = GetXOPItem(0);                      // Which function invoked ?
26        switch (funcIndex) {
27                //
28                // Sphere Model Functions
29                //
30                case 0:                                                 // y = MultiShellX(w,x) (curve fitting function).
31                        return((long)MultiShellSphereX);        // This function is called using the direct method.
32                        break;
33                case 1:                                                 // y = PolyMultiShellX(w,x) (curve fitting function).
34                        return((long)PolyMultiShellX);  // This function is called using the direct method.
35                        break;
36                case 2:                                                 // y = SphereFormX(w,x) (curve fitting function).
37                        return((long)SphereFormX);      // This function is called using the direct method.
38                        break;
39                case 3:                                                 // y = CoreShellX(w,x) (curve fitting function).
40                        return((long)CoreShellSphereX); // This function is called using the direct method.
41                        break;
42                case 4:                                                 // y = PolyCoreX(w,x) (curve fitting function).
43                        return((long)PolyCoreFormX);    // This function is called using the direct method.
44                        break;
45                case 5:                                                 // y = PolyCoreShellRatioX(w,x) (curve fitting function).
46                        return((long)PolyCoreShellRatioX);      // This function is called using the direct method.
47                        break;
48                case 6:                                                 // y = Vesicle_ULX(w,x) (curve fitting function).
49                        return((long)VesicleFormX);     // This function is called using the direct method.
50                        break;
51                case 7:                                                 // y = SchulzSpheresX(w,x) (curve fitting function).
52                        return((long)SchulzSpheresX);   // This function is called using the direct method.
53                        break;
54                case 8:                                                 // y = PolyRectSpheresX(w,x) (curve fitting function).
55                        return((long)PolyRectSpheresX); // This function is called using the direct method.
56                        break;
57                case 9:                                                 // y = PolyHardSphereIntensityX(w,x) (curve fitting function).
58                        return((long)PolyHardSpheresX); // This function is called using the direct method.
59                        break;
60                case 10:                                                        // y = BimodalSchulzSpheresX(w,x) (curve fitting function).
61                        return((long)BimodalSchulzSpheresX);    // This function is called using the direct method.
62                        break;
63                case 11:                                                        // y = GaussPolySphereX(w,x) (curve fitting function).
64                        return((long)GaussSpheresX);    // This function is called using the direct method.
65                        break;
66                case 12:                                                        // y = LogNormalPolySphereX(w,x) (curve fitting function).
67                        return((long)LogNormalSphereX); // This function is called using the direct method.
68                        break;
69                case 13:                                                        // y = BinaryHSX(w,x) (curve fitting function).
70                        return((long)BinaryHSX);        // This function is called using the direct method.
71                        break;
72                case 14:                                                        // y = BinaryHS_PSF11X(w,x) (curve fitting function).
73                        return((long)BinaryHS_PSF11X);  // This function is called using the direct method.
74                        break;
75        case 15:                                                        // y = BinaryHS_PSF12X(w,x) (curve fitting function).
76                        return((long)BinaryHS_PSF12X);  // This function is called using the direct method.
77                        break;
78                case 16:                                                        // y = BinaryHS_PSF22X(w,x) (curve fitting function).
79                        return((long)BinaryHS_PSF22X);  // This function is called using the direct method.
80                        break;
81                        //
82                        // Cylinder Model Functions
83                        //
84                case 17:                                                        // y = CylinderFormX(w,x) (curve fitting function).
85                        return((long)CylinderFormX);    // This function is called using the direct method.
86                        break;
87                case 18:                                                        // y = EllipCylFit76X(w,x) (curve fitting function).
88                        return((long)EllipCyl76X);      // This function is called using the direct method.
89                        break;
90                case 19:                                                        // y = EllipCylFit20X(w,x) (curve fitting function).
91                        return((long)EllipticalCylinderX);      // This function is called using the direct method.
92                        break;
93                case 20:                                                        // y = TriaxialEllipsoidX(w,x) (curve fitting function).
94                        return((long)TriaxialEllipsoidX);       // This function is called using the direct method.
95                        break;
96                case 21:                                                        // y = ParallelepipedX(w,x) (curve fitting function).
97                        return((long)ParallelepipedX);  // This function is called using the direct method.
98                        break;
99                case 22:                                                        // y = HollowCylinderX(w,x) (curve fitting function).
100                        return((long)HollowCylinderX);  // This function is called using the direct method.
101                        break;
102                case 23:                                                        // y = EllipsoidFormX(w,x) (curve fitting function).
103                        return((long)EllipsoidFormX);   // This function is called using the direct method.
104                        break;       
105                case 24:                                                        // y = Cyl_PolyRadiusX(w,x) (curve fitting function).
106                        return((long)Cyl_PolyRadiusX);  // This function is called using the direct method.
107                        break; 
108                case 25:                                                        // y = Cyl_PolyLengthX(w,x) (curve fitting function).
109                        return((long)Cyl_PolyLengthX);  // This function is called using the direct method.
110                        break; 
111                case 26:                                                        // y = CoreShellCylinderX(w,x) (curve fitting function).
112                        return((long)CoreShellCylinderX);       // This function is called using the direct method.
113                        break;
114                case 27:                                        // y = OblateFormX(w,x) (curve fitting function).
115                        return((long)OblateFormX);      // This function is called using the direct method.
116                        break;
117                case 28:                                        // y = ProlateFormX(w,x) (curve fitting function).
118                        return((long)ProlateFormX);     // This function is called using the direct method.
119                        break;
120                case 29:                                        // y = FlexExclVolCylX(w,x) (curve fitting function).
121                        return((long)FlexExclVolCylX);  // This function is called using the direct method.
122                        break;                       
123                case 30:                                        // y = FlexCyl_PolyLenX(w,x) (curve fitting function).
124                        return((long)FlexCyl_PolyLenX); // This function is called using the direct method.
125                        break;
126                case 31:                                        // y = FlexCyl_PolyRadX(w,x) (curve fitting function).
127                        return((long)FlexCyl_PolyRadX); // This function is called using the direct method.
128                        break;
129                case 32:                                        // y = FlexCyl_EllipX(w,x) (curve fitting function).
130                        return((long)FlexCyl_EllipX);   // This function is called using the direct method.
131                        break;
132                case 33:                                        // y = PolyCoShCylinderX(w,x) (curve fitting function).
133                        return((long)PolyCoShCylinderX);        // This function is called using the direct method.
134                        break;
135                case 34:                                        // y = StackedDisksX(w,x) (curve fitting function).
136                        return((long)StackedDiscsX);    // This function is called using the direct method.
137                        break;
138                case 35:                                        // y = LamellarFFX(w,x) (curve fitting function).
139                        return((long)LamellarFFX);      // This function is called using the direct method.
140                        break;
141                case 36:                                        // y = LamellarFF_HGX(w,x) (curve fitting function).
142                        return((long)LamellarFF_HGX);   // This function is called using the direct method.
143                        break;
144                case 37:                                        // y = LamellarPSX(w,x) (curve fitting function).
145                        return((long)LamellarPSX);      // This function is called using the direct method.
146                        break;
147                case 38:                                        // y = LamellarPS_HGX(w,x) (curve fitting function).
148                        return((long)LamellarPS_HGX);   // This function is called using the direct method.
149                        break;
150                        //
151                        // Two Phase Model Functions
152                        //
153                case 39:                                                        // y = TeubnerStreyModelX(w,x) (curve fitting function).
154                        return((long)TeubnerStreyModelX);       // This function is called using the direct method.
155                        break;
156                case 40:                                                        // y = Power_Law_ModelX(w,x) (curve fitting function).
157                        return((long)Power_Law_ModelX); // This function is called using the direct method.
158                        break;
159                case 41:                                                        // y = Peak_Lorentz_ModelX(w,x) (curve fitting function).
160                        return((long)Peak_Lorentz_ModelX);      // This function is called using the direct method.
161                        break;
162                case 42:                                                        // y = Peak_Gauss_ModelX(w,x) (curve fitting function).
163                        return((long)Peak_Gauss_ModelX);        // This function is called using the direct method.
164                        break;
165                case 43:                                                        // y = Lorentz_ModelX(w,x) (curve fitting function).
166                        return((long)Lorentz_ModelX);   // This function is called using the direct method.
167                        break;
168                case 44:                                                        // y = FractalX(w,x) (curve fitting function).
169                        return((long)FractalX); // This function is called using the direct method.
170                        break;
171                case 45:                                                        // y = DAB_ModelX(w,x) (curve fitting function).
172                        return((long)DAB_ModelX);       // This function is called using the direct method.
173                        break;
174                case 46:                                                        // y = OneLevelX(w,x) (curve fitting function).
175                        return((long)OneLevelX);        // This function is called using the direct method.
176                        break;
177                case 47:                                                        // y = TwoLevelX(w,x) (curve fitting function).
178                        return((long)TwoLevelX);        // This function is called using the direct method.
179                        break;
180                case 48:                                                        // y = ThreeLevelX(w,x) (curve fitting function).
181                        return((long)ThreeLevelX);      // This function is called using the direct method.
182                        break;
183                case 49:                                                        // y = FourLevelX(w,x) (curve fitting function).
184                        return((long)FourLevelX);       // This function is called using the direct method.
185                        break;
186                        //
187                        // Structure Factor Functions
188                        //
189                case 50:                                                        // y = HardSphereStructX(w,x) (curve fitting function).
190                        return((long)HardSphereStructX);        // This function is called using the direct method.
191                        break;
192                case 51:                                                        // y = SquareWellStructX(w,x) (curve fitting function).
193                        return((long)SquareWellStructX);        // This function is called using the direct method.
194                        break;
195                case 52:                                                        // y = StickyHS_StructX(w,x) (curve fitting function).
196                        return((long)StickyHS_StructX); // This function is called using the direct method.
197                        break;
198                case 53:                                                        // y = HayterPenfoldMSAX(w,x) (curve fitting function).
199                        return((long)HayterPenfoldMSAX);        // This function is called using the direct method.
200                        break;
201                case 54:                                                        // y = DiamCylX(a,b) (utility).
202                        return((long)DiamCylX);                 // This function is called using the direct method.
203                        break;
204                case 55:                                                        // y = DiamEllipX(a,b) (utility).
205                        return((long)DiamEllipX);                       // This function is called using the direct method.
206                        break;
207                        //
208                        // Resolution Smearing Functions
209                case 56:                                                        // y = Smear_Model_20_X (utility).
210                        return((long)Smear_Model_20_X);                 // This function is called using the direct method.
211                        break;
212                case 57:                                                        // y =Smear_Model_76_X (utility).
213                        return((long)Smear_Model_76_X);                 // This function is called using the direct method.
214                        break; 
215                case 58:                                                        // y =Smear_Model_76_X (utility).
216                        return((long)SmearedCyl_PolyRadiusX);                   // This function is called using the direct method.
217                        break;
218// 2D Functions from DANSE
219                case 59:                                                        // y = f(c,y,x)
220                        return((long)Cylinder_2D);                      // This function is called using the direct method.
221                        break;
222                case 60:                                                        // y = f(c,y,x)
223                        return((long)Cylinder_2D_Weight2D);                     // This function is called using the direct method.
224                        break;
225                case 61:                                                        // y = f(c,y,x)
226                        return((long)CoreShellCylinder_2D);                     // This function is called using the direct method.
227                        break;
228                case 62:                                                        // y = f(c,y,x)
229                        return((long)CoreShellCylinder_2D_Weight2D);                    // This function is called using the direct method.
230                        break;
231                case 63:                                                        // y = f(c,y,x)
232                        return((long)Ellipsoid_2D);                     // This function is called using the direct method.
233                        break;
234                case 64:                                                        // y = f(c,y,x)
235                        return((long)Ellipsoid_2D_Weight2D);                    // This function is called using the direct method.
236                        break;
237                case 65:                                                        // y = f(c,y,x)
238                        return((long)EllipticalCylinder_2D);                    // This function is called using the direct method.
239                        break;
240                case 66:                                                        // y = f(c,y,x)
241                        return((long)EllipticalCylinder_2D_Weight2D);                   // This function is called using the direct method.
242                        break;
243                case 67:                                                        // y = f(c,y,x)
244                        return((long)Sphere_2D);                        // This function is called using the direct method.
245                        break;
246/// new models added in 2008
247                case 68:                                                        // y = f(c,y,x)
248                        return((long)SpherocylinderX);                  // This function is called using the direct method.
249                        break;
250                case 69:                                                        // y = f(c,y,x)
251                        return((long)ConvexLensX);                      // This function is called using the direct method.
252                        break;
253                case 70:                                                        // y = f(c,y,x)
254                        return((long)DumbbellX);                        // This function is called using the direct method.
255                        break;
256                case 71:                                                        // y = f(c,y,x)
257                        return((long)CappedCylinderX);                  // This function is called using the direct method.
258                        break;
259                case 72:                                                        // y = f(c,y,x)
260                        return((long)BarbellX);                 // This function is called using the direct method.
261                        break;
262                case 73:                                                        // y = f(c,y,x)
263                        return((long)Lamellar_ParaCrystalX);                    // This function is called using the direct method.
264                        break;
265                        //
266                case 74:                                                        // y = f(c,y,x)
267                        return((long)BCC_ParaCrystalX);                 // This function is called using the direct method.
268                        break;
269                case 75:                                                        // y = f(c,y,x)
270                        return((long)FCC_ParaCrystalX);                 // This function is called using the direct method.
271                        break;
272                case 76:                                                        // y = f(c,y,x)
273                        return((long)SC_ParaCrystalX);                  // This function is called using the direct method.
274                        break;
275                case 77:                                                        // y = f(c,y,x)
276                        return((long)OneShellX);                        // This function is called using the direct method.
277                        break;
278                case 78:                                                        // y = f(c,y,x)
279                        return((long)TwoShellX);                        // This function is called using the direct method.
280                        break;
281                case 79:                                                        // y = f(c,y,x)
282                        return((long)ThreeShellX);                      // This function is called using the direct method.
283                        break;
284                case 80:                                                        // y = f(c,y,x)
285                        return((long)FourShellX);                       // This function is called using the direct method.
286                        break;
287                case 81:                                                        // y = f(c,y,x)
288                        return((long)PolyOneShellX);                    // This function is called using the direct method.
289                        break;
290                case 82:                                                        // y = f(c,y,x)
291                        return((long)PolyTwoShellX);                    // This function is called using the direct method.
292                        break;
293                case 83:                                                        // y = f(c,y,x)
294                        return((long)PolyThreeShellX);                  // This function is called using the direct method.
295                        break;
296                case 84:                                                        // y = f(c,y,x)
297                        return((long)PolyFourShellX);                   // This function is called using the direct method.
298                        break;
299                        //
300                case 85:                                                        // y = f(c,y,x)
301                        return((long)BroadPeakX);                       // This function is called using the direct method.
302                        break;
303                case 86:                                                        // y = f(c,y,x)
304                        return((long)CorrLengthX);                      // This function is called using the direct method.
305                        break;
306                case 87:                                                        // y = f(c,y,x)
307                        return((long)TwoLorentzianX);                   // This function is called using the direct method.
308                        break;
309                case 88:                                                        // y = f(c,y,x)
310                        return((long)TwoPowerLawX);                     // This function is called using the direct method.
311                        break;
312                case 89:                                                        // y = f(c,y,x)
313                        return((long)PolyGaussCoilX);                   // This function is called using the direct method.
314                        break;
315                case 90:                                                        // y = f(c,y,x)
316                        return((long)GaussLorentzGelX);                 // This function is called using the direct method.
317                        break;
318                case 91:                                                        // y = f(c,y,x)
319                        return((long)GaussianShellX);                   // This function is called using the direct method.
320                        break;
321                case 92:                                                        // y = f(c,y,x)
322                        return((long)FuzzySpheresX);                    // This function is called using the direct method.
323                        break;
324                case 93:                                                        // y = f(c,y,x)
325                        return((long)PolyCoreBicelleX);                 // This function is called using the direct method.
326                        break;
327                case 94:                                                        // y = f(c,y,x)
328                        return((long)CSParallelepipedX);                        // This function is called using the direct method.
329                        break;
330                case 95:                                                        //One Yukawa
331                        return((long)OneYukawaX);       // This function is called using the direct method.
332                        break;
333                case 96:                                                        // Two Yukawa
334                        return((long)TwoYukawaX);       // This function is called using the direct method.
335                        break;
336        }
337        return NIL;
338}
339
340/*      XOPEntry()
341
342This is the entry point from the host application to the XOP for all
343messages after the INIT message.
344*/
345static void
346XOPEntry(void)
347{       
348        long result = 0;
349       
350        switch (GetXOPMessage()) {
351                case FUNCADDRS:
352                        result = RegisterFunction();    // This tells Igor the address of our function.
353                        break;
354        }
355        SetXOPResult(result);
356}
357
358/*      main(ioRecHandle)
359
360This is the initial entry point at which the host application calls XOP.
361The message sent by the host must be INIT.
362main() does any necessary initialization and then sets the XOPEntry field of the
363ioRecHandle to the address to be called for future messages.
364 
365 updated for TK6 30JAN2012 SRK
366*/
367HOST_IMPORT int                                         // was void
368main(IORecHandle ioRecHandle)
369{       
370        XOPInit(ioRecHandle);                                                   // Do standard XOP initialization.
371        SetXOPEntry(XOPEntry);                                                  // Set entry point for future calls.
372       
373        if (igorVersion < 600) {                                                // checks required for ThreadSafe declarations
374                SetXOPResult(IGOR_OBSOLETE);
375                return EXIT_FAILURE;                                    // added for TK6
376        }
377       
378        SetXOPResult(0);
379        return EXIT_SUCCESS;                                    // added for TK6
380       
381//      else {
382//              if (igorVersion >= 700)
383//                      SetXOPResult(IGOR_OBSOLETE);
384//              else
385//                      SetXOPResult(0L);
386//      }
387       
388}
389
390
Note: See TracBrowser for help on using the repository browser.