source: sans/Analysis/branches/ajj_23APR07/IGOR_Package_Files/Put in User Procedures/SANS_Models_v3.00/NewModels_2006/Beaucage.ipf @ 151

Last change on this file since 151 was 151, checked in by srkline, 15 years ago

(1) - cursors can now be used to select a subrange of USANS data to fit. This is done by th fit wrapper, assigning a subrange of resW to the struct

(2) all of the smeared model functions are now in the latest form of Smear_Model_N() that is NOT a pointwise calculation anymore, since the USANS matrix smearing in inherently not so.

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