Changeset 774 for sans/Dev


Ignore:
Timestamp:
Dec 8, 2010 11:48:00 AM (12 years ago)
Author:
srkline
Message:

Added the Two-Yukawa structure factor calculations to those model functions with S(Q).

Fixed the name of Vesicle_UL_Sq.ipf to be consistent.

Location:
sans/Dev/trunk/NCNR_User_Procedures/Analysis
Files:
1 added
1 deleted
16 edited

Legend:

Unmodified
Added
Removed
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/CoreShell_Sq_v40.ipf

    r570 r774  
    1010#include "SquareWellStruct_v40" 
    1111#include "StickyHardSphereStruct_v40" 
     12#include "Two_Yukawa_v40" 
    1213 
    1314Proc PlotCoreShell_HS(num,qmin,qmax) 
     
    413414End 
    414415 
     416//two yukawa 
     417Proc PlotCoreShell_2Y(num,qmin,qmax) 
     418        Variable num=256,qmin=0.001,qmax=0.7 
     419        Prompt num "Enter number of data points for model: " 
     420        Prompt qmin "Enter minimum q-value (A^-1) for model: " 
     421        Prompt qmax "Enter maximum q-value (A^-1) for model: " 
     422         
     423        Make/O/D/n=(num) xwave_CSS_2Y,ywave_CSS_2Y 
     424        xwave_CSS_2Y =  alog(log(qmin) + x*((log(qmax)-log(qmin))/num)) 
     425        Make/O/D coef_CSS_2Y = {0.1,60,10,1e-6,2e-6,3e-6,6,10,-1,2,0.0001} 
     426        make/o/t parameters_CSS_2Y = {"volume fraction","core rad (A)","shell thickness (A)","SLD core (A-2)","SLD shell (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1)"} 
     427        Edit/K=1 parameters_CSS_2Y,coef_CSS_2Y 
     428         
     429        Variable/G root:g_CSS_2Y 
     430        g_CSS_2Y := CoreShell_2Y(coef_CSS_2Y,ywave_CSS_2Y,xwave_CSS_2Y) 
     431        Display/K=1 ywave_CSS_2Y vs xwave_CSS_2Y 
     432        ModifyGraph log=1,marker=29,msize=2,mode=4 
     433        Label bottom "q (A\\S-1\\M)" 
     434        Label left "Intensity (cm\\S-1\\M)" 
     435 
     436        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     437         
     438        AddModelToStrings("CoreShell_2Y","coef_CSS_2Y","parameters_CSS_2Y","CSS_2Y") 
     439End 
     440 
     441// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
     442Proc PlotSmearedCoreShell_2Y(str)                                                                
     443        String str 
     444        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     445         
     446        // if any of the resolution waves are missing => abort 
     447        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
     448                Abort 
     449        endif 
     450         
     451        SetDataFolder $("root:"+str) 
     452         
     453        // Setup parameter table for model function 
     454        Make/O/D smear_coef_CSS_2Y = {0.1,60,10,1e-6,2e-6,3e-6,6,10,-1,2,0.0001} 
     455        make/o/t smear_parameters_CSS_2Y = {"volume fraction","core rad (A)","shell thickness (A)","SLD core (A-2)","SLD shell (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1)"} 
     456        Edit smear_parameters_CSS_2Y,smear_coef_CSS_2Y                                   
     457         
     458        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
     459        // make extra copy of experimental q-values for easy plotting 
     460        Duplicate/O $(str+"_q") smeared_CSS_2Y,smeared_qvals                             
     461        SetScale d,0,0,"1/cm",smeared_CSS_2Y                                                     
     462                                         
     463        Variable/G gs_CSS_2Y=0 
     464        gs_CSS_2Y := fSmearedCoreShell_2Y(smear_coef_CSS_2Y,smeared_CSS_2Y,smeared_qvals)       //this wrapper fills the STRUCT 
     465         
     466        Display smeared_CSS_2Y vs smeared_qvals                                                                  
     467        ModifyGraph log=1,marker=29,msize=2,mode=4 
     468        Label bottom "q (A\\S-1\\M)" 
     469        Label left "Intensity (cm\\S-1\\M)" 
     470 
     471        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     472         
     473        SetDataFolder root: 
     474        AddModelToStrings("SmearedCoreShell_2Y","smear_coef_CSS_2Y","smear_parameters_CSS_2Y","CSS_2Y") 
     475End 
     476         
     477 
     478Function CoreShell_2Y(w,yw,xw) : FitFunc 
     479        Wave w,yw,xw 
     480         
     481        Variable inten 
     482         
     483        //setup form factor coefficient wave 
     484        Make/O/D/N=7 form_CSS_2Y 
     485        form_CSS_2Y[0] = 1 
     486        form_CSS_2Y[1] = w[1] 
     487        form_CSS_2Y[2] = w[2] 
     488        form_CSS_2Y[3] = w[3] 
     489        form_CSS_2Y[4] = w[4] 
     490        form_CSS_2Y[5] = w[5] 
     491        form_CSS_2Y[6] = 0 
     492         
     493        //setup structure factor coefficient wave 
     494        Make/O/D/N=6 struct_CSS_2Y 
     495        struct_CSS_2Y[0] = w[0] 
     496        struct_CSS_2Y[1] = w[1] + w[2] 
     497        struct_CSS_2Y[2] = w[6] 
     498        struct_CSS_2Y[3] = w[7] 
     499        struct_CSS_2Y[4] = w[8] 
     500        struct_CSS_2Y[5] = w[9] 
     501         
     502        //calculate each and combine 
     503        Duplicate/O xw temp_CSS_2Y_PQ,temp_CSS_2Y_SQ            //make waves for the AAO 
     504        CoreShellSphere(form_CSS_2Y,temp_CSS_2Y_PQ,xw) 
     505        TwoYukawa(struct_CSS_2Y,temp_CSS_2Y_SQ,xw) 
     506        yw = temp_CSS_2Y_PQ * temp_CSS_2Y_SQ 
     507        yw *= w[0] 
     508        yw += w[10] 
     509         
     510        //cleanup waves 
     511//      Killwaves/Z form_CSS_2Y,struct_CSS_2Y 
     512         
     513        return (0) 
     514End 
     515 
    415516 
    416517 
     
    451552//      the name of your unsmeared model is the first argument 
    452553        Smear_Model_20(CoreShell_SHS,s.coefW,s.xW,s.yW,s.resW) 
     554 
     555        return(0) 
     556End 
     557 
     558// this is all there is to the smeared calculation! 
     559Function SmearedCoreShell_2Y(s) :FitFunc 
     560        Struct ResSmearAAOStruct &s 
     561 
     562//      the name of your unsmeared model is the first argument 
     563        Smear_Model_20(CoreShell_2Y,s.coefW,s.xW,s.yW,s.resW) 
    453564 
    454565        return(0) 
     
    554665        return (0) 
    555666End 
     667 
     668//wrapper to calculate the smeared model as an AAO-Struct 
     669// fills the struct and calls the ususal function with the STRUCT parameter 
     670// 
     671// used only for the dependency, not for fitting 
     672// 
     673Function fSmearedCoreShell_2Y(coefW,yW,xW) 
     674        Wave coefW,yW,xW 
     675         
     676        String str = getWavesDataFolder(yW,0) 
     677        String DF="root:"+str+":" 
     678         
     679        WAVE resW = $(DF+str+"_res") 
     680         
     681        STRUCT ResSmearAAOStruct fs 
     682        WAVE fs.coefW = coefW    
     683        WAVE fs.yW = yW 
     684        WAVE fs.xW = xW 
     685        WAVE fs.resW = resW 
     686         
     687        Variable err 
     688        err = SmearedCoreShell_2Y(fs) 
     689         
     690        return (0) 
     691End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/Cylinder_Sq_v40.ipf

    r570 r774  
    1010#include "SquareWellStruct_v40" 
    1111#include "StickyHardSphereStruct_v40" 
     12#include "Two_Yukawa_v40" 
    1213 
    1314Proc PlotCylinder_HS(num,qmin,qmax) 
     
    414415End 
    415416 
    416  
     417// two yukawa 
     418Proc PlotCylinder_2Y(num,qmin,qmax) 
     419        Variable num=128,qmin=0.001,qmax=0.7 
     420        Prompt num "Enter number of data points for model: " 
     421        Prompt qmin "Enter minimum q-value (A^-1) for model: " 
     422        Prompt qmax "Enter maximum q-value (A^-1) for model: " 
     423         
     424        Make/O/D/n=(num) xwave_CYL_2Y,ywave_CYL_2Y 
     425        xwave_CYL_2Y =  alog(log(qmin) + x*((log(qmax)-log(qmin))/num)) 
     426        Make/O/D coef_CYL_2Y = {0.01,20.,400,1e-6,6.3e-6,6,10,-1,2,0.01} 
     427        make/o/t parameters_CYL_2Y = {"volume fraction","radius (A)","length (A)","SLD cylinder (A^-2)","SLD solvent (A^-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","incoh. bkg (cm^-1)"} 
     428        Edit parameters_CYL_2Y,coef_CYL_2Y 
     429         
     430        Variable/G root:g_CYL_2Y 
     431        g_CYL_2Y := Cylinder_2Y(coef_CYL_2Y,ywave_CYL_2Y,xwave_CYL_2Y) 
     432        Display ywave_CYL_2Y vs xwave_CYL_2Y 
     433        ModifyGraph log=1,marker=29,msize=2,mode=4 
     434        Label bottom "q (A\\S-1\\M)" 
     435        Label left "Intensity (cm\\S-1\\M)" 
     436 
     437        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     438         
     439        AddModelToStrings("Cylinder_2Y","coef_CYL_2Y","parameters_CYL_2Y","CYL_2Y") 
     440End 
     441 
     442// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
     443Proc PlotSmearedCylinder_2Y(str)                                                                 
     444        String str 
     445        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     446         
     447        // if any of the resolution waves are missing => abort 
     448        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
     449                Abort 
     450        endif 
     451         
     452        SetDataFolder $("root:"+str) 
     453         
     454        // Setup parameter table for model function 
     455        Make/O/D smear_coef_CYL_2Y = {0.01,20.,400,1e-6,6.3e-6,6,10,-1,2,0.01} 
     456        make/o/t smear_parameters_CYL_2Y = {"volume fraction","radius (A)","length (A)","SLD cylinder (A^-2)","SLD solvent (A^-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","incoh. bkg (cm^-1)"} 
     457        Edit smear_parameters_CYL_2Y,smear_coef_CYL_2Y                                   
     458         
     459        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
     460        // make extra copy of experimental q-values for easy plotting 
     461        Duplicate/O $(str+"_q") smeared_CYL_2Y,smeared_qvals                             
     462        SetScale d,0,0,"1/cm",smeared_CYL_2Y                                                     
     463                                         
     464        Variable/G gs_CYL_2Y=0 
     465        gs_CYL_2Y := fSmearedCylinder_2Y(smear_coef_CYL_2Y,smeared_CYL_2Y,smeared_qvals)        //this wrapper fills the STRUCT 
     466         
     467        Display smeared_CYL_2Y vs smeared_qvals                                                                  
     468        ModifyGraph log=1,marker=29,msize=2,mode=4 
     469        Label bottom "q (A\\S-1\\M)" 
     470        Label left "Intensity (cm\\S-1\\M)" 
     471 
     472        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     473         
     474        SetDataFolder root: 
     475        AddModelToStrings("SmearedCylinder_2Y","smear_coef_CYL_2Y","smear_parameters_CYL_2Y","CYL_2Y") 
     476End 
     477                 
     478 
     479Function Cylinder_2Y(w,yw,xw) : FitFunc 
     480        Wave w,yw,xw 
     481         
     482        Variable inten,rad,len 
     483        rad=w[1] 
     484        len=w[2] 
     485         
     486        //setup form factor coefficient wave 
     487        Make/O/D/N=6 form_CYL_2Y 
     488        form_CYL_2Y[0] = 1 
     489        form_CYL_2Y[1] = w[1] 
     490        form_CYL_2Y[2] = w[2] 
     491        form_CYL_2Y[3] = w[3] 
     492        form_CYL_2Y[4] = w[4]    
     493        form_CYL_2Y[5] = 0 
     494         
     495        //setup structure factor coefficient wave 
     496        Make/O/D/N=6 struct_CYL_2Y 
     497        struct_CYL_2Y[0] = w[0] 
     498        struct_CYL_2Y[1] = 0.5*DiamCyl(len,rad) 
     499        struct_CYL_2Y[2] = w[5] 
     500        struct_CYL_2Y[3] = w[6] 
     501        struct_CYL_2Y[4] = w[7] 
     502        struct_CYL_2Y[5] = w[8] 
     503         
     504        //calculate each and combine 
     505        Duplicate/O xw temp_CYL_2Y_PQ,temp_CYL_2Y_SQ            //make waves for the AAO 
     506        CylinderForm(form_CYL_2Y,temp_CYL_2Y_PQ,xw) 
     507        TwoYukawa(struct_CYL_2Y,temp_CYL_2Y_SQ,xw) 
     508        yw = temp_CYL_2Y_PQ * temp_CYL_2Y_SQ 
     509        yw *= w[0] 
     510        yw += w[9] 
     511         
     512        //cleanup waves (don't do this - it takes a lot of time...) 
     513//      Killwaves/Z form_CYL_2Y,struct_CYL_2Y 
     514         
     515        return (0) 
     516End 
    417517 
    418518// this is all there is to the smeared calculation! 
     
    452552//      the name of your unsmeared model is the first argument 
    453553        Smear_Model_20(Cylinder_SHS,s.coefW,s.xW,s.yW,s.resW) 
     554 
     555        return(0) 
     556End 
     557 
     558// this is all there is to the smeared calculation! 
     559Function SmearedCylinder_2Y(s) :FitFunc 
     560        Struct ResSmearAAOStruct &s 
     561 
     562//      the name of your unsmeared model is the first argument 
     563        Smear_Model_20(Cylinder_2Y,s.coefW,s.xW,s.yW,s.resW) 
    454564 
    455565        return(0) 
     
    555665        return (0) 
    556666End 
     667 
     668//wrapper to calculate the smeared model as an AAO-Struct 
     669// fills the struct and calls the ususal function with the STRUCT parameter 
     670// 
     671// used only for the dependency, not for fitting 
     672// 
     673Function fSmearedCylinder_2Y(coefW,yW,xW) 
     674        Wave coefW,yW,xW 
     675         
     676        String str = getWavesDataFolder(yW,0) 
     677        String DF="root:"+str+":" 
     678         
     679        WAVE resW = $(DF+str+"_res") 
     680         
     681        STRUCT ResSmearAAOStruct fs 
     682        WAVE fs.coefW = coefW    
     683        WAVE fs.yW = yW 
     684        WAVE fs.xW = xW 
     685        WAVE fs.resW = resW 
     686         
     687        Variable err 
     688        err = SmearedCylinder_2Y(fs) 
     689         
     690        return (0) 
     691End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/NewModels_2006/GaussSpheres_Sq_v40.ipf

    r570 r774  
    1111#include "SquareWellStruct_v40" 
    1212#include "StickyHardSphereStruct_v40" 
     13#include "Two_Yukawa_v40" 
    1314 
    1415Proc PlotGaussPolySphere_HS(num,qmin,qmax) 
     
    436437End 
    437438 
    438  
     439//two yukawa 
     440Proc PlotGaussPolySphere_2Y(num,qmin,qmax) 
     441        Variable num=128,qmin=0.001,qmax=0.7 
     442        Prompt num "Enter number of data points for model: " 
     443        Prompt qmin "Enter minimum q-value (A^-1) for model: " 
     444        Prompt qmax "Enter maximum q-value (A^-1) for model: " 
     445         
     446        Make/O/D/N=(num) xwave_pgs_2Y,ywave_pgs_2Y 
     447        xwave_pgs_2Y = alog( log(qmin) + x*((log(qmax)-log(qmin))/num) ) 
     448        Make/O/D coef_pgs_2Y = {0.01,60,0.2,1e-6,3e-6,6,10,-1,2,0.001} 
     449        make/O/T parameters_pgs_2Y = {"Volume Fraction (scale)","mean radius (A)","polydisp (sig/avg)","SLD sphere (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1 sr-1)"} 
     450        Edit parameters_pgs_2Y,coef_pgs_2Y 
     451         
     452        Variable/G root:g_pgs_2Y 
     453        g_pgs_2Y := GaussPolySphere_2Y(coef_pgs_2Y,ywave_pgs_2Y,xwave_pgs_2Y) 
     454        Display ywave_pgs_2Y vs xwave_pgs_2Y 
     455        ModifyGraph log=1,marker=29,msize=2,mode=4 
     456        Label bottom "q (A\\S-1\\M)" 
     457        Label left "Intensity (cm\\S-1\\M)" 
     458        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     459         
     460        AddModelToStrings("GaussPolySphere_2Y","coef_pgs_2Y","parameters_pgs_2Y","pgs_2Y") 
     461End 
     462 
     463// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
     464Proc PlotSmearedGaussPolySphere_2Y(str)                                                          
     465        String str 
     466        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     467         
     468        // if any of the resolution waves are missing => abort 
     469        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
     470                Abort 
     471        endif 
     472         
     473        SetDataFolder $("root:"+str) 
     474         
     475        // Setup parameter table for model function 
     476        Make/O/D smear_coef_pgs_2Y = {0.01,60,0.2,1e-6,3e-6,6,10,-1,2,0.001}                                     
     477        make/o/t smear_parameters_pgs_2Y = {"Volume Fraction (scale)","mean radius (A)","polydisp (sig/avg)","SLD sphere (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1 sr-1)"}         
     478        Edit smear_parameters_pgs_2Y,smear_coef_pgs_2Y                                   
     479         
     480        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
     481        // make extra copy of experimental q-values for easy plotting 
     482        Duplicate/O $(str+"_q") smeared_pgs_2Y,smeared_qvals                             
     483        SetScale d,0,0,"1/cm",smeared_pgs_2Y                                                     
     484                                         
     485        Variable/G gs_pgs_2Y=0 
     486        gs_pgs_2Y := fSmearedGaussPolySphere_2Y(smear_coef_pgs_2Y,smeared_pgs_2Y,smeared_qvals) //this wrapper fills the STRUCT 
     487         
     488        Display smeared_pgs_2Y vs smeared_qvals                                                                  
     489        ModifyGraph log=1,marker=29,msize=2,mode=4 
     490        Label bottom "q (A\\S-1\\M)" 
     491        Label left "Intensity (cm\\S-1\\M)" 
     492        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     493         
     494        SetDataFolder root: 
     495        AddModelToStrings("SmearedGaussPolySphere_2Y","smear_coef_pgs_2Y","smear_parameters_pgs_2Y","pgs_2Y") 
     496End 
     497 
     498 
     499 
     500Function GaussPolySphere_2Y(w,yw,xw) : FitFunc 
     501        Wave w,yw,xw 
     502         
     503        Variable inten 
     504         
     505        //setup form factor coefficient wave 
     506        Make/O/D/N=6 form_pgs_2Y 
     507        form_pgs_2Y[0] = 1 
     508        form_pgs_2Y[1] = w[1] 
     509        form_pgs_2Y[2] = w[2] 
     510        form_pgs_2Y[3] = w[3] 
     511        form_pgs_2Y[4] = w[4] 
     512        form_pgs_2Y[5] = 0 
     513         
     514        //calculate the diameter of the effective one-component sphere 
     515        Variable pd,diam,Vpoly,Ravg 
     516        pd = w[2] 
     517        Ravg = w[1] 
     518         
     519        Vpoly = (4*pi/3*Ravg^3)*(1+3*pd^2) 
     520        diam = (6*Vpoly/pi)^(1/3) 
     521         
     522         
     523        //setup structure factor coefficient wave 
     524        Make/O/D/N=6 struct_pgs_2Y 
     525        struct_pgs_2Y[0] = w[0] 
     526        struct_pgs_2Y[1] = diam/2 
     527        struct_pgs_2Y[2] = w[5] 
     528        struct_pgs_2Y[3] = w[6] 
     529        struct_pgs_2Y[4] = w[7] 
     530        struct_pgs_2Y[5] = w[8] 
     531         
     532        //calculate each and combine 
     533        Duplicate/O xw tmp_pgs_2Y_PQ,tmp_pgs_2Y_SQ 
     534        GaussSpheres(form_pgs_2Y,tmp_pgs_2Y_PQ,xw) 
     535        TwoYukawa(struct_pgs_2Y,tmp_pgs_2Y_SQ,xw) 
     536        yw = tmp_pgs_2Y_PQ * tmp_pgs_2Y_SQ 
     537        yw *= w[0] 
     538        yw += w[9] 
     539         
     540        //cleanup waves 
     541//      Killwaves/Z form_pgs_2Y,struct_pgs_2Y 
     542         
     543        return (0) 
     544End 
    439545 
    440546// this is all there is to the smeared calculation! 
     
    474580//      the name of your unsmeared model (AAO) is the first argument 
    475581        Smear_Model_20(GaussPolySphere_SHS,s.coefW,s.xW,s.yW,s.resW) 
     582 
     583        return(0) 
     584End 
     585 
     586// this is all there is to the smeared calculation! 
     587Function SmearedGaussPolySphere_2Y(s) : FitFunc 
     588        Struct ResSmearAAOStruct &s 
     589 
     590//      the name of your unsmeared model (AAO) is the first argument 
     591        Smear_Model_20(GaussPolySphere_2Y,s.coefW,s.xW,s.yW,s.resW) 
    476592 
    477593        return(0) 
     
    577693        return (0) 
    578694End 
     695 
     696//wrapper to calculate the smeared model as an AAO-Struct 
     697// fills the struct and calls the ususal function with the STRUCT parameter 
     698// 
     699// used only for the dependency, not for fitting 
     700// 
     701Function fSmearedGaussPolySphere_2Y(coefW,yW,xW) 
     702        Wave coefW,yW,xW 
     703         
     704        String str = getWavesDataFolder(yW,0) 
     705        String DF="root:"+str+":" 
     706         
     707        WAVE resW = $(DF+str+"_res") 
     708         
     709        STRUCT ResSmearAAOStruct fs 
     710        WAVE fs.coefW = coefW    
     711        WAVE fs.yW = yW 
     712        WAVE fs.xW = xW 
     713        WAVE fs.resW = resW 
     714         
     715        Variable err 
     716        err = SmearedGaussPolySphere_2Y(fs) 
     717         
     718        return (0) 
     719End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/NewModels_2006/LogNormalSphere_Sq_v40.ipf

    r570 r774  
    1111#include "SquareWellStruct_v40" 
    1212#include "StickyHardSphereStruct_v40" 
     13#include "Two_Yukawa_v40" 
     14 
    1315 
    1416Proc PlotLogNormalSphere_HS(num,qmin,qmax) 
     
    436438End 
    437439 
     440// two yukawa 
     441Proc PlotLogNormalSphere_2Y(num,qmin,qmax) 
     442        Variable num=128,qmin=0.001,qmax=0.7 
     443        Prompt num "Enter number of data points for model: " 
     444        Prompt qmin "Enter minimum q-value (A^-1) for model: " 
     445        Prompt qmax "Enter maximum q-value (A^-1) for model: " 
     446         
     447        Make/O/D/N=(num) xwave_lns_2Y,ywave_lns_2Y 
     448        xwave_lns_2Y = alog( log(qmin) + x*((log(qmax)-log(qmin))/num) ) 
     449        Make/O/D coef_lns_2Y = {0.1,60,0.2,1e-6,3e-6,6,10,-1,2,0.001} 
     450        make/O/T parameters_lns_2Y = {"Volume Fraction (scale)","mean radius (A)","polydisp (sig/avg)","SLD sphere (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1 sr-1)"} 
     451        Edit parameters_lns_2Y,coef_lns_2Y 
     452         
     453        Variable/G root:g_lns_2Y 
     454        g_lns_2Y := LogNormalSphere_2Y(coef_lns_2Y,ywave_lns_2Y,xwave_lns_2Y) 
     455        Display ywave_lns_2Y vs xwave_lns_2Y 
     456        ModifyGraph log=1,marker=29,msize=2,mode=4 
     457        Label bottom "q (A\\S-1\\M)" 
     458        Label left "Intensity (cm\\S-1\\M)" 
     459        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     460         
     461        AddModelToStrings("LogNormalSphere_2Y","coef_lns_2Y","parameters_lns_2Y","lns_2Y") 
     462End 
     463 
     464// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
     465Proc PlotSmearedLogNormalSphere_2Y(str)                                                          
     466        String str 
     467        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     468         
     469        // if any of the resolution waves are missing => abort 
     470        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
     471                Abort 
     472        endif 
     473         
     474        SetDataFolder $("root:"+str) 
     475         
     476        // Setup parameter table for model function 
     477        Make/O/D smear_coef_lns_2Y = {0.1,60,0.2,1e-6,3e-6,6,10,-1,2,0.001}                                      
     478        make/o/t smear_parameters_lns_2Y = {"Volume Fraction (scale)","mean radius (A)","polydisp (sig/avg)","SLD sphere (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1 sr-1)"}         
     479        Edit smear_parameters_lns_2Y,smear_coef_lns_2Y                                   
     480         
     481        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
     482        // make extra copy of experimental q-values for easy plotting 
     483        Duplicate/O $(str+"_q") smeared_lns_2Y,smeared_qvals                             
     484        SetScale d,0,0,"1/cm",smeared_lns_2Y                                                     
     485                                         
     486        Variable/G gs_lns_2Y=0 
     487        gs_lns_2Y := fSmearedLogNormalSphere_2Y(smear_coef_lns_2Y,smeared_lns_2Y,smeared_qvals) //this wrapper fills the STRUCT 
     488         
     489        Display smeared_lns_2Y vs smeared_qvals                                                                  
     490        ModifyGraph log=1,marker=29,msize=2,mode=4 
     491        Label bottom "q (A\\S-1\\M)" 
     492        Label left "Intensity (cm\\S-1\\M)" 
     493        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     494         
     495        SetDataFolder root: 
     496        AddModelToStrings("SmearedLogNormalSphere_2Y","smear_coef_lns_2Y","smear_parameters_lns_2Y","lns_2Y") 
     497End 
     498         
     499 
     500Function LogNormalSphere_2Y(w,yw,xw) : FitFunc 
     501        Wave w,yw,xw 
     502         
     503        Variable inten 
     504         
     505        //setup form factor coefficient wave 
     506        Make/O/D/N=6 form_lns_2Y 
     507        form_lns_2Y[0] = 1 
     508        form_lns_2Y[1] = w[1] 
     509        form_lns_2Y[2] = w[2] 
     510        form_lns_2Y[3] = w[3] 
     511        form_lns_2Y[4] = w[4] 
     512        form_lns_2Y[5] = 0 
     513         
     514        //calculate the diameter of the effective one-component sphere 
     515        Variable r3,mu,sig,diam 
     516        sig = w[2]                              //polydispersity 
     517        mu = ln(w[1])                   //ln of mean radius 
     518        r3 = exp(3*mu + 9/2*sig^2)              // <R^3> calculated directly for log-normal distr. 
     519         
     520        diam = 2*(r3)^(1/3) 
     521         
     522         
     523        //setup structure factor coefficient wave 
     524        Make/O/D/N=6 struct_lns_2Y 
     525        struct_lns_2Y[0] = w[0] 
     526        struct_lns_2Y[1] = diam/2 
     527        struct_lns_2Y[2] = w[5] 
     528        struct_lns_2Y[3] = w[6] 
     529        struct_lns_2Y[4] = w[7] 
     530        struct_lns_2Y[5] = w[8] 
     531         
     532        //calculate each and combine 
     533        Duplicate/O xw tmp_lns_2Y_PQ,tmp_lns_2Y_SQ 
     534        LogNormalSphere(form_lns_2Y,tmp_lns_2Y_PQ,xw) 
     535        TwoYukawa(struct_lns_2Y,tmp_lns_2Y_SQ,xw) 
     536        yw = tmp_lns_2Y_PQ *tmp_lns_2Y_SQ 
     537        yw *= w[0] 
     538        yw += w[9] 
     539         
     540        //cleanup waves 
     541//      Killwaves/Z form_lns_2Y,struct_lns_2Y 
     542         
     543        return (0) 
     544End 
     545 
    438546 
    439547// this is all there is to the smeared calculation! 
     
    473581//      the name of your unsmeared model (AAO) is the first argument 
    474582        Smear_Model_20(LogNormalSphere_SHS,s.coefW,s.xW,s.yW,s.resW) 
     583 
     584        return(0) 
     585End 
     586 
     587// this is all there is to the smeared calculation! 
     588Function SmearedLogNormalSphere_2Y(s) : FitFunc 
     589        Struct ResSmearAAOStruct &s 
     590 
     591//      the name of your unsmeared model (AAO) is the first argument 
     592        Smear_Model_20(LogNormalSphere_2Y,s.coefW,s.xW,s.yW,s.resW) 
    475593 
    476594        return(0) 
     
    576694        return (0) 
    577695End 
     696 
     697//wrapper to calculate the smeared model as an AAO-Struct 
     698// fills the struct and calls the ususal function with the STRUCT parameter 
     699// 
     700// used only for the dependency, not for fitting 
     701// 
     702Function fSmearedLogNormalSphere_2Y(coefW,yW,xW) 
     703        Wave coefW,yW,xW 
     704         
     705        String str = getWavesDataFolder(yW,0) 
     706        String DF="root:"+str+":" 
     707         
     708        WAVE resW = $(DF+str+"_res") 
     709         
     710        STRUCT ResSmearAAOStruct fs 
     711        WAVE fs.coefW = coefW    
     712        WAVE fs.yW = yW 
     713        WAVE fs.xW = xW 
     714        WAVE fs.resW = resW 
     715         
     716        Variable err 
     717        err = SmearedLogNormalSphere_2Y(fs) 
     718         
     719        return (0) 
     720End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/NewModels_2006/SchulzSpheres_Sq_v40.ipf

    r570 r774  
    1111#include "SquareWellStruct_v40" 
    1212#include "StickyHardSphereStruct_v40" 
     13#include "Two_Yukawa_v40" 
     14 
    1315 
    1416Proc PlotSchulzSpheres_HS(num,qmin,qmax) 
     
    441443End 
    442444 
     445//two yukawa 
     446Proc PlotSchulzSpheres_2Y(num,qmin,qmax) 
     447        Variable num=128,qmin=0.001,qmax=0.7 
     448        Prompt num "Enter number of data points for model: " 
     449        Prompt qmin "Enter minimum q-value (A^-1) for model: " 
     450        Prompt qmax "Enter maximum q-value (A^-1) for model: " 
     451         
     452        Make/O/D/N=(num) xwave_sch_2Y,ywave_sch_2Y 
     453        xwave_sch_2Y = alog( log(qmin) + x*((log(qmax)-log(qmin))/num) ) 
     454        Make/O/D coef_sch_2Y = {0.01,60,0.2,1e-6,3e-6,6,10,-1,2,0.001} 
     455        make/O/T parameters_sch_2Y = {"Volume Fraction (scale)","mean radius (A)","polydisp (sig/avg)","SLD sphere (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1 sr-1)"} 
     456        Edit parameters_sch_2Y,coef_sch_2Y 
     457         
     458        Variable/G root:g_sch_2Y 
     459        g_sch_2Y := SchulzSpheres_2Y(coef_sch_2Y,ywave_sch_2Y,xwave_sch_2Y) 
     460        Display ywave_sch_2Y vs xwave_sch_2Y 
     461        ModifyGraph log=1,marker=29,msize=2,mode=4 
     462        Label bottom "q (A\\S-1\\M)" 
     463        Label left "Intensity (cm\\S-1\\M)" 
     464        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     465         
     466        AddModelToStrings("SchulzSpheres_2Y","coef_sch_2Y","parameters_sch_2Y","sch_2Y") 
     467End 
     468 
     469// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
     470Proc PlotSmearedSchulzSpheres_2Y(str)                                                            
     471        String str 
     472        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     473         
     474        // if any of the resolution waves are missing => abort 
     475        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
     476                Abort 
     477        endif 
     478         
     479        SetDataFolder $("root:"+str) 
     480         
     481        // Setup parameter table for model function 
     482        Make/O/D smear_coef_sch_2Y = {0.01,60,0.2,1e-6,3e-6,6,10,-1,2,0.001}                                     
     483        make/o/t smear_parameters_sch_2Y = {"Volume Fraction (scale)","mean radius (A)","polydisp (sig/avg)","SLD sphere (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1 sr-1)"}         
     484        Edit smear_parameters_sch_2Y,smear_coef_sch_2Y                                   
     485         
     486        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
     487        // make extra copy of experimental q-values for easy plotting 
     488        Duplicate/O $(str+"_q") smeared_sch_2Y,smeared_qvals                             
     489        SetScale d,0,0,"1/cm",smeared_sch_2Y                                                     
     490                                         
     491        Variable/G gs_sch_2Y=0 
     492        gs_sch_2Y := fSmearedSchulzSpheres_2Y(smear_coef_sch_2Y,smeared_sch_2Y,smeared_qvals)   //this wrapper fills the STRUCT 
     493         
     494        Display smeared_sch_2Y vs smeared_qvals                                                                  
     495        ModifyGraph log=1,marker=29,msize=2,mode=4 
     496        Label bottom "q (A\\S-1\\M)" 
     497        Label left "Intensity (cm\\S-1\\M)" 
     498        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     499         
     500        SetDataFolder root: 
     501        AddModelToStrings("SmearedSchulzSpheres_2Y","smear_coef_sch_2Y","smear_parameters_sch_2Y","sch_2Y") 
     502End 
     503         
     504 
     505 
     506Function SchulzSpheres_2Y(w,yw,xw) : FitFunc 
     507        Wave w,yw,xw 
     508         
     509        Variable inten 
     510         
     511        //setup form factor coefficient wave 
     512        Make/O/D/N=6 form_sch_2Y 
     513        form_sch_2Y[0] = 1 
     514        form_sch_2Y[1] = w[1] 
     515        form_sch_2Y[2] = w[2] 
     516        form_sch_2Y[3] = w[3] 
     517        form_sch_2Y[4] = w[4] 
     518        form_sch_2Y[5] = 0 
     519         
     520        //calculate the diameter of the effective one-component sphere 
     521        Variable pd,diam,zz,Vpoly,Ravg 
     522        pd = w[2] 
     523        zz = (1/pd)^2 - 1 
     524        Ravg = w[1] 
     525         
     526        Vpoly = 4*pi/3*(Ravg)^3*(zz+3)*(zz+2)/(zz+1)^2 
     527        diam = (6*Vpoly/pi)^(1/3) 
     528         
     529         
     530        //setup structure factor coefficient wave 
     531        Make/O/D/N=6 struct_sch_2Y 
     532        struct_sch_2Y[0] = w[0] 
     533        struct_sch_2Y[1] = diam/2 
     534        struct_sch_2Y[2] = w[5] 
     535        struct_sch_2Y[3] = w[6] 
     536        struct_sch_2Y[4] = w[7] 
     537        struct_sch_2Y[5] = w[8] 
     538         
     539        //calculate each and combine 
     540        Duplicate/O xw tmp_sch_2Y_PQ,tmp_sch_2Y_SQ 
     541        SchulzSpheres(form_sch_2Y,tmp_sch_2Y_PQ,xw) 
     542        TwoYukawa(struct_sch_2Y,tmp_sch_2Y_SQ,xw) 
     543        yw = tmp_sch_2Y_PQ * tmp_sch_2Y_SQ 
     544        yw *= w[0] 
     545        yw += w[9] 
     546         
     547        //cleanup waves 
     548//      Killwaves/Z form_sch_2Y,struct_sch_2Y 
     549         
     550        return (0) 
     551End 
     552 
    443553 
    444554 
     
    479589//      the name of your unsmeared model (AAO) is the first argument 
    480590        Smear_Model_20(SchulzSpheres_SHS,s.coefW,s.xW,s.yW,s.resW) 
     591 
     592        return(0) 
     593End 
     594 
     595// this is all there is to the smeared calculation! 
     596Function SmearedSchulzSpheres_2Y(s) : FitFunc 
     597        Struct ResSmearAAOStruct &s 
     598 
     599//      the name of your unsmeared model (AAO) is the first argument 
     600        Smear_Model_20(SchulzSpheres_2Y,s.coefW,s.xW,s.yW,s.resW) 
    481601 
    482602        return(0) 
     
    582702        return (0) 
    583703End 
     704 
     705//wrapper to calculate the smeared model as an AAO-Struct 
     706// fills the struct and calls the ususal function with the STRUCT parameter 
     707// 
     708// used only for the dependency, not for fitting 
     709// 
     710Function fSmearedSchulzSpheres_2Y(coefW,yW,xW) 
     711        Wave coefW,yW,xW 
     712         
     713        String str = getWavesDataFolder(yW,0) 
     714        String DF="root:"+str+":" 
     715         
     716        WAVE resW = $(DF+str+"_res") 
     717         
     718        STRUCT ResSmearAAOStruct fs 
     719        WAVE fs.coefW = coefW    
     720        WAVE fs.yW = yW 
     721        WAVE fs.xW = xW 
     722        WAVE fs.resW = resW 
     723         
     724        Variable err 
     725        err = SmearedSchulzSpheres_2Y(fs) 
     726         
     727        return (0) 
     728End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/NewModels_2009/FuzzySpheres_Sq_v40.ipf

    r682 r774  
    3030#include "SquareWellStruct_v40" 
    3131#include "StickyHardSphereStruct_v40" 
     32#include "Two_Yukawa_v40" 
    3233 
    3334Proc PlotFuzzySphere_HS(num,qmin,qmax) 
     
    472473End 
    473474 
     475//two yukawa 
     476Proc PlotFuzzySphere_2Y(num,qmin,qmax) 
     477        Variable num=128,qmin=0.001,qmax=0.7 
     478        Prompt num "Enter number of data points for model: " 
     479        Prompt qmin "Enter minimum q-value (A^-1) for model: " 
     480        Prompt qmax "Enter maximum q-value (A^-1) for model: " 
     481         
     482        Make/O/D/N=(num) xwave_fuzz_2Y,ywave_fuzz_2Y 
     483        xwave_fuzz_2Y = alog( log(qmin) + x*((log(qmax)-log(qmin))/num) ) 
     484        Make/O/D coef_fuzz_2Y = {0.01,60,0.2,10,1e-6,3e-6,1,50,6,10,-1,2,0.001} 
     485        make/O/T parameters_fuzz_2Y = {"Volume Fraction (scale)","mean radius (A)","polydisp (sig/avg)","interface thickness (A)","SLD sphere (A-2)","SLD solvent (A-2)","Lorentz Scale","Lorentz length","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1 sr-1)"} 
     486        Edit parameters_fuzz_2Y,coef_fuzz_2Y 
     487         
     488        Variable/G root:g_fuzz_2Y 
     489        g_fuzz_2Y := FuzzySphere_2Y(coef_fuzz_2Y,ywave_fuzz_2Y,xwave_fuzz_2Y) 
     490        Display ywave_fuzz_2Y vs xwave_fuzz_2Y 
     491        ModifyGraph log=1,marker=29,msize=2,mode=4 
     492        Label bottom "q (A\\S-1\\M)" 
     493        Label left "Intensity (cm\\S-1\\M)" 
     494        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     495         
     496        AddModelToStrings("FuzzySphere_2Y","coef_fuzz_2Y","parameters_fuzz_2Y","fuzz_2Y") 
     497End 
     498 
     499// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
     500Proc PlotSmearedFuzzySphere_2Y(str)                                                              
     501        String str 
     502        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     503         
     504        // if any of the resolution waves are missing => abort 
     505        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
     506                Abort 
     507        endif 
     508         
     509        SetDataFolder $("root:"+str) 
     510         
     511        // Setup parameter table for model function 
     512        Make/O/D smear_coef_fuzz_2Y = {0.01,60,0.2,10,1e-6,3e-6,1,50,6,10,-1,2,0.001}                                    
     513        make/o/t smear_parameters_fuzz_2Y = {"Volume Fraction (scale)","mean radius (A)","polydisp (sig/avg)","interface thickness (A)","SLD sphere (A-2)","SLD solvent (A-2)","Lorentz Scale","Lorentz length","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1 sr-1)"}     
     514        Edit smear_parameters_fuzz_2Y,smear_coef_fuzz_2Y                                         
     515         
     516        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
     517        // make extra copy of experimental q-values for easy plotting 
     518        Duplicate/O $(str+"_q") smeared_fuzz_2Y,smeared_qvals                            
     519        SetScale d,0,0,"1/cm",smeared_fuzz_2Y                                                    
     520                                         
     521        Variable/G gs_fuzz_2Y=0 
     522        gs_fuzz_2Y := fSmearedFuzzySphere_2Y(smear_coef_fuzz_2Y,smeared_fuzz_2Y,smeared_qvals)  //this wrapper fills the STRUCT 
     523         
     524        Display smeared_fuzz_2Y vs smeared_qvals                                                                         
     525        ModifyGraph log=1,marker=29,msize=2,mode=4 
     526        Label bottom "q (A\\S-1\\M)" 
     527        Label left "Intensity (cm\\S-1\\M)" 
     528        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     529         
     530        SetDataFolder root: 
     531        AddModelToStrings("SmearedFuzzySphere_2Y","smear_coef_fuzz_2Y","smear_parameters_fuzz_2Y","fuzz_2Y") 
     532End 
     533 
     534 
     535 
     536Function FuzzySphere_2Y(w,yw,xw) : FitFunc 
     537        Wave w,yw,xw 
     538         
     539        Variable inten 
     540         
     541        //setup form factor coefficient wave 
     542        Make/O/D/N=9 form_fuzz_2Y 
     543        form_fuzz_2Y[0] = w[0]          // send the real volume fraction in here, so the scaling is done correctly 
     544        form_fuzz_2Y[1] = w[1] 
     545        form_fuzz_2Y[2] = w[2] 
     546        form_fuzz_2Y[3] = w[3] 
     547        form_fuzz_2Y[4] = w[4] 
     548        form_fuzz_2Y[5] = w[5] 
     549        form_fuzz_2Y[6] = w[6]                  // w[6] is  the Lorentzian scale 
     550        form_fuzz_2Y[7] = w[7] 
     551        form_fuzz_2Y[8] = 0 
     552         
     553        //calculate the diameter of the effective one-component sphere 
     554        Variable pd,diam,Vpoly,Ravg 
     555        pd = w[2] 
     556        Ravg = w[1] 
     557         
     558        Vpoly = (4*pi/3*Ravg^3)*(1+3*pd^2) 
     559        diam = (6*Vpoly/pi)^(1/3) 
     560         
     561         
     562        //setup structure factor coefficient wave 
     563        Make/O/D/N=6 struct_fuzz_2Y 
     564        struct_fuzz_2Y[0] = w[0] 
     565        struct_fuzz_2Y[1] = diam/2 
     566        struct_fuzz_2Y[2] = w[8] 
     567        struct_fuzz_2Y[3] = w[9] 
     568        struct_fuzz_2Y[4] = w[10] 
     569        struct_fuzz_2Y[5] = w[11] 
     570         
     571        //calculate each and combine 
     572        Duplicate/O xw tmp_fuzz_2Y_PQ,tmp_fuzz_2Y_SQ 
     573        FuzzySpheres(form_fuzz_2Y,tmp_fuzz_2Y_PQ,xw) 
     574 
     575        TwoYukawa(struct_fuzz_2Y,tmp_fuzz_2Y_SQ,xw) 
     576        yw = tmp_fuzz_2Y_PQ * tmp_fuzz_2Y_SQ 
     577         
     578//      yw *= w[0]              // scaling is done in FuzzySpheres 
     579        yw += w[12] 
     580         
     581        //cleanup waves 
     582//      Killwaves/Z form_fuzz_2Y,struct_fuzz_2Y 
     583         
     584        return (0) 
     585End 
    474586 
    475587 
     
    510622//      the name of your unsmeared model (AAO) is the first argument 
    511623        Smear_Model_20(FuzzySphere_SHS,s.coefW,s.xW,s.yW,s.resW) 
     624 
     625        return(0) 
     626End 
     627 
     628// this is all there is to the smeared calculation! 
     629Function SmearedFuzzySphere_2Y(s) : FitFunc 
     630        Struct ResSmearAAOStruct &s 
     631 
     632//      the name of your unsmeared model (AAO) is the first argument 
     633        Smear_Model_20(FuzzySphere_2Y,s.coefW,s.xW,s.yW,s.resW) 
    512634 
    513635        return(0) 
     
    613735        return (0) 
    614736End 
     737 
     738//wrapper to calculate the smeared model as an AAO-Struct 
     739// fills the struct and calls the ususal function with the STRUCT parameter 
     740// 
     741// used only for the dependency, not for fitting 
     742// 
     743Function fSmearedFuzzySphere_2Y(coefW,yW,xW) 
     744        Wave coefW,yW,xW 
     745         
     746        String str = getWavesDataFolder(yW,0) 
     747        String DF="root:"+str+":" 
     748         
     749        WAVE resW = $(DF+str+"_res") 
     750         
     751        STRUCT ResSmearAAOStruct fs 
     752        WAVE fs.coefW = coefW    
     753        WAVE fs.yW = yW 
     754        WAVE fs.xW = xW 
     755        WAVE fs.resW = resW 
     756         
     757        Variable err 
     758        err = SmearedFuzzySphere_2Y(fs) 
     759         
     760        return (0) 
     761End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/NewModels_2010/Raspberry_v40.ipf

    r772 r774  
    1010// Default parameters are for a 5000A hexadecane drop stabilized by 100A silica particles 
    1111// in D2O. The particles are 50% inserted into the interface (delta = 0) and surface coverage is 50% 
     12// 
     13// -- bumped the smearing calculation to use 76 points, since the model is often used with a very 
     14// large radius of the "large" sphere, causing unsightly oscillations at low Q. Polydispersity 
     15// of the large sphere takes care of this too. 
     16// 
    1217//////////////////////////////////////////////////// 
    1318 
     
    313318 
    314319//      the name of your unsmeared model (AAO) is the first argument 
    315         Smear_Model_20(Raspberry,s.coefW,s.xW,s.yW,s.resW) 
     320        Smear_Model_76(Raspberry,s.coefW,s.xW,s.yW,s.resW) 
    316321 
    317322        return(0) 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/OblateCoreShell_Sq_v40.ipf

    r570 r774  
    1111#include "SquareWellStruct_v40" 
    1212#include "StickyHardSphereStruct_v40" 
     13#include "Two_Yukawa_v40" 
    1314 
    1415Proc PlotOblate_HS(num,qmin,qmax) 
     
    427428End 
    428429 
     430//two yukawa 
     431Proc PlotOblate_2Y(num,qmin,qmax) 
     432        Variable num=128,qmin=0.001,qmax=0.7 
     433        Prompt num "Enter number of data points for model: " 
     434        Prompt qmin "Enter minimum q-value (A^-1) for model: " 
     435        Prompt qmax "Enter maximum q-value (A^-1) for model: " 
     436         
     437        Make/O/D/n=(num) xwave_OEF_2Y,ywave_OEF_2Y 
     438        xwave_OEF_2Y =  alog(log(qmin) + x*((log(qmax)-log(qmin))/num)) 
     439        Make/O/D coef_OEF_2Y = {0.01,100,50,110,60,1e-6,2e-6,6.3e-6,6,10,-1,2,0.0001} 
     440        make/o/t parameters_OEF_2Y = {"volume fraction","major core radius (A)","minor core radius (A)","major shell radius (A)","minor shell radius (A)","SLD core (A-2)","SLD shell (A-2)","SLD solvent (A^-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1)"} 
     441        Edit parameters_OEF_2Y,coef_OEF_2Y 
     442         
     443        Variable/G root:g_OEF_2Y 
     444        g_OEF_2Y := Oblate_2Y(coef_OEF_2Y,ywave_OEF_2Y,xwave_OEF_2Y) 
     445        Display ywave_OEF_2Y vs xwave_OEF_2Y 
     446        ModifyGraph log=1,marker=29,msize=2,mode=4 
     447        Label bottom "q (A\\S-1\\M)" 
     448        Label left "Intensity (cm\\S-1\\M)" 
     449 
     450        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     451         
     452        AddModelToStrings("Oblate_2Y","coef_OEF_2Y","parameters_OEF_2Y","OEF_2Y") 
     453End 
     454 
     455// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
     456Proc PlotSmearedOblate_2Y(str)                                                           
     457        String str 
     458        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     459         
     460        // if any of the resolution waves are missing => abort 
     461        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
     462                Abort 
     463        endif 
     464         
     465        SetDataFolder $("root:"+str) 
     466         
     467        // Setup parameter table for model function 
     468        Make/O/D smear_coef_OEF_2Y = {0.01,100,50,110,60,1e-6,2e-6,6.3e-6,6,10,-1,2,0.0001} 
     469        make/o/t smear_parameters_OEF_2Y = {"volume fraction","major core radius (A)","minor core radius (A)","major shell radius (A)","minor shell radius (A)","SLD core (A-2)","SLD shell (A-2)","SLD solvent (A^-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1)"} 
     470        Edit smear_parameters_OEF_2Y,smear_coef_OEF_2Y                                   
     471         
     472        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
     473        // make extra copy of experimental q-values for easy plotting 
     474        Duplicate/O $(str+"_q") smeared_OEF_2Y,smeared_qvals                             
     475        SetScale d,0,0,"1/cm",smeared_OEF_2Y                                                     
     476                                         
     477        Variable/G gs_OEF_2Y=0 
     478        gs_OEF_2Y := fSmearedOblate_2Y(smear_coef_OEF_2Y,smeared_OEF_2Y,smeared_qvals)  //this wrapper fills the STRUCT 
     479         
     480        Display smeared_OEF_2Y vs smeared_qvals                                                                  
     481        ModifyGraph log=1,marker=29,msize=2,mode=4 
     482        Label bottom "q (A\\S-1\\M)" 
     483        Label left "Intensity (cm\\S-1\\M)" 
     484 
     485        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     486         
     487        SetDataFolder root: 
     488        AddModelToStrings("SmearedOblate_2Y","smear_coef_OEF_2Y","smear_parameters_OEF_2Y","OEF_2Y") 
     489End 
     490         
     491 
     492Function Oblate_2Y(w,yw,xw) : FitFunc 
     493        Wave w,yw,xw 
     494         
     495        Variable inten,Ras,Rbs 
     496        Ras = w[4]      //Ras is the rotation axis, the minor axis for an oblate ellipsoid 
     497        Rbs = w[3] 
     498         
     499        //setup form factor coefficient wave 
     500        Make/O/D/N=9 form_OEF_2Y 
     501        form_OEF_2Y[0] = 1 
     502        form_OEF_2Y[1] = w[1] 
     503        form_OEF_2Y[2] = w[2] 
     504        form_OEF_2Y[3] = w[3] 
     505        form_OEF_2Y[4] = w[4] 
     506        form_OEF_2Y[5] = w[5] 
     507        form_OEF_2Y[6] = w[6] 
     508        form_OEF_2Y[7] = w[7] 
     509        form_OEF_2Y[8] = 0 
     510         
     511        //setup structure factor coefficient wave 
     512        Make/O/D/N=6 struct_OEF_2Y 
     513        struct_OEF_2Y[0] = w[0] 
     514        struct_OEF_2Y[1] = 0.5*DiamEllip(Ras,Rbs) 
     515        struct_OEF_2Y[2] = w[8] 
     516        struct_OEF_2Y[3] = w[9] 
     517        struct_OEF_2Y[4] = w[10] 
     518        struct_OEF_2Y[5] = w[11] 
     519         
     520        //calculate each and combine 
     521        Duplicate/O xw temp_OEF_2Y_PQ,temp_OEF_2Y_SQ            //make waves for the AAO 
     522        OblateForm(form_OEF_2Y,temp_OEF_2Y_PQ,xw) 
     523        TwoYukawa(struct_OEF_2Y,temp_OEF_2Y_SQ,xw) 
     524        yw = temp_OEF_2Y_PQ * temp_OEF_2Y_SQ 
     525        yw *= w[0] 
     526        yw += w[12] 
     527         
     528        //cleanup waves 
     529//      Killwaves/Z form_OEF_2Y,struct_OEF_2Y 
     530         
     531        return (0) 
     532End 
    429533 
    430534// this is all there is to the smeared calculation! 
     
    464568//      the name of your unsmeared model is the first argument 
    465569        Smear_Model_20(Oblate_SHS,s.coefW,s.xW,s.yW,s.resW) 
     570 
     571        return(0) 
     572End 
     573 
     574// this is all there is to the smeared calculation! 
     575Function SmearedOblate_2Y(s) :FitFunc 
     576        Struct ResSmearAAOStruct &s 
     577 
     578//      the name of your unsmeared model is the first argument 
     579        Smear_Model_20(Oblate_2Y,s.coefW,s.xW,s.yW,s.resW) 
    466580 
    467581        return(0) 
     
    567681        return (0) 
    568682End 
     683 
     684//wrapper to calculate the smeared model as an AAO-Struct 
     685// fills the struct and calls the ususal function with the STRUCT parameter 
     686// 
     687// used only for the dependency, not for fitting 
     688// 
     689Function fSmearedOblate_2Y(coefW,yW,xW) 
     690        Wave coefW,yW,xW 
     691         
     692        String str = getWavesDataFolder(yW,0) 
     693        String DF="root:"+str+":" 
     694         
     695        WAVE resW = $(DF+str+"_res") 
     696         
     697        STRUCT ResSmearAAOStruct fs 
     698        WAVE fs.coefW = coefW    
     699        WAVE fs.yW = yW 
     700        WAVE fs.xW = xW 
     701        WAVE fs.resW = resW 
     702         
     703        Variable err 
     704        err = SmearedOblate_2Y(fs) 
     705         
     706        return (0) 
     707End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/PolyCoreShellRatio_Sq_v40.ipf

    r570 r774  
    1010#include "SquareWellStruct_v40" 
    1111#include "StickyHardSphereStruct_v40" 
     12#include "Two_Yukawa_v40" 
    1213 
    1314Proc PlotPolyCSRatio_HS(num,qmin,qmax) 
     
    457458End 
    458459 
     460// two yukawa 
     461Proc PlotPolyCSRatio_2Y(num,qmin,qmax) 
     462        Variable num=256,qmin=0.001,qmax=0.7 
     463        Prompt num "Enter number of data points for model: " 
     464        Prompt qmin "Enter minimum q-value (A^-1) for model: " 
     465        Prompt qmax "Enter maximum q-value (A^-1) for model: " 
     466         
     467        Make/O/D/n=(num) xwave_PCR_2Y,ywave_PCR_2Y 
     468        xwave_PCR_2Y =  alog(log(qmin) + x*((log(qmax)-log(qmin))/num)) 
     469        Make/O/D coef_PCR_2Y = {0.1,60,10,0.1,1e-6,2e-6,6e-6,6,10,-1,2,0.0001} 
     470        make/o/t parameters_PCR_2Y = {"volume fraction","avg radius (A)","avg shell thickness (A)","overall polydispersity","SLD core (A-2)","SLD shell (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1)"} 
     471        Edit/K=1 parameters_PCR_2Y,coef_PCR_2Y 
     472         
     473        Variable/G root:g_PCR_2Y 
     474        g_PCR_2Y := PolyCSRatio_2Y(coef_PCR_2Y,ywave_PCR_2Y,xwave_PCR_2Y) 
     475        Display/K=1 ywave_PCR_2Y vs xwave_PCR_2Y 
     476        ModifyGraph log=1,marker=29,msize=2,mode=4 
     477        Label bottom "q (A\\S-1\\M)" 
     478        Label left "Intensity (cm\\S-1\\M)" 
     479 
     480        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     481         
     482        AddModelToStrings("PolyCSRatio_2Y","coef_PCR_2Y","parameters_PCR_2Y","PCR_2Y") 
     483End 
     484 
     485// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
     486Proc PlotSmearedPolyCSRatio_2Y(str)                                                              
     487        String str 
     488        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     489         
     490        // if any of the resolution waves are missing => abort 
     491        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
     492                Abort 
     493        endif 
     494         
     495        SetDataFolder $("root:"+str) 
     496         
     497        // Setup parameter table for model function 
     498        Make/O/D smear_coef_PCR_2Y = {0.1,60,10,0.1,1e-6,2e-6,6e-6,6,10,-1,2,0.0001} 
     499        make/o/t smear_parameters_PCR_2Y = {"volume fraction","avg radius (A)","avg shell thickness (A)","overall polydispersity","SLD core (A-2)","SLD shell (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1)"} 
     500        Edit smear_parameters_PCR_2Y,smear_coef_PCR_2Y                                   
     501         
     502        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
     503        // make extra copy of experimental q-values for easy plotting 
     504        Duplicate/O $(str+"_q") smeared_PCR_2Y,smeared_qvals                             
     505        SetScale d,0,0,"1/cm",smeared_PCR_2Y                                                     
     506                                         
     507        Variable/G gs_PCR_2Y=0 
     508        gs_PCR_2Y := fSmearedPolyCSRatio_2Y(smear_coef_PCR_2Y,smeared_PCR_2Y,smeared_qvals)     //this wrapper fills the STRUCT 
     509         
     510        Display smeared_PCR_2Y vs smeared_qvals                                                                  
     511        ModifyGraph log=1,marker=29,msize=2,mode=4 
     512        Label bottom "q (A\\S-1\\M)" 
     513        Label left "Intensity (cm\\S-1\\M)" 
     514 
     515        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     516         
     517        SetDataFolder root: 
     518        AddModelToStrings("SmearedPolyCSRatio_2Y","smear_coef_PCR_2Y","smear_parameters_PCR_2Y","PCR_2Y") 
     519End 
     520         
     521 
     522Function PolyCSRatio_2Y(w,yw,xw) : FitFunc 
     523        Wave w,yw,xw 
     524         
     525        Variable inten 
     526         
     527        //setup form factor coefficient wave 
     528        Make/O/D/N=8 form_PCR_2Y 
     529        form_PCR_2Y[0] = 1 
     530        form_PCR_2Y[1] = w[1] 
     531        form_PCR_2Y[2] = w[2] 
     532        form_PCR_2Y[3] = w[3] 
     533        form_PCR_2Y[4] = w[4] 
     534        form_PCR_2Y[5] = w[5] 
     535        form_PCR_2Y[6] = w[6] 
     536        form_PCR_2Y[7] = 0 
     537         
     538        //calculate the diameter of the effective one-component sphere 
     539        Variable pd,diam,zz,Vpoly,Ravg,thick 
     540        pd = w[3] 
     541        zz = (1/pd)^2 - 1 
     542        Ravg = w[1] 
     543        thick = w[2] 
     544         
     545        Vpoly = 4*pi/3*(Ravg+thick)^3*(zz+3)*(zz+2)/(zz+1)^2 
     546        diam = (6*Vpoly/pi)^(1/3) 
     547         
     548        //setup structure factor coefficient wave 
     549        Make/O/D/N=6 struct_PCR_2Y 
     550        struct_PCR_2Y[0] = w[0] 
     551        struct_PCR_2Y[1] = diam/2 
     552        struct_PCR_2Y[2] = w[7] 
     553        struct_PCR_2Y[3] = w[8] 
     554        struct_PCR_2Y[4] = w[9] 
     555        struct_PCR_2Y[5] = w[10] 
     556         
     557        //calculate each and combine 
     558        Duplicate/O xw temp_PCR_2Y_PQ,temp_PCR_2Y_SQ            //make waves for the AAO 
     559        PolyCoreShellRatio(form_PCR_2Y,temp_PCR_2Y_PQ,xw) 
     560        TwoYukawa(struct_PCR_2Y,temp_PCR_2Y_SQ,xw) 
     561        yw = temp_PCR_2Y_PQ * temp_PCR_2Y_SQ 
     562        yw *= w[0] 
     563        yw += w[11] 
     564         
     565        //cleanup waves 
     566//      Killwaves/Z form_PCR_2Y,struct_PCR_2Y 
     567         
     568        return (0) 
     569End 
    459570 
    460571 
     
    495606//      the name of your unsmeared model is the first argument 
    496607        Smear_Model_20(PolyCSRatio_SHS,s.coefW,s.xW,s.yW,s.resW) 
     608 
     609        return(0) 
     610End 
     611 
     612// this is all there is to the smeared calculation! 
     613Function SmearedPolyCSRatio_2Y(s) :FitFunc 
     614        Struct ResSmearAAOStruct &s 
     615 
     616//      the name of your unsmeared model is the first argument 
     617        Smear_Model_20(PolyCSRatio_2Y,s.coefW,s.xW,s.yW,s.resW) 
    497618 
    498619        return(0) 
     
    598719        return (0) 
    599720End 
     721 
     722//wrapper to calculate the smeared model as an AAO-Struct 
     723// fills the struct and calls the ususal function with the STRUCT parameter 
     724// 
     725// used only for the dependency, not for fitting 
     726// 
     727Function fSmearedPolyCSRatio_2Y(coefW,yW,xW) 
     728        Wave coefW,yW,xW 
     729         
     730        String str = getWavesDataFolder(yW,0) 
     731        String DF="root:"+str+":" 
     732         
     733        WAVE resW = $(DF+str+"_res") 
     734         
     735        STRUCT ResSmearAAOStruct fs 
     736        WAVE fs.coefW = coefW    
     737        WAVE fs.yW = yW 
     738        WAVE fs.xW = xW 
     739        WAVE fs.resW = resW 
     740         
     741        Variable err 
     742        err = SmearedPolyCSRatio_2Y(fs) 
     743         
     744        return (0) 
     745End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/PolyCore_Sq_v40.ipf

    r570 r774  
    1111#include "SquareWellStruct_v40" 
    1212#include "StickyHardSphereStruct_v40" 
     13#include "Two_Yukawa_v40" 
    1314 
    1415Proc PlotPolyCore_HS(num,qmin,qmax) 
     
    458459End 
    459460 
     461// two yukawa 
     462Proc PlotPolyCore_2Y(num,qmin,qmax) 
     463        Variable num=256,qmin=0.001,qmax=0.7 
     464        Prompt num "Enter number of data points for model: " 
     465        Prompt qmin "Enter minimum q-value (A^-1) for model: " 
     466        Prompt qmax "Enter maximum q-value (A^-1) for model: " 
     467         
     468        Make/O/D/n=(num) xwave_PCF_2Y,ywave_PCF_2Y 
     469        xwave_PCF_2Y = alog( log(qmin) + x*((log(qmax)-log(qmin))/num) ) 
     470        Make/O/D coef_PCF_2Y = {0.1,60,.2,10,1e-6,2e-6,3e-6,6,10,-1,2,0.0001} 
     471        make/o/t parameters_PCF_2Y = {"volume fraction","avg core rad (A)","core polydisp (0,1)","shell thickness (A)","SLD core (A-2)","SLD shell (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1)"} 
     472        Edit/K=1 parameters_PCF_2Y,coef_PCF_2Y 
     473        Variable/G root:g_PCF_2Y 
     474        g_PCF_2Y := PolyCore_2Y(coef_PCF_2Y,ywave_PCF_2Y,xwave_PCF_2Y) 
     475//      ywave_PCF_2Y := PolyCore_2Y(coef_PCF_2Y,xwave_PCF_2Y) 
     476        Display/K=1 ywave_PCF_2Y vs xwave_PCF_2Y 
     477        ModifyGraph log=1,marker=29,msize=2,mode=4 
     478        Label bottom "q (A\\S-1\\M)" 
     479        Label left "Intensity (cm\\S-1\\M)" 
     480 
     481        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     482         
     483        AddModelToStrings("PolyCore_2Y","coef_PCF_2Y","parameters_PCF_2Y","PCF_2Y") 
     484End 
     485 
     486// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
     487Proc PlotSmearedPolyCore_2Y(str)                                                                 
     488        String str 
     489        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     490         
     491        // if any of the resolution waves are missing => abort 
     492        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
     493                Abort 
     494        endif 
     495         
     496        SetDataFolder $("root:"+str) 
     497         
     498        // Setup parameter table for model function 
     499        Make/O/D smear_coef_PCF_2Y = {0.1,60,.2,10,1e-6,2e-6,3e-6,6,10,-1,2,0.0001} 
     500        make/o/t smear_parameters_PCF_2Y = {"volume fraction","avg core rad (A)","core polydisp (0,1)","shell thickness (A)","SLD core (A-2)","SLD shell (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1)"} 
     501        Edit smear_parameters_PCF_2Y,smear_coef_PCF_2Y                                   
     502         
     503        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
     504        // make extra copy of experimental q-values for easy plotting 
     505        Duplicate/O $(str+"_q") smeared_PCF_2Y,smeared_qvals                             
     506        SetScale d,0,0,"1/cm",smeared_PCF_2Y                                                     
     507                                         
     508        Variable/G gs_PCF_2Y=0 
     509        gs_PCF_2Y := fSmearedPolyCore_2Y(smear_coef_PCF_2Y,smeared_PCF_2Y,smeared_qvals)        //this wrapper fills the STRUCT 
     510         
     511        Display smeared_PCF_2Y vs smeared_qvals                                                                  
     512        ModifyGraph log=1,marker=29,msize=2,mode=4 
     513        Label bottom "q (A\\S-1\\M)" 
     514        Label left "Intensity (cm\\S-1\\M)" 
     515 
     516        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     517         
     518        SetDataFolder root: 
     519        AddModelToStrings("SmearedPolyCore_2Y","smear_coef_PCF_2Y","smear_parameters_PCF_2Y","PCF_2Y") 
     520End 
     521         
     522 
     523//AAO function 
     524Function PolyCore_2Y(w,yw,xw) : FitFunc 
     525        Wave w,yw,xw 
     526                 
     527        //setup form factor coefficient wave 
     528        Make/O/D/N=8 form_PCF_2Y 
     529        form_PCF_2Y[0] = 1 
     530        form_PCF_2Y[1] = w[1] 
     531        form_PCF_2Y[2] = w[2] 
     532        form_PCF_2Y[3] = w[3] 
     533        form_PCF_2Y[4] = w[4] 
     534        form_PCF_2Y[5] = w[5] 
     535        form_PCF_2Y[6] = w[6] 
     536        form_PCF_2Y[7] = 0 
     537         
     538        //calculate the diameter of the effective one-component sphere 
     539        Variable pd,diam,zz,Vpoly,Ravg,thick 
     540        pd = w[2] 
     541        zz = (1/pd)^2 - 1 
     542        Ravg = w[1] 
     543        thick = w[3] 
     544         
     545        Vpoly = 4*pi/3*(Ravg+thick)^3*(zz+3)*(zz+2)/(zz+1)^2 
     546        diam = (6*Vpoly/pi)^(1/3) 
     547         
     548         
     549        //setup structure factor coefficient wave 
     550        Make/O/D/N=6 struct_PCF_2Y 
     551        struct_PCF_2Y[0] = w[0] 
     552        struct_PCF_2Y[1] = diam/2 
     553        struct_PCF_2Y[2] = w[7] 
     554        struct_PCF_2Y[3] = w[8] 
     555        struct_PCF_2Y[4] = w[9] 
     556        struct_PCF_2Y[5] = w[10] 
     557         
     558        //calculate each and combine 
     559        Duplicate/O xw temp_PCF_2Y_PQ,temp_PCF_2Y_SQ            //make waves for the AAO 
     560        PolyCoreForm(form_PCF_2Y,temp_PCF_2Y_PQ,xw) 
     561        TwoYukawa(struct_PCF_2Y,temp_PCF_2Y_SQ,xw) 
     562        yw = temp_PCF_2Y_PQ*temp_PCF_2Y_SQ 
     563        yw *= w[0] 
     564        yw += w[11] 
     565         
     566        //cleanup waves 
     567//      Killwaves/Z form_PCF_2Y,struct_PCF_2Y 
     568         
     569        return (0) 
     570End 
    460571 
    461572// this is all there is to the smeared calculation! 
     
    495606//      the name of your unsmeared model is the first argument 
    496607        Smear_Model_20(PolyCore_SHS,s.coefW,s.xW,s.yW,s.resW) 
     608 
     609        return(0) 
     610End 
     611 
     612// this is all there is to the smeared calculation! 
     613Function SmearedPolyCore_2Y(s) :FitFunc 
     614        Struct ResSmearAAOStruct &s 
     615 
     616//      the name of your unsmeared model is the first argument 
     617        Smear_Model_20(PolyCore_2Y,s.coefW,s.xW,s.yW,s.resW) 
    497618 
    498619        return(0) 
     
    598719        return (0) 
    599720End 
     721 
     722//wrapper to calculate the smeared model as an AAO-Struct 
     723// fills the struct and calls the ususal function with the STRUCT parameter 
     724// 
     725// used only for the dependency, not for fitting 
     726// 
     727Function fSmearedPolyCore_2Y(coefW,yW,xW) 
     728        Wave coefW,yW,xW 
     729         
     730        String str = getWavesDataFolder(yW,0) 
     731        String DF="root:"+str+":" 
     732         
     733        WAVE resW = $(DF+str+"_res") 
     734         
     735        STRUCT ResSmearAAOStruct fs 
     736        WAVE fs.coefW = coefW    
     737        WAVE fs.yW = yW 
     738        WAVE fs.xW = xW 
     739        WAVE fs.resW = resW 
     740         
     741        Variable err 
     742        err = SmearedPolyCore_2Y(fs) 
     743         
     744        return (0) 
     745End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/PolyRectSphere_Sq_v40.ipf

    r570 r774  
    1010#include "SquareWellStruct_v40" 
    1111#include "StickyHardSphereStruct_v40" 
     12#include "Two_Yukawa_v40" 
    1213 
    1314Proc PlotPolyRectSphere_HS(num,qmin,qmax) 
     
    445446End 
    446447 
     448//two yukawa 
     449Proc PlotPolyRectSphere_2Y(num,qmin,qmax) 
     450        Variable num=256,qmin=0.001,qmax=0.7 
     451        Prompt num "Enter number of data points for model: " 
     452        Prompt qmin "Enter minimum q-value (A^-1) for model: " 
     453        Prompt qmax "Enter maximum q-value (A^-1) for model: " 
     454         
     455        Make/O/D/n=(num) xwave_RECT_2Y,ywave_RECT_2Y 
     456        xwave_RECT_2Y =  alog(log(qmin) + x*((log(qmax)-log(qmin))/num)) 
     457        Make/O/D coef_RECT_2Y = {0.1,60,0.1,1e-6,6.3e-6,6,10,-1,2,0.0001} 
     458        make/o/t parameters_RECT_2Y = {"volume fraction","avg radius (A)","polydispersity","SLD sphere (A^-2)","SLD solvent (A^-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1)"} 
     459        Edit/K=1 parameters_RECT_2Y,coef_RECT_2Y 
     460         
     461        Variable/G root:g_RECT_2Y 
     462        g_RECT_2Y := PolyRectSphere_2Y(coef_RECT_2Y,ywave_RECT_2Y,xwave_RECT_2Y) 
     463        Display/K=1 ywave_RECT_2Y vs xwave_RECT_2Y 
     464        ModifyGraph log=1,marker=29,msize=2,mode=4 
     465        Label bottom "q (A\\S-1\\M)" 
     466        Label left "Intensity (cm\\S-1\\M)" 
     467 
     468        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     469         
     470        AddModelToStrings("PolyRectSphere_2Y","coef_RECT_2Y","parameters_RECT_2Y","RECT_2Y") 
     471End 
     472 
     473// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
     474Proc PlotSmearedPolyRectSphere_2Y(str)                                                           
     475        String str 
     476        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     477         
     478        // if any of the resolution waves are missing => abort 
     479        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
     480                Abort 
     481        endif 
     482         
     483        SetDataFolder $("root:"+str) 
     484         
     485        // Setup parameter table for model function 
     486        Make/O/D smear_coef_RECT_2Y = {0.1,60,0.1,1e-6,6.3e-6,6,10,-1,2,0.0001} 
     487        make/o/t smear_parameters_RECT_2Y = {"volume fraction","avg radius (A)","polydispersity","SLD sphere (A^-2)","SLD solvent (A^-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1)"} 
     488        Edit smear_parameters_RECT_2Y,smear_coef_RECT_2Y                                         
     489         
     490        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
     491        // make extra copy of experimental q-values for easy plotting 
     492        Duplicate/O $(str+"_q") smeared_RECT_2Y,smeared_qvals                            
     493        SetScale d,0,0,"1/cm",smeared_RECT_2Y                                                    
     494                                         
     495        Variable/G gs_RECT_2Y=0 
     496        gs_RECT_2Y := fSmearedPolyRectSphere_2Y(smear_coef_RECT_2Y,smeared_RECT_2Y,smeared_qvals)       //this wrapper fills the STRUCT 
     497         
     498        Display smeared_RECT_2Y vs smeared_qvals                                                                         
     499        ModifyGraph log=1,marker=29,msize=2,mode=4 
     500        Label bottom "q (A\\S-1\\M)" 
     501        Label left "Intensity (cm\\S-1\\M)" 
     502 
     503        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     504         
     505        SetDataFolder root: 
     506        AddModelToStrings("SmearedPolyRectSphere_2Y","smear_coef_RECT_2Y","smear_parameters_RECT_2Y","RECT_2Y") 
     507End 
     508         
     509 
     510Function PolyRectSphere_2Y(w,yw,xw) : FitFunc 
     511        Wave w,yw,xw 
     512         
     513        Variable inten 
     514         
     515        //setup form factor coefficient wave 
     516        Make/O/D/N=6 form_RECT_2Y 
     517        form_RECT_2Y[0] = 1 
     518        form_RECT_2Y[1] = w[1] 
     519        form_RECT_2Y[2] = w[2] 
     520        form_RECT_2Y[3] = w[3] 
     521        form_RECT_2Y[4] = w[4] 
     522        form_RECT_2Y[5] = 0 
     523         
     524        //calculate the diameter of the effective one-component sphere 
     525        Variable pd,diam,zz,Vpoly,Ravg 
     526        pd = w[2] 
     527        zz = (1/pd)^2 - 1 
     528        Ravg = w[1]             // <R^3> = Ravg^3*(1+3*pd^2) 
     529         
     530        Vpoly = 4*pi/3*Ravg^3*(1+3*pd^2) 
     531        diam = (6*Vpoly/pi)^(1/3) 
     532         
     533        //setup structure factor coefficient wave 
     534        Make/O/D/N=6 struct_RECT_2Y 
     535        struct_RECT_2Y[0] = w[0] 
     536        struct_RECT_2Y[1] = diam/2 
     537        struct_RECT_2Y[2] = w[5] 
     538        struct_RECT_2Y[3] = w[6] 
     539        struct_RECT_2Y[4] = w[7] 
     540        struct_RECT_2Y[5] = w[8] 
     541         
     542        //calculate each and combine 
     543        Duplicate/O xw temp_RECT_2Y_PQ,temp_RECT_2Y_SQ          //make waves for the AAO 
     544        PolyRectSpheres(form_RECT_2Y,temp_RECT_2Y_PQ,xw) 
     545        TwoYukawa(struct_RECT_2Y,temp_RECT_2Y_SQ,xw) 
     546        yw = temp_RECT_2Y_PQ * temp_RECT_2Y_SQ 
     547        yw *= w[0] 
     548        yw += w[9] 
     549         
     550        //cleanup waves 
     551//      Killwaves/Z form_RECT_2Y,struct_RECT_2Y 
     552         
     553        return (0) 
     554End 
    447555 
    448556 
     
    486594        return(0) 
    487595End 
     596 
     597// this is all there is to the smeared calculation! 
     598Function SmearedPolyRectSphere_2Y(s) :FitFunc 
     599        Struct ResSmearAAOStruct &s 
     600 
     601//      the name of your unsmeared model is the first argument 
     602        Smear_Model_20(PolyRectSphere_2Y,s.coefW,s.xW,s.yW,s.resW) 
     603 
     604        return(0) 
     605End 
     606 
    488607 
    489608//wrapper to calculate the smeared model as an AAO-Struct 
     
    586705        return (0) 
    587706End 
     707 
     708//wrapper to calculate the smeared model as an AAO-Struct 
     709// fills the struct and calls the ususal function with the STRUCT parameter 
     710// 
     711// used only for the dependency, not for fitting 
     712// 
     713Function fSmearedPolyRectSphere_2Y(coefW,yW,xW) 
     714        Wave coefW,yW,xW 
     715         
     716        String str = getWavesDataFolder(yW,0) 
     717        String DF="root:"+str+":" 
     718         
     719        WAVE resW = $(DF+str+"_res") 
     720         
     721        STRUCT ResSmearAAOStruct fs 
     722        WAVE fs.coefW = coefW    
     723        WAVE fs.yW = yW 
     724        WAVE fs.xW = xW 
     725        WAVE fs.resW = resW 
     726         
     727        Variable err 
     728        err = SmearedPolyRectSphere_2Y(fs) 
     729         
     730        return (0) 
     731End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/ProlateCoreShell_Sq_v40.ipf

    r570 r774  
    1010#include "SquareWellStruct_v40" 
    1111#include "StickyHardSphereStruct_v40" 
     12#include "Two_Yukawa_v40" 
    1213 
    1314Proc PlotProlate_HS(num,qmin,qmax) 
     
    426427End 
    427428 
     429// two yukawa 
     430Proc PlotProlate_2Y(num,qmin,qmax) 
     431        Variable num=128,qmin=0.001,qmax=0.7 
     432        Prompt num "Enter number of data points for model: " 
     433        Prompt qmin "Enter minimum q-value (A^-1) for model: " 
     434        Prompt qmax "Enter maximum q-value (A^-1) for model: " 
     435         
     436        Make/O/D/n=(num) xwave_PEF_2Y,ywave_PEF_2Y 
     437        xwave_PEF_2Y =  alog(log(qmin) + x*((log(qmax)-log(qmin))/num)) 
     438        Make/O/D coef_PEF_2Y = {0.01,100,50,110,60,1e-6,2e-6,6.3e-6,6,10,-1,2,0.0001} 
     439        make/o/t parameters_PEF_2Y = {"volume fraction","major core radius (A)","minor core radius (A)","major shell radius (A)","minor shell radius (A)","SLD core (A-2)","SLD shell (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1)"} 
     440        Edit parameters_PEF_2Y,coef_PEF_2Y 
     441         
     442        Variable/G root:g_PEF_2Y 
     443        g_PEF_2Y := Prolate_2Y(coef_PEF_2Y,ywave_PEF_2Y,xwave_PEF_2Y) 
     444        Display ywave_PEF_2Y vs xwave_PEF_2Y 
     445        ModifyGraph log=1,marker=29,msize=2,mode=4 
     446        Label bottom "q (A\\S-1\\M)" 
     447        Label left "Intensity (cm\\S-1\\M)" 
     448 
     449        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     450         
     451        AddModelToStrings("Prolate_2Y","coef_PEF_2Y","parameters_PEF_2Y","PEF_2Y") 
     452End 
     453 
     454// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
     455Proc PlotSmearedProlate_2Y(str)                                                          
     456        String str 
     457        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     458         
     459        // if any of the resolution waves are missing => abort 
     460        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
     461                Abort 
     462        endif 
     463         
     464        SetDataFolder $("root:"+str) 
     465         
     466        // Setup parameter table for model function 
     467        Make/O/D smear_coef_PEF_2Y = {0.01,100,50,110,60,1e-6,2e-6,6.3e-6,6,10,-1,2,0.0001} 
     468        make/o/t smear_parameters_PEF_2Y = {"volume fraction","major core radius (A)","minor core radius (A)","major shell radius (A)","minor shell radius (A)","SLD core (A-2)","SLD shell (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkg (cm-1)"} 
     469        Edit smear_parameters_PEF_2Y,smear_coef_PEF_2Y                                   
     470         
     471        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
     472        // make extra copy of experimental q-values for easy plotting 
     473        Duplicate/O $(str+"_q") smeared_PEF_2Y,smeared_qvals                             
     474        SetScale d,0,0,"1/cm",smeared_PEF_2Y                                                     
     475                                         
     476        Variable/G gs_PEF_2Y=0 
     477        gs_PEF_2Y := fSmearedProlate_2Y(smear_coef_PEF_2Y,smeared_PEF_2Y,smeared_qvals) //this wrapper fills the STRUCT 
     478         
     479        Display smeared_PEF_2Y vs smeared_qvals                                                                  
     480        ModifyGraph log=1,marker=29,msize=2,mode=4 
     481        Label bottom "q (A\\S-1\\M)" 
     482        Label left "Intensity (cm\\S-1\\M)" 
     483 
     484        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     485         
     486        SetDataFolder root: 
     487        AddModelToStrings("SmearedProlate_2Y","smear_coef_PEF_2Y","smear_parameters_PEF_2Y","PEF_2Y") 
     488End 
     489         
     490 
     491Function Prolate_2Y(w,yw,xw) : FitFunc 
     492        Wave w,yw,xw 
     493         
     494        Variable inten,Ras,Rbs 
     495        Ras = w[3]      //Ras is the rotation axis 
     496        Rbs = w[4] 
     497         
     498        //setup form factor coefficient wave 
     499        Make/O/D/N=9 form_PEF_2Y 
     500        form_PEF_2Y[0] = 1 
     501        form_PEF_2Y[1] = w[1] 
     502        form_PEF_2Y[2] = w[2] 
     503        form_PEF_2Y[3] = w[3] 
     504        form_PEF_2Y[4] = w[4] 
     505        form_PEF_2Y[5] = w[5] 
     506        form_PEF_2Y[6] = w[6] 
     507        form_PEF_2Y[7] = w[7] 
     508        form_PEF_2Y[8] = 0 
     509         
     510        //setup structure factor coefficient wave 
     511        Make/O/D/N=6 struct_PEF_2Y 
     512        struct_PEF_2Y[0] = w[0] 
     513        struct_PEF_2Y[1] = 0.5*DiamEllip(Ras,Rbs) 
     514        struct_PEF_2Y[2] = w[8] 
     515        struct_PEF_2Y[3] = w[9] 
     516        struct_PEF_2Y[4] = w[10] 
     517        struct_PEF_2Y[5] = w[11] 
     518         
     519        //calculate each and combine 
     520        Duplicate/O xw temp_PEF_2Y_PQ,temp_PEF_2Y_SQ            //make waves for the AAO 
     521        ProlateForm(form_PEF_2Y,temp_PEF_2Y_PQ,xw) 
     522        TwoYukawa(struct_PEF_2Y,temp_PEF_2Y_SQ,xw) 
     523        yw = temp_PEF_2Y_PQ *temp_PEF_2Y_SQ 
     524        yw *= w[0] 
     525        yw += w[12] 
     526         
     527        //cleanup waves 
     528//      Killwaves/Z form_PEF_2Y,struct_PEF_2Y 
     529         
     530        return (yw) 
     531End 
    428532 
    429533// this is all there is to the smeared calculation! 
     
    463567//      the name of your unsmeared model is the first argument 
    464568        Smear_Model_20(Prolate_SHS,s.coefW,s.xW,s.yW,s.resW) 
     569 
     570        return(0) 
     571End 
     572 
     573// this is all there is to the smeared calculation! 
     574Function SmearedProlate_2Y(s) :FitFunc 
     575        Struct ResSmearAAOStruct &s 
     576 
     577//      the name of your unsmeared model is the first argument 
     578        Smear_Model_20(Prolate_2Y,s.coefW,s.xW,s.yW,s.resW) 
    465579 
    466580        return(0) 
     
    566680        return (0) 
    567681End 
     682 
     683//wrapper to calculate the smeared model as an AAO-Struct 
     684// fills the struct and calls the ususal function with the STRUCT parameter 
     685// 
     686// used only for the dependency, not for fitting 
     687// 
     688Function fSmearedProlate_2Y(coefW,yW,xW) 
     689        Wave coefW,yW,xW 
     690         
     691        String str = getWavesDataFolder(yW,0) 
     692        String DF="root:"+str+":" 
     693         
     694        WAVE resW = $(DF+str+"_res") 
     695         
     696        STRUCT ResSmearAAOStruct fs 
     697        WAVE fs.coefW = coefW    
     698        WAVE fs.yW = yW 
     699        WAVE fs.xW = xW 
     700        WAVE fs.resW = resW 
     701         
     702        Variable err 
     703        err = SmearedProlate_2Y(fs) 
     704         
     705        return (0) 
     706End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/Sphere_Sq_v40.ipf

    r570 r774  
    1010#include "SquareWellStruct_v40" 
    1111#include "StickyHardSphereStruct_v40" 
     12#include "Two_Yukawa_v40" 
    1213 
    1314Proc PlotSphere_HS(num,qmin,qmax)                                                
     
    408409End 
    409410 
     411// two yukawa 
     412Proc PlotSphere_2Y(num,qmin,qmax)                                                
     413        Variable num=256,qmin=0.001,qmax=0.7 
     414        Prompt num "Enter number of data points for model: " 
     415        Prompt qmin "Enter minimum q-value (A^-1) for model: " 
     416        Prompt qmax "Enter maximum q-value (A^-1) for model: " 
     417         
     418        //make the normal model waves 
     419        Make/O/D/n=(num) xwave_S_2Y,ywave_S_2Y                                   
     420        xwave_S_2Y =  alog(log(qmin) + x*((log(qmax)-log(qmin))/num))                                    
     421        Make/O/D coef_S_2Y = {0.1,60,1e-6,6.3e-6,6,10,-1,2,0.01}                                                 
     422        make/o/t parameters_S_2Y = {"volume fraction","Radius (A)","SLD sphere (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkgd (cm-1)"}               
     423        Edit/K=1 parameters_S_2Y,coef_S_2Y 
     424        Variable/G root:g_S_2Y                                           
     425        g_S_2Y := Sphere_2Y(coef_S_2Y,ywave_S_2Y,xwave_S_2Y)                     
     426//      ywave_S_2Y := Sphere_2Y(coef_S_2Y,xwave_S_2Y)                    
     427        Display/K=1 ywave_S_2Y vs xwave_S_2Y                                                     
     428        ModifyGraph log=1,marker=29,msize=2,mode=4                       
     429        Label bottom "q (A\\S-1\\M)" 
     430        Label left "Intensity (cm\\S-1\\M)"                                      
     431 
     432        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     433         
     434        AddModelToStrings("Sphere_2Y","coef_S_2Y","parameters_S_2Y","S_2Y") 
     435End 
     436 
     437// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
     438Proc PlotSmearedSphere_2Y(str)                                                           
     439        String str 
     440        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     441         
     442        // if any of the resolution waves are missing => abort 
     443        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
     444                Abort 
     445        endif 
     446         
     447        SetDataFolder $("root:"+str) 
     448         
     449        // Setup parameter table for model function 
     450        Make/O/D smear_coef_S_2Y = {0.1,60,1e-6,6.3e-6,6,10,-1,2,0.01}                                           
     451        make/o/t smear_parameters_S_2Y = {"volume fraction","Radius (A)","SLD sphere (A-2)","SLD solvent (A-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","bkgd (cm-1)"}                 
     452        Edit smear_parameters_S_2Y,smear_coef_S_2Y                                       
     453         
     454        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
     455        // make extra copy of experimental q-values for easy plotting 
     456        Duplicate/O $(str+"_q") smeared_S_2Y,smeared_qvals                               
     457        SetScale d,0,0,"1/cm",smeared_S_2Y                                                       
     458                                         
     459        Variable/G gs_S_2Y=0 
     460        gs_S_2Y := fSmearedSphere_2Y(smear_coef_S_2Y,smeared_S_2Y,smeared_qvals)        //this wrapper fills the STRUCT 
     461         
     462        Display smeared_S_2Y vs smeared_qvals                                                                    
     463        ModifyGraph log=1,marker=29,msize=2,mode=4 
     464        Label bottom "q (A\\S-1\\M)" 
     465        Label left "Intensity (cm\\S-1\\M)" 
     466 
     467        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     468         
     469        SetDataFolder root: 
     470        AddModelToStrings("SmearedSphere_2Y","smear_coef_S_2Y","smear_parameters_S_2Y","S_2Y") 
     471End 
     472 
     473 
     474//AAO function 
     475Function Sphere_2Y(w,yw,xw) : FitFunc 
     476        Wave w,yw,xw 
     477                 
     478        //setup form factor coefficient wave 
     479        Make/O/D/N=5 form_S_2Y 
     480        form_S_2Y[0] = 1 
     481        form_S_2Y[1] = w[1] 
     482        form_S_2Y[2] = w[2] 
     483        form_S_2Y[3] = w[3] 
     484        form_S_2Y[4] = 0 
     485         
     486        //setup structure factor coefficient wave 
     487        Make/O/D/N=6 struct_S_2Y 
     488        struct_S_2Y[0] = w[0]   //phi 
     489        struct_S_2Y[1] = w[1]   //rad 
     490        struct_S_2Y[2] = w[4]   //K1 
     491        struct_S_2Y[3] = w[5]   //Z1 
     492        struct_S_2Y[4] = w[6]   //K2 
     493        struct_S_2Y[5] = w[7]   //Z2 
     494         
     495        //calculate each and combine 
     496        Duplicate/O xw temp_S_2Y_PQ,temp_S_2Y_SQ                //make waves for the AAO 
     497        SphereForm(form_S_2Y,temp_S_2Y_PQ,xw) 
     498        TwoYukawa(struct_S_2Y,temp_S_2Y_SQ,xw) 
     499        yw = temp_S_2Y_PQ * temp_S_2Y_SQ 
     500        yw *= w[0] 
     501        yw += w[8] 
     502         
     503        //cleanup waves 
     504        //Killwaves/Z form_S_2Y,struct_S_2Y 
     505         
     506        return (0) 
     507End 
     508 
     509 
    410510 
    411511 
     
    449549        return(0) 
    450550End 
     551 
     552// this is all there is to the smeared calculation! 
     553Function SmearedSphere_2Y(s) :FitFunc 
     554        Struct ResSmearAAOStruct &s 
     555 
     556//      the name of your unsmeared model is the first argument 
     557        Smear_Model_20(Sphere_2Y,s.coefW,s.xW,s.yW,s.resW) 
     558 
     559        return(0) 
     560End 
     561 
    451562 
    452563//wrapper to calculate the smeared model as an AAO-Struct 
     
    549660        return (0) 
    550661End 
     662 
     663//wrapper to calculate the smeared model as an AAO-Struct 
     664// fills the struct and calls the ususal function with the STRUCT parameter 
     665// 
     666// used only for the dependency, not for fitting 
     667// 
     668Function fSmearedSphere_2Y(coefW,yW,xW) 
     669        Wave coefW,yW,xW 
     670         
     671        String str = getWavesDataFolder(yW,0) 
     672        String DF="root:"+str+":" 
     673         
     674        WAVE resW = $(DF+str+"_res") 
     675         
     676        STRUCT ResSmearAAOStruct fs 
     677        WAVE fs.coefW = coefW    
     678        WAVE fs.yW = yW 
     679        WAVE fs.xW = xW 
     680        WAVE fs.resW = resW 
     681         
     682        Variable err 
     683        err = SmearedSphere_2Y(fs) 
     684         
     685        return (0) 
     686End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/UniformEllipsoid_Sq_v40.ipf

    r570 r774  
    1111#include "SquareWellStruct_v40" 
    1212#include "StickyHardSphereStruct_v40" 
     13#include "Two_Yukawa_v40" 
    1314 
    1415Proc PlotEllipsoid_HS(num,qmin,qmax) 
     
    414415End 
    415416 
    416  
     417//two yukawa 
     418Proc PlotEllipsoid_2Y(num,qmin,qmax) 
     419        Variable num=128,qmin=0.001,qmax=0.7 
     420        Prompt num "Enter number of data points for model: " 
     421        Prompt qmin "Enter minimum q-value (A^-1) for model: " 
     422        Prompt qmax "Enter maximum q-value (A^-1) for model: " 
     423         
     424        Make/O/D/n=(num) xwave_EOR_2Y,ywave_EOR_2Y 
     425        xwave_EOR_2Y =  alog(log(qmin) + x*((log(qmax)-log(qmin))/num)) 
     426        Make/O/D coef_EOR_2Y = {0.01,20.,400,1e-6,6.3e-6,6,10,-1,2,0.01} 
     427        make/o/t parameters_EOR_2Y = {"volume fraction","R(a) rotation axis (A)","R(b) (A)","SLD ellipsoid (A^-2)","SLD solvent (A^-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","incoh. bkg (cm^-1)"} 
     428        Edit parameters_EOR_2Y,coef_EOR_2Y 
     429         
     430        Variable/G root:g_EOR_2Y 
     431        g_EOR_2Y := Ellipsoid_2Y(coef_EOR_2Y,ywave_EOR_2Y,xwave_EOR_2Y) 
     432        Display ywave_EOR_2Y vs xwave_EOR_2Y 
     433        ModifyGraph log=1,marker=29,msize=2,mode=4 
     434        Label bottom "q (A\\S-1\\M)" 
     435        Label left "Intensity (cm\\S-1\\M)" 
     436        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     437         
     438        AddModelToStrings("Ellipsoid_2Y","coef_EOR_2Y","parameters_EOR_2Y","EOR_2Y") 
     439End 
     440 
     441// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
     442Proc PlotSmearedEllipsoid_2Y(str)                                                                
     443        String str 
     444        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     445         
     446        // if any of the resolution waves are missing => abort 
     447        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
     448                Abort 
     449        endif 
     450         
     451        SetDataFolder $("root:"+str) 
     452         
     453        // Setup parameter table for model function 
     454        Make/O/D smear_coef_EOR_2Y = {0.01,20.,400,1e-6,6.3e-6,6,10,-1,2,0.01} 
     455        make/o/t smear_parameters_EOR_2Y = {"volume fraction","R(a) rotation axis (A)","R(b) (A)","SLD ellipsoid (A^-2)","SLD solvent (A^-2)","scale, K1","charge, Z1","scale, K2","charge, Z2","incoh. bkg (cm^-1)"} 
     456        Edit smear_parameters_EOR_2Y,smear_coef_EOR_2Y                                   
     457         
     458        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
     459        // make extra copy of experimental q-values for easy plotting 
     460        Duplicate/O $(str+"_q") smeared_EOR_2Y,smeared_qvals                             
     461        SetScale d,0,0,"1/cm",smeared_EOR_2Y                                                     
     462                                         
     463        Variable/G gs_EOR_2Y=0 
     464        gs_EOR_2Y := fSmearedEllipsoid_2Y(smear_coef_EOR_2Y,smeared_EOR_2Y,smeared_qvals)       //this wrapper fills the STRUCT 
     465         
     466        Display smeared_EOR_2Y vs smeared_qvals                                                                  
     467        ModifyGraph log=1,marker=29,msize=2,mode=4 
     468        Label bottom "q (A\\S-1\\M)" 
     469        Label left "Intensity (cm\\S-1\\M)" 
     470 
     471        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     472         
     473        SetDataFolder root: 
     474        AddModelToStrings("SmearedEllipsoid_2Y","smear_coef_EOR_2Y","smear_parameters_EOR_2Y","EOR_2Y") 
     475End 
     476         
     477 
     478//AAO function 
     479Function Ellipsoid_2Y(w,yW,xW) : FitFunc 
     480        Wave w,yW,xW 
     481         
     482        Variable inten,aa,bb 
     483        aa=w[1] 
     484        bb=w[2] 
     485         
     486        //setup form factor coefficient wave 
     487        Make/O/D/N=6 form_EOR_2Y 
     488        form_EOR_2Y[0] = 1 
     489        form_EOR_2Y[1] = w[1] 
     490        form_EOR_2Y[2] = w[2] 
     491        form_EOR_2Y[3] = w[3] 
     492        form_EOR_2Y[4] = w[4] 
     493        form_EOR_2Y[5] = 0 
     494         
     495        //setup structure factor coefficient wave 
     496        Make/O/D/N=6 struct_EOR_2Y 
     497        struct_EOR_2Y[0] = w[0] 
     498        struct_EOR_2Y[1] = 0.5*DiamEllip(aa,bb) 
     499        struct_EOR_2Y[2] = w[5] 
     500        struct_EOR_2Y[3] = w[6] 
     501        struct_EOR_2Y[4] = w[7] 
     502        struct_EOR_2Y[5] = w[8] 
     503         
     504        //calculate each and combine 
     505        Duplicate/O xw, temp_EOR_2Y_PQ,temp_EOR_2Y_SQ 
     506        EllipsoidForm(form_EOR_2Y,temp_EOR_2Y_PQ,xW) 
     507        TwoYukawa(struct_EOR_2Y,temp_EOR_2Y_SQ,xW) 
     508        yw = temp_EOR_2Y_PQ * temp_EOR_2Y_SQ 
     509        yw *= w[0] 
     510        yw += w[9] 
     511         
     512        //cleanup waves 
     513//      Killwaves/Z form_EOR_2Y,struct_EOR_2Y 
     514         
     515        return (0) 
     516End 
    417517 
    418518// this is all there is to the smeared calculation! 
     
    452552//      the name of your unsmeared model is the first argument 
    453553        Smear_Model_20(Ellipsoid_SHS,s.coefW,s.xW,s.yW,s.resW) 
     554 
     555        return(0) 
     556End 
     557 
     558// this is all there is to the smeared calculation! 
     559Function SmearedEllipsoid_2Y(s) :FitFunc 
     560        Struct ResSmearAAOStruct &s 
     561 
     562//      the name of your unsmeared model is the first argument 
     563        Smear_Model_20(Ellipsoid_2Y,s.coefW,s.xW,s.yW,s.resW) 
    454564 
    455565        return(0) 
     
    555665        return (0) 
    556666End 
     667 
     668//wrapper to calculate the smeared model as an AAO-Struct 
     669// fills the struct and calls the ususal function with the STRUCT parameter 
     670// 
     671// used only for the dependency, not for fitting 
     672// 
     673Function fSmearedEllipsoid_2Y(coefW,yW,xW) 
     674        Wave coefW,yW,xW 
     675         
     676        String str = getWavesDataFolder(yW,0) 
     677        String DF="root:"+str+":" 
     678         
     679        WAVE resW = $(DF+str+"_res") 
     680         
     681        STRUCT ResSmearAAOStruct fs 
     682        WAVE fs.coefW = coefW    
     683        WAVE fs.yW = yW 
     684        WAVE fs.xW = xW 
     685        WAVE fs.resW = resW 
     686         
     687        Variable err 
     688        err = SmearedEllipsoid_2Y(fs) 
     689         
     690        return (0) 
     691End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Packages/ModelPicker/SANSModelPicker_v40.ipf

    r773 r774  
    205205  SANS_Model_List[62] = "StickyHardSphereStruct.ipf" 
    206206  SANS_Model_List[63] = "TriaxialEllipsoid.ipf" 
    207   SANS_Model_List[64] = "Vesicle_UL_and_Struct.ipf" 
     207  SANS_Model_List[64] = "Vesicle_UL_Sq.ipf" 
    208208  SANS_Model_List[65] = "Vesicle_UL.ipf" 
    209209  //2008 Models 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Packages/ModelPicker/SANS_Model_List.itx

    r773 r774  
    6666        "StickyHardSphereStruct.ipf" 
    6767        "TriaxialEllipsoid.ipf" 
    68         "Vesicle_UL_and_Struct.ipf" 
     68        "Vesicle_UL_Sq.ipf" 
    6969        "Vesicle_UL.ipf" 
    7070        "Core_and_NShells.ipf" 
Note: See TracChangeset for help on using the changeset viewer.