Ignore:
Timestamp:
Nov 2, 2012 1:45:32 PM (10 years ago)
Author:
srkline
Message:

Adding procedures by Matt Wasbrough that allow the data and model fit to be rescaled to different axis scalings both for viewing and export. It is accessed through a check box on the wrapper panel and works on the top window, reascaling whatever is there. Works for a fit, must manually rescale for a coefficient change. Seems right now to be too much work forsetting a dependency.

Help file still needs to be written.

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

Legend:

Unmodified
Added
Removed
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Packages/Wrapper_v40.ipf

    r869 r873  
    9292        CheckBox check_4,pos={430,85},size={72,14},title="Report?",value= 0 
    9393        CheckBox check_5,pos={444,103},size={72,14},title="Save it?",value= 0 
    94         CheckBox check_6,pos={530,42},size={72,14},title="Use Residuals?",value= 0 
     94        CheckBox check_6,pos={530,38},size={72,14},title="Use Residuals?",value= 0 
    9595        CheckBox check_6,proc=UseResidualsCheckProc 
    96         CheckBox check_7,pos={530,65},size={72,14},title="Info Box?",value= 0 
     96        CheckBox check_7,pos={530,57},size={72,14},title="Info Box?",value= 0 
    9797        CheckBox check_7,proc=UseInfoTextBoxCheckProc 
     98        CheckBox check_8, pos={530,75}, size={72,14}, title="Rescale Axis?", value=0 
     99        CheckBox check_8,proc=UseRescaleAxisCheckProc 
    98100        //change draw order to put button over text of checkbox 
    99101        Button button_0,pos={520,93},size={100,20},proc=DoTheFitButton,title="Do 1D Fit" 
     
    688690 
    689691        String folderStr,funcStr,coefStr 
    690         Variable useCursors,useEps,useConstr,useResiduals,useTextBox 
     692        Variable useCursors,useEps,useConstr,useResiduals,useTextBox, useRescaleAxis 
    691693         
    692694        switch( ba.eventCode ) 
     
    714716                        useTextBox = V_Value 
    715717                         
     718                        ControlInfo/W=WrapperPanel check_8 
     719                        useRescaleAxis = V_Value 
     720                         
    716721                        if(!CheckFunctionAndCoef(funcStr,coefStr)) 
    717722                                DoAlert 0,"The coefficients and function type do not match. Please correct the selections in the popup menus." 
     
    719724                        endif 
    720725                         
    721                         FitWrapper(folderStr,funcStr,coefStr,useCursors,useEps,useConstr,useResiduals,useTextBox) 
     726                        FitWrapper(folderStr,funcStr,coefStr,useCursors,useEps,useConstr,useResiduals,useTextBox,useRescaleAxis) 
    722727                         
    723728                        //      DoUpdate (does not work!) 
     
    758763// 
    759764// 
    760 Function FitWrapper(folderStr,funcStr,coefStr,useCursors,useEps,useConstr,useResiduals,useTextBox) 
     765Function FitWrapper(folderStr,funcStr,coefStr,useCursors,useEps,useConstr,useResiduals,useTextBox,useRescaleAxis) 
    761766        String folderStr,funcStr,coefStr 
    762         Variable useCursors,useEps,useConstr,useResiduals,useTextBox 
     767        Variable useCursors,useEps,useConstr,useResiduals,useTextBox,useRescaleAxis 
    763768 
    764769        String suffix=getModelSuffix(funcStr) 
     
    9981003        // Don't plot the full curve if cursors were used (set fitYw to NaN on entry...) 
    9991004        String traces=TraceNameList("", ";", 1 )                //"" as first parameter == look on the target graph 
    1000         if(strsearch(traces,"FitYw",0) == -1) 
     1005        if(strsearch(traces,"FitYw",0) == -1 ) 
    10011006                if(useGenCurveFit && useCursors) 
    10021007                        WAVE trimX = trimX 
     
    10051010                        AppendToGraph FitYw vs xw 
    10061011                endif 
     1012        elseif (strsearch(traces,"FitYw_RA",0) == -1) 
     1013                RemoveFromGraph FitYw 
     1014                if(useGenCurveFit && useCursors) 
     1015                        WAVE trimX = trimX 
     1016                        AppendtoGraph fitYw vs trimX 
     1017                else 
     1018                        AppendToGraph FitYw vs xw 
     1019                endif 
    10071020        else 
    1008                 RemoveFromGraph FitYw 
     1021                RemoveFromGraph FitYw_RA 
    10091022                if(useGenCurveFit && useCursors) 
    10101023                        WAVE trimX = trimX 
     
    10481061                else 
    10491062                        ModifyTable/W=wrapperPanel#T0 style=0,rgb=(0,0,0) 
    1050                 endif 
    1051                  
     1063        endif 
     1064         
    10521065        endif 
    10531066         
     
    10551068        sprintf resultStr,"Chi^2 = %g  Sqrt(X^2/N) = %g",V_chisq,sqrt(V_chisq/V_Npnts) 
    10561069        resultStr = PadString(resultStr,63,0x20) 
     1070        DoWIndow/F WrapperPanel 
    10571071        GroupBox grpBox_2 title=resultStr 
    10581072        ControlUpdate/W=WrapperPanel grpBox_2 
     
    10861100        endif 
    10871101         
     1102        //Rescale the Plot depending on the user choice 
     1103        if(useRescaleAxis) 
     1104                string ctrlName = "GoRescale" 
     1105                RescalePlot(ctrlName) 
     1106        elseif (DataFolderExists("root:Packages:NIST:RescaleAxis")) 
     1107                SetDataFolder root: 
     1108                String PlotGraph= WinName(0,1)  //this is the topmost graph 
     1109                DoWindow/F $PlotGraph 
     1110                 
     1111                GetWindow/Z $PlotGraph, wavelist 
     1112                if (V_flag != 0) 
     1113                        DoPrompt/Help="" "I couldn't find the graph" 
     1114                        Abort 
     1115                endif 
     1116                 
     1117                wave/t W_Wavelist 
     1118                 
     1119                variable j 
     1120                string temp 
     1121                SetDataFolder root:Packages:NIST:RescaleAxis 
     1122                if (exists("W_WaveList")==1) 
     1123                        KillWaves/Z root:Packages:NIST:RescaleAxis:W_WaveList 
     1124                endif 
     1125                MoveWave root:W_WaveList, root:Packages:NIST:RescaleAxis:W_WaveList 
     1126                 
     1127                for(i=0; i < numpnts(W_Wavelist)/3; i+=1) 
     1128                        temp = W_WaveList[i][0] 
     1129                        if(stringmatch(temp, "*_RA")) 
     1130                 
     1131                                string WaveDataFolder, WaveToRescale 
     1132                                WaveDataFolder = ReplaceString(W_WaveList[i][0], W_WaveList[i][1], "") 
     1133                                if(strlen(WaveDataFolder)==0) 
     1134                                        WaveDataFolder = ":" 
     1135                                endif 
     1136                                WaveDataFolder = "root"+WaveDataFolder   
     1137                                SetDataFolder $WaveDataFolder 
     1138                                temp = RemoveEnding(temp, "_RA") 
     1139                                 
     1140                                string xwave, ywave, oldywave, swave 
     1141                                if(exists(temp)==1) 
     1142                                        Wave/T WaveString = $temp 
     1143                                        WaveToRescale = temp 
     1144                                        if (stringmatch(WaveToRescale, "*_i")) 
     1145                                                DoWindow/F PlotGraph 
     1146                                                oldywave = WaveToRescale+"_RA" 
     1147                                                ywave = WaveToRescale 
     1148                                                replacewave/Y/W=$PlotGraph trace=$oldywave, $ywave 
     1149                                                xwave = RemoveEnding(WaveToRescale, "_i")+"_q" 
     1150                                                replacewave/X/W=$PlotGraph trace=$ywave, $xwave  
     1151                                                ModifyGraph log=0 
     1152                                                swave = RemoveEnding(WaveToRescale, "_i")+"_s" 
     1153                                                if(exists(swave)==1) 
     1154                                                        ErrorBars/W=$PlotGraph $ywave, Y wave=($swave,$swave)    
     1155                                                endif 
     1156                                        elseif(stringmatch(WaveToRescale, "smeared*") && stringmatch(WaveToRescale, "!*_qvals")) 
     1157                                                oldywave = WaveToRescale+"_RA" 
     1158                                                ywave = WaveToRescale 
     1159                                                replacewave/Y/W=$PlotGraph trace=$oldywave, $ywave 
     1160                                                xwave = "smeared_qvals" 
     1161                                                replacewave/X/W=$PlotGraph trace=$ywave, $xwave  
     1162                                                ModifyGraph log=0 
     1163                                        elseif(stringmatch(WaveToRescale,"ywave*")) 
     1164                                                oldywave = WaveToRescale+"_RA" 
     1165                                                ywave = WaveToRescale 
     1166                                                xwave = ReplaceString("ywave",ywave,"xwave") 
     1167                                                replacewave/Y/W=$PlotGraph trace=$oldywave, $ywave 
     1168                                                replacewave/X/W=$PlotGraph trace=$ywave, $xwave                                  
     1169                                        endif 
     1170                                SetDataFolder root:Packages:NIST:RescaleAxis 
     1171                                endif 
     1172                        endif 
     1173                endfor 
     1174                KillWaves/Z W_WaveList 
     1175                modifygraph log=1 
     1176                Label left "I(q)" 
     1177                Label bottom "q (A\S-1\M)" 
     1178        Endif 
     1179 
    10881180        SetDataFolder root: 
    10891181        return(0) 
     
    13661458                                CheckBox check_6,disable=1                      //info box and residual check, remove these from view 
    13671459                                CheckBox check_7,disable=1 
     1460                                CheckBox check_8,disable=1 
    13681461                        else 
    13691462                                //print "unchecked, change them back to 1D" 
     
    13781471                                CheckBox check_6,disable=0                      //info box and residual check, bring them back 
    13791472                                CheckBox check_7,disable=0 
     1473                                CheckBox check_8,disable=0 
    13801474                        endif 
    13811475                        break 
     
    17491843 
    17501844//////////////////////////////////// 
     1845// Modification from Matt Wasbrough to allow rescaling of the  
     1846// axes while plotting and fitting. allows export of the rescaled 
     1847// data and of the rescaled model 
     1848// Nov 2012 
     1849/// 
     1850 
     1851Function UseRescaleAxisCheckProc(cba) : CheckBoxControl 
     1852        STRUCT WMCheckboxAction &cba 
     1853 
     1854        switch( cba.eventCode ) 
     1855                case 2: // mouse up 
     1856                        Variable checked = cba.checked 
     1857                        if(checked) 
     1858                                Execute "OpenAxisPanel()" 
     1859                        else 
     1860                                if(exists("RescaleAxisPanel") !=0) 
     1861                                        DoWindow/K RescaleAxisPanel 
     1862                                endif 
     1863                        endif 
     1864                        break 
     1865        endswitch 
     1866 
     1867        return 0 
     1868End 
     1869 
     1870Proc OpenAxisPanel() 
     1871        If(WinType("RescaleAxisPanel") == 0) 
     1872                //create the necessary data folder 
     1873                NewDataFolder/O root:Packages 
     1874                NewDataFolder/O root:Packages:NIST 
     1875                NewDataFolder/O root:Packages:NIST:RescaleAxis 
     1876                //initialize the values 
     1877                Variable/G root:Packages:NIST:RescaleAxis:gRAExpA = 1 
     1878                Variable/G root:Packages:NIST:RescaleAxis:gRAExpB = 1 
     1879                Variable/G root:Packages:NIST:RescaleAxis:gRAExpC = 1 
     1880                RescaleAxisPanel() 
     1881        else 
     1882                //window already exists, just bring to front for update 
     1883                DoWindow/F RescaleAxisPanel 
     1884        endif 
     1885End 
     1886 
     1887Window RescaleAxisPanel() 
     1888        PauseUpdate; Silent 1           // building window... 
     1889        NewPanel /W=(461,46,735,195)/K=1 
     1890        ModifyPanel cbRGB=(49360,30954,64507), fixedSize=1 
     1891        SetDrawLayer UserBack 
     1892        PopupMenu ymodel,pos={20,10},size={76,19},title="y-axis" 
     1893        PopupMenu ymodel,help={"This popup selects how the y-axis will be linearized based on the chosen data"} 
     1894        PopupMenu ymodel,mode=1,value= #"\"I;log(I);ln(I);1/I;I^a;Iq^a;I^a q^b;1/sqrt(I);ln(Iq);ln(Iq^2)\"" 
     1895        Button GoRescale,pos={50,80},size={70,20},proc=RescalePlot,title="Rescale" 
     1896        Button GoRescale,help={"This button will rescale the axis using the selections in this panel"} 
     1897        Button DoneButton,pos={170,80},size={70,20},proc=RADoneButton,title="Done" 
     1898        Button DoneButton,help={"This button will close the panel"} 
     1899        Button ExportData, pos={100,110}, size={90,20}, proc=ExportData, title="Export Data" 
     1900        Button ExportData, help={"This button will export data from the top graph"} 
     1901        SetVariable expa,pos={13,45},size={80,17},title="pow \"a\"" 
     1902        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"} 
     1903        SetVariable expa,limits={-2,10,0},value= root:Packages:NIST:RescaleAxis:gRAExpA 
     1904        SetVariable expb,pos={98,45},size={80,17},title="pow \"b\"" 
     1905        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"} 
     1906        SetVariable expb,limits={0,10,0},value= root:Packages:NIST:RescaleAxis:gRAExpB 
     1907        PopupMenu xmodel,pos={155,10},size={79,19},title="x-axis" 
     1908        PopupMenu xmodel,help={"This popup selects how the x-axis will be linearized given the chosen data"} 
     1909        PopupMenu xmodel,mode=1,value= #"\"q;log(q);q^2;q^c\"" 
     1910        SetVariable expc,pos={182,45},size={80,17},title="pow \"c\"" 
     1911        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"} 
     1912        SetVariable expc,limits={-10,10,0},value= root:Packages:NIST:RescaleAxis:gRAExpC 
     1913EndMacro 
     1914 
     1915Proc RADoneButton(ctrlName): ButtonControl 
     1916        String ctrlName 
     1917        DoWindow/K RescaleAxisPanel 
     1918        DoWindow/F WrapperPanel 
     1919        CheckBox check_8 value=0 
     1920end 
     1921 
     1922Proc ExportData(ctrlName): ButtonControl 
     1923        string ctrlName  
     1924        WriteRescaledData()              
     1925End 
     1926         
     1927 
     1928Function RescalePlot (ctrlName): ButtonControl 
     1929        String ctrlName 
     1930        SetDataFolder root: 
     1931        String topGraph= WinName(0,1)   //this is the topmost graph 
     1932        if(strlen(topGraph)==0) 
     1933                Abort "There is no graph" 
     1934        endif 
     1935                 
     1936        DoWindow/F $topGraph 
     1937        GetWindow/Z $topGraph, wavelist 
     1938        wave/t W_Wavelist 
     1939        SetDataFolder root:Packages:NIST:RescaleAxis 
     1940        if (exists("W_WaveList")==1) 
     1941                KillWaves/Z root:Packages:NIST:RescaleAxis:W_WaveList 
     1942        endif 
     1943        MoveWave root:W_WaveList, root:Packages:NIST:RescaleAxis:W_WaveList 
     1944        SetDataFolder root:Packages:NIST:RescaleAxis 
     1945        variable i,j,k 
     1946        string DF,DF1,temp, temp2, t1 
     1947        for (i=0; i < numpnts(W_WaveList)/3; i+=1) 
     1948                temp = W_WaveList[i][1] 
     1949                if (stringmatch(temp, "*_i") || stringmatch(temp, "*_i_RA")) 
     1950                        temp = W_WaveList[i][0] 
     1951                        if(stringmatch(temp, "*_i")) 
     1952                                temp = removeending(temp, "_i") 
     1953                        elseif(stringmatch(temp, "*_i_RA")) 
     1954                                temp = removeending(temp, "_i_RA") 
     1955                        endif 
     1956                        Make/T/O $temp/Wave=tempWave 
     1957                        DF = ReplaceString(W_Wavelist[i][0],W_Wavelist[i][1],"") 
     1958                        if (strlen(DF) ==0) 
     1959                                DF = ":" 
     1960                        endif 
     1961                        DF1 = "root"+DF 
     1962                        tempWave[0] = DF1 
     1963                        k = 1 
     1964                        for(j=0;j<numpnts(W_WaveList)/3; j+=1) 
     1965                                if (stringmatch(W_WaveList[j][1], "*"+temp+"*")) 
     1966                                        tempWave[k] = W_WaveList[j][0] 
     1967                                        k  = k+1 
     1968                                endif 
     1969                        endfor 
     1970                        redimension/N=(k) tempWave 
     1971                elseif(stringmatch(temp, "*ywave*")) 
     1972                        temp = W_WaveList[i][0] 
     1973                        if(stringmatch(temp, "*_RA")) 
     1974                                temp = removeending(temp, "_RA") 
     1975                        endif                    
     1976                        Make/T/O $temp/Wave=tempWave 
     1977                        DF = ReplaceString(W_Wavelist[i][0],W_Wavelist[i][1],"") 
     1978                        if (strlen(DF) ==0) 
     1979                                DF = ":" 
     1980                        endif 
     1981                        DF1 = "root"+DF 
     1982                        tempWave[0] = DF1 
     1983                        temp2 = replacestring("ywave", temp, "") 
     1984                        k = 1 
     1985                        for(j=0;j<numpnts(W_WaveList)/3; j+=1) 
     1986                                t1 = W_Wavelist[j][1] 
     1987                                if (stringmatch(W_WaveList[j][1], "*wave"+temp2+"*")) 
     1988                                        tempWave[k] = W_WaveList[j][1] 
     1989                                        k  = k+1 
     1990                                endif 
     1991                        endfor 
     1992                        redimension/N=(k) tempWave 
     1993                endif 
     1994        endfor 
     1995        KillWaves/Z W_Wavelist 
     1996        string listWave = Wavelist("*", ";", "TEXT:1") 
     1997        string WaveToRescale, WaveDataFolder,xwave, ywave, swave 
     1998         
     1999        for (i = 0; i < ItemsInList(listWave,";"); i+=1) 
     2000                temp = StringFromList(i,listWave,";") 
     2001                Wave/T WaveString = $temp 
     2002                for (j=1; j < numpnts(WaveString); j+=1) 
     2003                         WaveToRescale = Wavestring[j] 
     2004                         if (stringmatch(WaveToRescale, "*_RA")) 
     2005                                WaveToRescale = RemoveEnding(WaveToRescale, "_RA") 
     2006                         endif 
     2007                WaveDataFolder = WaveString[0] 
     2008                SetDataFolder $WaveDataFolder 
     2009                if (stringmatch(WaveToRescale, "*_q")) 
     2010                xwave = WaveToRescale 
     2011                XRescale(xwave)  
     2012                elseif (stringmatch(WaveToRescale, "*_i")) 
     2013                ywave = WaveToRescale 
     2014                xwave = RemoveEnding(WaveToRescale, "_i")+"_q" 
     2015                YRescale(ywave, xwave) 
     2016                elseif (stringmatch(WaveToRescale, "*_s")) 
     2017                swave = WaveToRescale 
     2018                ywave = RemoveEnding(WaveToRescale, "_s")+"_i" 
     2019                xwave = RemoveEnding(WaveToRescale, "_s")+"_q" 
     2020                ERescale(swave, ywave, xwave) 
     2021                elseif (stringmatch(WaveToRescale, "xwave_*")) 
     2022                xwave=WaveToRescale 
     2023                XRescale(xwave) 
     2024                elseif (stringmatch(WaveToRescale, "ywave_*")) 
     2025                ywave = WaveToRescale 
     2026                xwave= ReplaceString("ywave", WaveToRescale, "xwave") 
     2027                YRescale(ywave, xwave) 
     2028                elseif(stringmatch(WaveToRescale, "*_qvals")) 
     2029                xwave = WaveToRescale 
     2030                XRescale(xwave) 
     2031                elseif(stringmatch(WaveToRescale, "smeared*") && stringmatch(WaveToRescale, "!*_qvals")) 
     2032                ywave = WaveToRescale 
     2033                                for (k=1; k < numpnts(WaveString); k+=1) 
     2034                                        if (stringmatch(Wavestring[k], "*_qvals")) 
     2035                                                xwave = Wavestring[k] 
     2036                                        endif 
     2037                                endfor 
     2038                YRescale(ywave, xwave) 
     2039                else 
     2040                ywave = WaveToRescale 
     2041                        for (k=1; k < numpnts(WaveString); k+=1) 
     2042                                if (stringmatch(Wavestring[k], "*_q")) 
     2043                                        xwave = Wavestring[k] 
     2044                                endif 
     2045                        endfor 
     2046                YRescale(ywave,xwave) 
     2047                string yAxis = ywave+"_RA" 
     2048                wave yAxisWave = $yAxis 
     2049                SetFormula yAxisWave, "YRescale(ywave,xwave)" 
     2050                endif 
     2051                SetDataFolder root:Packages:NIST:RescaleAxis 
     2052                endfor 
     2053        endfor 
     2054         
     2055        string oldywave 
     2056        for (i = 0; i < ItemsInList(listWave,";"); i+=1) 
     2057                temp = StringFromList(i,listWave,";") 
     2058                Wave/T WaveString = $temp 
     2059                for (j=1; j < numpnts(WaveString); j+=1) 
     2060                         WaveToRescale = Wavestring[j] 
     2061                WaveDataFolder = WaveString[0] 
     2062                SetDataFolder $WaveDataFolder 
     2063                        if(stringmatch(WaveToRescale, "*_RA")) 
     2064                        elseif (stringmatch(WaveToRescale, "*_i")) 
     2065                                DoWindow/F topGraph 
     2066                                oldywave = WaveToRescale 
     2067                                xwave = RemoveEnding(WaveToRescale, "_i")+"_q_RA" 
     2068                                ywave = WaveToRescale + "_RA" 
     2069                                replacewave/Y/W=$topGraph trace=$oldywave, $ywave 
     2070                                replacewave/X/W=$topGraph trace=$ywave, $xwave 
     2071                                ModifyGraph log=0 
     2072                                swave = RemoveEnding(WaveToRescale, "_i")+"_s_RA" 
     2073                                if(exists(swave)==1) 
     2074                                        ErrorBars/T=0/W=$topGraph $ywave, Y wave=($swave,$swave)         
     2075                                endif 
     2076                                DoUpdate         
     2077                        elseif(stringmatch(WaveToRescale, "smeared*") && stringmatch(WaveToRescale, "!*_qvals")) 
     2078                                oldywave = WaveToRescale 
     2079                                ywave = WaveToRescale + "_RA" 
     2080                                replacewave/Y/W=$topGraph trace=$oldywave, $ywave 
     2081                                xwave = "smeared_qvals_RA" 
     2082                                replacewave/X/W=$topGraph trace=$ywave, $xwave   
     2083                                ModifyGraph log=0 
     2084                        elseif(stringmatch(WaveToRescale,"ywave*")) 
     2085                                oldywave = WaveToRescale 
     2086                                ywave = WaveToRescale + "_RA" 
     2087                                xwave = ReplaceString("ywave",ywave,"xwave") 
     2088                                replacewave/Y/W=$topGraph trace=$oldywave, $ywave 
     2089                                replacewave/X/W=$topGraph trace=$ywave, $xwave                                   
     2090                        elseif(stringmatch(WaveToRescale, "*FitYw*")) 
     2091                                oldywave = WaveToRescale 
     2092                                ywave = WaveToRescale+"_RA" 
     2093                                for (k=1; k < numpnts(WaveString); k+=1) 
     2094                                        if (stringmatch(Wavestring[k], "*_q")) 
     2095                                                xwave = Wavestring[k]+"_RA" 
     2096                                        endif 
     2097                                endfor 
     2098                                replacewave/Y/W=$topGraph trace=$oldywave, $ywave 
     2099                                replacewave/X/W=$topGraph trace=$ywave, $xwave   
     2100                                ModifyGraph log=0 
     2101                        endif 
     2102                        SetDataFolder root:Packages:NIST:RescaleAxis 
     2103                endfor 
     2104        endfor 
     2105        KillWaves/A/Z 
     2106        modifygraph log=0 
     2107                 
     2108        string ylabel, xlabel, ystr, xstr 
     2109        ControlInfo/W=RescaleAxisPanel yModel 
     2110        ystr = S_Value 
     2111        ControlInfo/W=RescaleAxisPanel xModel 
     2112        xstr = S_Value 
     2113         
     2114        if(cmpstr("I",ystr)==0 && cmpstr("q",xstr)==0) 
     2115                modifygraph log=1 
     2116        endif 
     2117         
     2118        Variable pow_a,pow_b,pow_c 
     2119        ControlInfo/W=RescaleAxisPanel expa 
     2120        pow_a = V_value 
     2121        ControlInfo/W=RescaleAxisPanel expb 
     2122        pow_b = V_value 
     2123        ControlInfo/W=RescaleAxisPanel expc 
     2124        pow_c = V_value 
     2125         
     2126        If (cmpstr("I",ystr) == 0) 
     2127                ylabel = "I(q)" 
     2128        elseif (cmpstr("ln(I)",ystr) == 0) 
     2129                ylabel = "ln(I)" 
     2130        elseif (cmpstr("log(I)",ystr) == 0) 
     2131                ylabel = "log(I)" 
     2132        elseif (cmpstr("1/I",ystr) == 0) 
     2133                ylabel = "1/I" 
     2134        elseif (cmpstr("I^a",ystr) == 0) 
     2135                ylabel = "I\S"+num2str(pow_a)+"\M" 
     2136        elseif (cmpstr("Iq^a",ystr) == 0) 
     2137                ylabel = "Iq\S"+num2str(pow_a)+"\M" 
     2138        elseif (cmpstr("I^a q^b",ystr) == 0) 
     2139                ylabel = "I\S"+num2str(pow_a)+"\Mq\S"+num2str(pow_b)+"\M" 
     2140        elseif (cmpstr("1/sqrt(I)",ystr) == 0) 
     2141                ylabel = "1/sqrt(I)" 
     2142        elseif (cmpstr("ln(Iq)",ystr) == 0) 
     2143                ylabel = "ln(Iq)" 
     2144        elseif (cmpstr("ln(Iq^2)",ystr) == 0) 
     2145                ylabel = "ln(Iq\S2\M)" 
     2146        endif 
     2147 
     2148        If (cmpstr("q",xstr) == 0) 
     2149                xlabel = "q (A\S-1\M)" 
     2150        elseif (cmpstr("q^2",xstr) == 0) 
     2151                xlabel = "q\S2\M" 
     2152        elseif (cmpstr("log(q)",xstr) == 0) 
     2153                xlabel = "log(q)" 
     2154        elseif (cmpstr("q^c",xstr) == 0) 
     2155                xlabel = "q\S"+num2str(pow_c)+"\M" 
     2156        endif 
     2157         
     2158        SetAxis/A 
     2159        Label left ylabel 
     2160        Label bottom xlabel 
     2161         
     2162        SetDataFolder root: 
     2163End 
     2164 
     2165Function YRescale(ywave, xwave)  
     2166        String ywave,xwave 
     2167   
     2168        Wave yw = $ywave 
     2169        Wave xw = $xwave 
     2170         
     2171        //Scaling exponents and background value 
     2172        Variable pow_a,pow_b,pow_c 
     2173        ControlInfo/W=RescaleAxisPanel expa 
     2174        pow_a = V_value 
     2175        ControlInfo/W=RescaleAxisPanel expb 
     2176        pow_b = V_value 
     2177        ControlInfo/W=RescaleAxisPanel expc 
     2178        pow_c = V_value 
     2179         
     2180        //check for physical limits on exponent values 
     2181        // if bad values found, alert, and reset to good values so the rescaling can continue 
     2182        NVAR gA = root:Packages:NIST:RescaleAxis:gRAExpA 
     2183        NVAR gB = root:Packages:NIST:RescaleAxis:gRAExpB 
     2184        NVAR gC = root:Packages:NIST:RescaleAxis:gRAExpC 
     2185        if((pow_a < -2) || (pow_a > 10)) 
     2186                DoAlert 0,"Exponent a must be in the range (-2,10) - the exponent a has been reset to 1" 
     2187                gA = 1 
     2188        endif 
     2189        if((pow_b < 0) || (pow_b > 10)) 
     2190                DoAlert 0,"Exponent b must be in the range (0,10) - the exponent b has been reset to 1" 
     2191                gB = 1 
     2192        endif 
     2193        //if q^c is the x-scaling, c must be be within limits and also non-zero 
     2194        ControlInfo/W=RescaleAxisPanel xModel 
     2195        If (cmpstr("q^c",S_Value) == 0) 
     2196                if(pow_c == 0)  
     2197                        DoAlert 0,"Exponent c must be non-zero, c has been reset to 1" 
     2198                        gC = 1 
     2199                endif 
     2200                if((pow_c < -10) || (pow_c > 10)) 
     2201                        DoAlert 0,"Exponent c must be in the range (-10,10), c has been reset to 1" 
     2202                        gC = 1 
     2203                endif 
     2204        endif 
     2205         
     2206        //variables set for each model to control look of graph 
     2207        String ystr, yAxis 
     2208        //check for proper y-scaling selection, make the necessary waves 
     2209//      Wave yAxisWave 
     2210 
     2211        ControlInfo/W=RescaleAxisPanel yModel 
     2212        ystr = S_Value 
     2213         
     2214        do 
     2215                If (cmpstr("I",S_Value) == 0) 
     2216                        yAxis = ywave+"_RA" 
     2217                        if (exists(yAxis)== 0) 
     2218                                Duplicate yw $yAxis 
     2219                        endif 
     2220                        SetScale d 0,0,"1/cm",$yAxis 
     2221                        wave yAxisWave = $yAxis 
     2222                        yAxisWave = yw 
     2223                        break    
     2224                endif 
     2225                If (cmpstr("ln(I)",S_Value) == 0) 
     2226                        yAxis = ywave+"_RA" 
     2227                        if (exists(yAxis)== 0) 
     2228                                Duplicate yw $yAxis 
     2229                        endif 
     2230                        SetScale d 0,0,"",$yAxis 
     2231                        wave yAxisWave = $yAxis 
     2232                        yAxisWave = ln(yw) 
     2233                        break    
     2234                endif 
     2235                If (cmpstr("log(I)",S_Value) == 0) 
     2236                        yAxis = ywave+"_RA" 
     2237                        if (exists(yAxis)== 0) 
     2238                                Duplicate yw $yAxis 
     2239                        endif 
     2240                        SetScale d 0,0,"",$yAxis 
     2241                        wave yAxisWave = $yAxis 
     2242                        yAxisWave = log(yw) 
     2243                        break    
     2244                endif 
     2245                If (cmpstr("1/I",S_Value) == 0) 
     2246                        yAxis = ywave+"_RA" 
     2247                        if (exists(yAxis)== 0) 
     2248                                Duplicate yw $yAxis 
     2249                        endif 
     2250                        SetScale d 0,0,"",$yAxis 
     2251                        wave yAxisWave = $yAxis 
     2252                        yAxisWave = 1/(yw) 
     2253                        break 
     2254                endif 
     2255                If (cmpstr("I^a",S_Value) == 0) 
     2256                        yAxis = ywave+"_RA" 
     2257                        if (exists(yAxis)== 0) 
     2258                                Duplicate yw $yAxis 
     2259                        endif 
     2260                        SetScale d 0,0,"",$yAxis 
     2261                        wave yAxisWave = $yAxis 
     2262                        yAxisWave = yw^pow_a 
     2263                        break 
     2264                endif 
     2265                If (cmpstr("Iq^a",S_Value) == 0) 
     2266                        yAxis = ywave+"_RA" 
     2267                        if (exists(yAxis)== 0) 
     2268                                Duplicate yw $yAxis 
     2269                        endif 
     2270                        SetScale d 0,0,"",$yAxis 
     2271                        wave yAxisWave = $yAxis 
     2272                        yAxisWave = yw*xw^pow_a 
     2273                        break 
     2274                endif 
     2275                If (cmpstr("I^a q^b",S_Value) == 0) 
     2276                        yAxis = ywave+"_RA" 
     2277                        if (exists(yAxis)== 0) 
     2278                                Duplicate yw $yAxis 
     2279                        endif 
     2280                        SetScale d 0,0,"",$yAxis 
     2281                        wave yAxisWave = $yAxis 
     2282                        yAxisWave = yw^pow_a*xw^pow_b 
     2283                        break 
     2284                endif 
     2285                If (cmpstr("1/sqrt(I)",S_Value) == 0) 
     2286                        yAxis = ywave+"_RA" 
     2287                        if (exists(yAxis)== 0) 
     2288                                Duplicate yw $yAxis 
     2289                        endif 
     2290                        SetScale d 0,0,"",$yAxis 
     2291                        wave yAxisWave = $yAxis 
     2292                        yAxisWave = 1/sqrt(yw) 
     2293                        break 
     2294                endif 
     2295                If (cmpstr("ln(Iq)",S_Value) == 0) 
     2296                        yAxis = ywave+"_RA" 
     2297                        if (exists(yAxis)== 0) 
     2298                                Duplicate yw $yAxis 
     2299                        endif 
     2300                        SetScale d 0,0,"",$yAxis 
     2301                        wave yAxisWave = $yAxis 
     2302                        yAxisWave = ln(xw*yw) 
     2303                        break 
     2304                endif 
     2305                If (cmpstr("ln(Iq^2)",S_Value) == 0) 
     2306                        yAxis = ywave+"_RA" 
     2307                        if (exists(yAxis)== 0) 
     2308                                Duplicate yw $yAxis 
     2309                        endif 
     2310                        SetScale d 0,0,"",$yAxis 
     2311                        wave yAxisWave = $yAxis 
     2312                        yAxisWave = ln(xw*xw*yw) 
     2313                        break 
     2314                endif 
     2315                //more ifs for each case 
     2316                 
     2317                // if selection not found, abort 
     2318                DoAlert 0,"Y-axis scaling incorrect. Aborting" 
     2319                Abort 
     2320        while(0) 
     2321End 
     2322 
     2323Function XRescale(xwave)         
     2324        String xwave 
     2325  
     2326        Wave xw = $xwave 
     2327                  
     2328        //Scaling exponents and background value 
     2329        Variable pow_a,pow_b,pow_c 
     2330        ControlInfo/W=RescaleAxisPanel expa 
     2331        pow_a = V_value 
     2332        ControlInfo/W=RescaleAxisPanel expb 
     2333        pow_b = V_value 
     2334        ControlInfo/W=RescaleAxisPanel expc 
     2335        pow_c = V_value 
     2336         
     2337//check for physical limits on exponent values 
     2338// if bad values found, alert, and reset to good values so the rescaling can continue 
     2339        NVAR gA = root:Packages:NIST:RescaleAxis:gRAExpA 
     2340        NVAR gB = root:Packages:NIST:RescaleAxis:gRAExpB 
     2341        NVAR gC = root:Packages:NIST:RescaleAxis:gRAExpC 
     2342        if((pow_a < -2) || (pow_a > 10)) 
     2343                DoAlert 0,"Exponent a must be in the range (-2,10) - the exponent a has been reset to 1" 
     2344                gA = 1 
     2345        endif 
     2346        if((pow_b < 0) || (pow_b > 10)) 
     2347                DoAlert 0,"Exponent b must be in the range (0,10) - the exponent b has been reset to 1" 
     2348                gB = 1 
     2349        endif 
     2350        //if q^c is the x-scaling, c must be be within limits and also non-zero 
     2351        ControlInfo/W=RescaleAxisPanel xModel 
     2352        If (cmpstr("q^c",S_Value) == 0) 
     2353                if(pow_c == 0)  
     2354                        DoAlert 0,"Exponent c must be non-zero, c has been reset to 1" 
     2355                        gC = 1 
     2356                endif 
     2357                if((pow_c < -10) || (pow_c > 10)) 
     2358                        DoAlert 0,"Exponent c must be in the range (-10,10), c has been reset to 1" 
     2359                        gC = 1 
     2360                endif 
     2361        endif 
     2362         
     2363        //variables set for each model to control look of graph 
     2364        String xstr, xAxis 
     2365        //check for proper y-scaling selection, make the necessary waves 
     2366//      Wave xAxisWave 
     2367 
     2368        ControlInfo/W=RescaleAxisPanel xModel 
     2369        xstr = S_Value 
     2370        do 
     2371                // make the new yaxis wave 
     2372                If (cmpstr("q",S_Value) == 0)    
     2373                        xAxis = xwave+"_RA" 
     2374                        if (exists(xAxis)== 0) 
     2375                                Duplicate xw $xAxis 
     2376                        endif 
     2377                        SetScale d 0,0,"A^-1",$xAxis 
     2378                        wave xAxisWave = $xAxis 
     2379                        xAxisWave = xw 
     2380                        break    
     2381                endif 
     2382                If (cmpstr("q^2",S_Value) == 0)  
     2383                        xAxis = xwave+"_RA" 
     2384                        if (exists(xAxis)== 0) 
     2385                                Duplicate xw $xAxis 
     2386                        endif 
     2387                        SetScale d 0,0,"A^-2",$xAxis 
     2388                        wave xAxisWave = $xAxis 
     2389                        xAxisWave = xw*xw 
     2390                        break    
     2391                endif 
     2392                If (cmpstr("log(q)",S_Value) == 0)       
     2393                        xAxis = xwave+"_RA" 
     2394                        if (exists(xAxis)== 0) 
     2395                                Duplicate xw $xAxis 
     2396                        endif 
     2397                        SetScale d 0,0,"",$xAxis 
     2398                        wave xAxisWave = $xAxis 
     2399                        xAxisWave = log(xw) 
     2400                        break    
     2401                endif 
     2402                If (cmpstr("q^c",S_Value) == 0) 
     2403                        xAxis = xwave+"_RA" 
     2404                        if (exists(xAxis)== 0) 
     2405                                Duplicate xw $xAxis 
     2406                        endif 
     2407                        SetScale d 0,0,"", $xAxis 
     2408                        wave xAxisWave = $xAxis 
     2409                        xAxisWave = xw^pow_c 
     2410                        break 
     2411                endif 
     2412         
     2413                //more ifs for each case 
     2414                // if selection not found, abort 
     2415                DoAlert 0,"X-axis scaling incorrect. Aborting" 
     2416                Abort 
     2417        while(0)        //end of "case" statement for x-axis scaling 
     2418End 
     2419 
     2420Function ERescale(swave, ywave, xwave)   
     2421        String swave, ywave, xwave 
     2422  
     2423        Wave ew = $swave 
     2424        Wave yw = $ywave 
     2425        Wave xw = $xwave 
     2426                  
     2427        //Scaling exponents and background value 
     2428        Variable pow_a,pow_b,pow_c 
     2429        ControlInfo/W=RescaleAxisPanel expa 
     2430        pow_a = V_value 
     2431        ControlInfo/W=RescaleAxisPanel expb 
     2432        pow_b = V_value 
     2433        ControlInfo/W=RescaleAxisPanel expc 
     2434        pow_c = V_value 
     2435         
     2436//check for physical limits on exponent values 
     2437// if bad values found, alert, and reset to good values so the rescaling can continue 
     2438        NVAR gA = root:Packages:NIST:RescaleAxis:gRAExpA 
     2439        NVAR gB = root:Packages:NIST:RescaleAxis:gRAExpB 
     2440        NVAR gC = root:Packages:NIST:RescaleAxis:gRAExpC 
     2441        if((pow_a < -2) || (pow_a > 10)) 
     2442                DoAlert 0,"Exponent a must be in the range (-2,10) - the exponent a has been reset to 1" 
     2443                gA = 1 
     2444        endif 
     2445        if((pow_b < 0) || (pow_b > 10)) 
     2446                DoAlert 0,"Exponent b must be in the range (0,10) - the exponent b has been reset to 1" 
     2447                gB = 1 
     2448        endif 
     2449        //if q^c is the x-scaling, c must be be within limits and also non-zero 
     2450        ControlInfo/W=RescaleAxisPanel xModel 
     2451        If (cmpstr("q^c",S_Value) == 0) 
     2452                if(pow_c == 0)  
     2453                        DoAlert 0,"Exponent c must be non-zero, c has been reset to 1" 
     2454                        gC = 1 
     2455                endif 
     2456                if((pow_c < -10) || (pow_c > 10)) 
     2457                        DoAlert 0,"Exponent c must be in the range (-10,10), c has been reset to 1" 
     2458                        gC = 1 
     2459                endif 
     2460        endif 
     2461         
     2462        //variables set for each model to control look of graph 
     2463        String ystr, eWave 
     2464        //check for proper y-scaling selection, make the necessary waves 
     2465//      Wave yErrWave 
     2466 
     2467        ControlInfo/W=RescaleAxisPanel yModel 
     2468        ystr = S_Value 
     2469        do 
     2470                 
     2471                If (cmpstr("I",S_Value) == 0) 
     2472                        eWave = swave+"_RA" 
     2473                        if (exists(eWave) == 0) 
     2474                                Duplicate ew $eWave 
     2475                        endif 
     2476                        wave yErrWave = $eWave 
     2477                        yErrWave = ew 
     2478                        break    
     2479                endif 
     2480                If (cmpstr("ln(I)",S_Value) == 0) 
     2481                        eWave = swave+"_RA" 
     2482                        if (exists(eWave) == 0) 
     2483                                Duplicate ew $eWave 
     2484                        endif 
     2485                        wave yErrWave = $eWave 
     2486                        yErrWave = ew/yw 
     2487                        break    
     2488                endif 
     2489                If (cmpstr("log(I)",S_Value) == 0) 
     2490                        eWave = swave+"_RA" 
     2491                        if (exists(eWave) == 0) 
     2492                                Duplicate ew $eWave 
     2493                        endif 
     2494                        wave yErrWave = $eWave 
     2495                        yErrWave = ew/(2.30*yw) 
     2496                        break    
     2497                endif 
     2498                If (cmpstr("1/I",S_Value) == 0) 
     2499                        eWave = swave+"_RA" 
     2500                        if (exists(eWave) == 0) 
     2501                                Duplicate ew $eWave 
     2502                        endif 
     2503                        wave yErrWave = $eWave 
     2504                        yErrWave = ew/(yw^2) 
     2505                        break 
     2506                endif 
     2507                If (cmpstr("I^a",S_Value) == 0) 
     2508                        eWave = swave+"_RA" 
     2509                        if (exists(eWave) == 0) 
     2510                                Duplicate ew $eWave 
     2511                        endif 
     2512                        wave yErrWave = $eWave 
     2513                        yErrWave = ew*abs(pow_a*(yw^(pow_a-1))) 
     2514                        break 
     2515                endif 
     2516                If (cmpstr("Iq^a",S_Value) == 0) 
     2517                        eWave = swave+"_RA" 
     2518                        if (exists(eWave) == 0) 
     2519                                Duplicate ew $eWave 
     2520                        endif 
     2521                        wave yErrWave = $eWave 
     2522                        yErrWave = ew*xw^pow_a 
     2523                        break 
     2524                endif 
     2525                If (cmpstr("I^a q^b",S_Value) == 0) 
     2526                        eWave = swave+"_RA" 
     2527                        if (exists(eWave) == 0) 
     2528                                Duplicate ew $eWave 
     2529                        endif 
     2530                        wave yErrWave = $eWave 
     2531                        yErrWave = ew*abs(pow_a*(yw^(pow_a-1)))*xw^pow_b 
     2532                        break 
     2533                endif 
     2534                If (cmpstr("1/sqrt(I)",S_Value) == 0) 
     2535                        eWave = swave+"_RA" 
     2536                        if (exists(eWave) == 0) 
     2537                                Duplicate ew $eWave 
     2538                        endif 
     2539                        wave yErrWave = $eWave 
     2540                        yErrWave = 0.5*ew*yw^(-1.5) 
     2541                        break 
     2542                endif 
     2543                If (cmpstr("ln(Iq)",S_Value) == 0) 
     2544                        eWave = swave+"_RA" 
     2545                        if (exists(eWave) == 0) 
     2546                                Duplicate ew $eWave 
     2547                        endif 
     2548                        wave yErrWave = $eWave 
     2549                        yErrWave =ew/yw 
     2550                        break 
     2551                endif 
     2552                If (cmpstr("ln(Iq^2)",S_Value) == 0) 
     2553                        eWave = swave+"_RA" 
     2554                        if (exists(eWave) == 0) 
     2555                                Duplicate ew $eWave 
     2556                        endif 
     2557                        wave yErrWave = $eWave 
     2558                        yErrWave = ew/yw 
     2559                        break 
     2560                endif 
     2561                //more ifs for each case 
     2562                 
     2563                // if selection not found, abort 
     2564                DoAlert 0,"Y-axis scaling incorrect. Aborting" 
     2565                Abort 
     2566        while(0)        //end of "case" statement for y-axis scaling 
     2567 
     2568End 
     2569 
     2570/////////////////////////// 
     2571 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/WriteModelData_v40.ipf

    r844 r873  
    88        Prompt delim,"delimeter",popup,"tab;space;" 
    99        Prompt term,"line termination",popup,"CR;LF;CRLF;" 
    10          
     10 
    1111        //Print xwave, ywave, delim, term 
    1212         
     
    1515End 
    1616 
     17 
     18// 10/22/2012 - MJW 
     19// Added suffixes ending in _q_RA, _qvals, _qvals_RA to list of possible x-waves to allow writing of rescaled model data 
     20// Added removal of qvals, _qvals_RA and _q_RA from the list of possible y-waves 
    1721Function/S PossibleModelWaves(filterStr) 
    1822        String filterStr 
    1923         
    20         String list,tmplist,DF,newList="" 
     24        String list,tmplist,tmplist2,DF,newList="" 
    2125        Variable ii,num 
    2226         
     
    4044                if(cmpstr(filterStr,"x*")==0) 
    4145                        tmplist = WaveList("*_q",";","") 
     46                        tmplist += WaveList("*_q_RA",";","") 
     47                        tmplist += WaveList("*_qvals",";","") 
     48                        tmplist += WaveList("*_qvals_RA",";","") 
    4249                        tmpList += WaveList("GFitX_*",";","") 
    4350                else 
    4451                        tmplist = WaveList("smea*",";","") 
    4552                        tmpList += WaveList("GFit_*",";","") 
     53                        tmplist2 = WaveList("*_qvals",";","") 
     54                        tmpList = RemoveFromList(tmplist2,tmplist,";") 
     55                        tmplist2 = WaveList("*_qvals_RA",";","") 
     56                        tmpList = RemoveFromList(tmplist2,tmplist,";") 
     57                        tmplist2 = WaveList("*_q_RA",";","") 
     58                        tmpList = RemoveFromList(tmplist2,tmplist,";") 
    4659                endif 
    4760                //prepend these list items with the folder 
     
    221234        return(0) 
    222235End 
     236 
     237//MJW 24 Oct 2012 
     238//Included WriteRescaledData and fWriteRescaledData to write data from the RescaledAxis Panel. 
     239Function WriteRescaledData() 
     240 
     241        string xwavelist ="", ywavelist ="", swavelist="None" 
     242 
     243        SetDataFolder root: 
     244        String topGraph= WinName(0,1)   //this is the topmost graph 
     245                if(strlen(topGraph)==0) 
     246                Abort "There is no graph" 
     247        endif 
     248 
     249        DoWindow/F $topGraph 
     250        GetWindow/Z $topGraph, wavelist 
     251        wave/t W_Wavelist 
     252        SetDataFolder root:Packages:NIST:RescaleAxis 
     253        if (exists("W_WaveList")==1) 
     254                KillWaves/Z root:Packages:NIST:RescaleAxis:W_WaveList 
     255        endif 
     256        MoveWave root:W_WaveList, root:Packages:NIST:RescaleAxis:W_WaveList 
     257        SetDataFolder root:Packages:NIST:RescaleAxis 
     258 
     259        variable i 
     260        string temp 
     261        for(i=0; i < numpnts(W_Wavelist)/3; i+=1) 
     262                temp = W_Wavelist[i][0] 
     263                if(stringmatch(temp,"*_q") || stringmatch(temp,"*_q_RA") || stringmatch(temp,"*_qvals") || stringmatch(temp,"*_qvals_RA") || stringmatch(temp,"*xwave*")) 
     264                        if(strlen(xwavelist)==0) 
     265                                xwavelist = temp 
     266                        else 
     267                                xwavelist =xwavelist +";"+temp 
     268                        endif 
     269                elseif (stringmatch(temp, "*_i") || stringmatch(temp, "*_i_RA") || stringmatch(temp,"*FitYW*") || stringmatch(temp,"*ywave*") || stringmatch(temp,"*smeared*")) 
     270                        if(strlen(ywavelist)==0) 
     271                                ywavelist = temp 
     272                        else 
     273                                ywavelist =ywavelist +";"+temp 
     274                        endif 
     275                elseif (stringmatch(temp,"*_s") || stringmatch(temp,"*_s_RA")) 
     276                                swavelist =swavelist +";"+temp 
     277                endif 
     278        endfor 
     279 
     280        string xwave,ywave,swave,delim, term 
     281        Prompt ywave,"Y data",popup,ywavelist 
     282        Prompt xwave,"X data",popup,xwavelist 
     283        Prompt swave,"Error data",popup,swavelist 
     284        Prompt delim,"delimeter",popup,"tab;space;" 
     285        Prompt term,"line termination",popup,"CR;LF;CRLF;" 
     286        DoPrompt/help="" "Choose the Data to Save",ywave,xwave,swave,delim,term 
     287         
     288        if(V_flag==1) 
     289                Abort "Cancel was clicked therefore no data was exported" 
     290        endif 
     291 
     292        print xwave, ywave, swave 
     293                 
     294        for(i=0; i < numpnts(W_Wavelist)/3; i+=1) 
     295                temp = W_Wavelist[i][0] 
     296                if(stringmatch(temp,ywave)) 
     297                ywave = W_Wavelist[i][1] 
     298                elseif (stringmatch(temp, xwave)) 
     299                xwave = W_Wavelist[i][1] 
     300                elseif (stringmatch(temp,swave)) 
     301                swave = W_Wavelist[i][1] 
     302                endif 
     303        endfor 
     304         
     305        fWriteRescaledData(xwave,ywave,swave,delim,term) 
     306End 
     307 
     308Function fWriteRescaledData(xwavestr,ywavestr,swavestr,delim,term) 
     309        String xwavestr,ywavestr,swavestr,delim,term 
     310         
     311        SetDataFolder root: 
     312        wave xwave = $xwavestr 
     313        wave ywave = $ywavestr 
     314        wave swave = $swavestr 
     315        String formatStr="",fullpath="" 
     316        Variable refnum,dialog=1 
     317         
     318        //setup delimeter and terminator choices 
     319        if(stringmatch(swavestr,"None")) 
     320                If(cmpstr(delim,"tab")==0) 
     321                        //tab-delimeted 
     322                        formatStr="%15.4g\t%15.4g" 
     323                else 
     324                        //use 3 spaces 
     325                        formatStr="%15.4g   %15.4g" 
     326                Endif 
     327        else 
     328                If(cmpstr(delim,"tab")==0) 
     329                        //tab-delimeted 
     330                        formatStr="%15.4g\t%15.4g\t%15.4g" 
     331                else 
     332                        //use 3 spaces 
     333                        formatStr="%15.4g   %15.4g   %15.4g" 
     334                Endif 
     335        Endif 
     336 
     337        If(cmpstr(term,"CR")==0) 
     338                formatStr += "\r" 
     339        Endif 
     340        If(cmpstr(term,"LF")==0) 
     341                formatStr += "\n" 
     342        Endif 
     343        If(cmpstr(term,"CRLF")==0) 
     344                formatStr += "\r\n" 
     345        Endif 
     346         
     347        if(dialog) 
     348                PathInfo/S catPathName 
     349                fullPath = DoSaveFileDialog("Save data as",fname=NameofWave(ywave)+".txt") 
     350                If(cmpstr(fullPath,"")==0) 
     351                        //user cancel, don't write out a file 
     352                        Close/A 
     353                        Abort "no data file was written" 
     354                Endif 
     355                //Print "dialog fullpath = ",fullpath 
     356        Endif 
     357         
     358        Open refnum as fullpath 
     359         
     360        fprintf refnum,"Model data created %s\r\n",(date()+" "+time()) 
     361        if(stringmatch(swavestr,"None")) 
     362                wfprintf refnum,formatStr,xwave,ywave 
     363        else 
     364                wfprintf refnum,formatStr,xwave,ywave,swave 
     365        endif 
     366        Close refnum 
     367        return(0) 
     368End 
Note: See TracChangeset for help on using the changeset viewer.