Changeset 1187


Ignore:
Timestamp:
Feb 22, 2022 2:26:30 PM (9 months ago)
Author:
ilavsky
Message:

Simple fits - add Power law fit

Location:
trunk/User Procedures/Irena
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/User Procedures/Irena/IR1_Main.ipf

    r1180 r1187  
    521521Function IR2P_FitLineWithCursors()
    522522        string oldDf= GetDataFolder(1)
     523        Wave/Z Xwave=CsrXWaveRef(A)
     524        Wave/Z Ywave=CsrWaveRef(A)
     525        Wave/Z YwaveB=CsrWaveRef(B)
     526        if(!WaveExists(Xwave)&&!WaveExists(Ywave)&& !WaveExists(YwaveB))
     527                Abort "Set cursors on data first, or these data do not have X and Y waves."
     528        endif
    523529        NewDataFolder/O/S root:Packages:FittingData
    524530        string destwavename="fit_"+CsrWave(A)
     
    526532        Wave W_coef
    527533        Wave DestWave=$destwavename
    528         Wave OrigXWave=CsrXWaveRef(A)
    529534        variable AttPoint
    530         AttPoint = (OrigXWave[xcsr(A)]+OrigXWave[xcsr(B)])/2
     535        AttPoint = (Xwave[xcsr(A)]+Xwave[xcsr(B)])/2
    531536        Tag/C/N=Curvefitres/F=0/A=MC $destwavename, AttPoint, "\Z"+IN2G_LkUpDfltVar("LegendSize")+"Linear fit parameters are: \ry="+num2str(W_coef[0])+"+ x *"+num2str(W_coef[1])
    532537        SetDataFolder $olddf
     
    539544
    540545        string oldDf= GetDataFolder(1)
     546        Wave/Z Xwave=CsrXWaveRef(A)
     547        Wave/Z YwaveB=CsrWaveRef(B)
     548        Wave/Z Ywave=CsrWaveRef(A)
     549        if(!WaveExists(Xwave) && !WaveExists(Ywave) && !WaveExists(YwaveB))
     550                Abort "Set cursors on data first, or these data do not have X and Y waves."
     551        endif
    541552        NewDataFolder/O/S root:Packages:FittingData
    542553        string name="MyFitWave"
     
    545556        name=name +num2istr(freeDestNum)
    546557        LegendName=LegendName+num2istr(freeDestNum)
    547         Wave Xwave=$(getWavesDataFolder(CsrXWaveRef(A),2))
    548         Wave Ywave=$(getWavesDataFolder(CsrWaveRef(A),2))
    549558        Duplicate/Free Ywave, LogYFitData
    550559        Duplicate/O Ywave, $name
  • trunk/User Procedures/Irena/IR2_PanelCntrlProcs.ipf

    r1180 r1187  
    11#pragma TextEncoding = "UTF-8"
    22#pragma rtGlobals=3                     // Use modern global access method.
    3 #pragma version = 1.64
     3#pragma version = 1.65
    44
    55
     
    1010//*************************************************************************/
    1111
     12//1.65 added SimpleFits Power Law
    1213//1.64 added SimpleFits 1DCorrelation results: Corr1DZ_N for X and Y are: Corr1DK_N or Corr1DGammaA_N or Corr1DGammaI_N
    1314//1.63 modified IR2C_ReturnKnownToolResults to enable downselection of results types. This makes AllowedResultsTypes parameter finally useful. From code pass "" if no downselection is needed.
     
    263264        //Simple fits
    264265        AllCurrentlyAllowedTypes+="SimFitGuinierI;SimFitGuinierRI;SimFitGuinierSII;SimFitSphereI;SimFitSpheroidI;SimFitPorodI;Corr1DK;Corr1DGammaA;Corr1DGammaI;"
     266        AllCurrentlyAllowedTypes+="SimFitPwrLawI;"
    265267
    266268        string/g AllKnownToolsResults
     
    508510        ResultsDataTypesLookup+="SimFitSpheroidI:SimFitSpheroidQ;"
    509511        ResultsDataTypesLookup+="SimFitPorodI:SimFitPorodQ;"
     512        ResultsDataTypesLookup+="SimFitPwrLawI:SimFitPwrLawQ;"
    510513        ResultsDataTypesLookup+="Corr1DK:Corr1DZ;"
    511514        ResultsDataTypesLookup+="Corr1DGammaA:Corr1DZ;"
  • trunk/User Procedures/Irena/IR3_SimpleFits.ipf

    r1184 r1187  
    11#pragma rtGlobals=3             // Use modern global access method and strict wave access.
    2 #pragma version=1.15
    3 constant IR3JversionNumber = 0.5                        //Simple Fit panel version number
     2#pragma version=1.16
     3constant IR3JversionNumber = 1.16                       //Simple Fit panel version number
    44
    55//*************************************************************************\
     
    1212constant SimpleFitsLinPlotMinScale = 0.8
    1313
     14//1.16  add Power Law fit.
    1415//1.15  add 1D Correlation function
    1516//1.14          add handling of USAXS M_... waves
     
    2122
    2223//To add new function:
    23 //at this moment we have:       ListOfSimpleModels="Guinier;Porod;Sphere;Spheroid;Guinier Rod;Guinier Sheet;1DCorrelation;"
     24//at this moment we have:       ListOfSimpleModels="Guinier;Porod;Sphere;Spheroid;Guinier Rod;Guinier Sheet;1DCorrelation;Power Law;"
    2425//IR3J_InitSimpleFits()
    2526//                      add to: ListOfSimpleModels list as new data type ("Guinier")
     
    183184        SetVariable Porod_SpecificSurface,pos={290,290},size={220,15}, proc=IR3J_SetVarProc,title="Spec. Sfc area [cm2/cm3]", bodywidth=80, limits={0,inf,0}
    184185        Setvariable Porod_SpecificSurface, variable=root:Packages:Irena:SimpleFits:Porod_SpecificSurface, disable=0, noedit=1, help={"Porod constant"}
     186        //Power Law
     187        SetVariable PowerLawPref,pos={290,230},size={220,15}, proc=IR3J_SetVarProc,title="Pref (Int=B+Pref*Q^(-Exp))", bodywidth=80
     188        Setvariable PowerLawPref, variable=root:Packages:Irena:SimpleFits:PowerLawPref, limits={1e-20,inf,0}, help={"Power law prefactor"}
     189        SetVariable PowerLawExp,pos={290,260},size={220,15}, proc=IR3J_SetVarProc,title="Exp (Int=B+Pref*Q^(-Exp))", bodywidth=80
     190        Setvariable PowerLawExp, variable=root:Packages:Irena:SimpleFits:PowerLawExp, limits={1,inf,0}, help={"Power law exponent"}
     191
    185192        //Sphere controls
    186193        SetVariable Sphere_ScalingConstant,pos={240,230},size={220,15}, proc=IR3J_SetVarProc,title="Scaling ", bodywidth=80
     
    341348        ListOfVariables+="DataBackground;AchievedChiSquare;ScatteringContrast;"
    342349        ListOfVariables+="Guinier_Rg;Guinier_I0;"
     350        ListOfVariables+="PowerLawPref;PowerLawExp;"
    343351        ListOfVariables+="Porod_Constant;Porod_SpecificSurface;Sphere_Radius;Sphere_ScalingConstant;"
    344352        ListOfVariables+="Spheroid_Radius;Spheroid_ScalingConstant;Spheroid_Beta;"
     
    390398        SVAR ListOfSimpleModels
    391399        ListOfSimpleModels="Guinier;Porod;Sphere;Spheroid;Guinier Rod;Guinier Sheet;"
    392         ListOfSimpleModels+="Invariant;1DCorrelation;"
     400        ListOfSimpleModels+="Invariant;1DCorrelation;Power Law;"
    393401        SVAR ListOfCorr1DMethod
    394402        ListOfCorr1DMethod = "Anisotropic (abs, Strobl);Anisotropic (norm);Isotropic (norm);"
     
    580588                                IR3J_CalculateModel()
    581589                        endif
     590                        if(stringmatch(sva.ctrlName,"PowerLawPref")||stringmatch(sva.ctrlName,"PowerLawExp"))           //update model..
     591                                IR3J_CalculateModel()
     592                        endif
    582593                        if(stringmatch(sva.ctrlName,"Corr1DZmax") || stringmatch(sva.ctrlName,"Corr1DWavelength") )             //update model..
    583594                                IR3J_Calculate1DCorrelation()
     
    10121023                        IR3J_CalculateModel()           
    10131024                        break
     1025                case "Power Law":                               // Porod
     1026                        IR3J_FitPowerLaw()
     1027                        IR3J_CalculateModel()           
     1028                        break
    10141029                case "Sphere":                          // Sphere
    10151030                        IR3J_FitSphere()
     
    14521467        yw=ywSM
    14531468End
    1454 
     1469//*****************************************************************************************************************
     1470Function IR3J_FitPowerLawSMR(w,yw,xw) : FitFunc
     1471        Wave w,yw,xw
     1472        NVAR SlitLength  =      root:Packages:Irena:SimpleFits:SlitLength
     1473        duplicate/free yw, ywSM
     1474        yw = IR3J_PowerLawInLogLog(w,xw[p])
     1475        IR1B_SmearData(yw, xw, SlitLength, ywSM)
     1476        yw=ywSM
     1477End
     1478//*************************************************************************************************************
     1479//*************************************************************************************************************
     1480Function IR3J_PowerLawInLogLog(w,Q) : FitFunc
     1481        Wave w
     1482        Variable Q
     1483
     1484        //CurveFitDialog/ These comments were created by the Curve Fitting dialog. Altering them will
     1485        //CurveFitDialog/ make the function less convenient to work with in the Curve Fitting dialog.
     1486        //CurveFitDialog/ Equation:
     1487        //CurveFitDialog/ f(Q) = PorodConst * Q^4 + Background
     1488        //CurveFitDialog/ End of Equation
     1489        //CurveFitDialog/ Independent Variables 1
     1490        //CurveFitDialog/ Q
     1491        //CurveFitDialog/ Coefficients 2
     1492        //CurveFitDialog/ w[0] = PorodConst
     1493        //CurveFitDialog/ w[1] = Exponent
     1494        //CurveFitDialog/ w[2] = Background
     1495
     1496        return w[0] * Q^(-w[1]) + w[2]
     1497End
    14551498//*****************************************************************************************************************
    14561499Function IR3J_FitGuinierSMR(w,yw,xw) : FitFunc
     
    15741617        SetDataFolder oldDf
    15751618end
     1619
     1620//**********************************************************************************************************
     1621//**********************************************************************************************************
     1622
     1623static Function IR3J_FitPowerLaw()
     1624       
     1625        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
     1626        IR3J_CreateCheckGraphs()
     1627        DFref oldDf= GetDataFolderDFR()
     1628        SetDataFolder root:Packages:Irena:SimpleFits                                    //go into the folder
     1629        NVAR DataQEnd = root:Packages:Irena:SimpleFits:DataQEnd
     1630        NVAR DataQstart = root:Packages:Irena:SimpleFits:DataQstart
     1631        NVAR DataQEndPoint = root:Packages:Irena:SimpleFits:DataQEndPoint
     1632        NVAR DataQstartPoint = root:Packages:Irena:SimpleFits:DataQstartPoint
     1633
     1634        NVAR PowerLawPref = root:Packages:Irena:SimpleFits:PowerLawPref
     1635        NVAR PowerLawExp = root:Packages:Irena:SimpleFits:PowerLawExp
     1636        NVAR DataBackground=root:Packages:Irena:SimpleFits:DataBackground
     1637
     1638        NVAR AchievedChiSquare=root:Packages:Irena:SimpleFits:AchievedChiSquare
     1639        NVAR UseSMRData                                 =       root:Packages:Irena:SimpleFits:UseSMRData
     1640        NVAR SlitLength                                 =       root:Packages:Irena:SimpleFits:SlitLength
     1641        Wave/Z CursorAWave = CsrWaveRef(A, "IR3J_LogLogDataDisplay")
     1642        Wave/Z CursorBWave = CsrWaveRef(B, "IR3J_LogLogDataDisplay")
     1643        Wave CursorAXWave= CsrXWaveRef(A, "IR3J_LogLogDataDisplay")
     1644        Wave OriginalDataErrorWave=root:Packages:Irena:SimpleFits:OriginalDataErrorWave
     1645        Make/D/N=0/O W_coef, LocalEwave
     1646        Make/D/T/N=0/O T_Constraints
     1647        Wave/Z W_sigma
     1648        Redimension /N=3 W_coef, LocalEwave
     1649        Redimension/N=1 T_Constraints
     1650        T_Constraints[0] = {"K0 > 0"}
     1651        T_Constraints[1] = {"K1 > 1"}
     1652        if(!WaveExists(CursorAWave)||!WaveExists(CursorBWave))
     1653                Abort "Cursors are not properly set on same wave"
     1654        endif
     1655        //make a good starting guesses:
     1656        if(UseSMRData)
     1657                PowerLawPref=CursorAWave[DataQstartPoint]/(CursorAXWave[DataQstartPoint]^(-3))
     1658        else
     1659                PowerLawPref=CursorAWave[DataQstartPoint]/(CursorAXWave[DataQstartPoint]^(-4))
     1660        endif
     1661        DataBackground=CursorAwave[DataQEndPoint]
     1662        W_coef = {PowerLawPref,PowerLawExp,DataBackground}
     1663        LocalEwave[0]=(PowerLawPref/20)
     1664        LocalEwave[1]=(PowerLawExp/20)
     1665        LocalEwave[2]=(DataBackground/20)
     1666
     1667        variable/g V_FitError=0                 //This should prevent errors from being generated
     1668        if(UseSMRData)
     1669                FuncFit IR3J_FitPowerLawSMR W_coef CursorAWave[DataQstartPoint,DataQEndPoint] /X=CursorAXWave /C=T_Constraints /W=OriginalDataErrorWave /I=1
     1670        else
     1671                FuncFit IR3J_PowerLawInLogLog W_coef CursorAWave[DataQstartPoint,DataQEndPoint] /X=CursorAXWave /C=T_Constraints /W=OriginalDataErrorWave /I=1
     1672        endif
     1673        if (V_FitError==0)      // fitting was fine...
     1674                Wave W_sigma
     1675                AchievedChiSquare = V_chisq/(DataQEndPoint-DataQstartPoint)
     1676                string QminRg, QmaxRg, AchiCHiStr
     1677                sprintf AchiCHiStr, "%2.2f",(AchievedChiSquare)
     1678                string TagText
     1679                TagText = "Fitted Power Law  "+"I(Q) = P * Q\S-Exp\M + back"+" \r P = "+num2str(W_coef[0])+"\r Exp = "+num2str(W_coef[1])+"\r Back = "+num2str(W_coef[2])
     1680                TagText +="\rχ\\S2\\M  = "+AchiCHiStr
     1681                string TagName= "PowerLaw_fit"
     1682                Tag/C/W=IR3J_LogLogDataDisplay/N=$(TagName)/L=2/X=-15.00/Y=-15.00  $NameOfWave(CursorAWave), ((DataQstartPoint + DataQEndPoint)/2),TagText     
     1683                PowerLawPref=W_coef[0]  //PC
     1684                PowerLawExp=W_coef[1]   //PC
     1685                DataBackground=W_coef[2]                //Background
     1686        else
     1687                RemoveFromGraph/Z $("fit_"+NameOfWave(CursorAWave))
     1688                beep
     1689                Print "Fitting error, check starting parameters and fitting limits"
     1690                PowerLawPref=0  //PC
     1691                PowerLawExp = 0
     1692                DataBackground=0        //Background
     1693                AchievedChiSquare = 0
     1694        endif
     1695        SetDataFolder oldDf
     1696end
     1697
     1698//*************************************************************************************************************
     1699//*************************************************************************************************************
    15761700
    15771701
     
    18982022        NVAR Porod_Constant                     =       root:Packages:Irena:SimpleFits:Porod_Constant
    18992023        NVAR Porod_SpecificSurface      =       root:Packages:Irena:SimpleFits:Porod_SpecificSurface
     2024        NVAR PowerLawPref                               =       root:Packages:Irena:SimpleFits:PowerLawPref
     2025        NVAR PowerLawExp                                =       root:Packages:Irena:SimpleFits:PowerLawExp
    19002026        NVAR ScatteringContrast         =       root:Packages:Irena:SimpleFits:ScatteringContrast
    19012027        NVAR Sphere_Radius                              =       root:Packages:Irena:SimpleFits:Sphere_Radius
     
    19722098                        endif
    19732099                        break           
     2100                case "Power Law":                                               // Power Law
     2101                        ModelLogLogInt = DataBackground+PowerLawPref * ModelLogLogQ^(-1*PowerLawExp)
     2102                                //slit smearing, 
     2103                                if(UseSMRData)
     2104                                        duplicate/free ModelLogLogInt, ModelLogLogIntSM
     2105                                        IR1B_SmearData(ModelLogLogInt, ModelLogLogQ, SlitLength, ModelLogLogIntSM)
     2106                                        ModelLogLogInt=ModelLogLogIntSM
     2107                                endif
     2108                                //end of slit smearing
     2109                        break
    19742110                case "Porod":                                           // Porod
    19752111                        Porod_SpecificSurface =Porod_Constant *1e32 / (2*pi*ScatteringContrast*1e20)
     
    20342170                        ModifyGraph/W=IR3J_LogLogDataDisplay standoff=0
    20352171                        //Label/W=IR3J_LogLogDataDisplay VertCrossing "Norm res"
    2036                         AppendToGraph /W=IR3J_LogLogDataDisplay /L=VertCrossing ZeroLineResidualLogLog vs NormalizedResidualLogLogQ
    2037                         ModifyGraph/W=IR3J_LogLogDataDisplay rgb(ZeroLineResidualLogLog)=(0,0,0)
     2172                        CheckDisplayed /W=IR3J_LogLogDataDisplay ZeroLineResidualLogLog
     2173                        if(!V_Flag)
     2174                                AppendToGraph /W=IR3J_LogLogDataDisplay /L=VertCrossing ZeroLineResidualLogLog vs NormalizedResidualLogLogQ
     2175                                ModifyGraph/W=IR3J_LogLogDataDisplay rgb(ZeroLineResidualLogLog)=(0,0,0)
     2176                        endif
    20382177        endif
    20392178        //now same, if we are using linearized data
     
    21132252        NVAR Corr1DWavelength = root:Packages:Irena:SimpleFits:Corr1DWavelength
    21142253
     2254        NVAR PowerLawPref = root:Packages:Irena:SimpleFits:PowerLawPref
     2255        NVAR PowerLawExp = root:Packages:Irena:SimpleFits:PowerLawExp
     2256        NVAR DataBackground=root:Packages:Irena:SimpleFits:DataBackground
     2257
    21152258        Wave/Z ModelInt = root:Packages:Irena:SimpleFits:ModelLogLogInt
    21162259        Wave/Z ModelQ = root:Packages:Irena:SimpleFits:ModelLogLogQ
     
    21452288                IR1_AppendAnyText("\tSpecific Surface [cm2/cm3] = "+num2str(Porod_SpecificSurface),0)
    21462289                IR1_AppendAnyText("\tContrast [10^20 cm^-4] = "+num2str(Porod_Constant),0)
     2290                IR1_AppendAnyText("\tBackground          = "+num2str(DataBackground),0)
     2291                IR1_AppendAnyText("Achieved Normalized chi-square = "+num2str(AchievedChiSquare),0)
     2292        elseif(stringmatch(SimpleModel,"Power Law"))
     2293                IR1_AppendAnyText("\tInt = Pref * Q^(-Exp) + Background",0)
     2294                IR1_AppendAnyText("\tPrefactor                          = "+num2str(PowerLawPref),0)
     2295                IR1_AppendAnyText("\tExponent                           = "+num2str(PowerLawExp),0)
    21472296                IR1_AppendAnyText("\tBackground          = "+num2str(DataBackground),0)
    21482297                IR1_AppendAnyText("Achieved Normalized chi-square = "+num2str(AchievedChiSquare),0)
     
    22242373        NVAR Zmax = root:Packages:Irena:SimpleFits:Corr1DZmax
    22252374        NVAR Corr1DWavelength = root:Packages:Irena:SimpleFits:Corr1DWavelength
     2375
     2376        NVAR PowerLawPref = root:Packages:Irena:SimpleFits:PowerLawPref
     2377        NVAR PowerLawExp = root:Packages:Irena:SimpleFits:PowerLawExp
     2378        NVAR DataBackground=root:Packages:Irena:SimpleFits:DataBackground
    22262379
    22272380        //create new results names...
     
    22862439                        Wave ResultInt=$(DataFolderName+"SimFitPorodI_"+num2str(generation))
    22872440                        Wave ResuldQ = $(DataFolderName+"SimFitPorodQ_"+num2str(generation))
     2441                        Note /K/NOCR ResultInt, NoteWithResults
     2442                        Note /K/NOCR ResuldQ, NoteWithResults
     2443                        break   
     2444                case "Power Law":       // execute if case matches expression
     2445                        NoteWithResults+="PowerLawPrefactor="+num2str(PowerLawPref)+";"+"PowerLawExponent="+num2str(PowerLawExp)+";"+"DataBackground="+num2str(DataBackground)+";"
     2446                        NoteWithResults+=OldNote
     2447                        generation=IN2G_FindAVailableResultsGen("SimFitPwrLawI_", DataFolderName)
     2448                        Duplicate/O ModelInt, $(DataFolderName+"SimFitPwrLawI_"+num2str(generation))
     2449                        Duplicate/O ModelQ, $(DataFolderName+"SimFitPwrLawQ_"+num2str(generation))
     2450                        Wave ResultInt=$(DataFolderName+"SimFitPwrLawI_"+num2str(generation))
     2451                        Wave ResuldQ = $(DataFolderName+"SimFitPwrLawQ_"+num2str(generation))
    22882452                        Note /K/NOCR ResultInt, NoteWithResults
    22892453                        Note /K/NOCR ResuldQ, NoteWithResults
     
    24052569        NVAR InvVolumeFraction = root:Packages:Irena:SimpleFits:InvVolumeFraction
    24062570
     2571        NVAR PowerLawPref = root:Packages:Irena:SimpleFits:PowerLawPref
     2572        NVAR PowerLawExp = root:Packages:Irena:SimpleFits:PowerLawExp
     2573        NVAR DataBackground=root:Packages:Irena:SimpleFits:DataBackground
     2574
     2575
    24072576        Wave/Z ModelInt = root:Packages:Irena:SimpleFits:ModelLogLogInt
    24082577        Wave/Z ModelQ = root:Packages:Irena:SimpleFits:ModelLogLogQ
     
    25302699                ScatteringContrastWave[curlength] = ScatteringContrast
    25312700                PorodSpecificSurfaceWave[curlength] = Porod_SpecificSurface
     2701                IR3J_GetTableWithresults()
     2702        elseif(stringmatch(SimpleModel,"Power Law"))
     2703                //tabulate data for Porod
     2704                NewDATAFolder/O/S root:PowerLawFitResults
     2705                Wave/Z PwrLawPrefactor
     2706                if(!WaveExists(PwrLawPrefactor))
     2707                        make/O/N=0 PwrLawPrefactor, PwrLawExponent, PwrLawBackground, PwrLawQmin, PwrLawQmax, PwrLawChiSquare, TimeWave, TemperatureWave, PercentWave, OrderWave
     2708                        make/O/N=0/T SampleName
     2709                        //SetScale/P x 0,1,"1/cm 1/A^4", PorodConstant                  //Unified fit GUI source
     2710                        SetScale/P x 0,1,"1/A", PwrLawQmin, PwrLawQmax
     2711                endif
     2712                curlength = numpnts(PwrLawPrefactor)
     2713                redimension/N=(curlength+1) SampleName, PwrLawPrefactor, PwrLawExponent, PwrLawBackground, PwrLawQmin, PwrLawQmax, PwrLawChiSquare, TimeWave, TemperatureWave, PercentWave, OrderWave
     2714                SampleName[curlength] = DataFolderName
     2715                TimeWave[curlength]                             =       IN2G_IdentifyNameComponent(DataFolderName, "_xyzmin")
     2716                TemperatureWave[curlength]      =       IN2G_IdentifyNameComponent(DataFolderName, "_xyzC")
     2717                PercentWave[curlength]                  =       IN2G_IdentifyNameComponent(DataFolderName, "_xyzpct")
     2718                OrderWave[curlength]                            =       IN2G_IdentifyNameComponent(DataFolderName, "_xyz")
     2719                PwrLawPrefactor[curlength]              = PowerLawPref
     2720                PwrLawExponent[curlength]               = PowerLawExp
     2721                PwrLawBackground[curlength]             = DataBackground
     2722                PwrLawQmin[curlength]                   = DataQstart
     2723                PwrLawQmax[curlength]                   = DataQEnd
     2724                PwrLawChiSquare[curlength]              = AchievedChiSquare
    25322725                IR3J_GetTableWithresults()
    25332726        elseif(stringmatch(SimpleModel,"Sphere"))
     
    26242817                        else
    26252818                                IR3J_PorodFitResultsTableFnct()
     2819                        endif
     2820                        break
     2821                case "Power Law":       // execute if case matches expression
     2822                        DoWindow IR3J_PwrLawFitResultsTable
     2823                        if(V_Flag)
     2824                                DoWindow/F IR3J_PwrLawFitResultsTable
     2825                        else
     2826                                IR3J_PwrLawFitResultsTableFnct()
    26262827                        endif
    26272828                        break
     
    26992900                                        if(V_Flag!=0)
    27002901                                                DoAlert/T="Could not delete data folder" 0, "Porod results folder root:PorodFitResults could not be deleted. It is likely used in some graph or table. Close graphs/tables and try again."
     2902                                        endif
     2903                                endif
     2904                                break
     2905                        case "Power Law":       // execute if case matches expression
     2906                                DoWindow/K/Z  IR3J_PwrLawFitResultsTable
     2907                                if(DataFolderExists("root:PowerLawFitResults"))
     2908                                        KillDataFolder/Z root:PowerLawFitResults:
     2909                                        if(V_Flag!=0)
     2910                                                DoAlert/T="Could not delete data folder" 0, "Power Law results folder root:PowerLawFitResults could not be deleted. It is likely used in some graph or table. Close graphs/tables and try again."
    27012911                                        endif
    27022912                                endif
     
    28663076EndMacro
    28673077//*****************************************************************************************************************
     3078Function IR3J_PwrLawFitResultsTableFnct() : Table
     3079        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
     3080        DoWIndow IR3J_PwrLawFitResultsTable
     3081        if(V_Flag)
     3082                DoWIndow/F IR3J_PwrLawFitResultsTable
     3083        else
     3084                PauseUpdate             // building window...
     3085                String fldrSav0= GetDataFolder(1)
     3086                if(!DataFolderExists("root:PowerLawFitResults:"))
     3087                        Abort "No Power Law Fit data exist."
     3088                endif
     3089                SetDataFolder root:PowerLawFitResults:
     3090                Wave/T SampleName
     3091                Wave PwrLawPrefactor, PwrLawExponent, PwrLawBackground, PwrLawQmin, PwrLawQmax, PwrLawChiSquare, TimeWave, TemperatureWave, PercentWave, OrderWave
     3092                Edit/K=1/W=(576,346,1528,878)/N=IR3J_PwrLawFitResultsTable SampleName, PwrLawPrefactor, PwrLawExponent, PwrLawBackground, PwrLawChiSquare as "Power Law fitting results Table"
     3093                AppendToTable PwrLawQmin, PwrLawQmax
     3094                ModifyTable format(Point)=1,width(SampleName)=314,title(SampleName)="Sample Folder"
     3095                ModifyTable alignment(PwrLawPrefactor)=1,sigDigits(PwrLawPrefactor)=4,width(PwrLawPrefactor)=122
     3096                ModifyTable title(PwrLawPrefactor)="Prefactor"
     3097                ModifyTable alignment(PwrLawExponent)=1,sigDigits(PwrLawExponent)=4,width(PwrLawExponent)=122
     3098                ModifyTable title(PwrLawExponent)="Exponent", alignment(PwrLawBackground)=1,sigDigits(PwrLawBackground)=4
     3099                ModifyTable width(PwrLawBackground)=110,title(PwrLawBackground)="Background",alignment(PwrLawChiSquare)=1
     3100                ModifyTable sigDigits(PwrLawChiSquare)=4,width(PwrLawChiSquare)=106,title(PwrLawChiSquare)="Chi^2"
     3101                ModifyTable alignment(PwrLawQmax)=1,sigDigits(PwrLawQmax)=4,title(PwrLawQmax)="Qmax [1/A]"
     3102                ModifyTable alignment(PwrLawQmin)=1,sigDigits(PwrLawQmin)=4,width(PwrLawQmin)=94,title(PwrLawQmin)="Qmin [1/A]"
     3103                SetDataFolder fldrSav0
     3104        endif
     3105EndMacro
     3106
     3107
     3108//*****************************************************************************************************************
    28683109Function IR3J_SphFFFitResTblFnct() : Table
    28693110        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
     
    30633304                Setvariable Guinier_I0, disable=1
    30643305                SetVariable Guinier_Rg, disable=1
     3306                Setvariable PowerLawPref, disable=1
     3307                SetVariable PowerLawExp, disable=1
    30653308                SetVariable Porod_Constant, disable=1
    30663309                Setvariable Sphere_ScalingConstant,  disable=1
     
    30913334                                Setvariable Guinier_I0, disable=0
    30923335                                SetVariable Guinier_Rg, disable=0
     3336                                break           // exit from switch
     3337                        case "Power Law":       // execute if case matches expression
     3338                                Setvariable PowerLawPref, disable=0
     3339                                SetVariable PowerLawExp, disable=0
     3340                                SetVariable DataBackground,  disable=0
    30933341                                break           // exit from switch
    30943342                        case "Porod":   // execute if case matches expression
Note: See TracChangeset for help on using the changeset viewer.