Changeset 925


Ignore:
Timestamp:
Apr 17, 2020 8:20:44 PM (2 years ago)
Author:
ilavsky
Message:

Fixes for BioSAXS tools

Location:
trunk/User Procedures
Files:
3 edited

Legend:

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

    r923 r925  
    11#pragma rtGlobals=3             // Use modern global access method and strict wave access.
    22#pragma version=1.11
    3 constant IR3JversionNumber = 0.3                        //Data merging panel version number
     3constant IR3JversionNumber = 0.3                        //Simple Fit panel version number
    44
    55//*************************************************************************\
     
    88//* in the file LICENSE that is included with this distribution.
    99//*************************************************************************/
     10
     11constant SimpleFitsLinPlotMaxScale = 1.07
     12constant SimpleFitsLinPlotMinScale = 0.8
    1013
    1114
     
    140143
    141144        SetVariable AchievedChiSquare,pos={270,510},size={220,15}, noproc,title="Achieved chi-square"
    142         Setvariable AchievedChiSquare, variable=root:Packages:Irena:SimpleFits:AchievedChiSquare, disable=2
     145        Setvariable AchievedChiSquare, variable=root:Packages:Irena:SimpleFits:AchievedChiSquare, disable=2, limits={0,inf,0}, format="%3.2f"
    143146
    144147        Checkbox SaveToNotebook, pos={280,537},size={76,14},title="Record to Notebook?", noproc, variable=root:Packages:Irena:SimpleFits:SaveToNotebook, help={"Record results in notebook"}
     
    558561                        case "Guinier":                 // execute if case matches expression
    559562                                        ModifyGraph /W=IR3J_LinDataDisplay log=0, mirror(bottom)=1
     563                                        ModifyGraph /W=IR3J_LinDataDisplay  mode(LinModelDataIntWave)=3,marker(LinModelDataIntWave)=8
    560564                                        SetAxis/A/W=IR3J_LinDataDisplay
    561565                                        Label /W=IR3J_LinDataDisplay left "\\Z"+IN2G_LkUpDfltVar("AxisLabelSize")+"ln(Intensity)"
     
    564568                        case "Guinier rod":                     // execute if case matches expression
    565569                                        ModifyGraph /W=IR3J_LinDataDisplay log=0, mirror(bottom)=1
     570                                        ModifyGraph /W=IR3J_LinDataDisplay  mode(LinModelDataIntWave)=3,marker(LinModelDataIntWave)=8
    566571                                        SetAxis/A/W=IR3J_LinDataDisplay
    567572                                        Label /W=IR3J_LinDataDisplay left "\\Z"+IN2G_LkUpDfltVar("AxisLabelSize")+"ln(Q*Intensity)"
     
    570575                        case "Guinier sheet":                   // execute if case matches expression
    571576                                        ModifyGraph /W=IR3J_LinDataDisplay log=0, mirror(bottom)=1
     577                                        ModifyGraph /W=IR3J_LinDataDisplay  mode(LinModelDataIntWave)=3,marker(LinModelDataIntWave)=8
    572578                                        SetAxis/A/W=IR3J_LinDataDisplay
    573579                                        Label /W=IR3J_LinDataDisplay left "\\Z"+IN2G_LkUpDfltVar("AxisLabelSize")+"ln(Q\\S2\\M\\Z"+IN2G_LkUpDfltVar("AxisLabelSize")+"*Intensity)"
     
    588594                        case "Porod":   // execute if case matches expression
    589595                                        ModifyGraph /W=IR3J_LinDataDisplay log=0, mirror(bottom)=1
     596                                        ModifyGraph /W=IR3J_LinDataDisplay mode(LinModelDataIntWave)=3,marker(LinModelDataIntWave)=8
    590597                                        SetAxis/A/W=IR3J_LinDataDisplay
    591598                                        SetAxis/W=IR3J_LinDataDisplay left 0,*
     
    599606                variable tempMaxQ
    600607                tempMaxQ = LinModelDataQWave[DataQEndPoint]
    601                 SetAxis/W=IR3J_LinDataDisplay bottom 0,tempMaxQ*1.5
     608                SetAxis/W=IR3J_LinDataDisplay bottom 0,tempMaxQ*SimpleFitsLinPlotMaxScale
    602609                variable tempMaxQY, tempMinQY, maxY, minY
    603                 tempMaxQY = 0.8*LinModelDataIntWave[DataQstartPoint]
    604                 tempMinQY = 1.2*LinModelDataIntWave[DataQEndPoint]
     610                tempMaxQY = LinModelDataIntWave[DataQstartPoint]
     611                tempMinQY = LinModelDataIntWave[DataQEndPoint]
    605612                maxY = max(tempMaxQY, tempMinQY)
    606613                minY = min(tempMaxQY, tempMinQY)
    607                 //SetAxis/W=IR3J_LinDataDisplay left 0.5*tempMinQY,tempMaxQY*1.5
     614                if(maxY>0)
     615                        maxY*=SimpleFitsLinPlotMaxScale
     616                else
     617                        maxY*=SimpleFitsLinPlotMinScale
     618                endif
     619                if(minY>0)
     620                        minY*=SimpleFitsLinPlotMinScale
     621                else
     622                        minY*=SimpleFitsLinPlotMaxScale
     623                endif
    608624                SetAxis/W=IR3J_LinDataDisplay left minY, maxY
    609625        else
     
    885901                                        checkDisplayed /W=IR3J_LinDataDisplay LinModelDataIntWave
    886902                                        if(V_Flag)
    887                                                 GetAxis/W=IR3J_LinDataDisplay /Q left
     903                                                //GetAxis/W=IR3J_LinDataDisplay /Q left
    888904                                                cursor /W=IR3J_LinDataDisplay A, LinModelDataIntWave, DataQstartPoint
    889                                                 SetAxis /W=IR3J_LinDataDisplay left V_min, 1.0*LinModelDataIntWave[DataQstartPoint]
     905                                                tempMaxQ = LinModelDataQWave[DataQEndPoint]
     906                                                tempMaxQY = LinModelDataIntWave[DataQstartPoint]
     907                                                tempMinQY = LinModelDataIntWave[DataQEndPoint]
     908                                                maxY = max(tempMaxQY, tempMinQY)
     909                                                minY = min(tempMaxQY, tempMinQY)
     910                                                if(maxY>0)
     911                                                        maxY*=SimpleFitsLinPlotMaxScale
     912                                                else
     913                                                        maxY*=SimpleFitsLinPlotMinScale
     914                                                endif
     915                                                if(minY>0)
     916                                                        minY*=SimpleFitsLinPlotMinScale
     917                                                else
     918                                                        minY*=SimpleFitsLinPlotMaxScale
     919                                                endif
     920                                                if(maxY>0)
     921                                                        maxY*=SimpleFitsLinPlotMaxScale
     922                                                else
     923                                                        maxY*=SimpleFitsLinPlotMinScale
     924                                                endif
     925                                                SetAxis /W=IR3J_LinDataDisplay left minY, maxY
     926                                                SetAxis/W=IR3J_LinDataDisplay bottom 0,tempMaxQ*SimpleFitsLinPlotMaxScale
    890927                                        endif
    891928                                endif
     
    907944                                                cursor /W=IR3J_LinDataDisplay B, LinModelDataIntWave, DataQEndPoint
    908945                                                tempMaxQ = LinModelDataQWave[DataQEndPoint]
    909                                                 SetAxis/W=IR3J_LinDataDisplay bottom 0,tempMaxQ*1.5
    910                                                 tempMaxQY = 1.0*LinModelDataIntWave[DataQstartPoint]
    911                                                 tempMinQY = 1*LinModelDataIntWave[DataQEndPoint]
     946                                                tempMaxQY = LinModelDataIntWave[DataQstartPoint]
     947                                                tempMinQY = LinModelDataIntWave[DataQEndPoint]
    912948                                                maxY = max(tempMaxQY, tempMinQY)
    913949                                                minY = min(tempMaxQY, tempMinQY)
    914                                                 //SetAxis/W=IR3J_LinDataDisplay left 0.5*tempMinQY,tempMaxQY*1.5
     950                                                if(maxY>0)
     951                                                        maxY*=SimpleFitsLinPlotMaxScale
     952                                                else
     953                                                        maxY*=SimpleFitsLinPlotMinScale
     954                                                endif
     955                                                if(minY>0)
     956                                                        minY*=SimpleFitsLinPlotMinScale
     957                                                else
     958                                                        minY*=SimpleFitsLinPlotMaxScale
     959                                                endif
    915960                                                SetAxis/W=IR3J_LinDataDisplay left minY, maxY
     961                                                GetAxis/W=IR3J_LinDataDisplay/Q bottom
     962                                                SetAxis/W=IR3J_LinDataDisplay bottom V_min, LinModelDataQWave[DataQEndPoint*SimpleFitsLinPlotMaxScale]
    916963                                        endif
    917964                                endif
     
    949996        Wave/Z CursorAWave = CsrWaveRef(A, "IR3J_LogLogDataDisplay")
    950997        Wave/Z CursorBWave = CsrWaveRef(B, "IR3J_LogLogDataDisplay")
     998        if(!WaveExists(CursorAWave)||!WaveExists(CursorBWave))
     999                Abort "Daat do not exist or cursors are not properly set on same wave"
     1000        endif
    9511001        Wave CursorAXWave= CsrXWaveRef(A, "IR3J_LogLogDataDisplay")
    9521002        Wave OriginalDataErrorWave=root:Packages:Irena:SimpleFits:OriginalDataErrorWave
    953         if(!WaveExists(CursorAWave)||!WaveExists(CursorBWave))
    954                 Abort "Cursors are not properly set on same wave"
    955         endif
    9561003        //make a good starting guesses:
    9571004        Guinier_I0 = CursorAXWave[DataQstartPoint]
     
    9661013        LocalEwave[0]=(Guinier_I0/20)
    9671014        LocalEwave[1]=(Guinier_Rg/20)
     1015        variable QminFit, QmaxFit
     1016        QminFit = CursorAXWave[DataQstartPoint]
     1017        QmaxFit = CursorAXWave[DataQEndPoint]
    9681018        variable/g V_FitError
     1019       
    9691020        V_FitError=0                    //This should prevent errors from being generated
    9701021        strswitch(which)                // string switch
    9711022                case "Sphere":          // execute if case matches expression
    972                         FuncFit IR1_GuinierFit W_coef CursorAWave[DataQstartPoint,DataQEndPoint] /X=CursorAXWave /D /C=T_Constraints /W=OriginalDataErrorWave /I=1
     1023                        FuncFit IR1_GuinierFit W_coef CursorAWave[DataQstartPoint,DataQEndPoint] /X=CursorAXWave /C=T_Constraints /W=OriginalDataErrorWave /I=1
    9731024                        break                                   // exit from switch
    9741025                case "Rod":     // execute if case matches expression
    975                         FuncFit IR1_GuinierRodFit W_coef CursorAWave[DataQstartPoint,DataQEndPoint] /X=CursorAXWave /D /C=T_Constraints /W=OriginalDataErrorWave /I=1
     1026                        FuncFit IR1_GuinierRodFit W_coef CursorAWave[DataQstartPoint,DataQEndPoint] /X=CursorAXWave /C=T_Constraints /W=OriginalDataErrorWave /I=1
    9761027                        break
    9771028                case "Sheet":   // execute if case matches expression
    978                         FuncFit IR1_GuinierSheetFit W_coef CursorAWave[DataQstartPoint,DataQEndPoint] /X=CursorAXWave /D /C=T_Constraints /W=OriginalDataErrorWave /I=1
     1029                        FuncFit IR1_GuinierSheetFit W_coef CursorAWave[DataQstartPoint,DataQEndPoint] /X=CursorAXWave /C=T_Constraints /W=OriginalDataErrorWave /I=1
    9791030                        break
    9801031                default:                        // optional default expression executed
    9811032                        abort
    9821033        endswitch
    983                                                 //if (FitUseErrors && WaveExists(ErrorWave))
    984                                                 //              else - no error bars Fit commands... ...
    985                                                 //FuncFit IR1_GuinierFit W_coef CursorAWave[pcsr(A),pcsr(B)] /X=CursorAXWave /D /C=T_Constraints
    986                                                 //      endif
    9871034        if (V_FitError!=0)      //there was error in fitting
    9881035                RemoveFromGraph $("fit_"+NameOfWave(CursorAWave))
     
    9911038        endif
    9921039        Wave W_sigma
    993         string TagText
    994 
     1040        string TagText, TagTextLin
     1041        AchievedChiSquare = V_chisq/(DataQEndPoint-DataQstartPoint)
     1042        string QminRg, QmaxRg, AchiCHiStr
     1043        sprintf QminRg, "%2.2f",(W_coef[1]*QminFit)
     1044        sprintf QmaxRg, "%2.2f",(W_coef[1]*QmaxFit)
     1045        sprintf AchiCHiStr, "%2.2f",(AchievedChiSquare)
    9951046        strswitch(which)                // string switch
    9961047                case "Sphere":          // execute if case matches expression
    997                         TagText = "Fitted Guinier  "+"Int = G*exp(-q^2*Rg^2/3))"+" \r G = "+num2str(W_coef[0])+"\r Rg = "+num2str(W_coef[1])
    998                         TagText+="\r chi-square = "+num2str(V_chisq)
     1048                        TagText = "Fited Guinier : I(Q) = I(0)*exp(-q\\S2\\M*Rg\\S2\\M/3)\rI(0) = "+num2str(W_coef[0])+"\t\tRg = "+num2str(W_coef[1])
     1049                        TagText+="\rQ\Bmin\MRg = "+QminRg+"\tQ\Bmax\MRg = "+QmaxRg
     1050                        TagText+="\rχ\\S2\\M  = "+AchiCHiStr
     1051                        TagTextLin = "I(0) = "+num2str(W_coef[0])+"\t\tRg = "+num2str(W_coef[1])
     1052                        TagTextLin+="\rQ\Bmin\MRg = "+QminRg+"\tQ\Bmax\MRg = "+QmaxRg
     1053                        TagTextLin +="\rχ\\S2\\M  = "+AchiCHiStr
    9991054                        break                                   // exit from switch
    10001055                case "Rod":     // execute if case matches expression
    1001                         TagText = "Fitted Guinier  "+"Int*Q = G*exp(-q^2*Rg^2/2))"+" \r G = "+num2str(W_coef[0])+"\r Rc = "+num2str(W_coef[1])
    1002                         TagText+="\r chi-square = "+num2str(V_chisq)
     1056//                      TagText = "Fitted Guinier  "+"Int*Q = G*exp(-q^2*Rg^2/2))"+" \r G = "+num2str(W_coef[0])+"\r Rc = "+num2str(W_coef[1])
     1057//                      TagText+="\rchi-square = "+num2str(V_chisq)
     1058                        TagText = "Fited Guinier : I(Q)*Q = I(0)*exp(-q\\S2\\M*Rg\\S2\\M/2)\rI(0) = "+num2str(W_coef[0])+";   Rc = "+num2str(W_coef[1])
     1059                        TagText+="\rQ\Bmin\MRg = "+QminRg+"\tQ\Bmax\MRg = "+QmaxRg
     1060                        TagText+="\rχ\\S2\\M  = "+AchiCHiStr
     1061                        TagTextLin = "I(0) = "+num2str(W_coef[0])+"\t\tRc = "+num2str(W_coef[1])
     1062                        TagTextLin+="\rQ\Bmin\MRg = "+QminRg+"\tQ\Bmax\MRg = "+QmaxRg
     1063                        TagTextLin +="\rχ\\S2\\M  = "+AchiCHiStr
    10031064                        break
    10041065                case "Sheet":   // execute if case matches expression
    1005                         TagText = "Fitted Guinier  "+"Int*Q^2 = G*exp(-q^2*Rg^2))"+" \r G = "+num2str(W_coef[0])+"\r Rg = "+num2str(W_coef[1])
    1006                         TagText+="\r Thickness = "+num2str(W_coef[1]*sqrt(12))
    1007                         TagText+="\r chi-square = "+num2str(V_chisq)
     1066//                      TagText = "Fitted Guinier  "+"Int*Q^2 = G*exp(-q^2*Rg^2))"+" \r G = "+num2str(W_coef[0])+"\r Rg = "+num2str(W_coef[1])
     1067//                      TagText+="\r Thickness = "+num2str(W_coef[1]*sqrt(12))
     1068//                      TagText+="\r chi-square = "+num2str(V_chisq)
     1069                        TagText = "Fited Guinier : I(Q)*Q\S2\M = I(0)*exp(-q\\S2\\M*Rg\\S2\\M)\rI(0) = "+num2str(W_coef[0])+"\t\tRg = "+num2str(W_coef[1])
     1070                        TagText+="\rThickness = "+num2str(W_coef[1]*sqrt(12))
     1071                        TagText+="\rQ\Bmin\MRg = "+QminRg+"\tQ\Bmax\MRg = "+QmaxRg
     1072                        TagText+="\rχ\\S2\\M  = "+AchiCHiStr
     1073                        TagTextLin = "I(0) = "+num2str(W_coef[0])+"\t\tRg = "+num2str(W_coef[1])
     1074                        TagTextLin+="\rThickness = "+num2str(W_coef[1]*sqrt(12))
     1075                        TagTextLin+="\rQ\Bmin\MRg = "+QminRg+"\tQ\Bmax\MRg = "+QmaxRg
     1076                        TagTextLin +="\rχ\\S2\\M  = "+AchiCHiStr
    10081077                        break
    10091078                default:                        // optional default expression executed
     
    10121081        string TagName= "GuinierFit" //UniqueName("GuinierFit",14,0,"IR3J_LogLogDataDisplay")
    10131082        Tag/C/W=IR3J_LogLogDataDisplay/N=$(TagName)/L=2/X=-15.00/Y=-15.00  $NameOfWave(CursorAWave), ((DataQstartPoint + DataQEndPoint)/2),TagText     
     1083       
     1084        DoWindow IR3J_LinDataDisplay
     1085        if(V_Flag)
     1086                Wave/Z CursorAWaveLin = CsrWaveRef(A, "IR3J_LinDataDisplay")   
     1087                Tag/C/W=IR3J_LinDataDisplay/N=$(TagName)/L=2/X=15.00/Y=15.00  $NameOfWave(CursorAWaveLin), ((DataQstartPoint + DataQEndPoint)/2),TagTextLin     
     1088        endif
    10141089       
    10151090        Guinier_I0=W_coef[0]    //G
     
    11051180
    11061181        variable/g V_FitError=0                 //This should prevent errors from being generated
    1107 //              if (FitUseErrors && WaveExists(ErrorWave))
    11081182        FuncFit PorodInLogLog W_coef CursorAWave[DataQstartPoint,DataQEndPoint] /X=CursorAXWave /D /C=T_Constraints /W=OriginalDataErrorWave /I=1
    1109 //              else
    1110 //                      FuncFit PorodInLogLog W_coef CursorAWave[pcsr(A),pcsr(B)] /X=CursorAXWave /D /C=T_Constraints                   
    1111 //              endif
    11121183        if (V_FitError!=0)      //there was error in fitting
    11131184                RemoveFromGraph $("fit_"+NameOfWave(CursorAWave))
     
    11161187        endif
    11171188        Wave W_sigma
     1189        AchievedChiSquare = V_chisq/(DataQEndPoint-DataQstartPoint)
     1190        string QminRg, QmaxRg, AchiCHiStr
     1191        sprintf AchiCHiStr, "%2.2f",(AchievedChiSquare)
    11181192        string TagText
    1119         TagText = "Fitted Porod  "+"Int = PC * Q^(-4) + background"+" \r PC = "+num2str(W_coef[0])+"\r Background = "+num2str(W_coef[1])
    1120         TagText+="\r chi-square = "+num2str(V_chisq)
     1193        TagText = "Fitted Porod  "+"I(Q) = P\BC\M * Q\S-4\M + background"+" \r P\BC\M = "+num2str(W_coef[0])+"\r Background = "+num2str(W_coef[1])
     1194        TagText +="\rχ\\S2\\M  = "+AchiCHiStr
    11211195        string TagName= "PorodFit"
    11221196        Tag/C/W=IR3J_LogLogDataDisplay/N=$(TagName)/L=2/X=-15.00/Y=-15.00  $NameOfWave(CursorAWave), ((DataQstartPoint + DataQEndPoint)/2),TagText     
     
    11241198        DataBackground=W_coef[1]        //Background
    11251199        SetDataFolder oldDf
    1126 
    11271200end
    11281201
     
    12741347        endif
    12751348        Wave W_sigma
     1349        AchievedChiSquare = V_chisq/(DataQEndPoint-DataQstartPoint)
    12761350        string TagText
    12771351        TagText = "Fitted Spheroid Form Factor   \r"+"Int=Scale*SpheroidFF(Q,R,beta)+bck"+" \r Radius [A] = "+num2str(W_coef[1])+" \r Aspect ratio = "+num2str(W_coef[2])+" \r Scale = "+num2str(W_coef[0])
     
    13441418
    13451419        Duplicate/O/R=[DataQstartPoint,DataQEndPoint] OriginalDataQWave, ModelLogLogQ, ModelLogLogInt, NormalizedResidualLogLogQ
    1346         Duplicate/O/R=[DataQstartPoint,DataQEndPoint] OriginalDataIntWave, NormalizedResidualLogLog
     1420        Duplicate/O/R=[DataQstartPoint,DataQEndPoint] OriginalDataIntWave, NormalizedResidualLogLog, ZeroLineResidualLogLog
     1421        ZeroLineResidualLogLog = 0
    13471422        //do we need linearized data?
    13481423        variable UsingLinearizedModel=0
     
    13501425                UsingLinearizedModel=1
    13511426                Duplicate/O/R=[DataQstartPoint,DataQEndPoint] LinModelDataQWave, ModelLlinLinQ2, ModelLinLinLogInt, NormalizedResidualLinLinQ
    1352                 Duplicate/O/R=[DataQstartPoint,DataQEndPoint] LinModelDataIntWave, NormalizedResidualLinLin
     1427                Duplicate/O/R=[DataQstartPoint,DataQEndPoint] LinModelDataIntWave, NormalizedResidualLinLin, ZeroLineResidualLinLin
     1428                ZeroLineResidualLinLin = 0
    13531429        else
    13541430                UsingLinearizedModel=0
    1355                 KillWaves/Z ModelLlinLinQ2, ModelLinLinLogInt, NormalizedResidualLinLinQ, NormalizedResidualLinLin
     1431                KillWaves/Z ModelLlinLinQ2, ModelLinLinLogInt, NormalizedResidualLinLinQ, NormalizedResidualLinLin, ZeroLineResidualLinLin
    13561432        endif
    13571433
     
    14051481        Duplicate/Free NormalizedResidualLogLog, ChiSquareTemp
    14061482        ChiSquareTemp = ((TempOriginalIntensity-ModelLogLogInt)/TempOriginalError)^2
    1407         AchievedChiSquare = (sum(ChiSquareTemp))
     1483        AchievedChiSquare = (sum(ChiSquareTemp)/numpnts(ChiSquareTemp))
    14081484        CheckDisplayed /W=IR3J_LogLogDataDisplay ModelLogLogInt
    14091485        if(!V_flag)
    14101486                AppendToGraph /W=IR3J_LogLogDataDisplay  ModelLogLogInt  vs ModelLogLogQ
    1411                 ModifyGraph/W=IR3J_LogLogDataDisplay  lsize(ModelLogLogInt)=2,rgb(ModelLogLogInt)=(0,0,0)
     1487                ModifyGraph/W=IR3J_LogLogDataDisplay  lsize(ModelLogLogInt)=3,rgb(ModelLogLogInt)=(0,0,0)
    14121488        endif
    14131489        CheckDisplayed /W=IR3J_LogLogDataDisplay NormalizedResidualLogLog
    14141490        if(!V_flag)
    1415                 AppendToGraph /W=IR3J_LogLogDataDisplay/R  NormalizedResidualLogLog  vs NormalizedResidualLogLogQ
    1416                 ModifyGraph/W=IR3J_LogLogDataDisplay  mode(NormalizedResidualLogLog)=2,lsize(NormalizedResidualLogLog)=3,rgb(NormalizedResidualLogLog)=(0,0,0)
    1417                 Label/W=IR3J_LogLogDataDisplay right "Normalized residuals"
     1491                        //ModifyGraph /W=IR3J_LogLogDataDisplay standoff(left)=0,axisEnab(left)={0,1}
     1492                        AppendToGraph /W=IR3J_LogLogDataDisplay /L=VertCrossing NormalizedResidualLogLog vs NormalizedResidualLogLogQ
     1493                        ModifyGraph/W=IR3J_LogLogDataDisplay mode(NormalizedResidualLogLog)=2,rgb(NormalizedResidualLogLog)=(0,0,0)
     1494                        ModifyGraph/W=IR3J_LogLogDataDisplay  mirror=1,nticks(VertCrossing)=0,axisEnab(VertCrossing)={0,0.1},freePos(VertCrossing)=0
     1495                        SetAxis/W=IR3J_LogLogDataDisplay /A/E=2 VertCrossing
     1496                        ModifyGraph/W=IR3J_LogLogDataDisplay standoff=0
     1497                        //Label/W=IR3J_LogLogDataDisplay VertCrossing "Norm res"
     1498                        AppendToGraph /W=IR3J_LogLogDataDisplay /L=VertCrossing ZeroLineResidualLogLog vs NormalizedResidualLogLogQ
     1499                        ModifyGraph/W=IR3J_LogLogDataDisplay rgb(ZeroLineResidualLogLog)=(0,0,0)
    14181500        endif
    14191501        //now same, if we are using linearized data
     
    14281510                CheckDisplayed /W=IR3J_LinDataDisplay NormalizedResidualLinLin
    14291511                if(!V_flag)
    1430                         AppendToGraph /W=IR3J_LinDataDisplay/R  NormalizedResidualLinLin  vs NormalizedResidualLinLinQ
    1431                         ModifyGraph/W=IR3J_LinDataDisplay mode(NormalizedResidualLinLin)=2,lsize(NormalizedResidualLinLin)=3,rgb(NormalizedResidualLinLin)=(0,0,0)
    1432                         Label/W=IR3J_LinDataDisplay right "Normalized residuals"
     1512                        //AppendToGraph /W=IR3J_LinDataDisplay/R  NormalizedResidualLinLin  vs NormalizedResidualLinLinQ
     1513                        //ModifyGraph/W=IR3J_LinDataDisplay mode(NormalizedResidualLinLin)=2,lsize(NormalizedResidualLinLin)=3,rgb(NormalizedResidualLinLin)=(0,0,0)
     1514                        //Label/W=IR3J_LinDataDisplay right "Norm res"
     1515                        //ModifyGraph /W=IR3J_LinDataDisplay standoff(left)=0,axisEnab(left)={0,1}
     1516                        AppendToGraph /W=IR3J_LinDataDisplay /L=VertCrossing NormalizedResidualLinLin vs NormalizedResidualLinLinQ
     1517                        ModifyGraph/W=IR3J_LinDataDisplay mode(NormalizedResidualLinLin)=2,rgb(NormalizedResidualLinLin)=(0,0,0)
     1518                        ModifyGraph/W=IR3J_LinDataDisplay  mirror=1,nticks(VertCrossing)=0,axisEnab(VertCrossing)={0,0.1},freePos(VertCrossing)=0
     1519                        SetAxis/W=IR3J_LinDataDisplay /A/E=2 VertCrossing
     1520                        ModifyGraph/W=IR3J_LinDataDisplay standoff=0
     1521                        AppendToGraph /W=IR3J_LinDataDisplay /L=VertCrossing ZeroLineResidualLinLin vs NormalizedResidualLinLinQ
     1522                        ModifyGraph /W=IR3J_LinDataDisplay rgb(ZeroLineResidualLinLin)=(0,0,0)
    14331523                endif
    14341524
  • trunk/User Procedures/Irena/IRB1_bioSAXS.ipf

    r923 r925  
    739739                        endif
    740740                        if(stringmatch(ba.ctrlName,"GetHelp"))
    741                                 IN2G_OpenWebManual("Irena/bioSAXS.html#average-subtract-scale")                         //fix me!!                     
     741                                IN2G_OpenWebManual("Irena/bioSAXS.html#biosaxs-pddf")                           //fix me!!                     
    742742                        endif
    743743
     
    15411541        checkbox GnomForceRmin0, pos={300,235}, title="Rmin==0?", size={76,14},proc=IRB1_PDDFCheckProc, variable=root:Packages:Irena:PDDFInterface:GnomForceRmin0, help={"Force Rmin=0 for Gnom"}
    15421542        checkbox GnomForceRmax0, pos={440,235}, title="Rmax==0?", size={76,14},proc=IRB1_PDDFCheckProc, variable=root:Packages:Irena:PDDFInterface:GnomForceRmax0, help={"Force Dmax=0 for Gnom"}
    1543         SetVariable GnomAlfaValue,pos={270,260},size={140,15}, noproc,title="Alfa in = ",variable=root:Packages:Irena:PDDFInterface:GnomAlfaValue, limits={0,5,0.1}, help={"Alfa value estimate for Gnom, if you know. ) for automatic"}
     1543        SetVariable GnomAlfaValue,pos={270,260},size={140,15}, noproc,title="Alfa in = ",variable=root:Packages:Irena:PDDFInterface:GnomAlfaValue, limits={0,5,0.1}, help={"Alfa value estimate for Gnom, if you know. Use 0 for automatic"}
    15441544        //common settings
    15451545        SetVariable NumBinsInR,pos={440,260},size={140,15}, noproc,title="R pnts in =",variable=root:Packages:Irena:PDDFInterface:NumBinsInR, limits={0,1000,20}, help={"Set to specific number (100) or leave to 0 for automatic"}
     
    15541554        Button RunSequenceofPDDF,pos={300,375},size={200,20}, proc=IRB1_PDDFButtonProc,title="Run PDDF on all selected", help={"Run GNOM on these data"}
    15551555        //here we need some output values from GNOM, need space at leats for Alfa
    1556         SetVariable GNOMAlfaResult,pos={270,400},size={160,15}, noproc,title="GNOM Alfa out =",variable=root:Packages:Irena:PDDFInterface:GNOMAlfaResult,disable=0, noedit=1,limits={0,inf,0},frame=0
     1556        SetVariable GNOMAlfaResult,pos={330,410},size={160,15}, noproc,title="GNOM Alfa out =",variable=root:Packages:Irena:PDDFInterface:GNOMAlfaResult,disable=0, noedit=1,limits={0,inf,0},frame=0, help={"Alfa value reported by GNOM as output value"}
     1557        SetVariable GNOMDmaxOut,pos={330,430},size={160,15}, noproc,title="GNOM Dmax out =",variable=root:Packages:Irena:PDDFInterface:GNOMDmaxOut,disable=0, noedit=1,limits={0,inf,0},frame=0, help={"Dmax value reported by GNOM as output value"}
     1558
    15571559
    15581560        //TAB 1
     
    15701572        checkbox RamboTainerSubtractFlatBackground, pos={420,330}, title="Subtract Background?", size={76,14},proc=IRB1_PDDFCheckProc, variable=root:Packages:Irena:PDDFInterface:RamboTainerSubtractFlatBackground, mode=0, help={"Subtract background from I(Q)"}
    15711573        NVAR RamboTainerFlatBackground=root:Packages:Irena:PDDFInterface:RamboTainerFlatBackground
     1574        if(RamboTainerFlatBackground==0)
     1575                RamboTainerFlatBackground = 0.0001
     1576        endif
    15721577        SetVariable RamboTainerFlatBackground,pos={270,355},size={250,18}, bodyWidth=90, proc=IRB1_PDDFSetVarProc,title="Flat Background = ", variable=root:Packages:Irena:PDDFInterface:RamboTainerFlatBackground, limits={0.00,inf,RamboTainerFlatBackground*0.01},frame=1, help={"Flat Background"}, format="%4.2f"
    15731578
     
    18121817        Button RunSequenceofPDDF, win=IRB1_PDDFInterfacePanel,  disable = (whichTab!=0)
    18131818        SetVariable GNOMAlfaResult, win=IRB1_PDDFInterfacePanel,  disable = (whichTab!=0)
     1819        SetVariable GNOMDmaxOut, win=IRB1_PDDFInterfacePanel,  disable = (whichTab!=0)
    18141820end
    18151821//**********************************************************************************************************
     
    20822088        Wave OriginalQvector=root:Packages:Irena:PDDFInterface:Q_vec
    20832089        Wave OriginalError=root:Packages:Irena:PDDFInterface:Errors
     2090        NVAR DataQstart = root:Packages:Irena:PDDFInterface:DataQstart
     2091        NVAR DataQend = root:Packages:Irena:PDDFInterface:DataQend
    20842092        //now method 1 how to calcualet MW:     
    20852093        //calculate Molecular weight using SAXSMol2 method...
     
    21592167        //this ends calculations for SAXSMoW2 ...
    21602168        Wave/Z FitScatteringProfile=root:Packages:Irena:PDDFInterface:FitScatteringProfile
     2169        NVAR DataQstart = root:Packages:Irena:PDDFInterface:DataQstart
     2170        NVAR DataQend = root:Packages:Irena:PDDFInterface:DataQend
     2171        string QminRg, QmaxRg
     2172        sprintf QminRg, "%2.2f",(ReciprocalSpaceRg*DataQstart)
     2173        sprintf QmaxRg, "%2.2f",(ReciprocalSpaceRg*DataQend)
     2174
    21612175        if(WaveExists(FitScatteringProfile))
    21622176                CheckDisplayed /W=IRB1_PDDFInterfacePanel#DataDisplay FitScatteringProfile
    21632177                if(V_Flag)
    2164                         string Tagtext="\\F"+IN2G_LkUpDfltStr("FontType")+"\\Z"+IN2G_LkUpDfltVar("TagSize")+"SAXSMoW2 Rg [A] = "+num2str(ReciprocalSpaceRg)+"\r"
     2178                        string Tagtext="\\F"+IN2G_LkUpDfltStr("FontType")+"\\Z"+IN2G_LkUpDfltVar("TagSize")+"Rg [A] = "+num2str(ReciprocalSpaceRg)+";   "
    21652179                        Tagtext+="\\F"+IN2G_LkUpDfltStr("FontType")+"\\Z"+IN2G_LkUpDfltVar("TagSize")+"I0 = "+num2str(ReciprocalSpaceI0)
    21662180                        //Tagtext+="\\F"+IN2G_LkUpDfltStr("FontType")+"\\Z"+IN2G_LkUpDfltVar("TagSize")+"Protein Vol [cm3] = "+num2str(ReciprocalPorodVolumeA3)+"\r"
    2167                         Tagtext+="\\F"+IN2G_LkUpDfltStr("FontType")+"\\Z"+IN2G_LkUpDfltVar("TagSize")+"     MW [kDa] = "+num2str(SAXSMoW2MWRecSpacekDa)
     2181                        TagText+="\\F"+IN2G_LkUpDfltStr("FontType")+"\\Z"+IN2G_LkUpDfltVar("TagSize")+"\rQmin*Rg = "+QminRg+"\tQmax*Rg = "+QmaxRg
     2182                        Tagtext+="\\F"+IN2G_LkUpDfltStr("FontType")+"\\Z"+IN2G_LkUpDfltVar("TagSize")+"\rSAXSMoW2 MW [kDa] = "+num2str(SAXSMoW2MWRecSpacekDa)
    21682183                        Tag/C/N=GuessRg/A=LT/L=0/TL=0/W=IRB1_PDDFInterfacePanel#DataDisplay FitScatteringProfile, numpnts(FitScatteringProfile)/10,Tagtext
    21692184                endif
     
    27182733        Wave/T GNOMOutFileTextWave = root:Packages:Irena:PDDFInterface:GNOMOutFileTextWave
    27192734        //read values from out file... 
     2735
     2736        NVAR GNOMDmaxOut = root:Packages:Irena:PDDFInterface:GNOMDmaxOut
    27202737        NVAR GNOMAlfaResult = root:Packages:Irena:PDDFInterface:GNOMAlfaResult
    27212738        NVAR RealSpaceRg = root:Packages:Irena:PDDFInterface:RealSpaceRg
     
    27282745        Grep /E="Real space I" GNOMOutFileTextWave as TempStrWave       
    27292746        RealSpaceI0 = str2num(StringFromList(1, TempStrWave[0]+":", ":"))
     2747        Grep /E="Maximum characteristic size:" GNOMOutFileTextWave as TempStrWave       
     2748        GNOMDmaxOut = str2num(StringFromList(1, TempStrWave[0]+":", ":"))
    27302749        print "***************************************************************************"
    27312750        For(i=0;i<60;i+=1)
     
    30833102        ListOfVariables += "SleepBetweenDataProcesses;OverwriteExistingData;DisplayErrorBars;" 
    30843103        ListOfVariables += "PDDFUseGNOM;PDDFuseMoore;PDDFuseregularization;PDDFUseAutoGNOM;"   
    3085         ListOfVariables += "DmaxEstimate;CalculateDmaxEstOnImport;GnomForceRmin0;GnomForceRmax0;NumBinsInR;GnomAlfaValue;"     
     3104        ListOfVariables += "DmaxEstimate;CalculateDmaxEstOnImport;GnomForceRmin0;GnomForceRmax0;NumBinsInR;GnomAlfaValue;GNOMDmaxOut;
    30863105        ListOfVariables += "MooreNumFunctions;MooreDetNumFunctions;MooreFitMaxSize;"   
    30873106        ListOfVariables += "RealSpaceRg;RealSpaceI0;ConcentrationForCals;ScattLengthDensDifference;PDDFCalculatedMW;RealSpacePorodVolumeA3;"   
  • trunk/User Procedures/Nika/NI1_FileLoaders.ipf

    r924 r925  
    41974197                endif
    41984198                //this is generic NXcanSAS as avilable on https://github.com/canSAS-org/NXcanSAS_examples April 2020
    4199                 if(stringMatch(StringByKey("NX_class", AttribList),"NXdata") && stringMatch(StringByKey("canSAS_class", AttribList),"SASdata"))
     4199                if(stringMatch(StringByKey("NX_class", AttribList),"NXdata") && (stringMatch(StringByKey("canSAS_class", AttribList),"SASdata") || stringMatch(StringByKey("SAS_class", AttribList),"SASdata")))
     4200                         // data : NXdata                               minimum content here...
     4201                            //  @NX_class = "NXdata"
     4202                            //  @canSAS_class = "SASdata"
     4203                            //  @signal = "I"
     4204                            //  @I_axes = "<see the documentation>"
     4205                            //  @Q_indices : NX_INT = <see the documentation>
     4206                            //  I : NX_NUMBER
     4207                            //     @units = <see the documentation>
     4208                            //  Q : NX_NUMBER
     4209                            //     @units = NX_PER_LENGTH
    42004210                        PathToData = stringfromlist(i,ListOfGroups)
    42014211                        //print "Found location of data : " + PathToData
     
    42044214                        For(j=0;j<ItemsInList(ListOfDataSets);j+=1)
    42054215                                tempStr = NI1_HdfReadAllAttributes(fileID, stringfromlist(j,ListOfDataSets),1)
    4206                                 if(stringmatch(stringByKey("signal", tempStr),"I"))                     //the group has signal=I attribute
     4216                                if(stringmatch(stringByKey("signal", AttribList),"I"))                                                                  //the group has signal=I attribute
    42074217                                        TempDataPath = stringfromlist(j,ListOfDataSets)
    4208                                         tempStr2 = stringByKey("I_axes", tempStr)
     4218                                        tempStr2 = stringByKey("I_axes", AttribList)
    42094219                                        if(stringmatch(tempStr2,"Q"))
    42104220                                                TempQPath = TempDataPath[0,strlen(TempDataPath)-2]+"Q"
Note: See TracChangeset for help on using the changeset viewer.