source: sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/NewModels_2006/Beaucage_v40.ipf @ 570

Revision 570, 16.6 KB checked in by srkline, 5 years ago (diff)

Change (1):
In preparation for release, updated pragma IgorVersion?=6.1 in all procedures

Change (2):
As a side benefit of requiring 6.1, we can use the MultiThread? keyword to thread any model function we like. The speed benefit is only noticeable on functions that require at least one integration and at least 100 points (resolution smearing is NOT threaded, too many threadSafe issues, too little benefit). I have chosen to use the MultiThread? only on the XOP assignment. In the Igor code there are too many functions that are not explicitly declared threadsafe, making for a mess.

Line 
1#pragma rtGlobals=1             // Use modern global access method.
2#pragma IgorVersion=6.1
3
4/////////////////////////////////////////////////////
5//
6// Plot's Greg Beaucage's Rg-power Law "model" of scattering
7// somewhat useful for identifying length scales, but short on
8// physical inerpretation of the real structure of the sample.
9//
10// up to 4 "levels" can be calculated
11// best to start with single level, and fit a small range of
12// the data, and add more levels as needed
13//
14// see the help file for the original references
15//
16Proc PlotOnelevel(num,qmin,qmax)
17        Variable num=256,qmin=0.001,qmax=0.7
18        Prompt num "Enter number of data points for model: "
19        Prompt qmin "Enter minimum q-value (A^-1) for model: "
20        Prompt qmax "Enter maximum q-value (A^-1) for model: "
21       
22        make/o/d/n=(num) xwave_b1,ywave_b1
23        xwave_b1 = alog(log(qmin) + x*((log(qmax)-log(qmin))/num))
24        make/o/d coef_b1 = {1,3,21,6e-4,2,0}
25        make/o/t parameters_b1 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","bkg (cm-1 sr-1)"}
26        Edit parameters_b1,coef_b1
27       
28        Variable/G root:g_b1
29        g_b1 := OneLevel(coef_b1,ywave_b1,xwave_b1)
30        Display ywave_b1 vs xwave_b1
31        ModifyGraph log=1,marker=29,msize=2,mode=4
32        Label bottom "q (A\\S-1\\M)"
33        Label left "Intensity (cm\\S-1\\M)"
34        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2)
35       
36        AddModelToStrings("OneLevel","coef_b1","parameters_b1","b1")
37End
38
39Proc PlotTwoLevel(num,qmin,qmax)
40        Variable num=256,qmin=0.001,qmax=0.7
41        Prompt num "Enter number of data points for model: "
42        Prompt qmin "Enter minimum q-value (A^-1) for model: "
43        Prompt qmax "Enter maximum q-value (A^-1) for model: "
44       
45        make/o/d/n=(num) xwave_b2,ywave_b2
46        xwave_b2 = alog(log(qmin) + x*((log(qmax)-log(qmin))/num))
47        make/o/d coef_b2 = {1,400,200,5e-6,4,3,21,6e-4,2,0}
48        make/o/t parameters_b2 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1)","Pow2","bkg (cm-1 sr-1)"}
49        Edit parameters_b2,coef_b2
50       
51        Variable/G root:g_b2
52        g_b2 := TwoLevel(coef_b2,ywave_b2,xwave_b2)
53        Display ywave_b2 vs xwave_b2
54        ModifyGraph log=1,marker=29,msize=2,mode=4
55        Label bottom "q (A\\S-1\\M)"
56        Label left "Intensity (cm\\S-1\\M)"
57        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2)
58       
59        AddModelToStrings("TwoLevel","coef_b2","parameters_b2","b2")
60End
61
62Proc PlotThreeLevel(num,qmin,qmax)
63        Variable num=256,qmin=0.001,qmax=0.7
64        Prompt num "Enter number of data points for model: "
65        Prompt qmin "Enter minimum q-value (A^-1) for model: "
66        Prompt qmax "Enter maximum q-value (A^-1) for model: "
67       
68        make/o/d/n=(num) xwave_b3,ywave_b3
69        xwave_b3 = alog(log(qmin) + x*((log(qmax)-log(qmin))/num))
70        make/o/d coef_b3 = {1,4000,600,2e-7,4,400,200,5e-6,4,3,21,6e-4,2,0}
71        make/o/t parameters_b3 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1)","Pow2","G3 (cm-1 sr-1)","Rg3  (A)","B3 (cm-1 sr-1)","Pow3","bkg (cm-1)"}
72        Edit parameters_b3,coef_b3
73       
74        Variable/G root:g_b3
75        g_b3 := ThreeLevel(coef_b3,ywave_b3,xwave_b3)   
76        Display ywave_b3 vs xwave_b3
77        ModifyGraph log=1,marker=29,msize=2,mode=4
78        Label bottom "q (A\\S-1\\M)"
79        Label left "Intensity (cm\\S-1\\M)"
80        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2)
81       
82        AddModelToStrings("ThreeLevel","coef_b3","parameters_b3","b3")
83End
84
85Proc PlotFourLevel(num,qmin,qmax)
86        Variable num=256,qmin=0.001,qmax=0.7
87        Prompt num "Enter number of data points for model: "
88        Prompt qmin "Enter minimum q-value (A^-1) for model: "
89        Prompt qmax "Enter maximum q-value (A^-1) for model: "
90       
91        make/o/d/n=(num) xwave_b4,ywave_b4
92        xwave_b4 = alog(log(qmin) + x*((log(qmax)-log(qmin))/num))
93        make/o/d coef_b4 = {1,40000,2000,1e-8,4,4000,600,2e-7,4,400,200,5e-6,4,3,21,6e-4,2,0}
94        make/o/t parameters_b4 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1)","Pow2","G3 (cm-1 sr-1)","Rg3  (A)","B3 (cm-1 sr-1)","Pow3","G4 (cm-1 sr-1)","Rg4  (A)","B4 (cm-1 sr-1)","Pow4","bkg (cm-1)"}
95        Edit parameters_b4,coef_b4
96       
97        Variable/G root:g_b4
98        g_b4 := FourLevel(coef_b4,ywave_b4,xwave_b4)   
99        Display ywave_b4 vs xwave_b4
100        ModifyGraph log=1,marker=29,msize=2,mode=4
101        Label bottom "q (A\\S-1\\M)"
102        Label left "Intensity (cm\\S-1\\M)"
103        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2)
104       
105        AddModelToStrings("FourLevel","coef_b4","parameters_b4","b4")
106End
107
108/////////// macros for smeared model calculations
109
110// - sets up a dependency to a wrapper, not the actual SmearedModelFunction
111Proc PlotSmearedOneLevel(str)                                                           
112        String str
113        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4)
114       
115        // if any of the resolution waves are missing => abort
116        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils)
117                Abort
118        endif
119       
120        SetDataFolder $("root:"+str)
121       
122        // Setup parameter table for model function
123        Make/O/D smear_coef_b1 ={1,3,21,6e-4,2,0}                                       
124        make/o/t smear_parameters_b1 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","bkg (cm-1 sr-1)"} 
125        Edit smear_parameters_b1,smear_coef_b1                                 
126       
127        // output smeared intensity wave, dimensions are identical to experimental QSIG values
128        // make extra copy of experimental q-values for easy plotting
129        Duplicate/O $(str+"_q") smeared_b1,smeared_qvals                               
130        SetScale d,0,0,"1/cm",smeared_b1                                                       
131                                       
132        Variable/G gs_b1=0
133        gs_b1 := fSmearedOneLevel(smear_coef_b1,smeared_b1,smeared_qvals)       //this wrapper fills the STRUCT
134       
135        Display smeared_b1 vs smeared_qvals                                                                     
136        ModifyGraph log=1,marker=29,msize=2,mode=4
137        Label bottom "q (A\\S-1\\M)"
138        Label left "Intensity (cm\\S-1\\M)"
139        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2)
140       
141        SetDataFolder root:
142        AddModelToStrings("SmearedOneLevel","smear_coef_b1","smear_parameters_b1","b1")
143End
144       
145// - sets up a dependency to a wrapper, not the actual SmearedModelFunction
146Proc PlotSmearedTwoLevel(str)                                                           
147        String str
148        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4)
149       
150        // if any of the resolution waves are missing => abort
151        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils)
152                Abort
153        endif
154       
155        SetDataFolder $("root:"+str)
156       
157        // Setup parameter table for model function
158        Make/O/D smear_coef_b2 = {1,400,200,5e-6,4,3,21,6e-4,2,0}                               
159        make/o/t smear_parameters_b2 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1)","Pow2","bkg (cm-1 sr-1)"}     
160        Edit smear_parameters_b2,smear_coef_b2                                 
161       
162        // output smeared intensity wave, dimensions are identical to experimental QSIG values
163        // make extra copy of experimental q-values for easy plotting
164        Duplicate/O $(str+"_q") smeared_b2,smeared_qvals                               
165        SetScale d,0,0,"1/cm",smeared_b2                                                       
166                                       
167        Variable/G gs_b2=0
168        gs_b2 := fSmearedTwoLevel(smear_coef_b2,smeared_b2,smeared_qvals)       //this wrapper fills the STRUCT
169       
170        Display smeared_b2 vs smeared_qvals                                                                     
171        ModifyGraph log=1,marker=29,msize=2,mode=4
172        Label bottom "q (A\\S-1\\M)"
173        Label left "Intensity (cm\\S-1\\M)"
174        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2)
175       
176        SetDataFolder root:
177        AddModelToStrings("SmearedTwoLevel","smear_coef_b2","smear_parameters_b2","b2")
178End
179       
180// - sets up a dependency to a wrapper, not the actual SmearedModelFunction
181Proc PlotSmearedThreeLevel(str)                                                         
182        String str
183        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4)
184       
185        // if any of the resolution waves are missing => abort
186        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils)
187                Abort
188        endif
189       
190        SetDataFolder $("root:"+str)
191       
192        // Setup parameter table for model function
193        Make/O/D smear_coef_b3 = {1,4000,600,2e-7,4,400,200,5e-6,4,3,21,6e-4,2,0}
194        make/o/t smear_parameters_b3 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1)","Pow2","G3 (cm-1 sr-1)","Rg3  (A)","B3 (cm-1 sr-1)","Pow3","bkg (cm-1)"}
195        Edit smear_parameters_b3,smear_coef_b3                                 
196       
197        // output smeared intensity wave, dimensions are identical to experimental QSIG values
198        // make extra copy of experimental q-values for easy plotting
199        Duplicate/O $(str+"_q") smeared_b3,smeared_qvals                               
200        SetScale d,0,0,"1/cm",smeared_b3                                                       
201                                       
202        Variable/G gs_b3=0
203        gs_b3 := fSmearedThreeLevel(smear_coef_b3,smeared_b3,smeared_qvals)     //this wrapper fills the STRUCT
204       
205        Display smeared_b3 vs smeared_qvals                                                                     
206        ModifyGraph log=1,marker=29,msize=2,mode=4
207        Label bottom "q (A\\S-1\\M)"
208        Label left "Intensity (cm\\S-1\\M)"
209        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2)
210       
211        SetDataFolder root:
212        AddModelToStrings("SmearedThreeLevel","smear_coef_b3","smear_parameters_b3","b3")
213End
214       
215// - sets up a dependency to a wrapper, not the actual SmearedModelFunction
216Proc PlotSmearedFourLevel(str)                                                         
217        String str
218        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4)
219       
220        // if any of the resolution waves are missing => abort
221        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils)
222                Abort
223        endif
224       
225        SetDataFolder $("root:"+str)
226       
227        // Setup parameter table for model function
228        Make/O/D smear_coef_b4 = {1,40000,2000,1e-8,4,4000,600,2e-7,4,400,200,5e-6,4,3,21,6e-4,2,0}
229        Make/o/t smear_parameters_b4 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1)","Pow2","G3 (cm-1 sr-1)","Rg3  (A)","B3 (cm-1 sr-1)","Pow3","G4 (cm-1 sr-1)","Rg4  (A)","B4 (cm-1 sr-1)","Pow4","bkg (cm-1)"}
230        Edit smear_parameters_b4,smear_coef_b4                                 
231       
232        // output smeared intensity wave, dimensions are identical to experimental QSIG values
233        // make extra copy of experimental q-values for easy plotting
234        Duplicate/O $(str+"_q") smeared_b4,smeared_qvals                               
235        SetScale d,0,0,"1/cm",smeared_b4                                                       
236                                       
237        Variable/G gs_b4=0
238        gs_b4 := fSmearedFourLevel(smear_coef_b4,smeared_b4,smeared_qvals)      //this wrapper fills the STRUCT
239       
240        Display smeared_b4 vs smeared_qvals                                                                     
241        ModifyGraph log=1,marker=29,msize=2,mode=4
242        Label bottom "q (A\\S-1\\M)"
243        Label left "Intensity (cm\\S-1\\M)"
244        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2)
245       
246        SetDataFolder root:
247        AddModelToStrings("SmearedFourLevel","smear_coef_b4","smear_parameters_b4","b4")
248End
249       
250
251
252
253//AAO version, uses XOP if available
254// simply calls the original single point calculation with
255// a wave assignment (this will behave nicely if given point ranges)
256Function OneLevel(cw,yw,xw) : FitFunc
257        Wave cw,yw,xw
258       
259#if exists("OneLevelX")
260        yw = OneLevelX(cw,xw)
261#else
262        yw = fOneLevel(cw,xw)
263#endif
264        return(0)
265End
266
267//////////Function definitions
268
269Function fOneLevel(w,x) :FitFunc
270        Wave w
271        Variable x
272       
273        Variable ans,erf1,prec=1e-15
274        Variable G1,Rg1,B1,Pow1,bkg,scale
275       
276        scale = w[0]
277        G1 = w[1]
278        Rg1 = w[2]
279        B1 = w[3]
280        Pow1 = w[4]
281        bkg = w[5]
282       
283        erf1 = erf( (x*Rg1/sqrt(6)) ,prec)
284       
285        ans = G1*exp(-x*x*Rg1*Rg1/3)
286        ans += B1*(erf1^3/x)^Pow1
287        ans *= scale
288        ans += bkg
289       
290        Return (ans)
291End
292
293//AAO version, uses XOP if available
294// simply calls the original single point calculation with
295// a wave assignment (this will behave nicely if given point ranges)
296Function TwoLevel(cw,yw,xw) : FitFunc
297        Wave cw,yw,xw
298       
299#if exists("TwoLevelX")
300        yw = TwoLevelX(cw,xw)
301#else
302        yw = fTwoLevel(cw,xw)
303#endif
304        return(0)
305End
306
307Function fTwoLevel(w,x) :FitFunc
308        Wave w
309        Variable x
310       
311        Variable ans,G1,Rg1,B1,G2,Rg2,B2,Pow1,Pow2,bkg
312        Variable erf1,erf2,prec=1e-15,scale
313       
314        //Rsub = Rs
315        scale = w[0]
316        G1 = w[1]       //equivalent to I(0)
317        Rg1 = w[2]
318        B1 = w[3]
319        Pow1 = w[4]
320        G2 = w[5]
321        Rg2 = w[6]
322        B2 = w[7]
323        Pow2 = w[8]
324        bkg = w[9]
325       
326        erf1 = erf( (x*Rg1/sqrt(6)) ,prec)
327        erf2 = erf( (x*Rg2/sqrt(6)) ,prec)
328        //Print erf1
329       
330        ans = G1*exp(-x*x*Rg1*Rg1/3)
331        ans += B1*exp(-x*x*Rg2*Rg2/3)*(erf1^3/x)^Pow1
332        ans += G2*exp(-x*x*Rg2*Rg2/3)
333        ans += B2*(erf2^3/x)^Pow2
334        ans *= scale
335        ans += bkg
336       
337        Return(ans)
338End
339
340//AAO version, uses XOP if available
341// simply calls the original single point calculation with
342// a wave assignment (this will behave nicely if given point ranges)
343Function ThreeLevel(cw,yw,xw) : FitFunc
344        Wave cw,yw,xw
345       
346#if exists("ThreeLevelX")
347        yw = ThreeLevelX(cw,xw)
348#else
349        yw = fThreeLevel(cw,xw)
350#endif
351        return(0)
352End
353
354Function fThreeLevel(w,x) :FitFunc
355        Wave w
356        Variable x
357       
358        Variable ans,G1,Rg1,B1,G2,Rg2,B2,Pow1,Pow2,bkg
359        Variable G3,Rg3,B3,Pow3,erf3
360        Variable erf1,erf2,prec=1e-15,scale
361       
362        //Rsub = Rs
363        scale = w[0]
364        G1 = w[1]       //equivalent to I(0)
365        Rg1 = w[2]
366        B1 = w[3]
367        Pow1 = w[4]
368        G2 = w[5]
369        Rg2 = w[6]
370        B2 = w[7]
371        Pow2 = w[8]
372        G3 = w[9]
373        Rg3 = w[10]
374        B3 = w[11]
375        Pow3 = w[12]
376        bkg = w[13]
377       
378        erf1 = erf( (x*Rg1/sqrt(6)) ,prec)
379        erf2 = erf( (x*Rg2/sqrt(6)) ,prec)
380        erf3 = erf( (x*Rg3/sqrt(6)) ,prec)
381        //Print erf1
382       
383        ans = G1*exp(-x*x*Rg1*Rg1/3) + B1*exp(-x*x*Rg2*Rg2/3)*(erf1^3/x)^Pow1
384        ans += G2*exp(-x*x*Rg2*Rg2/3) + B2*exp(-x*x*Rg3*Rg3/3)*(erf2^3/x)^Pow2
385        ans += G3*exp(-x*x*Rg3*Rg3/3) + B3*(erf3^3/x)^Pow3
386        ans *= scale
387        ans += bkg
388       
389        Return(ans)
390End
391
392//AAO version, uses XOP if available
393// simply calls the original single point calculation with
394// a wave assignment (this will behave nicely if given point ranges)
395Function FourLevel(cw,yw,xw) : FitFunc
396        Wave cw,yw,xw
397       
398#if exists("FourLevelX")
399        yw = FourLevelX(cw,xw)
400#else
401        yw = fFourLevel(cw,xw)
402#endif
403        return(0)
404End
405
406Function fFourLevel(w,x) :FitFunc
407        Wave w
408        Variable x
409       
410        Variable ans,G1,Rg1,B1,G2,Rg2,B2,Pow1,Pow2,bkg
411        Variable G3,Rg3,B3,Pow3,erf3
412        Variable G4,Rg4,B4,Pow4,erf4
413        Variable erf1,erf2,prec=1e-15,scale
414       
415        //Rsub = Rs
416        scale = w[0]
417        G1 = w[1]       //equivalent to I(0)
418        Rg1 = w[2]
419        B1 = w[3]
420        Pow1 = w[4]
421        G2 = w[5]
422        Rg2 = w[6]
423        B2 = w[7]
424        Pow2 = w[8]
425        G3 = w[9]
426        Rg3 = w[10]
427        B3 = w[11]
428        Pow3 = w[12]
429        G4 = w[13]
430        Rg4 = w[14]
431        B4 = w[15]
432        Pow4 = w[16]
433        bkg = w[17]
434       
435        erf1 = erf( (x*Rg1/sqrt(6)) ,prec)
436        erf2 = erf( (x*Rg2/sqrt(6)) ,prec)
437        erf3 = erf( (x*Rg3/sqrt(6)) ,prec)
438        erf4 = erf( (x*Rg4/sqrt(6)) ,prec)
439       
440        ans = G1*exp(-x*x*Rg1*Rg1/3) + B1*exp(-x*x*Rg2*Rg2/3)*(erf1^3/x)^Pow1
441        ans += G2*exp(-x*x*Rg2*Rg2/3) + B2*exp(-x*x*Rg3*Rg3/3)*(erf2^3/x)^Pow2
442        ans += G3*exp(-x*x*Rg3*Rg3/3) + B3*exp(-x*x*Rg4*Rg4/3)*(erf3^3/x)^Pow3
443        ans += G4*exp(-x*x*Rg4*Rg4/3) + B4*(erf4^3/x)^Pow4
444        ans *= scale
445        ans += bkg
446       
447        Return(ans)
448End
449
450Function SmearedOneLevel(s) :FitFunc
451        Struct ResSmearAAOStruct &s
452
453//      the name of your unsmeared model (AAO) is the first argument
454        Smear_Model_20(OneLevel,s.coefW,s.xW,s.yW,s.resW)
455
456        return(0)
457End
458       
459
460Function SmearedTwoLevel(s) :FitFunc
461        Struct ResSmearAAOStruct &s
462
463//      the name of your unsmeared model (AAO) is the first argument
464        Smear_Model_20(TwoLevel,s.coefW,s.xW,s.yW,s.resW)
465
466        return(0)
467End
468       
469
470Function SmearedThreeLevel(s) :FitFunc
471        Struct ResSmearAAOStruct &s
472
473//      the name of your unsmeared model (AAO) is the first argument
474        Smear_Model_20(ThreeLevel,s.coefW,s.xW,s.yW,s.resW)
475
476        return(0)
477End
478
479Function SmearedFourLevel(s) :FitFunc
480        Struct ResSmearAAOStruct &s
481
482//      the name of your unsmeared model (AAO) is the first argument
483        Smear_Model_20(FourLevel,s.coefW,s.xW,s.yW,s.resW)
484
485        return(0)
486End
487
488//wrapper to calculate the smeared model as an AAO-Struct
489// fills the struct and calls the ususal function with the STRUCT parameter
490//
491// used only for the dependency, not for fitting
492//
493Function fSmearedOneLevel(coefW,yW,xW)
494        Wave coefW,yW,xW
495       
496        String str = getWavesDataFolder(yW,0)
497        String DF="root:"+str+":"
498       
499        WAVE resW = $(DF+str+"_res")
500       
501        STRUCT ResSmearAAOStruct fs
502        WAVE fs.coefW = coefW   
503        WAVE fs.yW = yW
504        WAVE fs.xW = xW
505        WAVE fs.resW = resW
506       
507        Variable err
508        err = SmearedOneLevel(fs)
509       
510        return (0)
511End
512
513//wrapper to calculate the smeared model as an AAO-Struct
514// fills the struct and calls the ususal function with the STRUCT parameter
515//
516// used only for the dependency, not for fitting
517//
518Function fSmearedTwoLevel(coefW,yW,xW)
519        Wave coefW,yW,xW
520       
521        String str = getWavesDataFolder(yW,0)
522        String DF="root:"+str+":"
523       
524        WAVE resW = $(DF+str+"_res")
525       
526        STRUCT ResSmearAAOStruct fs
527        WAVE fs.coefW = coefW   
528        WAVE fs.yW = yW
529        WAVE fs.xW = xW
530        WAVE fs.resW = resW
531       
532        Variable err
533        err = SmearedTwoLevel(fs)
534       
535        return (0)
536End
537
538//wrapper to calculate the smeared model as an AAO-Struct
539// fills the struct and calls the ususal function with the STRUCT parameter
540//
541// used only for the dependency, not for fitting
542//
543Function fSmearedThreeLevel(coefW,yW,xW)
544        Wave coefW,yW,xW
545       
546        String str = getWavesDataFolder(yW,0)
547        String DF="root:"+str+":"
548       
549        WAVE resW = $(DF+str+"_res")
550       
551        STRUCT ResSmearAAOStruct fs
552        WAVE fs.coefW = coefW   
553        WAVE fs.yW = yW
554        WAVE fs.xW = xW
555        WAVE fs.resW = resW
556       
557        Variable err
558        err = SmearedThreeLevel(fs)
559       
560        return (0)
561End
562
563//wrapper to calculate the smeared model as an AAO-Struct
564// fills the struct and calls the ususal function with the STRUCT parameter
565//
566// used only for the dependency, not for fitting
567//
568Function fSmearedFourLevel(coefW,yW,xW)
569        Wave coefW,yW,xW
570       
571        String str = getWavesDataFolder(yW,0)
572        String DF="root:"+str+":"
573       
574        WAVE resW = $(DF+str+"_res")
575       
576        STRUCT ResSmearAAOStruct fs
577        WAVE fs.coefW = coefW   
578        WAVE fs.yW = yW
579        WAVE fs.xW = xW
580        WAVE fs.resW = resW
581       
582        Variable err
583        err = SmearedFourLevel(fs)
584       
585        return (0)
586End
Note: See TracBrowser for help on using the repository browser.