Ignore:
Timestamp:
Feb 17, 2017 1:55:05 PM (6 years ago)
Author:
srkline
Message:

many additions.

Moved unused igor/nexus testing files to Vx_ prefix since they're garbage. Pulled out the useful bits for mask and div R/W and moved those to theire appropriate procedures.

Testing the simple correction of data, only tested basic subtraction. All of it still needs to be verified since I don't have any real header numbers and units yet.

Adjusted the columns on the file catalog to be more appropriate, and added a hook to allow loading of raw data files directly from the table and a popup contextual menu. May add more functionality to it later.

Corrected how the 1D data is plotted so that it correctly uses the binning type. I(q) save now also uses the binning as specified.

File:
1 edited

Legend:

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

    r1022 r1023  
    5454        FakeTabClick(1) 
    5555        FakeTabClick(0) 
     56 
     57        LogLinDisplayPref()             // resets the display depending on the preference state 
    5658         
    5759        // either clear the status, or fake a click 
     
    6971         
    7072end 
     73 
     74Function LogLinDisplayPref() 
     75 
     76        // get the state of the log/lin button, and make sure preferences are obeyed 
     77        // log/lin current state is in the S_UserData string (0=linear, 1=log) 
     78        ControlInfo/W=VSANS_Data button_log 
     79        Variable curState 
     80        curState = str2num(S_UserData) 
     81 
     82        NVAR gLogScalingAsDefault = root:Packages:NIST:VSANS:Globals:gLogScalingAsDefault 
     83        if(curState != gLogScalingAsDefault) 
     84                STRUCT WMButtonAction ba 
     85                ba.eventCode = 2                //fake mouse click 
     86                LogLinButtonProc(ba) 
     87        endif 
     88         
     89        return(0) 
     90end 
     91 
    7192 
    7293// 
     
    92113End 
    93114 
     115 
    94116// TODO 
    95117// 
    96 // -- fill in the proper window title in the DoWindow/T command 
     118// -- now that the sliders work, label them and move them to a better location 
     119// -- logical location for all of the buttons 
     120// -- add raw data load button, load/draw mask button 
     121// x- fill in the proper window title in the DoWindow/T command 
    97122// -- add help text for all of the controls 
     123// -- tab order? can I set this? 
    98124// 
    99125Window VSANS_DataPanel() : Panel 
     
    126152 
    127153        TabControl tab0,pos={13,41},size={572,617},proc=VDataTabProc,tabLabel(0)="Front" 
    128         TabControl tab0,tabLabel(1)="Middle",tabLabel(2)="Back",value= 2 
     154        TabControl tab0,tabLabel(1)="Middle",tabLabel(2)="Back",value= 2,focusRing=0 
    129155 
    130156// on the side   
     
    136162        Button button_tab_p,pos={648,81},size={50,20},proc=Tab_p_ButtonProc,title="Tab >" 
    137163        Button button_isolate,pos={606,114},size={70,20},proc=IsolateButtonProc,title="Isolate" 
     164        Button button_toWork,pos={770,113},size={70,20},proc=ToWorkFileButtonProc,title="to WORK" 
    138165 
    139166        TitleBox title_file,pos={606,178},size={76,20},variable= root:Packages:NIST:VSANS:Globals:gLastLoadedFile 
     
    142169         
    143170        Button button_tagFile,pos={603,412},size={70,20},proc=TagFileButtonProc,title="Tag File" 
     171        Button button_tagFile,disable=2 
    144172        Button button_saveIQ,pos={720,412},size={70,20},proc=SaveIQ_ButtonProc,title="Save I(Q)" 
    145173        Button button_BeamCtr,pos={603,450},size={70,20},proc=BeamCtrButtonProc,title="Beam Ctr" 
     
    212240 
    213241// 
    214 // event code 4 = mouse moved 
     242// event code 4: mouse moved 
     243// event code 11: keyboard events 
    215244//  
    216245// mouse moved is the only event that I really care about for the data display. 
    217246// 
    218 // TODO 
     247// TODO: 
    219248// -- figure out how to respond only to events in the main window 
    220249// -- figure out which is the correct image to respond "from" 
     250// -- More complete documentation of how the hook is identifying what graph is "under" the mouse 
     251//    AND what assumptions are behind this identification 
     252// 
    221253// 
    222254Function VSANSDataHook(s) 
     
    240272// TODO (Way in the future -- I could make the small graphs into "buttons" by responding to a "mouse up" (not down) 
    241273//    that hits in one of the small graph areas, and treat that as a click on that tab 
     274// -- instead of this, I can try to get the focus rectangle to work more easily to move with the TAB, 
     275//    if I can intercept the keystroke (event 11), see below. 
    242276// 
    243277                        break 
     
    378412                        break 
    379413                         
     414                        case 11: // keyboard event 
     415                                // TODO -- figure out why I'm not getting the TAB keystroke 
     416                                //  -- I want to be able to use the tab to change the focus only between File <.> and Tab > buttons, not everything 
     417                                // see the help file section "Keyboard Events" for an example and "WMWinHookStruct" 
     418                                 
     419                                //Print "key code = ",s.specialKeyCode 
     420                                //hookresult = 1                //if non-zero, we handled it and Igor will ignore it 
     421                                break 
    380422                // And so on . . . 
    381423        endswitch 
     
    384426End 
    385427 
     428 
     429// ******** 
     430// 
     431// this procedure does most of the work for drawing the panels, setting the proper log/lin 
     432// scaling, the color scale, and the location based on the active tab 
    386433// 
    387434//lots to to here: 
     
    397444//  x- remove the dependency on VCALC being initialized first, and using dummy waves from there... 
    398445// 
    399 // -- can I use "ReplaceWave" to do this? 
     446// 
    400447Function VDataTabProc(tca) : TabControl 
    401448        STRUCT WMTabControlAction &tca 
     
    413460                         
    414461                        SVAR dataType = root:Packages:NIST:VSANS:Globals:gCurDispType 
    415 // make sure log scaling is correct                      
     462                         
     463// make sure log scaling is correct 
    416464                        NVAR state = root:Packages:NIST:VSANS:Globals:gIsLogScale 
    417465                        if(State == 0) 
     
    428476                        // -- only works for "B", since for M and F panels, all 4 data sets are named "data" 
    429477                        // in their respective folders... 
    430  
     478                         
     479                         
     480                        // get the slider values for the color mapping 
     481                        Variable lo,hi,lo_B,hi_B 
     482                        Variable lo_MT,lo_MB,lo_MR,lo_ML 
     483                        Variable lo_FT,lo_FB,lo_FR,lo_FL 
     484                        Variable hi_MT,hi_MB,hi_MR,hi_ML 
     485                        Variable hi_FT,hi_FB,hi_FR,hi_FL 
     486                        ControlInfo slider_lo 
     487                        lo = V_Value 
     488                        ControlInfo slider_hi 
     489                        hi = V_Value 
     490                         
     491                         
    431492                        String tmpStr 
    432493                        Variable ii 
     
    448509                                if(V_flag == 0)         // 0 == data is not displayed, so append it 
    449510                                        AppendImage/W=VSANS_Data#det_panelsB det_B 
    450                                         ModifyImage/W=VSANS_Data#det_panelsB ''#0 ctab= {*,*,ColdWarm,0} 
     511                                        lo_B = lo*(WaveMax(det_B) - WaveMin(det_B)) + WaveMin(det_B) 
     512                                        hi_B = hi*(WaveMax(det_B) - WaveMin(det_B)) + WaveMin(det_B) 
     513                                        ModifyImage/W=VSANS_Data#det_panelsB ''#0 ctab= {lo_B,hi_B,ColdWarm,0}          // don't autoscale {*,*,ColdWarm,0} 
    451514                                endif 
    452515                                MoveSubWindow/W=VSANS_Data#det_panelsB fnum=(50,185,517,620) 
     
    489552                                        AppendImage/W=VSANS_Data#det_panelsM det_ML 
    490553                                        AppendImage/W=VSANS_Data#det_panelsM det_MR 
    491                                         ModifyImage/W=VSANS_Data#det_panelsM ''#0 ctab= {*,*,ColdWarm,0}                // ''#n means act on the nth image (there are 4) 
    492                                         ModifyImage/W=VSANS_Data#det_panelsM ''#1 ctab= {*,*,ColdWarm,0} 
    493                                         ModifyImage/W=VSANS_Data#det_panelsM ''#2 ctab= {*,*,ColdWarm,0} 
    494                                         ModifyImage/W=VSANS_Data#det_panelsM ''#3 ctab= {*,*,ColdWarm,0} 
     554                                        lo_MT = lo*(WaveMax(det_MT) - WaveMin(det_MT)) + WaveMin(det_MT) 
     555                                        hi_MT = hi*(WaveMax(det_MT) - WaveMin(det_MT)) + WaveMin(det_MT) 
     556                                        lo_MB = lo*(WaveMax(det_MB) - WaveMin(det_MB)) + WaveMin(det_MB) 
     557                                        hi_MB = hi*(WaveMax(det_MB) - WaveMin(det_MB)) + WaveMin(det_MB) 
     558                                        lo_ML = lo*(WaveMax(det_ML) - WaveMin(det_ML)) + WaveMin(det_ML) 
     559                                        hi_ML = hi*(WaveMax(det_ML) - WaveMin(det_ML)) + WaveMin(det_ML) 
     560                                        lo_MR = lo*(WaveMax(det_MR) - WaveMin(det_MR)) + WaveMin(det_MR) 
     561                                        hi_MR = hi*(WaveMax(det_MR) - WaveMin(det_MR)) + WaveMin(det_MR) 
     562                                         
     563                                        ModifyImage/W=VSANS_Data#det_panelsM ''#0 ctab= {lo_MT,hi_MT,ColdWarm,0}                // ''#n means act on the nth image (there are 4) 
     564                                        ModifyImage/W=VSANS_Data#det_panelsM ''#1 ctab= {lo_MB,hi_MB,ColdWarm,0} 
     565                                        ModifyImage/W=VSANS_Data#det_panelsM ''#2 ctab= {lo_ML,hi_ML,ColdWarm,0} 
     566                                        ModifyImage/W=VSANS_Data#det_panelsM ''#3 ctab= {lo_MR,hi_MR,ColdWarm,0} 
    495567                                endif 
    496568                                MoveSubWindow/W=VSANS_Data#det_panelsM fnum=(50,185,517,620) 
     
    536608                                        AppendImage/W=VSANS_Data#det_panelsF det_FL 
    537609                                        AppendImage/W=VSANS_Data#det_panelsF det_FR 
    538                                         ModifyImage/W=VSANS_Data#det_panelsF ''#0 ctab= {*,*,ColdWarm,0} 
    539                                         ModifyImage/W=VSANS_Data#det_panelsF ''#1 ctab= {*,*,ColdWarm,0} 
    540                                         ModifyImage/W=VSANS_Data#det_panelsF ''#2 ctab= {*,*,ColdWarm,0} 
    541                                         ModifyImage/W=VSANS_Data#det_panelsF ''#3 ctab= {*,*,ColdWarm,0} 
     610                                        lo_FT = lo*(WaveMax(det_FT) - WaveMin(det_FT)) + WaveMin(det_FT) 
     611                                        hi_FT = hi*(WaveMax(det_FT) - WaveMin(det_FT)) + WaveMin(det_FT) 
     612                                        lo_FB = lo*(WaveMax(det_FB) - WaveMin(det_FB)) + WaveMin(det_FB) 
     613                                        hi_FB = hi*(WaveMax(det_FB) - WaveMin(det_FB)) + WaveMin(det_FB) 
     614                                        lo_FL = lo*(WaveMax(det_FL) - WaveMin(det_FL)) + WaveMin(det_FL) 
     615                                        hi_FL = hi*(WaveMax(det_FL) - WaveMin(det_FL)) + WaveMin(det_FL) 
     616                                        lo_FR = lo*(WaveMax(det_FR) - WaveMin(det_FR)) + WaveMin(det_FR) 
     617                                        hi_FR = hi*(WaveMax(det_FR) - WaveMin(det_FR)) + WaveMin(det_FR) 
     618                                         
     619                                        ModifyImage/W=VSANS_Data#det_panelsF ''#0 ctab= {lo_FT,hi_FT,ColdWarm,0} 
     620                                        ModifyImage/W=VSANS_Data#det_panelsF ''#1 ctab= {lo_FB,hi_FB,ColdWarm,0} 
     621                                        ModifyImage/W=VSANS_Data#det_panelsF ''#2 ctab= {lo_FL,hi_FL,ColdWarm,0} 
     622                                        ModifyImage/W=VSANS_Data#det_panelsF ''#3 ctab= {lo_FR,hi_FR,ColdWarm,0} 
    542623                                endif 
    543624                                MoveSubWindow/W=VSANS_Data#det_panelsF fnum=(50,185,517,620) 
     
    695776        return 0 
    696777End 
     778 
     779// 
     780// if the data display is RAW, convert to the specified WORK data type 
     781// 
     782// TODO 
     783// -- better error checking 
     784// -- if the data type is not RAW, can I Copy Folder instead? 
     785// 
     786Function ToWorkFileButtonProc(ba) : ButtonControl 
     787        STRUCT WMButtonAction &ba 
     788 
     789        switch( ba.eventCode ) 
     790                case 2: // mouse up 
     791                        // click code here 
     792                        //Convert_to_Workfile(newtype, doadd) // a proc 
     793                        Execute "Convert_to_Workfile()" 
     794 
     795                        break 
     796                case -1: // control being killed 
     797                        break 
     798        endswitch 
     799 
     800        return 0 
     801End 
     802 
    697803 
    698804// TODO 
     
    772878 
    773879// TODO: 
     880// x- link this to the preferences for the display. this is done in UpdateDisplayInformation (the main call) so that 
     881//     the panels are rescaled only once, rather than toggled three times (F, M, B) if I call from the tabProc 
    774882// -- come up with a better definition of the log lookup wave (> 1000 pts, what is the first point) 
    775883// -- make an equivalent linear wave 
     
    9621070                        if( sa.eventCode & 1 ) // value set 
    9631071                                Variable curval = sa.curval 
     1072                                ControlInfo tab0 
     1073                                FakeTabClick(V_Value) 
     1074                                 
     1075//                              ControlInfo slider_lo 
     1076//                              V_MakeImageLookupTables(10000,V_Value,curval) 
    9641077                        endif 
    9651078                        break 
     
    9841097                        if( sa.eventCode & 1 ) // value set 
    9851098                                Variable curval = sa.curval 
    986                         endif 
    987                         break 
    988         endswitch 
    989  
    990         return 0 
    991 End 
    992  
    993  
     1099                                ControlInfo tab0 
     1100                                FakeTabClick(V_Value) 
     1101 
     1102//                              ControlInfo slider_hi 
     1103//                              V_MakeImageLookupTables(10000,curval,V_Value) 
     1104                        endif 
     1105                        break 
     1106        endswitch 
     1107 
     1108        return 0 
     1109End 
     1110 
     1111 
Note: See TracChangeset for help on using the changeset viewer.