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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 
Note: See TracChangeset for help on using the changeset viewer.