Changeset 9


Ignore:
Timestamp:
Mar 13, 2013 10:42:55 AM (9 years ago)
Author:
ilavsky
Message:

Guinier-Porod code development - added scripting capabilities and Uncertainty evaluation. Not really tested, it's bit messy to handle the structures.

Location:
User Procedures/Irena
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • User Procedures/Irena/IR2_ScriptingTool.ipf

    r6 r9  
    11#pragma rtGlobals=1             // Use modern global access method.
    2 #pragma version=1.11
    3 Constant IR2SversionNumber=1.11
     2#pragma version=1.12
     3Constant IR2SversionNumber=1.12
    44//*************************************************************************\
    55//* Copyright (c) 2005 - 2013, Argonne National Laboratory
     
    1919//1.10 added handling of uncertainities (errors) for Results data type (needed for Sizes)
    2020//1.11 modified to handle d, t, and m type QRS data (d-spacing, two theta, and distance) for needs to Nika users
     21//1.12 Added Guinier-Porod as controlled tool and fixed minor Folder selection bug for other tools
    2122
    2223//**************************************************************************************
     
    235236        if(stringmatch(ctrlName,"FitWithUnified"))
    236237                IR2S_FItWithUnifiedFit()
     238        endif
     239        if(stringmatch(ctrlName,"FitWithGuinierPorod"))
     240                IR2S_FitWithGuinierPorod()
    237241        endif
    238242        if(stringmatch(ctrlName,"FitWithSizes"))
     
    318322Window IR2S_ScriptingToolPnl()
    319323        PauseUpdate; Silent 1           // building window...
    320         NewPanel/K=1 /W=(28,44,412,615) as "Scripting tool"
     324        NewPanel/K=1 /W=(28,44,412,625) as "Scripting tool"
    321325        SetDrawLayer UserBack
    322326        SetDrawEnv fsize= 20,fstyle= 1,textrgb= (0,0,65535)
     
    365369        Button FitWithUnified,pos={90,375},size={200,15},proc=IR2S_ButtonProc,title="Run Unified Fit on selected data"
    366370        Button FitWithUnified,fSize=10,fStyle=2, disable=(root:Packages:Irena:ScriptingTool:UseResults)
    367         Button FitWithSizes,pos={20,400},size={160,15},proc=IR2S_ButtonProc,title="Run Size dist. no uncert."
     371
     372        Button FitWithGuinierPorod,pos={90,395},size={200,15},proc=IR2S_ButtonProc,title="Run Guinier-Porod on selected data"
     373        Button FitWithGuinierPorod,fSize=10,fStyle=2, disable=(root:Packages:Irena:ScriptingTool:UseResults)
     374
     375        Button FitWithSizes,pos={20,415},size={160,15},proc=IR2S_ButtonProc,title="Run Size dist. no uncert."
    368376        Button FitWithSizes,fSize=10,fStyle=2, disable=(root:Packages:Irena:ScriptingTool:UseResults)
    369         Button FitWithSizesU,pos={210,400},size={160,15},proc=IR2S_ButtonProc,title="Run Size distr. w/uncert."
     377        Button FitWithSizesU,pos={210,415},size={160,15},proc=IR2S_ButtonProc,title="Run Size distr. w/uncert."
    370378        Button FitWithSizesU,fSize=10,fStyle=2, disable=(root:Packages:Irena:ScriptingTool:UseResults)
    371         Button FitWithMoldelingII,pos={90,425},size={200,15},proc=IR2S_ButtonProc,title="Run Modeling II on selected data"
     379        Button FitWithMoldelingII,pos={90,435},size={200,15},proc=IR2S_ButtonProc,title="Run Modeling II on selected data"
    372380        Button FitWithMoldelingII,fSize=10,fStyle=2, disable=(root:Packages:Irena:ScriptingTool:UseResults)
    373         Button CallPlottingToolII,pos={20,450},size={160,15},proc=IR2S_ButtonProc,title="Run (w/reset) Plotting tool"
     381        Button CallPlottingToolII,pos={20,455},size={160,15},proc=IR2S_ButtonProc,title="Run (w/reset) Plotting tool"
    374382        Button CallPlottingToolII,fSize=10,fStyle=2
    375         Button CallPlottingToolIIA,pos={210,450},size={160,15},proc=IR2S_ButtonProc,title="Append to Plotting tool"
     383        Button CallPlottingToolIIA,pos={210,455},size={160,15},proc=IR2S_ButtonProc,title="Append to Plotting tool"
    376384        Button CallPlottingToolIIA,fSize=10,fStyle=2
    377385
    378         CheckBox SaveResultsInNotebook,pos={30,480},size={64,14},proc=IR2S_CheckProc,title="Save results in notebook?"
     386        CheckBox SaveResultsInNotebook,pos={30,490},size={64,14},proc=IR2S_CheckProc,title="Save results in notebook?"
    379387        CheckBox SaveResultsInNotebook,variable= root:Packages:Irena:ScriptingTool:SaveResultsInNotebook
    380         CheckBox ResetBeforeNextFit,pos={30,500},size={64,14},proc=IR2S_CheckProc,title="Reset before next fit? (Unified/Modeling II)"
     388        CheckBox ResetBeforeNextFit,pos={30,510},size={64,14},proc=IR2S_CheckProc,title="Reset before next fit? (Unified/Modeling II)"
    381389        CheckBox ResetBeforeNextFit,variable= root:Packages:Irena:ScriptingTool:ResetBeforeNextFit
    382         CheckBox SaveResultsInFldrs,pos={30,520},size={64,14},proc=IR2S_CheckProc,title="Save results in folders?"
     390        CheckBox SaveResultsInFldrs,pos={30,530},size={64,14},proc=IR2S_CheckProc,title="Save results in folders?"
    383391        CheckBox SaveResultsInFldrs,variable= root:Packages:Irena:ScriptingTool:SaveResultsInFldrs
    384         CheckBox SaveResultsInWaves,pos={30,540},size={64,14},proc=IR2S_CheckProc,title="Save results in waves (Modeling II)?"
     392        CheckBox SaveResultsInWaves,pos={30,550},size={64,14},proc=IR2S_CheckProc,title="Save results in waves (Modeling II)?"
    385393        CheckBox SaveResultsInWaves,variable= root:Packages:Irena:ScriptingTool:SaveResultsInWaves
    386394
     
    819827                        PU_Struct.win = "IR1P_ControlPanel"
    820828                        IR2C_PanelPopupControl(PU_Struct)
    821                         PopupMenu SelectDataFolder win=IR1P_ControlPanel, popmatch=CurrentFolderName
     829                        //PopupMenu SelectDataFolder win=IR1P_ControlPanel, popmatch=CurrentFolderName
     830                        PopupMenu SelectDataFolder win=IR1P_ControlPanel, value="---;"+IR2P_GenStringOfFolders(winNm="IR1P_ControlPanel")
     831                        PopupMenu SelectDataFolder win=IR1P_ControlPanel, popmatch=StringFromList(ItemsInList(DataFolderName,":")-1,DataFolderName,":")
    822832                        //not enough if using results, which user can select what to plot very specifically...
    823833                        if(STUseResults)
     
    943953                        PU_Struct.win = "LSQF2_MainPanel"
    944954                        IR2C_PanelPopupControl(PU_Struct)
    945                         PopupMenu SelectDataFolder win=LSQF2_MainPanel, popmatch=CurrentFolderName
     955                        //PopupMenu SelectDataFolder win=LSQF2_MainPanel, popmatch=CurrentFolderName
     956                        PopupMenu SelectDataFolder win=LSQF2_MainPanel, value="---;"+IR2P_GenStringOfFolders(winNm="LSQF2_MainPanel")
     957                        PopupMenu SelectDataFolder win=LSQF2_MainPanel, popmatch=StringFromList(ItemsInList(DataFolderName,":")-1,DataFolderName,":")
    946958                        //preset the right setting of the tool here, just in case...
    947959                        IR2L_Data_TabPanelControl("",0) //sets the tab 0 active.
     
    10661078                        //this should create the new graph...
    10671079                        IR1R_GraphIfAllowed("GraphIfAllowedSkipRecover")
    1068                         PopupMenu SelectDataFolder win=IR1R_SizesInputPanel, popmatch=DataFolderName
     1080                        //PopupMenu SelectDataFolder win=IR1R_SizesInputPanel, popmatch=DataFolderName
     1081                        PopupMenu SelectDataFolder win=IR1R_SizesInputPanel, value="---;"+IR2P_GenStringOfFolders(winNm="IR1R_SizesInputPanel")
     1082                        PopupMenu SelectDataFolder win=IR1R_SizesInputPanel, popmatch=StringFromList(ItemsInList(DataFolderName,":")-1,DataFolderName,":")
    10691083                        //now we need to set back the cursors.
    10701084                        if(StartQ>0)
     
    11131127//**************************************************************************************
    11141128//**************************************************************************************
     1129Function IR2S_FitWithGuinierPorod()
     1130
     1131        DoWindow IR3DP_MainPanel
     1132        if(!V_Flag)
     1133                Abort  "The Unified fit tool panel and graph must be opened"
     1134        else
     1135                DoWIndow/F IR3DP_MainPanel
     1136        endif
     1137       
     1138        DoWindow GunierPorod_LogLogPlot
     1139        if(!V_Flag)
     1140                Abort  "The Guinier Porod tool panel and graph must be opened"
     1141        else
     1142                DoWIndow/F GunierPorod_LogLogPlot
     1143        endif
     1144
     1145
     1146        string OldDF=GetDataFolder(1)
     1147        setDataFolder root:Packages:Irena:ScriptingTool
     1148        NVAR STUseIndra2Data = root:Packages:Irena:ScriptingTool:UseIndra2Data
     1149        NVAR STUseQRSdata =root:Packages:Irena:ScriptingTool:UseQRSdata
     1150       
     1151        NVAR PTUseIndra2Data=root:Packages:Irena:GuinierPorod:UseIndra2Data
     1152        NVAR PTUseQRSdata=root:Packages:Irena:GuinierPorod:UseQRSdata
     1153        PTUseQRSdata=STUseQRSdata
     1154        PTUseIndra2Data=STUseIndra2Data
     1155
     1156
     1157        Wave/T ListOfAvailableData = root:Packages:Irena:ScriptingTool:ListOfAvailableData
     1158        Wave SelectionOfAvailableData =root:Packages:Irena:ScriptingTool:SelectionOfAvailableData
     1159        NVAR UseIndra2Data = root:Packages:Irena:ScriptingTool:UseIndra2Data
     1160        variable NumOfSelectedFiles = sum(SelectionOfAvailableData)
     1161        NVAR SaveResultsInNotebook = root:Packages:Irena:ScriptingTool:SaveResultsInNotebook
     1162        NVAR ResetBeforeNextFit = root:Packages:Irena:ScriptingTool:ResetBeforeNextFit
     1163        NVAR SaveResultsInFldrs = root:Packages:Irena:ScriptingTool:SaveResultsInFldrs
     1164        SVAR StartFolderName = root:Packages:Irena:ScriptingTool:StartFolderName
     1165        string LStartFolder
     1166        if(stringmatch(StartFolderName,"---"))
     1167                LStartFolder="root:"
     1168        else
     1169                LStartFolder=StartFolderName
     1170        endif
     1171       
     1172        variable i
     1173        string CurrentFolderName
     1174        variable StartQ, EndQ           //need to store these from cursor positions (if set)
     1175        DoWIndow IR1_LogLogPlotU
     1176        if(V_Flag)
     1177                Wave Ywv = csrXWaveRef(A  , "GunierPorod_LogLogPlot" )
     1178                StartQ = Ywv[pcsr(A  , "GunierPorod_LogLogPlot" )]
     1179                EndQ = Ywv[pcsr(B  , "GunierPorod_LogLogPlot" )]
     1180        endif
     1181        For(i=0;i<numpnts(ListOfAvailableData);i+=1)
     1182                if(SelectionOfAvailableData[i]>0.5)
     1183                        //here process the Unified...
     1184                        //CurrentFolderName="root:"
     1185                        //if(UseIndra2Data)
     1186                        //      CurrentFolderName+="USAXS:"
     1187                        //endif
     1188                        CurrentFolderName = LStartFolder + ListOfAvailableData[i]
     1189                        //OK, now we know which files to process       
     1190                        //now stuff the name of the new folder in the folder name in Unified...
     1191                        SVAR DataFolderName = root:Packages:Irena:GuinierPorod:DataFolderName
     1192                        DataFolderName = CurrentFolderName
     1193                        //now except for case when we use Indra 2 data we need to reload the other wave names...
     1194                        STRUCT WMPopupAction PU_Struct
     1195                        PU_Struct.ctrlName = "SelectDataFolder"
     1196                        PU_Struct.popNum=0
     1197                        PU_Struct.eventcode=2
     1198                        PU_Struct.popStr=DataFolderName
     1199                        PU_Struct.win = "IR3DP_MainPanel"
     1200                        IR2C_PanelPopupControl(PU_Struct)
     1201                        PopupMenu SelectDataFolder win=IR3DP_MainPanel, value="---;"+IR2P_GenStringOfFolders(winNm="IR3DP_MainPanel")
     1202                        PopupMenu SelectDataFolder win=IR3DP_MainPanel, popmatch=StringFromList(ItemsInList(DataFolderName,":")-1,DataFolderName,":")
     1203                       
     1204                        //this should create the new graph...
     1205                        IR3GP_PanelButtonProc("DrawGraphsSkipDialogs")
     1206                        //now we need to set back the cursors.
     1207                        if(StartQ>0)
     1208                                Wave Qwave = root:Packages:Irena:GuinierPorod:OriginalQvector
     1209                                if(binarysearch(Qwave,StartQ)>0)
     1210                                        Cursor  /P /W=IR1_LogLogPlotU A  OriginalIntensity binarysearch(Qwave,StartQ)
     1211                                endif   
     1212                        endif
     1213                        if(EndQ>0)
     1214                                Wave Qwave = root:Packages:Irena:GuinierPorod:OriginalQvector
     1215                                if(binarysearch(Qwave,EndQ)>0)
     1216                                        Cursor  /P /W=IR1_LogLogPlotU B  OriginalIntensity binarysearch(Qwave,EndQ)     
     1217                                endif
     1218                        endif
     1219                       
     1220                        variable/g root:Packages:Irena:GuinierPorod:FitFailed
     1221                        //do fitting
     1222                        IR3GP_PanelButtonProc("DoFittingSkipReset")
     1223                        DoUpdate
     1224                        NVAR FitFailed=root:Packages:Irena:GuinierPorod:FitFailed
     1225                       
     1226                        if(SaveResultsInNotebook)
     1227                                IR2S_SaveResInNbkGunPor(FitFailed)
     1228                        endif
     1229                        if(SaveResultsInFldrs && !FitFailed)
     1230                                IR3GP_PanelButtonProc("CopyTFolderNoQuestions")
     1231                        endif
     1232                        if(ResetBeforeNextFit && !FitFailed)
     1233                                IR3GP_PanelButtonProc("RevertFitting")   
     1234                        endif
     1235                        KillVariables  FitFailed
     1236                endif
     1237               
     1238       
     1239        endfor
     1240       
     1241       
     1242
     1243        setDataFolder OldDF
     1244end
    11151245//**************************************************************************************
    11161246//**************************************************************************************
     
    11911321                        PU_Struct.win = "IR1A_ControlPanel"
    11921322                        IR2C_PanelPopupControl(PU_Struct)
    1193                         PopupMenu SelectDataFolder win=IR1A_ControlPanel, popmatch=DataFolderName
     1323                        //PopupMenu SelectDataFolder win=IR1A_ControlPanel, popmatch=DataFolderName
     1324                        PopupMenu SelectDataFolder win=IR1A_ControlPanel, value="---;"+IR2P_GenStringOfFolders(winNm="IR1A_ControlPanel")
     1325                        PopupMenu SelectDataFolder win=IR1A_ControlPanel, popmatch=StringFromList(ItemsInList(DataFolderName,":")-1,DataFolderName,":")
    11941326                       
    11951327                        //this should create the new graph...
     
    12351367end
    12361368
     1369//**************************************************************************************
     1370//**************************************************************************************
     1371//**************************************************************************************
     1372//**************************************************************************************
     1373
     1374
     1375Function IR2S_SaveResInNbkGunPor(FitFailed)
     1376        variable FitFailed
     1377       
     1378                DoWIndow ScriptingToolNbk
     1379
     1380                if(!V_Flag)
     1381                        NewNotebook /F=1 /K=1 /N=ScriptingToolNbk /W=(400,20,1000,700 ) as "Results of scripting tool runs"             
     1382                endif
     1383                SVAR DataFolderName = root:Packages:Irena:GuinierPorod:DataFolderName
     1384
     1385
     1386                Notebook ScriptingToolNbk   selection={endOfFile, endOfFile}
     1387                Notebook ScriptingToolNbk text="\r"
     1388                Notebook ScriptingToolNbk text="\r"
     1389                Notebook ScriptingToolNbk text="\r"
     1390                Notebook ScriptingToolNbk text="***********************************************\r"
     1391                Notebook ScriptingToolNbk text="***********************************************\r"
     1392                Notebook ScriptingToolNbk text=date()+"   "+time()+"\r"
     1393                Notebook ScriptingToolNbk text="Gunier-Porod results from folder :   "+ DataFolderName+"\r"
     1394                Notebook ScriptingToolNbk text="\r"
     1395                if(FitFailed)
     1396                        Notebook ScriptingToolNbk text="Fit failed\r"
     1397                else
     1398                        Notebook ScriptingToolNbk  scaling={50,50}, frame=1, picture={GunierPorod_LogLogPlot,2,1}       
     1399                        Notebook ScriptingToolNbk text="\r"
     1400                        IR2S_RecordResultsToNbkGP()
     1401                endif
     1402end     
     1403
     1404//**************************************************************************************
     1405//**************************************************************************************
     1406//**************************************************************************************
     1407
     1408
     1409
     1410Function IR2S_RecordResultsToNbkGP()   
     1411
     1412        string OldDF=GetDataFolder(1)
     1413        setdataFolder root:Packages:Irena_UnifFit
     1414
     1415        NVAR NumberOfLevels=root:Packages:Irena:GuinierPorod:NumberOfLevels
     1416
     1417        NVAR SASBackground=root:Packages:Irena:GuinierPorod:SASBackground
     1418        NVAR FitSASBackground=root:Packages:Irena:GuinierPorod:FitSASBackground
     1419        NVAR SubtractBackground=root:Packages:Irena:GuinierPorod:SubtractBackground
     1420        NVAR UseSMRData=root:Packages:Irena:GuinierPorod:UseSMRData
     1421        NVAR SlitLengthUnif=root:Packages:Irena:GuinierPorod:SlitLengthUnif
     1422
     1423        SVAR DataAreFrom=root:Packages:Irena:GuinierPorod:DataFolderName
     1424        SVAR IntensityWaveName=root:Packages:Irena:GuinierPorod:IntensityWaveName
     1425        SVAR QWavename=root:Packages:Irena:GuinierPorod:QWavename
     1426        SVAR ErrorWaveName=root:Packages:Irena:GuinierPorod:ErrorWaveName
     1427
     1428        Notebook ScriptingToolNbk   selection={endOfFile, endOfFile}
     1429        Notebook ScriptingToolNbk text="\r"
     1430        Notebook ScriptingToolNbk text="Summary of Gunier Porod fit results :"+"\r"
     1431        if(UseSMRData)
     1432                Notebook ScriptingToolNbk text="Slit smeared data were. Slit length [A^-1] = "+num2str(SlitLengthUnif)+"\r"
     1433        endif
     1434        Notebook ScriptingToolNbk text="Name of data waves Int/Q/Error \t"+IntensityWaveName+"\t"+QWavename+"\t"+ErrorWaveName+"\r"
     1435        Notebook ScriptingToolNbk text="Number of levels: "+num2str(NumberOfLevels)+"\r"
     1436        Notebook ScriptingToolNbk text="SAS background = "+num2str(SASBackground)+", was fitted? = "+num2str(FitSASBackground)+"       (yes=1/no=0)"+"\r"
     1437        Notebook ScriptingToolNbk text="\r"
     1438        variable i
     1439        STRUCT GunierPorodLevel Par
     1440        For (i=1;i<=NumberOfLevels;i+=1)
     1441                IR3GP_LoadStructureFromWave(Par, i)
     1442                Notebook ScriptingToolNbk text="***********  Level  "+num2str(i)+"\r"
     1443                Notebook ScriptingToolNbk text="P     \t \t"+ num2str(Par.P)+"\t\t+/- "+num2str(Par.PError)+"\t,  \tfitted? = "+num2str(Par.PFit)+"\r"
     1444                if(Par.Rg1>=1e6)
     1445                        Notebook ScriptingToolNbk text="\t Guinier 1 not assumed, using just power law slope"+"\r"
     1446                else
     1447                        Notebook ScriptingToolNbk text="Rg1     \t\t"+ num2str(Par.Rg1)+"\t\t+/- "+num2str(Par.Rg1Error)+"\t,  \tfitted? = "+num2str(Par.Rg1Fit)+"\r"
     1448                        Notebook ScriptingToolNbk text="G      \t\t"+ num2str(Par.G)+"\t\t+/- "+num2str(Par.GError)+"\t,  \tfitted? = "+num2str(Par.GFit)+"\r"
     1449                        if(Par.S1>0)
     1450                                Notebook ScriptingToolNbk text="S1     \t \t"+ num2str(Par.S1)+"\t\t+/- "+num2str(Par.S1Error)+"\t,  \tfitted? = "+num2str(Par.S1Fit)+"\r"
     1451                                if(Par.Rg2>=1e10)
     1452                                        Notebook ScriptingToolNbk text="\t Guinier 2 not assumed, using just power law slope 2"+"\r"
     1453                                else
     1454                                        Notebook ScriptingToolNbk text="Rg2     \t \t"+ num2str(Par.Rg2)+"\t\t+/- "+num2str(Par.Rg2Error)+"\t,  \tfitted? = "+num2str(Par.Rg2Fit)+"\r"
     1455                                endif
     1456                                if(Par.S2>0)
     1457                                        Notebook ScriptingToolNbk text="S2     \t \t"+ num2str(Par.S2)+"\t\t+/- "+num2str(Par.S2Error)+"\t,  \tfitted? = "+num2str(Par.S2Fit)+"\r"
     1458                                endif
     1459                        endif
     1460                endif
     1461                if(Par.RgCutOff>0)
     1462                        Notebook ScriptingToolNbk text="RgCO     \t \t"+ num2str(Par.RgCutOff)+"\r"
     1463                endif
     1464                if(Par.UseCorrelations)
     1465                        Notebook ScriptingToolNbk text="\tAssumed Correlations (Structure factor)"+"\r"
     1466                        Notebook ScriptingToolNbk text="ETA     \t \t"+ num2str(Par.ETA)+"\t\t+/- "+num2str(Par.ETAError)+"\t,  \tfitted? = "+num2str(Par.ETAFit)+"\r"
     1467                        Notebook ScriptingToolNbk text="Pack     \t \t"+ num2str(Par.Pack)+"\t\t+/- "+num2str(Par.PackError)+"\t,  \tfitted? = "+num2str(Par.PackFit)+"\r"
     1468                endif
     1469        endfor
     1470       
     1471                NVAR AchievedChisq=root:Packages:Irena:GuinierPorod:AchievedChisq
     1472                Notebook ScriptingToolNbk text="Chi-Squared \t"+ num2str(AchievedChisq)+"\r"
     1473
     1474                DoWindow /F GunierPorod_LogLogPlot
     1475                if (strlen(csrWave(A))!=0 && strlen(csrWave(B))!=0)             //cursors in the graph
     1476                        Notebook ScriptingToolNbk text="Points selected for fitting \t"+ num2str(pcsr(A)) + "   to \t"+num2str(pcsr(B))+"\r"
     1477                else
     1478                        Notebook ScriptingToolNbk text="Whole range of data selected for fitting"+"\r"
     1479                endif
     1480                               
     1481        setdataFolder oldDf
     1482end
    12371483//**************************************************************************************
    12381484//**************************************************************************************
  • User Procedures/Irena/IR3_GuinierPorodModel.ipf

    r6 r9  
    11#pragma rtGlobals=3             // Use modern global access method.
    2 #pragma version=0.91            //this is Irena package Guinier-Porod model based on Hammouda's paper
     2#pragma version=0.92            //this is Irena package Guinier-Porod model based on Hammouda's paper
    33// J. Appl. Cryst. (2010). 43, 716Ð719, Boualem Hammouda, A new GuinierÐPorod model
    4 Constant IR3GPversionNumber=0.91
     4Constant IR3GPversionNumber=0.92
    55
    66//*************************************************************************\
     
    1616
    1717//version history
    18 // 0.9 - original release, unfinished, barely functional, no manual support.
    19 //0.91 GUI improvements, local fits improvements.
     18//      0.9 - original release, unfinished, barely functional, no manual support.
     19//      0.91 GUI improvements, local fits improvements.
     20//      0.92 More code developemnt, added Uncertainity evaluation and scripting tool.
    2021
    2122//Menu "SAS"
     
    8081        variable  Rg2HighLimit
    8182        variable  Rg2Error
    82         variable  d
    83         int16  dFit
    84         variable  dLowLimit
    85         variable  dHighLimit
    86         variable  dError
     83        variable  P
     84        int16  PFit
     85        variable  PLowLimit
     86        variable  PHighLimit
     87        variable  PError
    8788        variable  s1
    8889        int16  s1Fit
     
    152153
    153154        NVAR Level_P
    154         Level_P = Par.D
     155        Level_P = Par.P
    155156        NVAR Level_PFit
    156         Level_PFit = Par.DFit
     157        Level_PFit = Par.PFit
    157158        NVAR Level_PLowLimit
    158         Level_PLowLimit = Par.DLowLimit
     159        Level_PLowLimit = Par.PLowLimit
    159160        NVAR Level_PHighLimit
    160         Level_PHighLimit = Par.DHighLimit
     161        Level_PHighLimit = Par.PHighLimit
    161162        NVAR Level_PError
    162         Level_PError = Par.DError
     163        Level_PError = Par.PError
    163164
    164165        NVAR Level_S1
     
    256257
    257258        NVAR Level_P
    258          Par.D = Level_P
     259         Par.P = Level_P
    259260        NVAR Level_PFit
    260          Par.DFit = Level_PFit
     261         Par.PFit = Level_PFit
    261262        NVAR Level_PLowLimit
    262          Par.DLowLimit = Level_PLowLimit
     263         Par.PLowLimit = Level_PLowLimit
    263264        NVAR Level_PHighLimit
    264          Par.DHighLimit = Level_PHighLimit
     265         Par.PHighLimit = Level_PHighLimit
    265266        NVAR Level_PError
    266          Par.DError = Level_PError
     267         Par.PError = Level_PError
    267268
    268269        NVAR Level_S1
     
    322323//******************************************************************************************
    323324//******************************************************************************************
     325Function IR3GP_MoveLevelToWave(level)
     326        variable level
     327       
     328        STRUCT GunierPorodLevel Par
     329        IR3GP_MoveGlobalsToStr(Par)
     330        Wave LevelStructure = $("root:Packages:Irena:GuinierPorod:Level"+num2str(level)+"Structure")
     331        StructPut Par, LevelStructure
     332end
     333//******************************************************************************************
     334//******************************************************************************************
     335Function IR3GP_LoadLevelFromWave(level)
     336        variable level
     337       
     338        STRUCT GunierPorodLevel Par
     339        Wave LevelStructure = $("root:Packages:Irena:GuinierPorod:Level"+num2str(level)+"Structure")
     340        StructGet Par, LevelStructure
     341        IR3GP_MoveStrToGlobals(Par)
     342end
     343//******************************************************************************************
     344//******************************************************************************************
    324345Function IR3GP_SaveStructureToWave(Par, level)
    325346        STRUCT GunierPorodLevel &Par
     
    354375// Q1 = sqrt((d - s1)*(3 - s1)/2) / Rg1
    355376// D = G * exp(-Q1^2 * Rg^2/(3-s))*Q1^(d-s) = G*exp(-(d-s)/2)*((3-s)*(d-s)/2)^((d-s)/2) /Rg^(d-s)
    356         variable Q1val = sqrt((Par.d - Par.s1)*(3 - Par.s1)/2) / Par.Rg1
     377        variable Q1val = sqrt((Par.P - Par.s1)*(3 - Par.s1)/2) / Par.Rg1
    357378        //print "Q1 = "+num2str(Q1val)
    358         variable Dval=Par.G*exp(-(Par.d-Par.s1)/2)*((3-Par.s1)*(Par.d-Par.s1)/2)^((Par.d-Par.s1)/2) /Par.Rg1^(Par.d-Par.s1)
     379        variable Dval=Par.G*exp(-(Par.P-Par.s1)/2)*((3-Par.s1)*(Par.P-Par.s1)/2)^((Par.P-Par.s1)/2) /Par.Rg1^(Par.P-Par.s1)
    359380        //print "D = "+num2str(Dval)
    360381        variable Q2val = sqrt((1 - Par.s2)/((2/(3-Par.s2)*Par.Rg2^2) - (2/(3-Par.s1))*Par.Rg1^2) )
     
    374395        if(MidQRangePntMax>0)
    375396                Intensity[LowQRangePntMax+1,MidQRangePntMax] = Par.G/(Qvector[p]^Par.s1) * exp(-1 * Qvector[p]^2 * Par.Rg1^2 / (3-Par.s1))
    376                 Intensity[MidQRangePntMax+1,] = Dval / (Qvector[p]^Par.d)
     397                Intensity[MidQRangePntMax+1,] = Dval / (Qvector[p]^Par.P)
    377398        elseif(MidQRangePntMax<0)
    378                 Intensity = Dval / (Qvector[p]^Par.d)
     399                Intensity = Dval / (Qvector[p]^Par.P)
    379400        endif
    380401
     
    493514        string EUserLookup="r*:s*;"
    494515        IR2C_AddDataControls("Irena:GuinierPorod","IR3DP_MainPanel","DSM_Int;M_DSM_Int;SMR_Int;M_SMR_Int;","",UserDataTypes,UserNameString,XUserLookup,EUserLookup, 1,1)
    495 //      SetDrawLayer UserBack
    496 //      SetDrawEnv fname= "Times New Roman", save
    497 //      SetDrawEnv fname= "Times New Roman",fsize= 28,fstyle= 3,textrgb= (0,0,52224)
    498 //      DrawText 90,26,"Gunier Porod"
    499516        TitleBox MainTitle title="Gunier Porod",pos={120,0},frame=0,fstyle=3, fixedSize=1,font= "Times New Roman", size={260,24},fSize=22,fColor=(0,0,52224)
    500 //      SetDrawEnv linethick= 3,linefgc= (0,0,52224)
    501 //      DrawLine 16,176,339,176
    502517        TitleBox FakeLine1 title=" ",fixedSize=1,size={330,3},pos={16,176},frame=0,fColor=(0,0,52224), labelBack=(0,0,52224)
    503 //      SetDrawEnv fsize= 16,fstyle= 1
    504 //      DrawText 18,49,"Data input"
    505518        TitleBox Info1 title="Data input",pos={10,30},frame=0,fstyle=1, fixedSize=1,size={80,20},fSize=14,fColor=(0,0,52224)
    506 //      SetDrawEnv fsize= 16,fstyle= 1
    507 //      DrawText 10,200,"Gunier-Porod model input"
    508519        TitleBox Info2 title="Gunier-Porod model input",pos={10,185},frame=0,fstyle=2, fixedSize=1,size={150,20},fSize=14
    509 //      SetDrawEnv textrgb= (0,0,65280),fstyle= 1, fsize= 12
    510 //      DrawText 200,275,"Fit?:"
    511520        TitleBox Info3 title="Fit?  Low limit:    High Limit:",pos={200,262},frame=0,fstyle=2, fixedSize=0,size={20,15},fSize=12,fstyle=3,fColor=(0,0,65535)
    512 //      SetDrawEnv textrgb= (0,0,65280),fstyle= 1, fsize= 12
    513 ///     DrawText 230,275,"Low limit:    High Limit:"
    514 //      DrawText 10,600,"Fit using least square fitting ?"
    515521        TitleBox Info4 title="Fit using least square fitting ?",pos={3,584},frame=0,fstyle=2, fixedSize=0,size={120,15},fSize=12,fstyle=3,fColor=(0,0,65535)
    516 //      DrawPoly 113,225,1,1,{113,225,113,225}
    517 //      SetDrawEnv linethick= 3,linefgc= (0,0,52224)
    518 //      DrawLine 330,612,350,612
    519522        TitleBox FakeLine2 title=" ",fixedSize=1,size={20,3},pos={330,610},frame=0,fColor=(0,0,52224), labelBack=(0,0,52224)
    520 //      SetDrawEnv textrgb= (0,0,65280),fstyle= 1
    521 //      DrawText 4,640,"Results:"
    522523        TitleBox Info5 title="Results:",pos={3,625},frame=0,fstyle=2, fixedSize=0,size={120,15},fSize=12,fstyle=3,fColor=(0,0,65535)
    523 //      SetDrawEnv fsize= 10
    524 //      DrawText 50,453,"For local fits, set S2=0, Rg2=1e10, S1=0"
    525524        TitleBox Info6 title="For local fits, set S2=0, Rg2=1e10, S1=0",pos={10,443},frame=0,fstyle=2, fixedSize=0,size={120,15},fSize=10
    526         //SetDrawEnv fsize= 10
    527         //DrawText 50,470,"And follow order of the buttons --->"
    528525        TitleBox Info7 title="And follow order of the buttons --->",pos={10,459},frame=0,fstyle=2, fixedSize=0,size={120,15},fSize=10
    529526        NVAR Level_G = root:Packages:Irena:GuinierPorod:Level_G
     
    567564
    568565//      Button EvaluateSpecialCases,pos={10,645},size={120,20},proc=IR3GP_PanelButtonProc,title="Analyze Results", help={"Analyze special Cases"}
    569 //      Button ConfidenceEvaluation,pos={150,645},size={120,20},proc=IR3GP_PanelButtonProc,title="Uncertainity Evaluation", help={"Analyze confidence range for different parameters"}
     566        Button ConfidenceEvaluation,pos={150,645},size={120,20},proc=IR3GP_PanelButtonProc,title="Uncertainity Evaluation", help={"Analyze confidence range for different parameters"}
    570567        SetVariable SASBackground,pos={15,565},size={160,16},proc=IR3GP_PanelSetVarProc,title="SAS Background", help={"SAS background"},bodyWidth=80, format="%0.4g"
    571568        SetVariable SASBackground,limits={-inf,Inf,0.05*SASBackground},value= root:Packages:Irena:GuinierPorod:SASBackground
     
    797794        variable i
    798795
    799 
    800796        if(cmpstr(ctrlName,"RemovePointWcsrA")==0)
    801797                //here we load the data and create default values
     
    816812                        //AutoPositionWindow/R=LSQF2_MainPanel LSQF_MainGraph
    817813                //endif
     814        endif
     815        if(cmpstr(ctrlName,"ScriptingTool")==0)
     816                IR2S_ScriptingTool()
     817                Autopositionwindow /M=1/R=IR3DP_MainPanel IR2S_ScriptingToolPnl
     818                NVAR GUseIndra2data=root:Packages:Irena:GuinierPorod:UseIndra2Data
     819                NVAR GUseQRSdata=root:Packages:Irena:GuinierPorod:UseQRSdata
     820                NVAR STUseIndra2Data=root:Packages:Irena:ScriptingTool:UseIndra2Data
     821                NVAR STUseQRSData = root:Packages:Irena:ScriptingTool:UseQRSdata
     822                STUseIndra2Data = GUseIndra2data
     823                STUseQRSData = GUseQRSdata
     824                if(STUseIndra2Data+STUseQRSData!=1)
     825                        Abort "At this time this scripting can be used ONLY for QRS and Indra2 data"
     826                        STUseQRSData=1
     827                        GUseQRSdata=1
     828                endif
     829                IR2S_UpdateListOfAvailFiles()
    818830        endif
    819831
     
    864876                IR3GP_GraphModelData()
    865877        endif
    866         if (cmpstr(ctrlName,"DoFitting")==0)
     878        if (cmpstr(ctrlName,"DoFitting")==0 || cmpstr(ctrlName,"DoFittingSkipReset")==0)
    867879                variable skipreset=0
    868880                if(cmpstr(ctrlName,"DoFittingSkipReset")==0)
     
    889901                IR3GP_CopyDataBackToFolder("")
    890902        endif
     903        if (cmpstr(ctrlName,"CopyTFolderNoQuestions")==0)
     904                IR3GP_CopyDataBackToFolder("", Saveme="Yes")
     905        endif
    891906        if (cmpstr(ctrlName,"LevelXFitRg1AndG")==0)
    892907                //IR3GP_CopyDataBackToFolder("")
     
    921936                IR3GP_CleanUpGraph(1,1)
    922937        endif
    923 
     938        if(cmpstr(ctrlName,"ConfidenceEvaluation")==0)
     939                //here we graph the distribution
     940                IR3GP_ConfidenceEvaluation()
     941        endif
     942        setDataFolder oldDf
    924943end
    925944///******************************************************************************************
     
    10181037                LowLimit = varNum * 0.2
    10191038                HighLimit = varNum * 5
     1039        endif
     1040        if((stringmatch(ctrlName,"Level_P*")||stringmatch(ctrlName,"Level_S*")))
     1041                NVAR LowLimit=$("root:Packages:Irena:GuinierPorod:"+ctrlName+"LowLimit")
     1042                NVAR HighLimit=$("root:Packages:Irena:GuinierPorod:"+ctrlName+"HighLimit")
     1043                LowLimit = 1
     1044                HighLimit = 4.2
    10201045        endif
    10211046        STRUCT GunierPorodLevel Par
     
    14121437        Level_P = 4
    14131438        NVAR Level_PFit
    1414         //Level_PFit = Par.DFit
     1439        //Level_PFit = Par.PFit
    14151440        NVAR Level_PLowLimit
    1416         //Level_PLowLimit = Par.DLowLimit
     1441        //Level_PLowLimit = Par.PLowLimit
    14171442        NVAR Level_PHighLimit
    1418         //Level_PHighLimit = Par.DHighLimit
     1443        //Level_PHighLimit = Par.PHighLimit
    14191444        NVAR Level_PError
    1420         //Level_PError = Par.DError
     1445        //Level_PError = Par.PError
    14211446
    14221447        NVAR Level_S1
     
    17471772                        Par.Rg1Error=0
    17481773                        Par.Rg2Error=0
    1749                         Par.dError=0
     1774                        Par.PError=0
    17501775                        Par.s1Error=0
    17511776                        Par.s2Error=0
     
    17611786Function IR3GP_FixLimits()
    17621787
     1788        string OldDf=GetDataFolder(1)
    17631789        variable i
    17641790        NVAR ActiveLevel=root:Packages:Irena:GuinierPorod:ActiveLevel
     
    17721798                        Par.Rg2LowLimit=0.2 * Par.Rg2
    17731799                        Par.Rg2HighLimit=5 * Par.Rg2
    1774                         Par.dLowLimit=1
    1775                         Par.dHighLimit=4.2
     1800                        Par.PLowLimit=1
     1801                        Par.PHighLimit=4.2
    17761802                        Par.s1LowLimit=1
    17771803                        Par.s1HighLimit=4
     
    17861812        IR3GP_LoadStructureFromWave(Par, ActiveLevel)
    17871813        IR3GP_MoveStrToGlobals(Par)     
     1814        setDataFolder oldDf
    17881815       
    17891816end
     
    18611888                endif   
    18621889        endif
    1863         if (Par.DError>0)
    1864                 LogLogTag+="P \t= "+num2str(Par.D)+"  \t +/-"+num2str(Par.DError)+"\r"
     1890        if (Par.PError>0)
     1891                LogLogTag+="P \t= "+num2str(Par.P)+"  \t +/-"+num2str(Par.PError)+"\r"
    18651892        else
    1866                 LogLogTag+="P \t= "+num2str(Par.D)+"  \t   "    +"\r"
     1893                LogLogTag+="P \t= "+num2str(Par.P)+"  \t   "    +"\r"
    18671894        endif
    18681895        if (Par.RgCutOff>0)
     
    20612088        For(i=0;i<ItemsInList(ListOfWavesForNotes);i+=1)
    20622089                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_S2",num2str(Par.S2))
     2090                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_S2Fit",num2str(Par.S2Fit))
    20632091                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_S2Error",num2str(Par.S2Error))
    20642092                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_Rg2",num2str(Par.Rg2))
     2093                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_Rg2Fit",num2str(Par.Rg2Fit))
    20652094                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_Rg2Error",num2str(Par.Rg2Error))
    20662095                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_S1",num2str(Par.S1))
     2096                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_S1Fit",num2str(Par.S1Fit))
    20672097                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_S1Error",num2str(Par.S1Error))
    20682098                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_G",num2str(Par.G))
     2099                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_GFit",num2str(Par.GFit))
    20692100                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_GError",num2str(Par.GError))
    20702101                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_Rg1",num2str(Par.Rg1))
     2102                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_Rg1Fit",num2str(Par.Rg1Fit))
    20712103                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_RgError",num2str(Par.Rg1Error))
    2072                 IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_P",num2str(Par.d))
    2073                 IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_PError",num2str(Par.dError))
     2104                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_P",num2str(Par.P))
     2105                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_PFit",num2str(Par.PFit))
     2106                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_PError",num2str(Par.PError))
    20742107                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_UseCorrelations",num2str(Par.UseCorrelations))
    20752108                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_ETA",num2str(Par.ETA))
     2109                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_ETAFit",num2str(Par.ETAFit))
    20762110                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_ETAError",num2str(Par.ETAError))
    20772111                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_PACK",num2str(Par.PACK))
     2112                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_PACKFit",num2str(Par.PACKFit))
    20782113                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_PACKError",num2str(Par.PACKError))
    20792114                IN2G_AppendorReplaceWaveNote(stringFromList(i,ListOfWavesForNotes),"Level"+num2str(level)+"_RgCutOff",num2str(Par.RgCutOff))
     
    21642199        Par.Rg1=NumberByKey("Level"+num2str(level)+"_Rg1", OldNote,"=")
    21652200        Par.Rg1Error=NumberByKey("Level"+num2str(level)+"_Rg1Error", OldNote,"=")
    2166         Par.d=NumberByKey("Level"+num2str(level)+"_P", OldNote,"=")
    2167         Par.dError=NumberByKey("Level"+num2str(level)+"_PError", OldNote,"=")
     2201        Par.P=NumberByKey("Level"+num2str(level)+"_P", OldNote,"=")
     2202        Par.PError=NumberByKey("Level"+num2str(level)+"_PError", OldNote,"=")
    21682203        Par.ETA=NumberByKey("Level"+num2str(level)+"_ETA", OldNote,"=")
    21692204        Par.ETAError=NumberByKey("Level"+num2str(level)+"_ETAError", OldNote,"=")
     
    21722207        Par.UseCorrelations=NumberByKey("Level"+num2str(level)+"_UseCorrelations", OldNote,"=")
    21732208        Par.RgCutOff=NumberByKey("Level"+num2str(level)+"_RgCutOff", OldNote,"=")
     2209
     2210        Par.S2Fit       =NumberByKey("Level"+num2str(level)+"_S2Fit", OldNote,"=")
     2211        Par.Rg2Fit      =NumberByKey("Level"+num2str(level)+"_Rg2Fit", OldNote,"=")
     2212        Par.S1Fit       =NumberByKey("Level"+num2str(level)+"_S1Fit", OldNote,"=")
     2213        Par.GFit                =NumberByKey("Level"+num2str(level)+"_GFit", OldNote,"=")
     2214        Par.Rg1Fit      =NumberByKey("Level"+num2str(level)+"_Rg1Fit", OldNote,"=")
     2215        Par.PFit                =NumberByKey("Level"+num2str(level)+"_PFit", OldNote,"=")
     2216        Par.ETAFit      =NumberByKey("Level"+num2str(level)+"_ETAFit", OldNote,"=")
     2217        Par.PACKFit     =NumberByKey("Level"+num2str(level)+"_PACKFit", OldNote,"=")
     2218
    21742219        IR3GP_SaveStructureToWave(Par, level)
    21752220end
     
    23932438        endif
    23942439        NVAR Gvalue=$("Level_G")
     2440        NVAR Rg1=$("Level_Rg1")
     2441        NVAR Pval=$("Level_P")
     2442        NVAR S1=$("Level_S1")
     2443        NVAR S2=$("Level_S2")
     2444        NVAR Rg2=$("Level_Rg2")
    23952445
    23962446        DoWindow GunierPorod_LogLogPlot
     
    24052455                abort "Set both cursors before fitting"
    24062456        endif
    2407         //now handle calibration - G value needs to be modified if this is S1 or S2
    24082457        variable CalibrationValue, CalibrationQ, OldG
    24092458        oldG=Gvalue
     2459        //now handle calibration - G value needs to be modified if this is S1 or S2
    24102460        if(whichOne==2)         //this is S1
    2411                 NVAR Rg1=$("Level_Rg1")
    2412                 NVAR Pval=$("Level_P")
    2413                 NVAR S1=$("Level_S1")
    2414                 NVAR S2=$("Level_S2")
    2415                 NVAR Rg2=$("Level_Rg2")
    24162461                CalibrationQ= 0.5*pi/Rg1
    24172462                CalibrationValue = IR2GP_CalculateGPValue(CalibrationQ,Pval,Rg1,Gvalue,S1,Rg2,S2,0)
     
    24242469        LocalEwave[0]=CoefficientInput[0]/20
    24252470        LocalEwave[1]=Pp/20
    2426         CoefNames={"Level"+num2str(level)+"B","Level"+num2str(level)+"P"}
    2427        
     2471        CoefNames={"Level"+num2str(level)+"B","Level"+num2str(level)+"P"}       
    24282472        Make/D/O/N=2 New_FitCoefficients
    24292473        New_FitCoefficients[0] = {CoefficientInput[0],Pp}
    24302474        Make/O/T/N=2 T_Constraints
    24312475        T_Constraints = {"K1 > 1","K1 < 4.2"}
    2432 
    2433         Variable V_FitError=0                   //This should prevent errors from being generated
    2434        
     2476        Variable V_FitError=0                   //This should prevent errors from being generated       
    24352477        FuncFit/Q/N IR3GP_PowerLawFitAllATOnce New_FitCoefficients OriginalIntensity[pcsr(A),pcsr(B)] /X=OriginalQvector /W=OriginalError /I=1 /E=LocalEwave  /C=T_Constraints
    2436 
    24372478        if (V_FitError!=0)      //there was error in fitting
    24382479                beep
     
    24542495                scalingFactor = CalibrationValue/IR2GP_CalculateGPValue(CalibrationQ,Pval,Rg1,Gvalue,Pp,Rg2,S2,0)
    24552496                Gvalue = Gvalue*scalingFactor
     2497        endif
     2498        //now handle calibration - G value needs to be modified if this is P but Rg = 1e6 (no Guinier area for even first slope)
     2499        if(whichOne==1&&Rg1>5.999e5)            //this is P
     2500                CalibrationQ = OriginalQvector[pcsr(A)]
     2501                variable FitIntValue = New_FitCoefficients[0]*CalibrationQ^(-Pp)
     2502                Gvalue = (FitIntValue  * CalibrationQ^Pval * Rg1^(Pval) ) / (exp(-Pval/2)*(3*Pval/2)^(Pval/2))
     2503                NVAR GLowLimit = $("Level_GLowLimit")
     2504                NVAR GHighLimit = $("Level_GHighLimit")
     2505                GLowLimit = Gvalue/10
     2506                GHighLimit = Gvalue*10
     2507        endif
     2508        //set fitting limits
     2509        if(PpLowLimit>Pp)
     2510                PpLowLimit = 1
     2511        endif
     2512        if(PpHighLimit<Pp)
     2513                PpHighLimit =4
    24562514        endif
    24572515       
     
    25692627        rUnifiedfitq2=rUnifiedfit*qunifiedfit^2                         // Int * Q^2 wave
    25702628        Qv=areaXY(qUnifiedfit, rUnifiedfitq2, 0, MaxQ)          //invariant, need to add "Porod tail"
    2571         tempB=rUnifiedfit[newnumpnts-1]*maxQ^(Par.D)                    //makes -4 extension match last point of fit
    2572         Qv+=abs((tempB*maxQ^(3-Par.D))/(Par.D-2))                               //extends with -4 exponent
     2629        tempB=rUnifiedfit[newnumpnts-1]*maxQ^(Par.P)                    //makes -4 extension match last point of fit
     2630        Qv+=abs((tempB*maxQ^(3-Par.P))/(Par.P-2))                               //extends with -4 exponent
    25732631        //invariant+=abs(tempB*maxQ^(3-abs(tempPorod))/(abs(tempPorod)-2))//This one extrapolates with origional P     
    25742632         Par.Invariant = Qv* 1e24
     
    25802638//***********************************************************           
    25812639
     2640///          Confidence evaluation code
     2641//******************************************************************************************************************
     2642//******************************************************************************************************************
     2643//******************************************************************************************************************
     2644
     2645Function IR3GP_ConfidenceEvaluation()
     2646        string OldDf=getDataFolder(1)
     2647        setDataFolder root:Packages:Irena:GuinierPorod
     2648
     2649        IR3GP_ConfEvResetList()
     2650        DoWindow IR3GP_ConfEvaluationPanel
     2651        if(!V_Flag)
     2652                IR3GP_ConfEvaluationPanelF()
     2653        else
     2654                DoWindow/F IR3GP_ConfEvaluationPanel
     2655        endif
     2656        IR1_CreateResultsNbk()
     2657        setDataFolder OldDf
     2658end
     2659
     2660//******************************************************************************************************************
     2661//******************************************************************************************************************
     2662//******************************************************************************************************************
     2663
     2664Function IR3GP_ConfEvaluationPanelF()
     2665        PauseUpdate; Silent 1           // building window...
     2666        NewPanel /K=1/W=(405,136,793,600) as "Gunier-Porod Uncertainity Evaluation"
     2667        DoWIndow/C IR3GP_ConfEvaluationPanel
     2668        //ShowTools/A
     2669        SetDrawLayer UserBack
     2670        SetDrawEnv fsize= 16,fstyle= 3,textrgb= (1,4,52428)
     2671        DrawText 60,29,"Parameter Uncertainity Evaluation "
     2672        SVAR ConEvSelParameter=root:Packages:Irena:GuinierPorod:ConEvSelParameter
     2673        PopupMenu SelectParameter,pos={8,59},size={163,20},proc=IR3GP_ConfEvPopMenuProc,title="Select parameter  "
     2674        PopupMenu SelectParameter,help={"Select parameter to evaluate, it had to be fitted"}
     2675        PopupMenu SelectParameter,popvalue=ConEvSelParameter,value= #"IR3GP_ConfEvalBuildListOfParams()"
     2676        SetVariable ParameterMin,pos={15,94},size={149,14},bodyWidth=100,title="Min value"
     2677        SetVariable ParameterMin,value= root:Packages:Irena:GuinierPorod:ConfEvMinVal
     2678        SetVariable ParameterMax,pos={13,117},size={151,14},bodyWidth=100,title="Max value"
     2679        SetVariable ParameterMax,value= root:Packages:Irena:GuinierPorod:ConfEvMaxVal
     2680        SetVariable ParameterNumSteps,pos={192,103},size={153,14},bodyWidth=100,title="Num Steps"
     2681        SetVariable ParameterNumSteps,value= root:Packages:Irena:GuinierPorod:ConfEvNumSteps
     2682        SVAR Method = root:Packages:Irena:GuinierPorod:ConEvMethod
     2683        PopupMenu Method,pos={70,150},size={212,20},proc=IR3GP_ConfEvPopMenuProc,title="Method   "
     2684        PopupMenu Method,help={"Select method to be used for analysis"}
     2685        PopupMenu Method,mode=1,popvalue=Method,value= #"\"Sequential, fix param;Sequential, reset, fix param;Centered, fix param;Random, fix param;Random, fit param;Vary data, fit params;\""
     2686        checkbox AutoOverwrite pos={20,180}, title="Automatically overwrite prior results?", variable=root:Packages:Irena:GuinierPorod:ConfEvAutoOverwrite
     2687        Checkbox AutoOverwrite help={"Check to avoid being asked if you want to overwrite prior results"}
     2688        checkbox ConfEvAutoCalcTarget pos={20,200},title="Calculate ChiSq range?", variable=root:Packages:Irena:GuinierPorod:ConfEvAutoCalcTarget
     2689        Checkbox ConfEvAutoCalcTarget help={"Check to calculate the ChiSquae range"}, proc=IR3GP_ConfEvalCheckProc
     2690        checkbox ConfEvFixRanges pos={260,180}, title="Fix fit limits?", variable=root:Packages:Irena:GuinierPorod:ConfEvFixRanges
     2691        Checkbox ConfEvFixRanges help={"Check to avoid being asked if you want to fix ranges during analysis"}
     2692        NVAR tmpVal=root:Packages:Irena:GuinierPorod:ConfEvAutoCalcTarget
     2693        SetVariable ConfEvTargetChiSqRange,pos={200,200}, limits={1,inf,0.003}, format="%1.4g", size={173,14},bodyWidth=80,title="ChiSq range target"
     2694        SetVariable ConfEvTargetChiSqRange,value= root:Packages:Irena:GuinierPorod:ConfEvTargetChiSqRange, disable=2*tmpVal
     2695        Button GetHelp,pos={284,37},size={90,20},proc=IR3GP_ConfEvButtonProc,title="Get Help"
     2696        Button AnalyzeSelParam,pos={18,225},size={150,20},proc=IR3GP_ConfEvButtonProc,title="Analyze selected Parameter"
     2697        Button AddSetToList,pos={187,225},size={150,20},proc=IR3GP_ConfEvButtonProc,title="Add  Parameter to List"
     2698        Button AnalyzeListOfParameters,pos={18,250},size={150,20},proc=IR3GP_ConfEvButtonProc,title="Analyze list of Parameters"
     2699        Button ResetList,pos={187,250},size={150,20},proc=IR3GP_ConfEvButtonProc,title="Reset List"
     2700        Button RecoverFromAbort,pos={18,430},size={150,20},proc=IR3GP_ConfEvButtonProc,title="Recover from abort"
     2701EndMacro
     2702
     2703//******************************************************************************************************************
     2704//******************************************************************************************************************
     2705//******************************************************************************************************************
     2706Function IR3GP_ConfEvalCheckProc(cba) : CheckBoxControl
     2707        STRUCT WMCheckboxAction &cba
     2708
     2709        switch( cba.eventCode )
     2710                case 2: // mouse up
     2711                        Variable checked = cba.checked
     2712                        SetVariable ConfEvTargetChiSqRange,win= GunierPorod_LogLogPlot, disable=2*checked
     2713                        if(checked)
     2714                                IR3GP_ConfEvalCalcChiSqTarget()
     2715                        endif
     2716                        break
     2717                case -1: // control being killed
     2718                        break
     2719        endswitch
     2720
     2721        return 0
     2722End
     2723//******************************************************************************************************************
     2724//******************************************************************************************************************
     2725//******************************************************************************************************************
     2726Function IR3GP_ConfEvalCalcChiSqTarget()
     2727
     2728                string oldDf=GetDataFolder (1)
     2729
     2730        NVAR ConfEvAutoCalcTarget=root:Packages:Irena:GuinierPorod:ConfEvAutoCalcTarget
     2731        NVAR ConfEvTargetChiSqRange = root:Packages:Irena:GuinierPorod:ConfEvTargetChiSqRange
     2732        DoWIndow GunierPorod_LogLogPlot
     2733        if(V_Flag&&ConfEvAutoCalcTarget)
     2734                variable startRange, endRange, Allpoints
     2735                startRange=pcsr(A,"GunierPorod_LogLogPlot")
     2736                endRange=pcsr(B,"GunierPorod_LogLogPlot")
     2737                Allpoints = abs(endRange - startRange)
     2738        //      ConfEvTargetChiSqRange = Allpoints
     2739               
     2740                NVAR NumberOfLevels= root:Packages:Irena:GuinierPorod:NumberOfLevels   
     2741                string ParamNames="Rg1;G;P;Rg2;S1;S2;ETA;Pack;"
     2742                variable i, j, NumFItVals
     2743                string tempName, varName
     2744                NumFItVals=0
     2745                STRUCT GunierPorodLevel Par
     2746                NVAR FitSASBackground=root:Packages:Irena:GuinierPorod:FitSASBackground
     2747                if(FitSASBackground)
     2748                        NumFItVals+=1
     2749                endif
     2750                For(i=1;i<=NumberOfLevels;i+=1)
     2751                        IR3GP_LoadLevelFromWave(i)     
     2752                        For(j=0;j<ItemsInList(ParamNames);j+=1)
     2753                                tempName="Level"+num2str(i)+"_"+stringFromList(j,ParamNames)
     2754                                varName="Level"+"_"+stringFromList(j,ParamNames)
     2755                                NVAR fitMe=$("root:Packages:Irena:GuinierPorod:"+varName+"Fit")
     2756                                if(fitMe)
     2757                                        NumFItVals+=1
     2758                                endif
     2759                        endfor
     2760                endfor
     2761                //print "Found "+num2str(NumFItVals)+" fitted parameters"
     2762                //method I tried...
     2763                //ConfEvTargetChiSqRange = Allpoints/(Allpoints - NumFItVals)
     2764                //ConfEvTargetChiSqRange = (round(1000*ConfEvTargetChiSqRange))/1000
     2765                //method from Mateus
     2766                variable DF = Allpoints - NumFItVals - 1                //DegreesOfFreedom
     2767                variable parY0 = 1.01431
     2768                variable parA1=0.05621
     2769                variable parT1=117.48129
     2770                variable parA2=0.0336
     2771                variable parT2=737.73587
     2772                variable parA3=0.10412
     2773                variable parT3=23.25466
     2774                ConfEvTargetChiSqRange = parY0 + parA1*exp(-DF/parT1) + parA2*exp(-DF/parT2) + parA3*exp(-DF/parT3)
     2775                ConfEvTargetChiSqRange = (round(10000*ConfEvTargetChiSqRange))/10000
     2776               
     2777        endif
     2778        setDataFolder oldDf
     2779        return ConfEvTargetChiSqRange
     2780end
     2781//******************************************************************************************************************
     2782//******************************************************************************************************************
     2783//******************************************************************************************************************
     2784
     2785
     2786Function/S IR3GP_ConfEvalBuildListOfParams()
     2787       
     2788        string OldDf=getDataFolder(1)
     2789        setDataFolder root:Packages:Irena:GuinierPorod
     2790        variable i,j
     2791        SVAR ConfEvListOfParameters=root:Packages:Irena:GuinierPorod:ConfEvListOfParameters
     2792        NVAR NumberOfLevels= root:Packages:Irena:GuinierPorod:NumberOfLevels
     2793        //Build list of paramters which user was fitting, and therefore we can analyze stability for them
     2794       
     2795        string ParamNames="Rg1;G;P;Rg2;S1;S2;ETA;Pack;"
     2796        ConfEvListOfParameters=""
     2797        string tempName
     2798        STRUCT GunierPorodLevel Par
     2799        For(i=1;i<=NumberOfLevels;i+=1)
     2800                IR3GP_LoadStructureFromWave(Par, i)     
     2801                IR3GP_MoveStrToGlobals(Par)
     2802                For(j=0;j<ItemsInList(ParamNames);j+=1)
     2803                        tempName="Level"+num2str(i)+"_"+stringFromList(j,ParamNames)
     2804                        NVAR fitMe=$"Level_"+stringFromList(j,ParamNames)+"Fit"
     2805                        if(fitMe)
     2806                                ConfEvListOfParameters+=tempName+";"
     2807                        endif
     2808                endfor
     2809        endfor 
     2810        //print ConfEvListOfParameters
     2811        SVAR Method = root:Packages:Irena:GuinierPorod:ConEvMethod
     2812        SVAR ConEvSelParameter=root:Packages:Irena:GuinierPorod:ConEvSelParameter
     2813        if(strlen(Method)<5)
     2814                Method = "Sequential, fix param"
     2815        endif
     2816        ConEvSelParameter = stringFromList(0,ConfEvListOfParameters)
     2817        IR3GP_ConEvSetValues(ConEvSelParameter)
     2818        setDataFolder OldDf
     2819        return ConfEvListOfParameters+"UncertainityEffect;"
     2820end
     2821
     2822//******************************************************************************************************************
     2823//******************************************************************************************************************
     2824//******************************************************************************************************************
     2825Function IR3GP_ConEvSetValues(popStr)
     2826        string popStr
     2827                SVAR ConEvSelParameter=root:Packages:Irena:GuinierPorod:ConEvSelParameter
     2828                ConEvSelParameter = "Level_"+popStr[7,inf]
     2829                variable SelLevel= str2num(popStr[5,5])
     2830                STRUCT GunierPorodLevel Par
     2831                IR3GP_LoadStructureFromWave(Par, SelLevel)     
     2832                IR3GP_MoveStrToGlobals(Par)
     2833                NVAR/Z CurPar = $("root:Packages:Irena:GuinierPorod:"+ConEvSelParameter)
     2834                if(!NVAR_Exists(CurPar))
     2835                        //something wrong here, bail out
     2836                        return 0
     2837                endif
     2838                NVAR CurparLL =  $("root:Packages:Irena:GuinierPorod:"+ConEvSelParameter+"LowLimit")
     2839                NVAR CurparHL =  $("root:Packages:Irena:GuinierPorod:"+ConEvSelParameter+"HighLimit")
     2840                NVAR ConfEvMinVal =  root:Packages:Irena:GuinierPorod:ConfEvMinVal
     2841                NVAR ConfEvMaxVal =  root:Packages:Irena:GuinierPorod:ConfEvMaxVal
     2842                NVAR ConfEvNumSteps =  root:Packages:Irena:GuinierPorod:ConfEvNumSteps
     2843                if(ConfEvNumSteps<3)
     2844                        ConfEvNumSteps=20
     2845                endif
     2846                if(stringMatch(ConEvSelParameter,"*Rg*"))
     2847                        ConfEvMinVal = 0.8*CurPar
     2848                        ConfEvMaxVal = 1.2 * Curpar
     2849                elseif(stringMatch(ConEvSelParameter,"*P"))
     2850                        ConfEvMinVal = 0.9*CurPar
     2851                        ConfEvMaxVal = 1.1 * Curpar
     2852                elseif(stringMatch(ConEvSelParameter,"*G"))
     2853                        ConfEvMinVal = 0.5*CurPar
     2854                        ConfEvMaxVal = 2* Curpar
     2855                elseif(stringMatch(ConEvSelParameter,"*S*"))
     2856                        ConfEvMinVal = 0.9*CurPar
     2857                        ConfEvMaxVal = 1.1* Curpar
     2858                elseif(stringMatch(ConEvSelParameter,"*Eta"))
     2859                        ConfEvMinVal = 0.9*CurPar
     2860                        ConfEvMaxVal = 1.1* Curpar
     2861                elseif(stringMatch(ConEvSelParameter,"*Pack"))
     2862                        ConfEvMinVal = 0.9*CurPar
     2863                        ConfEvMaxVal = 1.1* Curpar
     2864                endif
     2865                //check limits...
     2866                if(CurparLL>ConfEvMinVal)
     2867                        ConfEvMinVal = 1.01*CurparLL
     2868                endif
     2869                if(CurparHL<ConfEvMaxVal)
     2870                        ConfEvMaxVal = 0.99 * CurparHL
     2871                endif
     2872
     2873end
     2874
     2875//******************************************************************************************************************
     2876//******************************************************************************************************************
     2877//******************************************************************************************************************
     2878
     2879Function IR3GP_ConfEvPopMenuProc(pa) : PopupMenuControl
     2880        STRUCT WMPopupAction &pa
     2881
     2882        switch( pa.eventCode )
     2883                case 2: // mouse up
     2884                        Variable popNum = pa.popNum
     2885                        String popStr = pa.popStr
     2886                        if(stringMatch(pa.ctrlName,"SelectParameter"))
     2887                                if(stringmatch(popStr,"UncertainityEffect"))
     2888                                        SVAR Method = root:Packages:Irena:GuinierPorod:ConEvMethod
     2889                                        Method = "Vary data, fit params"
     2890                                        SetVariable ParameterMin, win=IR3GP_ConfEvaluationPanel, disable=1
     2891                                        SetVariable ParameterMax, win=IR3GP_ConfEvaluationPanel, disable=1
     2892                                        PopupMenu Method, win=IR3GP_ConfEvaluationPanel, mode=6
     2893                                        //IR3GP_ConEvSetValues(popStr)
     2894                                else
     2895                                        SetVariable ParameterMin, win=IR3GP_ConfEvaluationPanel, disable=0
     2896                                        SetVariable ParameterMax, win=IR3GP_ConfEvaluationPanel, disable=0
     2897                                        SVAR Method = root:Packages:Irena:GuinierPorod:ConEvMethod
     2898                                        PopupMenu Method, win=IR3GP_ConfEvaluationPanel, mode=1
     2899                                        Method = "Sequential, fix param"
     2900                                        IR3GP_ConEvSetValues(popStr)
     2901                                endif
     2902                        endif
     2903                        if(stringMatch(pa.ctrlname,"Method"))
     2904                                //here we do what is needed
     2905                                SVAR Method = root:Packages:Irena:GuinierPorod:ConEvMethod
     2906                                Method = popStr
     2907                        endif
     2908                        break
     2909                case -1: // control being killed
     2910                        break
     2911        endswitch
     2912
     2913        return 0
     2914End
     2915
     2916
     2917
     2918//******************************************************************************************************************
     2919//******************************************************************************************************************
     2920//******************************************************************************************************************
     2921
     2922Function IR3GP_ConfEvButtonProc(ba) : ButtonControl
     2923        STRUCT WMButtonAction &ba
     2924
     2925        SVAR SampleFullName=root:Packages:Irena:GuinierPorod:DataFolderName
     2926        switch( ba.eventCode )
     2927                case 2: // mouse up
     2928                        // click code here
     2929                        if(stringMatch(ba.ctrlName,"GetHelp"))
     2930                                //Generate help
     2931                                IR3GP_ConfEvHelp()
     2932                        endif
     2933                        if(stringMatch(ba.ctrlName,"AnalyzeSelParam"))
     2934                                //analyze this parameter
     2935                                //SVAR ParamName = root:Packages:Irena:GuinierPorod:ConEvSelParameter
     2936                                ControlInfo /W=IR3GP_ConfEvaluationPanel  SelectParameter
     2937                                SVAR Method = root:Packages:Irena:GuinierPorod:ConEvMethod
     2938                                NVAR MinValue =root:Packages:Irena:GuinierPorod:ConfEvMinVal
     2939                                NVAR MaxValue =root:Packages:Irena:GuinierPorod:ConfEvMaxVal
     2940                                NVAR NumSteps =root:Packages:Irena:GuinierPorod:ConfEvNumSteps
     2941                                IR1_AppendAnyText("Evaluated sample :"+StringFromList(ItemsInList(SampleFullName,":")-1,SampleFullName,":"), 1)
     2942                                IR3GP_ConEvEvaluateParameter(S_Value,MinValue,MaxValue,NumSteps,Method)
     2943                        endif
     2944                        if(stringMatch(ba.ctrlName,"AddSetToList"))
     2945                                //add this parameter to list
     2946                                IR3GP_ConfEvAddToList()
     2947                        endif
     2948                        if(stringMatch(ba.ctrlName,"ResetList"))
     2949                                //add this parameter to list
     2950                                IR3GP_ConfEvResetList()
     2951                        endif
     2952                        if(stringMatch(ba.ctrlName,"AnalyzeListOfParameters"))
     2953                                //analyze list of parameters
     2954                                IR1_AppendAnyText("Evaluated sample :"+StringFromList(ItemsInList(SampleFullName,":")-1,SampleFullName,":"), 1)
     2955                                IR3GP_ConfEvAnalyzeList()
     2956                        endif
     2957                        if(stringMatch(ba.ctrlName,"RecoverFromAbort"))
     2958                                //Recover from abort
     2959                                //print ("root:ConfidenceEvaluation:"+possiblyquoteName(StringFromList(ItemsInList(SampleFullName,":")-1,SampleFullName,":")))
     2960                                IR3GP_ConEvRestoreBackupSet("root:ConfidenceEvaluation:"+possiblyquoteName(StringFromList(ItemsInList(SampleFullName,":")-1,SampleFullName,":")))
     2961                        endif
     2962
     2963
     2964                        break
     2965                case -1: // control being killed
     2966                        break
     2967        endswitch
     2968
     2969        return 0
     2970End
     2971
     2972//******************************************************************************************************************
     2973//******************************************************************************************************************
     2974//******************************************************************************************************************
     2975Function IR3GP_ConfEvResetList()
     2976
     2977        string OldDf=getDataFolder(1)
     2978        setDataFolder root:Packages:Irena:GuinierPorod
     2979        DoWIndow IR3GP_ConfEvaluationPanel
     2980        if(V_Flag)
     2981                ControlInfo /W=IR3GP_ConfEvaluationPanel  ListOfParamsToProcess
     2982                if(V_Flag==11)
     2983                        KillControl /W=IR3GP_ConfEvaluationPanel  ListOfParamsToProcess
     2984                endif
     2985        endif
     2986        Wave/Z ConEvParamNameWv
     2987        Wave/Z ConEvMethodWv
     2988        Wave/Z ConEvMinValueWv
     2989        Wave/Z ConEvMaxValueWv
     2990        Wave/Z ConEvNumStepsWv
     2991        Wave/Z ConEvListboxWv
     2992        SVAR Method = root:Packages:Irena:GuinierPorod:ConEvMethod
     2993        Method = "Sequential, fix param"
     2994       
     2995        Killwaves/Z ConEvParamNameWv, ConEvMethodWv, ConEvMinValueWv, ConEvMaxValueWv, ConEvNumStepsWv, ConEvListboxWv
     2996        setDataFolder oldDf
     2997end
     2998//******************************************************************************************************************
     2999//******************************************************************************************************************
     3000//******************************************************************************************************************
     3001static Function IR3GP_ConfEvAnalyzeList()
     3002
     3003        string OldDf=getDataFolder(1)
     3004        setDataFolder root:Packages:Irena:GuinierPorod
     3005        DoWIndow IR3GP_ConfEvaluationPanel
     3006        if(!V_Flag)
     3007                abort
     3008        endif
     3009        Wave/T/Z ConEvParamNameWv
     3010        if(!WaveExists(ConEvParamNameWv))
     3011                abort "List of parameters to process does not exist"
     3012        endif
     3013        Wave/T ConEvMethodWv
     3014        Wave ConEvMinValueWv
     3015        Wave ConEvMaxValueWv
     3016        Wave ConEvNumStepsWv
     3017        Wave ConEvListboxWv
     3018        variable i
     3019               
     3020                SVAR ParamName = root:Packages:Irena:GuinierPorod:ConEvSelParameter
     3021                SVAR Method = root:Packages:Irena:GuinierPorod:ConEvMethod
     3022                NVAR MinValue =root:Packages:Irena:GuinierPorod:ConfEvMinVal
     3023                NVAR MaxValue =root:Packages:Irena:GuinierPorod:ConfEvMaxVal
     3024                NVAR NumSteps =root:Packages:Irena:GuinierPorod:ConfEvNumSteps
     3025       
     3026        For(i=0;i<numpnts(ConEvParamNameWv);i+=1)
     3027                ParamName=ConEvParamNameWv[i]
     3028                //print "Evaluating stability of "+ParamName
     3029                //PopupMenu SelectParameter, win=IR3GP_ConfEvaluationPanel, popmatch = ParamName
     3030                //DoUpdate /W=IR3GP_ConfEvaluationPanel
     3031                Method=ConEvMethodWv[i]
     3032                MinValue=ConEvMinValueWv[i]
     3033                MaxValue=ConEvMaxValueWv[i]
     3034                NumSteps=ConEvNumStepsWv[i]
     3035                print "Evaluating stability of "+ParamName
     3036                IR3GP_ConEvEvaluateParameter(ParamName,MinValue,MaxValue,NumSteps,Method)
     3037        endfor
     3038
     3039        DoWIndow IR3GP_ConfEvaluationPanel
     3040        if(V_Flag)
     3041                DoWIndow/F IR3GP_ConfEvaluationPanel
     3042        endif
     3043       
     3044        setDataFolder oldDf
     3045end
     3046
     3047
     3048
     3049//******************************************************************************************************************
     3050//******************************************************************************************************************
     3051//******************************************************************************************************************
     3052static Function IR3GP_ConfEvAddToList()
     3053
     3054        string OldDf=getDataFolder(1)
     3055        setDataFolder root:Packages:Irena:GuinierPorod
     3056        //SVAR ParamName = root:Packages:Irena:GuinierPorod:ConEvSelParameter
     3057        string ParamName
     3058        ControlInfo /W=IR3GP_ConfEvaluationPanel  SelectParameter
     3059        ParamName = S_Value
     3060        SVAR Method = root:Packages:Irena:GuinierPorod:ConEvMethod
     3061        NVAR MinValue =root:Packages:Irena:GuinierPorod:ConfEvMinVal
     3062        NVAR MaxValue =root:Packages:Irena:GuinierPorod:ConfEvMaxVal
     3063        NVAR NumSteps =root:Packages:Irena:GuinierPorod:ConfEvNumSteps
     3064               
     3065        Wave/Z/T ConEvParamNameWv=root:Packages:Irena:GuinierPorod:ConEvParamNameWv
     3066        if(!WaveExists(ConEvParamNameWv))
     3067                make/O/N=1/T ConEvParamNameWv, ConEvMethodWv, ConEvListboxWv
     3068                make/O/N=1 ConEvMinValueWv, ConEvMaxValueWv, ConEvNumStepsWv
     3069        else
     3070                redimension/N=(numpnts(ConEvParamNameWv)+1) ConEvParamNameWv, ConEvMethodWv, ConEvListboxWv
     3071                redimension/N=(numpnts(ConEvParamNameWv)+1)  ConEvMinValueWv, ConEvMaxValueWv, ConEvNumStepsWv
     3072        endif
     3073        ConEvParamNameWv[numpnts(ConEvParamNameWv)-1]=ParamName
     3074        ConEvMethodWv[numpnts(ConEvParamNameWv)-1]=Method
     3075        ConEvMinValueWv[numpnts(ConEvParamNameWv)-1]=MinValue
     3076        ConEvMaxValueWv[numpnts(ConEvParamNameWv)-1]=MaxValue
     3077        ConEvNumStepsWv[numpnts(ConEvParamNameWv)-1]=NumSteps
     3078        ConEvListboxWv[numpnts(ConEvParamNameWv)-1]=ParamName+": "+Method+";Min="+num2str(MinValue)+";Max="+num2str(MaxValue)+"Steps="+num2str(NumSteps)
     3079       
     3080        ControlInfo /W=IR3GP_ConfEvaluationPanel  ListOfParamsToProcess
     3081        if(V_Flag!=11)
     3082                ListBox ListOfParamsToProcess win=IR3GP_ConfEvaluationPanel, pos={10,280}, size={370,140}, mode=0
     3083                ListBox ListOfParamsToProcess listWave=root:Packages:Irena:GuinierPorod:ConEvListboxWv
     3084                ListBox ListOfParamsToProcess help={"This is list of parameters selected to be processed"}     
     3085        endif
     3086        setDataFolder oldDf
     3087end
     3088
     3089
     3090//******************************************************************************************************************
     3091//******************************************************************************************************************
     3092//******************************************************************************************************************
     3093static function IR3GP_ConEvFixParamsIfNeeded()
     3094       
     3095        string OldDf=GetDataFolder(1)
     3096        NVAR ConfEvFixRanges = root:Packages:Irena:GuinierPorod:ConfEvFixRanges
     3097        if(ConfEvFixRanges)
     3098                IR3GP_FixLimits()
     3099        endif
     3100        setDataFolder oldDf
     3101end
     3102
     3103//******************************************************************************************************************
     3104//******************************************************************************************************************
     3105//******************************************************************************************************************
     3106static Function IR3GP_ConEvEvaluateParameter(ParamName,MinValue,MaxValue,NumSteps,Method)
     3107        Variable MinValue,MaxValue,NumSteps
     3108        String ParamName,Method
     3109       
     3110        DoWindow ChisquaredAnalysis
     3111        if(V_Flag)
     3112                DoWindow/K ChisquaredAnalysis
     3113        endif
     3114        DoWindow ChisquaredAnalysis2
     3115        if(V_Flag)
     3116                DoWindow/K ChisquaredAnalysis2
     3117        endif
     3118        //create folder where we dump this thing...
     3119        NewDataFolder/O/S root:ConfidenceEvaluation
     3120        SVAR SampleFullName=root:Packages:Irena:GuinierPorod:DataFolderName
     3121        NVAR ConfEvAutoOverwrite = root:Packages:Irena:GuinierPorod:ConfEvAutoOverwrite
     3122        string Samplename=StringFromList(ItemsInList(SampleFullName,":")-1,SampleFullName,":")
     3123        SampleName=IN2G_RemoveExtraQuote(Samplename,1,1)
     3124        NewDataFolder /S/O $(Samplename)
     3125        Wave/Z/T BackupParamNames
     3126        if(checkName(ParamName,11)!=0 && !ConfEvAutoOverwrite)
     3127                DoALert /T="Folder Name Conflict" 1, "Folder with name "+ParamName+" found, do you want to overwrite prior Confidence Evaluation results?"
     3128                if(!V_Flag)
     3129                        abort
     3130                endif
     3131        endif
     3132        if(!WaveExists(BackupParamNames))
     3133                IR3GP_ConEvBackupCurrentSet(GetDataFolder(1))
     3134                print "Stored setting in case of abort, this can be reset by button Reset from abort"
     3135        endif
     3136        NewDataFolder /S/O $(ParamName)
     3137        string BackupFilesLocation=GetDataFolder(1)
     3138        IR3GP_ConEvBackupCurrentSet(BackupFilesLocation)
     3139        //calculate chiSquare target if users asks for it..
     3140        IR3GP_ConfEvalCalcChiSqTarget()
     3141        NVAR ConfEvAutoCalcTarget=root:Packages:Irena:GuinierPorod:ConfEvAutoCalcTarget
     3142        NVAR ConfEvTargetChiSqRange = root:Packages:Irena:GuinierPorod:ConfEvTargetChiSqRange
     3143        variable i, currentParValue, tempi
     3144        make/O/N=0  $(ParamName+"ChiSquare")
     3145        Wave ChiSquareValues=$(ParamName+"ChiSquare")
     3146        NVAR AchievedChisq = root:Packages:Irena:GuinierPorod:AchievedChisq
     3147        variable SortForAnalysis=0
     3148        variable FittedParameter=0
     3149
     3150
     3151        if(stringMatch(ParamName,"UncertainityEffect"))
     3152                if(stringMatch(Method,"Vary data, fit params"))
     3153                        Wave OriginalIntensity = root:Packages:Irena:GuinierPorod:OriginalIntensity
     3154                        Wave OriginalError = root:Packages:Irena:GuinierPorod:OriginalError
     3155                        Duplicate/O OriginalIntensity, ConEvIntensityBackup
     3156                        For(i=0;i<NumSteps+1;i+=1)
     3157                                OriginalIntensity = ConEvIntensityBackup + gnoise(OriginalError[p])
     3158                                IR3GP_ConEvFixParamsIfNeeded()
     3159                                IR3GP_PanelButtonProc("DoFittingSkipReset")
     3160                                Wave/T CoefNames=root:Packages:Irena:GuinierPorod:CoefNames
     3161                                Wave ValuesAfterFit=root:Packages:Irena:GuinierPorod:W_coef
     3162                                Wave ValuesBeforeFit = root:Packages:Irena:GuinierPorod:CoefficientInput
     3163                                Duplicate/O CoefNames, ConfEvCoefNames
     3164                                Wave/Z ConfEvStartValues
     3165                                if(!WaveExists(ConfEvStartValues))
     3166                                        Duplicate/O     ValuesAfterFit, ConfEvEndValues
     3167                                        Duplicate/O     ValuesBeforeFit, ConfEvStartValues
     3168                                else
     3169                                        Wave ConfEvStartValues
     3170                                        Wave ConfEvEndValues
     3171                                        redimension/N=(-1,i+1) ConfEvEndValues, ConfEvStartValues
     3172                                        ConfEvStartValues[][i] = ValuesBeforeFit[p]
     3173                                        ConfEvEndValues[][i] = ValuesAfterFit[p]
     3174                                endif
     3175                                redimension/N=(i+1) ChiSquareValues
     3176                                ChiSquareValues[i]=AchievedChisq
     3177                                DoUpdate
     3178                                sleep/s 1       
     3179                                IR3GP_ConEvRestoreBackupSet(BackupFilesLocation)               
     3180                        endfor 
     3181                        OriginalIntensity = ConEvIntensityBackup
     3182                        IR3GP_ConEvRestoreBackupSet(BackupFilesLocation)
     3183                        SetDataFolder BackupFilesLocation
     3184                        IR3GP_ConEvAnalyzeEvalResults2(ParamName)
     3185                endif   
     3186        else            //parameter methods
     3187                //Metod = "Sequential, fix param;Sequential, reset, fix param;Random, fix param;Random, fit param;"
     3188                variable SelLevel= str2num(ParamName[5,5])
     3189                STRUCT GunierPorodLevel Par             
     3190                make/O/N=0 $(ParamName+"StartValue"), $(ParamName+"EndValue"), $(ParamName+"ChiSquare")
     3191                Wave StartValues=$(ParamName+"StartValue")
     3192                Wave EndValues=$(ParamName+"EndValue")
     3193                IR3GP_LoadLevelFromWave(SelLevel)               
     3194                NVAR Param=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf])
     3195                variable StartHere=Param
     3196                variable step=(MaxValue-MinValue)/(NumSteps)
     3197                if(stringMatch(Method,"Sequential, fix param"))
     3198                        For(i=0;i<NumSteps+1;i+=1)
     3199                                redimension/N=(i+1) StartValues, EndValues, ChiSquareValues
     3200                                currentParValue = MinValue+ i* step
     3201                                StartValues[i]=currentParValue
     3202                                        IR3GP_LoadLevelFromWave(SelLevel)               
     3203                                        NVAR Param=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf])
     3204                                        NVAR ParamFit=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf]+"Fit")
     3205                                        ParamFit=0
     3206                                        Param = currentParValue
     3207                                        IR3GP_MoveLevelToWave(SelLevel)         
     3208                                IR3GP_ConEvFixParamsIfNeeded()
     3209                                IR3GP_PanelButtonProc("DoFittingSkipReset")
     3210                                EndValues[i]=Param
     3211                                ChiSquareValues[i]=AchievedChisq
     3212                                DoUpdate
     3213                                sleep/s 1
     3214                        endfor
     3215                        SortForAnalysis=0
     3216                        FittedParameter=0
     3217                elseif(stringMatch(Method,"Sequential, reset, fix param"))
     3218                        For(i=0;i<NumSteps+1;i+=1)
     3219                                redimension/N=(i+1) StartValues, EndValues, ChiSquareValues
     3220                                currentParValue = MinValue+ i* step
     3221                                StartValues[i]=currentParValue
     3222                                        IR3GP_LoadLevelFromWave(SelLevel)               
     3223                                        NVAR Param=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf])
     3224                                        NVAR ParamFit=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf]+"Fit")
     3225                                        ParamFit=0
     3226                                        Param = currentParValue
     3227                                        IR3GP_MoveLevelToWave(SelLevel)         
     3228                                IR3GP_ConEvFixParamsIfNeeded()
     3229                                IR3GP_PanelButtonProc("DoFittingSkipReset")
     3230                                EndValues[i]=Param
     3231                                ChiSquareValues[i]=AchievedChisq
     3232                                DoUpdate
     3233                                sleep/s 1       
     3234                                IR3GP_PanelButtonProc("RevertFitting")         
     3235                        endfor
     3236                        SortForAnalysis=0
     3237                        FittedParameter=0
     3238                elseif(stringMatch(Method,"Centered, fix param"))
     3239                        tempi=0
     3240                        variable NumSteps2=Ceil(NumSteps/2)
     3241                        For(i=0;i<NumSteps2;i+=1)
     3242                                tempi+=1
     3243                                redimension/N=(tempi) StartValues, EndValues, ChiSquareValues
     3244                                currentParValue = StartHere - i* step
     3245                                StartValues[tempi-1]=currentParValue
     3246                                        IR3GP_LoadLevelFromWave(SelLevel)               
     3247                                        NVAR Param=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf])
     3248                                        NVAR ParamFit=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf]+"Fit")
     3249                                        ParamFit=0
     3250                                        Param = currentParValue
     3251                                        IR3GP_MoveLevelToWave(SelLevel)         
     3252                                IR3GP_ConEvFixParamsIfNeeded()
     3253                                IR3GP_PanelButtonProc("DoFittingSkipReset")
     3254                                EndValues[tempi-1]=Param
     3255                                ChiSquareValues[tempi-1]=AchievedChisq
     3256                                DoUpdate
     3257                                sleep/s 1       
     3258                        endfor
     3259                        IR3GP_ConEvRestoreBackupSet(BackupFilesLocation)               
     3260                        For(i=0;i<NumSteps2;i+=1)               //and now
     3261                                tempi+=1
     3262                                redimension/N=(tempi) StartValues, EndValues, ChiSquareValues
     3263                                currentParValue = StartHere + i* step
     3264                                StartValues[tempi-1]=currentParValue
     3265                                        IR3GP_LoadLevelFromWave(SelLevel)               
     3266                                        NVAR Param=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf])
     3267                                        NVAR ParamFit=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf]+"Fit")
     3268                                        ParamFit=0
     3269                                        Param = currentParValue
     3270                                        IR3GP_MoveLevelToWave(SelLevel)         
     3271                                IR3GP_ConEvFixParamsIfNeeded()
     3272                                IR3GP_PanelButtonProc("DoFittingSkipReset")
     3273                                EndValues[tempi-1]=Param
     3274                                ChiSquareValues[tempi-1]=AchievedChisq
     3275                                DoUpdate
     3276                                sleep/s 1       
     3277                        endfor
     3278                        IR3GP_ConEvRestoreBackupSet(BackupFilesLocation)               
     3279                        SortForAnalysis=1
     3280                        FittedParameter=0
     3281                elseif(stringMatch(Method,"Random, fix param"))
     3282                        For(i=0;i<NumSteps+1;i+=1)
     3283                                redimension/N=(i+1) StartValues, EndValues, ChiSquareValues
     3284                                currentParValue = MinValue + (0.5+enoise(0.5))*(MaxValue-MinValue)
     3285                                StartValues[i]=currentParValue
     3286                                        IR3GP_LoadLevelFromWave(SelLevel)               
     3287                                        NVAR Param=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf])
     3288                                        NVAR ParamFit=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf]+"Fit")
     3289                                        ParamFit=0
     3290                                        Param = currentParValue
     3291                                        IR3GP_MoveLevelToWave(SelLevel)         
     3292                                IR3GP_ConEvFixParamsIfNeeded()
     3293                                IR3GP_PanelButtonProc("DoFittingSkipReset")
     3294                                EndValues[i]=Param
     3295                                ChiSquareValues[i]=AchievedChisq
     3296                                DoUpdate
     3297                                sleep/s 1       
     3298                                //IR3GP_ConEvRestoreBackupSettings(BackupFilesLocation)         
     3299                        endfor
     3300                        SortForAnalysis=1
     3301                        FittedParameter=0
     3302                elseif(stringMatch(Method,"Random, fit param"))
     3303                        For(i=0;i<NumSteps+1;i+=1)
     3304                                redimension/N=(i+1) StartValues, EndValues, ChiSquareValues
     3305                                currentParValue = MinValue + (0.5+enoise(0.5))*(MaxValue-MinValue)
     3306                                StartValues[i]=currentParValue
     3307                                        IR3GP_LoadLevelFromWave(SelLevel)               
     3308                                        NVAR Param=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf])
     3309                                        NVAR ParamFit=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf]+"Fit")
     3310                                        ParamFit=1
     3311                                        Param = currentParValue
     3312                                        IR3GP_MoveLevelToWave(SelLevel)         
     3313                                IR3GP_ConEvFixParamsIfNeeded()
     3314                                IR3GP_PanelButtonProc("DoFittingSkipReset")
     3315                                EndValues[i]=Param
     3316                                ChiSquareValues[i]=AchievedChisq
     3317                                DoUpdate
     3318                                sleep/s 1       
     3319                                //IR3GP_ConEvRestoreBackupSettings(BackupFilesLocation)         
     3320                        endfor 
     3321                        SortForAnalysis=1
     3322                        FittedParameter=1
     3323                endif
     3324                IR3GP_LoadLevelFromWave(SelLevel)               
     3325                NVAR ParamFit=$("root:Packages:Irena:GuinierPorod:"+"Level_"+ParamName[7,inf]+"Fit")
     3326                ParamFit=1
     3327                IR3GP_MoveLevelToWave(SelLevel)         
     3328               
     3329                IR3GP_ConEvRestoreBackupSet(BackupFilesLocation)
     3330                IR3GP_PanelButtonProc("GraphDistribution")
     3331       
     3332                //something changed data folder, set it back for following functions
     3333                SetDataFolder BackupFilesLocation
     3334                IR3GP_ConEvAnalyzeEvalResults(ParamName, SortForAnalysis,FittedParameter)
     3335        endif   //end of parameters analysis
     3336        DoWIndow IR3GP_ConfEvaluationPanel
     3337        if(V_Flag)
     3338                DoWIndow/F IR3GP_ConfEvaluationPanel
     3339        endif
     3340
     3341end
     3342//******************************************************************************************************************
     3343//******************************************************************************************************************
     3344//******************************************************************************************************************
     3345
     3346static Function IR3GP_ConEvAnalyzeEvalResults2(ParamName)
     3347        string ParamName
     3348        print GetDataFOlder(1)
     3349        SVAR SampleFullName=root:Packages:Irena:GuinierPorod:DataFolderName
     3350        NVAR CoefEVNumSteps=root:Packages:Irena:GuinierPorod:ConfEVNumSteps
     3351        Wave ConfEvStartValues=$("ConfEvStartValues")
     3352        Wave ConfEvEndValues=$("ConfEvEndValues")
     3353        Wave/T ConfEvCoefNames=$("ConfEvCoefNames")
     3354        Wave ChiSquareValues=$(ParamName+"ChiSquare")
     3355       
     3356        variable i
     3357        for(i=0;i<numpnts(ChiSquareValues);i+=1)
     3358                if(ChiSquareValues[i]==0)
     3359                        ChiSquareValues[i]=NaN
     3360                endif
     3361        endfor
     3362       
     3363        DoWindow ChisquaredAnalysis
     3364        if(V_Flag)
     3365                DoWindow/K ChisquaredAnalysis
     3366        endif
     3367        DoWindow ChisquaredAnalysis2
     3368        if(V_Flag)
     3369                DoWindow/K ChisquaredAnalysis2
     3370        endif
     3371        variable levellow, levelhigh
     3372
     3373        IR1_CreateResultsNbk()
     3374        //IR1_AppendAnyText("Analyzed sample "+SampleFullName, 1)       
     3375        IR1_AppendAnyText("Effect of data uncertainities on variability of parameters", 2)
     3376        IR1_AppendAnyText(SampleFullName, 2)   
     3377        IR1_AppendAnyText("  ", 0)
     3378        IR1_AppendAnyText("Run "+num2str(CoefEVNumSteps)+" fittings using data modified by random Gauss noise within \"Errors\" ", 2)
     3379        IR1_AppendAnyText("To get following statistical results ", 0)
     3380        wavestats/Q ChiSquareValues
     3381        variable MeanChiSquare=V_avg
     3382        variable StdDevChiSquare=V_sdev
     3383        IR1_AppendAnyText("Chi-square values : \taverage = "+num2str(MeanChiSquare)+"\tst. dev. = "+num2str(StdDevChiSquare), 0)       
     3384
     3385        variable j
     3386        string tempStrName
     3387        For(j=0;j<numpnts(ConfEvCoefNames);j+=1)
     3388                tempStrName=ConfEvCoefNames[j]
     3389                Duplicate/Free/O/R=[j][] ConfEvEndValues, tempWv
     3390                wavestats/Q tempWv
     3391                IR1_AppendAnyText(tempStrName+" : \taverage = "+num2str(V_avg)+"\tst. dev. = "+num2str(V_sdev), 0)     
     3392               
     3393        endfor
     3394                 
     3395
     3396end
     3397//******************************************************************************************************************
     3398//******************************************************************************************************************
     3399//******************************************************************************************************************
     3400//******************************************************************************************************************
     3401//******************************************************************************************************************
     3402//******************************************************************************************************************
     3403
     3404static Function IR3GP_ConEvAnalyzeEvalResults(ParamName,SortForAnalysis,FittedParameter)
     3405        string ParamName
     3406        variable SortForAnalysis,FittedParameter
     3407       
     3408        NVAR ConfEvTargetChiSqRange = root:Packages:Irena:GuinierPorod:ConfEvTargetChiSqRange
     3409        SVAR SampleFullName=root:Packages:Irena:GuinierPorod:DataFolderName
     3410        Wave StartValues=$(ParamName+"StartValue")
     3411        Wave EndValues=$(ParamName+"EndValue")
     3412        Wave ChiSquareValues=$(ParamName+"ChiSquare")
     3413        SVAR Method = root:Packages:Irena:GuinierPorod:ConEvMethod
     3414        if(SortForAnalysis)
     3415                Sort EndValues, EndValues, StartValues, ChiSquareValues
     3416        endif
     3417       
     3418        variable i
     3419        for(i=0;i<numpnts(ChiSquareValues);i+=1)
     3420                if(ChiSquareValues[i]==0)
     3421                        ChiSquareValues[i]=NaN
     3422                endif
     3423        endfor
     3424       
     3425        DoWindow ChisquaredAnalysis
     3426        if(V_Flag)
     3427                DoWindow/K ChisquaredAnalysis
     3428        endif
     3429        DoWindow ChisquaredAnalysis2
     3430        if(V_Flag)
     3431                DoWindow/K ChisquaredAnalysis2
     3432        endif
     3433        variable levellow, levelhigh
     3434
     3435        if(FittedParameter)     //fitted parameter, chi-square analysis needs a bit different...
     3436                wavestats/Q ChiSquareValues
     3437                variable MeanChiSquare=V_avg
     3438                variable StdDevChiSquare=V_sdev
     3439       
     3440                Display/W=(35,44,555,335)/K=1 ChiSquareValues vs EndValues
     3441                DoWindow/C/T ChisquaredAnalysis,ParamName+"Chi-squared analysis of "+SampleFullName
     3442                Label left "Achieved Chi-squared"
     3443                Label bottom "End "+ParamName+" value"
     3444                ModifyGraph mirror=1
     3445                ModifyGraph mode=3,marker=19
     3446                SetAxis left (V_avg-1.5*(V_avg-V_min)),(V_avg+1.5*(V_max-V_avg))
     3447               
     3448                wavestats/Q EndValues
     3449                variable MeanEndValue=V_avg
     3450                variable StdDevEndValue=V_sdev
     3451                Display/W=(35,44,555,335)/K=1 EndValues vs StartValues
     3452                DoWindow/C/T ChisquaredAnalysis2,ParamName+" reproducibility analysis of "+SampleFullName
     3453                Label left "End "+ParamName+" value"
     3454                Label bottom "Start "+ParamName+" value"
     3455                ModifyGraph mirror=1
     3456                ModifyGraph mode=3,marker=19           
     3457                variable TempDisplayRange=max(V_avg-V_min, V_max-V_avg)
     3458                SetAxis left (V_avg-1.5*(TempDisplayRange)),(V_avg+1.5*(TempDisplayRange))
     3459                duplicate/O ChiSquareValues, EndValuesGraphAvg, EndValuesGraphMin, EndValuesGraphMax
     3460                EndValuesGraphAvg = V_avg
     3461                EndValuesGraphMin = V_avg-V_sdev
     3462                EndValuesGraphMax = V_avg+V_sdev
     3463                AppendToGraph EndValuesGraphMax,EndValuesGraphMin,EndValuesGraphAvg vs StartValues     
     3464                ModifyGraph lstyle(EndValuesGraphMax)=1,rgb(EndValuesGraphMax)=(0,0,0)
     3465                ModifyGraph lstyle(EndValuesGraphMin)=1,rgb(EndValuesGraphMin)=(0,0,0)
     3466                ModifyGraph lstyle(EndValuesGraphAvg)=7,lsize(EndValuesGraphAvg)=2
     3467                ModifyGraph rgb(EndValuesGraphAvg)=(0,0,0)
     3468                TextBox/C/N=text0/F=0/A=LT "Average = "+num2str(V_avg)+"\rStandard deviation = "+num2str(V_sdev)+"\rMinimum = "+num2str(V_min)+", maximum = "+num2str(V_min)
     3469       
     3470                AutoPositionWindow/M=0/R=IR3GP_ConfEvaluationPanel ChisquaredAnalysis
     3471                AutoPositionWindow/M=0/R=ChisquaredAnalysis ChisquaredAnalysis2
     3472
     3473                IR1_CreateResultsNbk()
     3474//              IR1_AppendAnyText("Analyzed sample "+SampleFullName, 1)
     3475                IR1_AppendAnyText("Unified fit uncertainity of parameter "+ParamName, 2)
     3476                IR1_AppendAnyText("  ", 0)
     3477                IR1_AppendAnyText("Method used to evaluate parameter reproducibility: "+Method, 0)     
     3478                //IR1_AppendAnyText("Minimum chi-squared found = "+num2str(V_min)+" for "+ParamName+"  = "+ num2str(EndValues[V_minLoc]), 0)
     3479                //IR1_AppendAnyText("Range of "+ParamName+" in which the chi-squared < 1.037*"+num2str(V_min)+" is from "+num2str(levellow)+" to "+ num2str(levelhigh), 0)
     3480                IR1_AppendAnyGraph("ChisquaredAnalysis")
     3481                IR1_AppendAnyGraph("ChisquaredAnalysis2")
     3482                IR1_AppendAnyText("  ", 0)
     3483                IR1_CreateResultsNbk()
     3484       
     3485        else    //parameter fixed..             
     3486                wavestats/q ChiSquareValues
     3487               
     3488                Display/W=(35,44,555,335)/K=1 ChiSquareValues vs EndValues
     3489                DoWindow/C/T ChisquaredAnalysis,ParamName+" Chi-squared analysis "
     3490                Label left "Achieved Chi-squared"
     3491                Label bottom ParamName+" value"
     3492                ModifyGraph mirror=1
     3493                ModifyGraph mode=3,marker=19
     3494                Findlevels/Q/N=2 ChiSquareValues, ConfEvTargetChiSqRange*V_min
     3495                if(V_Flag!=0)
     3496                        print  "The range of parameters analyzed for "+ParamName +" was not sufficiently large, code did not find large enough values for chi-squared"
     3497                        IR1_CreateResultsNbk()
     3498//                      IR1_AppendAnyText("Analyzed sample "+SampleFullName, 1)
     3499                        IR1_AppendAnyText("Unified fit evaluation of parameter "+ParamName+" failed", 2)
     3500                        IR1_AppendAnyText("  ", 0)
     3501                        IR1_AppendAnyText("Method used to evaluate parameter stability: "+Method, 0)   
     3502                        IR1_AppendAnyText("Minimum chi-squared found = "+num2str(V_min)+" for "+ParamName+"  = "+ num2str(EndValues[V_minLoc]), 0)
     3503                        IR1_AppendAnyText("Range of "+ParamName+" in which the chi-squared < "+num2str(ConfEvTargetChiSqRange)+"*"+num2str(V_min)+" was not between "+num2str(EndValues[0])+" to "+ num2str(EndValues[inf]), 0)
     3504                        IR1_CreateResultsNbk()         
     3505                        IR1_AppendAnyText("  ", 0)
     3506                else   
     3507                        Wave W_FindLevels
     3508                        levellow=EndValues[W_FindLevels[0]]
     3509                        levelhigh=EndValues[W_FindLevels[1]]
     3510                        Tag/C/N=MinTagLL/F=0/L=2/TL=0/X=0.00/Y=30.00 $(nameofwave(ChiSquareValues)), W_FindLevels[0],"\\JCLow edge\r\\JC"+num2str(levellow)
     3511                        Tag/C/N=MinTagHL/F=0/L=2/TL=0/X=0.00/Y=30.00 $(nameofwave(ChiSquareValues)), W_FindLevels[1],"\\JCHigh edge\r\\JC"+num2str(levelhigh)
     3512                        //Tag/C/N=MinTag/F=0/L=2/TL=0/X=0.00/Y=50.00 $(nameofwave(ChiSquareValues)), V_minLoc,"Minimum chi-squared = "+num2str(V_min)+"\rat "+ParamName+" = "+num2str(EndValues[V_minLoc])+"\rRange : "+num2str(levellow)+" to "+num2str(levelhigh)
     3513                        Tag/C/N=MinTag/F=0/L=2/TL=0/X=0.00/Y=50.00 $(nameofwave(ChiSquareValues)), V_minLoc,"Minimum chi-squared = "+num2str(V_min)+"\rat "+ParamName+" = "+num2str(EndValues[V_minLoc])//+"\rRange : "+num2str(levellow)+" to "+num2str(levelhigh)
     3514                        AutoPositionWindow/M=0/R=IR3GP_ConfEvaluationPanel ChisquaredAnalysis
     3515                        IR1_CreateResultsNbk()
     3516        //              IR1_AppendAnyText("Analyzed sample "+SampleFullName, 1)
     3517                        IR1_AppendAnyText("Unified fit evaluation of parameter "+ParamName, 2)
     3518                        IR1_AppendAnyText("  ", 0)
     3519                        IR1_AppendAnyText("Method used to evaluate parameter stability: "+Method, 0)   
     3520                        IR1_AppendAnyText("Minimum chi-squared found = "+num2str(V_min)+" for "+ParamName+"  = "+ num2str(EndValues[V_minLoc]), 0)
     3521                        IR1_AppendAnyText("Range of "+ParamName+" in which the chi-squared < "+num2str(ConfEvTargetChiSqRange)+"*"+num2str(V_min)+" is from "+num2str(levellow)+" to "+ num2str(levelhigh), 0)
     3522                        IR1_AppendAnyText("           **************************************************     ", 0)
     3523                        IR1_AppendAnyText("\"Simplistic presentation\" for publications :    >>>>   "+ParamName+" =  "+IN2G_roundToUncertainity(EndValues[V_minLoc], (levelhigh - levellow)/2,2),0)
     3524                        IR1_AppendAnyText("           **************************************************     ", 0)
     3525                        IR1_AppendAnyGraph("ChisquaredAnalysis")
     3526                        IR1_AppendAnyText("  ", 0)
     3527                        IR1_CreateResultsNbk()
     3528                endif
     3529        endif
     3530end
     3531//******************************************************************************************************************
     3532//******************************************************************************************************************
     3533//******************************************************************************************************************
     3534
     3535Function IR3GP_ConEvRestoreBackupSet(BackupLocation)
     3536        string BackupLocation
     3537        //restores backup waves (names/values) for all parameters used in current folder
     3538        string OldDf=GetDataFOlder(1)
     3539        setDataFolder $(BackupLocation)
     3540        Wave/T BackupParamNames
     3541        Wave BackupParamValues
     3542        variable i, j, curLevel
     3543        string tempName, CurShortName
     3544        For(i=0;i<numpnts(BackupParamValues);i+=1)
     3545                        tempName=BackupParamNames[i]
     3546                        if(!stringmatch(tempName,"SASBackground"))
     3547                                CurShortName = tempName[0,4]+ tempName[6,inf]
     3548                                curLevel=str2num(tempName[5,5])
     3549                                NVAR CurPar = $("root:Packages:Irena:GuinierPorod:"+CurShortName)
     3550                                IR3GP_LoadLevelFromWave(curLevel)
     3551                                CurPar = BackupParamValues[i]
     3552                                IR3GP_MoveLevelToWave(curLevel)
     3553                        else
     3554                                NVAR CurPar = $("root:Packages:Irena:GuinierPorod:"+tempName)
     3555                                CurPar = BackupParamValues[i]
     3556                        endif
     3557        endfor 
     3558        setDataFolder oldDf
     3559       
     3560end
     3561//******************************************************************************************************************
     3562//******************************************************************************************************************
     3563//******************************************************************************************************************
     3564
     3565static Function IR3GP_ConEvBackupCurrentSet(BackupLocation)
     3566        string BackupLocation
     3567        //creates backup waves (names/values) for all parameters used in current folder
     3568        string OldDf=GetDataFOlder(1)
     3569        //create folder where we dump this thing...
     3570        setDataFolder $(BackupLocation)
     3571        NVAR NumberOfLevels= root:Packages:Irena:GuinierPorod:NumberOfLevels   
     3572        string ParamNames="Rg1;Rg2;G;P;S1;S2;ETA;Pack;"
     3573        make/O/N=1/T BackupParamNames
     3574        make/O/N=1 BackupParamValues
     3575        variable i, j
     3576        string tempName, VarName
     3577        BackupParamNames[0]="SASBackground"
     3578        NVAR SASBackground=root:Packages:Irena:GuinierPorod:SASBackground
     3579        BackupParamValues=SASBackground
     3580        For(i=1;i<=NumberOfLevels;i+=1)
     3581                IR3GP_LoadLevelFromWave(i)             
     3582                For(j=0;j<ItemsInList(ParamNames);j+=1)
     3583                        tempName="Level"+num2str(i)+"_"+stringFromList(j,ParamNames)
     3584                        VarName = "Level_"+stringFromList(j,ParamNames)
     3585                        NVAR CurPar = $("root:Packages:Irena:GuinierPorod:"+VarName)
     3586                        redimension/N=(numpnts(BackupParamValues)+1) BackupParamValues, BackupParamNames
     3587                        BackupParamNames[numpnts(BackupParamNames)-1]=tempName
     3588                        BackupParamValues[numpnts(BackupParamNames)-1]=CurPar
     3589                endfor
     3590        endfor 
     3591        setDataFolder oldDf     
     3592end
     3593//******************************************************************************************************************
     3594//******************************************************************************************************************
     3595//******************************************************************************************************************
     3596
     3597
     3598Function IR3GP_ConfEvHelp()
     3599
     3600        DoWindow ConfidenceEvaluationHelp
     3601        if(V_Flag)
     3602                DoWindow/F ConfidenceEvaluationHelp
     3603        else
     3604                String nb = "ConfidenceEvaluationHelp"
     3605                NewNotebook/N=$nb/F=1/V=1/K=1/W=(444,66,960,820)
     3606                Notebook $nb defaultTab=36, statusWidth=252
     3607                Notebook $nb showRuler=1, rulerUnits=1, updating={1, 3600}
     3608                Notebook $nb newRuler=Normal, justification=0, margins={0,0,468}, spacing={0,0,0}, tabs={}, rulerDefaults={"Geneva",10,0,(0,0,0)}
     3609                Notebook $nb ruler=Normal, fSize=14, fStyle=1, textRGB=(52428,1,1), text="Uncertainity evaluation for Guinier - Porod parameters\r"
     3610                Notebook $nb fSize=-1, fStyle=1, textRGB=(0,1,3), text="\r"
     3611                Notebook $nb text="This tool is used to estimate uncertainities for the fitted parameters. "
     3612                Notebook $nb text="It is likely that the right uncertainity is some combination of the two implemented methods - or the larger one...", fStyle=-1, text="\r"
     3613                Notebook $nb fStyle=1, text="\r"
     3614                Notebook $nb text="1. \"Uncertainity effect\" \r", fStyle=-1
     3615                //Notebook $nb text="1. Sequential, fix param", fStyle=-1
     3616                Notebook $nb text="Evaluates the influence of DATA uncertainities on uncertainity of Guinier - Porod parameter(s). "
     3617                Notebook $nb text="Code varies Intensity data within user provided uncertainities (\"errors\"). All parameters currently selected for fitting are evaluted at once.\r"
     3618                Notebook $nb fStyle=1, text="2. Uncertainity for individual parameters \r", fStyle=-1
     3619                Notebook $nb text="Analysis of quality of fits achievable with tested parameter variation.  "
     3620                Notebook $nb text="The tool will fix tested parameter within the user defined range and fit the other parameters to the data. Plot of achieved chi-squared as function of the fixed value of the tested parameter "
     3621                Notebook $nb text="is used to estimate uncertainity. User needs to pick method of analysis as described below. User can analyze one parameter or create list of parameters and analyze them sequentially. \r"
     3622                Notebook $nb text="\r"
     3623                Notebook $nb text="All parameters which are supposed to be varied during analysis must have \"Fit?\" checkbox checked before the tool si started. Correct fitting limits may be set or use \"Fix fit limits\" checkbox. "
     3624                Notebook $nb text="Range of data for fitting must be selected correctly with cursors (Unified fit) or set for data with controls (Modeling II). The code does not mo"
     3625                Notebook $nb text="dify fitting range. \r"
     3626                Notebook $nb text="\r"
     3627                Notebook $nb text="for \"Uncertainity effect\" but for the single parameter tests the results are untested. It may work, but if not - let me know... \r"
     3628                Notebook $nb text="\r"
     3629                Notebook $nb text="For each evaluated parameter the input is its name, range of values (Min/Max) to be stepped through and number "
     3630                Notebook $nb text="of steps (default 20) to take. Depending on the type of parameter, different default Min/Max are generated for thi"
     3631                Notebook $nb text="s analysis when parameter is selected. If the default for any parameters is systematically wrong, let me know and I'll fix it. \r"
     3632                Notebook $nb text="\r"
     3633                Notebook $nb text="You may need to play with fitting limits as it is likely there may be some fitting failures with wrong limits or using too large testing range. No attempt is made \r"
     3634                Notebook $nb text="to gracefully recover from major fitting disasters. The main help is use of button \"Recover from abort\" if you have to abort the fittings.  \r"
     3635                Notebook $nb text="\r"
     3636                Notebook $nb text="After analysis is done, results are recorded in the ResultsNotebook and waves with results for further a"
     3637                Notebook $nb text="nalysis are stored in root:ConfidenceEvaluation:<SampleName>:<Parametername>. Stored are waves names as"
     3638                Notebook $nb text=" follows: <Parameter>ChiSquare, <Parameter>StartValue, <Parameter>EndValue. If the parameter is not fitt"
     3639                Notebook $nb text="ed during evaluation Start and End values are the same. \r"
     3640                Notebook $nb fStyle=1, text="\r"
     3641                Notebook $nb text="Analysis of effect of data uncertainities (\"Uncertainity effect\")", fStyle=-1, text=":\r"
     3642                Notebook $nb fStyle=1, text="Vary data, fit parameters", fStyle=-1
     3643                Notebook $nb text=": Data are varied by adding to input intensity Gaussian noise with standard deviation equal to the unc"
     3644                Notebook $nb text="rtainities provided by user (aka: \"Error data\"). No other scaling is done. "
     3645                Notebook $nb text="All selected parameters are fitted selected number of times and statistics is generated in notebook.     \r"
     3646                Notebook $nb text="\r"
     3647                Notebook $nb fStyle=1, text="Methods for analysis for individual parameters", fStyle=-1, text=":\r"
     3648                Notebook $nb fStyle=1, text="1. Sequential, fix param", fStyle=-1
     3649                Notebook $nb text=": Tested parameter is set to Min and all other parameters selected by user for fitting are fit"
     3650                Notebook $nb text="ted. Chi-squared is recorded. Parameter is increased by step (Max-Min/NumberOfSteps) and fitting is done"
     3651                Notebook $nb text=" again - using the result of the prior fit as starting condition.     \r"
     3652                Notebook $nb text="\r"
     3653                Notebook $nb fStyle=1, text="2. Sequential, reset, fix param", fStyle=-1
     3654                Notebook $nb text=": Tested parameter is set to Min and all other parameters selected by user for fitting  are fi"
     3655                Notebook $nb text="tted. Chi-squared is recorded. Unified fit is reset to have the parameters which were set byu user before the evaluation"
     3656                Notebook $nb text=" was started. Parameter is increased by step (Max-Min/NumberOfSteps) and fitting is done again - therefore using t"
     3657                Notebook $nb text="he original user settings as the starting condition.  \r"
     3658                Notebook $nb text="\r"
     3659                Notebook $nb fStyle=1, text="3. Centered, fix param", fStyle=-1
     3660                Notebook $nb text=": Tested parameter is varied from start value towards Min, using previous fit result as starting condi"
     3661                Notebook $nb text="tion. When Min is reached, the UF is reset to start position and parameter is varied up to Max"
     3662                Notebook $nb text=". Chi-squared is recorded for each parameter value.\r"
     3663                Notebook $nb text="\r"
     3664                Notebook $nb fStyle=1, text="4. Random, fix param", fStyle=-1
     3665                Notebook $nb text=": User defined number of random values for the tested parameter are selected in the user defined  range of data"
     3666                Notebook $nb text=" and for each the fit is performed while using the prior setting as starting condition. Chi-squared is r"
     3667                Notebook $nb text="ecorded.\r"
     3668                Notebook $nb text="\r"
     3669                Notebook $nb fStyle=1, text="5. Random, fit param", fStyle=-1
     3670                Notebook $nb text=": User defined number of random starting values for the parameter are selected in the user defined range"
     3671                Notebook $nb text=" of data and for each the fit is performed - including fitting this parameter - using prior setting as s"
     3672                Notebook $nb text="tarting condition. Chi-squared is recorded as well as starting and ending parameter values. "
     3673                Notebook $nb selection={startOfFile, startOfFile}, findText={"",1}
     3674        endif
     3675
     3676end
     3677
     3678//******************************************************************************************************************
     3679//******************************************************************************************************************
     3680//******************************************************************************************************************
     3681
Note: See TracChangeset for help on using the changeset viewer.