Ignore:
Timestamp:
Jul 26, 2007 1:33:58 PM (15 years ago)
Author:
srkline
Message:

Modifications to SumSANSModels to make it data folder aware

Modifications to SumSANSModels and SANSPicker to bury their folders in :myGlobals

New (3.01) template that uses these folder structures
Removed (3.00) template

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sans/Analysis/branches/ajj_23APR07/IGOR_Package_Files/Put in User Procedures/SANS_Models_v3.00/Packages/SumModel/SumSANSModels.ipf

    r42 r132  
    2525// selections. 
    2626// 
    27 // TO FIX: 
    28 // - add a help button to call the help file 
    29 // ...(and write the documentation) 
    30 // - must be thoroughly tested... 
     27// JUL 2007 
     28// - data folder aware 
     29// - AAO, structure aware 
     30// (smeared fitting still broken) 
     31// - created data folders are now buried in myGlobals 
    3132// 
    3233/////////////////////////////// 
     
    3738        DoWindow/F Sum_Model_Panel 
    3839        if(V_flag==0) 
    39                 NewDataFolder/O root:SumModel 
     40                if(!DataFolderExists("root:myGlobals")) 
     41                        NewDataFolder root:myGlobals 
     42                endif 
     43                NewDataFolder/O root:myGlobals:SumModel 
    4044                InitSMPGlobals() 
    4145                Sum_Model_Panel() 
     
    4650// 
    4751Function InitSMPGlobals() 
    48         Variable/G root:SumModel:gNParMod1=0 
    49         Variable/G root:SumModel:gNParMod2=0 
     52        Variable/G root:myGlobals:SumModel:gNParMod1=0 
     53        Variable/G root:myGlobals:SumModel:gNParMod2=0 
    5054end 
    5155 
     
    6771        GroupBox group1,pos={5,50},size={216,107},title="Function # 1" 
    6872        SetVariable setvar1,pos={14,128},size={140,15},title="# of Parameters" 
    69         SetVariable setvar1,limits={0,20,1},value= root:SumModel:gNParMod1 
     73        SetVariable setvar1,limits={0,20,1},value= root:myGlobals:SumModel:gNParMod1 
    7074        GroupBox group2,pos={5,171},size={216,107},title="Function # 2" 
    7175        SetVariable setvar2,pos={14,249},size={140,15},title="# of Parameters" 
    72         SetVariable setvar2,limits={0,20,1},value= root:SumModel:gNParMod2 
     76        SetVariable setvar2,limits={0,20,1},value= root:myGlobals:SumModel:gNParMod2 
    7377        Button button0,pos={36,299},size={150,20},proc=PlotSumButtonProc,title="Plot Summed Model" 
    7478        Button button1,pos={15,330},size={190,20},proc=PlotSmearedSumButtonProc,title="Plot Smeared Summed Model" 
     
    7680EndMacro 
    7781 
    78 // show the availabel models 
     82// show the available models 
    7983// but not the smeared versions 
     84// not the f* 
     85// not the *X XOPS 
     86// 
     87// KIND:10 should show only user-defined curve fitting functions 
     88// - not XOPs 
     89// - not other user-defined functions 
    8090Function/S SumModelPopupList() 
    81         String list 
    82         list = FunctionList("!Smear*",";","KIND:14,NINDVARS:1")         //don't show smeared models 
     91        String list,tmp 
     92        list = FunctionList("!Smear*",";","KIND:10")            //don't show smeared models 
     93         
    8394        list = RemoveFromList("Sum_Model", list  ,";") 
    84         list = RemoveFromList("SANSModel_proto", list  ,";") 
     95         
     96        tmp = FunctionList("*_proto",";","KIND:10")             //prototypes 
     97        list = RemoveFromList(tmp, list  ,";") 
     98 
     99        tmp = FunctionList("f*",";","KIND:10")          //point calculations 
     100        list = RemoveFromList(tmp, list  ,";") 
     101         
     102        // this should be a null string with KIND:10 
     103        tmp = FunctionList("*X",";","KIND:10")          //XOPs, also point calculations 
     104        list = RemoveFromList(tmp, list  ,";") 
     105         
    85106        return(list) 
    86107End 
     
    131152        //make the coefficients and parameters based on the panel values         
    132153        Variable nParam,n1,n2 
    133         n1 = root:SumModel:gNParMod1 
    134         n2 = root:SumModel:gNParMod2 
     154        n1 = root:myGlobals:SumModel:gNParMod1 
     155        n2 = root:myGlobals:SumModel:gNParMod2 
    135156        nParam = n1 + n2 
    136157        if(n1==0 || n2==0 || nparam==0) 
     
    138159        endif 
    139160        // n is ok, keep extra copy so changing panel will not affect functions 
    140         Variable/G root:SumModel:gN1=n1 
    141         Variable/G root:SumModel:gN2=n2 
     161        Variable/G root:myGlobals:SumModel:gN1=n1 
     162        Variable/G root:myGlobals:SumModel:gN2=n2 
    142163         
    143164        // these are the function names - make global so the fit function 
    144165        // can find them 
    145166        ControlInfo/W=Sum_Model_Panel popup1_0 
    146         String/G root:SumModel:gModelStr1=S_Value 
     167        String/G root:myGlobals:SumModel:gModelStr1=S_Value 
    147168        ControlInfo/W=Sum_Model_Panel popup2_0 
    148         String/G root:SumModel:gModelStr2=S_Value 
     169        String/G root:myGlobals:SumModel:gModelStr2=S_Value 
    149170         
    150171        //these are the coefficent waves - local only 
     
    164185        parameters_sum[n1,(n1+n2-1)] = $paramStr2[p-n1] 
    165186         
    166         Edit parameters_sum,coef_sum                                                             
    167         ywave_sum := Sum_Model(coef_sum,xwave_sum)                       
     187        Edit parameters_sum,coef_sum 
     188         
     189        Variable/G root:g_sum 
     190        g_sum := Sum_Model(coef_sum,ywave_sum,xwave_sum)                         
    168191        Display ywave_sum vs xwave_sum                                                   
    169192        ModifyGraph log=1,marker=29,msize=2,mode=4                       
     
    174197End 
    175198 
     199// - sets up a dependency to a wrapper, not the actual SmearedModelFunction 
    176200// the usual macro for plotting the smeared model, updated 
    177201// to take input from the panel 
    178 Proc PlotSmeared_Sum_Model()                                                             
    179  
    180         // if no gQvals wave, data must not have been loaded => abort 
    181         if(ResolutionWavesMissing()) 
     202// 
     203// - somewhat confusing as the unsmeared coefficients are in root: 
     204// and all of the newly created smeared waves and coefficients are in the  
     205// selected data folder 
     206// 
     207Proc PlotSmeared_Sum_Model(str)                                                          
     208        String str 
     209        Prompt str,"Pick the data folder containing the resolution you want",popup,getAList(4) 
     210         
     211        // if any of the resolution waves are missing => abort 
     212        if(ResolutionWavesMissingDF(str))               //updated to NOT use global strings (in GaussUtils) 
    182213                Abort 
    183214        endif 
     215         
     216        SetDataFolder $("root:"+str) 
    184217         
    185218        //make the coefficients and parameters based on the panel values         
    186219        Variable nParam,n1,n2 
    187         n1 = root:SumModel:gNParMod1 
    188         n2 = root:SumModel:gNParMod2 
     220        n1 = root:myGlobals:SumModel:gNParMod1 
     221        n2 = root:myGlobals:SumModel:gNParMod2 
    189222        nParam = n1 + n2 
    190223        if(n1==0 || n2==0 || nparam==0) 
     
    192225        endif 
    193226        // n is ok, keep extra copy so changing panel will not affect functions 
    194         Variable/G root:SumModel:gN1=n1 
    195         Variable/G root:SumModel:gN2=n2 
     227        Variable/G root:myGlobals:SumModel:gN1=n1 
     228        Variable/G root:myGlobals:SumModel:gN2=n2 
    196229         
    197230        // these are the function names - make global so the fit function 
    198231        // can find them 
    199232        ControlInfo/W=Sum_Model_Panel popup1_0 
    200         String/G root:SumModel:gModelStr1=S_Value 
     233        String/G root:myGlobals:SumModel:gModelStr1=S_Value 
    201234        ControlInfo/W=Sum_Model_Panel popup2_0 
    202         String/G root:SumModel:gModelStr2=S_Value 
    203          
    204         //these are the coefficent waves - local only 
     235        String/G root:myGlobals:SumModel:gModelStr2=S_Value 
     236         
     237        //these are the coefficent waves - local only, in the current data folder! 
    205238        ControlInfo/W=Sum_Model_Panel popup1_1 
    206         String/G root:coefStr1=S_Value 
     239        String/G coefStr1=S_Value 
    207240        ControlInfo/W=Sum_Model_Panel popup2_1 
    208         String/G root:coefStr2=S_Value 
     241        String/G coefStr2=S_Value 
    209242         
    210243        Make/O/D/N=(nParam) smear_coef_sum       
    211         smear_coef_sum[0,(n1-1)] = $coefStr1 
    212         smear_coef_sum[n1,(n1+n2-1)] = $coefStr2[p-n1] 
     244        smear_coef_sum[0,(n1-1)] = $("root:"+coefStr1) 
     245        smear_coef_sum[n1,(n1+n2-1)] = $("root:"+coefStr2)[p-n1] 
    213246                                                 
    214247        make/o/t/N=(nParam) smear_parameters_sum 
    215248        String paramStr1 = "parameters"+coefStr1[4,strlen(coefStr1)-1] 
    216249        String paramStr2 = "parameters"+coefStr2[4,strlen(coefStr2)-1] 
    217         smear_parameters_sum[0,(n1-1)] = $paramStr1 
    218         smear_parameters_sum[n1,(n1+n2-1)] = $paramStr2[p-n1] 
     250        smear_parameters_sum[0,(n1-1)] = $("root:"+paramStr1) 
     251        smear_parameters_sum[n1,(n1+n2-1)] = $("root:"+paramStr2)[p-n1] 
    219252                                 
    220253        Edit smear_parameters_sum,smear_coef_sum                                         
     
    222255        // output smeared intensity wave, dimensions are identical to experimental QSIG values 
    223256        // make extra copy of experimental q-values for easy plotting 
    224         Duplicate/O $gQvals smeared_sum,smeared_qvals                            
     257        Duplicate/O $(str+"_q") smeared_sum,smeared_qvals                                
    225258        SetScale d,0,0,"1/cm",smeared_sum                                                        
    226  
    227         smeared_sum := Smeared_Sum_Model(smear_coef_sum,$gQvals)                 
    228         Display smeared_sum vs $gQvals                                                                   
     259                                         
     260        Variable/G gs_sum=0 
     261        gs_sum := fSmeared_Sum_Model(smear_coef_sum,smeared_sum,smeared_qvals)  //this wrapper fills the STRUCT 
     262         
     263        Display smeared_sum vs $(str+"_q")                                                                       
    229264        ModifyGraph log=1,marker=29,msize=2,mode=4 
    230265        Label bottom "q (\\S-1\\M)" 
     
    232267        Legend 
    233268        AutoPositionWindow/M=1/R=$(WinName(0,1)) $WinName(0,2) 
     269         
     270        SetDataFolder root: 
    234271End 
    235272 
     
    238275// sum of the two selected models. 
    239276// 
    240 Function Sum_Model(w,x) :FitFunc 
    241         Wave w;Variable x 
    242          
    243         SVAR funcStr1=root:SumModel:gModelStr1          //string names of the functions, set by the macro 
    244         SVAR funcStr2=root:SumModel:gModelStr2 
    245         NVAR n1=root:SumModel:gN1                       //number of coefficients, set by the macro 
    246         NVAR n2=root:SumModel:gN2 
     277// this is an AAO function, there is no XOP version 
     278// since it should be the sum of two XOPs 
     279// 
     280Function Sum_Model(w,yw,xw) : FitFunc 
     281        Wave w,yw,xw 
     282         
     283        SVAR funcStr1=root:myGlobals:SumModel:gModelStr1                //string names of the functions, set by the macro 
     284        SVAR funcStr2=root:myGlobals:SumModel:gModelStr2 
     285        NVAR n1=root:myGlobals:SumModel:gN1                     //number of coefficients, set by the macro 
     286        NVAR n2=root:myGlobals:SumModel:gN2 
    247287         
    248288        Variable retVal 
    249289         
    250         FUNCREF SANSModel_proto f1 = $funcStr1          //convert str to FCN 
    251         FUNCREF SANSModel_proto f2 = $funcStr2 
     290        FUNCREF SANSModelAAO_proto f1 = $funcStr1               //convert str to FCN 
     291        FUNCREF SANSModelAAO_proto f2 = $funcStr2 
    252292        // make temporary coefficient waves for each model 
    253293        Make/O/D/N=(n1) temp_cw1 
     
    256296        temp_cw2 = w[p+n1] 
    257297         
    258         // calculate the sum 
    259         retVal = f1(temp_cw1,x) + f2(temp_cw2,x) 
    260         return(retVal) 
     298        // calculate the sum of each of the AAO functions 
     299        Duplicate/O xw tmp_sum_yw1,tmp_sum_yw2 
     300         
     301        f1(temp_cw1,tmp_sum_yw1,xw) 
     302        f2(temp_cw2,tmp_sum_yw2,xw) 
     303        yw = tmp_sum_yw1 + tmp_sum_yw2 
     304         
     305        return(0) 
    261306end 
    262307 
    263308// this is all there is to the smeared calculation! 
    264 Function Smeared_Sum_Model(w,x) :FitFunc 
    265         Wave w 
    266         Variable x 
    267          
    268         Variable ans 
    269         SVAR sq = gSig_Q 
    270         SVAR qb = gQ_bar 
    271         SVAR sh = gShadow 
    272         SVAR gQ = gQVals 
    273          
    274         //the name of your unsmeared model is the first argument 
    275         ans = Smear_Model_20(Sum_Model,$sq,$qb,$sh,$gQ,w,x) 
    276  
    277         return(ans) 
     309Function Smeared_Sum_Model(s) : FitFunc 
     310        Struct ResSmearAAOStruct &s 
     311 
     312//      the name of your unsmeared model (AAO) is the first argument 
     313        s.yW = Smear_Model_20(Sum_Model,s.coefW,s.xW,s.resW) 
     314 
     315        return(0) 
     316End 
     317 
     318//wrapper to calculate the smeared model as an AAO-Struct 
     319// fills the struct and calls the ususal function with the STRUCT parameter 
     320// 
     321// used only for the dependency, not for fitting 
     322// 
     323Function fSmeared_Sum_Model(coefW,yW,xW) 
     324        Wave coefW,yW,xW 
     325         
     326        String str = getWavesDataFolder(yW,0) 
     327        String DF="root:"+str+":" 
     328         
     329        WAVE resW = $(DF+str+"_res") 
     330         
     331        STRUCT ResSmearAAOStruct fs 
     332        WAVE fs.coefW = coefW    
     333        WAVE fs.yW = yW 
     334        WAVE fs.xW = xW 
     335        WAVE fs.resW = resW 
     336         
     337        Variable err 
     338        err = Smeared_Sum_Model(fs) 
     339         
     340        return (0) 
    278341End 
    279342 
Note: See TracChangeset for help on using the changeset viewer.