Changeset 603


Ignore:
Timestamp:
Nov 24, 2009 4:00:05 AM (13 years ago)
Author:
ajj
Message:

Start of a data management panel. Functions are defined but need guts filling in.

This will replace the subtract_1d panel.

Location:
sans/Dev/trunk/NCNR_User_Procedures/Common
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • sans/Dev/trunk/NCNR_User_Procedures/Common/DataSetHandling.ipf

    r602 r603  
    22 
    33// Functions and interfaces to manage datasets now that they are in data folders 
     4// Planned interface 
     5// - Panel to select/load data and then select operation 
    46// Planned functions: 
    5 // - Rename a data set 
    6 // - Duplicate a data set 
     7// - Rename a data set - AJJ Done Nov 2009 
     8// - Duplicate a data set - AJJ Done Nov 2009 
    79// - Subtract one data set from another 
    810// - Add one data set to another 
    911// - Divide data sets 
    1012// - Multiply data sets 
     13// - Save a data folder to file 
     14 
     15Window DataManagementPanel() 
     16        PauseUpdate; Silent 1           // building window... 
     17        NewPanel /W=(459,44,959,364)/N=wrapperPanel/K=1 as "Data Set Management" 
     18        ModifyPanel fixedSize=1 
     19 
     20        //Main bit of panel 
     21        GroupBox grpBox_0,pos={20,10},size={460,75} 
     22 
     23        Button DS1_button,pos={300,20},size={150,20},proc=DM_LoadDataSetProc,title="Load 1D Data Set 1" 
     24        PopupMenu DS1_popup,pos={30,21},size={318,20},title="Data Set 1",proc=DMDS_PopMenuProc 
     25        PopupMenu DS1_popup,mode=1,value= #"DM_DataSetPopupList()" 
     26 
     27        Button DS2_button,pos={300,50},size={150,20},proc=DM_LoadDataSetProc,title="Load 1D Data Set 2" 
     28        PopupMenu DS2_popup,pos={30,51},size={318,20},title="Data Set 2",proc=DMDS_PopMenuProc 
     29        PopupMenu DS2_popup,mode=1,value= #"DM_DataSetPopupList()" 
     30 
     31        //Default to disabled for second data set - only needed for arithmetic 
     32        Button DS2_button,disable=2 
     33        PopupMenu DS2_popup,disable=2 
     34 
     35        //Tabs 
     36        TabControl DSTabs,pos={20,90},size={460,200},tabLabel(0)="Management", proc=DSTabsProc 
     37        TabControl DSTabs,tablabel(1)="Arithmetic" 
     38        TabControl DSTabs,value=0 
     39 
     40        //Management Tab 
     41        Button DSTabItem_0a,title="Rename",pos={75,200},size={150,20} 
     42        Button DSTabItem_0b,title="Duplicate",pos={275,200},size={150,20} 
     43        Button DSTabItem_0c,title="Save",pos={75,240},size={150,20} 
     44        Button DSTabItem_0d,title="Unload",pos={275,240},size={150,20} 
     45        SetVariable DSTabItem_0e,title="Old Name",pos={50,120},size={400,20} 
     46        SetVariable DSTabItem_0e,fsize=12,value=_STR:"",noedit=2 
     47        SetVariable DSTabItem_0f,title="New Name (max 25 characters)",pos={50,150},size={400,20} 
     48        SetVariable DSTabItem_0f,fsize=12,value=_STR:"" 
     49 
     50EndMacro 
     51 
     52//Must follow naming scheme to match buttons to popups 
     53//"Name_button" goes with "Name_popup" 
     54Function DM_LoadDataSetProc(ba) : ButtonControl 
     55        STRUCT WMButtonAction &ba 
     56 
     57 
     58        switch( ba.eventCode ) 
     59                case 2: // mouse up 
     60                        // click code here 
     61                        String cmd = "A_LoadOneDDataWithName(\"\","+num2str(0)+")" 
     62                        Execute cmd 
     63                 
     64                        SVAR gLastFileName = root:packages:NIST:gLastFileName 
     65 
     66                        String windowName = ba.win 
     67                        String popupName = StringFromList(0,ba.ctrlName,"_")+"_popup" 
     68                         
     69                        ControlUpdate/W=$(windowName) $(popupName) 
     70                        //instead of a simple controlUpdate, better to pop the menu to make sure that the other menus follow 
     71                        // convoluted method to find the right item and pop the menu. 
     72 
     73                        String list,folderStr 
     74                        Variable num 
     75                        folderStr = CleanupName(gLastFileName,0) 
     76                        list = DM_DataSetPopupList() 
     77                        num=WhichListItem(folderStr,list,";",0,0) 
     78                        if(num != -1) 
     79                                PopupMenu $(popupName),mode=num+1,win=$(windowName) 
     80                                ControlUpdate/W=$(windowName) $(popupName) 
     81                                 
     82                                if (cmpstr(popupName,"DS1_popup") ==  0) 
     83                                        //send fake mouse action to popup to update old name if  
     84                                        Struct WMPopupAction pa 
     85                                        pa.eventCode = 2                //fake mouse up 
     86                                        pa.win = windowName 
     87                                        pa.ctrlName = "DS1_popup" 
     88                                        DMDS_PopMenuProc(pa) 
     89                                endif                    
     90                        endif 
     91                        break 
     92        endswitch 
     93         
     94        return 0 
     95End 
     96 
     97Function DMDS_PopMenuProc(pa) : PopupMenuControl 
     98        STRUCT WMPopupAction &pa 
     99         
     100        switch( pa.eventCode ) 
     101                case 2: // mouse up 
     102                        ControlInfo/W=$(pa.win) $(pa.ctrlName) 
     103                        SetVariable DSTabItem_0e,win=$(pa.win),value=_STR:S_Value 
     104         
     105                        SetDataFolder root:                      
     106                        break 
     107        endswitch 
     108 
     109        return 0 
     110End 
     111 
     112// is there a simpler way to do this? I don't think so. 
     113Function/S DM_DataSetPopupList() 
     114 
     115        String str=GetAList(4) 
     116 
     117        if(strlen(str)==0) 
     118                str = "No data loaded" 
     119        endif 
     120        str = SortList(str) 
     121         
     122        return(str) 
     123End 
     124 
     125Function/S DMGetDSName(dsNum) 
     126        Variable dsNum 
     127         
     128        String ctrlName 
     129        if (dsNum == 1) 
     130                ctrlName = "DS1_popup" 
     131        elseif (dsNum == 2) 
     132                ctrlName = "DS2_popup" 
     133        endif 
     134         
     135        ControlInfo/W=DataManagementPanel $(ctrlName) 
     136 
     137        Return S_Value 
     138 
     139End 
     140 
     141// function to control the drawing of buttons in the TabControl on the main panel 
     142// Naming scheme for the buttons MUST be strictly adhered to... else buttons will  
     143// appear in odd places... 
     144// all buttons are named MainButton_NA where N is the tab number and A is the letter denoting 
     145// the button's position on that particular tab. 
     146// in this way, buttons will always be drawn correctly.. 
     147// 
     148Function DSTabsProc(name,tab) 
     149        String name 
     150        Variable tab 
     151         
     152//      Print "name,number",name,tab 
     153        String ctrlList = ControlNameList("",";"),item="",nameStr="" 
     154        Variable num = ItemsinList(ctrlList,";"),ii,onTab 
     155        for(ii=0;ii<num;ii+=1) 
     156                //items all start w/"DSTabItem_" 
     157                item=StringFromList(ii, ctrlList ,";") 
     158                nameStr=item[0,9] 
     159                if(cmpstr(nameStr,"DSTabItem_")==0) 
     160                        onTab = str2num(item[10]) 
     161                        ControlInfo $item 
     162                        switch (V_flag) 
     163                                case 1: 
     164                                        Button $item,disable=(tab!=onTab) 
     165                                        break 
     166                                case 2: 
     167                                        CheckBox $item,disable=(tab!=onTab) 
     168                                        break 
     169                                case 3: 
     170                                        PopUpMenu       $item,disable=(tab!=onTab) 
     171                                        break 
     172                                case 5: 
     173                                        SetVariable     $item,disable=(tab!=onTab) 
     174                                        break 
     175                        endswitch 
     176                endif 
     177        endfor  
     178         
     179        //Deal with second data button 
     180        //Make sure this gets changed if the number of the Arithmetic tab changes 
     181        if (tab == 1) 
     182                Button DS2_button,disable=0 
     183                PopupMenu DS2_popup,disable=0 
     184        else 
     185                Button DS2_button,disable=2 
     186                PopupMenu DS2_popup,disable=2 
     187        endif 
     188End 
     189 
    11190 
    12191Function RenameDataSet(dataSetFolder, newName) 
     
    73252        endtry 
    74253End 
     254 
     255 
     256// Subtract Set2 From Set1 
     257// Use Result_I = Set1_I - f*Set2_I 
     258Function SubtractDataSets(set1Folder,set2Folder,set2Scale,resultName) 
     259        String set1Folder 
     260        String set2Folder 
     261        Variable set2Scale 
     262        String resultName 
     263 
     264        //Create folder for result 
     265         
     266        //Create result waves 
     267 
     268        //Do subtraction of I waves - including interpolation if necessary.  
     269        //Can we flag when interpolation was necessary? 
     270         
     271        //Generate correct result Q wave - including interpolation if necessary 
     272         
     273        //Calculate result error wave - can we produce corrected Q error?  
     274         
     275        //Generate history string to record what was done? 
     276 
     277End 
     278 
     279// Add Set2 to Set1 
     280// Use Result_I = Set1_I + f*Set2_I 
     281Function AddDataSets(set1Folder,set2Folder,set2Scale,resultName) 
     282        String set1Folder 
     283        String set2Folder 
     284        Variable set2Scale 
     285        String resultName 
     286 
     287        //Create folder for result 
     288         
     289        //Create result waves 
     290 
     291        //Do addition of I waves - including interpolation if necessary.  
     292        //Can we flag when interpolation was necessary? 
     293         
     294        //Generate correct result Q wave - including interpolation if necessary 
     295         
     296        //Calculate result error wave - can we produce corrected Q error?  
     297 
     298        //Generate history string to record what was done? 
     299 
     300End 
     301 
     302// Multiply Set1 by Set2 
     303// Use Result_I  = Set1_I * (f*Set2_I) 
     304Function MultiplyDataSets(set1Folder, set2Folder, set2Scale, resultName) 
     305        String set1Folder 
     306        String set2Folder 
     307        Variable set2Scale 
     308        String resultName 
     309 
     310        //Create folder for result 
     311         
     312        //Create result waves 
     313 
     314        //Do multiplcation of I waves - including interpolation if necessary.  
     315        //Can we flag when interpolation was necessary? 
     316         
     317        //Generate correct result Q wave - including interpolation if necessary 
     318         
     319        //Calculate result error wave - can we produce corrected Q error?  
     320 
     321        //Generate history string to record what was done? 
     322 
     323End 
     324 
     325// Divide Set1 by Set2 
     326// Use Result_I  = Set1_I / (f*Set2_I) 
     327Function DivideDataSets(set1Folder, set2Folder, set2Scale, resultName) 
     328        String set1Folder 
     329        String set2Folder 
     330        Variable set2Scale 
     331        String resultName 
     332 
     333        //Create folder for result 
     334         
     335        //Create result waves 
     336 
     337        //Do division of I waves - including interpolation if necessary.  
     338        //Can we flag when interpolation was necessary? 
     339         
     340        //Generate correct result Q wave - including interpolation if necessary 
     341         
     342        //Calculate result error wave - can we produce corrected Q error?  
     343         
     344        //Generate history string to record what was done? 
     345 
     346End 
     347 
     348Function SaveDataSetToFile(folderName) 
     349        String folderName 
     350 
     351        //Do saving of data file. 
     352 
     353        //Include history string to record what was done? 
     354 
     355End 
  • sans/Dev/trunk/NCNR_User_Procedures/Common/Packages/PlotManager/PlotUtilsMacro_v40.ipf

    r595 r603  
    137137                                                SetDataFolder root: 
    138138                                                KillWaves $n0,$n1,$n2           // kill the default waveX that were loaded 
    139                                                 //if(DataFolderExists("root:Packages:NIST")) 
    140                                                 //      String/G root:Packages:NIST:gLastFileName = filename 
    141                                                 //endif 
     139                                                if(DataFolderExists("root:Packages:NIST")) 
     140                                                        String/G root:Packages:NIST:gLastFileName = filename 
     141                                                endif 
    142142                                                return  //quits the macro 
    143143                                        endif 
     
    146146                                NewDataFolder/S $("root:"+baseStr) 
    147147                        endif 
     148 
    148149                         
    149150                        ////overwrite the existing data, if it exists 
     
    185186                                                if(DataFolderExists("root:Packages:NIST")) 
    186187                                                        String/G root:Packages:NIST:gLastFileName = filename 
    187                                                 endif           //set the last file loaded to the one NOT loaded 
     188                                                endif 
    188189                                                return          //quits the macro 
    189190                                        endif 
     
    192193                                NewDataFolder/S $("root:"+baseStr) 
    193194                        endif 
     195 
     196 
     197 
    194198         
    195199        ////overwrite the existing data, if it exists 
     
    256260                                                if(DataFolderExists("root:Packages:NIST")) 
    257261                                                        String/G root:Packages:NIST:gLastFileName = filename 
    258                                                 endif           //set the last file loaded to the one NOT loaded 
     262                                                endif 
    259263                                                return          //quits the macro 
    260264                                        endif 
     
    263267                                NewDataFolder/S $("root:"+baseStr) 
    264268                        endif 
     269         
     270 
     271 
    265272         
    266273        ////overwrite the existing data, if it exists 
     
    325332                                        if(V_flag==2)   //user selected No, don't load the data 
    326333                                                KillWaves $n0,$n1,$n2,$n3,$n4,$n5               // kill the default waveX that were loaded 
    327                                                 //if(DataFolderExists("root:Packages:NIST")) 
    328                                                 //      String/G root:Packages:NIST:gLastFileName = filename 
    329                                                 //endif         //set the last file loaded to the one NOT loaded 
     334                                                if(DataFolderExists("root:Packages:NIST")) 
     335                                                        String/G root:Packages:NIST:gLastFileName = filename 
     336                                                endif           //set the last file loaded to the one NOT loaded 
    330337                                                return          //quits the macro 
    331338                                        endif 
Note: See TracChangeset for help on using the changeset viewer.