Changeset 132


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

Location:
sans/Analysis/branches/ajj_23APR07/IGOR_Package_Files
Files:
1 added
1 deleted
3 edited

Legend:

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

    r127 r132  
    903903        Wave w,yw,xw 
    904904         
    905         Print "in SANSModel_proto function" 
     905        Print "in SANSModelAAO_proto function" 
    906906        return(1) 
    907907end 
  • sans/Analysis/branches/ajj_23APR07/IGOR_Package_Files/Put in User Procedures/SANS_Models_v3.00/Packages/ModelPicker/SANSModelPicker.ipf

    r130 r132  
    5252// the list box in the panel 
    5353Proc Init_FileList() 
    54         //create the data folder 
    55         if(!DataFolderExists("root:FileList")) 
    56                 NewDataFolder/O/S root:FileList 
     54        //create the data folders  and globals 
     55        NewDataFolder/O root:myGlobals          //others will need this...make it just in case 
     56         
     57        if(!DataFolderExists("root:myGlobals:FileList")) 
     58                NewDataFolder/O/S root:myGlobals:FileList 
    5759                //create the waves 
    5860                Make/O/T/N=0 fileWave,includedFileWave 
     
    6567                // a switch for me to turn off file checking 
    6668                Variable/G checkForFiles=1              //set to true initially 
     69                checkForFiles = !(stringmatch(ParseFilePath(0,SpecialDirPath("Desktop",0,0,0),":",1,1),"s*ine"))                //zero for me 
    6770                 
    6871                //fill the list of procedures 
     
    7578                FileList_InsertButtonProc("")  
    7679                 
    77                 NewDataFolder/O root:myGlobals          //others will need this...make it just in case 
     80 
    7881                 
    7982                SetDataFolder root: 
     
    8689// if the wave SANS_Model_List does not exist 
    8790Proc ReadNewProcList() 
    88         KillWaves/Z root:FileList:SANS_Model_List               //kill the old list 
     91        KillWaves/Z root:myGlobals:FileList:SANS_Model_List             //kill the old list 
    8992        FileList_GetListButtonProc("") 
    9093End 
     
    101104// 
    102105Proc TypeNewModelList() 
    103         variable ii=0,num=numpnts(root:FileList:SANS_Model_List) 
     106        variable ii=0,num=numpnts(root:myGlobals:FileList:SANS_Model_List) 
    104107        printf "Make/O/T/N/=%d  SANS_Model_List\r\r",num 
    105108        do 
    106                 printf "SANS_Model_List[%d] = \"%s\"\r",ii,root:FileList:SANS_Model_List[ii] 
     109                printf "SANS_Model_List[%d] = \"%s\"\r",ii,root:myGlobals:FileList:SANS_Model_List[ii] 
    107110                ii+=1 
    108111        while(ii<num) 
     
    110113 
    111114Proc FileList_BuiltInList() 
    112         SetDataFolder root:FileList 
     115        SetDataFolder root:myGlobals:FileList 
    113116 
    114117////paste here... after deleting the old make statement and list 
     
    189192        String ProcedureName 
    190193         
    191         SetDataFolder root:FileList 
     194        SetDataFolder root:myGlobals:FileList 
    192195        Variable num 
    193196        num=numpnts(fileWave) 
     
    206209        Variable val 
    207210        // a switch for me to turn off file checking 
    208         root:FileList:checkForFiles=val //0==no check, 1=check   
     211        root:myGlobals:FileList:checkForFiles=val       //0==no check, 1=check   
    209212End 
    210213 
     
    223226        DoWindow/C Procedure_List 
    224227        ModifyPanel fixedSize=1 
    225         ListBox fileList,pos={4,3},size={200,100},listWave=root:FileList:fileWave 
    226         ListBox fileList,selWave=root:FileList:selWave,mode= 4 
     228        ListBox fileList,pos={4,3},size={200,100},listWave=root:myGlobals:FileList:fileWave 
     229        ListBox fileList,selWave=root:myGlobals:FileList:selWave,mode= 4 
    227230        ListBox inclList,pos={4,110},size={200,100} 
    228         ListBox inclList,listWave=root:FileList:includedFileWave 
    229         ListBox inclList,selWave=root:FileList:selToDelWave,mode= 4 
     231        ListBox inclList,listWave=root:myGlobals:FileList:includedFileWave 
     232        ListBox inclList,selWave=root:myGlobals:FileList:selToDelWave,mode= 4 
    230233        Button button0,pos={212,77},size={110,20},proc=FileList_InsertButtonProc,title="Include File(s)" 
    231234        Button button0,help={"Includes the selected procedures, functions appear under the SANS Models menu"} 
     
    257260        //loop through the selected files in the list... 
    258261        // 
    259         Wave/T fileWave=$"root:FileList:fileWave" 
    260         Wave sel=$"root:FileList:selWave" 
     262        Wave/T fileWave=$"root:myGlobals:FileList:fileWave" 
     263        Wave sel=$"root:myGlobals:FileList:selWave" 
    261264         
    262265        Variable num=numpnts(sel),ii 
    263266        String fname="" 
    264267         
    265 //      NVAR doCheck=root:FileList:checkForFiles 
     268//      NVAR doCheck=root:myGlobals:FileList:checkForFiles 
    266269        ii=num-1                //work bottom-up to not lose the index 
    267270        do 
     
    275278        //try the list of already-included files 
    276279        if(cmpstr(fname,"")==0) 
    277                 Wave/T inclFileWave=$"root:FileList:includedFileWave" 
    278                 Wave seltoDel=$"root:FileList:selToDelWave" 
     280                Wave/T inclFileWave=$"root:myGlobals:FileList:includedFileWave" 
     281                Wave seltoDel=$"root:myGlobals:FileList:selToDelWave" 
    279282                num=numpnts(seltoDel) 
    280283                ii=num-1                //work bottom-up to not lose the index 
     
    322325        String list="" 
    323326 
    324         if(Exists("root:FileList:SANS_Model_List") != 1) 
    325                 SetDataFolder root:FileList 
     327        if(Exists("root:myGlobals:FileList:SANS_Model_List") != 1) 
     328                SetDataFolder root:myGlobals:FileList 
    326329                LoadWave/A/T 
    327330                WAVE/T w=$(StringFromList(0,S_WaveNames,";")) 
    328331                SetDataFolder root: 
    329332        else 
    330                 WAVE/T w=$("root:FileList:SANS_Model_List") 
     333                WAVE/T w=$("root:myGlobals:FileList:SANS_Model_List") 
    331334        endif 
    332335         
    333336//      // convert the input wave to a semi-list 
    334 //      SVAR allFiles=root:FileList:allFiles 
     337//      SVAR allFiles=root:myGlobals:FileList:allFiles 
    335338//      allFiles=MP_TextWave2SemiList(w) 
    336339        list=MP_TextWave2SemiList(w) 
     
    341344 
    342345        // remove the items that have already been included 
    343         Wave/T includedFileWave=$"root:FileList:includedFileWave" 
     346        Wave/T includedFileWave=$"root:myGlobals:FileList:includedFileWave" 
    344347        Variable numInc=numpnts(includedFileWave) 
    345348        for(ii=0;ii<numInc;ii+=1) 
     
    348351        list = SortList(list,";",0) 
    349352        num=ItemsInList(list,";") 
    350         WAVE/T fileWave=$"root:FileList:fileWave" 
    351         WAVE selWave=$"root:FileList:selWave" 
     353        WAVE/T fileWave=$"root:myGlobals:FileList:fileWave" 
     354        WAVE selWave=$"root:myGlobals:FileList:selWave" 
    352355        Redimension/N=(num) fileWave            //make the waves the proper length 
    353356        Redimension/N=(num) selWave 
     
    381384 
    382385// new way, to catch all files in all subfolders 
    383         SVAR allFiles=root:FileList:allFiles 
     386        SVAR allFiles=root:myGlobals:FileList:allFiles 
    384387        allFiles=""             //clear the list 
    385388 
     
    400403        list = RemoveFromList("DemoLoader.ipf",list,";" ) 
    401404        // remove the items that have already been included 
    402         Wave/T includedFileWave=$"root:FileList:includedFileWave" 
     405        Wave/T includedFileWave=$"root:myGlobals:FileList:includedFileWave" 
    403406        Variable numInc=numpnts(includedFileWave) 
    404407        for(ii=0;ii<numInc;ii+=1) 
     
    407410        list = SortList(list,";",0) 
    408411        num=ItemsInList(list,";") 
    409         WAVE/T fileWave=$"root:FileList:fileWave" 
    410         WAVE selWave=$"root:FileList:selWave" 
     412        WAVE/T fileWave=$"root:myGlobals:FileList:fileWave" 
     413        WAVE selWave=$"root:myGlobals:FileList:selWave" 
    411414        Redimension/N=(num) fileWave            //make the waves the proper length 
    412415        Redimension/N=(num) selWave 
     
    422425 
    423426        Variable err=0 
    424         String/G root:FileList:allFiles="" 
    425         SVAR allFiles = root:FileList:allFiles 
     427        String/G root:myGlobals:FileList:allFiles="" 
     428        SVAR allFiles = root:myGlobals:FileList:allFiles 
    426429         
    427430        PathInfo Igor 
     
    446449         
    447450        //loop through the selected files in the list... 
    448         Wave/T fileWave=$"root:FileList:fileWave" 
    449         Wave sel=$"root:FileList:selWave" 
     451        Wave/T fileWave=$"root:myGlobals:FileList:fileWave" 
     452        Wave sel=$"root:myGlobals:FileList:selWave" 
    450453        //and adjust the included file lists 
    451         Wave/T includedFileWave=$"root:FileList:includedFileWave" 
    452         Wave selToDel=$"root:FileList:selToDelWave" 
     454        Wave/T includedFileWave=$"root:myGlobals:FileList:includedFileWave" 
     455        Wave selToDel=$"root:myGlobals:FileList:selToDelWave" 
    453456         
    454457        Variable numIncl=numpnts(includedFileWave) 
     
    461464        Execute/P "INSERTINCLUDE \"WriteModelData\"" 
    462465         
    463         NVAR doCheck=root:FileList:checkForFiles 
     466        NVAR doCheck=root:myGlobals:FileList:checkForFiles 
    464467         
    465468        ii=num-1                //work bottom-up to not lose the index 
     
    496499         
    497500        //loop through the selected files in the list... 
    498         Wave/T includedFileWave=$"root:FileList:includedFileWave" 
    499         Wave selToDel=$"root:FileList:selToDelWave" 
     501        Wave/T includedFileWave=$"root:myGlobals:FileList:includedFileWave" 
     502        Wave selToDel=$"root:myGlobals:FileList:selToDelWave" 
    500503        // and put the unwanted procedures back in the to-add list 
    501         Wave/T fileWave=$"root:FileList:fileWave" 
    502         Wave sel=$"root:FileList:selWave" 
     504        Wave/T fileWave=$"root:myGlobals:FileList:fileWave" 
     505        Wave sel=$"root:myGlobals:FileList:selWave" 
    503506         
    504507         
     
    564567// if root:MenuItemStr exists 
    565568Menu "SANS Models" 
    566         StrVarOrDefault("root:FileList:MenuItemStr_def","ModelPicker_Panel")//, RefreshMenu() 
     569        StrVarOrDefault("root:myGlobals:FileList:MenuItemStr_def","ModelPicker_Panel")//, RefreshMenu() 
    567570        SubMenu "Unsmeared Models" 
    568                 StrVarOrDefault("root:FileList:MenuItemStr1","ModelPicker_Panel") 
     571                StrVarOrDefault("root:myGlobals:FileList:MenuItemStr1","ModelPicker_Panel") 
    569572        End 
    570573        SubMenu "Smeared Models" 
    571                 StrVarOrDefault("root:FileList:MenuItemStr2","ModelPicker_Panel") 
     574                StrVarOrDefault("root:myGlobals:FileList:MenuItemStr2","ModelPicker_Panel") 
    572575        End 
    573576//      SubMenu "Models 3" 
     
    594597        list += MacroList("WriteM*",sep,"KIND:1,NPARAMS:4")             //data writer 
    595598        list += "-"+sep 
    596         String/G root:FileList:MenuItemStr_def = TrimListTo255(list) 
     599        String/G root:myGlobals:FileList:MenuItemStr_def = TrimListTo255(list) 
    597600         
    598601        list = "" 
     
    601604        list = RemoveFromList("FreezeModel", list ,";")                 // remove FreezeModel, it's not a model 
    602605        //      list += "-"+sep 
    603         String/G root:FileList:MenuItemStr1 = TrimListTo255(list) 
     606        String/G root:myGlobals:FileList:MenuItemStr1 = TrimListTo255(list) 
    604607 
    605608        list="" 
    606609        list += MacroList("PlotSmea*",sep,"KIND:1,NPARAMS:1")                   //smeared plot procedures 
    607610        list += MacroList("PlotSmea*",sep,"KIND:1,NPARAMS:2")                   //smeared RPA has 2 parameters 
    608         String/G root:FileList:MenuItemStr2 = TrimListTo255(list) 
     611        String/G root:myGlobals:FileList:MenuItemStr2 = TrimListTo255(list) 
    609612 
    610613        BuildMenu "SANS Models" 
     
    664667        String prefix 
    665668         
    666         SVAR allFiles=root:FileList:allFiles 
     669        SVAR allFiles=root:myGlobals:FileList:allFiles 
    667670        // Build a prefix (a number of tabs to indicate the folder level by indentation) 
    668671        prefix = "" 
  • 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.