Ignore:
Timestamp:
Jan 6, 2017 3:05:30 PM (6 years ago)
Author:
srkline
Message:

changes to (mostly) PatchFiles? to be more VSANS-aware, and to update the installed version to report the correct version. Apparently people actually check, and are confused when they don't match.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_PatchFiles.ipf

    r1013 r1018  
    33#pragma IgorVersion=6.1 
    44 
     5 
     6////////////////////////////////// 
     7// 
     8// TODO --  January 2107 
     9// 
     10// This is experimental, making the patch work with list boxes as "groups" of the Nexus file structure 
     11// 
     12// some of the groupings are more natural, some will need to be re-organized for the 
     13// more natural needs of what will typically be patched in the most common cases. 
     14// 
     15/////////////////////////////// 
    516 
    617// 
     
    8899        endif 
    89100        String/G root:Packages:NIST:VSANS:Globals:Patch:gPatchList = "none" 
    90         String/G root:Packages:NIST:VSANS:Globals:Patch:gPS1 = "no file selected" 
    91         String/G root:Packages:NIST:VSANS:Globals:Patch:gPS2 = "no file selected" 
    92         String/G root:Packages:NIST:VSANS:Globals:Patch:gPS3 = "no box selected" 
    93         String/G root:Packages:NIST:VSANS:Globals:Patch:gPS4 = "no file selected" 
    94         String/G root:Packages:NIST:VSANS:Globals:Patch:gPS5 = "no file selected" 
    95         String/G root:Packages:NIST:VSANS:Globals:Patch:gPS6 = "no file selected" 
    96         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV1 =0 
    97         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV2 = 0 
    98         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV3 = 0 
    99         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV4 = 0 
    100         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV5 = 0 
    101         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV6 = 0 
    102         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV7 = 0 
    103         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV8 = 0 
    104         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV9 = 0 
    105         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV10 = 0 
    106         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV11 = 0 
    107         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV12 = 0 
    108         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV13 = 0 
    109         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV14 = 0 
    110         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV15 = 0 
    111         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV16 = 0 
    112         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV17 = 0 
    113         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV18 = 0 
    114         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV19 = 0 
    115         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gTransCts = 0 
     101//      String/G root:Packages:NIST:VSANS:Globals:Patch:gPS1 = "no file selected" 
     102//      String/G root:Packages:NIST:VSANS:Globals:Patch:gPS2 = "no file selected" 
     103//      String/G root:Packages:NIST:VSANS:Globals:Patch:gPS3 = "no box selected" 
     104//      String/G root:Packages:NIST:VSANS:Globals:Patch:gPS4 = "no file selected" 
     105//      String/G root:Packages:NIST:VSANS:Globals:Patch:gPS5 = "no file selected" 
     106//      String/G root:Packages:NIST:VSANS:Globals:Patch:gPS6 = "no file selected" 
     107//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV1 =0 
     108//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV2 = 0 
     109//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV3 = 0 
     110//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV4 = 0 
     111//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV5 = 0 
     112//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV6 = 0 
     113//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV7 = 0 
     114//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV8 = 0 
     115//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV9 = 0 
     116//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV10 = 0 
     117//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV11 = 0 
     118//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV12 = 0 
     119//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV13 = 0 
     120//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV14 = 0 
     121//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV15 = 0 
     122//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV16 = 0 
     123//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV17 = 0 
     124//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV18 = 0 
     125//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV19 = 0 
     126//      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gTransCts = 0 
    116127        Variable/G root:Packages:NIST:VSANS:Globals:Patch:gRadioVal = 1 
    117 End 
     128         
     129 
     130        SetDataFolder root:Packages:NIST:VSANS:Globals:Patch:    
     131        Make/O/T/N=(10,3) PP_ListWave 
     132        Make/O/B/N=(10,3) PP_SelWave 
     133        Make/O/T/N=3 PP_TitleWave 
     134         
     135        PP_TitleWave = {"Ch?","Label","Value"} 
     136         
     137        PP_SelWave[][0] = 2^5           // checkboxes 
     138        PP_SelWave[][2] = 2^1           // 3rd column editable 
     139         
     140         
     141        SetDataFolder root: 
     142         
     143End 
     144 
     145 
     146//panel recreation macro for the PatchPanel... 
     147// 
     148Proc V_Patch_Panel() 
     149        PauseUpdate; Silent 1      // building window... 
     150        NewPanel /W=(533,50,1140,588)/K=2 as "Patch Raw VSANS Data Files" 
     151        DoWindow/C V_Patch_Panel 
     152        ShowTools/A 
     153        SetDataFolder root:Packages:NIST:VSANS:Globals:Patch: 
     154 
     155         
     156        ModifyPanel cbRGB=(11291,48000,3012) 
     157        ModifyPanel fixedSize=1 
     158        SetDrawLayer UserBack 
     159        DrawLine 7,30,422,30 
     160 
     161         
     162        SetVariable PathDisplay,pos={77,7},size={310,13},title="Path" 
     163        SetVariable PathDisplay,help={"This is the path to the folder that will be used to find the SANS data while patching. If no files appear in the popup, make sure that this folder is set correctly"} 
     164        SetVariable PathDisplay,font="Courier",fSize=10 
     165        SetVariable PathDisplay,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gCatPathStr 
     166        Button PathButton,pos={2,3},size={70,20},proc=V_PickPathButton,title="Pick Path" 
     167        Button PathButton,help={"Select the folder containing the raw SANS data files"} 
     168        Button helpButton,pos={400,3},size={25,20},proc=V_ShowPatchHelp,title="?" 
     169        Button helpButton,help={"Show the help file for patching raw data headers"} 
     170        PopupMenu PatchPopup,pos={4,37},size={156,19},proc=V_PatchPopMenuProc,title="File(s) to Patch" 
     171        PopupMenu PatchPopup,help={"The displayed file is the one that will be edited. The entire list will be edited if \"Change All..\" is selected. \r If no items, or the wrong items appear, click on the popup to refresh. \r List items are selected from the file based on MatchString"} 
     172        PopupMenu PatchPopup,mode=1,popvalue="none",value= #"root:Packages:NIST:VSANS:Globals:Patch:gPatchList" 
     173//      Button SHButton,pos={324,37},size={100,20},proc=ShowHeaderButtonProc,title="Show Header" 
     174//      Button SHButton,help={"This will display the header of the file indicated in the popup menu."} 
     175        Button CHButton,pos={314,37},size={110,20},proc=V_ChangeHeaderButtonProc,title="Change Header" 
     176        Button CHButton,help={"This will change the checked values (ONLY) in the single file selected in the popup."} 
     177        SetVariable PMStr,pos={6,63},size={174,13},proc=V_SetMatchStrProc,title="Match String" 
     178        SetVariable PMStr,help={"Enter the search string to narrow the list of files. \"*\" is the wildcard character. After entering, \"pop\" the menu to refresh the file list."} 
     179        SetVariable PMStr,font="Courier",fSize=10 
     180        SetVariable PMStr,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPatchMatchStr 
     181        Button ChAllButton,pos={245,60},size={180,20},proc=V_ChAllHeadersButtonProc,title="Change All Headers in List" 
     182        Button ChAllButton,help={"This will change the checked values (ONLY) in ALL of the files in the popup list, not just the top file. If the \"change\" checkbox for the item is not checked, nothing will be changed for that item."} 
     183        Button DoneButton,pos={314,85},size={110,20},proc=V_DoneButtonProc,title="Done Patching" 
     184        Button DoneButton,help={"When done Patching files, this will close this control panel."} 
     185        CheckBox check0,pos={18,80},size={40,15},title="Run #",value= 1,mode=1,proc=V_MatchCheckProc 
     186        CheckBox check1,pos={78,80},size={40,15},title="Text",value= 0,mode=1,proc=V_MatchCheckProc 
     187        CheckBox check2,pos={138,80},size={40,15},title="SDD",value= 0,mode=1,proc=V_MatchCheckProc 
     188 
     189 
     190        TabControl PatchTab,pos={20,120},size={570,400} 
     191        TabControl PatchTab,tabLabel(0)="Control",tabLabel(1)="Reduction",tabLabel(2)="Sample" 
     192        TabControl PatchTab,tabLabel(3)="Instrument",tabLabel(4)="Detectors",tabLabel(5)="PolSANS" 
     193        TabControl PatchTab,value=0,labelBack=(47748,57192,54093),proc=V_PatchTabProc 
     194 
     195 
     196        ListBox list0,pos={30,150.00},size={550.00,350},proc=V_PatchListBoxProc,frame=1 
     197        ListBox list0,fSize=10,userColumnResize= 1,listWave=PP_ListWave,selWave=PP_SelWave,titleWave=PP_TitleWave 
     198        ListBox list0,mode=2,widths={30,200} 
     199 
     200 
     201// put these in a tabbed? section for the 9 different panels 
     202// will it be able to patch all "FL" with the proper values, then all "FR", etc. to batchwise correct files? 
     203//      PopupMenu popup_0,pos={30,base-step-10},size={109,20},title="Detector Panel",proc=PatchPopMenuProc 
     204//      PopupMenu popup_0,mode=1,popvalue="FL",value= #"\"FL;FR;FT;FB;ML;MR;MT;MB;B;\"" 
     205 
     206// TODO: add functions for these, make the intent a popup (since it's an enumerated type) 
     207 
     208//      PopupMenu popup_1,pos={42,base+14*step},size={109,20},title="File intent" 
     209//      PopupMenu popup_1,mode=1,popvalue="SCATTER",value= #"\"SCATTER;EMPTY;BLOCKED BEAM;TRANS;EMPTY BEAM;\"" 
     210 
     211 
     212 
     213        SetDataFolder root: 
     214End 
     215 
     216// 
     217// function to control the display of the list box, based on the selection of the tab 
     218// 
     219Function V_PatchTabProc(name,tab) 
     220        String name 
     221        Variable tab 
     222         
     223//      Print "name,number",name,tab 
     224        SetDataFolder root:Packages:NIST:VSANS:Globals:Patch: 
     225         
     226        Wave/T PP_listWave = PP_ListWave 
     227        Wave PP_selWave = PP_selWave 
     228         
     229        //clear the listWave and SelWave 
     230        PP_ListWave = "" 
     231        PP_SelWave = 0 
     232         
     233        Variable nRows=1 
     234        // switch based on the tab number 
     235        switch(tab)      
     236                case 0:  
     237                        //Print "tab 0" 
     238                         
     239                        V_FillListBox0(PP_ListWave,PP_SelWave) 
     240                        break            
     241                case 1:  
     242                        //Print "tab 1" 
     243                         
     244                        V_FillListBox1(PP_ListWave,PP_SelWave) 
     245                        break 
     246                case 2:  
     247                        //Print "tab 2" 
     248                         
     249                        V_FillListBox2(PP_ListWave,PP_SelWave) 
     250                        break 
     251                case 3:  
     252                        //Print "tab 3" 
     253                         
     254                        V_FillListBox3(PP_ListWave,PP_SelWave) 
     255                        break 
     256                case 4:  
     257                        //Print "tab 4" 
     258                         
     259                        V_FillListBox4(PP_ListWave,PP_SelWave) 
     260                        break 
     261                case 5:  
     262                        //Print "tab 5" 
     263 
     264                        V_FillListBox5(PP_ListWave,PP_SelWave) 
     265                        break 
     266                default:                        // optional default expression executed 
     267                        SetDataFolder root: 
     268                        Abort "No tab found -- PatchTabProc"            // when no case matches 
     269        endswitch 
     270 
     271 
     272        SetDataFolder root: 
     273        return(0) 
     274End 
     275 
     276// fill list boxes based on the tab 
     277// 
     278// CONTROL 
     279// 
     280Function V_FillListBox0(listWave,selWave) 
     281        Wave/T listWave 
     282        Wave selWave 
     283         
     284        // trust that I'm getting a valid raw data file name from the popup 
     285        String fname 
     286        ControlInfo/W=V_Patch_Panel PatchPopup 
     287        If(strlen(S_value)==0 || cmpstr(S_Value,"none")==0) 
     288                Abort "no file selected in popup menu"          //null selection 
     289        else 
     290                fname = S_value                         //selection not null 
     291        Endif 
     292        //prepend path for read routine  
     293        PathInfo catPathName 
     294        fname = S_path + fname 
     295 
     296        Variable nRows = 3 
     297        Redimension/N=(nRows,3) ListWave 
     298        Redimension/N=(nRows,3) selWave 
     299        // clear the contents 
     300        listWave = "" 
     301        selWave = 0 
     302        SelWave[][0] = 2^5              // checkboxes 
     303        SelWave[][2] = 2^1              // 3rd column editable 
     304         
     305         
     306         
     307        listWave[0][1] = "count_time" 
     308        listWave[0][2] = num2str(V_getCount_time(fname)) 
     309         
     310        listWave[1][1] = "detector_counts" 
     311        listWave[1][2] = num2str(V_getDetector_counts(fname)) 
     312         
     313        listWave[2][1] = "monitor_counts" 
     314        listWave[2][2] = num2str(V_getMonitorCount(fname)) 
     315         
     316        return(0) 
     317End 
     318 
     319// fill list boxes based on the tab 
     320// 
     321// Reduction items 
     322// 
     323Function V_FillListBox1(listWave,selWave) 
     324        Wave/T listWave 
     325        Wave selWave 
     326 
     327        // trust that I'm getting a valid raw data file name from the popup 
     328        String fname 
     329        ControlInfo/W=V_Patch_Panel PatchPopup 
     330        If(strlen(S_value)==0 || cmpstr(S_Value,"none")==0) 
     331                Abort "no file selected in popup menu"          //null selection 
     332        else 
     333                fname = S_value                         //selection not null 
     334        Endif 
     335        //prepend path for read routine  
     336        PathInfo catPathName 
     337        fname = S_path + fname 
     338 
     339        Variable nRows = 13 
     340        Redimension/N=(nRows,3) ListWave 
     341        Redimension/N=(nRows,3) selWave 
     342        // clear the contents 
     343        listWave = "" 
     344        selWave = 0 
     345        SelWave[][0] = 2^5              // checkboxes 
     346        SelWave[][2] = 2^1              // 3rd column editable 
     347         
     348         
     349        listWave[0][1] = "empty_beam_file_name" 
     350        listWave[0][2] = V_getEmptyBeamFileName(fname) 
     351         
     352        listWave[1][1] = "background_file_name" 
     353        listWave[1][2] = V_getBackgroundFileName(fname) 
     354         
     355        listWave[2][1] = "empty_file_name" 
     356        listWave[2][2] = V_getEmptyFileName(fname) 
     357         
     358        listWave[3][1] = "sensitivity_file_name" 
     359        listWave[3][2] = V_getSensitivityFileName(fname) 
     360         
     361        listWave[4][1] = "mask_file_name" 
     362        listWave[4][2] = V_getMaskFileName(fname) 
     363         
     364        listWave[5][1] = "transmission_file_name" 
     365        listWave[5][2] = V_getTransmissionFileName(fname) 
     366         
     367        listWave[6][1] = "intent" 
     368        listWave[6][2] = V_getReduction_intent(fname) 
     369         
     370        listWave[7][1] = "file_purpose (polSANS)" 
     371        listWave[7][2] = V_getReduction_polSANSPurpose(fname) 
     372         
     373        listWave[8][1] = "group_id (sample)" 
     374        listWave[8][2] = num2str(V_getSample_group_ID(fname)) 
     375 
     376        listWave[9][1] = "box_count" 
     377        listWave[9][2] = num2str(V_getBoxCounts(fname)) 
     378         
     379        listWave[10][1] = "box_count_error" 
     380        listWave[10][2] = num2str(V_getBoxCountsError(fname)) 
     381         
     382        listWave[11][1] = "whole_trans" 
     383        listWave[11][2] = num2str(V_getSampleTransWholeDetector(fname)) 
     384         
     385        listWave[12][1] = "whole_trans_error" 
     386        listWave[12][2] = num2str(V_getSampleTransWholeDetErr(fname)) 
     387         
     388         
     389                 
     390         
     391 
     392        return(0) 
     393End 
     394 
     395// fill list boxes based on the tab 
     396// 
     397// SAMPLE 
     398// 
     399Function V_FillListBox2(listWave,selWave) 
     400        Wave/T listWave 
     401        Wave selWave 
     402         
     403        // trust that I'm getting a valid raw data file name from the popup 
     404        String fname 
     405        ControlInfo/W=V_Patch_Panel PatchPopup 
     406        If(strlen(S_value)==0 || cmpstr(S_Value,"none")==0) 
     407                Abort "no file selected in popup menu"          //null selection 
     408        else 
     409                fname = S_value                         //selection not null 
     410        Endif 
     411        //prepend path for read routine  
     412        PathInfo catPathName 
     413        fname = S_path + fname 
     414 
     415        Variable nRows = 4 
     416        Redimension/N=(nRows,3) ListWave 
     417        Redimension/N=(nRows,3) selWave 
     418        // clear the contents 
     419        listWave = "" 
     420        selWave = 0 
     421        SelWave[][0] = 2^5              // checkboxes 
     422        SelWave[][2] = 2^1              // 3rd column editable 
     423         
     424         
     425        listWave[0][1] = "description" 
     426        listWave[0][2] = V_getSampleDescription(fname) 
     427         
     428        listWave[1][1] = "thickness" 
     429        listWave[1][2] = num2str(V_getSampleThickness(fname)) 
     430         
     431        listWave[2][1] = "transmission" 
     432        listWave[2][2] = num2str(V_getSampleTransmission(fname)) 
     433         
     434        listWave[3][1] = "transmission_error" 
     435        listWave[3][2] = num2str(V_getSampleTransError(fname)) 
     436         
     437 
     438 
     439        return(0) 
     440End 
     441 
     442// fill list boxes based on the tab 
     443// 
     444// INSTRUMENT 
     445// 
     446Function V_FillListBox3(listWave,selWave) 
     447        Wave/T listWave 
     448        Wave selWave 
     449         
     450        // trust that I'm getting a valid raw data file name from the popup 
     451        String fname 
     452        ControlInfo/W=V_Patch_Panel PatchPopup 
     453        If(strlen(S_value)==0 || cmpstr(S_Value,"none")==0) 
     454                Abort "no file selected in popup menu"          //null selection 
     455        else 
     456                fname = S_value                         //selection not null 
     457        Endif 
     458        //prepend path for read routine  
     459        PathInfo catPathName 
     460        fname = S_path + fname 
     461 
     462        Variable nRows = 6 
     463        Redimension/N=(nRows,3) ListWave 
     464        Redimension/N=(nRows,3) selWave 
     465        // clear the contents 
     466        listWave = "" 
     467        selWave = 0 
     468        SelWave[][0] = 2^5              // checkboxes 
     469        SelWave[][2] = 2^1              // 3rd column editable 
     470         
     471         
     472        listWave[0][1] = "attenuator_transmission" 
     473        listWave[0][2] = num2str(V_getAttenuator_transmission(fname))    
     474         
     475        listWave[1][1] = "attenuator_transmission_error" 
     476        listWave[1][2] = num2str(V_getAttenuator_trans_err(fname))       
     477 
     478        listWave[2][1] = "monochromator type" 
     479        listWave[2][2] = V_getMonochromatorType(fname) 
     480         
     481        listWave[3][1] = "wavelength" 
     482        listWave[3][2] = num2str(V_getWavelength(fname))         
     483         
     484        listWave[4][1] = "wavelength_spread" 
     485        listWave[4][2] = num2str(V_getWavelength_spread(fname))  
     486 
     487        listWave[5][1] = "distance (source aperture)" 
     488        listWave[5][2] = num2str(V_getSourceAp_distance(fname))          
     489                 
     490        return(0) 
     491End 
     492 
     493 
     494// fill list boxes based on the tab 
     495// 
     496// DETECTORS 
     497// 
     498Function V_FillListBox4(listWave,selWave) 
     499        Wave/T listWave 
     500        Wave selWave 
     501         
     502        // trust that I'm getting a valid raw data file name from the popup 
     503        String fname 
     504        ControlInfo/W=V_Patch_Panel PatchPopup 
     505        If(strlen(S_value)==0 || cmpstr(S_Value,"none")==0) 
     506                Abort "no file selected in popup menu"          //null selection 
     507        else 
     508                fname = S_value                         //selection not null 
     509        Endif 
     510        //prepend path for read routine  
     511        PathInfo catPathName 
     512        fname = S_path + fname 
     513 
     514        Variable nRows = 3 
     515        Redimension/N=(nRows,3) ListWave 
     516        Redimension/N=(nRows,3) selWave 
     517        // clear the contents 
     518        listWave = "" 
     519        selWave = 0 
     520        SelWave[][0] = 2^5              // checkboxes 
     521        SelWave[][2] = 2^1              // 3rd column editable 
     522         
     523         
     524        listWave[0][1] = "count_time" 
     525        listWave[0][2] = num2str(V_getCount_time(fname))         
     526 
     527        return(0) 
     528End 
     529 
     530 
     531// fill list boxes based on the tab 
     532// 
     533// PolSANS 
     534// 
     535Function V_FillListBox5(listWave,selWave) 
     536        Wave/T listWave 
     537        Wave selWave 
     538         
     539        // trust that I'm getting a valid raw data file name from the popup 
     540        String fname 
     541        ControlInfo/W=V_Patch_Panel PatchPopup 
     542        If(strlen(S_value)==0 || cmpstr(S_Value,"none")==0) 
     543                Abort "no file selected in popup menu"          //null selection 
     544        else 
     545                fname = S_value                         //selection not null 
     546        Endif 
     547        //prepend path for read routine  
     548        PathInfo catPathName 
     549        fname = S_path + fname 
     550 
     551        Variable nRows = 3 
     552        Redimension/N=(nRows,3) ListWave 
     553        Redimension/N=(nRows,3) selWave 
     554        // clear the contents 
     555        listWave = "" 
     556        selWave = 0 
     557        SelWave[][0] = 2^5              // checkboxes 
     558        SelWave[][2] = 2^1              // 3rd column editable 
     559         
     560         
     561        listWave[0][1] = "count_time" 
     562        listWave[0][2] = num2str(V_getCount_time(fname))         
     563 
     564        return(0) 
     565End 
     566 
     567 
     568// TODO - determine if I really need this --- I don't  
     569//  think I really have any reason to respond to events from list box actions 
     570// or edits. the final action of patching is done with the button 
     571// 
     572Function V_PatchListBoxProc(lba) : ListBoxControl 
     573        STRUCT WMListboxAction &lba 
     574 
     575        Variable row = lba.row 
     576        Variable col = lba.col 
     577        WAVE/T/Z listWave = lba.listWave 
     578        WAVE/Z selWave = lba.selWave 
     579 
     580        switch( lba.eventCode ) 
     581                case -1: // control being killed 
     582                        break 
     583                case 1: // mouse down 
     584                        break 
     585                case 3: // double click 
     586                        break 
     587                case 4: // cell selection 
     588                case 5: // cell selection plus shift key 
     589                        break 
     590                case 6: // begin edit 
     591                        break 
     592                case 7: // finish edit 
     593                        break 
     594                case 13: // checkbox clicked (Igor 6.2 or later) 
     595                        break 
     596        endswitch 
     597 
     598        return 0 
     599End 
     600 
     601 
     602 
     603 
     604 
    118605 
    119606//button action procedure to select the local path to the folder that 
     
    142629        // (don't update the list - not until someone enters a search critera) -- Jul09 
    143630        // 
    144         SetMatchStrProc("",0,"*","")            //this is equivalent to finding everything, typical startup case 
     631        V_SetMatchStrProc("",0,"*","")          //this is equivalent to finding everything, typical startup case 
    145632 
    146633End 
     
    193680 // 2== Grep the text (SLOW) 
    194681 // 3== filter by SDD (within 0.001 m) 
    195 Function/S GetValidPatchPopupList() 
     682Function/S V_GetValidPatchPopupList() 
    196683 
    197684        //make sure that path exists 
     
    311798//all valid files 
    312799// 
    313 Function PatchPopMenuProc(PatchPopup,popNum,popStr) : PopupMenuControl 
     800Function V_PatchPopMenuProc(PatchPopup,popNum,popStr) : PopupMenuControl 
    314801        String PatchPopup 
    315802        Variable popNum 
    316803        String popStr 
     804 
     805        //change the contents of gPatchList that is displayed 
     806        //based on selected Path, match str, and 
     807        //further trim list to include only RAW SANS files 
     808         
     809//      String/G root:Packages:NIST:VSANS:Globals:Patch:gPatchList = list 
     810//      ControlUpdate PatchPopup 
     811        V_ShowHeaderButtonProc("SHButton") 
     812End 
     813 
     814//when text is entered in the match string, the popup list is refined to  
     815//include only the selected files, useful for trimming a lengthy list, or selecting 
     816//a range of files to patch 
     817//only one wildcard (*) is allowed 
     818// 
     819Function V_SetMatchStrProc(ctrlName,varNum,varStr,varName) : SetVariableControl 
     820        String ctrlName 
     821        Variable varNum 
     822        String varStr 
     823        String varName 
    317824 
    318825        //change the contents of gPatchList that is displayed 
     
    320827        //further trim list to include only RAW SANS files 
    321828        //this will exclude version numbers, .AVE, .ABS files, etc. from the popup (which can't be patched) 
    322  
    323 //      String list = GetValidPatchPopupList() 
    324          
    325 //      String/G root:Packages:NIST:VSANS:Globals:Patch:gPatchList = list 
    326 //      ControlUpdate PatchPopup 
    327         ShowHeaderButtonProc("SHButton") 
    328 End 
    329  
    330 //when text is entered in the match string, the popup list is refined to  
    331 //include only the selected files, useful for trimming a lengthy list, or selecting 
    332 //a range of files to patch 
    333 //only one wildcard (*) is allowed 
    334 // 
    335 Function SetMatchStrProc(ctrlName,varNum,varStr,varName) : SetVariableControl 
    336         String ctrlName 
    337         Variable varNum 
    338         String varStr 
    339         String varName 
    340  
    341         //change the contents of gPatchList that is displayed 
    342         //based on selected Path, match str, and 
    343         //further trim list to include only RAW SANS files 
    344         //this will exclude version numbers, .AVE, .ABS files, etc. from the popup (which can't be patched) 
    345          
    346         String list = GetValidPatchPopupList() 
     829         
     830        String list = V_GetValidPatchPopupList() 
    347831         
    348832        String/G root:Packages:NIST:VSANS:Globals:Patch:gPatchList = list 
     
    351835         
    352836        if(strlen(list) > 0) 
    353                 ShowHeaderButtonProc("SHButton") 
     837                V_ShowHeaderButtonProc("SHButton") 
    354838        endif 
    355839End 
     
    360844//clicked) when a new file is chosen from the popup 
    361845// 
    362 Function ShowHeaderButtonProc(SHButton) : ButtonControl 
     846// TODO - make sure this is tab-aware 
     847// 
     848Function V_ShowHeaderButtonProc(SHButton) : ButtonControl 
    363849        String SHButton 
    364850 
     
    386872         
    387873        //make sure the file is really a RAW data file 
    388         ok = V_CheckIfRawData(tempName) 
     874        ok = V_CheckIfRawData(tempName)                 //--- This loads the whole file to read the instrument string 
    389875        if (!ok) 
    390876                Abort "this file is not recognized as a RAW SANS data file" 
     
    393879        //Print tempName 
    394880         
    395         ReadHeaderForPatch(tempName) 
     881        V_ReadHeaderForPatch(tempName) 
    396882         
    397883        ControlUpdate/A/W=V_Patch_Panel 
     
    399885End 
    400886 
    401 //utility function that polls the checkboxes of the editable parameters 
    402 //returns a wave with the yes/no checked state of the boxes 
    403 // 0 = not checked (user does NOT want this header value updated) 
    404 // 1 = checked (YES, change this value in the header) 
    405 //num (input) is a simple check to make sure that the wave is set up properly 
    406 //from the calling routine 
    407 // 
    408 //Function GetCheckBoxesState(w,num) 
    409 //      Wave w     //on return, this wave contains the current state of the checkboxes 
    410 //      Variable num 
    411 //       
    412 //      if(num != 20) 
    413 //              Abort "wrong number of checkboxes GetCheckBoxesState()" 
    414 //      Endif 
    415 //      ControlInfo checkPS1 
    416 //      w[0] = V_value 
    417 //       
    418 //      Variable ii 
    419 //      String baseStr="checkPV" 
    420 //       
    421 //      ii=1 
    422 //      do 
    423 //              ControlInfo $(baseStr + num2str(ii)) 
    424 //              w[ii] = V_Value 
    425 //              ii+=1 
    426 //      while(ii<num) 
    427 //      return(0) 
    428 //End 
    429  
    430 //on return, wt is a TEXT wave with the values in the SetVar boxes 
    431 //will poll the SetVariable controls to get the new values - will get all the values, 
    432 //and let the writing routine decide which ones it will actually use 
    433 //num (input) is a simple check to make sure that the wave is set up properly 
    434 //from the calling routine 
    435 // 
    436 //Function GetEditedSetVarBoxes(wt,num) 
    437 //      Wave/T wt           
    438 //      Variable num 
    439 //       
    440 //      if(num != 20) 
    441 //              Abort "wrong number of checkboxes GetEditedSetVarBoxes()" 
    442 //      Endif 
    443 //       
    444 //      //pass all as a text wave - so only one wave has to be passed (conversion 2x, though) 
    445 //      //global is set to the changed value when entered. read others directly from the control 
    446 //       
    447 //      //make sure the text label is exactly 60 characters long, to match VAX field length 
    448 //      SVAR dum=root:Packages:NIST:VSANS:Globals:Patch:gPS1 
    449 // 
    450 ////    wt[0] = str60 
    451 //      wt[0] = dum                     //with Nexus, no need to enforce 60 character field 
    452 ////     
    453 //      Variable ii 
    454 //      String baseStr="PV" 
    455 //      ii=1 
    456 //      do 
    457 //              ControlInfo $(baseStr + num2str(ii)) 
    458 //              wt[ii] = num2str(V_Value) 
    459 //              ii+=1 
    460 //      while(ii<num) 
    461 //       
    462 //      return(0)       //no error 
    463 //End 
    464887 
    465888 
     
    468891//or VAX version number. 
    469892// 
    470 Function/S GetPatchPopupString() 
     893Function/S V_GetPatchPopupString() 
    471894 
    472895        String str="" 
     
    488911//reads the checkboxes to determine which (if any) values need to be written 
    489912// 
    490 Function ChangeHeaderButtonProc(CHButton) : ButtonControl 
     913// This currently makes sure the name is valid, 
     914// determines the active tab,  
     915// and dispatches to the correct (numbered) writer 
     916// 
     917Function V_ChangeHeaderButtonProc(CHButton) : ButtonControl 
    491918        String CHButton 
    492919 
    493         //read the (20) checkboxes to determine what changes to make 
    494         //The order/length of these waves are crucial!, set by nvars      
    495920        String partialName="", tempName = "" 
    496         Variable ok,nvars = 20,ii 
    497          
    498 //      Make/O/N=(nvars) tempChange 
    499 //      Wave w=tempchange 
    500 //      GetCheckBoxesState(w,nvars) 
    501         //Print "w[0] = ",w[0] 
    502          
    503          
    504 //      //Get the current values in each of the fields - to pass to Write() as a textwave 
    505 //      Make/O/T/N=(nvars) tempValues 
    506 //      Wave/T wt=tempValues 
    507 //      //initialize textwave 
    508 //      ii=0 
    509 //      do 
    510 //              wt[ii] = "" 
    511 //              ii+=1 
    512 //      while(ii<nvars) 
    513 //      GetEditedSetVarBoxes(wt,nvars) 
    514          
     921        Variable ok 
    515922        //get the popup string 
    516         partialName = GetPatchPopupString() 
     923        partialName = V_GetPatchPopupString() 
    517924         
    518925        //get a valid file based on this partialName and catPathName 
     
    529936        Endif 
    530937         
    531         //go write the changes to the file 
    532 //      WriteHeaderForPatch(tempName,w,wt) 
    533         WriteHeaderForPatch(tempName) 
    534          
    535         //clean up wave before leaving 
    536         KillWaves/Z w,wt 
    537          
    538 End 
    539  
    540  
    541 //      ControlInfo checkPS1 
    542 //      w[0] = V_value 
     938        // which tab is active? 
     939        ControlInfo/W=V_Patch_Panel PatchTab 
     940         
     941        switch(V_Value) // numeric switch 
     942                case 0: // execute if case matches expression 
     943                        V_WriteHeaderForPatch_0(tempName) 
     944                        break           // exit from switch 
     945                case 1:  
     946                        V_WriteHeaderForPatch_1(tempName) 
     947                        break 
     948                case 2:  
     949                        V_WriteHeaderForPatch_2(tempName) 
     950                        break 
     951                case 3:  
     952                        V_WriteHeaderForPatch_3(tempName) 
     953                        break 
     954                case 4:  
     955                        V_WriteHeaderForPatch_4(tempName) 
     956                        break 
     957                case 5:  
     958                        V_WriteHeaderForPatch_5(tempName) 
     959                        break 
     960                default:                        // optional default expression executed 
     961                        Abort "Tab not found - V_ChangeHeaderButtonProc" 
     962        endswitch 
     963 
     964         
     965        //after writing the changes to the file 
     966        // clean up, to force a reload from disk 
     967        V_CleanupData_w_Progress(0,1) 
     968         
     969        return(0) 
     970End 
     971 
    543972//       
    544 //      Variable ii 
    545 //      String baseStr="checkPV" 
     973//*****this function actually writes the data to disk***** 
     974// 
     975// TODO - re-write a series of these function to mirror the "fill" functions 
     976//   specific to each tab 
     977// 
     978// TODO x- clear out the old data and force a re-load from disk, or the old data 
     979//    will be read in from the RawVSANS folder, and it will look like nothing was written 
     980//                      (done in the calling function) 
     981// 
     982// currently, all errors are printed out by the writer, but ignored here 
     983// 
     984Function V_WriteHeaderForPatch_0(fname) 
     985        String fname 
     986         
     987        Variable val,err 
     988        String textstr 
     989                 
     990        Wave/T listWave = root:Packages:NIST:VSANS:Globals:Patch:PP_ListWave 
     991        Wave selWave = root:Packages:NIST:VSANS:Globals:Patch:PP_selWave 
     992 
     993        // test bit 4 to see if the checkbox is selected 
     994        if ((selWave[0][0] & 2^4) != 0)         // Test if bit 4 is set 
     995                val = str2num(listWave[0][2]) 
     996                err = V_writeCount_time(fname,val)              // count_time 
     997        endif 
     998 
     999        if ((selWave[1][0] & 2^4) != 0)         // "detector_counts" 
     1000                val = str2num(listWave[1][2]) 
     1001                err = V_writeDetector_counts(fname,val) 
     1002        endif    
     1003         
     1004        if ((selWave[2][0] & 2^4) != 0)         //"monitor_counts" 
     1005                val = str2num(listWave[2][2]) 
     1006                err = V_writeMonitorCount(fname,val) 
     1007        endif    
     1008         
     1009 
     1010// 
     1011//      ControlInfo checkPS1            //change the sample label ? 
     1012//      if(V_Value == 1) 
     1013//              SVAR gPS1 = root:Packages:NIST:VSANS:Globals:Patch:gPS1 
     1014//              V_writeSampleDescription(fname,gPS1) 
     1015//      endif 
    5461016//       
    547 //      ii=1 
    548 //      do 
    549 //              ControlInfo $(baseStr + num2str(ii)) 
    550 //              w[ii] = V_Value 
    551 //              ii+=1 
    552 //      while(ii<num) 
    553          
    554 //*****this function actually writes the data to disk***** 
    555 //overwrites the specific bytes the the header that are to be changed 
    556 //real values are written out mimicking VAX format, so that can be properly 
    557 //re-read as raw binary VAX files. 
    558 //if any additional fields are to be edited, the exact byte location must be known 
    559 // 
    560 Function WriteHeaderForPatch(fname) 
     1017//      ControlInfo checkPV1 
     1018//      if(V_Value == 1)                //sample transmission 
     1019//              ControlInfo PV1 
     1020//              V_writeSampleTransmission(fname,V_value) 
     1021//      Endif 
     1022//       
     1023//      ControlInfo checkPV2 
     1024//      if(V_Value == 1)                //sample thickness 
     1025//              ControlInfo PV2 
     1026//              V_writeSampleThickness(fname,V_Value) 
     1027//      Endif 
     1028//       
     1029//      ControlInfo checkPV5 
     1030//      if(V_Value == 1)                //attenuator number 
     1031//              ControlInfo PV5 
     1032//              V_writeAttenThickness(fname,V_value) 
     1033//      Endif 
     1034// 
     1035//      ControlInfo checkPV6            // count time 
     1036//      if(V_Value == 1) 
     1037//              ControlInfo PV6 
     1038//              V_writeCount_time(fname,V_Value) 
     1039//      Endif 
     1040// 
     1041//      ControlInfo checkPV7     
     1042//      if(V_Value == 1)    //monitor count 
     1043//              ControlInfo PV7  
     1044//              V_writeMonitorCount(fname,V_Value) 
     1045//      Endif 
     1046// 
     1047//      ControlInfo checkPV10    
     1048//      if(V_Value == 1)      //wavelength 
     1049//              ControlInfo PV10 
     1050//              V_writeWavelength(fname,V_Value) 
     1051//      Endif 
     1052// 
     1053//      ControlInfo checkPV11            
     1054//      if(V_Value == 1)      //wavelength spread 
     1055//              ControlInfo PV11 
     1056//              V_writeWavelength_spread(fname,V_Value) 
     1057//      Endif    
     1058// 
     1059//      ControlInfo checkPV14            
     1060//      if(V_Value == 1)      //source aperture 
     1061//              ControlInfo PV14 
     1062//              textStr = num2str(V_Value) 
     1063//              V_writeSourceAp_size(fname,textStr)             //this is expecting a string 
     1064//      Endif 
     1065//       
     1066//      ControlInfo checkPV15            
     1067//      if(V_Value == 1)      //sample aperture 
     1068//              ControlInfo PV15 
     1069//              V_writeSampleAp2_size(fname,V_Value)            //TODO -- not sure if this is correct call 
     1070//      Endif 
     1071// 
     1072//      ControlInfo checkPV16 
     1073//      if(V_Value == 1)      //source-sam dist 
     1074//              ControlInfo PV16 
     1075//// TODO -- replace call 
     1076////            WriteSrcToSamDistToHeader(fname,num) 
     1077//      Endif 
     1078// 
     1079//      ControlInfo checkPV18 
     1080//      if(V_Value == 1)      //beamstop diam 
     1081//              ControlInfo PV18 
     1082//              V_writeBeamStopC2_size(fname,V_Value)                   //TODO depends on which det carriage I'm working with (2) or (3) 
     1083//      Endif    
     1084// 
     1085//      ControlInfo checkPS2            //change the DIV file name? 
     1086//      if(V_Value == 1) 
     1087//              SVAR gPS2 = root:Packages:NIST:VSANS:Globals:Patch:gPS2 
     1088//              V_writeSensitivityFileName(fname,gPS2) 
     1089//      endif    
     1090//       
     1091//      ControlInfo checkPS3            //change the sample intent? 
     1092//      if(V_Value == 1) 
     1093//              SVAR gPS3 = root:Packages:NIST:VSANS:Globals:Patch:gPS3 
     1094//              V_writeReductionIntent(fname,gPS3) 
     1095//      endif    
     1096// 
     1097//       
     1098//// individual detector values  
     1099//      ControlInfo checkPV3 
     1100//      if(V_Value == 1)                //pixel X 
     1101//              ControlInfo PV3 
     1102//              V_writeDet_beam_center_x(fname,detStr,V_Value)   
     1103//      Endif 
     1104//       
     1105//      ControlInfo checkPV4 
     1106//      if(V_Value == 1)                // pixel Y 
     1107//              ControlInfo PV4 
     1108//              V_writeDet_beam_center_y(fname,detStr,V_Value)   
     1109//      Endif 
     1110//       
     1111//      ControlInfo checkPV17 
     1112//      if(V_Value == 1)      //det offset 
     1113//              ControlInfo PV17 
     1114//              V_writeDet_LateralOffset(fname,detStr,V_Value)          // TODO lateral or vertical offset, based on detStr 
     1115//      Endif 
     1116// 
     1117//      ControlInfo checkPV19 
     1118//      if(V_Value == 1)     //SDD 
     1119//              ControlInfo PV19 
     1120//              V_writeDet_distance(fname,detStr,V_Value)         
     1121//      Endif 
     1122// 
     1123//      ControlInfo checkPV8     
     1124//      if(V_Value == 1)     //total detector count 
     1125//              ControlInfo PV8 
     1126//              V_writeDet_IntegratedCount(fname,detStr,V_value)                 
     1127//      Endif 
     1128 
     1129 
     1130        Return(0) 
     1131End 
     1132 
     1133// 
     1134// tab 1 
     1135// 
     1136Function V_WriteHeaderForPatch_1(fname) 
    5611137        String fname 
    562 //      Wave change 
    563 //      Wave/T textVal 
    564          
    565         Variable refnum,num 
    566         String textstr 
    567  
    568 // TODO: 
    569 // -- currently I hard-wired a detector choice. This needs to be changed (somehow), with a better interface 
    570 // 
    571         ControlInfo popup_0 
    572         String detStr = S_value 
    573  
    574 // handle strings differently 
    575  
    576         ControlInfo checkPS1            //change the sample label ? 
    577         if(V_Value == 1) 
    578                 SVAR gPS1 = root:Packages:NIST:VSANS:Globals:Patch:gPS1 
    579                 V_writeSampleDescription(fname,gPS1) 
     1138 
     1139        Variable val,err 
     1140        String str 
     1141                 
     1142        Wave/T listWave = root:Packages:NIST:VSANS:Globals:Patch:PP_ListWave 
     1143        Wave selWave = root:Packages:NIST:VSANS:Globals:Patch:PP_selWave 
     1144 
     1145        // test bit 4 to see if the checkbox is selected 
     1146        if ((selWave[0][0] & 2^4) != 0)         // Test if bit 4 is set 
     1147                str = listWave[0][2]                    // empty_beam_file_name 
     1148                err = V_writeEmptyBeamFileName(fname,str)                
    5801149        endif 
    581          
    582         ControlInfo checkPV1 
    583         if(V_Value == 1)                //sample transmission 
    584                 ControlInfo PV1 
    585                 V_writeSampleTransmission(fname,V_value) 
    586         Endif 
    587          
    588         ControlInfo checkPV2 
    589         if(V_Value == 1)                //sample thickness 
    590                 ControlInfo PV2 
    591                 V_writeSampleThickness(fname,V_Value) 
    592         Endif 
    593          
    594         ControlInfo checkPV5 
    595         if(V_Value == 1)                //attenuator number 
    596                 ControlInfo PV5 
    597                 V_writeAttenThickness(fname,V_value) 
    598         Endif 
    599  
    600         ControlInfo checkPV6            // count time 
    601         if(V_Value == 1) 
    602                 ControlInfo PV6 
    603                 V_writeCount_time(fname,V_Value) 
    604         Endif 
    605  
    606         ControlInfo checkPV7     
    607         if(V_Value == 1)    //monitor count 
    608                 ControlInfo PV7  
    609                 V_writeMonitorCount(fname,V_Value) 
    610         Endif 
    611  
    612         ControlInfo checkPV10    
    613         if(V_Value == 1)      //wavelength 
    614                 ControlInfo PV10 
    615                 V_writeWavelength(fname,V_Value) 
    616         Endif 
    617  
    618         ControlInfo checkPV11            
    619         if(V_Value == 1)      //wavelength spread 
    620                 ControlInfo PV11 
    621                 V_writeWavelength_spread(fname,V_Value) 
    622         Endif    
    623  
    624         ControlInfo checkPV14            
    625         if(V_Value == 1)      //source aperture 
    626                 ControlInfo PV14 
    627                 textStr = num2str(V_Value) 
    628                 V_writeSourceAp_size(fname,textStr)             //this is expecting a string 
    629         Endif 
    630          
    631         ControlInfo checkPV15            
    632         if(V_Value == 1)      //sample aperture 
    633                 ControlInfo PV15 
    634                 V_writeSampleAp2_size(fname,V_Value)            //TODO -- not sure if this is correct call 
    635         Endif 
    636  
    637         ControlInfo checkPV16 
    638         if(V_Value == 1)      //source-sam dist 
    639                 ControlInfo PV16 
    640 // TODO -- replace call 
    641 //              WriteSrcToSamDistToHeader(fname,num) 
    642         Endif 
    643  
    644         ControlInfo checkPV18 
    645         if(V_Value == 1)      //beamstop diam 
    646                 ControlInfo PV18 
    647                 V_writeBeamStopC2_size(fname,V_Value)                   //TODO depends on which det carriage I'm working with (2) or (3) 
    648         Endif    
    649  
    650         ControlInfo checkPS2            //change the DIV file name? 
    651         if(V_Value == 1) 
    652                 SVAR gPS2 = root:Packages:NIST:VSANS:Globals:Patch:gPS2 
    653                 V_writeSensitivityFileName(fname,gPS2) 
    654         endif    
    655          
    656         ControlInfo checkPS3            //change the sample intent? 
    657         if(V_Value == 1) 
    658                 SVAR gPS3 = root:Packages:NIST:VSANS:Globals:Patch:gPS3 
    659                 V_writeReductionIntent(fname,gPS3) 
    660         endif    
    661  
    662          
    663 // individual detector values    
    664         ControlInfo checkPV3 
    665         if(V_Value == 1)                //pixel X 
    666                 ControlInfo PV3 
    667                 V_writeDet_beam_center_x(fname,detStr,V_Value)   
    668         Endif 
    669          
    670         ControlInfo checkPV4 
    671         if(V_Value == 1)                // pixel Y 
    672                 ControlInfo PV4 
    673                 V_writeDet_beam_center_y(fname,detStr,V_Value)   
    674         Endif 
    675          
    676         ControlInfo checkPV17 
    677         if(V_Value == 1)      //det offset 
    678                 ControlInfo PV17 
    679                 V_writeDet_LateralOffset(fname,detStr,V_Value)          // TODO lateral or vertical offset, based on detStr 
    680         Endif 
    681  
    682         ControlInfo checkPV19 
    683         if(V_Value == 1)     //SDD 
    684                 ControlInfo PV19 
    685                 V_writeDet_distance(fname,detStr,V_Value)         
    686         Endif 
    687  
    688         ControlInfo checkPV8     
    689         if(V_Value == 1)     //total detector count 
    690                 ControlInfo PV8 
    691                 V_writeDet_IntegratedCount(fname,detStr,V_value)                 
    692         Endif 
    693  
    694  
    695         Return(0) 
    696 End 
    697  
    698 //panel recreation macro for the PatchPanel... 
    699 // 
    700 Proc V_Patch_Panel() 
    701         PauseUpdate; Silent 1      // building window... 
    702         NewPanel /W=(519,85,950,688)/K=2 as "Patch Raw VSANS Data Files" 
    703         DoWindow/C V_Patch_Panel 
    704         ModifyPanel cbRGB=(11291,48000,3012) 
    705         ModifyPanel fixedSize=1 
    706         SetDrawLayer UserBack 
    707         SetDrawEnv fname= "Courier",fstyle= 1 
    708         DrawText 3,107,"Change?" 
    709         DrawLine 7,30,422,30 
    710         DrawLine 7,288,422,288 
    711         DrawLine 7,199,422,199 
    712         DrawLine 7,378+18,422,378+18 
    713         DrawLine 7,469+18,422,469+18 
    714          
    715         SetVariable PathDisplay,pos={77,7},size={310,13},title="Path" 
    716         SetVariable PathDisplay,help={"This is the path to the folder that will be used to find the SANS data while patching. If no files appear in the popup, make sure that this folder is set correctly"} 
    717         SetVariable PathDisplay,font="Courier",fSize=10 
    718         SetVariable PathDisplay,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gCatPathStr 
    719         Button PathButton,pos={2,3},size={70,20},proc=PickPathButton,title="Pick Path" 
    720         Button PathButton,help={"Select the folder containing the raw SANS data files"} 
    721         Button helpButton,pos={400,3},size={25,20},proc=ShowPatchHelp,title="?" 
    722         Button helpButton,help={"Show the help file for patching raw data headers"} 
    723         PopupMenu PatchPopup,pos={4,37},size={156,19},proc=PatchPopMenuProc,title="File(s) to Patch" 
    724         PopupMenu PatchPopup,help={"The displayed file is the one that will be edited. The entire list will be edited if \"Change All..\" is selected. \r If no items, or the wrong items appear, click on the popup to refresh. \r List items are selected from the file based on MatchString"} 
    725         PopupMenu PatchPopup,mode=1,popvalue="none",value= #"root:Packages:NIST:VSANS:Globals:Patch:gPatchList" 
    726 //      Button SHButton,pos={324,37},size={100,20},proc=ShowHeaderButtonProc,title="Show Header" 
    727 //      Button SHButton,help={"This will display the header of the file indicated in the popup menu."} 
    728         Button CHButton,pos={314,37},size={110,20},proc=ChangeHeaderButtonProc,title="Change Header" 
    729         Button CHButton,help={"This will change the checked values (ONLY) in the single file selected in the popup."} 
    730         SetVariable PMStr,pos={6,63},size={174,13},proc=SetMatchStrProc,title="Match String" 
    731         SetVariable PMStr,help={"Enter the search string to narrow the list of files. \"*\" is the wildcard character. After entering, \"pop\" the menu to refresh the file list."} 
    732         SetVariable PMStr,font="Courier",fSize=10 
    733         SetVariable PMStr,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPatchMatchStr 
    734         Button ChAllButton,pos={245,60},size={180,20},proc=ChAllHeadersButtonProc,title="Change All Headers in List" 
    735         Button ChAllButton,help={"This will change the checked values (ONLY) in ALL of the files in the popup list, not just the top file. If the \"change\" checkbox for the item is not checked, nothing will be changed for that item."} 
    736         Button DoneButton,pos={314,85},size={110,20},proc=DoneButtonProc,title="Done Patching" 
    737         Button DoneButton,help={"When done Patching files, this will close this control panel."} 
    738 //      Button cat_short,pos={9,485},size={100,20},proc=DoCatShort,title="File Catalog" 
    739 //      Button cat_short,help={"Use this button to generate a notebook with file header information. Very useful for identifying files."} 
    740         CheckBox check0,pos={18,80},size={40,15},title="Run #",value= 1,mode=1,proc=MatchCheckProc 
    741         CheckBox check1,pos={78,80},size={40,15},title="Text",value= 0,mode=1,proc=MatchCheckProc 
    742         CheckBox check2,pos={138,80},size={40,15},title="SDD",value= 0,mode=1,proc=MatchCheckProc 
    743  
    744         Variable base=111,step=18 
    745         SetVariable PS1,pos={42,base},size={340,13},proc=SetLabelVarProc,title="label" 
    746         SetVariable PS1,help={"Current sample label"},font="Courier",fSize=10 
    747         SetVariable PS1,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPS1 
    748         SetVariable PV1,pos={42,base+step},size={340,13},title="Transmission" 
    749         SetVariable PV1,help={"Current transmission\rvalue"},font="Courier",fSize=10 
    750         SetVariable PV1,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV1 
    751         SetVariable PV2,pos={42,base+2*step},size={340,13},title="Thickness (cm)" 
    752         SetVariable PV2,help={"Current sample thickness, in units of centimeters"} 
    753         SetVariable PV2,font="Courier",fSize=10 
    754         SetVariable PV2,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV2 
    755  
    756         SetVariable PV5,pos={42,base+3*step},size={340,13},title="Attenuator number" 
    757         SetVariable PV5,help={"attenuator number present during data collection"} 
    758         SetVariable PV5,font="Courier",fSize=10 
    759         SetVariable PV5,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV5 
    760         SetVariable PV6,pos={42,base+4*step},size={340,13},title="Counting time (s)",font="Courier",fSize=10 
    761         SetVariable PV6,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV6 
    762         SetVariable PV6,help={"total counting time in seconds"} 
    763         SetVariable PV7,pos={42,base+5*step},size={340,13},title="Monitor count",font="Courier",fSize=10 
    764         SetVariable PV7,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV7 
    765         SetVariable PV7,help={"total monitor counts"} 
    766  
    767         SetVariable PV10,pos={42,base+6*step},size={340,13},title="Wavelength (A)",font="Courier",fSize=10 
    768         SetVariable PV10,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV10 
    769         SetVariable PV10,help={"neutron wavelength in angstroms"} 
    770         SetVariable PV11,pos={42,base+7*step},size={340,13},title="Wavelength spread (dL/L)",font="Courier",fSize=10 
    771         SetVariable PV11,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV11 
    772         SetVariable PV11,help={"wavelength spread (delta lambda)/lambda"} 
    773  
    774         SetVariable PV14,pos={42,base+8*step},size={340,13},title="Source aperture diameter (mm)",font="Courier",fSize=10 
    775         SetVariable PV14,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV14 
    776         SetVariable PV14,help={"source aperture diameter, in millimeters"} 
    777         SetVariable PV15,pos={42,base+9*step},size={340,13},title="Sample aperture diameter (mm)",font="Courier",fSize=10 
    778         SetVariable PV15,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV15 
    779         SetVariable PV15,help={"sample aperture diameter, in millimeters"} 
    780         SetVariable PV16,pos={42,base+10*step},size={340,13},title="Source to sample distance (cm)",font="Courier",fSize=10 
    781         SetVariable PV16,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV16 
    782         SetVariable PV16,help={"Source to sample distance in centimeters"} 
    783          
    784         SetVariable PV18,pos={42,base+11*step},size={340,13},title="Beamstop diameter (mm)",font="Courier",fSize=10 
    785         SetVariable PV18,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV18 
    786         SetVariable PV18,help={"beamstop diamter, in millimeters (1 inch = 25.4mm)"} 
    787 // TODO: add functions for these, make the intent a popup (since it's an enumerated type) 
    788         SetVariable PS2,pos={42,base+12*step},size={340,13},title="DIV file name"//,proc=SetLabelVarProc 
    789         SetVariable PS2,help={"DIV file name"},font="Courier",fSize=10 
    790         SetVariable PS2,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPS2 
    791         SetVariable PS3,pos={42,base+13*step},size={340,13},title="Intent"//,proc=SetLabelVarProc 
    792         SetVariable PS3,help={"File Intent"},font="Courier",fSize=10 
    793         SetVariable PS3,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPS3 
    794         PopupMenu popup_1,pos={42,base+14*step},size={109,20},title="File intent" 
    795         PopupMenu popup_1,mode=1,popvalue="SCATTER",value= #"\"SCATTER;EMPTY;BLOCKED BEAM;TRANS;EMPTY BEAM;\"" 
    796          
    797         CheckBox checkPS1,pos={18,base},size={20,20},title="" 
    798         CheckBox checkPS1,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    799         CheckBox checkPV1,pos={18,base+step},size={20,20},title="" 
    800         CheckBox checkPV1,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    801         CheckBox checkPV2,pos={18,base+2*step},size={20,20},title="" 
    802         CheckBox checkPV2,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    803  
    804         CheckBox checkPV5,pos={18,base+3*step},size={20,20},title="" 
    805         CheckBox checkPV5,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    806         CheckBox checkPV6,pos={18,base+4*step},size={20,20},title="" 
    807         CheckBox checkPV6,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    808         CheckBox checkPV7,pos={18,base+5*step},size={20,20},title="",value=0 
    809         CheckBox checkPV7,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    810  
    811         CheckBox checkPV10,pos={18,base+6*step},size={20,20},title="",value=0 
    812         CheckBox checkPV10,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    813         CheckBox checkPV11,pos={18,base+7*step},size={20,20},title="",value=0 
    814         CheckBox checkPV11,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    815  
    816         CheckBox checkPV14,pos={18,base+8*step},size={20,20},title="",value=0 
    817         CheckBox checkPV14,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    818         CheckBox checkPV15,pos={18,base+9*step},size={20,20},title="",value=0 
    819         CheckBox checkPV15,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    820         CheckBox checkPV16,pos={18,base+10*step},size={20,20},title="",value=0 
    821         CheckBox checkPV16,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    822  
    823         CheckBox checkPV18,pos={18,base+11*step},size={20,20},title="",value=0 
    824         CheckBox checkPV18,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    825         CheckBox checkPS2,pos={18,base+12*step},size={20,20},title="",value=0 
    826         CheckBox checkPS2,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    827         CheckBox checkPS3,pos={18,base+13*step},size={20,20},title="",value=0 
    828         CheckBox checkPS3,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    829  
    830  
    831  
    832  
    833 // put these in a tabbed? section for the 9 different panels 
    834 // will it be able to patch all "FL" with the proper values, then all "FR", etc. to batchwise correct files? 
    835  
    836         base = base+19*step 
    837         PopupMenu popup_0,pos={30,base-step-10},size={109,20},title="Detector Panel",proc=PatchPopMenuProc 
    838         PopupMenu popup_0,mode=1,popvalue="FL",value= #"\"FL;FR;FT;FB;MR;ML;MT;MB;B;\"" 
    839  
    840         SetVariable PV3,pos={42,base},size={340,13},title="Beamcenter X" 
    841         SetVariable PV3,help={"Current X-position of the beamcenter, in pixels"} 
    842         SetVariable PV3,font="Courier",fSize=10 
    843         SetVariable PV3,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV3 
    844         SetVariable PV4,pos={42,base+step},size={340,13},title="Beamcenter Y" 
    845         SetVariable PV4,help={"Current Y-position of the beamcenter, in pixels"} 
    846         SetVariable PV4,font="Courier",fSize=10 
    847         SetVariable PV4,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV4 
    848  
    849  
    850         SetVariable PV17,pos={42,base+2*step},size={340,13},title="Detector offset (mm)",font="Courier",fSize=10 
    851         SetVariable PV17,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV17 
    852         SetVariable PV17,help={"Detector offset, in millimeters"} 
    853         SetVariable PV19,pos={42,base+3*step},size={340,13},title="Sample to detector distance (cm)",font="Courier",fSize=10 
    854         SetVariable PV19,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV19 
    855         SetVariable PV19,help={"sample to detector distance, in centimeters"} 
    856          
    857         SetVariable PV8,pos={42,base+4*step},size={340,13},title="Detector count",font="Courier",fSize=10 
    858         SetVariable PV8,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV8 
    859         SetVariable PV8,help={"total detector counts"} 
    860  
     1150 
     1151        if ((selWave[1][0] & 2^4) != 0)         // "background_file_name" 
     1152                str = listWave[1][2] 
     1153                err = V_writeBackgroundFileName(fname,str) 
     1154        endif    
     1155         
     1156        if ((selWave[2][0] & 2^4) != 0)         //"empty_file_name" 
     1157                str = listWave[2][2] 
     1158                err = V_writeEmptyFileName(fname,str) 
     1159        endif    
     1160         
     1161        if ((selWave[3][0] & 2^4) != 0)         //"sensitivity_file_name" 
     1162                str = listWave[3][2] 
     1163                err = V_writeSensitivityFileName(fname,str) 
     1164        endif    
     1165         
     1166        if ((selWave[4][0] & 2^4) != 0)         //"mask_file_name" 
     1167                str = listWave[4][2] 
     1168                err = V_writeMaskFileName(fname,str) 
     1169        endif    
     1170         
     1171        if ((selWave[5][0] & 2^4) != 0)         //"transmission_file_name" 
     1172                str = listWave[5][2] 
     1173                err = V_writeTransmissionFileName(fname,str) 
     1174        endif    
     1175 
     1176        if ((selWave[6][0] & 2^4) != 0)         //"intent" 
     1177                str = listWave[6][2] 
     1178                err = V_writeReductionIntent(fname,str) 
     1179        endif    
     1180         
     1181        if ((selWave[7][0] & 2^4) != 0)         //"file_purpose (polSANS)" 
     1182                str = listWave[7][2] 
     1183                err = V_writePolReduction_purpose(fname,str) 
     1184        endif            
     1185 
     1186        if ((selWave[8][0] & 2^4) != 0)         //"group_id (sample)" 
     1187                val = str2num(listWave[8][2]) 
     1188                err = V_writeReduction_group_ID(fname,val) 
     1189        endif    
     1190         
     1191        if ((selWave[9][0] & 2^4) != 0)         //"box_count" 
     1192                val = str2num(listWave[9][2]) 
     1193                err = V_writeBoxCounts(fname,val) 
     1194        endif    
     1195         
     1196        if ((selWave[10][0] & 2^4) != 0)                //"box_count_error" 
     1197                val = str2num(listWave[10][2]) 
     1198                err = V_writeBoxCountsError(fname,val) 
     1199        endif    
     1200         
     1201        if ((selWave[11][0] & 2^4) != 0)                //"whole_trans" 
     1202                val = str2num(listWave[11][2]) 
     1203                err = V_writeSampleTransWholeDetector(fname,val) 
     1204        endif    
     1205         
     1206        if ((selWave[12][0] & 2^4) != 0)                //"whole_trans_error" 
     1207                val = str2num(listWave[12][2]) 
     1208                err = V_writeSampleTransWholeDetErr(fname,val) 
     1209        endif    
     1210         
     1211         
    8611212                 
    862         CheckBox checkPV3,pos={18,base},size={20,20},title="" 
    863         CheckBox checkPV3,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    864         CheckBox checkPV4,pos={18,base+step},size={20,20},title="" 
    865         CheckBox checkPV4,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    866  
    867         CheckBox checkPV8,pos={18,base+2*step},size={20,20},title="",value=0 
    868         CheckBox checkPV8,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    869  
    870         CheckBox checkPV17,pos={18,base+3*step},size={20,20},title="",value=0 
    871         CheckBox checkPV17,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    872  
    873         CheckBox checkPV19,pos={18,base+4*step},size={20,20},title="",value=0 
    874         CheckBox checkPV19,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    875  
    876 //      SetVariable PV9,pos={42,273},size={340,13},title="Trans. det. count",font="Courier",fSize=10 
    877 //      SetVariable PV9,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV9 
    878 //      SetVariable PV9,help={"Transmission\r detector counts"} 
    879 //      SetVariable PV12,pos={42,327},size={340,13},title="Temperature (C)",font="Courier",fSize=10 
    880 //      SetVariable PV12,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV12 
    881 //      SetVariable PV12,help={"Set point temperature in centigrade"} 
    882 //      SetVariable PV13,pos={42,345},size={340,13},title="Magnetic field (G)",font="Courier",fSize=10 
    883 //      SetVariable PV13,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:Patch:gPV13 
    884 //      SetVariable PV13,help={"magnetic field strength units?"} 
    885 //      CheckBox checkPV9,pos={18,270},size={20,20},title="",value=0 
    886 //      CheckBox checkPV9,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    887 //      CheckBox checkPV12,pos={18,324},size={20,20},title="",value=0 
    888 //      CheckBox checkPV12,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    889 //      CheckBox checkPV13,pos={18,342},size={20,20},title="",value=0 
    890 //      CheckBox checkPV13,help={"If checked, the entered value will be written to the data file if either of the \"Change..\" buttons is pressed."},value=0 
    891  
    892 End 
    893  
    894  
    895 Function MatchCheckProc(name,value) 
     1213                 
     1214        return(0) 
     1215End 
     1216 
     1217// SAMPLE 
     1218Function V_WriteHeaderForPatch_2(fname) 
     1219        String fname 
     1220         
     1221        Variable val,err 
     1222        String str 
     1223                 
     1224        Wave/T listWave = root:Packages:NIST:VSANS:Globals:Patch:PP_ListWave 
     1225        Wave selWave = root:Packages:NIST:VSANS:Globals:Patch:PP_selWave 
     1226 
     1227        // test bit 4 to see if the checkbox is selected 
     1228        if ((selWave[0][0] & 2^4) != 0)         // Test if bit 4 is set 
     1229                str = listWave[0][2]                    // "description" 
     1230                err = V_writeSampleDescription(fname,str)                
     1231        endif 
     1232 
     1233        if ((selWave[1][0] & 2^4) != 0)         // "thickness" 
     1234                val = str2num(listWave[1][2]) 
     1235                err = V_writeSampleThickness(fname,val) 
     1236        endif    
     1237         
     1238        if ((selWave[2][0] & 2^4) != 0)         //"transmission" 
     1239                val = str2num(listWave[2][2]) 
     1240                err = V_writeSampleTransmission(fname,val) 
     1241        endif    
     1242         
     1243        if ((selWave[3][0] & 2^4) != 0)         //"transmission_error" 
     1244                val = str2num(listWave[3][2]) 
     1245                err = V_writeSampleTransError(fname,val) 
     1246        endif    
     1247         
     1248        return(0) 
     1249End 
     1250 
     1251// INSTRUMENT 
     1252Function V_WriteHeaderForPatch_3(fname) 
     1253        String fname 
     1254 
     1255        Variable val,err 
     1256        String str 
     1257                 
     1258        Wave/T listWave = root:Packages:NIST:VSANS:Globals:Patch:PP_ListWave 
     1259        Wave selWave = root:Packages:NIST:VSANS:Globals:Patch:PP_selWave 
     1260 
     1261        // test bit 4 to see if the checkbox is selected 
     1262        if ((selWave[0][0] & 2^4) != 0)         // Test if bit 4 is set 
     1263                val = str2num(listWave[0][2])                   // "attenuator_transmission" 
     1264                err = V_writeAttenuator_transmission(fname,val)          
     1265        endif 
     1266 
     1267        if ((selWave[1][0] & 2^4) != 0)         // "attenuator_transmission_error" 
     1268                val = str2num(listWave[1][2]) 
     1269                err = V_writeAttenuator_trans_err(fname,val) 
     1270        endif    
     1271         
     1272        if ((selWave[2][0] & 2^4) != 0)         //"monochromator type" 
     1273                str = listWave[2][2] 
     1274                err = V_writeMonochromatorType(fname,str) 
     1275        endif    
     1276         
     1277        if ((selWave[3][0] & 2^4) != 0)         //"wavelength" 
     1278                val = str2num(listWave[3][2]) 
     1279                err = V_writeWavelength(fname,val) 
     1280        endif    
     1281 
     1282        if ((selWave[4][0] & 2^4) != 0)         //"wavelength_spread" 
     1283                val = str2num(listWave[4][2]) 
     1284                err = V_writeWavelength_spread(fname,val) 
     1285        endif    
     1286         
     1287        if ((selWave[5][0] & 2^4) != 0)         //"distance (source aperture)" 
     1288                val = str2num(listWave[5][2]) 
     1289                err = V_writeSourceAp_distance(fname,val) 
     1290        endif            
     1291         
     1292         
     1293        return(0) 
     1294End 
     1295 
     1296// TODO -- not yet implemented 
     1297Function V_WriteHeaderForPatch_4(fname) 
     1298        String fname 
     1299         
     1300        return(0) 
     1301End 
     1302 
     1303// TODO -- not yet implemented 
     1304Function V_WriteHeaderForPatch_5(fname) 
     1305        String fname 
     1306         
     1307        return(0) 
     1308End 
     1309 
     1310 
     1311// control the display of the radio buttons 
     1312Function V_MatchCheckProc(name,value) 
    8961313        String name 
    8971314        Variable value 
     
    9131330        CheckBox check1,value= gRadioVal==2 
    9141331        CheckBox check2,value= gRadioVal==3 
     1332        return(0) 
    9151333End 
    9161334 
    9171335//This function will read only the selected values editable in the patch panel 
    918 //The values read are passed to the panel through the global variables 
    919 //the function WriteHeaderForPatch() MUST mirror this set of reads, or nothing can be updated 
    920 // 
    921 //fname is the full path:name;vers to open the file 
    922 // 
    923 Function ReadHeaderForPatch(fname) 
     1336// 
     1337// -- TODO -- 
     1338// re-write this to be tab-aware. ShowHeaderForPatch() calls this, but does nothing 
     1339// to update the tab content. Figure out which function is in charge, and update the content. 
     1340// 
     1341Function V_ReadHeaderForPatch(fname) 
    9241342        String fname 
    9251343         
    926         //assign to the globals for display in the panel 
    927  
    928         // TODO -- replace ALL (get) calls below 
    929         // TODO -- verify that these calls are really returning what is expected by the checkbox label 
    930         // -- some are clearly wrong for VSANS 
    931          
    932         // TODO -- remove the hard-wired detStr. This will require some serious interface thought. 
    933         ControlInfo popup_0 
    934         String detStr = S_value 
    935          
    936         String/G root:Packages:NIST:VSANS:Globals:Patch:gPS1= V_getSampleDescription(fname) 
    937  
    938         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV1 = V_getSampleTransmission(fname) 
    939         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV2 = V_getSampleThickness(fname) 
    940  
    941         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV5 = V_getAttenThickness(fname) 
    942         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV6 = V_getCount_Time(fname) 
    943         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV7 = V_getMonitorCount(fname) 
    944  
    945 //      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV9 = -999           // TODO no equivalent for VSANS to --getTransDetectorCounts(fname) 
    946         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV10 = V_getWavelength(fname) 
    947         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV11 = V_getWavelength_Spread(fname) 
    948 //      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV12 = -999 // TODO no equivalent yet for -- getTemperature(fname) 
    949 //      Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV13 = -999 // TODO no equivalent yet for -- getFieldStrength(fname) 
    950         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV14 = str2num(V_getSourceAp_size(fname)) 
    951         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV15 = V_getSampleAp2_size(fname) 
    952         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV16 = -999 // TODO no equivalent yet for -- getSourceToSampleDist(fname) 
    953         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV18 = V_getBeamStopC3_size(fname) 
    954  
    955 // per detector information 
    956         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV3 = V_getDet_beam_center_x(fname,detStr) 
    957         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV4 = V_getDet_beam_center_y(fname,detStr) 
    958         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV17 = V_getDet_LateralOffset(fname,detStr)  //TODO lateral vs vertical offset 
    959         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV19 = V_getDet_ActualDistance(fname,detStr) 
    960         Variable/G root:Packages:NIST:VSANS:Globals:Patch:gPV8 = V_getDet_IntegratedCount(fname,detStr) 
    961                  
    962         String/G root:Packages:NIST:VSANS:Globals:Patch:gPS2= V_getSensitivityFileName(fname)   //DIV file name 
    963         String/G root:Packages:NIST:VSANS:Globals:Patch:gPS3= V_getReduction_intent(fname)              //intent 
     1344         
     1345        // figure out which is the active tab, then let PatchTabProc fill it in 
     1346        ControlInfo/W=V_Patch_Panel PatchTab 
     1347        V_PatchTabProc("",V_Value)       
    9641348         
    9651349        Return 0 
    9661350End 
    9671351 
    968 Function ShowPatchHelp(ctrlName) : ButtonControl 
     1352Function V_ShowPatchHelp(ctrlName) : ButtonControl 
    9691353        String ctrlName 
    9701354//      DisplayHelpTopic/Z/K=1 "VSANS Data Reduction Tutorial[Patch File Headers]" 
     
    9801364//useful for patching a series of runs with the same beamcenters, or transmissions 
    9811365// 
    982 Function ChAllHeadersButtonProc(ctrlName) : ButtonControl 
     1366Function V_ChAllHeadersButtonProc(ctrlName) : ButtonControl 
    9831367        String ctrlName 
    9841368         
     
    9941378        SVAR list = root:Packages:NIST:VSANS:Globals:Patch:gPatchList 
    9951379        Variable numitems,ii 
     1380        String partialName="", tempName = "" 
     1381        Variable ok 
     1382         
    9961383        numitems = ItemsInList(list,";") 
    9971384         
     
    10001387        Endif 
    10011388         
    1002         //read the (6) checkboxes to determine what changes to make 
    1003         //The order/length of these waves are crucial!, set by nvars      
    1004         String partialName="", tempName = "" 
    1005         Variable ok,nvars = 20 
    1006          
    1007 //      Make/O/N=(nvars) tempChange 
    1008 //      Wave w=tempchange 
    1009 //      GetCheckBoxesState(w,nvars) 
    1010         //Print "w[0] = ",w[0] 
    1011          
    1012 //      //Get the current values in each of the fields - to pass to Write() as a textwave 
    1013 //      Make/O/T/N=(nvars) tempValues 
    1014 //      Wave/T wt=tempValues 
    1015 //      //initialize textwave 
    1016 //      ii=0 
    1017 //      do 
    1018 //              wt[ii] = "" 
    1019 //              ii+=1 
    1020 //      while(ii<nvars) 
    1021 //      GetEditedSetVarBoxes(wt,nvars) 
    1022          
    1023         //loop through all of the files in the list, applying changes as dictated by w and wt waves 
     1389        // loop through all of the files 
    10241390        ii=0 
    10251391        do 
     
    10401406                else 
    10411407                   //go write the changes to the file 
    1042 //                 WriteHeaderForPatch(tempName,w,wt) 
    1043                    WriteHeaderForPatch(tempName) 
     1408                        // which tab is active? 
     1409                        ControlInfo/W=V_Patch_Panel PatchTab 
     1410                         
     1411                        switch(V_Value) // numeric switch 
     1412                                case 0: // execute if case matches expression 
     1413                                        V_WriteHeaderForPatch_0(tempName) 
     1414                                        break           // exit from switch 
     1415                                case 1:  
     1416                                        V_WriteHeaderForPatch_1(tempName) 
     1417                                        break 
     1418                                case 2:  
     1419                                        V_WriteHeaderForPatch_2(tempName) 
     1420                                        break 
     1421                                case 3:  
     1422                                        V_WriteHeaderForPatch_3(tempName) 
     1423                                        break 
     1424                                case 4:  
     1425                                        V_WriteHeaderForPatch_4(tempName) 
     1426                                        break 
     1427                                case 5:  
     1428                                        V_WriteHeaderForPatch_5(tempName) 
     1429                                        break 
     1430                                default:                        // optional default expression executed 
     1431                                        Abort "Tab not found - V_ChAllHeadersButtonProc" 
     1432                        endswitch 
    10441433                Endif 
    10451434                 
    10461435                ii+=1 
    10471436        while(ii<numitems) 
    1048          
    1049         //clean up wave before leaving 
    1050         KillWaves/Z w,wt 
    1051                  
     1437 
     1438 
     1439        //after writing the changes to the file 
     1440        // clean up, to force a reload from disk 
     1441        V_CleanupData_w_Progress(0,1) 
     1442 
     1443        return(0) 
    10521444End 
    10531445 
     
    10571449// cleans out the RawVSANS folder on closing  
    10581450// 
    1059 Function DoneButtonProc(ctrlName) : ButtonControl 
     1451Function V_DoneButtonProc(ctrlName) : ButtonControl 
    10601452        String ctrlName 
    10611453 
     
    10691461End 
    10701462 
    1071 //resets the global string corresponding to the sample label  
    1072 //updates when new text is entered 
    1073 // 
    1074 Function SetLabelVarProc(ctrlName,varNum,varStr,varName) : SetVariableControl 
    1075         String ctrlName 
    1076         Variable varNum 
    1077         String varStr 
    1078         String varName 
    1079          
    1080         //reset the global variable to the entered text so that it can be relayed to the  
    1081         //write() routine. Only the TEXT SetVariable control needs to be handled this way 
    1082          
    1083         String/G root:Packages:NIST:VSANS:Globals:Patch:gPS1 = varStr 
    1084  
    1085 End 
    1086  
     1463 
     1464 
Note: See TracChangeset for help on using the changeset viewer.