Ignore:
Timestamp:
May 9, 2017 1:56:29 PM (6 years ago)
Author:
srkline
Message:

Adding procedures to allow trimming of data sets before concatenation. This is different than SANS, since the trimming and scaling choices must be made before reduction is done, since they must be part of the reduction protocol - as all data sets I(q) are part of the same data file.

How this is handled is still very much a work in progress...

File:
1 edited

Legend:

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

    r1035 r1038  
    1414//  of the data reduction protocol - and anything in work folders will be lost 
    1515// 
     16 
     17 
     18//ksWorkFolderList 
     19 
     20//      String str,winStr="V_1D_Data" 
     21//      sprintf str,"(\"%s\",%d,\"%s\")",type,popNum,winStr 
     22// 
     23//      Execute ("V_Back_IQ_Graph"+str) 
     24//      Execute ("V_Middle_IQ_Graph"+str) 
     25//      Execute ("V_Front_IQ_Graph"+str) 
     26 
     27 
     28// draws the graph, but does not draw anything on it yet 
     29// 
     30// TODO: 
     31// -- make  the data folder list for the popup 
     32// -- make the data folder popup do the work of plotting (test for failure) 
     33// 
     34// -- make a button to show the default table, and set up dependencies to link to the graph display 
     35// -- have an "active" data set to trim, or make duplicates for all of the data sets 
     36// 
     37// -- button to convert the points to strings that can be used and written to data files? 
     38// 
     39// -- table is continually duplicated 
     40// -- AutoPosition the windows next to each other 
     41// -- (different)(not ugly) color for the control bar so it's distinguishable from the regular data plot 
     42// -- "Done" button that kills the root:ToTrim folder (may need to kill the dependency first) 
     43// 
     44Proc V_CombineDataGraph() 
     45 
     46        DoWindow/F V_1D_Combine 
     47        if(V_flag==0) 
     48                Variable num,ii 
     49                String detStr 
     50                 
     51                Display /W=(277,526,748,938)/N=V_1D_Combine/K=1 
     52 
     53                ControlBar 70 
     54                ModifyGraph cbRGB=(44000,44000,44000) 
     55                 
     56                PopupMenu popup1,pos={15,5},size={90,20},title="Data Folder" 
     57                PopupMenu popup1,help={"data folder"} 
     58                PopupMenu popup1,value= GetAList(4),proc=V_DataFolderPlotPop 
     59                 
     60                PopupMenu popup0,pos={200,5},size={70,20},title="Bin Type" 
     61                PopupMenu popup0,help={"binning type"} 
     62                PopupMenu popup0,value= ksBinTypeStr 
     63//              PopupMenu popup0,mode=1,proc=V_BinningModePopup 
     64 
     65                CheckBox check0,pos={18.00,36.00},size={57.00,16.00},proc=V_Plot1D_LogCheckProc,title="Log Axes" 
     66                CheckBox check0,value= 1 
     67 
     68                Button AllQ,pos={320,28},size={70,20},proc=V_AllQ_Plot_1D_ButtonProc,title="All Q" 
     69                Button AllQ,help={"Show the full q-range of the dataset"} 
     70                 
     71                Legend/C/N=text0/J/X=72.00/Y=60.00 
     72 
     73                //trust that the table is present? No, but don't overwrite the data in the waves 
     74                // unless any one of the three doesn't exist 
     75                if(exists("PanelNameW") == 0 || exists("Beg_pts") == 0 || exists("End_pts") == 0) 
     76                        Make/O/T/N=(ItemsInList(ksPanelBinTypeList)) PanelNameW 
     77                        Make/O/D/N=(ItemsInList(ksPanelBinTypeList)) Beg_pts 
     78                        Make/O/D/N=(ItemsInList(ksPanelBinTypeList)) End_pts 
     79                 
     80                        num = ItemsInList(ksPanelBinTypeList) 
     81                        ii=0 
     82                        do 
     83                                detStr = StringFromList(ii, ksPanelBinTypeList) 
     84                                Beg_pts[ii]  = NumberByKey(detStr, ksBinTrimBegDefault,"=",";") 
     85                                End_pts[ii] = NumberByKey(detStr, ksBinTrimEndDefault,"=",";") 
     86                                PanelNameW[ii] = detStr 
     87                                ii += 1 
     88                        while(ii<num) 
     89                         
     90                endif 
     91                 
     92                Edit/K=0 root:PanelNameW,root:Beg_pts,root:End_pts               
     93 
     94                Make/O/D/N=1 trimUpdate 
     95                trimUpdate := V_DummyUpdate(Beg_pts, End_pts) 
     96                 
     97//              PopupMenu ymodel,pos={150,5},size={71,20},title="y-axis" 
     98//              PopupMenu ymodel,help={"This popup selects how the y-axis will be linearized based on the chosen data"} 
     99//              PopupMenu ymodel,value= #"\"I;log(I);ln(I);1/I;I^a;Iq^a;I^a q^b;1/sqrt(I);ln(Iq);ln(Iq^2)\"" 
     100//              PopupMenu ymodel,mode=NumVarOrDefault("root:Packages:NIST:VSANS:Globals:Plot_1d:gYMode", 1 ),proc=V_YMode_PopMenuProc 
     101//              PopupMenu xmodel,pos={220,5},size={74,20},title="x-axis" 
     102//              PopupMenu xmodel,help={"This popup selects how the x-axis will be linearized given the chosen data"} 
     103//              PopupMenu xmodel,value= #"\"q;log(q);q^2;q^c\"" 
     104//              PopupMenu xmodel,mode=NumVarOrDefault("root:Packages:NIST:VSANS:Globals:Plot_1d:gXMode", 1 ),proc=V_XMode_PopMenuProc 
     105////            Button Rescale,pos={281,5},size={70,20},proc=V_Rescale_Plot_1D_ButtonProc,title="Rescale" 
     106////            Button Rescale,help={"Rescale the x and y-axes of the data"},disable=1 
     107// 
     108//              SetVariable expa,pos={120,28},size={80,15},title="pow \"a\"" 
     109//              SetVariable expa,help={"This sets the exponent \"a\" for some y-axis formats. The value is ignored if the model does not use an adjustable exponent"} 
     110//              SetVariable expa,limits={-2,10,0},value= root:Packages:NIST:VSANS:Globals:Plot_1d:gExpA 
     111//              SetVariable expb,pos={120,46},size={80,15},title="pow \"b\"" 
     112//              SetVariable expb,help={"This sets the exponent \"b\" for some x-axis formats. The value is ignored if the model does not use an adjustable exponent"} 
     113//              SetVariable expb,limits={0,10,0},value= root:Packages:NIST:VSANS:Globals:Plot_1d:gExpB 
     114// 
     115//              SetVariable expc,pos={220,28},size={80,15},title="pow \"c\"" 
     116//              SetVariable expc,help={"This sets the exponent \"c\" for some x-axis formats. The value is ignored if the model does not use \"c\" as an adjustable exponent"} 
     117//              SetVariable expc,limits={-10,10,0},value= root:Packages:NIST:VSANS:Globals:Plot_1d:gExpC 
     118 
     119        endif 
     120                 
     121         
     122End 
     123 
     124Function V_DummyUpdate(Beg_pts, End_pts) 
     125        Wave Beg_pts,End_pts 
     126         
     127        // trim the data displayed 
     128        // do this by setting the iBin values to NaN, so it won't display 
     129        // won't hurt to set twice... 
     130         
     131        Wave/T panelStr = root:PanelNameW 
     132        Wave begW = root:Beg_pts 
     133        Wave endW = root:End_pts 
     134         
     135        SetDataFolder root:ToTrim 
     136         
     137        Variable num,ii 
     138        String str,detStr 
     139        num=numpnts(panelStr) 
     140         
     141        for(ii=0;ii<num;ii+=1) 
     142                detStr = panelStr[ii] 
     143                Wave/Z iw = $("iBin_qxqy_"+detStr+"_trim") 
     144//              Wave/Z iw = $("iBin_qxqy_"+detStr) 
     145//              Wave/Z ew = $("eBin_qxqy_"+detStr) 
     146                if(WaveExists(iw)) 
     147                         
     148//                      DeletePoints 0,nBeg, qw,iw,ew 
     149                        iw[0,begW[ii]-1] = NaN 
     150                                 
     151                        Variable npt 
     152                        npt = numpnts(iw)  
     153//                      DeletePoints npt-nEnd,nEnd, qw,iw,ew 
     154                        iw[npt-endW[ii],npt-1] = NaN 
     155                         
     156                endif 
     157                 
     158        endfor 
     159         
     160        SetDataFolder root: 
     161 
     162        return(0) 
     163End 
     164 
     165 
     166Function V_DataFolderPlotPop(ctrlName,popNum,popStr) : PopupMenuControl 
     167        String ctrlName 
     168        Variable popNum // which item is currently selected (1-based) 
     169        String popStr           // contents of current popup item as string 
     170 
     171 
     172        String str,winStr="V_1D_Combine",dataType 
     173        Variable binType,num,ii 
     174        ControlInfo popup0 
     175        binType = V_BinTypeStr2Num(S_Value) 
     176         
     177        //dataType now needs to be the full path to the folder 
     178        dataType = "root:"+popStr 
     179         
     180        sprintf str,"(\"%s\",%d,\"%s\")",dataType,binType,winStr 
     181 
     182        Execute ("V_Back_IQ_Graph"+str) 
     183        Execute ("V_Middle_IQ_Graph"+str) 
     184        Execute ("V_Front_IQ_Graph"+str) 
     185 
     186        ModifyGraph marker=8,opaque=1,msize=3           //make the traces open white circles 
     187 
     188 
     189        NewDataFolder/O root:ToTrim 
     190         
     191        //remove all of the "toTrim" data from the graph, if it's there 
     192        String type 
     193         
     194        SetDataFolder root:ToTrim 
     195         
     196        for(ii=0;ii<ItemsInList(ksPanelBinTypeList);ii+=1) 
     197                type = StringFromList(ii, ksPanelBinTypeList, ";") 
     198                CheckDisplayed/W=$winStr $("iBin_qxqy_"+type+"_trim") 
     199                if(V_flag==1) 
     200                        RemoveFromGraph/W=$winStr $("iBin_qxqy_"+type+"_trim") 
     201                endif 
     202        endfor 
     203         
     204        SetDataFolder root: 
     205         
     206//      ClearIQIfDisplayed_AllFldr("B_trim",winStr) 
     207//      ClearIQIfDisplayed_AllFldr("ML_trim",winStr) 
     208//      ClearIQIfDisplayed_AllFldr("MR_trim",winStr) 
     209//      ClearIQIfDisplayed_AllFldr("MT_trim",winStr) 
     210//      ClearIQIfDisplayed_AllFldr("MB_trim",winStr) 
     211//      ClearIQIfDisplayed_AllFldr("FL_trim",winStr) 
     212//      ClearIQIfDisplayed_AllFldr("FR_trim",winStr) 
     213//      ClearIQIfDisplayed_AllFldr("FT_trim",winStr) 
     214//      ClearIQIfDisplayed_AllFldr("FB_trim",winStr) 
     215//      ClearIQIfDisplayed_AllFldr("MLR_trim",winStr) 
     216//      ClearIQIfDisplayed_AllFldr("MTB_trim",winStr) 
     217//      ClearIQIfDisplayed_AllFldr("FLR_trim",winStr) 
     218//      ClearIQIfDisplayed_AllFldr("FTB_trim",winStr) 
     219//      ClearIQIfDisplayed_AllFldr("MLRTB_trim",winStr) 
     220//      ClearIQIfDisplayed_AllFldr("FLRTB_trim",winStr) 
     221 
     222        //then kill the data folder, so it can be duplicated 
     223         
     224// 
     225//      // rename all of the data in the new folder 
     226        SetDataFolder $dataType 
     227        String list = WaveList("*",";","")              //must be in the correct data folder 
     228        SetDataFolder root: 
     229//      Print list       
     230        num = ItemsInList(list) 
     231        for(ii=0;ii<num;ii+=1) 
     232                str = StringFromList(ii,list) 
     233                Duplicate/O $(dataType+":"+str), $("root:ToTrim:"+str+"_trim") 
     234        endfor 
     235        // plot the linked data 
     236        sprintf str,"(\"%s\",%d,\"%s\")","root:ToTrim",binType,winStr 
     237 
     238        Execute ("V_Back_IQ_Graph_trim"+str) 
     239        Execute ("V_Middle_IQ_Graph_trim"+str) 
     240        Execute ("V_Front_IQ_Graph_trim"+str) 
     241        // and link the data to the table with a dependency 
     242//       
     243         
     244         
     245        return(0)        
     246End 
     247 
     248 
     249 
     250 
     251 
     252 
     253 
     254 
     255 
     256 
     257 
     258 
     259 
     260 
     261 
     262 
     263 
     264 
     265 
     266 
     267 
     268 
     269 
     270 
     271 
     272 
     273 
     274 
     275 
     276 
     277 
     278 
     279//////////////// Below is unused -- it was started, but seems like the wrong approach, 
     280//////////////// so I have abandoned it for now 
     281 
     282 
    16283 
    17284//////////////// 
Note: See TracChangeset for help on using the changeset viewer.