source: trunk/User Procedures/Irena/IR2_ScriptingTool.ipf @ 930

Last change on this file since 930 was 930, checked in by ilavsky, 2 years ago

Fix for Igor 7.08

File size: 91.6 KB
Line 
1#pragma rtGlobals=1             // Use modern global access method.
2#pragma version=1.30
3
4Constant IR2SversionNumber=1.30
5//*************************************************************************\
6//* Copyright (c) 2005 - 2020, Argonne National Laboratory
7//* This file is distributed subject to a Software License Agreement found
8//* in the file LICENSE that is included with this distribution.
9//*************************************************************************/
10
11//1.30 added ability to save separate ppopulation data in Modeling
12//1.29 fix probem with DSM data folders showing as QRS data folders which caused issues.
13//1.28 added better regular expression cheat sheet on the panel.
14//1.27 added getHelp button calling to www manual
15//1.26 added in popup grandparent folder to the parent folder to reduce scope.
16//1.25 added ability to sort data by minutes (_xyzmin), pct (_xyzpct), and  temperature (_xyzC).
17//1.24 fixed bug in Scripting tool which caused qrs start folder return only ones with qrs, but not qds, and other "semi" qrs data
18//1.23 Modeling II - fixed the preservation of user choices on error settings and Intensity scaling.
19//1.22 added AfterDataLoaded_Hook() to Modeling II call function to enable user modify something after the data set is loaded.
20//1.21 added for QRS data wave name match string.
21//1.20 Plotting tool now - if not opened will open now, not abort. Fixed Buttons for Guinier-Porod and Size Dist with uncertainities appering in wrong time.
22//1.19 fix for Diameters/Radii option in Modeling II - it was failing to add such data in Plotting tool.
23//1.18 will set cursors for first and last point of data, if not set by user ahead of fitting. Sync FolderNameStr and set WavenameStr=""
24//1.17 minor fix when list fo folders contained ;; somehow and we got stale content in the listbox.
25//1.16 fix to make compatible with changes in Controls procedures.
26//1.15 added skip review of fitting parameters for Unified fit improvement.
27//1.14 fixed bug in calling Plotting tool with results
28//1.13 modified to handle chanigng of the data type between the scripting tool and the tool being called.
29//1.12 Added Guinier-Porod as controlled tool and fixed minor Folder selection bug for other tools
30//1.11 modified to handle d, t, and m type QRS data (d-spacing, two theta, and distance) for needs to Nika users
31//1.10 added handling of uncertainities (errors) for Results data type (needed for Sizes)
32//1.09 significant increase in speed due to changes to Control procedures.
33//1.08 added Scripting ability for results in Ploting tool I
34//1.07 yet another fix for Size distribution tool;. It was not loading the new data properly.
35//1.06 added sorting order controls and added functionality for the Ploting tool I
36//1.05 fixed bug in scripting Unified fit, eventcode was not set correctly.  Added match string (using grep, no * needed), added check versions.
37//1.04 fixed bug where the tool was missign the one before last folder (wrong wave length)...
38//1.03 support for single data set Modeling II
39//1.02 FIxed Scripting of Size distribution where we wer emissing eventcode=2  which caused the data not to be updated beteen fits.
40//1.01 added license for ANL
41
42//**************************************************************************************
43//**************************************************************************************
44//**************************************************************************************
45//**************************************************************************************
46//**************************************************************************************
47//**************************************************************************************
48
49
50
51Function IR2S_ScriptingTool()
52
53        IN2G_CheckScreenSize("height",670)
54       
55        IR2S_InitScriptingTool()
56       
57        IR2S_UpdateListOfAvailFiles()
58        IR2S_SortListOfAvailableFldrs()
59        DoWindow IR2S_ScriptingToolPnl
60        if(V_Flag)
61                DoWindow/F IR2S_ScriptingToolPnl
62        else
63                Execute("IR2S_ScriptingToolPnl()")
64                IR1_UpdatePanelVersionNumber("IR2S_ScriptingToolPnl", IR2SversionNumber,1)
65        endif
66
67end
68//************************************************************************************************************
69//************************************************************************************************************
70//************************************************************************************************************
71//************************************************************************************************************
72
73Function IR2S_MainCheckVersion()       
74        DoWindow IR2S_ScriptingToolPnl
75        if(V_Flag)
76                if(!IR1_CheckPanelVersionNumber("IR2S_ScriptingToolPnl", IR2SversionNumber))
77                        DoAlert /T="The Scripting tool panel was created by incorrect version of Irena " 1, "Scripting tool may need to be restarted to work properly. Restart now?"
78                        if(V_flag==1)
79                                KillWIndow/Z IR2S_ScriptingToolPnl
80                                IR2S_ScriptingTool()
81                        else            //at least reinitialize the variables so we avoid major crashes...
82                                IR2S_InitScriptingTool()
83                                IR2S_UpdateListOfAvailFiles()
84                                IR2S_SortListOfAvailableFldrs()
85                        endif
86                endif
87        endif
88end
89
90
91//**************************************************************************************
92//**************************************************************************************
93//**************************************************************************************
94//**************************************************************************************
95//**************************************************************************************
96//**************************************************************************************
97
98
99
100Function IR2S_PopMenuProc(ctrlName,popNum,popStr) : PopupMenuControl
101        String ctrlName
102        Variable popNum
103        String popStr
104
105        if(stringmatch(ctrlName,"StartFolderSelection"))
106                //Update the listbox using start folde popStr
107                SVAR StartFolderName=root:Packages:Irena:ScriptingTool:StartFolderName
108                StartFolderName = popStr
109                IR2S_UpdateListOfAvailFiles()
110                IR2S_SortListOfAvailableFldrs()
111        endif
112       
113        if(stringmatch(ctrlName,"SortFolders"))
114                //Update the listbox using start folde popStr
115                SVAR FolderSortString=root:Packages:Irena:ScriptingTool:FolderSortString
116                FolderSortString = popStr
117                IR2S_SortListOfAvailableFldrs()
118        endif
119        if(stringmatch(ctrlName,"ToolResultsSelector"))
120                //Update the listbox using start folde popStr
121                SVAR SelectedResultsTool=root:Packages:Irena:ScriptingTool:SelectedResultsTool
122                SelectedResultsTool = popStr
123                string ListOfAvailableResults=IR2C_ReturnKnownToolResults(popStr)
124                //execute("PopupMenu ResultsTypeSelector, win=IR2S_ScriptingToolPnl, popvalue="+StringFromList(0,ListOfAvailableResults)+", value=IR2C_ReturnKnownToolResults(\""+popStr+"\")")
125                execute("PopupMenu ResultsTypeSelector, win=IR2S_ScriptingToolPnl, mode=1, value=IR2C_ReturnKnownToolResults(\""+popStr+"\")")
126                SVAR SelectedResultsType=root:Packages:Irena:ScriptingTool:SelectedResultsType
127                SelectedResultsType = stringFromList(0,ListOfAvailableResults)
128                IR2S_UpdateListOfAvailFiles()
129                IR2S_SortListOfAvailableFldrs()
130        endif
131        if(stringmatch(ctrlName,"ResultsTypeSelector"))
132                //Update the listbox using start folde popStr
133                SVAR SelectedResultsType=root:Packages:Irena:ScriptingTool:SelectedResultsType
134                SelectedResultsType = popStr
135                IR2S_UpdateListOfAvailFiles()
136                IR2S_SortListOfAvailableFldrs()
137        endif
138        if(stringmatch(ctrlName,"ResultsGenerationToUse"))
139                //Update the listbox using start folde popStr
140                SVAR ResultsGenerationToUse=root:Packages:Irena:ScriptingTool:ResultsGenerationToUse
141                ResultsGenerationToUse = popStr
142                IR2S_UpdateListOfAvailFiles()
143                IR2S_SortListOfAvailableFldrs()
144        endif   
145End
146
147
148//**************************************************************************************
149//**************************************************************************************
150//**************************************************************************************
151//**************************************************************************************
152//**************************************************************************************
153//**************************************************************************************
154
155
156
157Function IR2S_CheckProc(ctrlName,checked) : CheckBoxControl
158        String ctrlName
159        Variable checked
160
161        NVAR UseIndra2Data=root:Packages:Irena:ScriptingTool:UseIndra2Data
162        NVAR UseQRSdata=root:Packages:Irena:ScriptingTool:UseQRSdata
163        NVAR UseResults = root:Packages:Irena:ScriptingTool:UseResults
164        if(stringmatch(ctrlname,"UseIndra2Data"))
165                if(checked)
166                        UseQRSdata =0
167                        UseResults = 0
168                endif
169                //update listbox
170                IR2S_UpdateListOfAvailFiles()
171                IR2S_SortListOfAvailableFldrs()
172        endif
173        if(stringmatch(ctrlname,"UseQRSdata"))
174                if(checked)
175                        UseIndra2Data =0
176                        UseResults=0
177                endif
178                //update listbox
179                IR2S_UpdateListOfAvailFiles()
180                IR2S_SortListOfAvailableFldrs()
181        endif
182        if(stringmatch(ctrlname,"UseResults"))
183                if(checked)
184                        UseIndra2Data =0
185                        UseQRSdata=0
186                endif
187                //update listbox
188                IR2S_UpdateListOfAvailFiles()
189                IR2S_SortListOfAvailableFldrs()
190        endif
191        Setvariable WaveNameMatchString, win= IR2S_ScriptingToolPnl ,disable =!UseQRSdata
192
193        Button FitWithUnified,win= IR2S_ScriptingToolPnl , disable=UseResults
194        Button FitWithSizes,win= IR2S_ScriptingToolPnl , disable=UseResults
195        Button FitWithMoldelingII,win= IR2S_ScriptingToolPnl , disable=UseResults
196        Button FitWithGuinierPorod,win= IR2S_ScriptingToolPnl , disable=UseResults
197        Button FitWithSizesU,win= IR2S_ScriptingToolPnl , disable=UseResults
198        //Button CallPlottingToolII,pos={90,450},size={200,15},proc=IR2S_ButtonProc,title="Run Plotting tool with selected data"
199        PopupMenu ToolResultsSelector win= IR2S_ScriptingToolPnl , disable=!UseResults
200        PopupMenu ResultsTypeSelector win= IR2S_ScriptingToolPnl , disable=!UseResults
201        PopupMenu ResultsGenerationToUse win= IR2S_ScriptingToolPnl , disable=!UseResults
202       
203End
204//**************************************************************************************
205//**************************************************************************************
206//**************************************************************************************
207//**************************************************************************************
208//**************************************************************************************
209//**************************************************************************************
210
211Function IR2S_ScriptToolSetVarProc(sva) : SetVariableControl
212        STRUCT WMSetVariableAction &sva
213
214        switch( sva.eventCode )
215                case 1: // mouse up
216                case 2: // Enter key
217                        if(stringmatch(sva.ctrlName,"FolderNameMatchString"))
218                                IR2S_UpdateListOfAvailFiles()
219                                IR2S_SortListOfAvailableFldrs()
220                        endif
221                        if(stringmatch(sva.ctrlName,"WaveNameMatchString"))
222                                IR2S_UpdateListOfAvailFiles()
223                                IR2S_SortListOfAvailableFldrs()
224                        endif
225                case 3: // Live update
226                        Variable dval = sva.dval
227                        String sval = sva.sval
228                        break
229                case -1: // control being killed
230                        break
231        endswitch
232
233        return 0
234End
235
236//**************************************************************************************
237//**************************************************************************************
238//**************************************************************************************
239//**************************************************************************************
240//**************************************************************************************
241//**************************************************************************************
242
243
244
245Function IR2S_ButtonProc(ctrlName) : ButtonControl
246        String ctrlName
247
248        wave SelectionOfAvailableData=root:Packages:Irena:ScriptingTool:SelectionOfAvailableData
249        if(stringmatch(ctrlName,"GetHelp"))
250                //IR2S_HelpPanel()
251                IN2G_OpenWebManual("Irena/ScriptingTool.html")
252        endif
253        if(stringmatch(ctrlName,"GetLogbook"))
254                //generate help in notebook.
255                IR2S_GetLogbook()
256        endif
257        if(stringmatch(ctrlName,"AllData"))
258                SelectionOfAvailableData=1
259        endif
260        if(stringmatch(ctrlName,"NoData"))
261                SelectionOfAvailableData=0
262        endif
263        if(stringmatch(ctrlName,"FitWithUnified"))
264                IR2S_FItWithUnifiedFit()
265        endif
266        if(stringmatch(ctrlName,"FitWithGuinierPorod"))
267                IR2S_FitWithGuinierPorod()
268        endif
269        if(stringmatch(ctrlName,"FitWithSizes"))
270                IR2S_FItWithSizes(0)
271        endif
272        if(stringmatch(ctrlName,"FitWithSizesU"))
273                IR2S_FItWithSizes(1)
274        endif
275
276        if(stringmatch(ctrlName,"FitWithMoldelingII"))
277                IR2S_FItWithModelingII()
278        endif
279        if(stringmatch(ctrlName,"CallPlottingToolII"))
280                IR2S_CallWithPlottingToolII(1)
281        endif
282        if(stringmatch(ctrlName,"CallPlottingToolIIA"))
283                IR2S_CallWithPlottingToolII(0)
284        endif
285
286       
287       
288End
289
290//**************************************************************************************
291//**************************************************************************************
292//**************************************************************************************
293
294Function IR2S_HelpPanel()
295        String nb = "ScriptingToolHelp"
296        DoWIndow ScriptingToolHelp
297        if(!V_Flag)
298                NewNotebook/N=$nb/F=1/V=1/OPTS=14/K=1/W=(732,67,1253,700)
299                Notebook $nb defaultTab=36, statusWidth=252
300                Notebook $nb showRuler=1, rulerUnits=1, updating={1, 60}
301                Notebook $nb newRuler=Normal, justification=0, margins={0,0,468}, spacing={0,0,0}, tabs={}, rulerDefaults={"Geneva",10,0,(0,0,0)}
302                Notebook $nb newRuler=Heading, justification=0, margins={0,0,468}, spacing={0,0,0}, tabs={}, rulerDefaults={"Geneva",12,3,(0,0,65535)}
303                Notebook $nb ruler=Heading, text="Help for Irena Scripting tool \r"
304                Notebook $nb text="\r"
305                Notebook $nb ruler=Normal, fSize=12, text="To use scripting tool, please open one fo the tools it can control:\r"
306                Notebook $nb text="\r"
307                Notebook $nb text="1. Unified fit\r"
308                Notebook $nb text="2. Size distribution\r"
309                Notebook $nb text="3. Modeling II (NOTE: supported only with one input data set, not \"Multiple Input data sets\" selected!)\r"
310                Notebook $nb text="\r"
311                Notebook $nb text="Setup the tool with fittign parameters on representative case (cases) and make sure the data selection w"
312                Notebook $nb text="ith cursors (Unified/Size dist) or with Qmin/Qmax is appropriate for all data you intend to analyze. Mak"
313                Notebook $nb text="e sure the fitting limits are appropriate and correct (important especially for Unified). \r"
314                Notebook $nb text="\r"
315                Notebook $nb text="Select all needed checkboxes. \r"
316                Notebook $nb text="\r"
317                Notebook $nb text="Keep the tool panels and graphs opened, scripting tool needs them to work.\r"
318                Notebook $nb text="\r"
319                Notebook $nb text="Select data in Scripting tool. Select data type and pick the folders to analyze. \r"
320                Notebook $nb text=">   Use the Match(grep) field to reduce clutter, use ONLY string to match to, no * needed, uses grep tool. \r"
321                Notebook $nb text=">   To pick separate folders, use ctrl/cmd click. \r"
322                Notebook $nb text=">   To select range of folders, use click for start, shift-click for end of range. \r"
323                Notebook $nb text="\r"
324                Notebook $nb text="Select output options. Note that some options may not be applicablefor specific tool. \r"
325                Notebook $nb text="\r"
326                Notebook $nb text="If you are running Unified fit or Modeling II you can reset parameters between the fits. This option is "
327                Notebook $nb text="not applicable for Size distribution. \r"
328                Notebook $nb text="\r"
329                Notebook $nb text="NOTE: If the fit fails, nothing is recorded in the folder/waves and some notes are commented into the no"
330                Notebook $nb text="tebook.  The run is not stopped, next sample is analyzed. \r"
331                Notebook $nb text="However: If if you run out of fitting limits the tools stop themselves and break the queue. This cannot be caught by this tool."
332                Notebook $nb text="\r"
333                Notebook $nb fStyle=2
334                Notebook $nb text=" E-mail me Igor experiments exhibiting problems with this tool so I can fix it. There are potentially ma"
335                Notebook $nb text="ny chances for failures I may have not predicted.\r"
336        else
337                DoWIndow/F ScriptingToolHelp
338        endif
339        AutoPositionWindow/R=IR2S_ScriptingToolPnl ScriptingToolHelp
340
341end
342
343//**************************************************************************************
344//**************************************************************************************
345//**************************************************************************************
346
347
348
349Window IR2S_ScriptingToolPnl()
350        PauseUpdate; Silent 1           // building window...
351        NewPanel/K=1 /W=(28,44,412,660) as "Scripting tool"
352        SetDrawLayer UserBack
353        SetDrawEnv fsize= 20,fstyle= 1,textrgb= (0,0,65535)
354        DrawText 29,29,"Scripting tool"
355
356        if(!DataFolderExists("root:Packages:IrenaControlProcs"))
357                string UserDataTypes=""
358                string UserNameString=""
359                string XUserLookup=""
360                string EUserLookup=""
361                IR2C_AddDataControls("Irena:WAXS","IR3W_WAXSPanel","DSM_Int;M_DSM_Int;SMR_Int;M_SMR_Int;","AllCurrentlyAllowedTypes",UserDataTypes,UserNameString,XUserLookup,EUserLookup, 0,1, DoNotAddControls=1)
362        endif
363
364        Button GetHelp,pos={280,4},size={90,15},proc=IR2S_ButtonProc,title="Get help"
365        Button GetHelp,fSize=10,fStyle=2, fColor=(65535,32768,32768)
366        Button GetLogbook,pos={280,21},size={90,15},proc=IR2S_ButtonProc,title="Open logbook"
367        Button GetLogbook,fSize=10,fStyle=2
368//      Button GetHelp,pos={280,105},size={80,15},fColor=(65535,32768,32768), proc=IR2S_ButtonProc,title="Get Help", help={"Open www manual page for this tool"}
369
370        PopupMenu StartFolderSelection,pos={10,40},size={130,15},proc=IR2S_PopMenuProc,title="Select start folder"
371        PopupMenu StartFolderSelection,mode=1,popvalue=root:Packages:Irena:ScriptingTool:StartFolderName,value= #"\"root:;\"+IR3C_GenStringOfFolders2(root:Packages:Irena:ScriptingTool:UseIndra2Data, root:Packages:Irena:ScriptingTool:UseQRSdata,2,1)"
372
373        CheckBox UseIndra2data,pos={302,45},size={76,14},proc=IR2S_CheckProc,title="USAXS?"
374        CheckBox UseIndra2data,variable= root:Packages:Irena:ScriptingTool:UseIndra2Data
375        CheckBox UseQRSdata,pos={302,63},size={64,14},proc=IR2S_CheckProc,title="QRS data?"
376        CheckBox UseQRSdata,variable= root:Packages:Irena:ScriptingTool:UseQRSdata
377        CheckBox UseResults,pos={302,81},size={64,14},proc=IR2S_CheckProc,title="Results?"
378        CheckBox UseResults,variable= root:Packages:Irena:ScriptingTool:UseResults
379
380        PopupMenu ToolResultsSelector,pos={10,65},size={230,15},fStyle=2,proc=IR2S_PopMenuProc,title="Which tool results?    ", disable=!(root:Packages:Irena:ScriptingTool:UseResults)
381        PopupMenu ToolResultsSelector,mode=1,popvalue=root:Packages:Irena:ScriptingTool:SelectedResultsTool,value= #"root:Packages:IrenaControlProcs:AllKnownToolsResults"//, bodyWidth=170
382
383        PopupMenu ResultsTypeSelector,pos={10,90},size={230,15},fStyle=2,proc=IR2S_PopMenuProc,title="Which results?          ", disable=!(root:Packages:Irena:ScriptingTool:UseResults)
384        PopupMenu ResultsTypeSelector,mode=1,popvalue=root:Packages:Irena:ScriptingTool:SelectedResultsType,value= IR2C_ReturnKnownToolResults(root:Packages:IrenaControlProcs:AllKnownToolsResults)//, bodyWidth=170
385
386        PopupMenu ResultsGenerationToUse,pos={10,115},size={230,15},fStyle=2,proc=IR2S_PopMenuProc,title="Results Generation?           ", disable=!(root:Packages:Irena:ScriptingTool:UseResults)
387        PopupMenu ResultsGenerationToUse,mode=1,popvalue=root:Packages:Irena:ScriptingTool:ResultsGenerationToUse,value= "Latest;_0;_1;_2;_3;_4;_5;_6;_7;_8;_9;_10;"
388
389        ListBox DataFolderSelection,pos={4,135},size={372,180}, mode=9
390        ListBox DataFolderSelection,listWave=root:Packages:Irena:ScriptingTool:ListOfAvailableData
391        ListBox DataFolderSelection,selWave=root:Packages:Irena:ScriptingTool:SelectionOfAvailableData
392
393        //SVAR FolderNameMatchString=root:Packages:Irena:ScriptingTool:FolderNameMatchString
394        SetVariable FolderNameMatchString,pos={10,325},size={170,15}, proc=IR2S_ScriptToolSetVarProc,title="Match (RegEx)"
395        Setvariable FolderNameMatchString,fSize=10,fStyle=2, variable=root:Packages:Irena:ScriptingTool:FolderNameMatchString
396
397        SetVariable WaveNameMatchString,pos={200,325},size={170,15}, proc=IR2S_ScriptToolSetVarProc,title="Wave Match (RegEx)"
398        Setvariable WaveNameMatchString,fSize=10,fStyle=2, variable=root:Packages:Irena:ScriptingTool:WaveNameMatchString, disable =!root:Packages:Irena:ScriptingTool:UseQRSdata
399
400        Button AllData,pos={170,350},size={100,15},proc=IR2S_ButtonProc,title="Select all data"
401        Button AllData,fSize=10,fStyle=2
402        Button NoData,pos={270,350},size={100,15},proc=IR2S_ButtonProc,title="DeSelect all data"
403        Button NoData,fSize=10,fStyle=2
404
405        PopupMenu SortFolders,pos={10,348},size={130,20},fStyle=2,proc=IR2S_PopMenuProc,title="Sort Folders"
406        PopupMenu SortFolders,mode=1,popvalue=root:Packages:Irena:ScriptingTool:FolderSortString,value= #"\"---;Alphabetical;Reverse Alphabetical;_xyz;_xyz.ext;Reverse _xyz;Reverse _xyz.ext;Sxyz_;Reverse Sxyz_;_xyzmin;_xyzpct;_xyzC;_xyz_000;Reverse _xyz_000;\""
407
408        Button FitWithUnified,pos={90,375},size={200,15},proc=IR2S_ButtonProc,title="Run Unified Fit on selected data"
409        Button FitWithUnified,fSize=10,fStyle=2, disable=(root:Packages:Irena:ScriptingTool:UseResults)
410
411        Button FitWithGuinierPorod,pos={90,395},size={200,15},proc=IR2S_ButtonProc,title="Run Guinier-Porod on selected data"
412        Button FitWithGuinierPorod,fSize=10,fStyle=2, disable=(root:Packages:Irena:ScriptingTool:UseResults)
413
414        Button FitWithSizes,pos={20,415},size={160,15},proc=IR2S_ButtonProc,title="Run Size dist. no uncert."
415        Button FitWithSizes,fSize=10,fStyle=2, disable=(root:Packages:Irena:ScriptingTool:UseResults)
416        Button FitWithSizesU,pos={210,415},size={160,15},proc=IR2S_ButtonProc,title="Run Size distr. w/uncert."
417        Button FitWithSizesU,fSize=10,fStyle=2, disable=(root:Packages:Irena:ScriptingTool:UseResults)
418        Button FitWithMoldelingII,pos={90,435},size={200,15},proc=IR2S_ButtonProc,title="Run Modeling II on selected data"
419        Button FitWithMoldelingII,fSize=10,fStyle=2, disable=(root:Packages:Irena:ScriptingTool:UseResults)
420        Button CallPlottingToolII,pos={20,455},size={160,15},proc=IR2S_ButtonProc,title="Run (w/reset) Plotting tool"
421        Button CallPlottingToolII,fSize=10,fStyle=2
422        Button CallPlottingToolIIA,pos={210,455},size={160,15},proc=IR2S_ButtonProc,title="Append to Plotting tool"
423        Button CallPlottingToolIIA,fSize=10,fStyle=2
424
425        CheckBox SaveResultsInNotebook,pos={10,490},size={64,14},proc=IR2S_CheckProc,title="Save results in notebook?"
426        CheckBox SaveResultsInNotebook,variable= root:Packages:Irena:ScriptingTool:SaveResultsInNotebook
427        CheckBox ResetBeforeNextFit,pos={10,510},size={64,14},proc=IR2S_CheckProc,title="Reset before next fit? (Unif./Model.)"
428        CheckBox ResetBeforeNextFit,variable= root:Packages:Irena:ScriptingTool:ResetBeforeNextFit
429        CheckBox SaveResultsInFldrs,pos={10,530},size={64,14},proc=IR2S_CheckProc,title="Save results in folders?"
430        CheckBox SaveResultsInFldrs,variable= root:Packages:Irena:ScriptingTool:SaveResultsInFldrs
431        CheckBox ExportSeparatePopData,pos={30,550},size={64,14},proc=IR2S_CheckProc,title="Modeling - save separate Pop results?"
432        CheckBox ExportSeparatePopData,variable= root:Packages:Irena:ScriptingTool:ExportSeparatePopData
433        CheckBox SaveResultsInWaves,pos={10,570},size={64,14},proc=IR2S_CheckProc,title="Save results in waves (Modeling)?"
434        CheckBox SaveResultsInWaves,variable= root:Packages:Irena:ScriptingTool:SaveResultsInWaves
435       
436       
437
438        //DrawText 170,505,"RegEx - Not contain: ^((?!string).)*$"
439        TitleBox Regex1 title="\Zr150Regex cheat sheet",pos={240,490},frame=0,fstyle=2, size={184,15}, fColor=(1,16019,65535)
440        TitleBox Regex2 title="\Zr130Contain str:                 str",pos={220,510},frame=0,fstyle=2,size={144,15}
441        TitleBox Regex3 title="\Zr130str1 AND str2:     str1.*str2",pos={220,525},frame=0,fstyle=2,size={144,15}
442        TitleBox Regex4 title="\Zr130Not contain:     ^((?!str).)*$",pos={220,540},frame=0,fstyle=2,size={184,15}
443        TitleBox Regex5 title="\Zr130str1 OR str2:       str1|str2",pos={220,555},frame=0,fstyle=2,size={184,15}
444       
445        IR2S_UpdateListOfAvailFiles()
446        IR2S_SortListOfAvailableFldrs()
447EndMacro
448
449//**************************************************************************************
450//**************************************************************************************
451//**************************************************************************************
452Function IR2S_GetLogbook()
453
454        DoWIndow ScriptingToolNbk
455        if(V_Flag)
456                DoWindow/F ScriptingToolNbk
457        else
458                DoWIndow SAS_FitLog
459                if(V_Flag)
460                        DoWindow/F SAS_FitLog
461                endif
462        endif
463end
464
465//**************************************************************************************
466//**************************************************************************************
467//**************************************************************************************
468
469//**************************************************************************************
470//**************************************************************************************
471//static Function IR2S_SortWaveOfFolders(WaveToSort)
472//      wave/T WaveToSort
473//     
474//      make/N=(numpnts(WaveToSort))/Free IndexWv
475//      IndexWv = ItemsInList(WaveToSort[p],":")
476//      Sort IndexWv, WaveToSort
477//end
478//**************************************************************************************
479//**************************************************************************************
480//**************************************************************************************
481//**************************************************************************************
482
483
484
485Function/T IR2S_GenStringOfFolders(StartFolder,UseIndra2Structure, UseQRSStructure, UseResults, SlitSmearedData, AllowQRDataOnly)
486        string StartFolder
487        variable UseIndra2Structure, UseQRSStructure, UseResults, SlitSmearedData, AllowQRDataOnly
488                //SlitSmearedData =0 for DSM data,
489                //                          =1 for SMR data
490                //                    and =2 for both
491                // AllowQRDataOnly=1 if Q and R data are allowed only (no error wave). For QRS data ONLY!
492       
493        string ListOfQFolders
494        string TempStr, tempStr2
495        variable i
496        SVAR FolderNameMatchString=root:Packages:Irena:ScriptingTool:FolderNameMatchString
497        //      if UseIndra2Structure = 1 we are using Indra2 data, else return all folders
498        string result
499        if (UseIndra2Structure)
500                if(SlitSmearedData==1)
501                        result=IN2G_FindFolderWithWaveTypes(StartFolder, 10, "*SMR*", 1)
502                elseif(SlitSmearedData==2)
503                        tempStr=IN2G_FindFolderWithWaveTypes(StartFolder, 10, "*SMR*", 1)
504                        result=IN2G_FindFolderWithWaveTypes(StartFolder, 10, "*DSM*", 1)+";"
505                        for(i=0;i<ItemsInList(tempStr);i+=1)
506                        //print stringmatch(result, "*"+StringFromList(i, tempStr,";")+"*")
507                                if(stringmatch(result, "*"+StringFromList(i, tempStr,";")+"*")==0)
508                                        result+=StringFromList(i, tempStr,";")+";"
509                                endif
510                        endfor
511                else
512                        result=IN2G_FindFolderWithWaveTypes(StartFolder, 10, "*DSM*", 1)
513                endif
514        elseif (UseQRSStructure)
515//              ListOfQFolders=IN2G_FindFolderWithWaveTypes(StartFolder, 10, "q*", 1)
516//              result=IR1_ReturnListQRSFolders(ListOfQFolders,AllowQRDataOnly)
517                        make/N=0/FREE/T ResultingWave
518                        IR2P_FindFolderWithWaveTypesWV(StartFolder, 10, "(?i)^r|i$", 1, ResultingWave)
519                        //IR2P_FindFolderWithWaveTypesWV("root:", 10, "*i*", 1, ResultingWave)
520                        result=IR3C_CheckForRightQRSTripletWvs(ResultingWave,AllowQRDataOnly)
521        elseif (UseResults)
522                SVAR SelectedResultsTool=root:Packages:Irena:ScriptingTool:SelectedResultsTool
523                SVAR SelectedResultsType=root:Packages:Irena:ScriptingTool:SelectedResultsType
524                SVAR ResultsGenerationToUse=root:Packages:Irena:ScriptingTool:ResultsGenerationToUse
525                if(stringmatch(ResultsGenerationToUse,"Latest"))
526                        result=IN2G_FindFolderWithWvTpsList(StartFolder, 10,SelectedResultsType+"*", 1)
527                else
528                        result=IN2G_FindFolderWithWvTpsList(StartFolder, 10,SelectedResultsType+ResultsGenerationToUse, 1)
529                endif
530        else
531                result=IN2G_FindFolderWithWaveTypes(StartFolder, 10, "*", 1)
532        endif
533        //leave ONLY folders matching FolderNameMatchStringstring is set
534        if(strlen(FolderNameMatchString)>0)
535                result = GrepList(result, FolderNameMatchString )
536        endif
537        if(stringmatch(";",result[0]))
538                result = result [1, inf]
539        endif
540        return result
541end
542
543//**************************************************************************************
544//**************************************************************************************
545//**************************************************************************************
546Function IR2S_SortListOfAvailableFldrs()
547
548        SVAR FolderSortString=root:Packages:Irena:ScriptingTool:FolderSortString
549        Wave/T ListOfAvailableData=root:Packages:Irena:ScriptingTool:ListOfAvailableData
550        Wave SelectionOfAvailableData=root:Packages:Irena:ScriptingTool:SelectionOfAvailableData
551        if(numpnts(ListOfAvailableData)<2)
552                return 0
553        endif
554        Duplicate/Free SelectionOfAvailableData, TempWv
555        variable i, j
556        j=0
557        string tempstr
558        SelectionOfAvailableData=0
559        variable InfoLoc, DIDNotFindInfo
560        DIDNotFindInfo =0
561        if(stringMatch(FolderSortString,"---"))
562                //nothing to do
563        elseif(stringMatch(FolderSortString,"Alphabetical"))
564                Sort /A ListOfAvailableData, ListOfAvailableData
565        elseif(stringMatch(FolderSortString,"Reverse Alphabetical"))
566                Sort /A /R ListOfAvailableData, ListOfAvailableData
567        elseif(stringMatch(FolderSortString,"Sxyz_"))
568                For(i=0;i<numpnts(TempWv);i+=1)
569                        TempWv[i] = str2num(ReplaceString("S", StringFromList(0, ListOfAvailableData[i], "_"), ""))
570                endfor
571                Sort TempWv, ListOfAvailableData
572        elseif(stringMatch(FolderSortString,"Reverse Sxyz_"))
573                For(i=0;i<numpnts(TempWv);i+=1)
574                        TempWv[i] = str2num(ReplaceString("S", StringFromList(0, ListOfAvailableData[i], "_"), ""))
575                endfor
576                Sort/R TempWv, ListOfAvailableData
577        elseif(stringMatch(FolderSortString,"_xyzmin"))
578                Do
579                        For(i=0;i<ItemsInList(ListOfAvailableData[j] , "_");i+=1)
580                                if(StringMatch(ReplaceString(":", StringFromList(i, ListOfAvailableData[j], "_"),""), "*min" ))
581                                        InfoLoc = i
582                                        break
583                                endif
584                        endfor
585                        j+=1
586                        if(j>(numpnts(ListOfAvailableData)-1))
587                                DIDNotFindInfo=1
588                                break
589                        endif
590                while (InfoLoc<1)// && j<(numpnts(ListOfAvailableData)))
591                if(DIDNotFindInfo)
592                        DoAlert/T="Information not found" 0, "Cannot find location of _xyzmin information, sorting alphabetically"
593                        Sort /A ListOfAvailableData, ListOfAvailableData
594                else
595                        For(i=0;i<numpnts(TempWv);i+=1)
596                                if(StringMatch(StringFromList(InfoLoc, ListOfAvailableData[i], "_"), "*min*" ))
597                                        TempWv[i] = str2num(ReplaceString("min", StringFromList(InfoLoc, ListOfAvailableData[i], "_"), ""))
598                                else    //data not found
599                                        TempWv[i] = inf
600                                endif
601                        endfor
602                        Sort TempWv, ListOfAvailableData
603                endif
604        elseif(stringMatch(FolderSortString,"_xyzpct"))
605                Do
606                        For(i=0;i<ItemsInList(ListOfAvailableData[j] , "_");i+=1)
607                                if(StringMatch(ReplaceString(":", StringFromList(i, ListOfAvailableData[j], "_"),""), "*pct" ))
608                                        InfoLoc = i
609                                        break
610                                endif
611                        endfor
612                        j+=1
613                        if(j>(numpnts(ListOfAvailableData)-1))
614                                DIDNotFindInfo=1
615                                break
616                        endif
617                while (InfoLoc<1)
618                if(DIDNotFindInfo)
619                        DoAlert/T="Information not found" 0, "Cannot find location of _xyzpct information, sorting alphabetically"
620                        Sort /A ListOfAvailableData, ListOfAvailableData
621                else
622                        For(i=0;i<numpnts(TempWv);i+=1)
623                                if(StringMatch(StringFromList(InfoLoc, ListOfAvailableData[i], "_"), "*pct*" ))
624                                        TempWv[i] = str2num(ReplaceString("pct", StringFromList(InfoLoc, ListOfAvailableData[i], "_"), ""))
625                                else    //data not found
626                                        TempWv[i] = inf
627                                endif
628                        endfor
629                        Sort TempWv, ListOfAvailableData
630                endif
631        elseif(stringMatch(FolderSortString,"_xyzC"))
632                Do
633                        For(i=0;i<ItemsInList(ListOfAvailableData[j] , "_");i+=1)
634                                if(StringMatch(ReplaceString(":", StringFromList(i, ListOfAvailableData[j], "_"),""), "*C" ))
635                                        InfoLoc = i
636                                        break
637                                endif
638                        endfor
639                        j+=1
640                        if(j>(numpnts(ListOfAvailableData)-1))
641                                DIDNotFindInfo=1
642                                break
643                        endif
644                while (InfoLoc<1)
645                if(DIDNotFindInfo)
646                        DoAlert/T="Information not found" 0, "Cannot find location of _xyzC information, sorting alphabetically"
647                        Sort /A ListOfAvailableData, ListOfAvailableData
648                else
649                        For(i=0;i<numpnts(TempWv);i+=1)
650                                if(StringMatch(StringFromList(InfoLoc, ListOfAvailableData[i], "_"), "*C*" ))
651                                        TempWv[i] = str2num(ReplaceString("C", StringFromList(InfoLoc, ListOfAvailableData[i], "_"), ""))
652                                else    //data not found
653                                        TempWv[i] = inf
654                                endif
655                        endfor
656                        Sort TempWv, ListOfAvailableData
657                endif
658        elseif(stringMatch(FolderSortString,"_xyz"))
659                        //For(i=0;i<numpnts(TempWv);i+=1)
660                TempWv = IN2G_FindNumIndxForSort(ListOfAvailableData[p])
661                        //TempWv[i] = str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-1, ListOfAvailableData[i]  , "_"))
662                        //endfor
663                Sort TempWv, ListOfAvailableData
664        elseif(stringMatch(FolderSortString,"Reverse _xyz"))
665                        //For(i=0;i<numpnts(TempWv);i+=1)
666                TempWv = IN2G_FindNumIndxForSort(ListOfAvailableData[i])
667                        //TempWv[i] = str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-1, ListOfAvailableData[i]  , "_"))
668                        //endfor
669                Sort /R  TempWv, ListOfAvailableData
670        elseif(stringMatch(FolderSortString,"_xyz.ext"))
671                For(i=0;i<numpnts(TempWv);i+=1)
672                        tempstr = StringFromList(ItemsInList(ListOfAvailableData[i]  , ".")-2, ListOfAvailableData[i]  , ".")
673                        TempWv[i] = str2num(StringFromList(ItemsInList(tempstr , "_")-1, tempstr , "_"))
674                endfor
675                Sort TempWv, ListOfAvailableData
676        elseif(stringMatch(FolderSortString,"Reverse _xyz.ext"))
677                For(i=0;i<numpnts(TempWv);i+=1)
678                        tempstr = StringFromList(ItemsInList(ListOfAvailableData[i]  , ".")-2, ListOfAvailableData[i]  , ".")
679                        TempWv[i] = str2num(StringFromList(ItemsInList(tempstr , "_")-1, tempstr , "_"))
680                endfor
681                Sort /R  TempWv, ListOfAvailableData
682        elseif(stringMatch(FolderSortString,"_xyz_000"))
683                For(i=0;i<numpnts(TempWv);i+=1)
684                        TempWv[i] = str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-2, ListOfAvailableData[i]  , "_"))
685                endfor
686                Sort TempWv, ListOfAvailableData
687        elseif(stringMatch(FolderSortString,"Reverse _xyz_000"))
688                For(i=0;i<numpnts(TempWv);i+=1)
689                        TempWv[i] = str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-2, ListOfAvailableData[i]  , "_"))
690                endfor
691                Sort /R  TempWv, ListOfAvailableData
692        endif
693
694end
695
696//**************************************************************************************
697//**************************************************************************************
698//**************************************************************************************
699
700//WaveNameMatchString
701
702
703Function IR2S_UpdateListOfAvailFiles()
704
705        DFref oldDf= GetDataFolderDFR()
706
707        setDataFolder root:Packages:Irena:ScriptingTool
708       
709        NVAR UseIndra2Data=root:Packages:Irena:ScriptingTool:UseIndra2Data
710        NVAR UseQRSdata=root:Packages:Irena:ScriptingTool:UseQRSData
711        NVAR UseResults=root:Packages:Irena:ScriptingTool:UseResults
712        SVAR StartFolderName=root:Packages:Irena:ScriptingTool:StartFolderName
713        SVAR WaveNameMatchString=root:Packages:Irena:ScriptingTool:WaveNameMatchString
714        string LStartFolder, FolderContent
715        if(stringmatch(StartFolderName,"---"))
716                LStartFolder="root:"
717        else
718                LStartFolder = StartFolderName
719        endif
720        string CurrentFolders=IR2S_GenStringOfFolders(LStartFolder,UseIndra2Data, UseQRSData,UseResults, 2,1)
721
722        Wave/T ListOfAvailableData=root:Packages:Irena:ScriptingTool:ListOfAvailableData
723        Wave SelectionOfAvailableData=root:Packages:Irena:ScriptingTool:SelectionOfAvailableData
724        variable i, j, match
725        string TempStr, FolderCont
726
727               
728        Redimension/N=(ItemsInList(CurrentFolders , ";")) ListOfAvailableData, SelectionOfAvailableData
729        j=0
730        For(i=0;i<ItemsInList(CurrentFolders , ";");i+=1)
731                //TempStr = RemoveFromList("USAXS",RemoveFromList("root",StringFromList(i, CurrentFolders , ";"),":"),":")
732                TempStr = ReplaceString(LStartFolder, StringFromList(i, CurrentFolders , ";"),"")
733                if(strlen(TempStr)>0)
734                        ListOfAvailableData[j] = tempStr
735                        j+=1
736                endif
737        endfor
738        if(j<ItemsInList(CurrentFolders , ";"))
739                DeletePoints j, numpnts(ListOfAvailableData)-j, ListOfAvailableData, SelectionOfAvailableData
740        endif
741        //now we need to clean up the folder list if wave name match string is used, valid ONLy for qrs data type...
742        if(strlen(WaveNameMatchString)>0 && UseQRSdata)
743                For(i=numpnts(ListOfAvailableData)-1;I>=0;i-=1)
744                      match = 0
745                        TempStr = LStartFolder+ListOfAvailableData[i]
746                        DFREF tmpDFR = $(TempStr)
747                        //FolderCont = ReplaceString(",",RemoveEnding(StringFromList(1,DataFolderDir(2, tmpDFR ),":"),";\r"),";")+";"
748                        FolderCont = IN2G_ConvertDataDirToList(DataFolderDir(2,tmpDFR))
749                        if(strlen(GrepList(FolderCont,"(?i)^r.*"+WaveNameMatchString+"|"+WaveNameMatchString+".*(?i)i$"))<1)
750                                DeletePoints i, 1, ListOfAvailableData, SelectionOfAvailableData
751                        endif
752                endfor         
753        endif
754        SelectionOfAvailableData = 0
755        setDataFolder OldDF
756end
757
758
759//**************************************************************************************
760//**************************************************************************************
761//**************************************************************************************
762//**************************************************************************************
763//**************************************************************************************
764//**************************************************************************************
765
766
767
768Function IR2S_InitScriptingTool()
769       
770        DFref oldDf= GetDataFolderDFR()
771
772       
773        NewDataFolder/O/S root:Packages
774        NewDataFolder/O/S Irena
775        NewDataFolder/O/S ScriptingTool
776       
777        string ListOfVariables
778        string ListOfStrings
779        variable i
780
781        //here define the lists of variables and strings needed, separate names by ;...
782        ListOfStrings="StartFolderName;FolderNameMatchString;FolderSortString;SelectedResultsType;SelectedResultsTool;ResultsGenerationToUse;"
783        ListOfStrings+="WaveNameMatchString;"
784        //"DataFolderName;IntensityWaveName;QWavename;ErrorWaveName;"
785        ListOfVariables="UseIndra2Data;UseQRSdata;UseResults;SaveResultsInNotebook;ResetBeforeNextFit;SaveResultsInFldrs;SaveResultsInWaves;"
786        ListOfVariables+="ExportSeparatePopData;"
787
788        //and here we create them
789        for(i=0;i<itemsInList(ListOfVariables);i+=1)   
790                IN2G_CreateItem("variable",StringFromList(i,ListOfVariables))
791        endfor         
792                                                               
793        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
794                IN2G_CreateItem("string",StringFromList(i,ListOfStrings))
795        endfor 
796       
797        SVAR StartFolderName   
798        if(strlen(StartFolderName)<1)
799                StartFolderName="root:"
800        endif
801       
802        SVAR SelectedResultsType
803        SVAR SelectedResultsTool
804        SVAR ResultsGenerationToUse
805        if(strlen(SelectedResultsType)<1)
806                SelectedResultsType="UnifiedFitIntensity"
807        endif
808        if(strlen(SelectedResultsTool)<1)
809                SelectedResultsTool="Unified Fit"
810        endif
811        if(strlen(ResultsGenerationToUse)<1)
812                ResultsGenerationToUse="Latest"
813        endif
814       
815        Make/O/T/N=(0) ListOfAvailableData
816        Make/O/N=(0) SelectionOfAvailableData
817       
818        NVAR UseIndra2Data
819        NVAR UseQRSdata
820        NVAR UseResults
821        if(UseIndra2Data+UseQRSdata+UseResults!=1)
822                UseIndra2Data=0
823                UseQRSdata=1
824                UseResults=0
825        endif
826        setDataFolder OldDF
827end
828//**************************************************************************************
829//**************************************************************************************
830//**************************************************************************************
831
832Function IR2S_CallWithPlottingToolII(reset)
833        variable reset
834        DoWindow IR1P_ControlPanel
835        if(!V_Flag)
836                //Abort  "The Plotting Tool II panel must be opened"
837                IR1P_GeneralPlotTool()
838        else
839                DoWIndow/F IR1P_ControlPanel
840        endif
841       
842        DFref oldDf= GetDataFolderDFR()
843
844        setDataFolder root:Packages:Irena:ScriptingTool
845        //set to same data types...
846        NVAR STUseIndra2Data = root:Packages:Irena:ScriptingTool:UseIndra2Data
847        NVAR STUseQRSdata =root:Packages:Irena:ScriptingTool:UseQRSdata
848        NVAR STUseResults=root:Packages:Irena:ScriptingTool:UseResults
849
850       
851        NVAR PTUseIndra2Data=root:Packages:GeneralplottingTool:UseIndra2Data
852        NVAR PTUseQRSdata=root:Packages:GeneralplottingTool:UseQRSdata
853        NVAR PTUseResults=root:Packages:GeneralplottingTool:UseResults
854        SVAR FolderMatchStr=root:Packages:IrenaControlProcs:IR1P_ControlPanel:FolderMatchStr
855        SVAR WaveMatchStr=root:Packages:IrenaControlProcs:IR1P_ControlPanel:WaveMatchStr
856        SVAR ScriptToolFMS=root:Packages:Irena:ScriptingTool:FolderNameMatchString
857        SVAR ScriptToolWMS=root:Packages:Irena:ScriptingTool:WaveNameMatchString
858        if(STUseQRSdata)
859                WaveMatchStr=ScriptToolWMS
860        else
861                WaveMatchStr=""
862        endif
863        FolderMatchStr=ScriptToolFMS
864        PTUseResults=STUseResults
865        PTUseQRSdata=STUseQRSdata
866        PTUseIndra2Data=STUseIndra2Data
867        STRUCT WMCheckboxAction CB_Struct
868        CB_Struct.eventcode=2
869        if(PTUseIndra2Data)
870                CB_Struct.ctrlName="UseIndra2Data"
871        elseif(PTUseQRSdata)
872                CB_Struct.ctrlName="UseQRSData"
873        elseif(PTUseResults)
874                CB_Struct.ctrlName="UseResults"
875        else
876                Abort "error, report it"
877        endif
878        CB_Struct.checked=1
879        CB_Struct.win="IR1P_ControlPanel"       
880        IR2C_InputPanelCheckboxProc(CB_Struct)
881        Wave/T ListOfAvailableData = root:Packages:Irena:ScriptingTool:ListOfAvailableData
882        Wave SelectionOfAvailableData =root:Packages:Irena:ScriptingTool:SelectionOfAvailableData
883        NVAR UseIndra2Data = root:Packages:Irena:ScriptingTool:UseIndra2Data
884        variable NumOfSelectedFiles = sum(SelectionOfAvailableData)
885        NVAR SaveResultsInNotebook = root:Packages:Irena:ScriptingTool:SaveResultsInNotebook
886        NVAR ResetBeforeNextFit = root:Packages:Irena:ScriptingTool:ResetBeforeNextFit
887        NVAR SaveResultsInFldrs = root:Packages:Irena:ScriptingTool:SaveResultsInFldrs
888        NVAR SaveResultsInWaves = root:Packages:Irena:ScriptingTool:SaveResultsInWaves
889        SVAR StartFolderName = root:Packages:Irena:ScriptingTool:StartFolderName
890        SVAR SelectedResultsTool=root:Packages:Irena:ScriptingTool:SelectedResultsTool
891        SVAR SelectedResultsType=root:Packages:Irena:ScriptingTool:SelectedResultsType
892        SVAR ResultsGenerationToUse=root:Packages:Irena:ScriptingTool:ResultsGenerationToUse
893        SVAR ResultsDataTypesLookup=root:Packages:IrenaControlProcs:ResultsDataTypesLookup
894
895        string LStartFolder, TempXName, TempYName
896        if(stringmatch(StartFolderName,"---"))
897                LStartFolder="root:"
898        else
899                LStartFolder=StartFolderName
900        endif
901        variable i, j
902        string CurrentFolderName, TempStr, result, tempStr2, tempStr3
903        if(reset)
904                IR1P_InputPanelButtonProc("ResetAll")                           //resent graph?
905        endif   
906        variable AddedFiles=0
907        Print " **** working : adding data sets to plotting tool"
908        string LastDiameterOrRadius=""
909        variable raiseWarning=0
910        For(i=0;i<numpnts(ListOfAvailableData);i+=1)
911                if(SelectionOfAvailableData[i]>0.5)
912                        CurrentFolderName = LStartFolder + ListOfAvailableData[i]
913                        //OK, now we know which files to process       
914                        //now stuff the name of the new folder in the folder name in Ploting tool.
915                        SVAR DataFolderName = root:Packages:GeneralplottingTool:DataFolderName
916                        DataFolderName = CurrentFolderName
917                        //now except for case when we use Indra 2 data we need to reload the other wave names...
918                        STRUCT WMPopupAction PU_Struct
919                        PU_Struct.ctrlName = "SelectDataFolder"
920                        PU_Struct.popNum=-1
921                        PU_Struct.eventcode=2
922                        PU_Struct.popStr=DataFolderName
923                        PU_Struct.win = "IR1P_ControlPanel"
924                        IR2C_PanelPopupControl(PU_Struct)
925                        //PopupMenu SelectDataFolder win=IR1P_ControlPanel, popmatch=CurrentFolderName
926                        PopupMenu SelectDataFolder win=IR1P_ControlPanel, value="---;"+IR2P_GenStringOfFolders(winNm="IR1P_ControlPanel")
927                        PopupMenu SelectDataFolder win=IR1P_ControlPanel, popmatch=StringFromList(ItemsInList(DataFolderName,":")-1,DataFolderName,":")
928                        //not enough if using results, which user can select what to plot very specifically...
929                        if(STUseResults)
930                                if(stringmatch(ResultsGenerationToUse,"Latest"))
931                                        DFREF TestFldr=$(CurrentFolderName)
932                                        TempStr = GrepList(stringfromList(1,RemoveEnding(DataFolderDir(2, TestFldr),";\r"),":"), SelectedResultsType,0,",")
933                                        //and need to find the one with highest generation number.
934                                        result = stringFromList(0,TempStr,",")
935                                        For(j=1;j<ItemsInList(TempStr,",");j+=1)
936                                                tempStr2=stringFromList(j,TempStr,",")
937                                                if(str2num(StringFromList(ItemsInList(result,"_")-1, result, "_"))<str2num(StringFromList(ItemsInList(tempStr2,"_")-1, tempStr2, "_")))
938                                                        result = tempStr2
939                                                endif
940                                        endfor
941                                        TempYName=result
942                                        tempStr2 = removeending(result, "_"+StringFromList(ItemsInList(result,"_")-1, result, "_"))
943                                        //for some (Modeling II there are two x-wave options, need to figure out which one is present...
944                                        TempXName=StringByKey(tempStr2, ResultsDataTypesLookup  , ":", ";")
945                                        TempXName=RemoveEnding(TempXName , ",")+","
946                                        if(ItemsInList(TempXName,",")>1)
947                                                j=0
948                                                Do
949                                                        tempStr3=stringFromList(j,TempXName,",")
950                                                        if(stringmatch(DataFolderDir(2, TestFldr), "*"+tempStr3+"_"+StringFromList(ItemsInList(result,"_")-1, result, "_")+"*" ))
951                                                                TempXName=tempStr3
952                                                                break
953                                                        endif
954                                                        j+=1
955                                                while(j<ItemsInList(TempXName,","))     
956                                        endif
957                                        TempXName=RemoveEnding(TempXName , ",")
958                                        TempXName=TempXName+"_"+StringFromList(ItemsInList(result,"_")-1, result, "_")
959                                else    //known result we want to use... It should exist (guarranteed by prior code)
960                                        DFREF TestFldr=$(CurrentFolderName)
961                                        TempYName=SelectedResultsType+ResultsGenerationToUse
962                                        TempXName=StringByKey(SelectedResultsType, ResultsDataTypesLookup  , ":", ";")
963                                        TempXName=RemoveEnding(TempXName , ",")+","
964                                        if(ItemsInList(TempXName,",")>1)
965                                                j=0
966                                                Do
967                                                        tempStr3=stringFromList(j,TempXName,",")
968                                                        if(stringmatch(DataFolderDir(2, TestFldr), "*"+tempStr3+ResultsGenerationToUse+"*" ))
969                                                                TempXName=tempStr3+ResultsGenerationToUse
970                                                                break
971                                                        endif
972                                                        j+=1
973                                                while(j<ItemsInList(TempXName,","))     
974                                        endif
975                                        TempXName=RemoveEnding(TempXName , ",")
976                                        TempXName=TempXName+ResultsGenerationToUse
977                                        //TempXName=StringByKey(SelectedResultsType, ResultsDataTypesLookup  , ":", ";")+ResultsGenerationToUse
978                                endif
979                                if(strlen(LastDiameterOrRadius)==0)
980                                        LastDiameterOrRadius=TempXName[0,10]
981                                else
982                                        if(!StringMatch(LastDiameterOrRadius, TempXName[0,10]))
983                                                raiseWarning=1
984                                        endif
985                                endif
986                                SVAR XnameStr=root:Packages:GeneralplottingTool:QWavename
987                                XnameStr = TempXName
988                                PopupMenu QvecDataName win=IR1P_ControlPanel, popmatch=TempXName
989                                PU_Struct.ctrlName = "QvecDataName"
990                                PU_Struct.popNum=-1
991                                PU_Struct.eventcode=2
992                                PU_Struct.popStr=TempXName
993                                PU_Struct.win = "IR1P_ControlPanel"                     
994                                IR2C_PanelPopupControl(PU_Struct)
995
996                                SVAR YnameStr=root:Packages:GeneralplottingTool:IntensityWaveName
997                                YnameStr = TempYName
998                                PopupMenu IntensityDataName win=IR1P_ControlPanel, popmatch=TempYName
999                                //and update errors if needed...
1000                                PU_Struct.ctrlName = "IntensityDataName"
1001                                PU_Struct.popNum=-1
1002                                PU_Struct.eventcode=2
1003                                PU_Struct.popStr=TempYName
1004                                PU_Struct.win = "IR1P_ControlPanel"                     
1005                                IR2C_PanelPopupControl(PU_Struct)
1006                        endif
1007                        IR1P_InputPanelButtonProc("AddDataToGraph")                     //add data
1008                        AddedFiles+=1
1009                        if(mod(AddedFiles,25)==0)
1010                                print "Added  "+num2str(AddedFiles)+" data sets to Plotting tool"
1011                        endif
1012                endif   
1013        endfor
1014        if(raiseWarning)
1015                //data contained both Radii and Diameters, this may not make much sense....
1016                DoAlert /T="User Warning" 0, "Added data included both Diameters and Radii as x-axis, this may not make much sense to plot!"
1017        endif
1018        if(AddedFiles==0)
1019                //user did not select any data, probaby screwed up...
1020                DoAlert /T="User Warning" 0, "No data were selected in the data selector listbox. Please, select one or more data then run again"
1021        endif
1022        IR1P_InputPanelButtonProc("CreateGraph")                                //create graph
1023        setDataFolder OldDF
1024end
1025
1026//**************************************************************************************
1027//**************************************************************************************
1028//**************************************************************************************
1029
1030Function IR2S_FItWithModelingII()
1031
1032        DoWindow LSQF2_MainPanel
1033        if(!V_Flag)
1034                Abort  "The Modeling II panel and graph must be opened"
1035        else
1036                DoWIndow/F LSQF2_MainPanel
1037        endif
1038       
1039        DoWindow LSQF_MainGraph
1040        if(!V_Flag)
1041                Abort  "The Modeling II panel and graph must be opened"
1042        else
1043                DoWIndow/F LSQF_MainGraph
1044        endif
1045
1046        DFref oldDf= GetDataFolderDFR()
1047
1048        setDataFolder root:Packages:Irena:ScriptingTool
1049        NVAR STUseIndra2Data = root:Packages:Irena:ScriptingTool:UseIndra2Data
1050        NVAR STUseQRSdata =root:Packages:Irena:ScriptingTool:UseQRSdata
1051       
1052        NVAR PTUseIndra2Data=root:Packages:IR2L_NLSQF:UseIndra2Data
1053        NVAR PTUseQRSdata=root:Packages:IR2L_NLSQF:UseQRSdata
1054        NVAR PTUseModelData=root:Packages:IR2L_NLSQF:UseModelData
1055        PTUseModelData=0
1056        PTUseQRSdata=STUseQRSdata
1057        PTUseIndra2Data=STUseIndra2Data
1058        STRUCT WMCheckboxAction CB_Struct
1059        CB_Struct.eventcode=2
1060        if(PTUseIndra2Data)
1061                CB_Struct.ctrlName="UseIndra2Data"
1062        elseif(PTUseQRSdata)
1063                CB_Struct.ctrlName="UseQRSData"
1064        else
1065                Abort "error, report it"
1066        endif
1067        CB_Struct.checked=1
1068        CB_Struct.win="LSQF2_MainPanel"
1069        IR2C_InputPanelCheckboxProc(CB_Struct)
1070        Wave/T ListOfAvailableData = root:Packages:Irena:ScriptingTool:ListOfAvailableData
1071        Wave SelectionOfAvailableData =root:Packages:Irena:ScriptingTool:SelectionOfAvailableData
1072        NVAR UseIndra2Data = root:Packages:Irena:ScriptingTool:UseIndra2Data
1073        variable NumOfSelectedFiles = sum(SelectionOfAvailableData)
1074        NVAR SaveResultsInNotebook = root:Packages:Irena:ScriptingTool:SaveResultsInNotebook
1075        NVAR ResetBeforeNextFit = root:Packages:Irena:ScriptingTool:ResetBeforeNextFit
1076        NVAR SaveResultsInFldrs = root:Packages:Irena:ScriptingTool:SaveResultsInFldrs
1077        NVAR SaveResultsInWaves = root:Packages:Irena:ScriptingTool:SaveResultsInWaves
1078        SVAR StartFolderName = root:Packages:Irena:ScriptingTool:StartFolderName
1079        string LStartFolder
1080        if(stringmatch(StartFolderName,"---"))
1081                LStartFolder="root:"
1082        else
1083                LStartFolder=StartFolderName
1084        endif
1085       
1086        variable i
1087        string CurrentFolderName
1088        variable StartQ, EndQ           //need to store these so the tool does not reset them...
1089        NVAR CurMinQ=root:Packages:IR2L_NLSQF:Qmin_set1
1090        NVAR CurMaxQ=root:Packages:IR2L_NLSQF:Qmax_set1
1091        StartQ=CurMinQ
1092        EndQ=CurMaxQ
1093        //setup error settings for users
1094        variable UserErrs, SQRTErrs, PctErrs
1095        NVAR UseUserErrors = root:Packages:IR2L_NLSQF:UseUserErrors_set1
1096        NVAR UseSQRTErrors = root:Packages:IR2L_NLSQF:UseSQRTErrors_set1
1097        NVAR UsePercentErrors = root:Packages:IR2L_NLSQF:UsePercentErrors_set1
1098        UserErrs =UseUserErrors
1099        SQRTErrs=UseSQRTErrors
1100        PctErrs  =UsePercentErrors
1101        //setup error and intensity scaling
1102        variable ErrScale, IntScale
1103        NVAR DataScalingFactor = root:Packages:IR2L_NLSQF:DataScalingFactor_set1
1104        NVAR ErrorScalingFactor = root:Packages:IR2L_NLSQF:ErrorScalingFactor_set1
1105        IntScale = DataScalingFactor
1106        ErrScale = ErrorScalingFactor
1107        SVAR FolderMatchStr=root:Packages:IrenaControlProcs:LSQF2_MainPanel:FolderMatchStr
1108        SVAR WaveMatchStr=root:Packages:IrenaControlProcs:LSQF2_MainPanel:WaveMatchStr
1109        SVAR ScriptToolFMS=root:Packages:Irena:ScriptingTool:FolderNameMatchString
1110        SVAR ScriptToolWMS=root:Packages:Irena:ScriptingTool:WaveNameMatchString
1111        if(STUseQRSdata)
1112                WaveMatchStr=ScriptToolWMS
1113        else
1114                WaveMatchStr=""
1115        endif
1116        FolderMatchStr=ScriptToolFMS
1117       
1118        For(i=0;i<numpnts(ListOfAvailableData);i+=1)
1119                if(SelectionOfAvailableData[i]>0.5)
1120                        CurrentFolderName = LStartFolder + ListOfAvailableData[i]
1121                        //OK, now we know which files to process       
1122                        //now stuff the name of the new folder in the folder name in Unified...
1123                        SVAR DataFolderName = root:Packages:IR2L_NLSQF:FolderName_set1
1124                        DataFolderName = CurrentFolderName
1125                        //now except for case when we use Indra 2 data we need to reload the other wave names...
1126                        STRUCT WMPopupAction PU_Struct
1127                        PU_Struct.ctrlName = "SelectDataFolder"
1128                        PU_Struct.popNum=-1
1129                        PU_Struct.eventcode=2
1130                        PU_Struct.popStr=DataFolderName
1131                        PU_Struct.win = "LSQF2_MainPanel"
1132                        IR2C_PanelPopupControl(PU_Struct)
1133                        //PopupMenu SelectDataFolder win=LSQF2_MainPanel, popmatch=CurrentFolderName
1134                        PopupMenu SelectDataFolder win=LSQF2_MainPanel, value="---;"+IR2P_GenStringOfFolders(winNm="LSQF2_MainPanel")
1135                        PopupMenu SelectDataFolder win=LSQF2_MainPanel, popmatch=StringFromList(ItemsInList(DataFolderName,":")-1,DataFolderName,":")
1136                        //preset the right setting of the tool here, just in case...
1137                        IR2L_Data_TabPanelControl("",0) //sets the tab 0 active.
1138                        IR2L_DataTabCheckboxProc("DisplayDataControls",1)
1139                        NVAR MultipleInputData= root:Packages:IR2L_NLSQF:MultipleInputData
1140                        MultipleInputData=0
1141                        //this should create the new graph...
1142                        IR2L_InputPanelButtonProc("AddDataSetSkipRecover")
1143                        //call user hook function if they need it
1144                        if(exists("AfterDataLoaded_Hook")==6)
1145                                Execute ("AfterDataLoaded_Hook()")
1146                        endif
1147                        //now we need to set back the Qmin and max.
1148                        CurMinQ = StartQ
1149                        CurMaxQ = EndQ
1150                        IR2L_setQMinMax(1)
1151                        //set the user error settings and int scaling back
1152                        UseUserErrors = UserErrs
1153                        UseSQRTErrors = SQRTErrs
1154                        UsePercentErrors = PctErrs 
1155                        DataScalingFactor = IntScale
1156                        ErrorScalingFactor = ErrScale
1157                        //and recalculate as needed...
1158                        IR2L_RecalculateIntAndErrors(1)
1159                        doUpdate
1160
1161                        variable/g root:Packages:IR2L_NLSQF:FitFailed
1162                        //do fitting
1163                        IR2L_InputPanelButtonProc("FitModelSkipDialogs")
1164                        DoUpdate
1165                        NVAR FitFailed=root:Packages:IR2L_NLSQF:FitFailed
1166                        NVAR ExportSeparatePopData=root:Packages:Irena:ScriptingTool:ExportSeparatePopData
1167                       
1168                        if(SaveResultsInNotebook)
1169                                IR2L_InputPanelButtonProc("SaveInNotebook")
1170                        endif
1171                        if(SaveResultsInFldrs && !FitFailed)
1172                                IR2L_InputPanelButtonProc("SaveInDataFolderSkipDialog")
1173                        endif
1174                        if(SaveResultsInWaves && !FitFailed)
1175                                IR2L_InputPanelButtonProc("SaveInWavesSkipDialog")
1176                        endif
1177                        if(ResetBeforeNextFit)
1178                                IR2L_InputPanelButtonProc("ReverseFit")
1179                        endif                   
1180                        KillVariables  FitFailed
1181                endif
1182               
1183       
1184        endfor
1185       
1186       
1187
1188        setDataFolder OldDF
1189
1190
1191end
1192
1193
1194
1195//**************************************************************************************
1196//**************************************************************************************
1197//**************************************************************************************
1198//**************************************************************************************
1199//**************************************************************************************
1200//**************************************************************************************
1201
1202Function IR2S_FItWithSizes(Uncert)
1203        variable uncert
1204       
1205        DoWindow IR1R_SizesInputPanel
1206        if(!V_Flag)
1207                Abort  "The Size distribution tool panel and graph must be opened"
1208        else
1209                DoWIndow/F IR1R_SizesInputPanel
1210        endif
1211       
1212        DoWindow IR1R_SizesInputGraph
1213        if(!V_Flag)
1214                Abort  "The Size distribution tool panel and graph must be opened"
1215        else
1216                DoWIndow/F IR1R_SizesInputGraph
1217        endif
1218
1219        DFref oldDf= GetDataFolderDFR()
1220
1221        setDataFolder root:Packages:Irena:ScriptingTool
1222        NVAR STUseIndra2Data = root:Packages:Irena:ScriptingTool:UseIndra2Data
1223        NVAR STUseQRSdata =root:Packages:Irena:ScriptingTool:UseQRSdata
1224       
1225        NVAR PTUseIndra2Data=root:Packages:Sizes:UseIndra2Data
1226        NVAR PTUseQRSdata=root:Packages:Sizes:UseQRSdata
1227        PTUseQRSdata=STUseQRSdata
1228        PTUseIndra2Data=STUseIndra2Data
1229        STRUCT WMCheckboxAction CB_Struct
1230        CB_Struct.eventcode=2
1231        if(PTUseIndra2Data)
1232                CB_Struct.ctrlName="UseIndra2Data"
1233        elseif(PTUseQRSdata)
1234                CB_Struct.ctrlName="UseQRSData"
1235        else
1236                Abort "error, report it"
1237        endif
1238        CB_Struct.checked=1
1239        CB_Struct.win="IR1R_SizesInputPanel"
1240        IR2C_InputPanelCheckboxProc(CB_Struct)
1241
1242
1243        Wave/T ListOfAvailableData = root:Packages:Irena:ScriptingTool:ListOfAvailableData
1244        Wave SelectionOfAvailableData =root:Packages:Irena:ScriptingTool:SelectionOfAvailableData
1245        NVAR UseIndra2Data = root:Packages:Irena:ScriptingTool:UseIndra2Data
1246        variable NumOfSelectedFiles = sum(SelectionOfAvailableData)
1247        NVAR SaveResultsInNotebook = root:Packages:Irena:ScriptingTool:SaveResultsInNotebook
1248        NVAR ResetBeforeNextFit = root:Packages:Irena:ScriptingTool:ResetBeforeNextFit
1249        NVAR SaveResultsInFldrs = root:Packages:Irena:ScriptingTool:SaveResultsInFldrs
1250        SVAR StartFolderName = root:Packages:Irena:ScriptingTool:StartFolderName
1251        string LStartFolder
1252        if(stringmatch(StartFolderName,"---"))
1253                LStartFolder="root:"
1254        else
1255                LStartFolder=StartFolderName
1256        endif
1257       
1258        variable i
1259        string CurrentFolderName
1260        variable StartQ, EndQ           //need to store these from cursor positions (if set)
1261        DoWIndow IR1R_SizesInputGraph
1262//      if(V_Flag)
1263//              Wave Ywv = csrXWaveRef(A  , "IR1R_SizesInputGraph" )
1264//              StartQ = Ywv[pcsr(A  , "IR1R_SizesInputGraph" )]
1265//              EndQ = Ywv[pcsr(B  , "IR1R_SizesInputGraph" )]
1266//      endif
1267        if(V_Flag)
1268                if(strlen(CsrInfo(A , "IR1R_SizesInputGraph"))>0)
1269                        Wave Ywv = csrXWaveRef(A  , "IR1R_SizesInputGraph" )
1270                        StartQ = Ywv[pcsr(A  , "IR1R_SizesInputGraph" )]
1271                else
1272                        Wave Qwave = root:Packages:Sizes:Q_vecOriginal
1273                        StartQ=Qwave[0]
1274                endif
1275                if(strlen(CsrInfo(B , "IR1R_SizesInputGraph"))>0)
1276                        Wave Ywv = csrXWaveRef(B  , "IR1R_SizesInputGraph" )
1277                        EndQ = Ywv[pcsr(B  , "IR1R_SizesInputGraph" )]
1278                else
1279                        Wave Qwave = root:Packages:Sizes:Q_vecOriginal
1280                        EndQ=Qwave[numpnts(Qwave)-1]
1281                endif
1282                //EndQ = Ywv[pcsr(B  , "IR1_LogLogPlotU" )]
1283        endif
1284        //preserver user error choices settings and reapply after loading of the data.
1285        variable UserErrs, SQRTErrs, PctErrs
1286        NVAR UseUserErrors = root:Packages:Sizes:UseUserErrors
1287        NVAR UseSQRTErrors = root:Packages:Sizes:UseSQRTErrors
1288        NVAR UsePercentErrors = root:Packages:Sizes:UsePercentErrors
1289        UserErrs=UseUserErrors
1290        SQRTErrs=UseSQRTErrors
1291        PctErrs=UsePercentErrors
1292       
1293        SVAR FolderMatchStr=root:Packages:IrenaControlProcs:IR1R_SizesInputPanel:FolderMatchStr
1294        SVAR WaveMatchStr=root:Packages:IrenaControlProcs:IR1R_SizesInputPanel:WaveMatchStr
1295        SVAR ScriptToolFMS=root:Packages:Irena:ScriptingTool:FolderNameMatchString
1296        SVAR ScriptToolWMS=root:Packages:Irena:ScriptingTool:WaveNameMatchString
1297        if(STUseQRSdata)
1298                WaveMatchStr=ScriptToolWMS
1299        else
1300                WaveMatchStr=""
1301        endif
1302        FolderMatchStr=ScriptToolFMS
1303
1304        For(i=0;i<numpnts(ListOfAvailableData);i+=1)
1305                if(SelectionOfAvailableData[i]>0.5)
1306                        CurrentFolderName = LStartFolder + ListOfAvailableData[i]
1307                        //OK, now we know which files to process       
1308                        //now stuff the name of the new folder in the folder name in Unified...
1309                        SVAR DataFolderName = root:Packages:Sizes:DataFolderName
1310                        DataFolderName = CurrentFolderName
1311                        //now except for case when we use Indra 2 data we need to reload the other wave names...
1312                        STRUCT WMPopupAction PU_Struct
1313                        PU_Struct.ctrlName = "SelectDataFolder"
1314                        PU_Struct.popNum=-1
1315                        PU_Struct.eventcode=2
1316                        PU_Struct.popStr=DataFolderName
1317                        PU_Struct.win = "IR1R_SizesInputPanel"
1318                        IR2C_PanelPopupControl(PU_Struct)
1319                               
1320                        //this should create the new graph...
1321                        IR1R_GraphIfAllowed("GraphIfAllowedSkipRecover")
1322                        //PopupMenu SelectDataFolder win=IR1R_SizesInputPanel, popmatch=DataFolderName
1323                        PopupMenu SelectDataFolder win=IR1R_SizesInputPanel, value="---;"+IR2P_GenStringOfFolders(winNm="IR1R_SizesInputPanel")
1324                        PopupMenu SelectDataFolder win=IR1R_SizesInputPanel, popmatch=StringFromList(ItemsInList(DataFolderName,":")-1,DataFolderName,":")
1325                        //now we need to set back the cursors.
1326                        if(StartQ>0)
1327                                Wave Qwave = root:Packages:Sizes:Q_vecOriginal
1328                                if(binarysearch(Qwave,StartQ)>=0)
1329                                        Cursor  /P /W=IR1R_SizesInputGraph A  IntensityOriginal binarysearch(Qwave,StartQ)
1330                                endif   
1331                        endif
1332                        if(EndQ>0)
1333                                Wave Qwave = root:Packages:Sizes:Q_vecOriginal
1334                                if(binarysearch(Qwave,EndQ)>=0)
1335                                        Cursor  /P /W=IR1R_SizesInputGraph B  IntensityOriginal binarysearch(Qwave,EndQ)       
1336                                endif
1337                        endif
1338                        //set back user choices ofr errros
1339                        UseUserErrors = UserErrs
1340                        UseSQRTErrors = SQRTErrs
1341                        UsePercentErrors = PctErrs
1342                        IR1R_UpdateErrorWave()
1343                        DoUpdate                       
1344                        variable/g root:Packages:Sizes:FitFailed
1345                        //do fitting
1346                        if(uncert)
1347                                IR1R_SizesEstimateErrors()     
1348                        else
1349                                IR1R_SizesFitting("DoFittingSkipReset")
1350                        endif
1351                        DoUpdate
1352                        NVAR FitFailed=root:Packages:Sizes:FitFailed
1353                       
1354                        if(SaveResultsInNotebook)
1355                                IR2S_SaveResInNbkSizes(FitFailed)
1356                        endif
1357                        if(SaveResultsInFldrs && !FitFailed)
1358                                IR1R_saveData("SaveDataNoQuestions")
1359                        endif
1360                        KillVariables  FitFailed
1361                endif
1362               
1363       
1364        endfor
1365       
1366       
1367
1368        setDataFolder OldDF
1369
1370
1371end
1372
1373//**************************************************************************************
1374//**************************************************************************************
1375//**************************************************************************************
1376Function IR2S_FitWithGuinierPorod()
1377
1378        DoWindow IR3DP_MainPanel
1379        if(!V_Flag)
1380                Abort  "The Unified fit tool panel and graph must be opened"
1381        else
1382                DoWIndow/F IR3DP_MainPanel
1383        endif
1384       
1385        DoWindow GuinierPorod_LogLogPlot
1386        if(!V_Flag)
1387                Abort  "The Guinier Porod tool panel and graph must be opened"
1388        else
1389                DoWIndow/F GuinierPorod_LogLogPlot
1390        endif
1391
1392
1393        DFref oldDf= GetDataFolderDFR()
1394
1395        setDataFolder root:Packages:Irena:ScriptingTool
1396        NVAR STUseIndra2Data = root:Packages:Irena:ScriptingTool:UseIndra2Data
1397        NVAR STUseQRSdata =root:Packages:Irena:ScriptingTool:UseQRSdata
1398       
1399        NVAR PTUseIndra2Data=root:Packages:Irena:GuinierPorod:UseIndra2Data
1400        NVAR PTUseQRSdata=root:Packages:Irena:GuinierPorod:UseQRSdata
1401        PTUseQRSdata=STUseQRSdata
1402        PTUseIndra2Data=STUseIndra2Data
1403        STRUCT WMCheckboxAction CB_Struct
1404        CB_Struct.eventcode=2
1405        if(PTUseIndra2Data)
1406                CB_Struct.ctrlName="UseIndra2Data"
1407        elseif(PTUseQRSdata)
1408                CB_Struct.ctrlName="UseQRSData"
1409        else
1410                Abort "error, report it"
1411        endif
1412        CB_Struct.checked=1
1413        CB_Struct.win="IR3DP_MainPanel"
1414        IR2C_InputPanelCheckboxProc(CB_Struct)
1415        Wave/T ListOfAvailableData = root:Packages:Irena:ScriptingTool:ListOfAvailableData
1416        Wave SelectionOfAvailableData =root:Packages:Irena:ScriptingTool:SelectionOfAvailableData
1417        NVAR UseIndra2Data = root:Packages:Irena:ScriptingTool:UseIndra2Data
1418        variable NumOfSelectedFiles = sum(SelectionOfAvailableData)
1419        NVAR SaveResultsInNotebook = root:Packages:Irena:ScriptingTool:SaveResultsInNotebook
1420        NVAR ResetBeforeNextFit = root:Packages:Irena:ScriptingTool:ResetBeforeNextFit
1421        NVAR SaveResultsInFldrs = root:Packages:Irena:ScriptingTool:SaveResultsInFldrs
1422        SVAR StartFolderName = root:Packages:Irena:ScriptingTool:StartFolderName
1423        string LStartFolder
1424        if(stringmatch(StartFolderName,"---"))
1425                LStartFolder="root:"
1426        else
1427                LStartFolder=StartFolderName
1428        endif
1429       
1430        variable i
1431        string CurrentFolderName
1432        variable StartQ, EndQ           //need to store these from cursor positions (if set)
1433        DoWIndow GuinierPorod_LogLogPlot
1434//      if(V_Flag)
1435//              Wave Ywv = csrXWaveRef(A  , "GuinierPorod_LogLogPlot" )
1436//              StartQ = Ywv[pcsr(A  , "GuinierPorod_LogLogPlot" )]
1437//              EndQ = Ywv[pcsr(B  , "GuinierPorod_LogLogPlot" )]
1438//      endif
1439        if(V_Flag)
1440                if(strlen(CsrInfo(A , "GuinierPorod_LogLogPlot"))>0)
1441                        Wave Ywv = csrXWaveRef(A  , "GuinierPorod_LogLogPlot" )
1442                        StartQ = Ywv[pcsr(A  , "GuinierPorod_LogLogPlot" )]
1443                else
1444                        Wave Qwave = root:Packages:Irena:GuinierPorod:OriginalQvector
1445                        StartQ=Qwave[0]
1446                endif
1447                if(strlen(CsrInfo(B , "GuinierPorod_LogLogPlot"))>0)
1448                        Wave Ywv = csrXWaveRef(B  , "GuinierPorod_LogLogPlot" )
1449                        EndQ = Ywv[pcsr(B  , "GuinierPorod_LogLogPlot" )]
1450                else
1451                        Wave Qwave = root:Packages:Irena:GuinierPorod:OriginalQvector
1452                        EndQ=Qwave[numpnts(Qwave)-1]
1453                endif
1454                //EndQ = Ywv[pcsr(B  , "IR1_LogLogPlotU" )]
1455        endif
1456        SVAR FolderMatchStr=root:Packages:IrenaControlProcs:IR3DP_MainPanel:FolderMatchStr
1457        SVAR WaveMatchStr=root:Packages:IrenaControlProcs:IR3DP_MainPanel:WaveMatchStr
1458        SVAR ScriptToolFMS=root:Packages:Irena:ScriptingTool:FolderNameMatchString
1459        SVAR ScriptToolWMS=root:Packages:Irena:ScriptingTool:WaveNameMatchString
1460        if(STUseQRSdata)
1461                WaveMatchStr=ScriptToolWMS
1462        else
1463                WaveMatchStr=""
1464        endif
1465        FolderMatchStr=ScriptToolFMS
1466        For(i=0;i<numpnts(ListOfAvailableData);i+=1)
1467                if(SelectionOfAvailableData[i]>0.5)
1468                        //here process the Unified...
1469                        //CurrentFolderName="root:"
1470                        //if(UseIndra2Data)
1471                        //      CurrentFolderName+="USAXS:"
1472                        //endif
1473                        CurrentFolderName = LStartFolder + ListOfAvailableData[i]
1474                        //OK, now we know which files to process       
1475                        //now stuff the name of the new folder in the folder name in Unified...
1476                        SVAR DataFolderName = root:Packages:Irena:GuinierPorod:DataFolderName
1477                        DataFolderName = CurrentFolderName
1478                        //now except for case when we use Indra 2 data we need to reload the other wave names...
1479                        STRUCT WMPopupAction PU_Struct
1480                        PU_Struct.ctrlName = "SelectDataFolder"
1481                        PU_Struct.popNum=-1
1482                        PU_Struct.eventcode=2
1483                        PU_Struct.popStr=DataFolderName
1484                        PU_Struct.win = "IR3DP_MainPanel"
1485                        IR2C_PanelPopupControl(PU_Struct)
1486                        PopupMenu SelectDataFolder win=IR3DP_MainPanel, value="---;"+IR2P_GenStringOfFolders(winNm="IR3DP_MainPanel")
1487                        PopupMenu SelectDataFolder win=IR3DP_MainPanel, popmatch=StringFromList(ItemsInList(DataFolderName,":")-1,DataFolderName,":")
1488                       
1489                        //this should create the new graph...
1490                        IR3GP_PanelButtonProc("DrawGraphsSkipDialogs")
1491                        //now we need to set back the cursors.
1492                        if(StartQ>0)
1493                                Wave Qwave = root:Packages:Irena:GuinierPorod:OriginalQvector
1494                                if(binarysearch(Qwave,StartQ)>=0)
1495                                        Cursor  /P /W=IR1_LogLogPlotU A  OriginalIntensity binarysearch(Qwave,StartQ)
1496                                endif   
1497                        endif
1498                        if(EndQ>0)
1499                                Wave Qwave = root:Packages:Irena:GuinierPorod:OriginalQvector
1500                                if(binarysearch(Qwave,EndQ)>=0)
1501                                        Cursor  /P /W=IR1_LogLogPlotU B  OriginalIntensity binarysearch(Qwave,EndQ)     
1502                                endif
1503                        endif
1504                       
1505                        variable/g root:Packages:Irena:GuinierPorod:FitFailed
1506                        //do fitting
1507                        IR3GP_PanelButtonProc("DoFittingSkipReset")
1508                        DoUpdate
1509                        NVAR FitFailed=root:Packages:Irena:GuinierPorod:FitFailed
1510                       
1511                        if(SaveResultsInNotebook)
1512                                IR2S_SaveResInNbkGunPor(FitFailed)
1513                        endif
1514                        if(SaveResultsInFldrs && !FitFailed)
1515                                IR3GP_PanelButtonProc("CopyTFolderNoQuestions")
1516                        endif
1517                        if(ResetBeforeNextFit && !FitFailed)
1518                                IR3GP_PanelButtonProc("RevertFitting")   
1519                        endif
1520                        KillVariables  FitFailed
1521                endif
1522               
1523       
1524        endfor
1525       
1526       
1527
1528        setDataFolder OldDF
1529end
1530//**************************************************************************************
1531//**************************************************************************************
1532//**************************************************************************************
1533
1534
1535
1536Function IR2S_FItWithUnifiedFit()
1537
1538        DoWindow IR1A_ControlPanel
1539        if(!V_Flag)
1540                Abort  "The Unified fit tool panel and graph must be opened"
1541        else
1542                DoWIndow/F IR1A_ControlPanel
1543        endif
1544       
1545        DoWindow IR1_LogLogPlotU
1546        if(!V_Flag)
1547                Abort  "The Unified fit tool panel and graph must be opened"
1548        else
1549                DoWIndow/F IR1_LogLogPlotU
1550        endif
1551
1552
1553        DFref oldDf= GetDataFolderDFR()
1554
1555        setDataFolder root:Packages:Irena:ScriptingTool
1556        NVAR STUseIndra2Data = root:Packages:Irena:ScriptingTool:UseIndra2Data
1557        NVAR STUseQRSdata =root:Packages:Irena:ScriptingTool:UseQRSdata
1558       
1559        NVAR PTUseIndra2Data=root:Packages:Irena_UnifFit:UseIndra2Data
1560        NVAR PTUseQRSdata=root:Packages:Irena_UnifFit:UseQRSdata
1561        PTUseQRSdata=STUseQRSdata
1562        PTUseIndra2Data=STUseIndra2Data
1563        STRUCT WMCheckboxAction CB_Struct
1564        CB_Struct.eventcode=2
1565        if(PTUseIndra2Data)
1566                CB_Struct.ctrlName="UseIndra2Data"
1567        elseif(PTUseQRSdata)
1568                CB_Struct.ctrlName="UseQRSData"
1569        else
1570                Abort "error, report it"
1571        endif
1572        CB_Struct.checked=1
1573        CB_Struct.win="IR1A_ControlPanel"
1574        IR2C_InputPanelCheckboxProc(CB_Struct)
1575
1576
1577        Wave/T ListOfAvailableData = root:Packages:Irena:ScriptingTool:ListOfAvailableData
1578        Wave SelectionOfAvailableData =root:Packages:Irena:ScriptingTool:SelectionOfAvailableData
1579        NVAR UseIndra2Data = root:Packages:Irena:ScriptingTool:UseIndra2Data
1580        variable NumOfSelectedFiles = sum(SelectionOfAvailableData)
1581        NVAR SaveResultsInNotebook = root:Packages:Irena:ScriptingTool:SaveResultsInNotebook
1582        NVAR ResetBeforeNextFit = root:Packages:Irena:ScriptingTool:ResetBeforeNextFit
1583        NVAR SaveResultsInFldrs = root:Packages:Irena:ScriptingTool:SaveResultsInFldrs
1584        SVAR StartFolderName = root:Packages:Irena:ScriptingTool:StartFolderName
1585        string LStartFolder
1586        if(stringmatch(StartFolderName,"---"))
1587                LStartFolder="root:"
1588        else
1589                LStartFolder=StartFolderName
1590        endif
1591        NVAR SkipFitControlDialog = root:Packages:Irena_UnifFit:SkipFitControlDialog
1592        variable oldSkipFitControlDialog = SkipFitControlDialog
1593        SkipFitControlDialog = 1
1594        variable i
1595        string CurrentFolderName
1596        variable StartQ, EndQ           //need to store these from cursor positions (if set)
1597        DoWIndow IR1_LogLogPlotU
1598        if(V_Flag)
1599                if(strlen(CsrInfo(A , "IR1_LogLogPlotU"))>0)
1600                        Wave Ywv = csrXWaveRef(A  , "IR1_LogLogPlotU" )
1601                        StartQ = Ywv[pcsr(A  , "IR1_LogLogPlotU" )]
1602                else
1603                        Wave Qwave = root:Packages:Irena_UnifFit:OriginalQvector
1604                        StartQ=Qwave[0]
1605                endif
1606                if(strlen(CsrInfo(B , "IR1_LogLogPlotU"))>0)
1607                        Wave Ywv = csrXWaveRef(B  , "IR1_LogLogPlotU" )
1608                        EndQ = Ywv[pcsr(B  , "IR1_LogLogPlotU" )]
1609                else
1610                        Wave Qwave = root:Packages:Irena_UnifFit:OriginalQvector
1611                        EndQ=Qwave[numpnts(Qwave)-1]
1612                endif
1613                //EndQ = Ywv[pcsr(B  , "IR1_LogLogPlotU" )]
1614        endif
1615        SVAR FolderMatchStr=root:Packages:IrenaControlProcs:IR1A_ControlPanel:FolderMatchStr
1616        SVAR WaveMatchStr=root:Packages:IrenaControlProcs:IR1A_ControlPanel:WaveMatchStr
1617        SVAR ScriptToolFMS=root:Packages:Irena:ScriptingTool:FolderNameMatchString
1618        SVAR ScriptToolWMS=root:Packages:Irena:ScriptingTool:WaveNameMatchString
1619        if(STUseQRSdata)
1620                WaveMatchStr=ScriptToolWMS
1621        else
1622                WaveMatchStr=""
1623        endif
1624        FolderMatchStr=ScriptToolFMS
1625        For(i=0;i<numpnts(ListOfAvailableData);i+=1)
1626                if(SelectionOfAvailableData[i]>0.5)
1627                        //here process the Unified...
1628                        //CurrentFolderName="root:"
1629                        //if(UseIndra2Data)
1630                        //      CurrentFolderName+="USAXS:"
1631                        //endif
1632                        CurrentFolderName = LStartFolder + ListOfAvailableData[i]
1633                        //OK, now we know which files to process       
1634                        //now stuff the name of the new folder in the folder name in Unified...
1635                        SVAR DataFolderName = root:Packages:Irena_UnifFit:DataFolderName
1636                        DataFolderName = CurrentFolderName
1637                        //now except for case when we use Indra 2 data we need to reload the other wave names...
1638                        STRUCT WMPopupAction PU_Struct
1639                        PU_Struct.ctrlName = "SelectDataFolder"
1640                        PU_Struct.popNum=-1
1641                        PU_Struct.eventcode=2
1642                        PU_Struct.popStr=DataFolderName
1643                        PU_Struct.win = "IR1A_ControlPanel"
1644                        IR2C_PanelPopupControl(PU_Struct)
1645                        //PopupMenu SelectDataFolder win=IR1A_ControlPanel, popmatch=DataFolderName
1646                        PopupMenu SelectDataFolder win=IR1A_ControlPanel, value="---;"+IR2P_GenStringOfFolders(winNm="IR1A_ControlPanel")
1647                        PopupMenu SelectDataFolder win=IR1A_ControlPanel, popmatch=StringFromList(ItemsInList(DataFolderName,":")-1,DataFolderName,":")
1648                       
1649                        //this should create the new graph...
1650                        IR1A_InputPanelButtonProc("DrawGraphsSkipDialogs")
1651                        //now we need to set back the cursors.
1652                        if(StartQ>0)
1653                                Wave Qwave = root:Packages:Irena_UnifFit:OriginalQvector
1654                                if(binarysearch(Qwave,StartQ)>=0)
1655                                        Cursor  /P /W=IR1_LogLogPlotU A  OriginalIntensity binarysearch(Qwave,StartQ)
1656                                endif   
1657                        endif
1658                        if(EndQ>0)
1659                                Wave Qwave = root:Packages:Irena_UnifFit:OriginalQvector
1660                                if(binarysearch(Qwave,EndQ)>=0)
1661                                        Cursor  /P /W=IR1_LogLogPlotU B  OriginalIntensity binarysearch(Qwave,EndQ)     
1662                                endif
1663                        endif
1664                       
1665                        variable/g root:Packages:Irena_UnifFit:FitFailed
1666                        //do fitting
1667                        IR1A_InputPanelButtonProc("DoFittingSkipReset")
1668                        DoUpdate
1669                        NVAR FitFailed=root:Packages:Irena_UnifFit:FitFailed
1670                        NVAR ExportSeparatePopData=root:Packages:Irena:ScriptingTool:ExportSeparatePopData
1671                       
1672                        if(SaveResultsInNotebook)
1673                                IR2S_SaveResInNbkUnif(FitFailed)
1674                        endif
1675                        if(SaveResultsInFldrs && !FitFailed)
1676                                IR1A_InputPanelButtonProc("CopyTFolderNoQuestions")
1677                        endif
1678                        if(ResetBeforeNextFit && !FitFailed)
1679                                IR1A_InputPanelButtonProc("RevertFitting")   
1680                        endif
1681                        KillVariables  FitFailed
1682                endif
1683               
1684       
1685        endfor
1686        SkipFitControlDialog = oldSkipFitControlDialog
1687       
1688
1689        setDataFolder OldDF
1690end
1691
1692//**************************************************************************************
1693//**************************************************************************************
1694//**************************************************************************************
1695//**************************************************************************************
1696
1697
1698Function IR2S_SaveResInNbkGunPor(FitFailed)
1699        variable FitFailed
1700       
1701                DoWIndow ScriptingToolNbk
1702
1703                if(!V_Flag)
1704                        NewNotebook /F=1 /K=1 /N=ScriptingToolNbk /W=(400,20,1000,700 ) as "Results of scripting tool runs"             
1705                endif
1706                SVAR DataFolderName = root:Packages:Irena:GuinierPorod:DataFolderName
1707
1708
1709                Notebook ScriptingToolNbk   selection={endOfFile, endOfFile}
1710                Notebook ScriptingToolNbk text="\r"
1711                Notebook ScriptingToolNbk text="\r"
1712                Notebook ScriptingToolNbk text="\r"
1713                Notebook ScriptingToolNbk text="***********************************************\r"
1714                Notebook ScriptingToolNbk text="***********************************************\r"
1715                Notebook ScriptingToolNbk text=date()+"   "+time()+"\r"
1716                Notebook ScriptingToolNbk text="Guinier-Porod results from folder :   "+ DataFolderName+"\r"
1717                Notebook ScriptingToolNbk text="\r"
1718                if(FitFailed)
1719                        Notebook ScriptingToolNbk text="Fit failed\r"
1720                else
1721                        Notebook ScriptingToolNbk  scaling={50,50}, frame=1, picture={GuinierPorod_LogLogPlot,2,1}     
1722                        Notebook ScriptingToolNbk text="\r"
1723                        IR2S_RecordResultsToNbkGP()
1724                endif
1725end     
1726
1727//**************************************************************************************
1728//**************************************************************************************
1729//**************************************************************************************
1730
1731
1732
1733Function IR2S_RecordResultsToNbkGP()   
1734
1735        DFref oldDf= GetDataFolderDFR()
1736
1737        setdataFolder root:Packages:Irena_UnifFit
1738
1739        NVAR NumberOfLevels=root:Packages:Irena:GuinierPorod:NumberOfLevels
1740
1741        NVAR SASBackground=root:Packages:Irena:GuinierPorod:SASBackground
1742        NVAR FitSASBackground=root:Packages:Irena:GuinierPorod:FitSASBackground
1743        NVAR SubtractBackground=root:Packages:Irena:GuinierPorod:SubtractBackground
1744        NVAR UseSMRData=root:Packages:Irena:GuinierPorod:UseSMRData
1745        NVAR SlitLengthUnif=root:Packages:Irena:GuinierPorod:SlitLengthUnif
1746
1747        SVAR DataAreFrom=root:Packages:Irena:GuinierPorod:DataFolderName
1748        SVAR IntensityWaveName=root:Packages:Irena:GuinierPorod:IntensityWaveName
1749        SVAR QWavename=root:Packages:Irena:GuinierPorod:QWavename
1750        SVAR ErrorWaveName=root:Packages:Irena:GuinierPorod:ErrorWaveName
1751
1752        Notebook ScriptingToolNbk   selection={endOfFile, endOfFile}
1753        Notebook ScriptingToolNbk text="\r"
1754        Notebook ScriptingToolNbk text="Summary of Guinier Porod fit results :"+"\r"
1755        if(UseSMRData)
1756                Notebook ScriptingToolNbk text="Slit smeared data were. Slit length [A^-1] = "+num2str(SlitLengthUnif)+"\r"
1757        endif
1758        Notebook ScriptingToolNbk text="Name of data waves Int/Q/Error \t"+IntensityWaveName+"\t"+QWavename+"\t"+ErrorWaveName+"\r"
1759        Notebook ScriptingToolNbk text="Number of levels: "+num2str(NumberOfLevels)+"\r"
1760        Notebook ScriptingToolNbk text="SAS background = "+num2str(SASBackground)+", was fitted? = "+num2str(FitSASBackground)+"       (yes=1/no=0)"+"\r"
1761        Notebook ScriptingToolNbk text="\r"
1762        variable i
1763        STRUCT GuinierPorodLevel Par
1764        For (i=1;i<=NumberOfLevels;i+=1)
1765                IR3GP_LoadStructureFromWave(Par, i)
1766                Notebook ScriptingToolNbk text="***********  Level  "+num2str(i)+"\r"
1767                Notebook ScriptingToolNbk text="P     \t \t"+ num2str(Par.P)+"\t\t+/- "+num2str(Par.PError)+"\t,  \tfitted? = "+num2str(Par.PFit)+"\r"
1768                if(Par.Rg1>=1e6)
1769                        Notebook ScriptingToolNbk text="\t Guinier 1 not assumed, using just power law slope"+"\r"
1770                else
1771                        Notebook ScriptingToolNbk text="Rg1     \t\t"+ num2str(Par.Rg1)+"\t\t+/- "+num2str(Par.Rg1Error)+"\t,  \tfitted? = "+num2str(Par.Rg1Fit)+"\r"
1772                        Notebook ScriptingToolNbk text="G      \t\t"+ num2str(Par.G)+"\t\t+/- "+num2str(Par.GError)+"\t,  \tfitted? = "+num2str(Par.GFit)+"\r"
1773                        if(Par.S1>0)
1774                                Notebook ScriptingToolNbk text="S1     \t \t"+ num2str(Par.S1)+"\t\t+/- "+num2str(Par.S1Error)+"\t,  \tfitted? = "+num2str(Par.S1Fit)+"\r"
1775                                if(Par.Rg2>=1e10)
1776                                        Notebook ScriptingToolNbk text="\t Guinier 2 not assumed, using just power law slope 2"+"\r"
1777                                else
1778                                        Notebook ScriptingToolNbk text="Rg2     \t \t"+ num2str(Par.Rg2)+"\t\t+/- "+num2str(Par.Rg2Error)+"\t,  \tfitted? = "+num2str(Par.Rg2Fit)+"\r"
1779                                endif
1780                                if(Par.S2>0)
1781                                        Notebook ScriptingToolNbk text="S2     \t \t"+ num2str(Par.S2)+"\t\t+/- "+num2str(Par.S2Error)+"\t,  \tfitted? = "+num2str(Par.S2Fit)+"\r"
1782                                endif
1783                        endif
1784                endif
1785                if(Par.RgCutOff>0)
1786                        Notebook ScriptingToolNbk text="RgCO     \t \t"+ num2str(Par.RgCutOff)+"\r"
1787                endif
1788                if(Par.UseCorrelations)
1789                        Notebook ScriptingToolNbk text="\tAssumed Correlations (Structure factor)"+"\r"
1790                        Notebook ScriptingToolNbk text="ETA     \t \t"+ num2str(Par.ETA)+"\t\t+/- "+num2str(Par.ETAError)+"\t,  \tfitted? = "+num2str(Par.ETAFit)+"\r"
1791                        Notebook ScriptingToolNbk text="Pack     \t \t"+ num2str(Par.Pack)+"\t\t+/- "+num2str(Par.PackError)+"\t,  \tfitted? = "+num2str(Par.PackFit)+"\r"
1792                endif
1793        endfor
1794       
1795                NVAR AchievedChisq=root:Packages:Irena:GuinierPorod:AchievedChisq
1796                Notebook ScriptingToolNbk text="Chi-Squared \t"+ num2str(AchievedChisq)+"\r"
1797
1798                DoWindow /F GuinierPorod_LogLogPlot
1799                if (strlen(csrWave(A))!=0 && strlen(csrWave(B))!=0)             //cursors in the graph
1800                        Notebook ScriptingToolNbk text="Points selected for fitting \t"+ num2str(pcsr(A)) + "   to \t"+num2str(pcsr(B))+"\r"
1801                else
1802                        Notebook ScriptingToolNbk text="Whole range of data selected for fitting"+"\r"
1803                endif
1804                               
1805        setdataFolder oldDf
1806end
1807//**************************************************************************************
1808//**************************************************************************************
1809//**************************************************************************************
1810//**************************************************************************************
1811//**************************************************************************************
1812//**************************************************************************************
1813
1814
1815
1816Function IR2S_SaveResInNbkUnif(FitFailed)
1817        variable FitFailed
1818       
1819                DoWIndow ScriptingToolNbk
1820
1821                if(!V_Flag)
1822                        NewNotebook /F=1 /K=1 /N=ScriptingToolNbk /W=(400,20,1000,700 ) as "Results of scripting tool runs"             
1823                endif
1824                SVAR DataFolderName = root:Packages:Irena_UnifFit:DataFolderName
1825
1826
1827                Notebook ScriptingToolNbk   selection={endOfFile, endOfFile}
1828                Notebook ScriptingToolNbk text="\r"
1829                Notebook ScriptingToolNbk text="\r"
1830                Notebook ScriptingToolNbk text="\r"
1831                Notebook ScriptingToolNbk text="***********************************************\r"
1832                Notebook ScriptingToolNbk text="***********************************************\r"
1833                Notebook ScriptingToolNbk text=date()+"   "+time()+"\r"
1834                Notebook ScriptingToolNbk text="Unified results from folder :   "+ DataFolderName+"\r"
1835                Notebook ScriptingToolNbk text="\r"
1836                if(FitFailed)
1837                        Notebook ScriptingToolNbk text="Fit failed\r"
1838                else
1839                        Notebook ScriptingToolNbk  scaling={50,50}, frame=1, picture={IR1_LogLogPlotU,2,1}     
1840                        Notebook ScriptingToolNbk text="\r"
1841                        IR2S_RecordResultsToNbkUnif()
1842                endif
1843end     
1844//**************************************************************************************
1845//**************************************************************************************
1846//**************************************************************************************
1847//**************************************************************************************
1848//**************************************************************************************
1849//**************************************************************************************
1850
1851
1852
1853Function IR2S_SaveResInNbkSizes(FitFailed)
1854        variable FitFailed
1855       
1856                DoWIndow ScriptingToolNbk
1857
1858                if(!V_Flag)
1859                        NewNotebook /F=1 /K=1 /N=ScriptingToolNbk /W=(400,20,1000,700 ) as "Results of scripting tool runs"             
1860                endif
1861                SVAR DataFolderName = root:Packages:Sizes:DataFolderName
1862
1863
1864                Notebook ScriptingToolNbk   selection={endOfFile, endOfFile}
1865                Notebook ScriptingToolNbk text="\r"
1866                Notebook ScriptingToolNbk text="\r"
1867                Notebook ScriptingToolNbk text="\r"
1868                Notebook ScriptingToolNbk text="***********************************************\r"
1869                Notebook ScriptingToolNbk text="***********************************************\r"
1870                Notebook ScriptingToolNbk text=date()+"   "+time()+"\r"
1871                Notebook ScriptingToolNbk text="Size Distribution results from folder :   "+ DataFolderName+"\r"
1872                Notebook ScriptingToolNbk text="\r"
1873                if(FitFailed)
1874                        Notebook ScriptingToolNbk text="Fit failed\r"
1875                else
1876                        Notebook ScriptingToolNbk  scaling={40,40}, frame=1, picture={IR1R_SizesInputGraph,2,1}
1877                        Notebook ScriptingToolNbk text="\r"
1878                        IR2S_RecordResultsToNbkSizes()
1879                endif
1880end     
1881
1882
1883//**************************************************************************************
1884//**************************************************************************************
1885//**************************************************************************************
1886//**************************************************************************************
1887//**************************************************************************************
1888//**************************************************************************************
1889
1890Function IR2S_RecordResultsToNbkSizes()
1891
1892        DFref oldDf= GetDataFolderDFR()
1893
1894        setdataFolder root:Packages:Sizes
1895
1896        SVAR DataFolderName=root:Packages:Sizes:DataFolderName
1897        SVAR OriginalIntensityWvName=root:Packages:Sizes:IntensityWaveName
1898        SVAR OriginalQvectorWvName=root:Packages:Sizes:QWaveName
1899        SVAR OriginalErrorWvName=root:Packages:Sizes:ErrorWaveName
1900        SVAR SizesParameters=root:Packages:Sizes:SizesParameters
1901        SVAR LogDist=root:Packages:Sizes:LogDist
1902        SVAR ShapeType=root:Packages:Sizes:ShapeType
1903        SVAR SlitSmearedData=root:Packages:Sizes:SlitSmearedData
1904        SVAR MethodRun=root:Packages:Sizes:MethodRun
1905       
1906       
1907        Notebook ScriptingToolNbk text="\r"
1908
1909        Notebook ScriptingToolNbk text="   "
1910        Notebook ScriptingToolNbk text="***********************************************"
1911        Notebook ScriptingToolNbk text="***********************************************"
1912        Notebook ScriptingToolNbk text="Sizes fitting record \r"
1913        Notebook ScriptingToolNbk text="Input data names \t"
1914        Notebook ScriptingToolNbk text="\t\tFolder \t\t"+ DataFolderName+"\r"
1915        Notebook ScriptingToolNbk text="\t\tIntensity/Q/errror wave names \t"+ OriginalIntensityWvName+"\t"+OriginalQvectorWvName+"\t"+OriginalErrorWvName+"\r"
1916        variable i
1917        For(i=0;i<ItemsInList(SizesParameters , ";");i+=1)
1918                Notebook ScriptingToolNbk text="\t\t"+StringFromList(i, SizesParameters, ";")+"\r"
1919        endfor
1920        Notebook ScriptingToolNbk text="\r"
1921       
1922        setdataFolder oldDf
1923
1924end
1925
1926
1927//**************************************************************************************
1928//**************************************************************************************
1929//**************************************************************************************
1930//**************************************************************************************
1931//**************************************************************************************
1932//**************************************************************************************
1933
1934
1935
1936Function IR2S_RecordResultsToNbkUnif() 
1937
1938        DFref oldDf= GetDataFolderDFR()
1939
1940        setdataFolder root:Packages:Irena_UnifFit
1941
1942        NVAR NumberOfLevels=root:Packages:Irena_UnifFit:NumberOfLevels
1943
1944        NVAR SASBackground=root:Packages:Irena_UnifFit:SASBackground
1945        NVAR FitSASBackground=root:Packages:Irena_UnifFit:FitSASBackground
1946        NVAR SubtractBackground=root:Packages:Irena_UnifFit:SubtractBackground
1947        NVAR UseSMRData=root:Packages:Irena_UnifFit:UseSMRData
1948        NVAR SlitLengthUnif=root:Packages:Irena_UnifFit:SlitLengthUnif
1949
1950        SVAR DataAreFrom=root:Packages:Irena_UnifFit:DataFolderName
1951        SVAR IntensityWaveName=root:Packages:Irena_UnifFit:IntensityWaveName
1952        SVAR QWavename=root:Packages:Irena_UnifFit:QWavename
1953        SVAR ErrorWaveName=root:Packages:Irena_UnifFit:ErrorWaveName
1954
1955        Notebook ScriptingToolNbk   selection={endOfFile, endOfFile}
1956        Notebook ScriptingToolNbk text="\r"
1957        Notebook ScriptingToolNbk text="Summary of Unified fit results :"+"\r"
1958        if(UseSMRData)
1959                Notebook ScriptingToolNbk text="Slit smeared data were. Slit length [A^-1] = "+num2str(SlitLengthUnif)+"\r"
1960        endif
1961        Notebook ScriptingToolNbk text="Name of data waves Int/Q/Error \t"+IntensityWaveName+"\t"+QWavename+"\t"+ErrorWaveName+"\r"
1962        Notebook ScriptingToolNbk text="Number of levels: "+num2str(NumberOfLevels)+"\r"
1963        Notebook ScriptingToolNbk text="SAS background = "+num2str(SASBackground)+", was fitted? = "+num2str(FitSASBackground)+"       (yes=1/no=0)"+"\r"
1964        Notebook ScriptingToolNbk text="\r"
1965        variable i
1966        For (i=1;i<=NumberOfLevels;i+=1)
1967                Notebook ScriptingToolNbk text="***********  Level  "+num2str(i)+"\r"
1968                NVAR tempVal =$("Level"+num2str(i)+"Rg")
1969                NVAR tempValError =$("Level"+num2str(i)+"RgError")
1970                NVAR fitTempVal=$("Level"+num2str(i)+"FitRg")
1971                        Notebook ScriptingToolNbk text="Rg      \t\t"+ num2str(tempVal)+"\t\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal)+"\r"
1972                NVAR tempVal =$("Level"+num2str(i)+"G")
1973                NVAR tempValError =$("Level"+num2str(i)+"GError")
1974                NVAR fitTempVal=$("Level"+num2str(i)+"FitG")
1975                        Notebook ScriptingToolNbk text="G      \t\t"+ num2str(tempVal)+"\t\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal)+"\r"
1976                NVAR tempVal =$("Level"+num2str(i)+"P")
1977                NVAR tempValError =$("Level"+num2str(i)+"PError")
1978                NVAR fitTempVal=$("Level"+num2str(i)+"FitP")
1979                        Notebook ScriptingToolNbk text="P     \t \t"+ num2str(tempVal)+"\t\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal)+"\r"
1980                NVAR tempValMassFractal =$("Level"+num2str(i)+"MassFractal")
1981                        if (tempValMassFractal)
1982                                Notebook ScriptingToolNbk text="\tAssumed Mass Fractal"
1983                                Notebook ScriptingToolNbk text="Parameter B calculated as B=(G*P/Rg^P)*Gamma(P/2)"+"\r"
1984                        else
1985                                NVAR tempVal =$("Level"+num2str(i)+"B")
1986                                NVAR tempValError =$("Level"+num2str(i)+"BError")
1987                                NVAR fitTempVal=$("Level"+num2str(i)+"FitB")
1988                                Notebook ScriptingToolNbk text="B     \t \t"+ num2str(tempVal)+"\t\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal)+"\r"
1989                        endif
1990                NVAR tempVal =$("Level"+num2str(i)+"RGCO")
1991                NVAR tempValError =$("Level"+num2str(i)+"RgCOError")
1992                NVAR LinktempVal=$("Level"+num2str(i)+"LinkRgCO")
1993                NVAR fitTempVal=$("Level"+num2str(i)+"FitRGCO")
1994                                if (fitTempVal)
1995                                        Notebook ScriptingToolNbk text="RgCO linked to lower level Rg =\t"+ num2str(tempVal)+"\r"
1996                                else
1997                                        Notebook ScriptingToolNbk text="RgCO      \t"+ num2str(tempVal)+"\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal)+"\r"
1998                                endif
1999                NVAR tempVal =$("Level"+num2str(i)+"K")
2000                        Notebook ScriptingToolNbk text="K      \t"+ num2str(tempVal)+"\r"
2001                NVAR tempValCorrelations =$("Level"+num2str(i)+"Corelations")
2002                        if (tempValCorrelations)
2003                                Notebook ScriptingToolNbk text="Assumed Corelations so following parameters apply"+"\r"
2004                                NVAR tempVal =$("Level"+num2str(i)+"ETA")
2005                                NVAR tempValError =$("Level"+num2str(i)+"ETAError")
2006                                NVAR fitTempVal=$("Level"+num2str(i)+"FitETA")
2007                                        Notebook ScriptingToolNbk text="ETA      \t"+ num2str(tempVal)+"\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal)+"\r"
2008                                NVAR tempVal =$("Level"+num2str(i)+"PACK")
2009                                NVAR tempValError =$("Level"+num2str(i)+"PACKError")
2010                                NVAR fitTempVal=$("Level"+num2str(i)+"FitPACK")
2011                                Notebook ScriptingToolNbk text="PACK      \t"+ num2str(tempVal)+"\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal)+"\r"
2012                else
2013                                Notebook ScriptingToolNbk text="Corelations       \tNot assumed\r"
2014                        endif
2015
2016                NVAR tempVal =$("Level"+num2str(i)+"Invariant")
2017                                Notebook ScriptingToolNbk text="Invariant  =\t"+num2str(tempVal)+"   cm^(-1) A^(-3)\r"
2018                NVAR tempVal =$("Level"+num2str(i)+"SurfaceToVolRat")
2019                        if (Numtype(tempVal)==0)
2020                                Notebook ScriptingToolNbk text="Surface to volume ratio  =\t"+num2str(tempVal)+"   m^(2) / cm^(3)\r"
2021                        endif
2022                        Notebook ScriptingToolNbk text=" \r "
2023        endfor
2024       
2025                NVAR AchievedChisq
2026                Notebook ScriptingToolNbk text="Chi-Squared \t"+ num2str(AchievedChisq)+"\r"
2027
2028                DoWindow /F IR1_LogLogPlotU
2029                if (strlen(csrWave(A))!=0 && strlen(csrWave(B))!=0)             //cursors in the graph
2030                        Notebook ScriptingToolNbk text="Points selected for fitting \t"+ num2str(pcsr(A)) + "   to \t"+num2str(pcsr(B))+"\r"
2031                else
2032                        Notebook ScriptingToolNbk text="Whole range of data selected for fitting"+"\r"
2033                endif
2034                               
2035        setdataFolder oldDf
2036end
2037
2038//Function IR1A_SaveRecordResults()     
2039//
2040//      DFref oldDf= GetDataFolderDFR()
2041
2042//      setdataFolder root:Packages:Irena_UnifFit
2043//
2044//      NVAR NumberOfLevels=root:Packages:Irena_UnifFit:NumberOfLevels
2045//
2046//      NVAR SASBackground=root:Packages:Irena_UnifFit:SASBackground
2047//      NVAR FitSASBackground=root:Packages:Irena_UnifFit:FitSASBackground
2048//      NVAR SubtractBackground=root:Packages:Irena_UnifFit:SubtractBackground
2049//      NVAR UseSMRData=root:Packages:Irena_UnifFit:UseSMRData
2050//      NVAR SlitLengthUnif=root:Packages:Irena_UnifFit:SlitLengthUnif
2051//      NVAR LastSavedUnifOutput=root:Packages:Irena_UnifFit:LastSavedUnifOutput
2052//      NVAR ExportLocalFits=root:Packages:Irena_UnifFit:ExportLocalFits
2053//
2054//      SVAR DataAreFrom=root:Packages:Irena_UnifFit:DataFolderName
2055//      SVAR IntensityWaveName=root:Packages:Irena_UnifFit:IntensityWaveName
2056//      SVAR QWavename=root:Packages:Irena_UnifFit:QWavename
2057//      SVAR ErrorWaveName=root:Packages:Irena_UnifFit:ErrorWaveName
2058//
2059//      IR1_CreateLoggbook()            //this creates the logbook
2060//      SVAR nbl=root:Packages:SAS_Modeling:NotebookName
2061//
2062//      IR1L_AppendAnyText("     ")
2063//              IR1L_AppendAnyText("***********************************************")
2064//              IR1L_AppendAnyText("***********************************************")
2065//              IR1L_AppendAnyText("Saved Results of the UNIFIED FIT on the data from: \t"+DataAreFrom)
2066//              IR1_InsertDateAndTime(nbl)
2067//              IR1L_AppendAnyText("Name of data waves Int/Q/Error \t"+IntensityWaveName+"\t"+QWavename+"\t"+ErrorWaveName)
2068//              if(UseSMRData)
2069//                      IR1L_AppendAnyText("Slit smeared data were used. Slit length = "+num2str(SlitLengthUnif))
2070//              endif
2071//              IR1L_AppendAnyText("Output wave names :")
2072//              IR1L_AppendAnyText("Int/Q \t"+"UnifiedFitIntensity_"+num2str(LastSavedUnifOutput)+"\tUnifiedFitQvector_"+num2str(LastSavedUnifOutput))
2073//              if(ExportLocalFits)
2074//                      IR1L_AppendAnyText("Loacl fits saved also")
2075//              endif
2076//             
2077//              IR1L_AppendAnyText("Number of fitted levels: "+num2str(NumberOfLevels))
2078//              IR1L_AppendAnyText("Fitting results: ")
2079//      IR1L_AppendAnyText("SAS background = "+num2str(SASBackground)+", was fitted? = "+num2str(FitSASBackground)+"       (yes=1/no=0)")
2080//      variable i
2081//      For (i=1;i<=NumberOfLevels;i+=1)
2082//              IR1L_AppendAnyText("***********  Level  "+num2str(i))
2083//              NVAR tempVal =$("Level"+num2str(i)+"Rg")
2084//              NVAR tempValError =$("Level"+num2str(i)+"RgError")
2085//              NVAR fitTempVal=$("Level"+num2str(i)+"FitRg")
2086//                      IR1L_AppendAnyText("Rg      \t\t"+ num2str(tempVal)+"\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal))
2087//              NVAR tempVal =$("Level"+num2str(i)+"G")
2088//              NVAR tempValError =$("Level"+num2str(i)+"GError")
2089//              NVAR fitTempVal=$("Level"+num2str(i)+"FitG")
2090//                      IR1L_AppendAnyText("G      \t\t"+ num2str(tempVal)+"\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal))
2091//              NVAR tempVal =$("Level"+num2str(i)+"P")
2092//              NVAR tempValError =$("Level"+num2str(i)+"PError")
2093//              NVAR fitTempVal=$("Level"+num2str(i)+"FitP")
2094//                      IR1L_AppendAnyText("P     \t \t"+ num2str(tempVal)+"\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal))
2095//              NVAR tempValMassFractal =$("Level"+num2str(i)+"MassFractal")
2096//                      if (tempValMassFractal)
2097//                              IR1L_AppendAnyText("\tAssumed Mass Fractal")
2098//                              IR1L_AppendAnyText("Parameter B calculated as B=(G*P/Rg^P)*Gamma(P/2)")
2099//                      else
2100//                              NVAR tempVal =$("Level"+num2str(i)+"B")
2101//                              NVAR tempValError =$("Level"+num2str(i)+"BError")
2102//                              NVAR fitTempVal=$("Level"+num2str(i)+"FitB")
2103//                              IR1L_AppendAnyText("B     \t \t"+ num2str(tempVal)+"\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal))
2104//                      endif
2105//              NVAR tempVal =$("Level"+num2str(i)+"RGCO")
2106//              NVAR tempValError =$("Level"+num2str(i)+"RgCOError")
2107//              NVAR LinktempVal=$("Level"+num2str(i)+"LinkRgCO")
2108//              NVAR fitTempVal=$("Level"+num2str(i)+"FitRGCO")
2109//                              if (fitTempVal)
2110//                                      IR1L_AppendAnyText("RgCO linked to lower level Rg =\t"+ num2str(tempVal))
2111//                              else
2112//                                      IR1L_AppendAnyText("RgCO      \t"+ num2str(tempVal)+"\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal))
2113//                              endif
2114//              NVAR tempVal =$("Level"+num2str(i)+"K")
2115//                      IR1L_AppendAnyText("K      \t"+ num2str(tempVal))
2116//              NVAR tempValCorrelations =$("Level"+num2str(i)+"Corelations")
2117//                      if (tempValCorrelations)
2118//                              IR1L_AppendAnyText("Assumed Corelations so following parameters apply")
2119//                              NVAR tempVal =$("Level"+num2str(i)+"ETA")
2120//                              NVAR tempValError =$("Level"+num2str(i)+"ETAError")
2121//                              NVAR fitTempVal=$("Level"+num2str(i)+"FitETA")
2122//                                      IR1L_AppendAnyText("ETA      \t"+ num2str(tempVal)+"\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal))
2123//                              NVAR tempVal =$("Level"+num2str(i)+"PACK")
2124//                              NVAR tempValError =$("Level"+num2str(i)+"PACKError")
2125//                              NVAR fitTempVal=$("Level"+num2str(i)+"FitPACK")
2126//                              IR1L_AppendAnyText("PACK      \t"+ num2str(tempVal)+"\t+/- "+num2str(tempValError)+"\t,  \tfitted? = "+num2str(fitTempVal))
2127//              else
2128//                              IR1L_AppendAnyText("Corelations       \tNot assumed")
2129//                      endif
2130//
2131//              NVAR tempVal =$("Level"+num2str(i)+"Invariant")
2132//                              IR1L_AppendAnyText("Invariant  =\t"+num2str(tempVal)+"   cm^(-1) A^(-3)")
2133//              NVAR tempVal =$("Level"+num2str(i)+"SurfaceToVolRat")
2134//                      if (Numtype(tempVal)==0)
2135//                              IR1L_AppendAnyText("Surface to volume ratio  =\t"+num2str(tempVal)+"   m^(2) / cm^(3)")
2136//                      endif
2137//                      IR1L_AppendAnyText("  ")
2138//      endfor
2139//     
2140//              IR1L_AppendAnyText("Fit has been reached with following parameters")
2141//              IR1_InsertDateAndTime(nbl)
2142//              NVAR/Z AchievedChisq
2143//              if(NVAR_Exists(AchievedChisq))
2144//                      IR1L_AppendAnyText("Chi-Squared \t"+ num2str(AchievedChisq))
2145//              endif
2146//              DoWindow /F IR1_LogLogPlotU
2147//              if (strlen(csrWave(A))!=0 && strlen(csrWave(B))!=0)             //cursors in the graph
2148//                      IR1L_AppendAnyText("Points selected for fitting \t"+ num2str(pcsr(A)) + "   to \t"+num2str(pcsr(B)))
2149//              else
2150//                      IR1L_AppendAnyText("Whole range of data selected for fitting")
2151//              endif
2152//              IR1L_AppendAnyText(" ")
2153//              IR1L_AppendAnyText("***********************************************")
2154//
2155//      setdataFolder oldDf
2156//end
2157//
Note: See TracBrowser for help on using the repository browser.