Changeset 165


Ignore:
Timestamp:
Sep 20, 2007 10:59:50 AM (15 years ago)
Author:
srkline
Message:

Added:
Report notebook generate/save
Feedback to panel
Macro to generate panel
Keyword=value bookkeeping for model=coef and coef=suffix correspondence
More logical interaction with popups.

File:
1 edited

Legend:

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

    r161 r165  
    77// 
    88// 
     9 
     10Macro OpenWrapperPanel() 
     11        Init_WrapperPanel() 
     12End 
     13 
     14Function Init_WrapperPanel() 
     15        DoWindow/F WrapperPanel 
     16        if(V_flag==0) 
     17                if(exists("root:coefKWStr")==0) 
     18                        String/G root:coefKWStr="" 
     19                endif 
     20                if(exists("root:suffixKWStr")==0) 
     21                        String/G root:suffixKWStr="" 
     22                endif 
     23                Execute "WrapperPanel()" 
     24        endif 
     25End 
     26 
    927//////// 
    1028// 
     
    1735// and put these in the table as needed 
    1836// 
    19 Window WrapperPanel() : Panel 
     37Window WrapperPanel() 
    2038        PauseUpdate; Silent 1           // building window... 
    2139        NewPanel /W=(459,44,1113,499)/N=wrapperPanel as "Curve Fit Setup" 
     
    2846        Button button_1,pos={270,57},size={80,20},proc=PlotModelFunction,title="Plot" 
    2947        Button button_2,pos={270,93},size={80,20},proc=AppendModelToTarget,title="Append" 
     48        Button button_3,pos={270,20},size={80,20},proc=W_LoadDataButtonProc,title="Load Data" 
    3049        PopupMenu popup_0,pos={30,21},size={218,20},title="Data Set" 
    3150        PopupMenu popup_0,mode=1,value= #"W_DataSetPopupList()" 
    3251        PopupMenu popup_1,pos={30,57},size={136,20},title="Function" 
    33         PopupMenu popup_1,mode=1,value= #"W_FunctionPopupList()" 
     52        PopupMenu popup_1,mode=1,value= #"W_FunctionPopupList()",proc=Function_PopMenuProc 
    3453        PopupMenu popup_2,pos={30,93},size={123,20},title="Coefficients" 
    3554        PopupMenu popup_2,mode=1,value= #"W_CoefPopupList()",proc=Coef_PopMenuProc 
     
    3756        CheckBox check_1,pos={400,42},size={74,14},title="Use Epsilon?",value= 0 
    3857        CheckBox check_2,pos={400,65},size={95,14},title="Use Constraints?",value= 0 
    39         CheckBox check_3,pos={280,24},size={72,14},title="From target",value= 0 
     58        CheckBox check_3,pos={544,18},size={72,14},title="From target",value= 0 
    4059        CheckBox check_4,pos={400,85},size={72,14},title="Report?",value= 0 
    41         CheckBox check_5,pos={414,100},size={72,14},title="Save it?",value= 0 
     60        CheckBox check_5,pos={414,103},size={72,14},title="Save it?",value= 0 
    4261        Edit/W=(20,174,634,435)/HOST=#   
    4362        ModifyTable width(Point)=0 
     
    4665EndMacro 
    4766 
     67//obvious use 
     68Function W_LoadDataButtonProc(ba) : ButtonControl 
     69        STRUCT WMButtonAction &ba 
     70 
     71        switch( ba.eventCode ) 
     72                case 2: // mouse up 
     73                        // click code here 
     74                        String  topGraph= WinName(0,1) 
     75                        if(strlen(topGraph) != 0) 
     76                                DoWindow/F $topGraph                    //so that the panel is not on top 
     77                        endif 
     78                        Execute "LoadSANSorUSANSData()" 
     79                        break 
     80        endswitch 
     81 
     82        return 0 
     83End 
     84 
    4885 
    4986// is there a simpler way to do this? 
     
    5289        String str=GetAList(4),tmp="",onTargetStr="" 
    5390        Variable ii 
    54         ControlInfo check_3 
     91        ControlInfo/W=WrapperPanel check_3 
    5592        if(V_Value==1)          //if "from target" checked 
    5693                //ther must be a better way to do this 
     
    121158End 
    122159 
     160 
    123161// show all the appropriate coefficient waves 
    124162//  
     
    127165// 
    128166// - or - restrict the coefficient list based on the model function 
    129 // 
     167// - new way, filter the possible values based on the data folder and function 
    130168Function/S W_CoefPopupList() 
    131         String list 
    132         setDataFolder root: 
    133         list = WaveList("coef*",";","") 
    134          
     169 
     170        String notPlotted="Please plot the function" 
     171        ControlInfo/W=wrapperpanel popup_1 
     172        String funcStr=S_Value 
     173        String coefStr=getFunctionCoef(funcStr) 
     174         
     175        if(cmpstr(coefStr,"")==0)               //no correspondence in the KW string 
     176                return(notPlotted) 
     177        endif 
     178         
     179         
     180        //found a coefficient wave - only two places to look 
     181        // is it in the root folder? 
     182        if(exists("root:"+coefStr) != 0) 
     183                return(coefStr) 
     184        endif 
     185         
     186        // is it in the data folder? 
    135187        ControlInfo/W=wrapperpanel popup_0 
    136         if(V_Value != 0)                //0== no items in menu 
    137                 if(DataFolderExists("root:"+S_Value)) 
    138                         SetDataFolder $("root:"+S_Value) 
    139                         list += WaveList("*coef*",";","") 
    140                 endif 
    141         endif 
    142          
    143         // tmp coefficients that aren't being cleaned up from somewhere... 
    144         list = RemoveFromList("temp_coef_1;temp_coef_2;", list  ,";") 
    145  
    146         if(strlen(list)==0) 
    147                 list = "No functions plotted" 
    148         endif 
    149         list = SortList(list) 
    150          
    151 //      Print itemsinlist(list,";") 
    152          
    153         setDataFolder root: 
    154         return(list) 
    155 End 
     188        String folderStr=S_Value 
     189        if(exists("root:"+folderStr+":"+coefStr) != 0) 
     190                return(coefStr) 
     191        endif 
     192 
     193        return(notPlotted) 
     194End 
     195 
     196// show all the appropriate coefficient waves 
     197//  
     198// also need to search the folder listed in "data set" popup 
     199// for smeared coefs 
     200// 
     201// - or - restrict the coefficient list based on the model function 
     202// 
     203// --old way 
     204//Function/S W_CoefPopupList() 
     205//      String list 
     206//      setDataFolder root: 
     207//      list = WaveList("coef*",";","") 
     208//       
     209//      ControlInfo/W=wrapperpanel popup_0 
     210//      if(V_Value != 0)                //0== no items in menu 
     211//              if(DataFolderExists("root:"+S_Value)) 
     212//                      SetDataFolder $("root:"+S_Value) 
     213//                      list += WaveList("*coef*",";","") 
     214//              endif 
     215//      endif 
     216//       
     217//      // tmp coefficients that aren't being cleaned up from somewhere... 
     218//      list = RemoveFromList("temp_coef_1;temp_coef_2;", list  ,";") 
     219// 
     220//      if(strlen(list)==0) 
     221//              list = "No functions plotted" 
     222//      endif 
     223//      list = SortList(list) 
     224//       
     225////    Print itemsinlist(list,";") 
     226//       
     227//      setDataFolder root: 
     228//      return(list) 
     229//End 
    156230 
    157231// if the coefficients are changed, then update the table 
     
    171245                        String popStr = pa.popStr 
    172246                        String suffix = getModelSuffix(popStr) 
    173                         ControlInfo popup_0 
     247                        ControlInfo/W=WrapperPanel popup_0 
    174248                        String folderStr=S_Value 
    175249                         
     250                        if(cmpstr(popStr,"Please plot the function")==0) 
     251                                Print "function not plotted" 
     252                                return(0) 
     253                        endif 
     254 
     255// this if/else/endif should not ever return an error alert      
     256// it should simply set the data folder properly         
    176257                        if(DataFolderExists("root:"+folderStr)) 
    177258                                SetDataFolder $("root:"+folderStr) 
     
    180261                                        SetDataFolder root:                              
    181262                                        if(!exists(popStr))             //this should be fine if the coef filter is working, but check anyhow 
    182                                                 DoAlert 0,"the coefficient and data sets do not match" 
     263                                                DoAlert 0,"the coefficient and data sets do not match (1)" 
    183264                                                return 0 
    184265                                        endif 
     
    188269                                SetDataFolder root:      
    189270                                if(!exists(popStr))             //this should be fine if the coef filter is working, but check anyhow 
    190                                         DoAlert 0,"the coefficient and data sets do not match" 
     271                                        DoAlert 0,"the coefficient and data sets do not match (2)" 
    191272                                        return 0 
    192273                                endif 
     
    196277                        Variable num=numpnts($popStr) 
    197278                        // make the necessary waves 
    198                         Make/O/D/N=(num) $("epsilon"+suffix),$("Hold"+suffix) 
    199                         Make/O/T/N=(num) $("LoLim"+suffix),$("HiLim"+suffix) 
     279                        Make/O/D/N=(num) $("epsilon_"+suffix),$("Hold_"+suffix) 
     280                        Make/O/T/N=(num) $("LoLim_"+suffix),$("HiLim_"+suffix) 
    200281                         
    201282                        // default epsilon values, sometimes needed for the fit 
    202                         Wave eps = $("epsilon"+suffix) 
     283                        Wave eps = $("epsilon_"+suffix) 
    203284                        Wave coef=$popStr 
    204285                        eps = abs(coef*1e-4) + 1e-10                    //default eps is proportional to the coefficients 
    205                         WAVE/T LoLim = $("LoLim"+suffix) 
    206                         WAVE/T HiLim = $("HiLim"+suffix) 
     286                        WAVE/T LoLim = $("LoLim_"+suffix) 
     287                        WAVE/T HiLim = $("HiLim_"+suffix) 
    207288                        LoLim = ""              //should have nicer way of keeping the previous values 
    208289                        HiLim = "" 
     
    216297                        String param = WaveList("*param*"+suffix, "", "TEXT:1," )               //this is *hopefully* one wave 
    217298                        AppendtoTable/W=wrapperPanel#T0 $param,$(popStr) 
    218                         AppendToTable/W=wrapperPanel#T0 $("Hold"+suffix),$("LoLim"+suffix),$("HiLim"+suffix),$("epsilon"+suffix) 
     299                        AppendToTable/W=wrapperPanel#T0 $("Hold_"+suffix),$("LoLim_"+suffix),$("HiLim_"+suffix),$("epsilon_"+suffix) 
    219300                        ModifyTable width(Point)=0 
    220301                         
     
    225306        return 0 
    226307End 
     308 
     309// if the Function is changed, then update the coef popup (if possible) and then the table (if possible) 
     310// 
     311// !! only respond to mouse up 
     312// 
     313Function Function_PopMenuProc(pa) : PopupMenuControl 
     314        STRUCT WMPopupAction &pa 
     315 
     316        switch( pa.eventCode ) 
     317                case 2: // mouse up 
     318                        Variable popNum = pa.popNum 
     319                        String funcStr = pa.popStr 
     320                        String coefStr = W_CoefPopupList() 
     321                         
     322//                      Print "coefStr = ",coefStr 
     323                         
     324                        ControlInfo/W=WrapperPanel popup_0 
     325                        String folderStr=S_Value 
     326                         
     327                        String listStr = W_CoefPopupList() 
     328                        Variable num=WhichListItem(coefStr, listStr, ";") 
     329                        String str=StringFromList(num, listStr  ,";") 
     330//                      print "str = ",str 
     331                        //set the item in the coef popup, and pop it 
     332                        PopupMenu popup_2 mode=(num+1) 
     333                         
     334                        Struct WMPopupAction ps 
     335                        ps.eventCode = 2                //fake mouse up 
     336                        ps.popStr = str 
     337                        Coef_PopMenuProc(ps) 
     338                         
     339                        SetDataFolder root: 
     340                        break 
     341        endswitch 
     342 
     343        return 0 
     344End 
     345 
    227346 
    228347// always pass this the coefficient string 
     
    231350// or "smear_coef_" 
    232351// 
     352Function/S getFunctionCoef(funcStr) 
     353        String funcStr 
     354 
     355        SVAR listStr=root:coefKWStr 
     356        String coefStr = StringByKey(funcStr, listStr  ,"=",";",0) 
     357 
     358        return(coefStr) 
     359End 
     360 
     361// always pass this the coefficient string 
     362// 
     363// either "coef_" 
     364// or "smear_coef_" 
     365// 
     366// does NOT return the leading "_" as part of the suffix 
    233367Function/S getModelSuffix(coefStr) 
    234368        String coefStr 
    235369 
    236         Variable pos,start=0 
    237 //      Variable pos=Strsearch(modelStr,"_",Inf,1)              //look backwards to find "_" - this fails for form+struct models 
    238  
    239         if(stringmatch(coefStr,"smear_*") == 1) 
    240                 start=7 //look forwards to find "_", skipping "smear_coe" if necessary 
    241         endif 
    242         pos=Strsearch(coefStr,"_",start,0) 
     370        SVAR listStr=root:suffixKWStr 
     371        String suffixStr = StringByKey(coefStr, listStr  ,"=",";",0) 
     372 
     373        return(suffixStr) 
     374//      Variable pos,start=0 
     375 
     376//      if(stringmatch(coefStr,"smear_*") == 1) 
     377//              start=7 //look forwards to find "_", skipping "smear_coe" if necessary 
     378//      endif 
     379//      pos=Strsearch(coefStr,"_",start,0) 
    243380        //Print start, pos 
    244         return(coefStr[pos,strlen(coefStr)-1]) 
     381//      return(coefStr[pos,strlen(coefStr)-1]) 
    245382End 
    246383 
     
    266403        switch( ba.eventCode ) 
    267404                case 2: // mouse up 
    268                         ControlInfo popup_0 
     405                        ControlInfo/W=WrapperPanel popup_0 
    269406                        folderStr=S_Value 
    270407                         
    271                         ControlInfo popup_1 
     408                        ControlInfo/W=WrapperPanel popup_1 
    272409                        funcStr=S_Value 
    273410                         
     
    283420                        //Print cmdStr 
    284421                        Execute cmdStr 
     422                         
     423                        //pop the function menu to set the proper coefficients 
     424                        DoWindow/F WrapperPanel 
     425                        STRUCT WMPopupAction pa 
     426                        pa.popStr = funcStr 
     427                        pa.eventcode = 2 
     428                        Function_PopMenuProc(pa) 
     429         
    285430                        break 
    286431        endswitch 
     
    300445        switch( ba.eventCode ) 
    301446                case 2: // mouse up                      
    302                         ControlInfo popup_2 
     447                        ControlInfo/W=WrapperPanel popup_2 
    303448                        coefStr=S_Value 
    304449                        suffix = getModelSuffix(coefStr) 
     
    307452                        if(stringmatch(coefStr, "smear*" )==1) 
    308453                                //it's a smeared model 
    309                                 ControlInfo popup_0 
     454                                ControlInfo/W=WrapperPanel popup_0 
    310455                                folderStr=S_Value 
    311456                                xWStr = "root:"+folderStr+":smeared_qvals" 
    312                                 ywStr = "root:"+folderStr+":smeared"+suffix 
     457                                ywStr = "root:"+folderStr+":smeared_"+suffix 
    313458                        else 
    314459                                // it's not, so it's in the root folder 
    315                                 xWStr = "xwave"+suffix 
    316                                 yWStr = "ywave"+suffix 
    317                         endif 
    318                          
    319                         Wave yw = $yWStr 
    320                         Wave xw = $xWStr 
    321                         AppendtoGraph yw vs xw 
     460                                xWStr = "xwave_"+suffix 
     461                                yWStr = "ywave_"+suffix 
     462                        endif 
     463                         
     464                        Wave/Z yw = $yWStr 
     465                        Wave/Z xw = $xWStr 
     466                        if(WaveExists(yw) && WaveExists(xw)) 
     467                                AppendtoGraph yw vs xw 
     468                        else 
     469                                DoAlert 0,"The selected model has not been plotted for the selected data set." 
     470                        endif 
    322471                        break 
    323472        endswitch 
     
    336485        switch( ba.eventCode ) 
    337486                case 2: // mouse up 
    338                         ControlInfo popup_0 
     487                        ControlInfo/W=WrapperPanel popup_0 
    339488                        folderStr=S_Value 
    340489                         
    341                         ControlInfo popup_1 
     490                        ControlInfo/W=WrapperPanel popup_1 
    342491                        funcStr=S_Value 
    343492                         
    344                         ControlInfo popup_2 
     493                        ControlInfo/W=WrapperPanel popup_2 
    345494                        coefStr=S_Value 
    346495                         
    347                         Controlinfo check_0 
     496                        ControlInfo/W=WrapperPanel check_0 
    348497                        useCursors=V_Value 
    349                         Controlinfo check_1 
     498                        ControlInfo/W=WrapperPanel check_1 
    350499                        useEps=V_Value 
    351                         Controlinfo check_2 
     500                        ControlInfo/W=WrapperPanel check_2 
    352501                        useConstr=V_Value 
     502                         
     503                        if(!CheckFunctionAndCoef(funcStr,coefStr)) 
     504                                DoAlert 0,"The coefficients and function type do not match. Please correct the selections in the popup menus." 
     505                                break 
     506                        endif 
    353507                         
    354508                        FitWrapper(folderStr,funcStr,coefStr,useCursors,useEps,useConstr) 
     
    370524End 
    371525 
     526Function CheckFunctionAndCoef(funcStr,coefStr) 
     527        String funcStr,coefStr 
     528         
     529        SVAR listStr=root:coefKWStr 
     530        String properCoefStr = StringByKey(funcStr, listStr  ,"=",";",0) 
     531        if(cmpstr(coefStr,properCoefStr)==0) 
     532                return(1)               //true, the coef is the correct match 
     533        endif 
     534        return(0)                       //false, wrong coef 
     535End 
    372536 
    373537///////////////////////////////// 
     
    396560                 
    397561        WAVE cw=$(coefStr)       
    398         Wave hold=$("Hold"+suffix) 
    399         Wave/T lolim=$("LoLim"+suffix) 
    400         Wave/T hilim=$("HiLim"+suffix) 
    401         Wave eps=$("epsilon"+suffix) 
     562        Wave hold=$("Hold_"+suffix) 
     563        Wave/T lolim=$("LoLim_"+suffix) 
     564        Wave/T hilim=$("HiLim_"+suffix) 
     565        Wave eps=$("epsilon_"+suffix) 
    402566         
    403567// fill a struct instance whether I need one or not 
     
    577741         
    578742        Variable yesSave=0,yesReport=0 
    579         ControlInfo check_4 
     743        ControlInfo/W=WrapperPanel check_4 
    580744        yesReport = V_Value 
    581         ControlInfo check_5 
     745        ControlInfo/W=WrapperPanel check_5 
    582746        yesSave = V_Value 
    583747         
Note: See TracChangeset for help on using the changeset viewer.