source: trunk/User Procedures/Irena/IR2_PanelCntrlProcs.ipf @ 917

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

Fix for bug introduced in Control Procedures.

File size: 210.8 KB
Line 
1#pragma TextEncoding = "UTF-8"
2#pragma rtGlobals=3                     // Use modern global access method.
3#pragma version = 1.60
4
5
6//*************************************************************************\
7//* Copyright (c) 2005 - 2020, Argonne National Laboratory
8//* This file is distributed subject to a Software License Agreement found
9//* in the file LICENSE that is included with this distribution.
10//*************************************************************************/
11
12//1.60 add Multi controls - controls with listbox... For tools needing ability to select multiple data sets.
13//                      changed bahavior for generic (no defined data types selected) data. Now, if user selects X, Y, or E wave and in next folder user selects such waves exist,
14//                                                      the names will be reatined and not repalced by "---" as before. Seems mopre reasonable. If waves do nto exist in the new folder, names are reset to "---"
15//                      fixes to handling of fUserDefined data - Dale has found few bugs as he is using the tool. Still, some bugs left in there...
16//
17//1.53 addes Level fits for Guinier-Porod. Adds Level0 for Unified/GP and pop0 for Modeling which are simply flat background wave.
18                        //fixed results lookup which seemed to have failed for more than two results available...
19                        //removed duplicates fromWave with X list.
20//1.52 fixes for special characters " [ ] , . " iused in folder and wave names. Broke grep, fixed by escaping before use.
21//1.51 fixes for generic case of data (all checkboxes unchecked). Should work now.
22//1.50 fixes case when stale FOlder string was returned when user chanegd too fast from USAXS to QRSS type. Fixed case when R_Int was showing as QRS data.
23//1.49 fixed IR2P_CheckForRightQRSTripletWvs to work also for QRS names, not only qrs...
24//1.48 Modifed IR2P_CheckForRightQRSTripletWvs for QRS to use GrepList, seems cleaner and more obviosu. Also, fixes worng includions of DSM waves in QRS.
25//1.47 speed up popup string generation by at least 50%, increased the time for use of cached values to 10 seconds.
26//1.46 Added to Listbox procedure IR3C_ListBoxProc rigth click for Match Blank and Match EMpty.
27//1.45 try to catch bug which pops debugger when panel is being killed.
28//1.44 Added right alignemnet of data path string to show end of the string if it is too long.
29//1.43 Added Listbox for external files programmed similarly to allow easy addition of input directluy from files. Need for multipel tools in the future.
30//                      Function IR3C_AddDataControls(PckgPathName, PckgDataFolder, PanelWindowName,DefaultExtensionStr, DefaultMatchStr,DefaultSortString)
31//1.42 removed PreparematchString - as fighting with regular expressions used by Regex. Added IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
32//1.41 fixed problem when checkbox Use SMR data screwed up the control procedures and put them in non-working condition. Accidentally called old code.
33//1.40 added to IR2P_CleanUpPackagesFolder to remove als any data in root:raw: folder. Not sure if this is OK, but they are there annoying.
34//1.39 fixed qis data selection bug. Further fixes to Irena results handling.
35//1.38 fixed bug which added require errors to qrs data when changed form USAXS data and fixed RegularExpression bug which increased qrs folder search time.
36//1.37 yet another bug - this time on "any" name type, when the Wv string was not matching the folders.
37//1.36 fixed another bug in qrs data structure handling.
38//1.35 fixed weird problem when after change from USAXS to qrs data set, first time user got wrong set of data when same folder contained both USAXS and qrs data.
39//1.34 enabled use of following characters in Wavenames: (){}%#^$?|&@, Fixed time cashing problem which caused folder match string to be "retained" for 5 seconds.
40//              minor change in GUI locations.
41//1.33 IR2C_PanelPopupControl changed to handle cases when multiple pairs/triplets of waves reside in the same folder.
42//1.32 modifed IR2C_PanelPopupControl to handle folders with same names in differnet folders. Prior version picked the first one ONLY. `
43//1.31 fix for Irena results which caused loss of _GenerationNumber sometimes.
44//1.30 Data manipulation I, fixed Flrd match for Test data folder...
45//1.29 hopefully fixed problem, when parent folder appeared, when subfolders were masked off by Wv grep string 
46//1.28 modifed and changed handling of Results wave names, mainly Y wave name. It is a mess - need to check this in details...
47//1.27 added Diameters waves for Modeling II
48//1.26 work around user names for folder with [] in the name.
49//1.25 changed "Indra 2" to "USAXS" to make bit more sense for human beings.
50//1.24 added Guinier-Porod data type
51//1.23 fixed user defined data types of QIS type (with type at the end
52//1.22 fixed FOlder popup to show only last folder name and indicate which subfolder the data came from.
53//1.21 changed Popups shape and size to use bodyWidth, may be it will be bit more user friendly and tidy.
54//1.20 Added ability to handle twr, drs and mrs data sets produced by Nika - considered for now as qrs data. Removed RegEx from the string fields for matchstrings. All Irena is now RegEx, so this is not necessary.
55//1.19 added errors for Size distribution from Sizes to support updated version which can generate errors, fixed IR2P_ListOfWaves to handle the errors...
56//         added also SLDProfileX_ to Reflectivity results as requested feature.
57//1.18 major speed improvement, added caching to speed things up, cached IR2P_GenStringOfFolders to use old folder list, if it was created/used within last 5 secods, major speed improvement
58//1.17 minor speed improvements
59//1.16 minor changes in GUI placement
60//1.15 tried to speed up the qrs data serch, speed increased by factor of 10 or so.
61//1.14 fixed problems with user defined wave pairs and with qrs data structure. Hopefully fixed problems with QIS data structure.
62//1.13 added azimuthal data to qrs
63//1.12 added display of separate polulations data from Modeling II.
64//1.11 fixed bug which prevented any folders be displayed when no checbox was selected and no match string was used
65//1.10 optimization for speed. Just too slow to get anythign done in some major user experiments...  changed following functions:
66//1.09 added license for ANL
67//version 1.08 - added Unified size distribution and changed global string to help with upgrades. Now the list of known results is updated every time the cod eis run.
68//version 1.07 fixes minor bug for Model input, when the Qs werento recalculated when log-Q choice wa changed.
69//version 1.06 fixes the NIST qis naming structure 3/8/2008. Only q, int, and error are used, resolution wave is nto used at this time.
70//version 1.05 adds capability to be used on child (or sub) panels and graphs. Keep names short, so the total length is below 28 characters (of both HOST and CHILD together)
71//version 1.04 adds to "qrs" also "qis" - NIST intended naming structure as of 11/2007
72
73
74
75
76//Three different controls supported:
77
78 
79//1.    Multi data controls...  Adds multiple data folders selection for WAXS and otehr panel types, where one needs to pick many data setds at once...
80//      Function IR3C_MultiAppendControls(ToolPackageFolder,PanelName, DoubleClickFunNm)
81//              string PanelName,ToolPackageFolder,DoubleClickFunNm
82        //this will append controls to panels, which require set of control for multi sample selection 
83        //      NewPanel /K=1 /W=(5.25,43.25,605,820) as "MultiData Ploting tool"
84        //initialize controls first by running this command
85        //IR2C_AddDataControls("Irena:MultiSaPlotFit","IR3L_MultiSaPlotFitPanel","DSM_Int;M_DSM_Int;SMR_Int;M_SMR_Int;","AllCurrentlyAllowedTypes",UserDataTypes,UserNameString,XUserLookup,EUserLookup, 0,1, DoNotAddControls=1)
86        //then call this function:
87        // Function IR3C_MultiAppendControls(ToolPackageFolder,PanelName, DoubleClickFunNm)
88        //, it will add listbox and other controls.
89        //   DoubleClickFUnction name is stored with other control info and when called, this happens:
90        //                              Execute(DoubleClickFunctionName+"("+FoldernameStr+")")
91        //this is how the double click action suppose to look:
92        //Function IR3L_DoubleClickAction(FoldernameStr)
93        //              string FoldernameStr
94        //              IR3C_SelectWaveNamesData("Irena:MultiSaPlotFit", FolderNameStr)                 //this routine will preset names in strings as needed, so later code know what X, Y, and Z is!!!!
95        //      Important note, this double click routine must use the above function before other functionality so the code defines what X, Y, and E is. Else, everything else will break...
96
97//2.   External files picker....   there is listbox support to select external files :
98//      Function IR3C_AddDataControls(PckgPathName, PckgDataFolder, PanelWindowName,DefaultExtensionStr, DefaultMatchStr,DefaultSortString, DoubleCLickFnctName)
99
100
101//3.   Single data set at a time (oldest) for most Irena panels:
102//      IR2C_AddDataControls("testpackage2","TestPanel2","DSM_Int;M_DSM_Int;R_Int;SMR_Int;M_SMR_Int;","SizesFitIntensity;SizesVolumeDistribution;SizesNumberDistribution;",UserDataTypes,UserNameString,XUserLookup,EUserLookup, RequireErrorWaves, AllowModelData)
103
104//Adds controls to select data to panels
105//How to:
106//      Following are parameters
107//              PckgDataFolder          -       data folder where strings with folder and Q/Int/Error wave names will be created. Also place for variables use IN2, QRS, Resutls, User...  Will be created if necessary.
108//              PanelWindowName -       in which panel to create the controls. Neede for lookup tables
109//              AllowedIrenaTypes       -       which of the Indra2 data types are allowed. Note, order is the order in which these will be listed (if they exist) and first existing will be preselected.
110//              AllowedResultsTypes     -       list of Irena allowed results types. For example "SizesNumberDistribution;SizesVolumeDistribution;" etc. There should be list of all existing results in this package. If "", this scontrol will not show. Same about order as above (I hope).
111                //NOTE - if set to "AllCurrentlyAllowedTypes" all currently known results types will be used...
112
113//              AllowedUserTypes        -       list of user defined types of data. For now can handle either Nika type - where unique names are known ("DSM_Int;SMR_Int;...") or qrs type which can include * for common part of name - at this time ONLY at the end.
114//                                                              So, at this time you can use "r*;" to get qrs data and see below for other information needed.                                 
115//              UserNameString          -       string which will be displayed on panel as name at the chekcbox. Make it SHORT!!!!
116//              XUserTypeLookup -       Lookup table, which returns for each AllowedUserTypes item one prescription for x axis data.
117//                                                              Examples: "DSM_Int:DSM_Qvec;r*:q*;" etc.   NOTE: use ":" between keyword and value and ";" between items in this table. Necessary!!!!
118//                                                              Important note: this library can be as large as needed, but ONLY ONE PER EXPERIMENT. It is common for all panels. But, not every panel needs to use all of the known types in this table.
119//                                                              Every package can add to this common library - the unknown typers will be added... But note, that if you redefine relationship, it is redefined for WHOLE EXPERIMENT. Seems only sensible way  to make this.           
120//              EUserTypeLookup -       Same as above but for errors.
121//              RequireErrorWaves       -       0 if data without errors are allowed, 1 if errors are required. Can be different for each panel.
122//              AllowModelData          -       adds option to allow generation of model Q data and provides these data to the other packages
123//     
124// example which creates test panel:
125//Window TestPanel2() : Panel
126//      PauseUpdate; Silent 1           // building window...
127//      NewPanel /K=1 /W=(2.25,43.25,390,690) as "Test"
128//Uncomment either Example 1 or Example 2
129//Example 1 - User data of Irena type, in this case the names are fully specified with no * in the name.
130//      string UserDataTypes="DSM_Int;SMR_Int;"
131//      string UserNameString="Test me"
132//      string XUserLookup="DSM_Int:DSM_Qvec;SMR_Int:SMR_Qvec;"
133//      string EUserLookup="DSM_Int:DSM_Error;SMR_Int:SMR_Error;"
134//Example 2 - qrs data type. In thi scase the names are partically specified,. NOTE: The * repalces SAME string in the name, so in this case the names must have same ending as QRS names have.
135//      string UserDataTypes="r_*;"
136//      string UserNameString="Test me"
137//      string XUserLookup="r_*:q_*;"
138//      string EUserLookup="r_*:s_*;"
139//      variable RequireErrorWaves =0
140//      variable AllowModelData = 0
141//and this creates the controls.
142//end
143
144//modifications:
145///     Important: There are 4 hook functions, run after folder, Q, intensity, and error data are selected, names must be exactly:
146//      IR2_ContrProc_F_Hook_Proc(), IR2_ContrProc_Q_Hook_Proc(), IR2_ContrProc_R_Hook_Proc(), and IR2_ContrProc_E_Hook_Proc().
147//      User needs to make sure these can be called with no parameters and that they will not fail if called by different panel!!!
148//      This is important, as they will be called from any panel whic is using this package, so they have to be prrof to that.
149//      I suggest checcking on the name of top active panel window or the current folder...  Example of function is below:
150//Function IR2_ContrProc_Q_Hook_Proc()
151//      print getDataFolder(0)
152//end
153
154//Input listbox for external file selection, added in version 1.44
155//Function IR3C_AddDataControls(PckgPathName, PckgDataFolder, PanelWindowName,DefaultExtensionStr, DefaultMatchStr,DefaultSortString, DoubleCLickFnctName)
156//                      Call this with :
157//                      PckgPathName - name of Igor Path which will be created (or used) to point to these files
158//                      PckgDataFolder - name of package folder name (inside root:Packages:) should be possible to have this in subfolder
159//                      PanelWindowName  - name of panel to attach these controls to
160//                      DefaultExtensionStr, DefaultMatchStr,DefaultSortString  -       default values. Can be left empty if needed. Default Sort if alphabetical.
161//                      DoubleCLickFnctName -  string name of function which shoudl be called on double click. Thsi function cannot have any parameters. If "" nothign will happen on double click.
162
163
164//**********************************************************************************************************
165//**********************************************************************************************************
166//**********************************************************************************************************
167//**********************************************************************************************************
168//**********************************************************************************************************
169//**********************************************************************************************************
170
171Function IR2C_AddDataControls(PckgDataFolder,PanelWindowName,AllowedIrenaTypes, AllowedResultsTypes, AllowedUserTypes, UserNameString, XUserTypeLookup,EUserTypeLookup, RequireErrorWaves,AllowModelData,[DoNotAddControls])
172        string PckgDataFolder,PanelWindowName, AllowedIrenaTypes, AllowedResultsTypes, AllowedUserTypes, UserNameString, XUserTypeLookup,EUserTypeLookup
173        variable RequireErrorWaves, AllowModelData, DoNotAddControls
174       
175        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
176        variable DontAdd =0
177        if(!ParamIsDefault(DoNotAddControls))
178                DontAdd = DoNotAddControls
179        endif
180        if(!DontAdd)
181                if(stringmatch(PanelWindowName, "*#*" ))        //# so expect subwindow... Limit only to first child here, else is not allowed for now...
182                        //first check for the main window existance...
183                        string MainPnlWinName=StringFromList(0, PanelWindowName , "#")
184                        string ChildPnlWinName=StringFromList(1, PanelWindowName , "#")
185                                        //check on existence here...
186                                DoWindow $(MainPnlWinName)
187                                if(!V_Flag)
188                                        abort //widnow does not exist, nothing to do...
189                                endif
190                                //OK, window exists, now check if it has the other in the childlist
191                                if(!stringmatch(ChildWindowList(MainPnlWinName), "*"+ChildPnlWinName+"*" ))
192                                        abort //that child does nto exist!
193                                endif
194                               
195                else            //no # no subvwindow. Use old code...
196                        DoWindow $(PanelWindowName)
197                        if(!V_Flag)
198                                abort //widnow does not exist, nothing to do...
199                        endif
200                endif
201        endif
202        IR2C_InitControls(PckgDataFolder,PanelWindowName,AllowedIrenaTypes, AllowedResultsTypes, AllowedUserTypes, UserNameString, XUserTypeLookup,EUserTypeLookup, RequireErrorWaves,AllowModelData)
203       
204        //This is fix to simplify coding all results
205        SVAR AllCurrentlyAllowedTypes=root:Packages:IrenaControlProcs:AllCurrentlyAllowedTypes
206        if(cmpstr(AllowedResultsTypes,"AllCurrentlyAllowedTypes")==0)
207                AllowedResultsTypes=AllCurrentlyAllowedTypes
208        endif
209
210        if(!DontAdd)
211                IR2C_AddControlsToWndw(PckgDataFolder,PanelWindowName,AllowedIrenaTypes, AllowedResultsTypes, AllowedUserTypes, UserNameString, XUserTypeLookup,EUserTypeLookup, RequireErrorWaves,AllowModelData)
212        endif
213end
214//**********************************************************************************************************
215//**********************************************************************************************************
216//**********************************************************************************************************
217
218Function IR2C_InitControls(PckgDataFolder,PanelWindowName,AllowedIrenaTypes, AllowedResultsTypes, AllowedUserTypes, UserNameString, XUserTypeLookup,EUserTypeLookup, RequireErrorWaves,AllowModelData)
219        string PckgDataFolder,PanelWindowName, AllowedIrenaTypes, AllowedResultsTypes,AllowedUserTypes, UserNameString, XUserTypeLookup,EUserTypeLookup
220        variable RequireErrorWaves,AllowModelData
221       
222        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
223        DFref oldDf= GetDataFolderDFR()
224
225        setdatafolder root:
226        NewDataFolder/O/S root:Packages
227        NewDataFolder/O/S IrenaControlProcs
228
229        SVAR/Z AllCurrentlyAllowedTypes
230//      if(!SVAR_Exists(AllCurrentlyAllowedTypes))
231        string/g AllCurrentlyAllowedTypes
232//      endif
233        //List of all types currently existing:
234        AllCurrentlyAllowedTypes = "SizesFitIntensity;SizesVolumeDistribution;SizesNumberDistribution;UnifiedFitIntensity;"
235        AllCurrentlyAllowedTypes+="IntensityModelLSQF2;NumberDistModelLSQF2;VolumeDistModelLSQF2;"
236        AllCurrentlyAllowedTypes+="IntensityModelLSQF2pop0;IntensityModelLSQF2pop1;NumberDistModelLSQF2pop1;VolumeDistModelLSQF2pop1;"
237        AllCurrentlyAllowedTypes+="IntensityModelLSQF2pop2;NumberDistModelLSQF2pop2;VolumeDistModelLSQF2pop2;"
238        AllCurrentlyAllowedTypes+="IntensityModelLSQF2pop3;NumberDistModelLSQF2pop3;VolumeDistModelLSQF2pop3;"
239        AllCurrentlyAllowedTypes+="IntensityModelLSQF2pop4;NumberDistModelLSQF2pop4;VolumeDistModelLSQF2pop4;"
240        AllCurrentlyAllowedTypes+="IntensityModelLSQF2pop5;NumberDistModelLSQF2pop5;VolumeDistModelLSQF2pop5;"
241        AllCurrentlyAllowedTypes+="IntensityModelLSQF2pop6;NumberDistModelLSQF2pop6;VolumeDistModelLSQF2pop6;"
242        AllCurrentlyAllowedTypes+= "ReflModel;SLDProfile;"
243        AllCurrentlyAllowedTypes+="ModelingNumberDistribution;ModelingVolumeDistribution;ModelingIntensity;FractFitIntensity;DebyeBuecheModelInt;AnalyticalModelInt;"
244        AllCurrentlyAllowedTypes+="ModelingNumDist_Pop1;ModelingVolDist_Pop1;Mass1FractFitInt;Surf1FractFitInt;UniLocalLevel1Unified;UniLocalLevel1Pwrlaw;UniLocalLevel1Guinier;"
245        AllCurrentlyAllowedTypes+="ModelingNumDist_Pop2;ModelingVolDist_Pop2;Mass2FractFitInt;Surf2FractFitInt;UniLocalLevel2Unified;UniLocalLevel2Pwrlaw;UniLocalLevel2Guinier;"
246        AllCurrentlyAllowedTypes+="ModelingNumDist_Pop3;ModelingVolDist_Pop3;Mass3FractFitInt;Surf3FractFitInt;UniLocalLevel3Unified;UniLocalLevel3Pwrlaw;UniLocalLevel3Guinier;"
247        AllCurrentlyAllowedTypes+="ModelingNumDist_Pop4;ModelingVolDist_Pop4;Mass4FractFitInt;Surf4FractFitInt;UniLocalLevel4Unified;UniLocalLevel4Pwrlaw;UniLocalLevel4Guinier;"
248        AllCurrentlyAllowedTypes+="ModelingNumDist_Pop5;ModelingVolDist_Pop5;Mass5FractFitInt;Surf5FractFitInt;UniLocalLevel5Unified;UniLocalLevel5Pwrlaw;UniLocalLevel5Guinier;"
249        AllCurrentlyAllowedTypes+="CumulativeSizeDist;CumulativeSfcArea;MIPVolume;SADModelIntensity;SADModelIntPeak1;SADModelIntPeak2;SADModelIntPeak3;"
250        AllCurrentlyAllowedTypes+="SADModelIntPeak4;SADModelIntPeak5;SADModelIntPeak6;"
251        AllCurrentlyAllowedTypes+="PDDFIntensity;PDDFDistFunction;PDDFChiSquared;SADUnifiedIntensity;PDDFGammaFunction;"
252        AllCurrentlyAllowedTypes+="UnifSizeDistVolumeDist;UnifSizeDistNumberDist;"
253        AllCurrentlyAllowedTypes+="UniLocalLevel0Unified;UniLocalLevel1Unified;UniLocalLevel1Pwrlaw;UniLocalLevel1Guinier;"
254        AllCurrentlyAllowedTypes+="UniLocalLevel2Unified;UniLocalLevel2Pwrlaw;UniLocalLevel2Guinier;"
255        AllCurrentlyAllowedTypes+="UniLocalLevel3Unified;UniLocalLevel3Pwrlaw;UniLocalLevel3Guinier;"
256        AllCurrentlyAllowedTypes+="UniLocalLevel4Unified;UniLocalLevel4Pwrlaw;UniLocalLevel4Guinier;"
257        AllCurrentlyAllowedTypes+="UniLocalLevel5Unified;UniLocalLevel5Pwrlaw;UniLocalLevel5Guinier;"
258        AllCurrentlyAllowedTypes+="GuinierPorodFitIntensity;GuinierPorodIntLevel0;GuinierPorodIntLevel1;GuinierPorodIntLevel2;GuinierPorodIntLevel3;GuinierPorodIntLevel4;GuinierPorodIntLevel5;"
259        //Simple fits
260        AllCurrentlyAllowedTypes+="SimFitGuinierI;SimFitGuinierRI;SimFitGuinierSII;SimFitSphereI;SimFitSpheroidI;SimFitPorodI;"
261
262        string/g AllKnownToolsResults
263        AllKnownToolsResults = "Unified Fit;Size Distribution;Modeling II;Modeling I;Small-angle diffraction;Analytical models;Fractals;PDDF;Reflectivity;Guinier-Porod;Simple Fits;"
264
265        if(cmpstr(AllowedResultsTypes,"AllCurrentlyAllowedTypes")==0)
266                AllowedResultsTypes=AllCurrentlyAllowedTypes
267        endif
268
269        variable i
270       
271        SVAR/Z ControlProcsLocations
272        if(!SVAR_Exists(ControlProcsLocations))
273                string/g ControlProcsLocations
274        endif
275        ControlProcsLocations=ReplaceStringByKey(PanelWindowName, ControlProcsLocations, PckgDataFolder,":",";" )
276
277        SVAR/Z ControlAllowedIrenaTypes
278        if(!SVAR_Exists(ControlAllowedIrenaTypes))
279                string/g ControlAllowedIrenaTypes
280        endif
281        ControlAllowedIrenaTypes=ReplaceStringByKey(PanelWindowName, ControlAllowedIrenaTypes, AllowedIrenaTypes, "=",">" )
282
283        SVAR/Z ControlAllowedUserTypes
284        if(!SVAR_Exists(ControlAllowedUserTypes))
285                string/g ControlAllowedUserTypes
286        endif
287        ControlAllowedUserTypes=ReplaceStringByKey(PanelWindowName, ControlAllowedUserTypes, AllowedUserTypes, "=",">" )
288
289        SVAR/Z ControlAllowedResultsTypes
290        if(!SVAR_Exists(ControlAllowedResultsTypes))
291                string/g ControlAllowedResultsTypes
292        endif
293        ControlAllowedResultsTypes=ReplaceStringByKey(PanelWindowName, ControlAllowedResultsTypes, AllowedResultsTypes, "=",">" )
294
295        SVAR/Z ControlRequireErrorWvs
296        if(!SVAR_Exists(ControlRequireErrorWvs))
297                string/g ControlRequireErrorWvs
298        endif
299        ControlRequireErrorWvs=ReplaceStringByKey(PanelWindowName, ControlRequireErrorWvs, num2str(RequireErrorWaves) )
300        //added 7/27/2006
301        SVAR/Z ControlAllowModelData
302        if(!SVAR_Exists(ControlAllowModelData))
303                string/g ControlAllowModelData
304        endif
305        ControlAllowModelData=ReplaceStringByKey(PanelWindowName, ControlAllowModelData, num2str(AllowModelData) )
306        //Added 12/18/2010, match string for Folder string and waveNameString
307//      string tempstr=StrVarOrDefault("root:Packages:IrenaControlProcs:FolderMatchStr", "" )
308        SVAR/Z FolderMatchStr
309        if(!SVAR_Exists(FolderMatchStr))
310                string/g FolderMatchStr
311        endif
312        string tempstr=StringByKey(PanelWindowName, FolderMatchStr,"=",";")
313        FolderMatchStr=ReplaceStringByKey(PanelWindowName, FolderMatchStr, tempstr, "=",";" )
314
315        SVAR/Z WaveMatchStr
316        if(!SVAR_Exists(WaveMatchStr))
317                string/g WaveMatchStr
318        endif
319        tempstr=StringByKey(PanelWindowName, WaveMatchStr,"=",";")
320        WaveMatchStr=ReplaceStringByKey(PanelWindowName, WaveMatchStr, tempstr, "=",";" )
321       
322        //I suspect I'll need to be able to remeber which fields have displayed...
323//      SVAR/Z ControlError
324//      if(!SVAR_Exists(ControlAllowModelData))
325//              string/g ControlAllowModelData
326//      endif
327//      ControlAllowModelData=ReplaceStringByKey(PanelWindowName, ControlAllowModelData, num2str(AllowModelData) )
328
329        SVAR/Z XwaveUserDataTypesLookup
330        if(!SVAR_Exists(XwaveUserDataTypesLookup))
331                string/g XwaveUserDataTypesLookup
332        endif
333        For(i=0;i<ItemsInList(XUserTypeLookup,";");i+=1)
334                XwaveUserDataTypesLookup = ReplaceStringByKey(StringFromList(0,StringFromList(i,XUserTypeLookup,";"),":"), XwaveUserDataTypesLookup, StringFromList(1,StringFromList(i,XUserTypeLookup,";"),":")  , ":" , ";")
335        endfor
336
337        SVAR/Z EwaveUserDataTypesLookup
338        if(!SVAR_Exists(EwaveUserDataTypesLookup))
339                string/g EwaveUserDataTypesLookup
340        endif
341        For(i=0;i<ItemsInList(EUserTypeLookup,";");i+=1)
342                EwaveUserDataTypesLookup = ReplaceStringByKey(StringFromList(0,StringFromList(i,EUserTypeLookup,";"),":"), EwaveUserDataTypesLookup, StringFromList(1,StringFromList(i,EUserTypeLookup,";"),":")  , ":" , ";")
343        endfor
344
345
346        SVAR/Z XwaveDataTypesLookup
347        if(!SVAR_Exists(XwaveDataTypesLookup))
348                string/g XwaveDataTypesLookup
349        endif
350        XwaveDataTypesLookup="DSM_Int:DSM_Qvec;"
351        XwaveDataTypesLookup+="M_DSM_Int:M_DSM_Qvec;"
352        XwaveDataTypesLookup+="BCK_Int:BCK_Qvec;"
353        XwaveDataTypesLookup+="M_BCK_Int:M_BCK_Qvec;"
354        XwaveDataTypesLookup+="SMR_Int:SMR_Qvec;"
355        XwaveDataTypesLookup+="M_SMR_Int:M_SMR_Qvec;"
356        XwaveDataTypesLookup+="R_Int:R_Qvec;"
357//      XwaveDataTypesLookup+="r*:q*;"
358//      XwaveDataTypesLookup+="DSM_Int:DSM_Qvec;"
359       
360        SVAR/Z EwaveDataTypesLookup
361        if(!SVAR_Exists(EwaveDataTypesLookup))
362                string/g EwaveDataTypesLookup
363        endif
364        EwaveDataTypesLookup="DSM_Int:DSM_Error;"
365        EwaveDataTypesLookup+="M_DSM_Int:M_DSM_Error;"
366        EwaveDataTypesLookup+="BCK_Int:BCK_Error;"
367        EwaveDataTypesLookup+="M_BCK_Int:M_BCK_Error;"
368        EwaveDataTypesLookup+="SMR_Int:SMR_Error;"
369        EwaveDataTypesLookup+="M_SMR_Int:M_SMR_Error;"
370        EwaveDataTypesLookup+="R_Int:R_Error;"
371//      EwaveDataTypesLookup+="r*:s*;"
372       
373
374        SVAR/Z ResultsEDataTypesLookup
375        if(!SVAR_Exists(ResultsEDataTypesLookup))
376                string/g ResultsEDataTypesLookup
377        endif
378        ResultsEDataTypesLookup="PDDFDistFunction:PDDFErrors;"          //PDDF has error estimates for the result...
379        ResultsEDataTypesLookup+="SizesVolumeDistribution:SizesVolumeDistErrors;"               //Sizes now have errors also
380        ResultsEDataTypesLookup+="SizesNumberDistribution:SizesNumberDistErrors;"               //Sizes now have errors also
381       
382        SVAR/Z ResultsDataTypesLookup
383        if(!SVAR_Exists(ResultsDataTypesLookup))
384                string/g ResultsDataTypesLookup
385        endif
386        //sizes
387        ResultsDataTypesLookup="SizesFitIntensity:SizesFitQvector;"
388        ResultsDataTypesLookup+="SizesVolumeDistribution:SizesDistDiameter;"
389        ResultsDataTypesLookup+="SizesNumberDistribution:SizesDistDiameter;"
390        //unified
391        ResultsDataTypesLookup+="UnifiedFitIntensity:UnifiedFitQvector;"
392        ResultsDataTypesLookup+="UnifSizeDistVolumeDist:UnifSizeDistRadius;"
393        ResultsDataTypesLookup+="UnifSizeDistNumberDist:UnifSizeDistRadius;"
394        ResultsDataTypesLookup+="UniLocalLevel0Unified:UnifiedFitQvector;"                      //this is flat background
395        ResultsDataTypesLookup+="UniLocalLevel1Unified:UnifiedFitQvector;"
396        ResultsDataTypesLookup+="UniLocalLevel1Pwrlaw:UnifiedFitQvector;"
397        ResultsDataTypesLookup+="UniLocalLevel1Guinier:UnifiedFitQvector;"
398        ResultsDataTypesLookup+="UniLocalLevel2Unified:UnifiedFitQvector;"
399        ResultsDataTypesLookup+="UniLocalLevel2Pwrlaw:UnifiedFitQvector;"
400        ResultsDataTypesLookup+="UniLocalLevel2Guinier:UnifiedFitQvector;"
401        ResultsDataTypesLookup+="UniLocalLevel3Unified:UnifiedFitQvector;"
402        ResultsDataTypesLookup+="UniLocalLevel3Pwrlaw:UnifiedFitQvector;"
403        ResultsDataTypesLookup+="UniLocalLevel3Guinier:UnifiedFitQvector;"
404        ResultsDataTypesLookup+="UniLocalLevel4Unified:UnifiedFitQvector;"
405        ResultsDataTypesLookup+="UniLocalLevel4Pwrlaw:UnifiedFitQvector;"
406        ResultsDataTypesLookup+="UniLocalLevel4Guinier:UnifiedFitQvector;"
407        ResultsDataTypesLookup+="UniLocalLevel5Unified:UnifiedFitQvector;"
408        ResultsDataTypesLookup+="UniLocalLevel5Pwrlaw:UnifiedFitQvector;"
409        ResultsDataTypesLookup+="UniLocalLevel5Guinier:UnifiedFitQvector;"
410       
411        //LSQF
412        ResultsDataTypesLookup+="ModelingNumberDistribution:ModelingDiameters;"
413        ResultsDataTypesLookup+="ModelingVolumeDistribution:ModelingDiameters;"
414        ResultsDataTypesLookup+="ModelingIntensity:ModelingQvector;"
415        ResultsDataTypesLookup+="ModelingNumDist_Pop1:ModelingDia_Pop1;"
416        ResultsDataTypesLookup+="ModelingVolDist_Pop1:ModelingDia_Pop1;"
417        ResultsDataTypesLookup+="ModelingNumDist_Pop2:ModelingDia_Pop2;"
418        ResultsDataTypesLookup+="ModelingVolDist_Pop2:ModelingDia_Pop2;"
419        ResultsDataTypesLookup+="ModelingNumDist_Pop3:ModelingDia_Pop3;"
420        ResultsDataTypesLookup+="ModelingVolDist_Pop3:ModelingDia_Pop3;"
421        ResultsDataTypesLookup+="ModelingNumDist_Pop4:ModelingDia_Pop4;"
422        ResultsDataTypesLookup+="ModelingVolDist_Pop4:ModelingDia_Pop4;"
423        ResultsDataTypesLookup+="ModelingNumDist_Pop5:ModelingDia_Pop5;"
424        ResultsDataTypesLookup+="ModelingVolDist_Pop5:ModelingDia_Pop5;"
425        //Fractals
426        ResultsDataTypesLookup+="FractFitIntensity:FractFitQvector;"
427        ResultsDataTypesLookup+="Mass1FractFitInt:Mass1FractFitQvec;"
428        ResultsDataTypesLookup+="Surf1FractFitInt:Surf1FractFitQvec;"
429        ResultsDataTypesLookup+="Mass2FractFitInt:Mass2FractFitQvec;"
430        ResultsDataTypesLookup+="Surf2FractFitInt:Surf2FractFitQvec;"
431        ResultsDataTypesLookup+="Mass3FractFitInt:Mass3FractFitQvec;"
432        ResultsDataTypesLookup+="Surf3FractFitInt:Surf3FractFitQvec;"
433        ResultsDataTypesLookup+="Mass4FractFitInt:Mass4FractFitQvec;"
434        ResultsDataTypesLookup+="Surf4FractFitInt:Surf4FractFitQvec;"
435        ResultsDataTypesLookup+="Mass5FractFitInt:Mass5FractFitQvec;"
436        ResultsDataTypesLookup+="Surf5FractFitInt:Surf5FractFitQvec;"
437        //Small-angle diffraction
438        ResultsDataTypesLookup+="SADModelIntensity:SADModelQ;"
439        ResultsDataTypesLookup+="SADModelIntPeak1:SADModelQPeak1;"
440        ResultsDataTypesLookup+="SADModelIntPeak2:SADModelQPeak2;"
441        ResultsDataTypesLookup+="SADModelIntPeak3:SADModelQPeak3;"
442        ResultsDataTypesLookup+="SADModelIntPeak4:SADModelQPeak4;"
443        ResultsDataTypesLookup+="SADModelIntPeak5:SADModelQPeak5;"
444        ResultsDataTypesLookup+="SADModelIntPeak6:SADModelQPeak6;"
445        ResultsDataTypesLookup+="SADUnifiedIntensity:SADUnifiedQvector;"
446        //Gels
447        ResultsDataTypesLookup+="DebyeBuecheModelInt:DebyeBuecheModelQvec;"//old, now next line...
448        ResultsDataTypesLookup+="AnalyticalModelInt:AnalyticalModelQvec;"
449        //Reflcecitivty
450        ResultsDataTypesLookup+="ReflModel:ReflQ;"
451        ResultsDataTypesLookup+="SLDProfile:SLDProfileX;SLDProfile:x-scaling;"
452        //PDDF
453        ResultsDataTypesLookup+="PDDFIntensity:PDDFQvector;"
454        ResultsDataTypesLookup+="PDDFChiSquared:PDDFQvector;"
455        ResultsDataTypesLookup+="PDDFDistFunction:PDDFDistances;"
456        ResultsDataTypesLookup+="PDDFGammaFunction:PDDFDistances;"
457        //Guinier-Porod
458        ResultsDataTypesLookup+="GuinierPorodFitIntensity:GuinierPorodFitQvector;"
459        ResultsDataTypesLookup+="GuinierPorodIntLevel0:GuinierPorodQvecLevel0;"         //this is flat background
460        ResultsDataTypesLookup+="GuinierPorodIntLevel1:GuinierPorodQvecLevel1;"
461        ResultsDataTypesLookup+="GuinierPorodIntLevel2:GuinierPorodQvecLevel2;"
462        ResultsDataTypesLookup+="GuinierPorodIntLevel3:GuinierPorodQvecLevel3;"
463        ResultsDataTypesLookup+="GuinierPorodIntLevel4:GuinierPorodQvecLevel4;"
464        ResultsDataTypesLookup+="GuinierPorodIntLevel5:GuinierPorodQvecLevel5;"
465       
466       
467        //NLQSF2
468        ResultsDataTypesLookup+="IntensityModelLSQF2:QvectorModelLSQF2;"
469        ResultsDataTypesLookup+="IntensityModelLSQF2pop0:QvectorModelLSQF2pop0;"                //this is flat background
470        ResultsDataTypesLookup+="IntensityModelLSQF2pop1:QvectorModelLSQF2pop1;"
471        ResultsDataTypesLookup+="IntensityModelLSQF2pop2:QvectorModelLSQF2pop2;"
472        ResultsDataTypesLookup+="IntensityModelLSQF2pop3:QvectorModelLSQF2pop3;"
473        ResultsDataTypesLookup+="IntensityModelLSQF2pop5:QvectorModelLSQF2pop5;"
474        ResultsDataTypesLookup+="IntensityModelLSQF2pop4:QvectorModelLSQF2pop4;"
475        ResultsDataTypesLookup+="IntensityModelLSQF2pop6:QvectorModelLSQF2pop6;"
476
477                ResultsDataTypesLookup+="VolumeDistModelLSQF2:RadiiModelLSQF2,DiametersModelLSQF2;"
478                ResultsDataTypesLookup+="NumberDistModelLSQF2:RadiiModelLSQF2,DiametersModelLSQF2;"
479                ResultsDataTypesLookup+="VolumeDistModelLSQF2pop1:RadiiModelLSQF2pop1,DiametersModelLSQF2pop1;"
480                ResultsDataTypesLookup+="NumberDistModelLSQF2pop1:RadiiModelLSQF2pop1,DiametersModelLSQF2pop1;"
481                ResultsDataTypesLookup+="VolumeDistModelLSQF2pop2:RadiiModelLSQF2pop2,DiametersModelLSQF2pop2;"
482                ResultsDataTypesLookup+="NumberDistModelLSQF2pop2:RadiiModelLSQF2pop2,DiametersModelLSQF2pop2;"
483                ResultsDataTypesLookup+="VolumeDistModelLSQF2pop3:RadiiModelLSQF2pop3,DiametersModelLSQF2pop3;"
484                ResultsDataTypesLookup+="NumberDistModelLSQF2pop3:RadiiModelLSQF2pop3,DiametersModelLSQF2pop3;"
485                ResultsDataTypesLookup+="VolumeDistModelLSQF2pop4:RadiiModelLSQF2pop4,DiametersModelLSQF2pop4;"
486                ResultsDataTypesLookup+="NumberDistModelLSQF2pop4:RadiiModelLSQF2pop4,DiametersModelLSQF2pop4;"
487                ResultsDataTypesLookup+="VolumeDistModelLSQF2pop5:RadiiModelLSQF2pop5,DiametersModelLSQF2pop5;"
488                ResultsDataTypesLookup+="NumberDistModelLSQF2pop5:RadiiModelLSQF2pop5,DiametersModelLSQF2pop5;"
489                ResultsDataTypesLookup+="VolumeDistModelLSQF2pop6:RadiiModelLSQF2pop6,DiametersModelLSQF2pop6;"
490                ResultsDataTypesLookup+="NumberDistModelLSQF2pop6:RadiiModelLSQF2pop6,DiametersModelLSQF2pop6;"
491
492        //CumulativeSizeDist Curve from Evaluate Size dist
493        ResultsDataTypesLookup+="CumulativeSizeDist:CumulativeDistDiameters;"
494        ResultsDataTypesLookup+="CumulativeSfcArea:CumulativeDistDiameters;"
495        ResultsDataTypesLookup+="MIPVolume:MIPPressure;"
496
497        //SimpleFits
498        ResultsDataTypesLookup+="SimFitGuinierI:SimFitGuinierQ;"
499        ResultsDataTypesLookup+="SimFitGuinierRI:SimFitGuinierRQ;"
500        ResultsDataTypesLookup+="SimFitGuinierSII:SimFitGuinierSQ;"
501        ResultsDataTypesLookup+="SimFitSphereI:SimFitSphereQ;"
502        ResultsDataTypesLookup+="SimFitSpheroidI:SimFitSpheroidQ;"
503        ResultsDataTypesLookup+="SimFitPorodI:SimFitPorodQ;"
504
505
506        string ListOfVariables
507        string ListOfStrings
508
509        //************************************************************
510        //************************************************************
511        //************************************************************
512        //And now controls for Modeling - need to generate Q values...
513        //ad subfolder with the name of the window
514        //include string for FolderMatchStr and WaveMatchStr
515        NewDataFolder/O/S $(PanelWindowName)
516        Variable/G Qmin,Qmax,QNumPoints,QLogScale
517        if(Qmin<1e-20)
518                Qmin=0.0001
519        endif
520        if(Qmax<1e-20)
521                Qmax=1
522        endif
523        if(QNumPoints<2)
524                QNumPoints=100
525        endif
526        ListOfStrings="tempXlist;tempYlist;tempElist;FolderMatchStr;WaveMatchStr;"
527        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
528                IN2G_CreateItem("string",StringFromList(i,ListOfStrings))
529        endfor 
530       
531
532        //************************************************************
533        //************************************************************
534        //************************************************************
535        setDataFolder root:packages
536        if(ItemsInList(PckgDataFolder , ":")>1)
537                For(i=0;i<ItemsInList(PckgDataFolder , ":");i+=1)
538                        NewDataFolder/O/S $(StringFromList(i,PckgDataFolder,":"))
539                endfor 
540        else
541                NewDataFolder/O/S $(PckgDataFolder)
542        endif
543       
544        //here define the lists of variables and strings needed, separate names by ;...
545       
546        ListOfVariables="UseIndra2Data;UseQRSdata;UseResults;UseSMRData;UseUserDefinedData;UseModelData;"
547
548        ListOfStrings="DataFolderName;IntensityWaveName;QWavename;ErrorWaveName;"
549       
550        //and here we create them
551        for(i=0;i<itemsInList(ListOfVariables);i+=1)   
552                IN2G_CreateItem("variable",StringFromList(i,ListOfVariables))
553        endfor         
554                                                                               
555        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
556                IN2G_CreateItem("string",StringFromList(i,ListOfStrings))
557        endfor 
558       
559
560        setDataFolder OldDf
561end
562
563//**********************************************************************************************************
564//**********************************************************************************************************
565//**********************************************************************************************************
566//**********************************************************************************************************
567//**********************************************************************************************************
568//**********************************************************************************************************
569
570Function IR2C_AddControlsToWndw(PckgDataFolder,PanelWindowName,AllowedIrenaTypes,AllowedResultsTypes, AllowedUserTypes, UserNameString, XUserTypeLookup,EUserTypeLookup, RequireErrorWaves,AllowModelData)
571        string PckgDataFolder,PanelWindowName, AllowedIrenaTypes,AllowedResultsTypes,AllowedUserTypes, UserNameString, XUserTypeLookup,EUserTypeLookup
572        variable RequireErrorWaves,AllowModelData
573
574        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
575        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
576        SVAR ControlAllowedIrenaTypes=root:Packages:IrenaControlProcs:ControlAllowedIrenaTypes
577        SVAR ControlAllowedResultsTypes=root:Packages:IrenaControlProcs:ControlAllowedResultsTypes
578        SVAR ControlRequireErrorWvs=root:Packages:IrenaControlProcs:ControlRequireErrorWvs
579
580        string CntrlLocation="root:Packages:"+PckgDataFolder
581
582        setDataFolder $(CntrlLocation)
583        string TopPanel=PanelWindowName
584
585//      //Experimental data input
586        if(strlen(AllowedIrenaTypes)>0)
587                CheckBox UseIndra2Data,pos={100,25},size={141,14},proc=IR2C_InputPanelCheckboxProc,title="USAXS"
588                CheckBox UseIndra2Data,variable= $(CntrlLocation+":UseIndra2data"), help={"Check, if you are using USAXS - Indra 2 - produced data with the orginal names, uncheck if the names of data waves are different"}
589        endif
590        CheckBox UseQRSData,pos={100,40},size={90,14},proc=IR2C_InputPanelCheckboxProc,title="QRS (QIS)"
591        CheckBox UseQRSData,variable= $(CntrlLocation+":UseQRSdata"), help={"Check, if you are using QRS or QIS names, uncheck if the names of data waves are different"}
592        if(strlen(AllowedResultsTypes)>0)
593                CheckBox UseResults,pos={200,25},size={90,14},proc=IR2C_InputPanelCheckboxProc,title="Irena results"
594                CheckBox UseResults,variable= $(CntrlLocation+":UseResults"), help={"Check, if you want to use results of Irena macros"}
595        endif
596        if(strlen(AllowedUserTypes)>0)
597                CheckBox UseUserDefinedData,pos={200,40},size={90,14},proc=IR2C_InputPanelCheckboxProc,title=UserNameString
598                CheckBox UseUserDefinedData,variable= $(CntrlLocation+":UseUserDefinedData"), help={"Check, if you want to use "+UserNameString+" data"}
599        endif
600        if(AllowModelData>0)
601                CheckBox UseModelData,pos={300,25},size={90,14},proc=IR2C_InputPanelCheckboxProc,title="Model"
602                CheckBox UseModelData,variable= $(CntrlLocation+":UseModelData"), help={"Check, if you want to generate Q data for modeling"}
603        endif
604
605        SetVariable FolderMatchStr, pos={280,56},size={100,15},bodyWidth=60, proc=IR2C_NamesSetVarProc,title="Fldr :", help={"Regular Expression to match folder names"}
606        SetVariable FolderMatchStr, variable=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(PanelWindowName)+":FolderMatchStr")
607        SetVariable WaveMatchStr, pos={280,78},size={100,15},bodyWidth=60, proc=IR2C_NamesSetVarProc,title="Wv :", help={"Regular Expression to match wave names"}
608        SetVariable WaveMatchStr, variable=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(PanelWindowName)+":WaveMatchStr")
609
610        PopupMenu SelectDataFolder,pos={10,56},size={270,21},proc=IR2C_PanelPopupControl,title="Data fldr:", help={"Select folder with data"}, bodywidth=220
611        execute("PopupMenu SelectDataFolder,mode=1,popvalue=\"---\",value= \"---;\"+IR2P_GenStringOfFolders(winNm=\""+TopPanel+"\")")
612        //PopupMenu SelectDataFolder,mode=1,popvalue="---",value= ("---;"+IR2P_GenStringOfFolders(winNm=TopPanel))
613        PopupMenu QvecDataName,pos={15,79},size={265,21},proc=IR2C_PanelPopupControl,title="Wave with X   ", help={"Select wave with data to be used on X axis (Q, diameters, etc)"}, bodywidth=200
614        execute("PopupMenu QvecDataName,mode=1,popvalue=\"---\",value= \"---;\"+IR2P_ListOfWaves(\"Xaxis\",\"*\",\""+TopPanel+"\")")
615        //PopupMenu QvecDataName,mode=1,popvalue="---",value=("---;"+IR2P_ListOfWaves("Xaxis","*",TopPanel))
616        PopupMenu IntensityDataName,pos={15,102},size={265,21},proc=IR2C_PanelPopupControl,title="Wave with Y   ", help={"Select wave with data to be used on Y data (Intensity, distributions)"}, bodywidth=200
617        execute("PopupMenu IntensityDataName,mode=1,popvalue=\"---\",value= \"---;\"+IR2P_ListOfWaves(\"Yaxis\",\"*\",\""+TopPanel+"\")")
618        //PopupMenu IntensityDataName,mode=1,popvalue="---",value=("---;"+IR2P_ListOfWaves("Yaxis","*",TopPanel))
619        PopupMenu ErrorDataName,pos={15,126},size={265,21},proc=IR2C_PanelPopupControl,title="Error Wave   ", help={"Select wave with error data"}, bodywidth=200
620        execute("PopupMenu ErrorDataName,mode=1,popvalue=\"---\",value= \"---;\"+IR2P_ListOfWaves(\"Error\",\"*\",\""+TopPanel+"\")")
621        //PopupMenu ErrorDataName,mode=1,popvalue="---",value= ("---;"+IR2P_ListOfWaves("Error","*",TopPanel))
622
623        SetVariable Qmin, pos={8,60},size={220,20}, proc=IR2C_ModelQSetVarProc,title="Min value for Q [A]   ", help={"Value of Q min "}
624        SetVariable Qmin, variable=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(PanelWindowName)+":Qmin"), limits={0,10,0}
625        SetVariable Qmax, pos={8,85},size={220,20}, proc=IR2C_ModelQSetVarProc,title="Max value for Q [A]  ", help={"Value of Q max "}
626        SetVariable Qmax, variable=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(PanelWindowName)+":Qmax"),limits={0,10,0}
627        SetVariable QNumPoints, pos={8,110},size={220,20}, proc=IR2C_ModelQSetVarProc,title="Num points in Q        ", help={"Number of points in Q "}
628        SetVariable QNumPoints, variable=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(PanelWindowName)+":QNumPoints"),limits={0,1e6,0}
629        CheckBox QLogScale,pos={100,135},size={90,14},proc=IR2C_InputPanelCheckboxProc,title="Log-Q stepping?"
630        CheckBox QLogScale,variable= $("root:Packages:IrenaControlProcs:"+possiblyQuoteName(PanelWindowName)+":QLogScale"), help={"Check, if you want to generate Q in log scale"}
631       
632        IR2C_FixDisplayedControls(TopPanel)
633
634        STRUCT WMSetVariableAction SV_Struct
635        SV_Struct.ctrlName=""
636        SV_Struct.dval=0
637        SV_Struct.win=TopPanel
638        SV_Struct.sVAL=""
639        SV_Struct.vName=""
640        SV_Struct.eventcode=2
641        IR2C_ModelQSetVarProc(SV_Struct)
642end
643
644//**********************************************************************************************************
645//**********************************************************************************************************
646//**********************************************************************************************************
647
648
649Function IR2C_NamesSetVarProc(SV_Struct) : SetVariableControl
650        STRUCT WMSetVariableAction &SV_Struct
651
652        if(SV_Struct.eventcode==1 || SV_Struct.eventcode==2)
653                IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
654                string TopPanel
655                TopPanel = SV_Struct.win
656                SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
657                string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations)
658                NVAR/Z SetTimeOfIndraFoldersStr = $(CntrlLocation+":SetTimeOfIndraFoldersStr")
659                NVAR/Z SetTimeOfQFoldersStr = $(CntrlLocation+":SetTimeOfQFoldersStr")
660                NVAR/Z SetTimeOfResultsFoldersStr = $(CntrlLocation+":SetTimeOfResultsFoldersStr")
661                NVAR/Z SetTimeOfUserDefFoldersStr = $(CntrlLocation+":SetTimeOfUserDefFoldersStr")
662                if(NVAR_Exists(SetTimeOfIndraFoldersStr))
663                        SetTimeOfIndraFoldersStr=0
664                endif
665                if(NVAR_Exists(SetTimeOfQFoldersStr))
666                        SetTimeOfQFoldersStr=0
667                endif
668                if(NVAR_Exists(SetTimeOfResultsFoldersStr))
669                        SetTimeOfResultsFoldersStr=0
670                endif
671                if(NVAR_Exists(SetTimeOfUserDefFoldersStr))
672                        SetTimeOfUserDefFoldersStr=0
673                endif
674        endif
675        if(SV_Struct.eventcode<1 || SV_Struct.eventcode>5)
676                return 0
677        endif
678
679end
680//**********************************************************************************************************
681//**********************************************************************************************************
682//**********************************************************************************************************
683
684
685Function IR2C_ModelQSetVarProc(SV_Struct) : SetVariableControl
686        STRUCT WMSetVariableAction &SV_Struct
687
688        if(SV_Struct.eventcode<1 || SV_Struct.eventcode>5)
689                return 0
690        endif
691        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
692        String ctrlName=SV_Struct.ctrlName
693        Variable varNum=SV_Struct.dval
694        String varStr=SV_Struct.sVal
695        String varName=SV_Struct.vName
696
697        DFref oldDf= GetDataFolderDFR()
698
699        string TopPanel=SV_Struct.win
700        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
701        SVAR ControlAllowedIrenaTypes=root:Packages:IrenaControlProcs:ControlAllowedIrenaTypes
702        SVAR ControlAllowedResultsTypes=root:Packages:IrenaControlProcs:ControlAllowedResultsTypes
703        SVAR ControlRequireErrorWvs=root:Packages:IrenaControlProcs:ControlRequireErrorWvs
704        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations)
705       
706        NVAR UseIndra2Data=$(CntrlLocation+":UseIndra2Data")
707        NVAR UseQRSData=$(CntrlLocation+":UseQRSData")
708        NVAR UseResults=$(CntrlLocation+":UseResults")
709        NVAR UseUserDefinedData=$(CntrlLocation+":UseUserDefinedData")
710        NVAR UseModelData=$(CntrlLocation+":UseModelData")
711
712        SVAR Dtf=$(CntrlLocation+":DataFolderName")
713        SVAR IntDf=$(CntrlLocation+":IntensityWaveName")
714        SVAR QDf=$(CntrlLocation+":QWaveName")
715        SVAR EDf=$(CntrlLocation+":ErrorWaveName")
716
717        setDataFolder $("root:Packages:IrenaControlProcs:"+possiblyQuoteName(TopPanel))
718
719        NVAR Qmin
720        NVAR Qmax
721        NVAR QNumPoints
722        NVAR QLogScale
723       
724        Make/O/N=(QNumPoints) ModelQ, ModelInt, ModelError
725        ModelInt = 1
726        ModelError = 0
727        if(QLogScale)   //log scale
728                ModelQ = 10^(log(Qmin)+p*((log(Qmax)-log(Qmin))/(QNumPoints-1)))
729        else
730                ModelQ = Qmin + p * (Qmax - Qmin)/(QNumPoints-1)
731        endif
732
733        Dtf = "root:Packages:IrenaControlProcs:"+possiblyQuoteName(TopPanel)+":"
734        IntDf = "ModelInt"
735        QDf = "ModelQ"
736        EDf = "ModelError"
737       
738        setDataFolder OldDf
739
740End
741
742//**********************************************************************************************************
743//**********************************************************************************************************
744//**********************************************************************************************************
745Function IR2C_FixDisplayedControls(WnName)
746        string WnName
747
748        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
749        DFref oldDf= GetDataFolderDFR()
750
751        string TopPanel=WnName
752        //GetWindow $(TopPanel), activeSW               //fix for subwindow controls... This will add teh subwidnow which is selected, I hope that means in which we operate!
753        //TopPanel=S_value
754        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
755        SVAR ControlAllowedIrenaTypes=root:Packages:IrenaControlProcs:ControlAllowedIrenaTypes
756        SVAR ControlAllowedResultsTypes=root:Packages:IrenaControlProcs:ControlAllowedResultsTypes
757        SVAR ControlRequireErrorWvs=root:Packages:IrenaControlProcs:ControlRequireErrorWvs
758        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations)
759        setDataFolder $(CntrlLocation)
760       
761        NVAR UseIndra2Data=$(CntrlLocation+":UseIndra2Data")
762        NVAR UseQRSData=$(CntrlLocation+":UseQRSData")
763        NVAR UseResults=$(CntrlLocation+":UseResults")
764        NVAR UseUserDefinedData=$(CntrlLocation+":UseUserDefinedData")
765        NVAR UseModelData=$(CntrlLocation+":UseModelData")
766
767
768        if (UseModelData)
769                PopupMenu SelectDataFolder disable=1, win=$(TopPanel)
770                PopupMenu IntensityDataName disable=1, win=$(TopPanel)
771                PopupMenu QvecDataName disable=1, win=$(TopPanel)
772                PopupMenu ErrorDataName disable=1, win=$(TopPanel)
773                SetVariable Qmin, disable=0, win=$(TopPanel)
774                SetVariable Qmax, disable=0, win=$(TopPanel)
775                SetVariable QNumPoints, disable=0, win=$(TopPanel)
776                CheckBox QLogScale,disable=0, win=$(TopPanel)
777       
778        else
779                PopupMenu SelectDataFolder disable=0, win=$(TopPanel)
780                PopupMenu IntensityDataName disable=0, win=$(TopPanel)
781                PopupMenu QvecDataName disable=0, win=$(TopPanel)
782                PopupMenu ErrorDataName disable=0, win=$(TopPanel)
783                SetVariable Qmin, disable=1, win=$(TopPanel)
784                SetVariable Qmax, disable=1, win=$(TopPanel)
785                SetVariable QNumPoints, disable=1, win=$(TopPanel)
786                CheckBox QLogScale,disable=1, win=$(TopPanel)
787        endif
788       
789       
790        setDataFolder OldDf
791end
792//**********************************************************************************************************
793//**********************************************************************************************************
794//**********************************************************************************************************
795//**********************************************************************************************************
796//**********************************************************************************************************
797//**********************************************************************************************************
798
799Function IR2C_InputPanelCheckboxProc(CB_Struct)
800        STRUCT WMCheckboxAction &CB_Struct
801
802        if(CB_Struct.eventcode<1 ||CB_Struct.eventcode>2)
803                return 0
804        endif
805       
806        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
807        String ctrlName=CB_Struct.ctrlName
808        Variable checked=CB_Struct.checked
809        DFref oldDf= GetDataFolderDFR()
810
811        string TopPanel=CB_Struct.win
812        //string TopPanel=WinName(0,65)
813        //GetWindow $(TopPanel), activeSW
814        //TopPanel=S_value
815        if(CB_Struct.eventcode!=2)
816                return 0
817        endif
818       
819        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
820        SVAR ControlAllowedIrenaTypes=root:Packages:IrenaControlProcs:ControlAllowedIrenaTypes
821        SVAR ControlAllowedResultsTypes=root:Packages:IrenaControlProcs:ControlAllowedResultsTypes
822        SVAR ControlRequireErrorWvs=root:Packages:IrenaControlProcs:ControlRequireErrorWvs
823        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations,":",";")
824        setDataFolder $(CntrlLocation)
825       
826        NVAR UseIndra2Data=$(CntrlLocation+":UseIndra2Data")
827        NVAR UseQRSData=$(CntrlLocation+":UseQRSData")
828        NVAR UseResults=$(CntrlLocation+":UseResults")
829        NVAR UseUserDefinedData=$(CntrlLocation+":UseUserDefinedData")
830        NVAR UseModelData=$(CntrlLocation+":UseModelData")
831
832        NVAR/Z SetTimeOfQFoldersStr = $(CntrlLocation+":SetTimeOfQFoldersStr")
833        NVAR/Z SetTimeOfIndraFoldersStr = $(CntrlLocation+":SetTimeOfIndraFoldersStr")
834        NVAR/Z SetTimeOfResultsFoldersStr = $(CntrlLocation+":SetTimeOfResultsFoldersStr")
835
836        Execute ("SetVariable WaveMatchStr disable=0, win="+TopPanel)
837        Execute ("SetVariable FolderMatchStr disable=0, win="+TopPanel)
838
839        if (cmpstr(ctrlName,"UseIndra2Data")==0)
840                //here we control the data structure checkbox
841                if (checked)
842                        UseQRSData=0
843                        UseResults=0
844                        UseUserDefinedData=0
845                        UseModelData=0
846                        SetTimeOfIndraFoldersStr = 0
847                        ControlRequireErrorWvs = ReplaceStringByKey(TopPanel, ControlRequireErrorWvs, "1"  , ":"  , ";")                //Indra 2 data do require errors, let user change that later, if needed.
848                        Execute ("SetVariable WaveMatchStr disable=1, win="+TopPanel)
849                endif
850        endif
851        if (cmpstr(ctrlName,"UseQRSData")==0)
852                //here we control the data structure checkbox
853                if (checked)
854                        UseIndra2Data=0
855                        UseResults=0
856                        UseUserDefinedData=0
857                        UseModelData=0
858                        SetTimeOfQFoldersStr = 0
859                        ControlRequireErrorWvs = ReplaceStringByKey(TopPanel, ControlRequireErrorWvs, "0"  , ":"  , ";")                //no require errors, let user change that later, if needed.
860                endif
861        endif
862        if (cmpstr(ctrlName,"UseResults")==0)
863                //here we control the data structure checkbox
864                if (checked)
865                        UseIndra2Data=0
866                        UseQRSData=0
867                        UseUserDefinedData=0
868                        UseModelData=0
869                        SetTimeOfResultsFoldersStr = 0
870                        ControlRequireErrorWvs = ReplaceStringByKey(TopPanel, ControlRequireErrorWvs, "0"  , ":"  , ";")                //no require errors, let user change that later, if needed.
871                        Execute ("SetVariable WaveMatchStr disable=1, win="+TopPanel)
872                endif
873        endif
874        if (cmpstr(ctrlName,"UseUserDefinedData")==0)
875                //here we control the data structure checkbox
876                if (checked)
877                        UseIndra2Data=0
878                        UseQRSData=0
879                        UseResults=0
880                        ControlRequireErrorWvs = ReplaceStringByKey(TopPanel, ControlRequireErrorWvs, "0"  , ":"  , ";")                //no require errors, let user change that later, if needed.
881                        UseModelData=0
882                endif
883        endif
884        if (cmpstr(ctrlName,"UseModelData")==0)
885                //here we control the data structure checkbox
886                if (checked)
887                        UseIndra2Data=0
888                        UseQRSData=0
889                        UseResults=0
890                        UseUserDefinedData=0
891                        Execute ("SetVariable WaveMatchStr disable=1, win="+TopPanel)
892                        Execute ("SetVariable FolderMatchStr disable=1, win="+TopPanel)
893                endif
894        endif
895       
896       
897        if ( cmpstr(ctrlName,"UseModelData")==0 || cmpstr(ctrlName,"QLogScale")==0)
898                STRUCT WMSetVariableAction SV_Struct
899                SV_Struct.ctrlName=""
900                SV_Struct.dval=0
901                SV_Struct.win=TopPanel
902                SV_Struct.sVAL=""
903                SV_Struct.vName=""
904                SV_Struct.eventcode=2
905                IR2C_ModelQSetVarProc(SV_Struct)                        //here we create the model and stuff the values in the Dtf etc...
906        else                            //in case we do not use model, this is the right thing to do...
907                SVAR Dtf=$(CntrlLocation+":DataFolderName")
908                SVAR IntDf=$(CntrlLocation+":IntensityWaveName")
909                SVAR QDf=$(CntrlLocation+":QWaveName")
910                SVAR EDf=$(CntrlLocation+":ErrorWaveName")
911                        Dtf="---"
912                        IntDf="---"
913                        QDf="---"
914                        EDf="---"
915                        string TpPnl=TopPanel
916                        PopupMenu SelectDataFolder mode=1, win=$(TopPanel)
917                //      PopupMenu IntensityDataName mode=1,value= #"\"---;\"+IR2P_ListOfWaves(\"Yaxis\",\"*\",\""+TpPnl+"\")", win=$(TopPanel)
918                        Execute ("PopupMenu IntensityDataName mode=1, value=\"---;\"+IR2P_ListOfWaves(\"Yaxis\",\"*\",\""+TpPnl+"\"), win="+TopPanel)
919                        Execute ("PopupMenu QvecDataName mode=1, value=\"---;\"+IR2P_ListOfWaves(\"Xaxis\",\"*\",\""+TpPnl+"\"), win="+TopPanel)
920                        Execute ("PopupMenu ErrorDataName mode=1, value=\"---;\"+IR2P_ListOfWaves(\"Error\",\"*\",\""+TpPnl+"\"), win="+TopPanel)
921                        //PopupMenu QvecDataName mode=1,value= #"\"---;\"+IR2P_ListOfWaves(\"Xaxis\",\"*\")", win=$(TopPanel)
922                        //PopupMenu ErrorDataName mode=1,value= #"\"---;\"+IR2P_ListOfWaves(\"Error\",\"*\")", win=$(TopPanel)
923        endif
924        IR2C_FixDisplayedControls(TopPanel)
925       
926        setDataFolder OldDf
927end
928//**********************************************************************************************************
929//**********************************************************************************************************
930//**********************************************************************************************************
931
932Function/T IR2P_CleanUpPackagesFolder(FolderList)
933                string FolderList
934               
935        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
936        FolderList = GrepList(FolderList, "root:packages" ,1 , ";" )
937        FolderList = GrepList(FolderList, "root:Packages" ,1 , ";" )
938        FolderList = GrepList(FolderList, "root:raw" ,1 , ";" )
939        FolderList = GrepList(FolderList, "root:Raw" ,1 , ";" )
940        return FolderList
941end
942//**********************************************************************************************************
943//**********************************************************************************************************
944//**********************************************************************************************************
945
946Function/T IR2P_GenStringOfFolders([winNm])
947        string winNm
948
949        //variable startTicks=ticks
950        //part to copy everywhere...   
951        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
952        DFref oldDf= GetDataFolderDFR()
953
954        string TopPanel
955        if( ParamIsDefault(winNm))
956                TopPanel=WinName(0,65)
957                winNm = TopPanel
958        else
959                TopPanel=winNm
960        endif
961        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
962        SVAR ControlAllowedIrenaTypes=root:Packages:IrenaControlProcs:ControlAllowedIrenaTypes
963        SVAR ControlAllowedUserTypes=root:Packages:IrenaControlProcs:ControlAllowedUserTypes
964        SVAR ControlAllowedResultsTypes=root:Packages:IrenaControlProcs:ControlAllowedResultsTypes
965        SVAR ControlRequireErrorWvs=root:Packages:IrenaControlProcs:ControlRequireErrorWvs
966        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations)
967        string LocallyAllowedUserData=StringByKey(TopPanel, ControlAllowedUserTypes,"=",">")
968        string LocallyAllowedIndra2Data=StringByKey(TopPanel, ControlAllowedIrenaTypes,"=",">")
969        string LocallyAllowedResultsData=StringByKey(TopPanel, ControlAllowedResultsTypes,"=",">")
970        SVAR/Z FolderMatchStr=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(winNm)+":FolderMatchStr")
971        SVAR/Z WaveMatchStr = $("root:Packages:IrenaControlProcs:"+possiblyQuoteName(winNm)+":WaveMatchStr")
972        if(!SVAR_Exists(FolderMatchStr))
973                string/g $("root:Packages:IrenaControlProcs:"+possiblyQuoteName(winNm)+":FolderMatchStr")
974                SVAR FolderMatchStr=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(winNm)+":FolderMatchStr")
975                FolderMatchStr=""
976        endif
977        if(!SVAR_Exists(WaveMatchStr))
978                string/g $("root:Packages:IrenaControlProcs:"+possiblyQuoteName(winNm)+":WaveMatchStr")
979                SVAR WaveMatchStr=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(winNm)+":WaveMatchStr")
980                WaveMatchStr=""
981        endif
982        setDataFolder $(CntrlLocation)
983        NVAR UseIndra2Structure=$(CntrlLocation+":UseIndra2Data")
984        NVAR UseQRSStructure=$(CntrlLocation+":UseQRSData")
985        NVAR UseResults=$(CntrlLocation+":UseResults")
986        NVAR UseUserDefinedData=$(CntrlLocation+":UseUserDefinedData")
987        SVAR Dtf=$(CntrlLocation+":DataFolderName")
988        SVAR IntDf=$(CntrlLocation+":IntensityWaveName")
989        SVAR QDf=$(CntrlLocation+":QWaveName")
990        SVAR EDf=$(CntrlLocation+":ErrorWaveName")
991        ///end of common block 
992        string ListOfQFolders
993        string result="", tempResult, resultShort=""
994        variable i, j, StartTime, AlreadyIn
995        string tempStr="", temp1, temp2, temp3, FixedMatchString
996        variable StaleWave=1
997
998
999        if (UseIndra2Structure)
1000                SVAR/Z ListOfIndraFolders = $(CntrlLocation+":ListOfIndraFolders")
1001                NVAR/Z SetTimeOfIndraFoldersStr = $(CntrlLocation+":SetTimeOfIndraFoldersStr")
1002                if(NVAR_Exists(SetTimeOfIndraFoldersStr) && SVAR_Exists(ListOfIndraFolders) && (datetime - SetTimeOfIndraFoldersStr)<10)
1003                        result = ListOfIndraFolders
1004                        SVAR/Z DataFldrListOfFolder = $(CntrlLocation+":DataFldrListOfFolder")
1005                        if(SVAR_Exists(DataFldrListOfFolder))
1006                                resultShort = DataFldrListOfFolder
1007                        else
1008                                resultShort = IR2P_CreateFolderPathLists(CntrlLocation, result)
1009                        endif
1010                        SetTimeOfIndraFoldersStr = datetime                     //lets keep it as updated here...
1011                else
1012                        tempResult=IN2G_FindFolderWithWvTpsList("root:USAXS:", 10,LocallyAllowedIndra2Data, 1) //contains list of all folders which contain any of the tested Intensity waves...
1013                        //match to user mask using greplist
1014                        if(strlen(FolderMatchStr)>0)
1015                                tempResult=GrepList(tempResult, FolderMatchStr)
1016                        endif
1017                        //done, now rest...
1018                        //now prune the folders off the ones which do not contain full triplet of waves...
1019                        For(j=0;j<ItemsInList(tempResult);j+=1)                 //each folder one by one
1020                                temp1 = stringFromList(j,tempResult)
1021                                for(i=0;i<ItemsInList(LocallyAllowedIndra2Data);i+=1)                   //each type of data one by one...
1022                                        temp2=stringFromList(i,LocallyAllowedIndra2Data)
1023                                        if(cmpstr("---",IR2P_CheckForRightIN2TripletWvs(TopPanel,stringFromList(j,tempResult),stringFromList(i,LocallyAllowedIndra2Data)))!=0 )//&& AlreadyIn<1)
1024                                                result += stringFromList(j,tempResult)+";"
1025                                                break
1026                                        endif
1027                                endfor
1028                        endfor 
1029                        string/G $(CntrlLocation+":ListOfIndraFolders")
1030                        variable/g $(CntrlLocation+":SetTimeOfIndraFoldersStr")
1031                        SVAR/Z ListOfIndraFolders = $(CntrlLocation+":ListOfIndraFolders")
1032                        NVAR/Z SetTimeOfIndraFoldersStr = $(CntrlLocation+":SetTimeOfIndraFoldersStr")
1033                        ListOfIndraFolders = result
1034                        resultShort = IR2P_CreateFolderPathLists(CntrlLocation, result)
1035                        SetTimeOfIndraFoldersStr = datetime
1036                endif   
1037        elseif (UseQRSStructure)
1038                        //Wave/Z/T ResultingWave=$(CntrlLocation+":ResultingWave")
1039                        SVAR/Z  ListOfQFoldersLookup = $(CntrlLocation+":ListOfQFolders")
1040                        NVAR/Z SetTimeOfQFoldersStr = $(CntrlLocation+":SetTimeOfQFoldersStr")
1041                        if(SVAR_Exists(ListOfQFoldersLookup) && (datetime - SetTimeOfQFoldersStr) < 10)
1042                                result=ListOfQFoldersLookup     
1043                                SVAR/Z DataFldrListOfFolder = $(CntrlLocation+":DataFldrListOfFolder")
1044                                if(SVAR_Exists(DataFldrListOfFolder))
1045                                        resultShort = DataFldrListOfFolder
1046                                else
1047                                        resultShort = IR2P_CreateFolderPathLists(CntrlLocation, result)
1048                                endif
1049                                SetTimeOfQFoldersStr = datetime
1050                                //print "Used cache"
1051                        else
1052                                //make/N=0/O/T $(CntrlLocation+":ResultingWave")
1053                                //Wave/T ResultingWave=$(CntrlLocation+":ResultingWave")
1054                                make/N=0/T/Free TempResultingWave
1055                                string/g  $(CntrlLocation+":ListOfQFolders")
1056                                variable/g  $(CntrlLocation+":SetTimeOfQFoldersStr")
1057                                SVAR/Z  ListOfQFoldersLookup = $(CntrlLocation+":ListOfQFolders")
1058                                NVAR/Z SetTimeOfQFoldersStr = $(CntrlLocation+":SetTimeOfQFoldersStr")
1059                                IR2P_FindFolderWithWaveTypesWV("root:", 10, "(?i)^r|i$", 1, TempResultingWave)
1060                                if(strlen(FolderMatchStr)>0)
1061                                     // FixedMatchString = IR2C_PreparematchString(FolderMatchStr)
1062                                      FixedMatchString = (FolderMatchStr)
1063                                        variable ii
1064                                        for(ii=numpnts(TempResultingWave)-1;ii>=0;ii-=1)
1065                                                if(!GrepString(TempResultingWave[ii],FixedMatchString))
1066                                                        DeletePoints ii, 1, TempResultingWave
1067                                                endif
1068                                        endfor
1069                                endif
1070                                ListOfQFolders=IR2P_CheckForRightQRSTripletWvs(TopPanel,TempResultingWave,WaveMatchStr)         
1071                                //match to user mask using greplist
1072                                //done, now rest...
1073                                ListOfQFolders=IR2P_CleanUpPackagesFolder(ListOfQFolders)
1074                                ListOfQFolders=IR2P_RemoveDuplicateStrfLst(ListOfQFolders)
1075                                ListOfQFoldersLookup = ListOfQFolders
1076                                result=ListOfQFolders
1077                                resultShort = IR2P_CreateFolderPathLists(CntrlLocation, result)
1078                                SetTimeOfQFoldersStr = datetime
1079                                //print "recalculated lookup"
1080                        endif
1081        elseif (UseResults)
1082                SVAR/Z ListOfResultsFolders = $(CntrlLocation+":ListOfResultsFolders")
1083                NVAR/Z SetTimeOfResultsFoldersStr = $(CntrlLocation+":SetTimeOfResultsFoldersStr")
1084                if(NVAR_Exists(SetTimeOfResultsFoldersStr) && SVAR_Exists(ListOfResultsFolders) && (datetime - SetTimeOfResultsFoldersStr)<5)
1085                        result = ListOfResultsFolders
1086                        SVAR/Z DataFldrListOfFolder = $(CntrlLocation+":DataFldrListOfFolder")
1087                        if(SVAR_Exists(DataFldrListOfFolder))
1088                                resultShort = DataFldrListOfFolder
1089                        else
1090                                resultShort = IR2P_CreateFolderPathLists(CntrlLocation, result)
1091                        endif
1092                        SetTimeOfResultsFoldersStr = datetime
1093                else
1094                        temp3=""
1095                        For(i=0;i<ItemsInList(LocallyAllowedResultsData);i+=1)
1096                                temp3+=stringFromList(i,LocallyAllowedResultsData)+"*;"
1097                        endfor
1098                        tempResult=IN2G_FindFolderWithWvTpsList("root:", 10,temp3, 1) //contains list of all folders which contain any of the tested Y waves... But may not contain the whole duplex of waves...
1099                                        //match to user mask using greplist
1100                        if(strlen(FolderMatchStr)>0)
1101                                //tempResult=GrepList(tempResult, IR2C_PreparematchString(FolderMatchStr) )
1102                                tempResult=GrepList(tempResult, (FolderMatchStr) )
1103                        endif
1104                        //done, now rest...
1105                        tempResult=IR2P_CleanUpPackagesFolder(tempResult)
1106                        //the following will remove the folders which accidentally contain not-full duplex of waves and display ONLY folders with the right duplexes of waves....
1107                        result = IR2P_CheckForRightINResultsWvs(TopPanel,tempResult,WaveMatchStr)
1108                        string/G $(CntrlLocation+":ListOfResultsFolders")
1109                        variable/g $(CntrlLocation+":SetTimeOfResultsFoldersStr")
1110                        SVAR/Z ListOfResultsFolders = $(CntrlLocation+":ListOfResultsFolders")
1111                        NVAR/Z SetTimeOfResultsFoldersStr = $(CntrlLocation+":SetTimeOfResultsFoldersStr")
1112                        ListOfResultsFolders = result
1113                        resultShort = IR2P_CreateFolderPathLists(CntrlLocation, result)
1114                        SetTimeOfResultsFoldersStr = datetime
1115                        //print "recalculated lookup"
1116                endif
1117        elseif (UseUserDefinedData)
1118                SVAR/Z ListOfUserDefinedFolders = $(CntrlLocation+":ListOfUserDefinedFolders")
1119                NVAR/Z SetTimeOfUserDefFoldersStr = $(CntrlLocation+":SetTimeOfUserDefFoldersStr")
1120                if(NVAR_Exists(SetTimeOfUserDefFoldersStr) && SVAR_Exists(ListOfUserDefinedFolders) && (datetime - SetTimeOfUserDefFoldersStr)<5)
1121                        result = ListOfUserDefinedFolders
1122                        SVAR/Z DataFldrListOfFolder = $(CntrlLocation+":DataFldrListOfFolder")
1123                        if(SVAR_Exists(DataFldrListOfFolder))
1124                                resultShort = DataFldrListOfFolder
1125                        else
1126                                resultShort = IR2P_CreateFolderPathLists(CntrlLocation, result)
1127                        endif
1128                        SetTimeOfUserDefFoldersStr = datetime
1129                else
1130                        tempResult=IN2G_FindFolderWithWvTpsList("root:", 10,LocallyAllowedUserData, 1) //contains list of all folders which contain any of the tested Intensity waves...
1131                        //match to user mask using greplist
1132                        if(strlen(FolderMatchStr)>0)
1133                                //tempResult=GrepList(tempResult, IR2C_PreparematchString(FolderMatchStr) )
1134                                tempResult=GrepList(tempResult, (FolderMatchStr) )
1135                        endif
1136                        //done, now rest...
1137                        tempResult=IR2P_CleanUpPackagesFolder(tempResult)
1138                        //now prune the folders off the ones which do not contain full triplet of waves...
1139                        For(j=0;j<ItemsInList(tempResult);j+=1)                 //each folder one by one
1140                                temp1 = stringFromList(j,tempResult)
1141                                for(i=0;i<ItemsInList(LocallyAllowedUserData);i+=1)                     //each type of data one by one...
1142                                        temp2=stringFromList(i,LocallyAllowedUserData)
1143                                        if(cmpstr("---",IR2P_CheckForRightUsrTripletWvs(TopPanel,stringFromList(j,tempResult),stringFromList(i,LocallyAllowedUserData), WaveMatchStr))!=0 )//&& AlreadyIn<1)
1144                                                result += stringFromList(j,tempResult)+";"
1145                                                break
1146                                        endif
1147                                endfor
1148                        endfor 
1149                        string/G $(CntrlLocation+":ListOfUserDefinedFolders")
1150                        variable/g $(CntrlLocation+":SetTimeOfUserDefFoldersStr")
1151                        SVAR/Z ListOfUserDefinedFolders = $(CntrlLocation+":ListOfUserDefinedFolders")
1152                        NVAR/Z SetTimeOfUserDefFoldersStr = $(CntrlLocation+":SetTimeOfUserDefFoldersStr")
1153                        ListOfUserDefinedFolders = result
1154                        resultShort = IR2P_CreateFolderPathLists(CntrlLocation, result)
1155                        SetTimeOfUserDefFoldersStr = datetime
1156                endif
1157        else
1158                result=IN2G_NewFindFolderWithWaveTypes("root:", 10, "*", 1)         //any data.
1159            //match to user mask using greplist
1160            if(strlen(FolderMatchStr)>0)
1161                  result=GrepList(result, (FolderMatchStr) )
1162            endif
1163            //and prepare short list
1164                //match to user mask using greplist
1165                if(strlen(FolderMatchStr)>0)
1166                        result=GrepList(result, (FolderMatchStr) )
1167                endif
1168           //result = IR2P_CheckForRightUsrTripletWvs(TopPanel, result,"*",IR2C_PreparematchString(WaveMatchStr))
1169                //done, now rest...
1170                resultShort = IR2P_CreateFolderPathLists(CntrlLocation, result)
1171                SetTimeOfUserDefFoldersStr = datetime
1172        endif
1173        setDataFolder OldDf
1174        return resultShort
1175end
1176//*****************************************************************************************************************
1177//*****************************************************************************************************************
1178Function/T IR2P_CreateFolderPathLists(CntrlLocation, result)
1179        string CntrlLocation, result
1180        //create short list...
1181        String LastFolderPath, tempStrItem, FolderPath, resultShortWP
1182        string resultShort
1183        variable i
1184        resultShortWP=""
1185        LastFolderPath = ""
1186        resultShort = ""
1187        for(i=0;i<ItemsInList(result,";");i+=1)
1188                tempStrItem = stringFromList(i,result)
1189                FolderPath = RemoveFromList(stringFromList(ItemsInList(tempStrItem,":")-1, tempStrItem,":"), tempStrItem,":")
1190                if(!stringMatch(FolderPath, LastFolderPath ))
1191                        resultShort+=FolderPath+" ----------- "+";"
1192                        resultShortWP+=FolderPath+" ----------- "+";"
1193                endif
1194                resultShort+=stringFromList(ItemsInList(tempStrItem,":")-1,tempStrItem,":")+";"
1195                resultShortWP+=tempStrItem+";"
1196                LastFolderPath = FolderPath
1197        endfor
1198        string/g $(CntrlLocation+":RealLongListOfFolder")
1199        SVAR RealLongListOfFolder = $(CntrlLocation+":RealLongListOfFolder")
1200        RealLongListOfFolder = result
1201        string/g $(CntrlLocation+":ShortListOfFolders")
1202        SVAR ShortListOfFolders = $(CntrlLocation+":ShortListOfFolders")
1203        ShortListOfFolders = resultShortWP
1204        string/g $(CntrlLocation+":DataFldrListOfFolder")
1205        SVAR DataFldrListOfFolder = $(CntrlLocation+":DataFldrListOfFolder")
1206        DataFldrListOfFolder = resultShort
1207        return resultShort
1208end
1209
1210
1211//static Function/T IR2P_RemoveDuplicateStrfLst(StrList)
1212//      string StrList
1213//
1214//     
1215//      IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1216//      variable i
1217//      string result=""///stringFromList(0,StrList,";")+";"
1218//      string tempStr
1219//      For(i=0;i<ItemsInList(StrList,";");i+=1)
1220//              tempStr=stringFromList(i,StrList,";")
1221//              if(!stringmatch(result, "*"+tempStr+"*" ))              //surprisingly, this is faster that GrepString...
1222//              //if(!GrepString(result, stringFromList(i,StrList,";")))
1223//                      result+=tempStr+";"
1224//              endif
1225//      endfor
1226//      return result
1227//end
1228//
1229
1230Function/T IR2P_RemoveDuplicateStrfLst(StrList)
1231        string StrList
1232
1233        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1234        if(ItemsInList(StrList)>1)
1235                Wave/T wr = ListToTextWave(StrList, ";")        // Returns a free wave
1236                FindDuplicates/RT=StrWvUnique wr
1237                String result=""
1238                wfprintf result, "%s;", StrWvUnique                     // ; separated list
1239        else
1240                result = StrList
1241        endif
1242        return result
1243end
1244
1245//static Function/T IR2P_RemoveDuplicateStrfLstOld(StrList)             //this does not work, I need the most likely one stay at front.
1246//      string StrList                          //this is faster, but...
1247//     
1248//      String sortedList=SortList(StrList)
1249//      string tempStr1, tempStr2
1250//      variable i
1251//      string result=""
1252//      tempStr1 = stringFromList(0,sortedList,";")
1253//      result=tempStr1+";"
1254//      For(i=1;i<ItemsInList(sortedList,";");i+=1)
1255//              tempStr2 = stringFromList(i,sortedList,";")
1256//              if(!stringmatch(tempStr1, tempStr2))            //surprisingly, this is faster that GrepString...
1257//                      result+=tempStr2+";"
1258//              endif
1259//              tempStr1=tempStr2
1260//      endfor
1261//      return result
1262//end
1263
1264//*****************************************************************************************************************
1265//*****************************************************************************************************************
1266//*****************************************************************************************************************
1267
1268static Function/T IR2P_ReturnListQRSFolders(ListOfQFolders, AllowQROnly)
1269        string ListOfQFolders
1270        variable AllowQROnly
1271       
1272        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1273        if(cmpstr(ListOfQFolders,"---")==0)
1274                return "---"
1275        endif
1276       
1277        string result, tempStringQ, tempStringR, tempStringS, nowFolder,oldDf
1278        oldDf=GetDataFolder(1)
1279        variable i, j
1280        result=""
1281        string tempStr
1282        For(i=0;i<ItemsInList(ListOfQFolders);i+=1)
1283                NowFolder= stringFromList(i,ListOfQFolders)
1284                setDataFolder NowFolder
1285                tempStr=IN2G_ConvertDataDirToList(DataFolderDir(2))
1286                tempStringQ=IR2P_ListOfWavesOfType("q*",tempStr)+IR2P_ListOfWavesOfType("d*",tempStr)+IR2P_ListOfWavesOfType("t*",tempStr)+IR2P_ListOfWavesOfType("m*",tempStr)
1287                tempStringR=IR2P_ListOfWavesOfType("r*",tempStr)
1288                tempStringS=IR2P_ListOfWavesOfType("s*",tempStr)
1289                For (j=0;j<ItemsInList(tempStringQ);j+=1)
1290                        if(AllowQROnly)
1291                                if (stringMatch(tempStringR,"*r"+StringFromList(j,tempStringQ)[1,inf]+";*"))
1292                                        result+=NowFolder+";"
1293                                        break
1294                                endif
1295                        else
1296                                if (stringMatch(tempStringR,"*r"+StringFromList(j,tempStringQ)[1,inf]+";*") && stringMatch(tempStringS,"*s"+StringFromList(j,tempStringQ)[1,inf]+";*"))
1297                                        result+=NowFolder+";"
1298                                        break
1299                                endif
1300                        endif
1301                endfor
1302                               
1303        endfor
1304        setDataFOlder oldDf
1305        return result
1306
1307end
1308
1309
1310//*****************************************************************************************************************
1311//*****************************************************************************************************************
1312//*****************************************************************************************************************
1313//*****************************************************************************************************************
1314//*****************************************************************************************************************
1315//**********************************************************************************************************
1316//**********************************************************************************************************
1317static Function/T IR2P_CheckForRightINResultsWvs(TopPanel, FullFldrNames,WNMStr)
1318        string TopPanel, FullFldrNames, WNMStr
1319
1320        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1321        DFref oldDf= GetDataFolderDFR()
1322
1323        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
1324        SVAR ControlAllowedIrenaTypes=root:Packages:IrenaControlProcs:ControlAllowedIrenaTypes
1325        SVAR ControlAllowedResultsTypes=root:Packages:IrenaControlProcs:ControlAllowedResultsTypes
1326        SVAR ControlRequireErrorWvs=root:Packages:IrenaControlProcs:ControlRequireErrorWvs
1327        SVAR XwaveDataTypesLookup=root:Packages:IrenaControlProcs:XwaveDataTypesLookup
1328        SVAR EwaveDataTypesLookup=root:Packages:IrenaControlProcs:EwaveDataTypesLookup
1329        SVAR ResultsDataTypesLookup=root:Packages:IrenaControlProcs:ResultsDataTypesLookup
1330        SVAR ResultsEDataTypesLookup = root:Packages:IrenaControlProcs:ResultsEDataTypesLookup
1331       
1332        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations)
1333        string LocallyAllowedIndra2Data=StringByKey(TopPanel, ControlAllowedIrenaTypes,"=",">")
1334        string LocallyAllowedResultsData=StringByKey(TopPanel, ControlAllowedResultsTypes,"=",">")
1335        string XwaveType//=stringByKey(DataTypeSearchedFor,XwaveDataTypesLookup)
1336        string EwaveType//=stringByKey(DataTypeSearchedFor,EwaveDataTypesLookup)
1337        variable RequireErrorWvs = numberByKey(TopPanel, ControlRequireErrorWvs)
1338        string result=""
1339        string tempResult="" , FullFldrName
1340        variable i,j,jj, matchX=0,matchE=0
1341        string AllWaves, allYwaves, currentYWave,currentXWave, currentEwave, TMPX1, TMPX2
1342       
1343        for(i=0;i<ItemsInList(FullFldrNames);i+=1)
1344                FullFldrName = stringFromList(i,FullFldrNames)
1345                AllWaves = IN2G_CreateListOfItemsInFolder(FullFldrName,2)
1346//              if(strlen(WNMStr)==0 || GrepString(AllWaves, IR2C_PrepareMatchString(WNMStr)))          //this is not supported for results... Sorry :-)
1347                        matchX=0
1348                        tempresult=""
1349                        For(j=0;j<ItemsInList(LocallyAllowedResultsData);j+=1)
1350                                allYwaves=IR2P_ListOfWavesOfType(stringFromList(j,LocallyAllowedResultsData)+"_*",AllWaves)
1351                                For(jj=0;jj<ItemsInList(allYWaves);jj+=1)
1352                                        currentYWave=stringFromList(jj,AllYWaves)
1353                                        currentXWave = StringByKey(StringFromList(0,currentYWave,"_"), ResultsDataTypesLookup)
1354                                        TMPX1 = STRINGFROMLIST(0,currentXWave,",")
1355                                        TMPX2 = stringfromList(1,currentXWave,",")
1356                                        if(strlen(TMPX2)<1)
1357                                                TMPX2="tndksno jiorhew"
1358                                        endif
1359                                        currentEwave = StringByKey(StringFromList(0,currentYWave,"_"), ResultsEDataTypesLookup)
1360                                        //if(stringmatch(";"+AllWaves, "*;"+currentXWave+"_"+StringFromList(1,currentYWave,"_")+"*" ) || cmpstr("x-scaling",currentXWave)==0)
1361                                        if(GrepString(AllWaves, TMPX1+"_"+StringFromList(1,currentYWave,"_") ) || cmpstr("x-scaling",currentXWave)==0 || GrepString(AllWaves, TMPX2+"_"+StringFromList(1,currentYWave,"_") ) )
1362                                                matchX=1
1363                                                tempresult=FullFldrName+";"
1364                                                break
1365                                        endif
1366                                endfor
1367                                if(matchX)
1368                                        break   
1369                                endif
1370                        endfor
1371                        result+=tempresult
1372//              endif
1373        endfor
1374        setDataFolder OldDf
1375        if(strlen(result)>1)
1376                return result
1377        else
1378                return "---"
1379        endif
1380end
1381//*****************************************************************************************************************
1382//*****************************************************************************************************************
1383//*****************************************************************************************************************
1384//**********************************************************************************************************
1385//*****************************************************************************************************************
1386//*****************************************************************************************************************
1387//*****************************************************************************************************************
1388//**********************************************************************************************************
1389//**********************************************************************************************************
1390static Function/T IR2P_CheckForRightQRSTripletWvs(TopPanel, ResultingWave,WNMStr)
1391        string TopPanel
1392        wave/T ResultingWave
1393        string WNMStr                   //waveName match string used by user...
1394        //FullFldrNames
1395
1396        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1397        DFref oldDf= GetDataFolderDFR()
1398
1399        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
1400        SVAR ControlAllowedIrenaTypes=root:Packages:IrenaControlProcs:ControlAllowedIrenaTypes
1401        SVAR ControlAllowedResultsTypes=root:Packages:IrenaControlProcs:ControlAllowedResultsTypes
1402        SVAR ControlRequireErrorWvs=root:Packages:IrenaControlProcs:ControlRequireErrorWvs
1403        SVAR XwaveDataTypesLookup=root:Packages:IrenaControlProcs:XwaveDataTypesLookup
1404        SVAR EwaveDataTypesLookup=root:Packages:IrenaControlProcs:EwaveDataTypesLookup
1405        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations)
1406        string LocallyAllowedIndra2Data=StringByKey(TopPanel, ControlAllowedIrenaTypes,"=",">")
1407        string LocallyAllowedResultsData=StringByKey(TopPanel, ControlAllowedResultsTypes,"=",">")
1408        variable RequireErrorWvs = numberByKey(TopPanel, ControlRequireErrorWvs)
1409        string result=""
1410        string tempResult="" , FullFldrName
1411        variable i,j, matchX=0,matchE=0, matchU=0
1412        string AllWaves
1413        string allRwaves
1414        string tempStr
1415        string ShortWaveList
1416
1417        variable startTime=ticks       
1418//      for(i=0;i<ItemsInList(FullFldrNames);i+=1)                      //this looks for qrs tripplets
1419//              FullFldrName = stringFromList(i,FullFldrNames)
1420        for(i=0;i<numpnts(ResultingWave);i+=1)                  //this looks for qrs tripplets
1421                FullFldrName = ResultingWave[i]
1422                AllWaves = IN2G_CreateListOfItemsInFolder(FullFldrName,2)
1423                //allRwaves=IR2P_ListOfWavesOfType("r*",AllWaves)
1424                allRwaves=GrepList(AllWaves,"(?i)^r")
1425                tempresult=""
1426                        if(strlen(WNMStr)==0 || GrepString(allRwaves, IR2C_PrepareMatchString(WNMStr)))
1427                                for(j=0;j<ItemsInList(allRwaves);j+=1)
1428                                        matchX=0
1429                                        matchE=0
1430                                        tempStr = stringFromList(j,allRwaves)[1,inf]
1431                                        tempStr = IN2G_CleanStringForgrep(tempStr)
1432                                        //ShortWaveList = GrepList(AllWaves, "q"+tempStr )+GrepList(AllWaves, "az"+tempStr )+GrepList(AllWaves, "d"+tempStr )+GrepList(AllWaves, "t"+tempStr )+GrepList(AllWaves, "m"+tempStr )
1433                                        ShortWaveList = GrepList(AllWaves, "(?i)[qzdtm]"+tempStr) //not sure if this really works for az, needs to be tested.
1434                                        if(strlen(ShortWaveList)>0)
1435                                                matchX=1
1436                                        endif
1437                                        //if(stringmatch(";"+AllWaves, ";*q"+tempStr+";*" )||stringmatch(";"+AllWaves, ";*az"+tempStr+";*" )||stringmatch(";"+AllWaves, ";*d"+tempStr+";*" )||stringmatch(";"+AllWaves, ";*t"+tempStr+";*" )||(stringmatch(";"+AllWaves, ";*m"+tempStr+";*" )&&!stringmatch(";"+AllWaves, ";*dsm"+tempStr+";*" )))
1438                                        //      matchX=1
1439                                        //endif
1440                                        ShortWaveList = GrepList(AllWaves, "(?i)s"+tempStr) //not sure if this really works for az, needs to be tested.
1441                                        if(strlen(ShortWaveList)>0)
1442                                                matchE=1
1443                                        endif
1444                                        //if(stringmatch(";"+AllWaves,";*s"+tempStr+";*" ))
1445                                        //      matchE=1
1446                                        //endif
1447                                        if(matchX && (matchE || !RequireErrorWvs))
1448                                                tempResult+= FullFldrName+";"
1449                                                break
1450                                        endif
1451                                endfor
1452                                result+=tempresult
1453                        endif
1454        //endfor
1455        //for(i=0;i<ItemsInList(FullFldrNames);i+=1)                    //and this for qis NIST standard
1456                //FullFldrName = stringFromList(i,FullFldrNames)
1457                //AllWaves = IN2G_CreateListOfItemsInFolder(FullFldrName,2)
1458                //allRwaves=IR2P_ListOfWavesOfType("*i",AllWaves)
1459                allRwaves=GrepList(AllWaves,"(?i)i$")
1460                tempresult=""
1461                        if(strlen(WNMStr)==0 || GrepString(allRwaves, IR2C_PrepareMatchString(WNMStr)))
1462                                for(j=0;j<ItemsInList(allRwaves);j+=1)
1463                                        matchX=0
1464                                        matchE=0
1465                                        if(stringmatch(";"+AllWaves, ";*"+stringFromList(j,allRwaves)[0,strlen(stringFromList(j,allRwaves))-2]+"q;*" ))
1466                                                matchX=1
1467                                        endif
1468                                        if(stringmatch(";"+AllWaves,";*"+stringFromList(j,allRwaves)[0,strlen(stringFromList(j,allRwaves))-2]+"s;*" ))
1469                                                matchE=1
1470                                        endif
1471                                        if(matchX && matchE)
1472                                                tempResult+= FullFldrName+";"
1473                                                break
1474                                        endif
1475                                endfor
1476                                result+=tempresult
1477                        endif
1478        endfor
1479//      print ticks-startTime
1480        setDataFolder OldDf
1481        if(strlen(result)>1)
1482                return result
1483        else
1484                return "---"
1485        endif
1486       
1487end
1488//*****************************************************************************************************************
1489//*****************************************************************************************************************
1490//*****************************************************************************************************************
1491//*****************************************************************************************************************
1492//*****************************************************************************************************************
1493Function/T IR2P_ListOfWavesOfType(type,ListOfWaves)
1494                string type, ListOfWaves
1495                //optimized for speed 12/10/2010
1496                //wave types: r* should work
1497                //wave types : *i 
1498        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1499        string tempresult=""
1500        string tempType=""
1501        //if(GrepString(type, "^\*" ) ) //r* type
1502        //fixed 3/25/2012 after Dale found some bugs looking for his user defined data. Trying to fix and make all working
1503        if(GrepString(type, "^[*]" ) )                  //*r type, qis NIST type data 
1504                tempType = type[1,inf]+"$"
1505        elseif(GrepString(type, "[*]$"))                //r* type, qrs type data
1506                tempType = "^"+stringfromlist(0,type,"*")
1507        else   
1508                tempType = "^"+type[0,inf]
1509        endif
1510        tempresult = grepList(ListOfWaves, "(?i)"+tempType)
1511        //end of new method
1512//      print tempresult
1513        return tempresult
1514
1515end
1516
1517//*****************************************************************************************************************
1518//*****************************************************************************************************************
1519//*****************************************************************************************************************
1520//*****************************************************************************************************************
1521//**************************************************************************************************
1522//**********************************************************************************************************
1523//**********************************************************************************************************
1524static Function/T IR2P_CheckForRightUsrTripletWvs(TopPanel, FullFldrNames,DataTypeSearchedFor,WNMStr)
1525        string TopPanel, FullFldrNames,DataTypeSearchedFor, WNMStr
1526
1527        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1528        DFref oldDf= GetDataFolderDFR()
1529
1530        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
1531        SVAR ControlAllowedIrenaTypes=root:Packages:IrenaControlProcs:ControlAllowedIrenaTypes
1532        SVAR ControlAllowedUserTypes=root:Packages:IrenaControlProcs:ControlAllowedUserTypes
1533        SVAR ControlAllowedResultsTypes=root:Packages:IrenaControlProcs:ControlAllowedResultsTypes
1534        SVAR ControlRequireErrorWvs=root:Packages:IrenaControlProcs:ControlRequireErrorWvs
1535        SVAR XwaveDataTypesLookup=root:Packages:IrenaControlProcs:XwaveDataTypesLookup
1536        SVAR EwaveDataTypesLookup=root:Packages:IrenaControlProcs:EwaveDataTypesLookup
1537        SVAR XwaveUserDataTypesLookup=root:Packages:IrenaControlProcs:XwaveUserDataTypesLookup
1538        SVAR EwaveUserDataTypesLookup=root:Packages:IrenaControlProcs:EwaveUserDataTypesLookup
1539        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations)
1540        string LocallyAllowedIndra2Data=StringByKey(TopPanel, ControlAllowedIrenaTypes,"=",">")
1541        string LocallyAllowedUserData=StringByKey(TopPanel, ControlAllowedUserTypes,"=",">")
1542        string LocallyAllowedResultsData=StringByKey(TopPanel, ControlAllowedResultsTypes,"=",">")
1543        string XwaveType=stringByKey(DataTypeSearchedFor,XwaveUserDataTypesLookup)
1544        string EwaveType=stringByKey(DataTypeSearchedFor,EwaveUserDataTypesLookup)
1545        variable RequireErrorWvs = numberByKey(TopPanel, ControlRequireErrorWvs)
1546        string result=""
1547        string tempResult="" , FullFldrName
1548        variable i,j, matchX=0,matchE=0
1549        string AllWaves, allRwaves
1550        //string LocallyAllowedUserXData=stringFromList(0,StringByKey(DataTypeSearchedFor, XwaveUserDataTypesLookup , ":", ";"),"*")
1551        //string LocallyAllowedUserEData=stringFromList(0,StringByKey(DataTypeSearchedFor, EwaveUserDataTypesLookup , ":", ";"),"*")
1552        string LocallyAllowedUserXData=ReplaceString("*", StringByKey(DataTypeSearchedFor, XwaveUserDataTypesLookup , ":", ";"), "")
1553        string LocallyAllowedUserEData=ReplaceString("*", StringByKey(DataTypeSearchedFor, EwaveUserDataTypesLookup , ":", ";"), "")
1554       
1555        for(i=0;i<ItemsInList(FullFldrNames);i+=1)
1556                FullFldrName = stringFromList(i,FullFldrNames)
1557                if(grepstring(DataTypeSearchedFor,"\*"))                        //the match contains *, assume semi qrs type...... The data type is Q*, r*, s*
1558                        AllWaves = IN2G_CreateListOfItemsInFolder(FullFldrName,2)
1559                        allRwaves=IR2P_ListOfWavesOfType(DataTypeSearchedFor,AllWaves)
1560                        tempresult=""
1561                        if(strlen(WNMStr)==0 || GrepString(allRwaves, IR2C_PrepareMatchString(WNMStr)))
1562                                for(j=0;j<ItemsInList(allRwaves);j+=1)
1563                                        matchX=0
1564                                        matchE=0
1565                                        if(StringMatch(LocallyAllowedUserXData, "az")||StringMatch(LocallyAllowedUserXData, "qz")||StringMatch(LocallyAllowedUserXData, "qy")||StringMatch(LocallyAllowedUserXData, "qx"))              //these areunique, two letters replace on in wave bames...
1566                                                if(stringmatch(";"+AllWaves, ";*"+LocallyAllowedUserXData+stringFromList(j,allRwaves)[1,inf]+";*" )||stringmatch(XwaveType,"x-scaling"))
1567                                                        //matchX=1
1568                                                        if(RequireErrorWvs)
1569                                                                if(stringmatch(";"+AllWaves,";*"+LocallyAllowedUserEData+stringFromList(j,allRwaves)[1,inf]+";*" ))
1570                                                                        tempResult+= FullFldrName+";"
1571                                                                        break
1572                                                                else
1573                                                                        //not the right combination
1574                                                                endif
1575                                                        else
1576                                                                tempResult+= FullFldrName+";"
1577                                                                break                                   
1578                                                        endif
1579                                                else
1580                                                        //not the right combination
1581                                                endif                                   
1582                                        else
1583                                                if(stringmatch(";"+AllWaves, ";*"+LocallyAllowedUserXData+stringFromList(j,allRwaves)[strlen(LocallyAllowedUserXData),inf]+";*" )||stringmatch(";"+AllWaves, ";*"+stringFromList(j,allRwaves)[0,strlen(stringFromList(j,allRwaves))-strlen(LocallyAllowedUserXData)-1]+LocallyAllowedUserXData+";*" )||stringmatch(XwaveType,"x-scaling"))
1584                                                        //matchX=1
1585                                                        if(RequireErrorWvs)
1586                                                                if(stringmatch(";"+AllWaves,";*"+LocallyAllowedUserEData+stringFromList(j,allRwaves)[strlen(LocallyAllowedUserEData),inf]+";*" ) || stringmatch(";"+AllWaves,";*"+stringFromList(j,allRwaves)[0,strlen(stringFromList(j,allRwaves)) - strlen(LocallyAllowedUserEData)-1]+LocallyAllowedUserEData+";*" ))
1587                                                                        tempResult+= FullFldrName+";"
1588                                                                        break
1589                                                                else
1590                                                                        //not the right combination
1591                                                                endif
1592                                                        else
1593                                                                tempResult+= FullFldrName+";"
1594                                                                break                                   
1595                                                        endif
1596                                                else
1597                                                        //not the right combination
1598                                                endif
1599                                        endif
1600                                endfor
1601                                result+=tempresult
1602                        endif
1603                else                                                                                            //asume Indra2 type system
1604                        AllWaves = IN2G_CreateListOfItemsInFolder(FullFldrName,2)
1605                        if(strlen(WNMStr)==0 || GrepString(allRwaves, IR2C_PrepareMatchString(WNMStr)))
1606                                matchX=0
1607                                matchE=0
1608                                if(stringmatch(";"+AllWaves, "*;"+XwaveType+";*" )||stringmatch(XwaveType,"x-scaling"))
1609                                        matchX=1
1610                                endif
1611                                if(stringmatch(";"+AllWaves, "*;"+EwaveType+";*" ))
1612                                        matchE=1
1613                                endif
1614                                if(matchX && (matchE || !RequireErrorWvs))
1615                                        tempResult+= FullFldrName+";"
1616                                endif
1617                                result+=tempresult
1618                        endif
1619                endif
1620        endfor
1621        setDataFolder OldDf
1622        if(strlen(result)>1)
1623                return result
1624        else
1625                return "---"
1626        endif
1627       
1628end
1629//*****************************************************************************************************************
1630//**********************************************************************************************************
1631//**************************************************************************************************
1632//**********************************************************************************************************
1633//**********************************************************************************************************
1634static Function/T IR2P_CheckForRightIN2TripletWvs(TopPanel, FullFldrNames,DataTypeSearchedFor)
1635        string TopPanel, FullFldrNames,DataTypeSearchedFor
1636
1637        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1638        DFref oldDf= GetDataFolderDFR()
1639
1640        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
1641        SVAR ControlAllowedIrenaTypes=root:Packages:IrenaControlProcs:ControlAllowedIrenaTypes
1642        SVAR ControlAllowedResultsTypes=root:Packages:IrenaControlProcs:ControlAllowedResultsTypes
1643        SVAR ControlRequireErrorWvs=root:Packages:IrenaControlProcs:ControlRequireErrorWvs
1644        SVAR XwaveDataTypesLookup=root:Packages:IrenaControlProcs:XwaveDataTypesLookup
1645        SVAR EwaveDataTypesLookup=root:Packages:IrenaControlProcs:EwaveDataTypesLookup
1646        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations)
1647        string LocallyAllowedIndra2Data=StringByKey(TopPanel, ControlAllowedIrenaTypes,"=",">")
1648        string LocallyAllowedResultsData=StringByKey(TopPanel, ControlAllowedResultsTypes,"=",">")
1649        string XwaveType=stringByKey(DataTypeSearchedFor,XwaveDataTypesLookup)
1650        string EwaveType=stringByKey(DataTypeSearchedFor,EwaveDataTypesLookup)
1651        variable RequireErrorWvs = numberByKey(TopPanel, ControlRequireErrorWvs)
1652        string result=""
1653        string tempResult="" , FullFldrName
1654        variable i,j, matchX=0,matchE=0
1655        string AllWaves
1656       
1657        for(i=0;i<ItemsInList(FullFldrNames);i+=1)
1658                FullFldrName = stringFromList(i,FullFldrNames)
1659                AllWaves = IN2G_CreateListOfItemsInFolder(FullFldrName,2)
1660                matchX=0
1661                matchE=0
1662                if(stringmatch(";"+AllWaves, "*;"+XwaveType+";*" ))
1663                        matchX=1
1664                endif
1665                if(stringmatch(";"+AllWaves, "*;"+EwaveType+";*" ))
1666                        matchE=1
1667                endif
1668                if(matchX && (matchE || !RequireErrorWvs))
1669                        tempResult+= FullFldrName+";"
1670                endif
1671                result+=tempresult
1672        endfor
1673        setDataFolder OldDf
1674        if(strlen(result)>1)
1675                return result
1676        else
1677                return "---"
1678        endif
1679       
1680end
1681//**********************************************************************************************************
1682//**************************************************************************************************
1683//*****************************************************************************************************************
1684//*****************************************************************************************************************
1685//*****************************************************************************************************************
1686//*****************************************************************************************************************
1687//*****************************************************************************************************************
1688//*****************************************************************************************************************
1689
1690Function/T IR2P_ListOfWaves(DataType,MatchMeTo, winNm)
1691        string DataType, MatchMeTo, winNm                       //data type   : Xaxis, Yaxis, Error
1692                                                                                //Match me to is string to match the type to... Use "*" to get all... Applicable ONLY to Y and error data
1693        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1694        DFref oldDf= GetDataFolderDFR()
1695
1696        string TopPanel=winNm
1697
1698        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
1699        SVAR ControlAllowedIrenaTypes=root:Packages:IrenaControlProcs:ControlAllowedIrenaTypes
1700        SVAR ControlAllowedResultsTypes=root:Packages:IrenaControlProcs:ControlAllowedResultsTypes
1701        SVAR ControlAllowedUserTypes=root:Packages:IrenaControlProcs:ControlAllowedUserTypes
1702        SVAR ControlRequireErrorWvs=root:Packages:IrenaControlProcs:ControlRequireErrorWvs
1703        SVAR XwaveDataTypesLookup=root:Packages:IrenaControlProcs:XwaveDataTypesLookup
1704        SVAR EwaveDataTypesLookup=root:Packages:IrenaControlProcs:EwaveDataTypesLookup
1705        SVAR ResultsDataTypesLookup=root:Packages:IrenaControlProcs:ResultsDataTypesLookup
1706        SVAR XwaveUserDataTypesLookup=root:Packages:IrenaControlProcs:XwaveUserDataTypesLookup
1707        SVAR EwaveUserDataTypesLookup=root:Packages:IrenaControlProcs:EwaveUserDataTypesLookup
1708        SVAR ResultsEDataTypesLookup=root:Packages:IrenaControlProcs:ResultsEDataTypesLookup
1709
1710        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations)
1711        SVAR/Z WaveMatchStr=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(TopPanel)+":WaveMatchStr")
1712        if(!SVAR_Exists(WaveMatchStr))
1713                string/g $("root:Packages:IrenaControlProcs:"+possiblyQuoteName(TopPanel)+":WaveMatchStr")
1714                SVAR WaveMatchStr=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(TopPanel)+":WaveMatchStr")
1715                WaveMatchStr=""
1716        endif
1717       
1718        string LocallyAllowedIndra2Data=StringByKey(TopPanel, ControlAllowedIrenaTypes,"=",">")
1719        string LocallyAllowedResultsData=StringByKey(TopPanel, ControlAllowedResultsTypes,"=",">")
1720        string LocallyAllowedUserData=StringByKey(TopPanel, ControlAllowedUserTypes,"=",">")
1721//      string XwaveType=stringByKey(DataTypeSearchedFor,XwaveDataTypesLookup)
1722//      string EwaveType=stringByKey(DataTypeSearchedFor,EwaveDataTypesLookup)
1723        variable RequireErrorWvs = numberByKey(TopPanel, ControlRequireErrorWvs)
1724
1725        NVAR UseIndra2Structure=$(CntrlLocation+":UseIndra2Data")
1726        NVAR UseQRSStructure=$(CntrlLocation+":UseQRSData")
1727        NVAR UseUserDefinedData=$(CntrlLocation+":UseUserDefinedData")
1728        NVAR UseResults=$(CntrlLocation+":UseResults")
1729        SVAR Dtf=$(CntrlLocation+":DataFolderName")
1730        SVAR IntDf=$(CntrlLocation+":IntensityWaveName")
1731        SVAR QDf=$(CntrlLocation+":QWaveName")
1732        SVAR EDf=$(CntrlLocation+":ErrorWaveName")
1733
1734        //variable startTicks=ticks
1735
1736        string result="", tempresult="", tempStringX="", tempStringY="", tempStringE="", listOfXWvs="", Endstr="", tempstringX2="", tempstringY2="", tempstringE2="", existingYWvs, existingXWvs, existingEWvs,tmpp, tmpstr2
1737        string ts, tx, ty, tempRadDiaStr, tmpLookupStr
1738        variable i,j, jj, tempRadDia, ijk
1739        variable setControls
1740        tempresult=""
1741        setControls=0
1742        tempresult=IN2G_CreateListOfItemsInFolder(Dtf,2)
1743        if (UseIndra2Structure)
1744                //matching names makes no sense...
1745                if(cmpstr(DataType,"Xaxis")==0)
1746                        for(i=0;i<itemsInList(LocallyAllowedIndra2Data);i+=1)
1747                                tempStringY=stringFromList(i,LocallyAllowedIndra2Data)
1748                                tempStringX=stringByKey(tempStringY,XwaveDataTypesLookup)
1749                                tempStringE=stringByKey(tempStringY,EwaveDataTypesLookup)
1750                                if(stringmatch(";"+tempresult, "*;"+tempStringY+";*") && stringmatch(";"+tempresult, "*;"+tempStringX+";*") && (!RequireErrorWvs || stringmatch(";"+tempresult, "*;"+tempStringE+";*")))
1751                                        result+=tempStringX+";"
1752                                        if(setControls==0)
1753                                                IntDf=tempStringY
1754                                                QDf=tempStringX
1755                                                EDf=tempStringE
1756                                                setControls=1
1757                                        endif
1758                                endif
1759                        endfor
1760                elseif(cmpstr(DataType,"Yaxis")==0)
1761                        for(i=0;i<itemsInList(LocallyAllowedIndra2Data);i+=1)
1762                                tempStringY=stringFromList(i,LocallyAllowedIndra2Data)
1763                                tempStringX=stringByKey(tempStringY,XwaveDataTypesLookup)
1764                                tempStringE=stringByKey(tempStringY,EwaveDataTypesLookup)
1765                                if(stringmatch(";"+tempresult, "*;"+tempStringY+";*") && stringmatch(";"+tempresult, "*;"+tempStringX+";*") && (!RequireErrorWvs || stringmatch(";"+tempresult, "*;"+tempStringE+";*")))
1766                                        if(cmpstr(MatchMeTo,"*")==0 || cmpstr(stringByKey(tempStringY,XwaveDataTypesLookup),MatchMeTo)==0)
1767                                                result+=tempStringY+";"
1768                                        endif
1769                                endif
1770                        endfor
1771                elseif(cmpstr(DataType,"Error")==0)
1772                        for(i=0;i<itemsInList(LocallyAllowedIndra2Data);i+=1)
1773                                tempStringY=stringFromList(i,LocallyAllowedIndra2Data)
1774                                tempStringX=stringByKey(tempStringY,XwaveDataTypesLookup)
1775                                tempStringE=stringByKey(tempStringY,EwaveDataTypesLookup)
1776                                if(stringmatch(";"+tempresult, "*;"+tempStringY+";*") && stringmatch(";"+tempresult, "*;"+tempStringX+";*") && (!RequireErrorWvs || stringmatch(";"+tempresult, "*;"+tempStringE+";*")))
1777                                        if(cmpstr(MatchMeTo,"*")==0 || cmpstr(stringByKey(tempStringY,XwaveDataTypesLookup),MatchMeTo)==0)
1778                                                result+=tempStringE+";"
1779                                        endif
1780                                endif
1781                        endfor
1782                endif
1783        elseif(UseUserDefinedData)
1784                //match the names if user wants...
1785                if(strlen(WaveMatchStr)>0)
1786                        tempResult = GrepList(TempResult, IR2C_PrepareMatchString(WaveMatchStr))
1787                endif
1788                if(cmpstr(DataType,"Xaxis")==0)
1789                        for(i=0;i<itemsInList(LocallyAllowedUserData);i+=1)
1790                                tempStringY=stringFromList(i,LocallyAllowedUserData)
1791                                tempStringX=stringByKey(tempStringY,XwaveUserDataTypesLookup)
1792                                tempStringE=stringByKey(tempStringY,EwaveUserDataTypesLookup)
1793                                existingYWvs=IR2P_ListOfWavesOfType(tempStringY,tempresult)
1794                                existingXWvs=IR2P_ListOfWavesOfType(tempStringX,tempresult)
1795                                existingEWvs=IR2P_ListOfWavesOfType(tempStringE,tempresult)
1796                                tmpp=replaceString("*",tempStringY,"&")
1797                                if(stringmatch(tmpp, "*&" ))            //Star was at the end,, so we need to match the end of the wave names
1798                                        tempstringY2=stringFromList(0,tempstringY,"*")
1799                                        tempstringX2=stringFromList(0,tempstringX,"*")
1800                                        tempstringE2=stringFromList(0,tempstringE,"*")
1801                                        For (j=0;j<ItemsInList(existingXWvs);j+=1)
1802                                                if (stringMatch(";"+existingYWvs,"*;"+tempstringY2+StringFromList(j,existingXWvs)[strlen(tempstringX2),inf]+";*") && (!RequireErrorWvs || stringMatch(";"+existingEWvs,"*;"+tempstringE2+StringFromList(j,existingXWvs)[strlen(tempstringX2),inf])))
1803                                                        result+=StringFromList(j,existingXWvs)+";"
1804                                                        if(setControls==0)
1805                                                                IntDf=tempstringY2+StringFromList(j,existingXWvs)[strlen(tempstringX2),inf]
1806                                                                QDf=StringFromList(j,existingXWvs)
1807                                                                if(stringMatch(";"+existingEWvs,"*"+tempstringE2+StringFromList(j,existingXWvs)[strlen(tempstringX2),inf]))
1808                                                                        EDf=tempstringE2+StringFromList(j,existingXWvs)[strlen(tempstringX2),inf]
1809                                                                else
1810                                                                        EDf="---"
1811                                                                endif
1812                                                                setControls=1
1813                                                        endif
1814                                                endif
1815                                        endfor
1816                               
1817                                elseif(stringmatch(tmpp, "&*" ))                                                //assume IN2 type data, we need to match the front parts of the wave names...
1818                                        if(stringmatch(";"+tempresult, "*;"+tempStringY+";*") && stringmatch(";"+tempresult, "*;"+tempStringX+";*") && (!RequireErrorWvs || stringmatch(";"+tempresult, "*;"+tempStringE+";*")))
1819                                                //result+=tempStringX+";"
1820                                                result = IR2P_ListOfWavesOfType(tempStringX,tempresult)
1821                                                if(setControls==0)
1822                                                //      IntDf=tempStringY
1823                                                //      QDf=tempStringX
1824                                                        IntDf=stringFromList(0,IR2P_ListOfWavesOfType(tempStringY,tempresult))
1825                                                        QDf=stringFromList(0,IR2P_ListOfWavesOfType(tempStringX,tempresult))
1826                                                        if(stringmatch(";"+tempresult, "*;"+tempStringE+";*"))
1827                                                                //EDf=tempStringE
1828                                                                EDf=stringFromList(0,IR2P_ListOfWavesOfType(tempStringE,tempresult))
1829                                                        else
1830                                                                EDf="---"
1831                                                        endif
1832                                                        setControls=1
1833                                                endif
1834                                        endif
1835                                else //assume there is not match string to deal with
1836                                        if(stringmatch(";"+tempresult, "*;"+tempStringY+";*") && stringmatch(";"+tempresult, "*;"+tempStringX+";*") && (!RequireErrorWvs || stringmatch(";"+tempresult, "*;"+tempStringE+";*")))
1837                                                //result+=tempStringX+";"
1838                                                result += IR2P_ListOfWavesOfType(tempStringX,tempresult)
1839                                                if(setControls==0)
1840                                                //      IntDf=tempStringY
1841                                                //      QDf=tempStringX
1842                                                        IntDf=stringFromList(0,IR2P_ListOfWavesOfType(tempStringY,tempresult))
1843                                                        QDf=stringFromList(0,IR2P_ListOfWavesOfType(tempStringX,tempresult))
1844                                                        if(stringmatch(";"+tempresult, "*;"+tempStringE+";*"))
1845                                                                //EDf=tempStringE
1846                                                                EDf=stringFromList(0,IR2P_ListOfWavesOfType(tempStringE,tempresult))
1847                                                        else
1848                                                                EDf="---"
1849                                                        endif
1850                                                        setControls=1
1851                                                endif
1852                                        endif
1853                                endif   
1854                        endfor
1855                elseif(cmpstr(DataType,"Yaxis")==0)
1856                        for(i=0;i<itemsInList(LocallyAllowedUserData);i+=1)
1857                                tempStringY=stringFromList(i,LocallyAllowedUserData)
1858                                tempStringX=stringByKey(tempStringY,XwaveUserDataTypesLookup)
1859                                tempStringE=stringByKey(tempStringY,EwaveUserDataTypesLookup)
1860                                existingYWvs=IR2P_ListOfWavesOfType(tempStringY,tempresult)
1861                                existingXWvs=IR2P_ListOfWavesOfType(tempStringX,tempresult)
1862                                existingEWvs=IR2P_ListOfWavesOfType(tempStringE,tempresult)
1863                                tmpp=replaceString("*",tempStringY,"&")
1864                                if(stringmatch(tmpp, "*&" ))            //assume qrs type data
1865                                        tempstringY2=stringFromList(0,tempstringY,"*")
1866                                        tempstringX2=stringFromList(0,tempstringX,"*")
1867                                        tempstringE2=stringFromList(0,tempstringE,"*")
1868                                        For (j=0;j<ItemsInList(existingYWvs);j+=1)
1869                                                if (stringMatch(";"+existingXWvs,"*;"+tempstringX2+StringFromList(j,existingYWvs)[strlen(tempstringY2),inf]+";*") && (!RequireErrorWvs || stringMatch(";"+existingEWvs,"*;"+tempstringE2+StringFromList(j,existingXWvs)[strlen(tempstringX2),inf])))
1870                                                        if(cmpstr(MatchMeTo,"*")==0 || cmpstr(StringFromList(j,existingYWvs)[strlen(tempstringY2),inf],MatchMeTo[strlen(tempstringX2),inf])==0)
1871                                                                result+=StringFromList(j,existingYWvs)+";"
1872                                                        endif
1873                                                endif
1874                                        endfor
1875                               
1876                                elseif(stringmatch(tmpp, "&*" ))                                                //assume IN2 type data
1877                                        tempstringY2=stringFromList(1,tempstringY,"*")
1878                                        tempstringX2=stringFromList(1,tempstringX,"*")
1879                                        tempstringE2=stringFromList(1,tempstringE,"*")
1880                                        For (j=0;j<ItemsInList(existingYWvs);j+=1)
1881                                                if (stringMatch(";"+existingXWvs,"*;"+StringFromList(j,existingYWvs)[0,strlen(StringFromList(j,existingYWvs))-strlen(tempstringY)]+tempstringX2+";*") && (!RequireErrorWvs || stringMatch(";"+existingEWvs,"*;"+StringFromList(j,existingYWvs)[0,strlen(StringFromList(j,existingYWvs))-strlen(tempstringY)]+tempstringE2+";*")))
1882                                                        if(cmpstr(MatchMeTo,"*")==0 || cmpstr(StringFromList(j,existingYWvs)[strlen(tempstringY),inf],MatchMeTo[strlen(tempstringX),inf])==0)
1883                                                                result+=StringFromList(j,existingYWvs)+";"
1884                                                        endif
1885                                                endif
1886                                        endfor
1887                                else                            //assume data which may not have any match string...
1888                                        tempstringY2=tempstringY
1889                                        tempstringX2=tempstringX
1890                                        tempstringE2=tempstringE
1891                                        //For (j=0;j<ItemsInList(existingYWvs);j+=1)
1892                                        //this is purely wrong here. We need to just test, that the xwave is here for the y wave, nothing else... ZRewire this to make sense...
1893                                        //      if (stringMatch(";"+existingXWvs,"*;"+StringFromList(j,existingYWvs)) && (!RequireErrorWvs || stringMatch(";"+existingEWvs,"*;"+StringFromList(j,existingYWvs))))
1894                                        //              if(cmpstr(MatchMeTo,"*")==0 || cmpstr(StringFromList(j,existingYWvs)[strlen(tempstringY),inf],MatchMeTo[strlen(tempstringX),inf])==0)
1895                                        if(StringMatch(tempstringX2, matchMeTo))
1896                                                        result+=StringFromList(j,existingYWvs)+";"
1897                                        endif
1898                                        //              endif
1899                                        //      endif
1900                                        //endfor
1901                                endif
1902                        endfor
1903                elseif(cmpstr(DataType,"Error")==0)
1904                        for(i=0;i<itemsInList(LocallyAllowedUserData);i+=1)
1905                                tempStringY=stringFromList(i,LocallyAllowedUserData)
1906                                tempStringX=stringByKey(tempStringY,XwaveUserDataTypesLookup)
1907                                tempStringE=stringByKey(tempStringY,EwaveUserDataTypesLookup)
1908                                existingYWvs=IR2P_ListOfWavesOfType(tempStringY,tempresult)
1909                                existingXWvs=IR2P_ListOfWavesOfType(tempStringX,tempresult)
1910                                existingEWvs=IR2P_ListOfWavesOfType(tempStringE,tempresult)
1911                                tmpp=replaceString("*",tempStringY,"&")
1912                                if(stringmatch(tmpp, "*&" ))            //assume qrs type data
1913                                        tempstringY2=stringFromList(0,tempstringY,"*")
1914                                        tempstringX2=stringFromList(0,tempstringX,"*")
1915                                        tempstringE2=stringFromList(0,tempstringE,"*")
1916                                        For (j=0;j<ItemsInList(existingEWvs);j+=1)
1917                                                if (stringMatch(";"+existingXWvs,"*;"+tempstringX2+StringFromList(j,existingEWvs)[strlen(tempstringE2),inf]+";*") && stringMatch(";"+existingYWvs,"*;"+tempstringY2+StringFromList(j,existingEWvs)[strlen(tempstringE2),inf]+";*"))
1918                                                        if(cmpstr(MatchMeTo,"*")==0 || cmpstr(StringFromList(j,existingEWvs)[strlen(tempstringE2),inf],MatchMeTo[strlen(tempstringX2),inf])==0)
1919                                                                result+=StringFromList(j,existingEWvs)+";"
1920                                                        endif
1921                                                endif
1922                                        endfor
1923                               
1924                                elseif(stringmatch(tmpp, "&*" ))                                                                                //asume IN2 type data
1925                                                //this is clearly unfinished...
1926                                        tempstringY2=stringFromList(1,tempstringY,"*")
1927                                        tempstringX2=stringFromList(1,tempstringX,"*")
1928                                        tempstringE2=stringFromList(1,tempstringE,"*")
1929                                        if(StringMatch(tempstringX2, matchMeTo))
1930                                                        result+=StringFromList(j,existingEWvs)+";"
1931                                        endif
1932                                       
1933                                else
1934                                        tempstringY2=tempstringY
1935                                        tempstringX2=tempstringX
1936                                        tempstringE2=tempstringE
1937                                        if(StringMatch(tempstringX2, matchMeTo)&&strlen(existingEWvs)>0)
1938                                                        result+=StringFromList(j,existingEWvs)+";"
1939                                        endif
1940                                                        //For (j=0;j<ItemsInList(existingEWvs);j+=1)
1941                                                        //                                              if (stringMatch(";"+existingXWvs,"*;"+StringFromList(j,existingEWvs)[0,strlen(StringFromList(j,existingEWvs))-strlen(tempstringE)]+tempstringX2+";*") && (stringMatch(";"+existingYWvs,"*;"+StringFromList(j,existingEWvs)[0,strlen(StringFromList(j,existingEWvs))-strlen(tempstringE)]+tempstringY2+";*")))
1942                                                        //                                                      if(cmpstr(MatchMeTo,"*")==0 || cmpstr(StringFromList(j,existingEWvs)[strlen(tempstringE),inf],MatchMeTo[strlen(tempstringX),inf])==0)
1943                                                                                                                //      result+=StringFromList(j,existingEWvs)+";"
1944                                                        //                                                      endif
1945                                                        //                                              endif
1946                                                                                                //endfor
1947                                                       
1948                                                        //                                      For (j=0;j<ItemsInList(existingEWvs);j+=1)
1949                                                        //                                              if (stringMatch(";"+existingXWvs,"*;"+tempstringX2+StringFromList(j,existingEWvs)[strlen(tempstringE2),inf]+";*") && stringMatch(";"+existingYWvs,"*;"+tempstringY2+StringFromList(j,existingEWvs)[strlen(tempstringE2),inf]+";*"))
1950                                                        //                                                      if(cmpstr(MatchMeTo,"*")==0 || cmpstr(StringFromList(j,existingEWvs)[strlen(tempstringE2),inf],MatchMeTo[strlen(tempstringX2),inf])==0)
1951                                                        //                                                              result+=StringFromList(j,existingEWvs)+";"
1952                                                        //                                                      endif
1953                                                        //                                              endif
1954                                                        //                                      endfor
1955                                                        //                                      if(stringmatch(";"+tempresult, "*;"+tempStringY+";*") && stringmatch(";"+tempresult, "*;"+tempStringX+";*") && (!RequireErrorWvs || stringmatch(";"+tempresult, "*;"+tempStringE+";*")))
1956                                                        //                                              if(cmpstr(MatchMeTo,"*")==0 || (cmpstr(stringByKey(tempStringY,XwaveUserDataTypesLookup),MatchMeTo)==0 && stringmatch(";"+tempresult, "*;"+tempStringE+";*")))
1957                                                        //                                                      result+=tempStringE+";"
1958                                                        //                                              endif
1959                                                        //                                      endif
1960                                endif
1961                        endfor
1962                        if(strlen(result)<1)
1963                                result="---;"
1964                        endif
1965                endif
1966        elseif(UseQRSStructure)
1967                tempStringX=IR2P_RemoveDuplicateStrfLst(IR2P_ListOfWavesOfType("q*",tempresult)+IR2P_ListOfWavesOfType("*q",tempresult)+IR2P_ListOfWavesOfType("t_*",tempresult)+IR2P_ListOfWavesOfType("m_*",tempresult)+IR2P_ListOfWavesOfType("d_*",tempresult)+IR2P_ListOfWavesOfType("a*",tempresult))
1968                tempStringY=IR2P_RemoveDuplicateStrfLst(IR2P_ListOfWavesOfType("r*",tempresult)+IR2P_ListOfWavesOfType("*i",tempresult))
1969                tempStringE=IR2P_RemoveDuplicateStrfLst(IR2P_ListOfWavesOfType("s*",tempresult)+IR2P_ListOfWavesOfType("*s",tempresult))
1970               
1971                //match the names if user wants...
1972                if(strlen(WaveMatchStr)>0)
1973                        tempStringX = GrepList(tempStringX, IR2C_PrepareMatchString(WaveMatchStr))
1974                        tempStringY = GrepList(tempStringY, IR2C_PrepareMatchString(WaveMatchStr))
1975                        tempStringE = GrepList(tempStringE, IR2C_PrepareMatchString(WaveMatchStr))
1976                endif
1977                if (cmpstr(DataType,"Yaxis")==0)
1978                        For (j=0;j<ItemsInList(tempStringY);j+=1)
1979                                tmpstr2 = StringFromList(j,tempStringY)
1980                                //split to handle QRS and qis
1981                                if(StringMatch(tmpstr2[strlen(tmpstr2)-2,inf], "_i"))
1982                                        ts=tmpstr2[0,strlen(tmpstr2)-2]
1983                                        tx=tempStringX
1984                                        if ((stringMatch(tx,ts+"q;*") || stringMatch(tx,"*;"+ts+"q;*")) && (!RequireErrorWvs || stringMatch(";"+tempStringE,ts+"s;*")||stringMatch(tempStringE,ts+"s;*")))
1985                                                if(cmpstr(MatchMeTo,"*")==0 || cmpstr(tmpstr2,MatchMeTo[0,strlen(MatchMeTo)-2]+"i")==0)
1986                                                        result+=StringFromList(j,tempStringY)+";"
1987                                                endif
1988                                        endif
1989                                else
1990                                        ts=tmpstr2[1,inf]
1991                                        tx=tempStringX
1992                                        if (((stringMatch(";"+tx,"*q"+ts+";*")||stringMatch(";"+tx,"*t"+ts+";*")||stringMatch(";"+tx,"*d"+ts+";*")||stringMatch(";"+tx,"*m"+ts+";*")) && (!RequireErrorWvs || stringMatch(";"+tempStringE,"*s"+ts+";*"))) || (stringMatch(";"+tx,"*q"+ts+";*")) || (stringMatch(";"+tx,"*"+tmpstr2[0,strlen(tmpstr2)-2]+"q;*") && (stringMatch(";"+tempStringE,"*"+tmpstr2[0,strlen(tmpstr2)-2]+"s;*"))))
1993                                                if(cmpstr(MatchMeTo,"*")==0 || cmpstr(tmpstr2,"r"+MatchMeTo[1,inf])==0 || cmpstr(tmpstr2,"r"+MatchMeTo[2,inf])==0)
1994                                                        result+=StringFromList(j,tempStringY)+";"
1995                                                endif
1996                                        endif
1997                                endif
1998                        endfor
1999                elseif(cmpstr(DataType,"Xaxis")==0)
2000                        For (j=0;j<ItemsInList(tempStringX);j+=1)
2001                                tmpstr2 = StringFromList(j,tempStringX)
2002                                if ((stringMatch(";"+tempStringY,"*r"+tmpstr2[1,inf]+";*") && (!RequireErrorWvs || stringMatch(";"+tempStringE,"*s"+tmpstr2[1,inf]+";*"))) || (stringMatch(";"+tempStringY,"*r"+tmpstr2[2,inf]+";*"))||(stringMatch(";"+tempStringY,"*"+tmpstr2[0,strlen(tmpstr2)-2]+"i;*") && (stringMatch(";"+tempStringE,"*"+tmpstr2[0,strlen(tmpstr2)-2]+"s;*"))))
2003                                        result+=StringFromList(j,tempStringX)+";"
2004                                        if(setControls==0)
2005                                                IntDf=StringFromList(j,tempStringY)
2006                                                QDf=StringFromList(j,tempStringX)
2007                                                EDf=StringFromList(j,tempStringE)
2008                                                setControls=1
2009                                        endif
2010                                endif
2011                        endfor
2012                elseif(cmpstr(DataType,"Error")==0)
2013                        For (j=0;j<ItemsInList(tempStringE);j+=1)
2014                                tmpstr2 = StringFromList(j,tempStringE)
2015                                //QRS
2016                                ts=tmpstr2[1,inf]
2017                                tx=tempStringX
2018                                ty=tempStringY
2019                                if ((stringMatch(";"+ty,"*r"+ts+";*") && (stringMatch(";"+tx,"*q"+ts+";*")||stringMatch(";"+tx,"*d"+ts+";*")||stringMatch(";"+tx,"*t"+ts+";*"))||stringMatch(";"+tx,"*m"+ts+";*")) || (stringMatch(";"+ty,"*r"+tmpstr2[2,inf]+";*") && stringMatch(";"+tx,"*q"+tmpstr2[2,inf]+";*")))
2020                                        if(cmpstr(MatchMeTo,"*")==0 || cmpstr(tmpstr2,"s"+MatchMeTo[1,inf])==0  || cmpstr(tmpstr2,"s"+MatchMeTo[2,inf])==0)
2021                                                result+=StringFromList(j,tempStringE)+";"
2022                                        endif
2023                                //thsi needed to be split since QIS data starting with s and ending with _s as error were not trerated right 3/25/2012
2024                                elseif (stringMatch(tempStringY,"*"+tmpstr2[0,strlen(tmpstr2)-2]+"i;*")&& stringMatch(tempStringX,"*"+tmpstr2[0,strlen(tmpstr2)-2]+"q;*"))              //QIS
2025                                        if((cmpstr(MatchMeTo,"*")==0) || (cmpstr(tmpstr2,MatchMeTo[0,strlen(MatchMeTo)-2]+"s")==0 ))                    ///&&(stringmatch(tmpstr2,"*_s")))
2026                                                result+=StringFromList(j,tempStringE)+";"
2027                                        endif
2028                                endif
2029                        endfor
2030                endif
2031        elseif(UseResults)
2032                if(cmpstr(DataType,"Xaxis")==0)
2033                        for(i=0;i<itemsInList(LocallyAllowedResultsData);i+=1)
2034                                tempStringY=stringFromList(i,LocallyAllowedResultsData)
2035                                tempStringX=stringByKey(tempStringY,ResultsDataTypesLookup)
2036                                if(stringmatch(tempStringX,"*,*"))
2037                                        tempRadDia=2
2038                                else
2039                                        tempRadDia=1
2040                                endif
2041                                For (j=0;j<ItemsInList(tempStringY);j+=1)
2042                                        For(jj=0;jj<itemsInList(tempresult);jj+=1)
2043                                                if (stringMatch(StringFromList(jj,tempresult), StringFromList(j,tempStringY)+"_*"))
2044                                                        Endstr="_"+StringByKey(StringFromList(j,tempStringY), StringFromList(jj,tempresult) , "_" )
2045                                                        for(ijk=0;ijk<tempRadDia;ijk+=1)
2046                                                                tempRadDiaStr = stringFromList(ijk,tempStringX+",",",")
2047                                                                if (stringMatch(";"+tempresult,"*;"+tempRadDiaStr+EndStr+";*"))
2048                                                                        result+=StringFromList(j,tempRadDiaStr)+EndStr+";"
2049                                                                        if(stringmatch(tempStringY,"SLDProfile*"))              //patch for backward compatibility...
2050                                                                                result+="x-scaling"+";"
2051                                                                        endif
2052                                                                if(setControls==0)
2053                                                                                IntDf=tempStringY+EndStr
2054                                                                                QDf=tempStringX+EndStr
2055                                                                                EDf="---"
2056                                                                                setControls=1
2057                                                                        endif
2058                                                                elseif(cmpstr("x-scaling",tempStringX)==0 )
2059                                                                        result+=StringFromList(j,tempStringX)+";"
2060                                                                        if(setControls==0)
2061                                                                                IntDf=tempStringY
2062                                                                                QDf=tempStringX
2063                                                                                EDf="---"
2064                                                                                setControls=1
2065                                                                        endif
2066                                                                endif
2067                                                        endfor
2068                                                endif
2069                                        endfor
2070                                endfor
2071                        endfor
2072                elseif(cmpstr(DataType,"Yaxis")==0)
2073                        string tt1, tt2, EndStr1
2074                        tt1=""
2075                        tt2=""
2076                        if(cmpstr(MatchMeTo,"*")!=0)
2077                                tmpLookupStr = IR2C_ReverseLookup(ResultsDataTypesLookup,stringFromList(0,MatchMeTo,"_"))
2078                                EndStr1="_"+stringFromList(1,MatchMeTo,"_")     //this is current index _XX
2079                                for(jj=0;jj<ItemsInList(tmpLookupStr);jj+=1)
2080                                                tt1=stringFromList(jj,tmpLookupStr)
2081                                        if(Stringmatch(tempresult, "*"+tt1+EndStr1+";*"))
2082                                                result+=tt1+EndStr1+";"
2083                                        endif
2084                                endfor
2085                               
2086                                //                              tt1=stringFromList(0,tmpLookupStr)
2087                                //                              tt2=stringFromList(1,tmpLookupStr)
2088                                //                              EndStr1="_"+stringFromList(1,MatchMeTo,"_")     //this is current index _XX     
2089                                //                              if(Stringmatch(tempresult, "*"+tt1+EndStr1+";*"))
2090                                //                                      result+=tt1+EndStr1+";"
2091                                //                              endif
2092                                //                              if(strlen(tt2)>0 && Stringmatch(tempresult, "*"+tt2+EndStr1+";*"))
2093                                //                                      result+=tt2+EndStr1+";"
2094                                //                              endif
2095                        else            //this is call from GUI and so we need to figure out the order number ourselves...
2096                                tmpLookupStr = IR2C_ReverseLookup(ResultsDataTypesLookup,stringFromList(0,QDf,"_"))
2097                                //tt1=stringFromList(0,tmpLookupStr)
2098                                //      tt2=stringFromList(1,tmpLookupStr)
2099                                EndStr1="_"+stringFromList(1,QDf,"_")   //this is current index _XX     
2100                                for(jj=0;jj<ItemsInList(tmpLookupStr);jj+=1)
2101                                                tt1=stringFromList(jj,tmpLookupStr)
2102                                        if(Stringmatch(tempresult, "*"+tt1+EndStr1+";*"))
2103                                                result+=tt1+EndStr1+";"
2104                                        endif
2105                                endfor
2106                                                               
2107                                //                              if(Stringmatch(tempresult, "*"+tt1+EndStr1+";*"))
2108                                //                                      result+=tt1+EndStr1+";"
2109                                //                              endif
2110                                //                              if(strlen(tt2)>0 &&Stringmatch(tempresult, "*"+tt2+EndStr1+";*"))
2111                                //                                      result+=tt2+EndStr1+";"
2112                                //                              endif
2113                                                       
2114                                //                              for(i=0;i<itemsInList(LocallyAllowedResultsData);i+=1)                          //iterates over all known Irena data types
2115                                //                                      tempStringY=stringFromList(i,LocallyAllowedResultsData)                 //one data type (Y axis data) at a time
2116                                //                                      tempStringX=stringByKey(tempStringY,ResultsDataTypesLookup)     //this is appropriate data x data type
2117                                //                                      //print tempStringY, tempStringX
2118                                //                                      if(stringmatch(tempStringX,"*,*"))
2119                                //                                              tempRadDia=2
2120                                //                                      else
2121                                //                                              tempRadDia=1
2122                                //                                      endif
2123                                //                                              For(jj=0;jj<itemsInList(tempresult);jj+=1)                                              //tempresult contains all waves in the given folder
2124                                //                                                      if (stringMatch(StringFromList(jj,tempresult), tempStringY+"_*"))
2125                                //                                                      //if ((stringMatch(StringFromList(jj,tempresult), tempStringY+"_*") &&(cmpstr(MatchMeTo,"*")==0) || stringMatch(StringFromList(jj,tempresult),tt1+EndStr1) || stringMatch(StringFromList(jj,tempresult),tt2+EndStr1) )  )
2126                                //                                                      //if (stringMatch(StringFromList(jj,tempresult), tempStringY+"_*") &&(cmpstr(MatchMeTo,"*")==0 || cmpstr(StringFromList(jj,tempresult),IR2C_ReverseLookup(ResultsDataTypesLookup,stringFromList(0,MatchMeTo,"_"))+"_"+stringFromList(1,MatchMeTo,"_"))==0 ))   
2127                                //                                                              //Ok, this is appriapriate Y data set
2128                                //                                                              Endstr="_"+StringByKey(StringFromList(j,tempStringY), StringFromList(jj,tempresult) , "_" )     //this is current index _XX     
2129                                //                                                              for(ijk=0;ijk<tempRadDia;ijk+=1)
2130                                //                                                                      tempRadDiaStr = stringFromList(ijk,tempStringX+",",",")
2131                                //                                                                      if (stringMatch(";"+tempresult,"*;"+tempRadDiaStr+EndStr+";*") || cmpstr("x-scaling",tempStringX)==0  )         //Ok, the appropriate X data set exists or x-scaling is allowed...
2132                                //                                                                              result+=tempStringY+Endstr+";"
2133                                //                                                                      endif
2134                                //                                                              endfor
2135                                //                                                      endif
2136                                //                                              endfor
2137                                //                              endfor
2138                        endif
2139                elseif(cmpstr(DataType,"Error")==0)
2140                        string MatchMeToY = ""                                  //holds name of Y axis based on MatchMeTo       
2141                        string debugStr1, debugStr2
2142                        if(strlen(MatchMeTo)>2)                         //MatchMeTo may be X axis or Y axis...
2143                                debugStr2 = stringFromList(0,MatchMeTo,"_")
2144                                debugStr1 = IR2C_ReverseLookup(ResultsDataTypesLookup,debugStr2)                //if MatchMeTo was X axis, this contains Y axis...
2145                                if(GrepString(ResultsDataTypesLookup, debugStr2 ) &&(strlen(debugStr1)>0))
2146                                        MatchMeToY = debugStr1
2147                                else
2148                                        MatchMeToY = debugStr2
2149                                endif
2150                        endif           //Now MatchmeToY contains Y axis...
2151                        debugStr2=      StringByKey(MatchMeToY,ResultsEDataTypesLookup,":",";")         //contains Matching Error pattern
2152                        result=""
2153                        for(i=0;i<itemsInList(LocallyAllowedResultsData);i+=1)                                          //iterates over all known Indra data types
2154                                tempStringY=stringFromList(i,LocallyAllowedResultsData)                                 //one data type (Y axis data) at a time
2155                                tempStringX=stringByKey(tempStringY,ResultsEDataTypesLookup)            //this is appropriate data E data type
2156                                if(strlen(tempStringX)>2)
2157                                        For(jj=0;jj<itemsInList(tempresult);jj+=1)                                      //tempresult contains all waves in the given folder
2158                                                debugStr1=      StringFromList(jj,tempresult)
2159                                                if (stringMatch(debugStr1, tempStringX+"_*") &&(cmpstr(MatchMeTo,"*")==0) || (stringMatch(debugStr1,debugStr2+"_"+stringFromList(1,MatchMeTo,"_"))))            //Ok, this is appriapriate E data set           
2160                                                        if (!GrepString(result, debugStr1))
2161                                                                result+=debugStr1+";"
2162                                                        endif
2163                                                endif
2164                                        endfor
2165                                endif
2166                        endfor
2167                        result += "---;"
2168                endif
2169        else
2170                result=tempresult+";x-scaling;"
2171        endif
2172        if(strlen(result)<1)
2173                result="---"
2174        endif
2175        setDataFolder OldDf
2176        return result
2177end
2178//**********************************************************************************************************
2179//**********************************************************************************************************
2180//**********************************************************************************************************
2181//**************************************************************************************************
2182Function/S IR2C_ReverseLookup(StrToSearch,Keywrd)
2183        string StrToSearch,Keywrd
2184       
2185        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2186        string result, tempstr
2187        result=""
2188        variable i
2189        For(i=0;i<ItemsInList(StrToSearch , ";");i+=1)
2190                tempStr=StringFromList(i, StrToSearch ,";")
2191                if(stringmatch(tempStr, "*:"+Keywrd ) || stringmatch(tempStr, "*:*,"+Keywrd ) || stringmatch(tempStr, "*:"+Keywrd+",*" ))
2192                        result+= stringFromList(0,tempStr,":")+";"
2193                endif
2194        endfor
2195        return result
2196end
2197
2198//**********************************************************************************************************
2199//**********************************************************************************************************
2200//**********************************************************************************************************
2201//**************************************************************************************************
2202
2203//popup procedure
2204Function IR2C_PanelPopupControl(Pa) : PopupMenuControl
2205        STRUCT WMPopupAction &Pa
2206
2207        if(Pa.eventCode!=2)
2208                return 0
2209        endif
2210        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2211        String ctrlName=Pa.ctrlName
2212        Variable popNum=Pa.popNum
2213        String popStr=Pa.popStr
2214
2215        //part to copy everywhere...   
2216        DFref oldDf= GetDataFolderDFR()
2217
2218        string TopPanel=Pa.win 
2219        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
2220        SVAR ControlAllowedIrenaTypes=root:Packages:IrenaControlProcs:ControlAllowedIrenaTypes
2221        SVAR ControlAllowedResultsTypes=root:Packages:IrenaControlProcs:ControlAllowedResultsTypes
2222        SVAR ControlRequireErrorWvs=root:Packages:IrenaControlProcs:ControlRequireErrorWvs
2223        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations,":",";")
2224        string LocallyAllowedIndra2Data=StringByKey(TopPanel, ControlAllowedIrenaTypes,"=",">")
2225        string LocallyAllowedResultsData=StringByKey(TopPanel, ControlAllowedResultsTypes,"=",">")
2226        SVAR/Z FolderMatchStr=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(TopPanel)+":FolderMatchStr")
2227        if(!SVAR_Exists(FolderMatchStr))
2228                string/g $("root:Packages:IrenaControlProcs:"+possiblyQuoteName(TopPanel)+":FolderMatchStr")
2229                SVAR FolderMatchStr=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(TopPanel)+":FolderMatchStr")
2230                FolderMatchStr=""
2231        endif
2232        SVAR/Z WaveMatchStr=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(TopPanel)+":WaveMatchStr")
2233        if(!SVAR_Exists(WaveMatchStr))
2234                string/g $("root:Packages:IrenaControlProcs:"+possiblyQuoteName(TopPanel)+":WaveMatchStr")
2235                SVAR WaveMatchStr=$("root:Packages:IrenaControlProcs:"+possiblyQuoteName(TopPanel)+":WaveMatchStr")
2236                WaveMatchStr=""
2237        endif
2238        setDataFolder $(CntrlLocation)
2239        variable i
2240
2241 
2242        NVAR UseIndra2Structure=$(CntrlLocation+":UseIndra2Data")
2243        NVAR UseQRSStructure=$(CntrlLocation+":UseQRSData")
2244        NVAR UseResults=$(CntrlLocation+":UseResults")
2245        NVAR UseUserDefinedData=$(CntrlLocation+":UseUserDefinedData")
2246        SVAR Dtf=$(CntrlLocation+":DataFolderName")
2247        SVAR IntDf=$(CntrlLocation+":IntensityWaveName")
2248        SVAR QDf=$(CntrlLocation+":QWaveName")
2249        SVAR EDf=$(CntrlLocation+":ErrorWaveName")
2250        String infostr = ""
2251        string oldpopStr=popStr
2252        ///endof common block   
2253        //
2254
2255        if (cmpstr(ctrlName,"QvecDataName")==0)
2256                QDf=popStr
2257                //and need to fix IntDf & EDf
2258                //avoid reseting when using general selection...
2259                if((UseIndra2Structure || UseQRSStructure || UseResults || UseUserDefinedData))
2260                        IntDf=stringFromList(0,IR2P_ListOfWaves("Yaxis",popStr,TopPanel)+";")           
2261                        EDf=stringFromList(0,IR2P_ListOfWaves("Error",popStr,TopPanel)+";")
2262                        //10/27/2013 - changed lines below, why were the top lines commented out when they work (and the ones below do not?)
2263                        Execute ("PopupMenu IntensityDataName mode=1, value=\""+IntDf +";\"+IR2P_ListOfWaves(\"Yaxis\",\"*\",\""+TopPanel+"\"), win="+TopPanel)
2264                        Execute ("PopupMenu ErrorDataName mode=1, value=\""+EDf +";\"+IR2P_ListOfWaves(\"Error\",\"*\",\""+TopPanel+"\"), win="+TopPanel)
2265                        //1/10/2020 - the above has doubled the first element. This seems to work.
2266                        //Execute ("PopupMenu IntensityDataName mode=1, value=IR2P_ListOfWaves(\"Yaxis\",\"*\",\""+TopPanel+"\"), win="+TopPanel)
2267                        //Execute ("PopupMenu ErrorDataName mode=1, value=IR2P_ListOfWaves(\"Error\",\"*\",\""+TopPanel+"\"), win="+TopPanel)
2268                        //but at the same time, the selected element can be simply wrong. This needs to be smarter or we will preferably have possibly first line doubled.
2269                endif
2270                //now we need to deal with allowing x-scaling...
2271                if(cmpstr(popStr,"x-scaling")==0)
2272                        setDataFolder  Dtf
2273                        Wave/Z tempYwv=$(IntDf)
2274                        if(WaveExists(tempYwv))
2275                                Duplicate/O tempYWv, $("X_"+IntDf[0,28])
2276                                Wave tempXWv= $("X_"+IntDf[0,28])
2277                                tempXWv = leftx(tempYWv)+p*deltax(tempYWv)
2278                                QDf="X_"+IntDf[0,28]
2279                        endif
2280                        setDataFolder $(CntrlLocation) 
2281                endif
2282                //allow user function through hook function...
2283                infostr = FunctionInfo("IR2_ContrProc_Q_Hook_Proc")
2284                if (strlen(infostr) >0)
2285                        Execute("IR2_ContrProc_Q_Hook_Proc()")
2286                endif
2287                //end of allow user function through hook function
2288        endif
2289        if (cmpstr(ctrlName,"IntensityDataName")==0)
2290                IntDf=popStr
2291                if(cmpstr(QDf,"x-scaling")==0 || cmpstr(QDf,"X_"+IntDf[0,28])==0 )
2292                        setDataFolder Dtf
2293                        Wave/Z tempYwv=$(IntDf)
2294                        if(WaveExists(tempYwv))
2295                                Duplicate/O tempYWv, $("X_"+IntDf[0,28])
2296                                Wave tempXWv= $("X_"+IntDf)
2297                                tempXWv = leftx(tempYWv)+p*deltax(tempYWv)
2298                                QDf="X_"+IntDf[0,28]
2299                        endif
2300                        setDataFolder $(CntrlLocation) 
2301                        //avoid reseting when using general selection...
2302                elseif((UseIndra2Structure || UseQRSStructure || UseResults || UseUserDefinedData))
2303                        EDf=stringFromList(0,IR2P_ListOfWaves("Error",popStr,TopPanel)+";")
2304                        Execute ("PopupMenu ErrorDataName mode=1, value=\""+EDf +";\"+IR2P_ListOfWaves(\"Error\",\"*\",\""+TopPanel+"\"), win="+TopPanel)
2305                endif
2306                //now we need to deal with allowing x-scaling...
2307                //allow user function through hook function...
2308                infostr = FunctionInfo("IR2_ContrProc_R_Hook_Proc")
2309                if (strlen(infostr) >0)
2310                        Execute("IR2_ContrProc_R_Hook_Proc()")
2311                endif
2312                //end of allow user function through hook function
2313        endif
2314        if (cmpstr(ctrlName,"ErrorDataName")==0)
2315                EDf=popStr
2316                //allow user function through hook function...
2317                infostr = FunctionInfo("IR2_ContrProc_E_Hook_Proc")
2318                if (strlen(infostr) >0)
2319                        Execute("IR2_ContrProc_E_Hook_Proc()")
2320                endif
2321                //end of allow user function through hook function
2322        endif
2323
2324        if (cmpstr(ctrlName,"SelectDataFolder")==0)
2325                //attempt to fix for same named folders
2326                SVAR/Z RealLongListOfFolder = $(CntrlLocation+":RealLongListOfFolder")
2327                if(!SVAR_Exists(RealLongListOfFolder))
2328                        Abort "Stale control procedures. Please, reopen the panel for the tool you are trying to use and try operating once manually. If persists, send this Igor experiment to Jan Ilavsky, ilavsky@aps.anl.gov"
2329                endif
2330                //may be we need to know what was the last names for Int, Q, error???
2331                string OldIntname=IntDf
2332                string OldQname=QDf
2333                string OldEname=EDf
2334                //Now lets move on...
2335                if(popNum>=0)
2336                        //let's try to look up using popNum
2337                        //but we need to find how many paths with "-----------" are here before the popNum
2338                        //variable NumPathLines=0
2339                        string ShortList
2340                        SVAR/Z ShortListOfFolders= $(CntrlLocation+":ShortListOfFolders")
2341                        if(SVAR_Exists(ShortListOfFolders))
2342                                ShortList=ShortListOfFolders
2343                        else
2344                                ShortList=IR2P_GenStringOfFolders(winNm=TopPanel)
2345                        endif
2346                        popStr=StringFromList(popNum-2, ShortListOfFolders)     //one for "---" and one for 0 vs 1 based info.
2347                else
2348                        //fix the short name of the folder... - old method which uses name to keep compatible with other code...
2349                        oldpopStr=popStr
2350                        string tempStr5=IR2C_PrepareMatchString(popStr)
2351                        popStr = GrepList(RealLongListOfFolder, tempStr5,0  , ";" )
2352                        if(ItemsInList(popStr , ";")>1)
2353                                For(i=0;i<ItemsInList(popStr , ";");i+=1)
2354                                        tempStr5 = StringFromList(i,popStr,";")
2355                                        if(stringmatch(oldpopStr,StringFromList(ItemsInList(tempStr5,":")-1,tempStr5,":")))
2356                                                popStr=tempStr5
2357                                                //break
2358                                        endif
2359                                endfor
2360                        endif
2361                        popStr=RemoveEnding(popStr, ";")
2362                endif
2363                // the 2 to subtract here... One of for "---" and second because popNum is 1 based, while StringFromList is 0 based. 
2364                String tempDf=GetDataFolder(1)
2365                setDataFolder root:Packages:IrenaControlProcs
2366                setDataFolder $(TopPanel)
2367                string TopPanelFixed=PossiblyQuoteName(TopPanel)                        //this seems to be problem later, wonder why do I have it here...
2368                string/g TempYList, tempXList, tempEList
2369                SVAR TempYList
2370                SVAR TempXList
2371                SVAR TempEList
2372                setDataFolder tempDF
2373                Dtf=popStr
2374//              Execute ("PopupMenu IntensityDataName noproc, win="+TopPanel)
2375//              Execute ("PopupMenu QvecDataName noproc, win="+TopPanel)
2376//              Execute ("PopupMenu ErrorDataName noproc, win="+TopPanel)
2377                if(stringmatch(oldpopStr,"---"))
2378                        QDf="---"
2379                        IntDf="---"
2380                        EDf="---"
2381                        TempXList="---"
2382                        TempYList="---"
2383                        TempEList="---"
2384                        Execute ("PopupMenu IntensityDataName mode=1,value= #\"\\\"---;\\\"+root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempYList\", win="+TopPanel)
2385                        Execute ("PopupMenu QvecDataName mode=1,value= #\"\\\"---;\\\"+root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempXList\", win="+TopPanel)
2386                        Execute ("PopupMenu ErrorDataName mode=1,value= #\"\\\"---;\\\"+root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempEList\", win="+TopPanel)
2387                        return 0
2388                endif
2389                TempXList=IR2P_ListOfWaves("Xaxis","*",TopPanel)
2390                QDf=stringFromList(0,TempXlist)
2391                TempYlist=IR2P_ListOfWaves("Yaxis","*",TopPanel)
2392                IntDf=stringFromList(0,TempYlist)
2393                TempEList=IR2P_ListOfWaves("Error","*",TopPanel)
2394                EDf=stringFromList(0,TempElist)
2395                if(strlen(WaveMatchStr)>0 && strlen(TempXList)>5&&!UseIndra2Structure)         
2396                        TempXList=GrepList(TempXList,IR2C_PrepareMatchString(WaveMatchStr))     
2397                        if(strlen(TempXList)<1)
2398                                TempXList="---;"       
2399                        endif
2400                endif
2401                //seems we need to remove from tempXlist duplicates...
2402                //TempXList=SortList(TempXList,";", 32)
2403                TempXList = IR2P_RemoveDUplicatesFromList(TempXList)
2404                if (UseIndra2Structure)
2405                        QDf=stringFromList(0,TempXlist)
2406                        IntDf=stringFromList(0,TempYlist)
2407                        EDf=stringFromList(0,TempElist)
2408                        Execute ("PopupMenu IntensityDataName mode=1,value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempYList\", win="+TopPanel)
2409                        Execute ("PopupMenu QvecDataName mode=1,value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempXList\", win="+TopPanel)
2410                        Execute ("PopupMenu ErrorDataName mode=1,value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempEList\", win="+TopPanel)
2411                elseif(UseQRSStructure)
2412                        QDf=stringFromList(0,TempXlist)
2413                        Execute ("PopupMenu QvecDataName mode=1,value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempXList\", win="+TopPanel)
2414                        IntDf=stringFromList(0,IR2P_ListOfWaves("Yaxis",QDf,TopPanel)+";")             
2415                        EDf=stringFromList(0,IR2P_ListOfWaves("Error",QDf,TopPanel)+";")
2416                        //workaround, when nothing is found for X axis but somehtign is found for one of the other axis...
2417                        if(stringmatch(QDf,"---"))
2418                                TempYlist = "---"
2419                                tempEList="---"
2420                        endif
2421                        Execute ("PopupMenu IntensityDataName mode="+num2str(WhichListItem(IntDf, TempYlist, ";")+1)+",value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempYList\", win="+TopPanel)
2422                        Execute ("PopupMenu ErrorDataName mode="+num2str(WhichListItem(EDf, tempEList, ";")+1)+",value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempEList\", win="+TopPanel)
2423                elseif(UseResults)
2424                        Execute ("PopupMenu IntensityDataName mode=1,value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempYList\", win="+TopPanel)
2425                        Execute ("PopupMenu QvecDataName mode=1,value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempXList\", win="+TopPanel)
2426                        Execute ("PopupMenu ErrorDataName mode=1,value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempEList\", win="+TopPanel)
2427                        //needs to be done in opposite order, seems to fail due to Execute calling PopProc
2428                        QDf=stringFromList(0,TempXlist)
2429                        IntDf=stringFromList(0,TempYlist)
2430                        EDf=stringFromList(0,TempElist)
2431                elseif(UseUserDefinedData)
2432                        Execute ("PopupMenu IntensityDataName mode=1,value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempYList\", win="+TopPanel)
2433                        Execute ("PopupMenu QvecDataName mode=1,value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempXList\", win="+TopPanel)
2434                        Execute ("PopupMenu ErrorDataName mode=1,value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempEList\", win="+TopPanel)
2435                        //needs to be done in opposite order, seems to fail due to Execute calling PopProc
2436                        QDf=stringFromList(0,TempXlist)
2437                        IntDf=stringFromList(0,TempYlist)
2438                        EDf=stringFromList(0,TempElist)
2439                else
2440                        //Dale would like to remember last selected wavenames... It may be possible here. 
2441                                //              string OldIntname=IntDf
2442                                //              string OldQname=QDf
2443                                //              string OldEname=EDf
2444                        if(StringMatch(TempYlist, "*"+OldIntname+"*" ))
2445                                IntDf=OldIntname
2446                                Execute ("PopupMenu IntensityDataName mode="+num2str(WhichListItem(IntDf, TempYlist, ";")+1)+",value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempYList\", win="+TopPanel)
2447                        else
2448                                IntDf="---"
2449                                Execute ("PopupMenu IntensityDataName mode=1,value= #\"\\\"---;\\\"+root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempYList\", win="+TopPanel)
2450                        endif
2451                        if(StringMatch(TempXlist, "*"+OldQname+"*" ))
2452                                QDf=OldQname
2453                                Execute ("PopupMenu QvecDataName mode="+num2str(WhichListItem(QDf, tempEList, ";")+1)+",value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempXList\", win="+TopPanel)
2454                        else
2455                                QDf="---"
2456                                Execute ("PopupMenu QvecDataName mode=1,value= #\"\\\"---;\\\"+root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempXList\", win="+TopPanel)
2457                        endif
2458                        if(StringMatch(TempElist, "*"+OldEname+"*" ))
2459                                EDf=OldQname
2460                                Execute ("PopupMenu ErrorDataName mode="+num2str(WhichListItem(QDf, tempEList, ";")+1)+",value= #\"root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempEList\", win="+TopPanel)
2461                        else
2462                                EDf="---"
2463                                Execute ("PopupMenu ErrorDataName mode=1,value= #\"\\\"---;\\\"+root:Packages:IrenaControlProcs:"+TopPanelFixed+":tempEList\", win="+TopPanel)
2464                        endif
2465
2466                endif
2467
2468                //allow user function through hook function...
2469                infostr = FunctionInfo("IR2_ContrProc_F_Hook_Proc")
2470                if (strlen(infostr) >0)
2471                        Execute("IR2_ContrProc_F_Hook_Proc()")
2472                endif
2473                //end of allow user function through hook function
2474        endif
2475        setDataFolder oldDf
2476end
2477
2478//*****************************************************************************************************************
2479//*****************************************************************************************************************
2480Function/T IR2P_RemoveDuplicatesFromList(Listin)
2481        string ListIn
2482        string ListOut="", tmpStr
2483        variable i
2484        For(i=0;i<ItemsInList(ListIn);i+=1)
2485                tmpStr = stringFromList(i, ListIn)
2486                if(! stringmatch(ListOut, "*"+tmpStr+";*") )
2487                        ListOut += tmpStr+";"
2488                endif
2489        endfor
2490        return ListOut
2491end
2492//*****************************************************************************************************************
2493//*****************************************************************************************************************
2494//*****************************************************************************************************************
2495
2496Function IR2P_FindFolderWithWaveTypesWV(startDF, levels, WaveTypes, LongShortType, ResultingWave)
2497        String startDF, WaveTypes                  // startDF requires trailing colon.
2498        Variable levels, LongShortType          //set 1 for long type and 0 for short type return
2499        wave/T ResultingWave
2500                                 
2501                  IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2502        String dfSave
2503        String list = "", templist, tempWvName
2504        variable i, skipRest
2505       
2506        dfSave = GetDataFolder(1)
2507                //DFREF startDFRef = $(startDF)
2508                setDataFolder startDF
2509                //templist = IN2G_ConvertDataDirToList(DataFolderDir(2,startDFRef))
2510                templist = IN2G_ConvertDataDirToList(DataFolderDir(2))
2511                string ListOfRWaves=GrepList(templist,WaveTypes)
2512                        if (strlen(ListOfRWaves)>0)
2513                                if(!stringMatch(ListOfRWaves,"*R_Int;*"))
2514                                        if (LongShortType)
2515                                        Redimension /N=(numpnts(ResultingWave)+1) ResultingWave
2516                                        ResultingWave[numpnts(ResultingWave)-1]=startDF
2517                                else
2518                                        Redimension /N=(numpnts(ResultingWave)+1) ResultingWave
2519                                        ResultingWave[numpnts(ResultingWave)-1]=GetDataFolder(0)
2520                                endif
2521                        endif
2522        endif
2523        levels -= 1
2524        if (levels <= 0)
2525                return 1
2526        endif
2527       
2528      String subDF
2529      Variable index = 0, npnts
2530        Make/Free/T/N=0 FoldersToScanWv
2531           //variable NumOfFolders= CountObjectsDFR(startDFRef, 4)
2532        variable NumOfFolders= CountObjects("", 4)
2533           for(i=0;i<NumOfFolders;i+=1)
2534                npnts=numpnts(FoldersToScanWv)
2535                        redimension/N=(npnts+1) FoldersToScanWv
2536                        //FoldersToScanWv[npnts] = GetIndexedObjNameDFR(startDFRef, 4, i )
2537                        FoldersToScanWv[npnts] = GetIndexedObjName("", 4, i )
2538           endfor
2539         
2540      String temp
2541        For(i=0;i<NumOfFolders;i+=1)
2542               //temp = PossiblyQuoteName(StringFromList(i,FoldersToScan))      // Name of next data folder.
2543               temp = PossiblyQuoteName(FoldersToScanWv[i])             // Name of next data folder.
2544                 subDF = startDF + temp + ":"
2545                                if(!stringmatch(subDF, "*:Packages*" ))         
2546                         IR2P_FindFolderWithWaveTypesWV(subDF, levels, WaveTypes, LongShortType,ResultingWave)          // Recurse.
2547                        endif
2548        endfor
2549        setDataFolder dfSave
2550        return 1
2551End
2552
2553//**********************************************************************************************
2554//**********************************************************************************************
2555
2556Function/S IR2C_ReturnKnownToolResults(ToolName)
2557        string ToolName
2558       
2559        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2560        string KnownToolResults=""
2561
2562        SVAR KnownTools= root:Packages:IrenaControlProcs:AllKnownToolsResults
2563        // "Unified Fit;Size Distribution;Modeling II;Modeling I;Small-angle diffraction;Analytical models;Fractals;PDDF;Reflectivity;"
2564        SVAR ResultsDataTypesLookup= root:Packages:IrenaControlProcs:ResultsDataTypesLookup
2565        string ListOfLookups=""
2566        if(stringmatch(ToolName,"Size Distribution"))
2567                ListOfLookups = GrepList(ResultsDataTypesLookup, "^Sizes",0, ";" )
2568        elseif(stringmatch(ToolName,"Unified Fit"))
2569                ListOfLookups = GrepList(ResultsDataTypesLookup, "^Uni",0, ";" )
2570        elseif(stringmatch(ToolName,"Modeling I"))
2571                ListOfLookups = GrepList(ResultsDataTypesLookup, "^Modeling",0, ";" )
2572        elseif(stringmatch(ToolName,"Fractals"))
2573                ListOfLookups = GrepList(ResultsDataTypesLookup, "Fract",0, ";" )
2574        elseif(stringmatch(ToolName,"Small-angle diffraction"))
2575                ListOfLookups = GrepList(ResultsDataTypesLookup, "^SAD",0, ";" )
2576        elseif(stringmatch(ToolName,"Analytical models"))
2577                ListOfLookups = GrepList(ResultsDataTypesLookup, "^Analytical",0, ";" )
2578        elseif(stringmatch(ToolName,"PDDF"))
2579                ListOfLookups = GrepList(ResultsDataTypesLookup, "^PDDF",0, ";" )
2580        elseif(stringmatch(ToolName,"Reflectivity"))
2581                ListOfLookups = GrepList(ResultsDataTypesLookup, "^(Refl|SLD)",0, ";" )
2582        elseif(stringmatch(ToolName,"Modeling II"))
2583                ListOfLookups = GrepList(ResultsDataTypesLookup, "ModelLSQF",0, ";" )
2584        elseif(stringmatch(ToolName,"Guinier-Porod"))
2585                ListOfLookups = GrepList(ResultsDataTypesLookup, "GuinierPorod",0, ";" )
2586        elseif(stringmatch(ToolName,"Simple Fits"))
2587                ListOfLookups = GrepList(ResultsDataTypesLookup, "^SimFit",0, ";" )
2588        else
2589                ListOfLookups = ""
2590        endif
2591
2592
2593
2594        variable i
2595        For(i=0;i<ItemsInList(ListOfLookups  , ";");i+=1)
2596                KnownToolResults += stringFromList(0,stringFromList(i,ListOfLookups,";"),":")+";"
2597        endfor
2598       
2599       
2600        return KnownToolResults
2601end
2602//**********************************************************************************************
2603//**********************************************************************************************
2604
2605Function/S IR2C_PrepareMatchString(StrIn)
2606        string StrIn
2607        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2608        string StrOut = ""
2609        variable ic
2610        for (ic=0;ic<strlen(StrIn);ic+=1)
2611                StrOut = StrOut + IR2C_EscapeCharTable(StrIn[ic])
2612        endfor
2613        return StrOut
2614end
2615
2616// build your escape code table here
2617
2618Function/S IR2C_EscapeCharTable(cstr)
2619        string cstr
2620        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2621        string estr = ""
2622        strswitch(cstr)
2623                case "(":
2624                        estr = "\\"
2625                        break
2626                case ")":
2627                        estr = "\\"
2628                        break
2629                case "{":
2630                        estr = "\\"
2631                        break
2632                case "}":
2633                        estr = "\\"
2634                        break
2635                case "%":
2636                        estr = "\\"
2637                        break
2638                case "#":
2639                        estr = "\\"
2640                        break
2641                case "^":
2642                        estr = "\\"
2643                        break
2644                case "$":
2645                        estr = "\\"
2646                        break
2647                case "?":
2648                        estr = "\\"
2649                        break
2650                case "|":
2651                        estr = "\\"
2652                        break
2653                case "&":
2654                        estr = "\\"
2655                        break
2656                case "=":
2657                        estr = "\\"
2658                        break
2659                case "-":
2660                        estr = "\\"
2661                        break
2662                case ".":
2663                        estr = "\\"
2664                        break
2665                default:
2666                        break
2667        endswitch
2668       
2669        return (estr + cstr)
2670end
2671//**********************************************************************************************
2672//**********************************************************************************************
2673
2674//**********************************************************************************************************
2675//**********************************************************************************************************
2676//**********************************************************************************************************
2677//**********************************************************************************************************
2678//**********************************************************************************************************
2679//**********************************************************************************************************
2680
2681//Select path, populate Listbox with files with input extension and allow one or more files selection.
2682//Include Match name string and make this universally usable as data selection tool so we do not have to this again.
2683//this is used by Import ASCII and Nexus/CanSAS data
2684//**********************************************************************************************************
2685//**********************************************************************************************************
2686
2687Function IR3C_AddDataControls(PckgPathName, PckgDataFolder, PanelWindowName,DefaultExtensionStr, DefaultMatchStr,DefaultSortString, DoubleCLickFnctName)
2688        string PckgPathName, PckgDataFolder, PanelWindowName,DefaultExtensionStr, DefaultMatchStr, DefaultSortString, DoubleCLickFnctName
2689       
2690        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2691        variable DontAdd =0
2692        if(stringmatch(PanelWindowName, "*#*" ))        //# so expect subwindow... Limit only to first child here, else is not allowed for now...
2693                        //first check for the main window existance...
2694                string MainPnlWinName=StringFromList(0, PanelWindowName , "#")
2695                string ChildPnlWinName=StringFromList(1, PanelWindowName , "#")
2696                                        //check on existence here...
2697                DoWindow $(MainPnlWinName)
2698                if(!V_Flag)
2699                        abort //widnow does not exist, nothing to do...
2700                endif
2701                //OK, window exists, now check if it has the other in the childlist
2702                if(!stringmatch(ChildWindowList(MainPnlWinName), "*"+ChildPnlWinName+"*" ))
2703                        abort //that child does nto exist!
2704                endif   
2705        else            //no # no subvwindow. Use old code...
2706                DoWindow $(PanelWindowName)
2707                if(!V_Flag)
2708                        abort //widnow does not exist, nothing to do...
2709                endif
2710        endif
2711        IR3C_InitControls(PckgPathName, PckgDataFolder, PanelWindowName,DefaultExtensionStr, DefaultMatchStr,DefaultSortString, DoubleCLickFnctName)
2712        IR3C_AddControlsToWndw(PckgPathName, PckgDataFolder, PanelWindowName,DefaultExtensionStr, DefaultMatchStr,DefaultSortString, DoubleCLickFnctName)
2713end
2714//**********************************************************************************************************
2715//**********************************************************************************************************
2716//**********************************************************************************************************
2717
2718Function IR3C_AddControlsToWndw(PckgPathName, PckgDataFolder, PanelWindowName,DefaultExtensionStr, DefaultMatchStr, DefaultSortString, DoubleCLickFnctName)
2719        string PckgPathName, PckgDataFolder, PanelWindowName,DefaultExtensionStr, DefaultMatchStr, DefaultSortString, DoubleCLickFnctName
2720
2721        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2722        SVAR ControlProcsLocations=root:Packages:IrenaListboxProcs:ControlProcsLocations
2723        SVAR ControlPckgPathName=root:Packages:IrenaListboxProcs:ControlPckgPathName
2724        SVAR ControlPanelWindowName=root:Packages:IrenaListboxProcs:ControlPanelWindowName
2725        SVAR SortOptionsString=root:Packages:IrenaListboxProcs:SortOptionsString
2726//      SVAR ControlMatchString=root:Packages:IrenaListboxProcs:ControlMatchString
2727
2728        string CntrlLocation="root:Packages:"+PckgDataFolder
2729        setDataFolder $(CntrlLocation)
2730        SVAR DataSelSortString = $(CntrlLocation+":DataSelSortString")
2731        string CurSortString = DataSelSortString
2732        string TopPanel=PanelWindowName
2733       
2734        Button SelectDataPath,pos={99,50},size={130,20}, proc=IR3C_ButtonProc,title="Select data path"
2735        Button SelectDataPath,help={"Select data path to the data"}
2736        SetVariable DataPathString,pos={2,72},size={415,19},title="Data path :", noedit=1
2737        SetVariable DataPathString,help={"This is currently selected data path where Igor looks for the data"}
2738        SetVariable DataPathString,limits={-Inf,Inf,0},value= $(CntrlLocation+":DataSelPathString")
2739        SetVariable DataPathString disable=0,frame=0, styledText=1, valueColor=(1,4,52428)
2740        SetVariable NameMatchString,pos={5,91},size={240,19},proc=IR3C_SetVarProc,title="Match name (string):"
2741        SetVariable NameMatchString,help={"Insert RegEx to select only data with matching name (uses grep)"}
2742        SetVariable NameMatchString,value= $(CntrlLocation+":DataSelListBoxMatchString")
2743        SetVariable DataExtensionString,pos={260,91},size={150,19},proc=IR3C_SetVarProc,title="Data extension:"
2744        SetVariable DataExtensionString,help={"Insert extension string to mask data of only some type (dat, txt, ...)"}
2745        SetVariable DataExtensionString,value= $(CntrlLocation+":DataSelListBoxExtString")
2746        Button SelectAll,pos={5,112},size={110,15}, proc=IR3C_ButtonProc,title="Select all"
2747        Button SelectAll,help={"Select all data in the listbox"}
2748        Button DeSelectAll,pos={145,112},size={110,15}, proc=IR3C_ButtonProc,title="Deselect all"
2749        Button DeSelectAll,help={"DeSelect all data in the listbox"}
2750        PopupMenu SortOptionString,pos={280,112},size={160,21},proc=IR3C_PopMenuProc,title="Sort:", help={"Select how to sort the data"}
2751        PopupMenu SortOptionString,mode=1,popvalue=CurSortString, value=#"root:Packages:IrenaListboxProcs:SortOptionsString"
2752        TitleBox Info1PanelProc title="\Zr110List of available files",pos={10,128},frame=0,fstyle=1, fixedSize=1,size={220,20},fColor=(0,0,52224)
2753        ListBox ListOfAvailableData,pos={5,147},size={230,280}
2754        ListBox ListOfAvailableData,help={"Select files from this location you want to import"}
2755        ListBox ListOfAvailableData,listWave=$(CntrlLocation+":WaveOfFiles")
2756        ListBox ListOfAvailableData,selWave=$(CntrlLocation+":WaveOfSelections")
2757        ListBox ListOfAvailableData,mode= 9, proc=IR3C_ListBoxProc
2758        //and update content, if possible...
2759        IR3C_UpdateListOfFilesInWvs(PanelWindowName)
2760        IR3C_SortListOfFilesInWvs(PanelWindowName)     
2761end     
2762//**********************************************************************************************************
2763//**********************************************************************************************************
2764//************************************************************************************************************
2765//************************************************************************************************************
2766Function IR3C_ListBoxProc(lba) : ListBoxControl
2767        STRUCT WMListboxAction &lba
2768        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2769      //Prevent Igor from invoking this before we are done with instance 1
2770      lba.blockReentry = 1
2771        string TopPanel=WinName(0, 64)
2772        Variable row = lba.row
2773        Variable col = lba.col
2774        WAVE/T/Z listWave = lba.listWave
2775        WAVE/Z selWave = lba.selWave
2776        Variable i
2777        string items=""
2778        SVAR    SortOptionsString = root:Packages:IrenaListboxProcs:SortOptionsString
2779                                                                                                //="Sort;Inv_Sort;Sort _XYZ;Inv Sort _XYZ;"
2780        SVAR ControlProcsLocations=root:Packages:IrenaListboxProcs:ControlProcsLocations
2781        SVAR ControlPckgPathName=root:Packages:IrenaListboxProcs:ControlPckgPathName
2782        SVAR ControlDoubleCLickFnctName=root:Packages:IrenaListboxProcs:ControlDoubleCLickFnctName
2783       
2784        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations,"=",";")
2785        string CntrlPathName=StringByKey(TopPanel, ControlPckgPathName,"=",";")
2786        string DoubleCLickFnctName=StringByKey(TopPanel, ControlDoubleCLickFnctName,"=",";")
2787
2788        switch( lba.eventCode )
2789                case -1: // control being killed
2790                        break
2791                case 1: // mouse down
2792                        Wave/T WaveOfFiles              = $(CntrlLocation+":WaveOfFiles")
2793                        Wave WaveOfSelections   = $(CntrlLocation+":WaveOfSelections")
2794                        SVAR DataSelSortString = $(CntrlLocation+":DataSelSortString")
2795                        SVAR DataSelListBoxMatchString = $(CntrlLocation+":DataSelListBoxMatchString")
2796                        variable oldSets
2797
2798                        if (lba.eventMod & 0x10)        // rightclick
2799                                // list of items for PopupContextualMenu
2800                                items = "Refresh Content;Select All;Deselect All;Match \"Blank\";Match \"Empty\";Hide \"Blank\";Hide \"Empty\";Remove Match or Hide;"+SortOptionsString
2801                                PopupContextualMenu items
2802                                // V_flag is index of user selected item
2803                                switch (V_flag)
2804                                        case 1: // "Refresh Content"
2805                                                //refresh content, but here it will depend where we call it from.
2806                                                ControlInfo/W=$(TopPanel) ListOfAvailableData
2807                                                 oldSets=V_startRow
2808                                                IR3C_UpdateListOfFilesInWvs(TopPanel)
2809                                                IR3C_SortListOfFilesInWvs(TopPanel)     
2810                                                ListBox ListOfAvailableData,win=$(TopPanel),row=V_startRow
2811                                                break;
2812                                        case 2: // "Select All;"
2813                                              selWave = 1
2814                                                break;
2815                                        case 3: // "Deselect All"
2816                                              selWave = 0
2817                                                break;
2818                                        case 4: //M<atch Blank
2819                                                DataSelListBoxMatchString="(?i)Blank"
2820                                                ControlInfo/W=$(TopPanel) ListOfAvailableData
2821                                                 oldSets=V_startRow
2822                                                IR3C_UpdateListOfFilesInWvs(TopPanel)
2823                                                IR3C_SortListOfFilesInWvs(TopPanel)     
2824                                                ListBox ListOfAvailableData,win=$(TopPanel),row=V_startRow
2825                                                break;
2826                                        case 5: //Match EMpty
2827                                                DataSelListBoxMatchString="(?i)Empty"
2828                                                ControlInfo/W=$(TopPanel) ListOfAvailableData
2829                                                 oldSets=V_startRow
2830                                                IR3C_UpdateListOfFilesInWvs(TopPanel)
2831                                                IR3C_SortListOfFilesInWvs(TopPanel)     
2832                                                ListBox ListOfAvailableData,win=$(TopPanel),row=V_startRow
2833                                                break;
2834                                        case 6: //hide blank
2835                                                DataSelListBoxMatchString="^((?!(?i)Blank).)*$"
2836                                                ControlInfo/W=$(TopPanel) ListOfAvailableData
2837                                                 oldSets=V_startRow
2838                                                IR3C_UpdateListOfFilesInWvs(TopPanel)
2839                                                IR3C_SortListOfFilesInWvs(TopPanel)     
2840                                                ListBox ListOfAvailableData,win=$(TopPanel),row=V_startRow
2841                                                break;
2842                                        case 7: //hide empty
2843                                                DataSelListBoxMatchString="^((?!(?i)Empty).)*$"
2844                                                ControlInfo/W=$(TopPanel) ListOfAvailableData
2845                                                 oldSets=V_startRow
2846                                                IR3C_UpdateListOfFilesInWvs(TopPanel)
2847                                                IR3C_SortListOfFilesInWvs(TopPanel)     
2848                                                ListBox ListOfAvailableData,win=$(TopPanel),row=V_startRow
2849                                                break;
2850                                        case 8: //remove Match
2851                                                DataSelListBoxMatchString=""
2852                                                ControlInfo/W=$(TopPanel) ListOfAvailableData
2853                                                 oldSets=V_startRow
2854                                                IR3C_UpdateListOfFilesInWvs(TopPanel)
2855                                                IR3C_SortListOfFilesInWvs(TopPanel)     
2856                                                ListBox ListOfAvailableData,win=$(TopPanel),row=V_startRow
2857                                                break;
2858
2859                                        default :       // "Sort"
2860                                                DataSelSortString = StringFromList(V_flag-1, items)
2861                                                PopupMenu SortOptionString,win=$(TopPanel), mode=1,popvalue=DataSelSortString
2862                                                IR3C_SortListOfFilesInWvs(TopPanel)     
2863                                                break;
2864                                        endswitch
2865                                endif
2866                        break
2867                case 3: // double click
2868                        if(strlen(DoubleCLickFnctName)>0)
2869                                Execute(DoubleCLickFnctName+"()")
2870                        endif
2871                        break
2872                case 4: // cell selection
2873                case 5: // cell selection plus shift key
2874                        break
2875                case 6: // begin edit
2876                        break
2877                case 7: // finish edit
2878                        break
2879                case 13: // checkbox clicked (Igor 6.2 or later)
2880                        break
2881        endswitch
2882
2883        return 0
2884End
2885//************************************************************************************************************
2886//************************************************************************************************************
2887//**********************************************************************************************************
2888//**********************************************************************************************************
2889
2890Function IR3C_PopMenuProc(ctrlName,popNum,popStr) : PopupMenuControl
2891        String ctrlName
2892        Variable popNum
2893        String popStr
2894        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2895        string TopPanel=WinName(0, 64)
2896
2897        if (Cmpstr(ctrlName,"SortOptionString")==0)
2898                SVAR ControlProcsLocations=root:Packages:IrenaListboxProcs:ControlProcsLocations
2899                string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations,"=",";")
2900                SVAR DataSelSortString = $(CntrlLocation+":DataSelSortString")
2901                DataSelSortString = popStr
2902                IR3C_SortListOfFilesInWvs(TopPanel)
2903        endif
2904End
2905//**********************************************************************************************************
2906//**********************************************************************************************************
2907//************************************************************************************************************
2908Function IR3C_SortListOfFilesInWvs(TopPanel)
2909        string TopPanel
2910       
2911        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2912        SVAR ControlProcsLocations=root:Packages:IrenaListboxProcs:ControlProcsLocations
2913        SVAR ControlPckgPathName=root:Packages:IrenaListboxProcs:ControlPckgPathName
2914        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations,"=",";")
2915        string CntrlPathName=StringByKey(TopPanel, ControlPckgPathName,"=",";")
2916
2917        Wave/T WaveOfFiles              = $(CntrlLocation+":WaveOfFiles")
2918        Wave WaveOfSelections   = $(CntrlLocation+":WaveOfSelections")
2919        SVAR DataSelSortString = $(CntrlLocation+":DataSelSortString")
2920        variable i
2921        if(numpnts(WaveOfFiles)<2)
2922                return 0
2923        endif
2924//      string/g SortOptionsString="Sort;Inv_Sort;Sort _XYZ;Inv Sort _XYZ;"
2925        Duplicate/Free WaveOfSelections, TempWv
2926        if(StringMatch(DataSelSortString, "Sort" ))
2927                Sort WaveOfFiles, WaveOfFiles, WaveOfSelections
2928        elseif(StringMatch(DataSelSortString, "Inv_Sort" ))
2929                Sort/R WaveOfFiles, WaveOfFiles, WaveOfSelections
2930        elseif(StringMatch(DataSelSortString, "Sort _XYZ" ))
2931                        //For(i=0;i<numpnts(TempWv);i+=1)
2932                TempWv = IN2G_FindNumericalIndexForSorting(WaveOfFiles[p])
2933                        //TempWv[i] = str2num(StringFromList(ItemsInList(WaveOfFiles[i]  , "_")-1, WaveOfFiles[i]  , "_"))
2934                        //endfor
2935                Sort TempWv, WaveOfFiles, WaveOfSelections
2936        elseif(StringMatch(DataSelSortString, "Inv Sort _XYZ" ))
2937                        //For(i=0;i<numpnts(TempWv);i+=1)
2938                TempWv = IN2G_FindNumericalIndexForSorting(WaveOfFiles[p])
2939                        //TempWv[i] = str2num(StringFromList(ItemsInList(WaveOfFiles[i]  , "_")-1, WaveOfFiles[i]  , "_"))
2940                        //endfor
2941                Sort/R TempWv, WaveOfFiles, WaveOfSelections
2942        elseif(StringMatch(DataSelSortString, "Sort _XYZ_xyz" ))                        //sort by XYZ first and then by xyz
2943                For(i=0;i<numpnts(TempWv);i+=1)
2944                        TempWv[i] = str2num(StringFromList(ItemsInList(WaveOfFiles[i]  , "_")-2, WaveOfFiles[i]  , "_"))*1e6+str2num(StringFromList(ItemsInList(WaveOfFiles[i]  , "_")-1, WaveOfFiles[i]  , "_"))
2945                endfor
2946                Sort TempWv, WaveOfFiles, WaveOfSelections
2947        endif
2948       
2949end
2950//************************************************************************************************************
2951//**********************************************************************************************************
2952//**********************************************************************************************************
2953Function IR3C_SetVarProc(sva) : SetVariableControl
2954        STRUCT WMSetVariableAction &sva
2955
2956        Variable dval = sva.dval
2957        String sval = sva.sval
2958        string ctrlName = sva.ctrlName
2959        string TopPanel=sva.win
2960
2961        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2962        if (cmpstr(ctrlName,"NameMatchString")==0)
2963                IR3C_UpdateListOfFilesInWvs(TopPanel)
2964                IR3C_SortListOfFilesInWvs(TopPanel)
2965        endif
2966        if (cmpstr(ctrlName,"DataExtensionString")==0)
2967                IR3C_UpdateListOfFilesInWvs(TopPanel)
2968                IR3C_SortListOfFilesInWvs(TopPanel)
2969        endif
2970        return 0
2971End
2972//**********************************************************************************************************
2973//**********************************************************************************************************
2974
2975
2976Function IR3C_ButtonProc(ba) : ButtonControl
2977        STRUCT WMButtonAction &ba
2978        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2979
2980        switch( ba.eventCode )
2981                case 2: // mouse up
2982                        string TopPanel=ba.win
2983                        // click code here
2984                        if(stringMatch(ba.ctrlName,"SelectDataPath"))
2985                                IR3C_SelectDataPath(TopPanel)   
2986                                IR3C_UpdateListOfFilesInWvs(TopPanel)
2987                                IR3C_SortListOfFilesInWvs(TopPanel)
2988                        endif
2989                        if(stringMatch(ba.ctrlName,"SelectAll"))
2990                                IR3C_SelectDeselectAll(TopPanel,1)     
2991                        endif
2992                        if(stringMatch(ba.ctrlName,"DeSelectAll"))
2993                                IR3C_SelectDeselectAll(TopPanel,0)     
2994                        endif
2995                       
2996                        break
2997                case -1: // control being killed
2998                        break
2999        endswitch
3000
3001        return 0
3002End
3003//************************************************************************************************************
3004//************************************************************************************************************
3005
3006Function IR3C_SelectDataPath(TopPanel)
3007        string TopPanel
3008       
3009        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
3010        SVAR ControlProcsLocations=root:Packages:IrenaListboxProcs:ControlProcsLocations
3011        SVAR ControlPckgPathName=root:Packages:IrenaListboxProcs:ControlPckgPathName
3012        SVAR ControlPanelWindowName=root:Packages:IrenaListboxProcs:ControlPanelWindowName
3013        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations,"=",";")
3014        string CntrlPathName=StringByKey(TopPanel, ControlPckgPathName,"=",";")
3015        //check if we are running on USAXS computers
3016        GetFileFOlderInfo/Q/Z "Z:USAXS_data:"
3017        if(V_isFolder)
3018                //OK, this computer has Z:USAXS_data
3019                PathInfo $(CntrlPathName)
3020                if(V_flag==0)
3021                        NewPath/Q  $(CntrlPathName), "Z:USAXS_data:"
3022                        pathinfo/S $(CntrlPathName)
3023                endif
3024        endif
3025       
3026        NewPath /M="Select path to data" /O $(CntrlPathName)
3027        if (V_Flag!=0)
3028                abort
3029        endif
3030        PathInfo $(CntrlPathName)
3031        string tmpStr= S_Path
3032        SVAR DataSelPathString=$(CntrlLocation+":DataSelPathString")
3033       
3034        //figure out the size of the string we can use...
3035        variable Width = FontSizeStringWidth(ReplaceString("'",IN2G_LkUpDfltStr("DefaultFontType"),""), str2num(IN2G_LkUpDfltVar("DefaultFontSize")),0,S_Path)
3036        variable ratio = (415 - FontSizeStringWidth(ReplaceString("'",IN2G_LkUpDfltStr("DefaultFontType"),""), str2num(IN2G_LkUpDfltVar("DefaultFontSize")),0,"Data Path :"))/width
3037        if(ratio<0.8)
3038                DataSelPathString = "\JR\Zr080"+S_Path
3039        elseif(ratio>0.8 && ratio<0.9)
3040                DataSelPathString = "\JR\Zr080"+S_Path
3041        elseif(ratio>0.9 && ratio<1)
3042                DataSelPathString = "\JR\Zr090"+S_Path
3043        elseif(ratio>1 && ratio<1.1)
3044                DataSelPathString = "\JR"+S_Path
3045        elseif(ratio>1.1 && ratio<1.2)
3046                DataSelPathString = "\JR\Zr110"+S_Path
3047        elseif(ratio>1.2 && ratio<1.3)
3048                DataSelPathString = "\JR\Zr120"+S_Path
3049        elseif(ratio>1.3 && ratio<1.4)
3050                DataSelPathString = "\JR\Zr130"+S_Path
3051        elseif(ratio>1.4 && ratio<1.5)
3052                DataSelPathString = "\JR\Zr130"+S_Path
3053        elseif(ratio>1.5)
3054                DataSelPathString = "\JR\Zr130"+S_Path
3055        endif
3056       
3057end
3058//************************************************************************************************************
3059//************************************************************************************************************
3060//************************************************************************************************************
3061Function IR3C_UpdateListOfFilesInWvs(TopPanel)
3062        string TopPanel
3063       
3064        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
3065        SVAR ControlProcsLocations=root:Packages:IrenaListboxProcs:ControlProcsLocations
3066        SVAR ControlPckgPathName=root:Packages:IrenaListboxProcs:ControlPckgPathName
3067        SVAR ControlPanelWindowName=root:Packages:IrenaListboxProcs:ControlPanelWindowName
3068        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations,"=",";")
3069        string CntrlPathName=StringByKey(TopPanel, ControlPckgPathName,"=",";")
3070
3071        SVAR NameMatchString            = $(CntrlLocation+":DataSelListBoxMatchString")
3072        SVAR DataExtension              = $(CntrlLocation+":DataSelListBoxExtString")
3073        Wave/T WaveOfFiles              = $(CntrlLocation+":WaveOfFiles")
3074        Wave WaveOfSelections   = $(CntrlLocation+":WaveOfSelections")
3075        string ListOfAllFiles
3076        string LocalDataExtension
3077        variable i, imax
3078        LocalDataExtension = DataExtension
3079        if (cmpstr(LocalDataExtension[0],".")!=0)
3080                LocalDataExtension = "."+LocalDataExtension
3081        endif
3082        PathInfo $(CntrlPathName)
3083        if(V_Flag)
3084                if (strlen(LocalDataExtension)<=1)
3085                        ListOfAllFiles = IndexedFile($(CntrlPathName),-1,"????")
3086                else           
3087                        ListOfAllFiles = IndexedFile($(CntrlPathName),-1,LocalDataExtension)
3088                endif
3089                if(strlen(NameMatchString)>0)
3090                        ListOfAllFiles = GrepList(ListOfAllFiles, NameMatchString )
3091                endif
3092                //remove Invisible Mac files, .DS_Store and .plist
3093                //ListOfAllFiles = RemoveFromList(".DS_Store", ListOfAllFiles)
3094                //ListOfAllFiles = RemoveFromList("EagleFiler Metadata.plist", ListOfAllFiles)
3095                ListOfAllFiles = IN2G_RemoveInvisibleFiles(ListOfAllFiles)
3096       
3097                imax = ItemsInList(ListOfAllFiles,";")
3098                Redimension/N=(imax) WaveOfSelections
3099                Redimension/N=(imax) WaveOfFiles
3100                for (i=0;i<imax;i+=1)
3101                        WaveOfFiles[i] = stringFromList(i, ListOfAllFiles,";")
3102                endfor
3103        else
3104                Redimension/N=0 WaveOfSelections
3105                Redimension/N=0 WaveOfFiles
3106        endif
3107end
3108//************************************************************************************************************
3109//************************************************************************************************************
3110//************************************************************************************************************
3111//************************************************************************************************************
3112Function IR3C_SelectDeselectAll(TopPanel, Select)
3113        string TopPanel
3114        variable Select
3115       
3116        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
3117        SVAR ControlProcsLocations=root:Packages:IrenaListboxProcs:ControlProcsLocations
3118        SVAR ControlPckgPathName=root:Packages:IrenaListboxProcs:ControlPckgPathName
3119        SVAR ControlPanelWindowName=root:Packages:IrenaListboxProcs:ControlPanelWindowName
3120        string CntrlLocation="root:Packages:"+StringByKey(TopPanel, ControlProcsLocations,"=",";")
3121        string CntrlPathName=StringByKey(TopPanel, ControlPckgPathName,"=",";")
3122
3123        Wave WaveOfSelections   = $(CntrlLocation+":WaveOfSelections")
3124        if(select)
3125                WaveOfSelections=1
3126        else
3127                WaveOfSelections=0
3128        endif
3129end
3130//************************************************************************************************************
3131//************************************************************************************************************
3132
3133//**********************************************************************************************************
3134//**********************************************************************************************************
3135//**********************************************************************************************************
3136//**********************************************************************************************************
3137//**********************************************************************************************************
3138
3139Function IR3C_InitControls(PckgPathName, PckgDataFolder, PanelWindowName,DefaultExtensionStr, DefaultMatchStr, DefaultSortString, DoubleCLickFnctName )
3140        string PckgPathName, PckgDataFolder, PanelWindowName,DefaultExtensionStr, DefaultMatchStr, DefaultSortString, DoubleCLickFnctName
3141       
3142        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
3143        DFref oldDf= GetDataFolderDFR()
3144
3145        setdatafolder root:
3146        NewDataFolder/O/S root:Packages
3147        NewDataFolder/O/S IrenaListboxProcs
3148
3149        variable i
3150       
3151        SVAR/Z ControlProcsLocations
3152        if(!SVAR_Exists(ControlProcsLocations))
3153                string/g ControlProcsLocations
3154        endif
3155        ControlProcsLocations=ReplaceStringByKey(PanelWindowName, ControlProcsLocations, PckgDataFolder,"=",";" )
3156
3157        SVAR/Z ControlPckgPathName
3158        if(!SVAR_Exists(ControlPckgPathName))
3159                string/g ControlPckgPathName
3160        endif
3161        ControlPckgPathName=ReplaceStringByKey(PanelWindowName, ControlPckgPathName, PckgPathName, "=",";" )
3162
3163        SVAR/Z ControlPanelWindowName
3164        if(!SVAR_Exists(ControlPanelWindowName))
3165                string/g ControlPanelWindowName
3166        endif
3167        ControlPanelWindowName=ReplaceStringByKey(PanelWindowName, ControlPanelWindowName, PanelWindowName, "=",";" )
3168       
3169        SVAR/Z ControlDoubleCLickFnctName
3170        if(!SVAR_Exists(ControlDoubleCLickFnctName))
3171                string/g ControlDoubleCLickFnctName
3172        endif
3173        ControlDoubleCLickFnctName=ReplaceStringByKey(PanelWindowName, ControlDoubleCLickFnctName, DoubleCLickFnctName, "=",";" )
3174
3175        string/g SortOptionsString="Sort;Inv_Sort;Sort _XYZ;Inv Sort _XYZ;Sort _XYZ_xyz;"
3176        SVAR SortOptionsString
3177
3178        //check for presence of the folder where this is suppose to work.
3179        setDataFolder root:Packages
3180        string TmpStr=PckgDataFolder
3181        TmpStr = ReplaceString("root:Packages:", TmpStr, "")
3182        if(!DataFolderExists(TmpStr))
3183                For(i=0;i<itemsInList(TmpStr,":");i+=1)
3184                                NewDataFOlder/O/S $(StringFromList(i,TmpStr,":"))
3185                endfor
3186        else
3187                setDataFolder PckgDataFolder
3188        endif
3189        //Make the waves & strings needed.
3190        Make/O/N=0/T     WaveOfFiles
3191        Make/O/N=0 WaveOfSelections
3192        string/g DataSelListBoxMatchString
3193        DataSelListBoxMatchString = DefaultMatchStr
3194        string/g DataSelListBoxExtString = DefaultExtensionStr
3195        PathInfo  $PckgPathName
3196        string/g DataSelPathString = "\Zr140"+S_path
3197        //figure out the size of the string we can use...
3198        variable Width = FontSizeStringWidth(ReplaceString("'",IN2G_LkUpDfltStr("DefaultFontType"),""), str2num(IN2G_LkUpDfltVar("DefaultFontSize")),0,S_Path)
3199        variable ratio = (415 - FontSizeStringWidth(ReplaceString("'",IN2G_LkUpDfltStr("DefaultFontType"),""), str2num(IN2G_LkUpDfltVar("DefaultFontSize")),0,"Data Path :"))/width
3200        if(ratio<0.8)
3201                DataSelPathString = "\JR\Zr080"+S_Path
3202        elseif(ratio>0.8 && ratio<0.9)
3203                DataSelPathString = "\JR\Zr080"+S_Path
3204        elseif(ratio>0.9 && ratio<1)
3205                DataSelPathString = "\JR\Zr090"+S_Path
3206        elseif(ratio>1 && ratio<1.1)
3207                DataSelPathString = "\JR"+S_Path
3208        elseif(ratio>1.1 && ratio<1.2)
3209                DataSelPathString = "\JR\Zr110"+S_Path
3210        elseif(ratio>1.2 && ratio<1.3)
3211                DataSelPathString = "\JR\Zr120"+S_Path
3212        elseif(ratio>1.3 && ratio<1.4)
3213                DataSelPathString = "\JR\Zr130"+S_Path
3214        elseif(ratio>1.4 && ratio<1.5)
3215                DataSelPathString = "\JR\Zr130"+S_Path
3216        elseif(ratio>1.5)
3217                DataSelPathString = "\JR\Zr130"+S_Path
3218        endif
3219               
3220        string/g DataSelSortString
3221        SVAR DataSelSortString
3222        if(strlen(DefaultSortString)>0 && StringMatch(SortOptionsString, "*"+DefaultSortString+"*" ))
3223                DataSelSortString = DefaultSortString
3224        else
3225                DataSelSortString = StringFromList(0,SortOptionsString)
3226        endif
3227        setDataFolder OldDf
3228       
3229end
3230//**********************************************************************************************************
3231//**********************************************************************************************************
3232//**********************************************************************************************************
3233//                      Multi data selection tools              !!!!!!!
3234//**************************************************************************************
3235//**************************************************************************************
3236//**************************************************************************************
3237//**************************************************************************************
3238//**************************************************************************************
3239
3240Function IR3C_MultiAppendControls(ToolPackageFolder,PanelName, DoubleClickFunNm, MouseDownFunNm, OnlyUSAXSReducedData,AllowSlitSmearedData)
3241                string PanelName,ToolPackageFolder,DoubleClickFunNm, MouseDownFunNm
3242                variable OnlyUSAXSReducedData,AllowSlitSmearedData
3243                //this will append controls to panels, which require set of control for multi sample selection 
3244                //      NewPanel /K=1 /W=(5.25,43.25,605,820) as "MultiData Ploting tool"
3245                //initialize controls first by running this command
3246                //IR2C_AddDataControls("Irena:MultiSaPlotFit","IR3L_MultiSaPlotFitPanel","DSM_Int;M_DSM_Int;SMR_Int;M_SMR_Int;","AllCurrentlyAllowedTypes",UserDataTypes,UserNameString,XUserLookup,EUserLookup, 0,1, DoNotAddControls=1)
3247                //then call this function, it will add listbox and other controls.
3248                IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
3249                string PathToPackagesFolder="root:Packages:"+ToolPackageFolder
3250                IR3C_InitMultiControls(PathToPackagesFolder, PanelName, DoubleClickFunNm,MouseDownFunNm, OnlyUSAXSReducedData,AllowSlitSmearedData)                     
3251                TitleBox Dataselection, win=$(PanelName), title="\Zr130Data selection",size={100,15},pos={10,10},frame=0,fColor=(0,0,65535),labelBack=0
3252                Checkbox UseIndra2Data, win=$(PanelName),pos={10,30},size={76,14},title="USAXS", proc=IR3C_MultiCheckProc, variable=$(PathToPackagesFolder+":UseIndra2Data")
3253                checkbox UseQRSData, win=$(PanelName),pos={100,30}, title="QRS(QIS)", size={76,14},proc=IR3C_MultiCheckProc, variable=$(PathToPackagesFolder+":UseQRSdata")
3254                checkbox UseResults, win=$(PanelName),pos={190,30}, title="Irena results", size={76,14},proc=IR3C_MultiCheckProc, variable=$(PathToPackagesFolder+":UseResults")
3255                PopupMenu StartFolderSelection,win=$(PanelName),pos={10,50},size={180,15},proc=IR3C_MultiPopMenuProc,title="Start fldr"
3256                SVAR DataStartFolder =  $(PathToPackagesFolder+":DataStartFolder")
3257                //PopupMenu StartFolderSelection,mode=1,popvalue=DataStartFolder,value= #"\"root:;\"+IR3C_GenStringOfFolders2(\"+PathToPackagesFolder+\":UseIndra2Data, \"+PathToPackagesFolder+\":UseQRSdata,2,1)"
3258                PopupMenu StartFolderSelection,mode=1,popvalue=DataStartFolder,value= IR2C_MultiSTartFolderSelection()
3259               
3260                SetVariable FolderNameMatchString,win=$(PanelName),pos={10,75},size={210,15}, proc=IR3C_MultiSetVarProc,title="Folder Match (RegEx)"
3261                Setvariable FolderNameMatchString,fSize=10,fStyle=2, variable=$(PathToPackagesFolder+":DataMatchString"), help={"Scope down the folder selection using grep"}
3262                checkbox InvertGrepSearch, win=$(PanelName),pos={222,75}, title="Invert?", size={76,14},proc=IR3C_MultiCheckProc, variable=$(PathToPackagesFolder+":InvertGrepSearch")
3263       
3264                PopupMenu SortFolders,win=$(PanelName),pos={10,100},size={180,20},fStyle=2,proc=IR3C_MultiPopMenuProc,title="Sort Folders"
3265                SVAR FolderSortString =  $(PathToPackagesFolder+":FolderSortString")
3266                string pathToAll
3267                pathToAll = PathToPackagesFolder+":FolderSortStringAll"
3268                PopupMenu SortFolders,mode=1,popvalue=FolderSortString,value= #pathToAll
3269               
3270                //Indra data types:
3271                PopupMenu SubTypeData,win=$(PanelName),pos={10,120},size={180,20},fStyle=2,proc=IR3C_MultiPopMenuProc,title="Sub-type Data"
3272                SVAR DataSubType = $(PathToPackagesFolder+":DataSubType")
3273                PopupMenu SubTypeData,mode=1,popvalue=DataSubType,value= ""
3274                //results data types
3275                SVAR SelectedResultsTool =  $(PathToPackagesFolder+":SelectedResultsTool")
3276                SVAR SelectedResultsType =  $(PathToPackagesFolder+":SelectedResultsType")
3277                SVAR ResultsGenerationToUse =  $(PathToPackagesFolder+":ResultsGenerationToUse")
3278                PopupMenu ToolResultsSelector,win=$(PanelName),pos={10,120},size={230,15},fStyle=2,proc=IR3C_MultiPopMenuProc,title="Which tool results?    "
3279                PopupMenu ToolResultsSelector,win=$(PanelName),mode=1,popvalue=SelectedResultsTool,value= #"root:Packages:IrenaControlProcs:AllKnownToolsResults"
3280                PopupMenu ResultsTypeSelector,win=$(PanelName),pos={10,140},size={230,15},fStyle=2,proc=IR3C_MultiPopMenuProc,title="Which results?          "
3281                PopupMenu ResultsTypeSelector,win=$(PanelName),mode=1,popvalue=SelectedResultsType,value= #"IR2C_ReturnKnownToolResults(\"+PathToPackagesFolder+\":SelectedResultsTool)"
3282                PopupMenu ResultsGenerationToUse,pos={10,160},size={230,15},fStyle=2,proc=IR3C_MultiPopMenuProc,title="Results Generation?           "
3283                PopupMenu ResultsGenerationToUse,win=$(PanelName),mode=1,popvalue=ResultsGenerationToUse,value= "Latest;_0;_1;_2;_3;_4;_5;_6;_7;_8;_9;_10;"
3284
3285                SetVariable genericXgrepString,win=$(PanelName),pos={10,120},size={210,15}, proc=IR3C_MultiSetVarProc,title="X match (RegEx)"
3286                Setvariable genericXgrepString,fSize=10,fStyle=2, variable=$(PathToPackagesFolder+":genericXgrepString"), help={"Scope down the X wave selection using grep"}
3287                SetVariable genericYgrepString,win=$(PanelName),pos={10,140},size={210,15}, proc=IR3C_MultiSetVarProc,title="Y match (RegEx)"
3288                Setvariable genericYgrepString,fSize=10,fStyle=2, variable=$(PathToPackagesFolder+":genericYgrepString"), help={"Scope down the Y wave selection using grep"}
3289                SetVariable genericEgrepString,win=$(PanelName),pos={10,160},size={210,15}, proc=IR3C_MultiSetVarProc,title="E match (RegEx)"
3290                Setvariable genericEgrepString,fSize=10,fStyle=2, variable=$(PathToPackagesFolder+":genericEgrepString"), help={"Scope down the E wave selection using grep"}
3291               
3292                ListBox DataFolderSelection,win=$(PanelName),pos={4,180},size={250,495}, mode=10
3293                ListBox DataFolderSelection,listWave=$(PathToPackagesFolder+":ListOfAvailableData")
3294                ListBox DataFolderSelection,selWave=$(PathToPackagesFolder+":SelectionOfAvailableData")
3295                ListBox DataFolderSelection,proc=IR3C_MultiListBoxProc
3296       
3297       
3298                IR3C_MultiFixPanelControls(PanelName,ToolPackageFolder)
3299
3300end
3301//**************************************************************************************
3302//**************************************************************************************
3303//                                      this follwoing is very importnat function,
3304//                      it sets the names of selected X, Y, and E data for user
3305//                                      this may require bit more of debugging...
3306//**************************************************************************************
3307//**************************************************************************************
3308
3309Function IR3C_SelectWaveNamesData(CntrlLocationG, SelectedDataFolderName)
3310                string CntrlLocationG, SelectedDataFolderName
3311               
3312                string CntrlLocation="root:Packages:"+CntrlLocationG
3313
3314                SVAR StartFolderName=$(CntrlLocation+":DataStartFolder")
3315                SVAR DataFolderName=$(CntrlLocation+":DataFolderName")
3316                SVAR IntensityWaveName=$(CntrlLocation+":IntensityWaveName")
3317                SVAR QWavename=$(CntrlLocation+":QWavename")
3318                SVAR ErrorWaveName=$(CntrlLocation+":ErrorWaveName")
3319                SVAR dQWavename=$(CntrlLocation+":dQWavename")
3320                NVAR UseIndra2Data=$(CntrlLocation+":UseIndra2Data")
3321                NVAR UseQRSdata=$(CntrlLocation+":UseQRSdata")
3322                NVAR useResults=$(CntrlLocation+":useResults")
3323                SVAR DataSubType = $(CntrlLocation+":DataSubType")
3324                //these are variables used by the control procedure
3325                NVAR  UseUserDefinedData=  $(CntrlLocation+":UseUserDefinedData")
3326                NVAR  UseModelData = $(CntrlLocation+":UseModelData")
3327                SVAR DataFolderName  = $(CntrlLocation+":DataFolderName")
3328                SVAR IntensityWaveName = $(CntrlLocation+":IntensityWaveName")
3329                SVAR QWavename = $(CntrlLocation+":QWavename")
3330                SVAR ErrorWaveName = $(CntrlLocation+":ErrorWaveName")
3331                SVAR ResultsDataTypesLookup=root:Packages:IrenaControlProcs:ResultsDataTypesLookup
3332               
3333                if(UseQRSdata+UseIndra2Data+useResults> 1)
3334                        Abort "Data type not selected right, please, select type of data first"
3335                endif
3336               
3337                string ControlPanelName                 ///name of top panel which this is called from...
3338                ControlPanelName = WinName(0,64)
3339                string TempStr, result, tempStr2, TempYName, TempXName, tempStr3
3340                variable i, j
3341               
3342                UseUserDefinedData = 0
3343                UseModelData = 0
3344                DataFolderName = StartFolderName+SelectedDataFolderName
3345                if(UseQRSdata)
3346                        //get the names of waves, assume this tool actually works. May not under some conditions. In that case this tool will not work.
3347                        QWavename = stringFromList(0,IR2P_ListOfWaves("Xaxis","", ControlPanelName))
3348                        IntensityWaveName = stringFromList(0,IR2P_ListOfWaves("Yaxis","*", ControlPanelName))
3349                        ErrorWaveName = stringFromList(0,IR2P_ListOfWaves("Error","*", ControlPanelName))
3350                        if(UseIndra2Data)
3351                                dQWavename = ReplaceString("Qvec", QWavename, "dQ")
3352                        elseif(UseQRSdata)
3353                                dQWavename = "w"+QWavename[1,31]
3354                        else
3355                                dQWavename = ""
3356                        endif
3357                elseif(UseIndra2Data)
3358                        string DataSubTypeInt = DataSubType
3359                        SVAR QvecLookup = $(CntrlLocation+":QvecLookupUSAXS")
3360                        SVAR ErrorLookup = $(CntrlLocation+":ErrorLookupUSAXS")
3361                        SVAR dQLookup = $(CntrlLocation+":dQLookupUSAXS")
3362                        //string QvecLookup="R_Int=R_Qvec;BL_R_Int=BL_R_Qvec;SMR_Int=SMR_Qvec;DSM_Int=DSM_Qvec;USAXS_PD=Ar_encoder;Monitor=Ar_encoder;"
3363                        //string ErrorLookup="R_Int=R_Error;BL_R_Int=BL_R_error;SMR_Int=SMR_Error;DSM_Int=DSM_error;"
3364                        // string dQLookup="SMR_Int=SMR_dQ;DSM_Int=DSM_dQ;"
3365                        string DataSubTypeQvec = StringByKey(DataSubTypeInt, QvecLookup,"=",";")
3366                        string DataSubTypeError = StringByKey(DataSubTypeInt, ErrorLookup,"=",";")
3367                        string DataSubTypedQ = StringByKey(DataSubTypeInt, dQLookup,"=",";")
3368                        IntensityWaveName = DataSubTypeInt
3369                        QWavename = DataSubTypeQvec
3370                        ErrorWaveName = DataSubTypeError
3371                        dQWavename = DataSubTypedQ
3372                elseif(useResults)
3373                        SVAR SelectedResultsTool = $(CntrlLocation+":SelectedResultsTool")
3374                        SVAR SelectedResultsType = $(CntrlLocation+":SelectedResultsType")
3375                        SVAR ResultsGenerationToUse = $(CntrlLocation+":ResultsGenerationToUse")
3376                        //follow IR2S_CallWithPlottingToolII
3377                        if(stringmatch(ResultsGenerationToUse,"Latest"))
3378                                        DFREF TestFldr=$(DataFolderName)
3379                                        TempStr = GrepList(stringfromList(1,RemoveEnding(DataFolderDir(2, TestFldr),";\r"),":"), SelectedResultsType,0,",")
3380                                        //and need to find the one with highest generation number.
3381                                        result = stringFromList(0,TempStr,",")
3382                                        For(j=1;j<ItemsInList(TempStr,",");j+=1)
3383                                                tempStr2=stringFromList(j,TempStr,",")
3384                                                if(str2num(StringFromList(ItemsInList(result,"_")-1, result, "_"))<str2num(StringFromList(ItemsInList(tempStr2,"_")-1, tempStr2, "_")))
3385                                                        result = tempStr2
3386                                                endif
3387                                        endfor
3388                                        IntensityWaveName = result                              //this is intensity wave name
3389                                        tempStr2 = removeending(result, "_"+StringFromList(ItemsInList(result,"_")-1, result, "_"))
3390                                        //for some (Modeling II there are two x-wave options, need to figure out which one is present...
3391                                        TempXName=StringByKey(tempStr2, ResultsDataTypesLookup  , ":", ";")
3392                                        TempXName=RemoveEnding(TempXName , ",")+","
3393                                        if(ItemsInList(TempXName,",")>1)
3394                                                j=0
3395                                                Do
3396                                                        tempStr3=stringFromList(j,TempXName,",")
3397                                                        if(stringmatch(DataFolderDir(2, TestFldr), "*"+tempStr3+"_"+StringFromList(ItemsInList(result,"_")-1, result, "_")+"*" ))
3398                                                                TempXName=tempStr3
3399                                                                break
3400                                                        endif
3401                                                        j+=1
3402                                                while(j<ItemsInList(TempXName,","))     
3403                                        endif
3404                                        TempXName=RemoveEnding(TempXName , ",")
3405                                        QWavename = TempXName+"_"+StringFromList(ItemsInList(result,"_")-1, result, "_")                        //this is X wave name
3406                                        ErrorWaveName = ""
3407                                        dQWavename = ""
3408                                       
3409                                else    //known result we want to use... It should exist (guarranteed by prior code)
3410                                        DFREF TestFldr=$(DataFolderName)
3411                                        IntensityWaveName = SelectedResultsType+ResultsGenerationToUse
3412                                        TempXName=StringByKey(SelectedResultsType, ResultsDataTypesLookup  , ":", ";")
3413                                        TempXName=RemoveEnding(TempXName , ",")+","
3414                                        if(ItemsInList(TempXName,",")>1)
3415                                                j=0
3416                                                Do
3417                                                        tempStr3=stringFromList(j,TempXName,",")
3418                                                        if(stringmatch(DataFolderDir(2, TestFldr), "*"+tempStr3+ResultsGenerationToUse+"*" ))
3419                                                                TempXName=tempStr3+ResultsGenerationToUse
3420                                                                break
3421                                                        endif
3422                                                        j+=1
3423                                                while(j<ItemsInList(TempXName,","))     
3424                                        endif
3425                                        TempXName=RemoveEnding(TempXName , ",")
3426                                        QWavename = TempXName+ResultsGenerationToUse
3427                                        ErrorWaveName = ""
3428                                        dQWavename = ""
3429                                endif
3430                else
3431                        //these are generic data...
3432                        SVAR genericXgrepString=$(CntrlLocation+":genericXgrepString")
3433                        SVAR genericYgrepString=$(CntrlLocation+":genericYgrepString")
3434                        SVAR genericEgrepString=$(CntrlLocation+":genericEgrepString")
3435                        DFREF TestFldr=$(DataFolderName)
3436                        string ListOfWavesStr=DataFolderDir(2, TestFldr)
3437                        ListOfWavesStr = removeListItem(0,ListOfWavesStr,":")
3438                        ListOfWavesStr = ReplaceString("\r", ListOfWavesStr, "")
3439                        ListOfWavesStr = ReplaceString(",", ListOfWavesStr, ";")
3440                        IntensityWaveName=StringFromList(0,GrepList(ListOfWavesStr, genericYgrepString ))
3441                        QWavename = StringFromList(0,GrepList(ListOfWavesStr, genericXgrepString ))
3442                        if(strlen(genericEgrepString)>0)
3443                                ErrorWaveName = StringFromList(0,GrepList(ListOfWavesStr, genericEgrepString ))
3444                        else
3445                                ErrorWaveName=""
3446                        endif
3447                endif
3448
3449
3450end
3451//**************************************************************************************
3452//**************************************************************************************
3453Function/S IR2C_MultiSTartFolderSelection()
3454                string PopStringPath
3455                SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
3456                string PanelName = WinName(0,64)
3457                string CntrlLocation="root:Packages:"+StringByKey(PanelName, ControlProcsLocations,":",";")
3458                NVAR UseIndra2=$(CntrlLocation+":UseIndra2Data")
3459                NVAR UseQRSdata=$(CntrlLocation+":UseQRSdata")         
3460                string OtherFolders=IR3C_GenStringOfFolders2(UseIndra2,UseQRSdata,2,1)
3461                OtherFolders=RemoveFromList("root:", OtherFolders , ";")
3462                PopStringPath = "root:;"+OtherFolders
3463                return PopStringPath
3464end
3465
3466//**************************************************************************************
3467//**************************************************************************************
3468//**************************************************************************************
3469
3470Function IR3C_MultiListBoxProc(lba) : ListBoxControl
3471        STRUCT WMListboxAction &lba
3472
3473        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
3474        Variable row = lba.row
3475        WAVE/T/Z listWave = lba.listWave
3476        WAVE/Z selWave = lba.selWave
3477        string WinNameStr=lba.win
3478        string FoldernameStr
3479        Variable isData1or2
3480        string DoubleClickFunctionName
3481        string ControlMouseDownFunctionName
3482
3483        switch( lba.eventCode )
3484                case -1: // control being killed
3485                        break
3486                case 1: // mouse down
3487                        SVAR ControlMouseDownFunction = root:Packages:IrenaControlProcs:ControlMouseDownFunction
3488                        ControlMouseDownFunctionName=StringByKey(WinNameStr, ControlMouseDownFunction,":",";" )
3489                        FoldernameStr=listWave[row]
3490                        if(strlen(ControlMouseDownFunctionName)>0)
3491                                Execute(ControlMouseDownFunctionName+"(\""+FoldernameStr+"\")")
3492                        endif
3493                        break
3494                case 3: // double click
3495                        SVAR ControlDoubleClickFunction = root:Packages:IrenaControlProcs:ControlDoubleClickFunction
3496                        DoubleClickFunctionName=StringByKey(WinNameStr, ControlDoubleClickFunction,":",";" )
3497                        FoldernameStr=listWave[row]
3498                        if(strlen(DoubleClickFunctionName)>0)
3499                                Execute(DoubleClickFunctionName+"(\""+FoldernameStr+"\")")
3500                        endif
3501                        break
3502                case 4: // cell selection
3503                case 5: // cell selection plus shift key
3504                        break
3505                case 6: // begin edit
3506                        break
3507                case 7: // finish edit
3508                        break
3509                case 13: // checkbox clicked (Igor 6.2 or later)
3510                        break
3511        endswitch
3512
3513        return 0
3514End
3515//**************************************************************************************
3516//**************************************************************************************
3517//**************************************************************************************
3518//**************************************************************************************
3519
3520
3521Function IR3C_InitMultiControls(PathToPackagesFolder, PanelName, DoubleClickFunction,MouseDownFunction, OnlyUSAXSReducedData,AllowSlitSmearedData)     
3522        string PathToPackagesFolder, PanelName, DoubleClickFunction, MouseDownFunction
3523        variable OnlyUSAXSReducedData,AllowSlitSmearedData
3524
3525        DFref oldDf= GetDataFolderDFR()
3526
3527        string ListOfVariables
3528        string ListOfStrings
3529        variable i
3530        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
3531               
3532        string/G root:Packages:IrenaControlProcs:ControlMouseDownFunction
3533        SVAR ControlMouseDownFunction = root:Packages:IrenaControlProcs:ControlMouseDownFunction
3534        ControlMouseDownFunction=ReplaceStringByKey(PanelName, ControlMouseDownFunction, MouseDownFunction,":",";" )
3535       
3536        string/G root:Packages:IrenaControlProcs:ControlDoubleClickFunction
3537        SVAR ControlDoubleClickFunction = root:Packages:IrenaControlProcs:ControlDoubleClickFunction
3538        ControlDoubleClickFunction=ReplaceStringByKey(PanelName, ControlDoubleClickFunction, DoubleClickFunction,":",";" )
3539
3540
3541        SetDataFolder $(PathToPackagesFolder)                                   //go into the folder
3542
3543        //here define the lists of variables and strings needed, separate names by ;...
3544        ListOfStrings="DataFolderName;IntensityWaveName;QWavename;ErrorWaveName;dQWavename;DataUnits;"
3545        ListOfStrings+="DataStartFolder;DataMatchString;FolderSortString;FolderSortStringAll;"
3546        ListOfStrings+="SelectedResultsTool;SelectedResultsType;ResultsGenerationToUse;"
3547        ListOfStrings+="DataSubTypeUSAXSList;DataSubTypeResultsList;DataSubType;"
3548        ListOfStrings+="QvecLookupUSAXS;ErrorLookupUSAXS;dQLookupUSAXS;"
3549        ListOfStrings+="genericXgrepString;genericYgrepString;genericEgrepString;"
3550
3551        ListOfVariables="UseIndra2Data;UseQRSdata;UseResults;"
3552        ListOfVariables+="InvertGrepSearch;"
3553       
3554        //and here we create them
3555        for(i=0;i<itemsInList(ListOfVariables);i+=1)   
3556                IN2G_CreateItem("variable",StringFromList(i,ListOfVariables))
3557        endfor         
3558                                                               
3559        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
3560                IN2G_CreateItem("string",StringFromList(i,ListOfStrings))
3561        endfor 
3562
3563        ListOfStrings="DataFolderName;IntensityWaveName;QWavename;ErrorWaveName;dQWavename;"
3564        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
3565                SVAR teststr=$(StringFromList(i,ListOfStrings))
3566                teststr =""
3567        endfor         
3568        ListOfStrings="DataMatchString;FolderSortString;FolderSortStringAll;"
3569        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
3570                SVAR teststr=$(StringFromList(i,ListOfStrings))
3571                if(strlen(teststr)<1)
3572                        teststr =""
3573                endif
3574        endfor         
3575        ListOfStrings="DataStartFolder;"
3576        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
3577                SVAR teststr=$(StringFromList(i,ListOfStrings))
3578                if(strlen(teststr)<1)
3579                        teststr ="root:"
3580                endif
3581        endfor         
3582        SVAR FolderSortStringAll
3583        FolderSortStringAll = "Alphabetical;Reverse Alphabetical;_xyz;_xyz.ext;Reverse _xyz;Reverse _xyz.ext;Sxyz_;Reverse Sxyz_;_xyzmin;_xyzC;_xyzpct;_xyz_000;Reverse _xyz_000;_XYZ_xyz;"
3584        SVAR DataSubTypeUSAXSList
3585        if(OnlyUSAXSReducedData)
3586                if(AllowSlitSmearedData)
3587                        DataSubTypeUSAXSList="DSM_Int;SMR_Int;"
3588                else
3589                        DataSubTypeUSAXSList="DSM_Int;"
3590                endif
3591        else
3592                DataSubTypeUSAXSList="DSM_Int;SMR_Int;R_Int;Blank_R_Int;USAXS_PD;Monitor;"
3593        endif
3594        SVAR DataSubTypeResultsList
3595        DataSubTypeResultsList="Size"
3596        SVAR DataSubType
3597        DataSubType="DSM_Int"
3598
3599        SVAR QvecLookupUSAXS
3600        QvecLookupUSAXS="R_Int=R_Qvec;Blank_R_Int=Blank_R_Qvec;SMR_Int=SMR_Qvec;DSM_Int=DSM_Qvec;USAXS_PD=Ar_encoder;Monitor=Ar_encoder;"
3601        SVAR ErrorLookupUSAXS
3602        ErrorLookupUSAXS="R_Int=R_Error;Blank_R_Int=Blank_R_error;SMR_Int=SMR_Error;DSM_Int=DSM_error;"
3603        SVAR dQLookupUSAXS
3604        dQLookupUSAXS="SMR_Int=SMR_dQ;DSM_Int=DSM_dQ;"
3605       
3606        SVAR SelectedResultsTool
3607        SVAR SelectedResultsType
3608        SVAR ResultsGenerationToUse
3609        if(strlen(SelectedResultsTool)<1 || strlen(SelectedResultsType)<1)
3610                SelectedResultsTool="Unified Fit"
3611                SelectedResultsType="UnifiedFitIntensity"
3612        endif
3613//      if(strlen(SelectedResultsTool)<1)
3614//              SelectedResultsTool=IR2C_ReturnKnownToolResults(SelectedResultsTool)
3615//      endif
3616        if(strlen(ResultsGenerationToUse)<1)
3617                ResultsGenerationToUse="Latest"
3618        endif
3619        Make/O/T/N=(0) ListOfAvailableData
3620        Make/O/N=(0) SelectionOfAvailableData
3621
3622        NVAR UseIndra2Data
3623        NVAR UseQRSdata
3624        NVAR UseResults
3625        if(UseResults+UseQRSdata+UseIndra2Data!=1)
3626                UseIndra2Data = 0
3627                UseQRSdata = 1
3628                UseResults = 0
3629        endif
3630
3631
3632        SetDataFolder oldDf
3633
3634end
3635//**************************************************************************************
3636//**************************************************************************************
3637//**************************************************************************************
3638
3639Function IR3C_MultiSetVarProc(sva) : SetVariableControl
3640        STRUCT WMSetVariableAction &sva
3641
3642        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
3643        Variable dval = sva.dval
3644        String sval = sva.sval
3645        String WinNm = sva.win
3646        string ctrlName = sva.ctrlName
3647        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
3648        string CntrlLocation=StringByKey(WinNm, ControlProcsLocations,":",";")
3649
3650        variable tempP
3651        switch( sva.eventCode )
3652                case 1: // mouse up
3653                case 2: // Enter key
3654                        if(stringmatch(sva.ctrlName,"FolderNameMatchString")||stringmatch(sva.ctrlName,"genericXgrepString")||stringmatch(sva.ctrlName,"genericYgrepString")||stringmatch(sva.ctrlName,"genericEgrepString"))
3655                                IR3C_MultiUpdateListOfAvailFiles(CntrlLocation)
3656                        endif
3657                break
3658                case 3: // live update
3659                        break
3660                case -1: // control being killed
3661                        break
3662        endswitch
3663        return 0
3664End
3665
3666//**************************************************************************************
3667//**************************************************************************************
3668//**********************************************************************************************************
3669//**********************************************************************************************************
3670
3671Function IR3C_MultiCheckProc(cba) : CheckBoxControl
3672        STRUCT WMCheckboxAction &cba
3673
3674        if(cba.eventcode<1 ||cba.eventcode>2)
3675                return 0
3676        endif
3677        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
3678        //figure out where are controls
3679        String ctrlName=cba.ctrlName
3680        Variable checked=cba.checked
3681        DFref oldDf= GetDataFolderDFR()
3682
3683        string TopPanel=cba.win
3684
3685        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
3686        string CntrolLocationShort=StringByKey(TopPanel, ControlProcsLocations,":",";")
3687        string CntrlLocation="root:Packages:"+CntrolLocationShort
3688
3689        switch( cba.eventCode )
3690                case 2: // mouse up
3691                        NVAR UseIndra2Data=$(CntrlLocation+":UseIndra2Data")
3692                        NVAR UseQRSData=$(CntrlLocation+":UseQRSData")
3693                        NVAR UseResults=$(CntrlLocation+":UseResults")
3694                        NVAR UseUserDefinedData=$(CntrlLocation+":UseUserDefinedData")
3695                        NVAR UseModelData=$(CntrlLocation+":UseModelData")
3696                        SVAR DataStartFolder=$(CntrlLocation+":DataStartFolder")
3697
3698                        if(stringmatch(cba.ctrlName,"InvertGrepSearch"))
3699                                        IR3C_MultiUpdateListOfAvailFiles(CntrolLocationShort)   
3700                        endif
3701                        if(stringmatch(cba.ctrlName,"UseIndra2Data"))
3702                                if(checked)
3703                                        UseQRSData = 0
3704                                        UseResults = 0
3705                                endif
3706                                IR3C_MultiFixPanelControls(TopPanel,CntrolLocationShort)       
3707                                //IR3C_MultiUpdateListOfAvailFiles(CntrlLocation)
3708                        endif
3709                        if(stringmatch(cba.ctrlName,"UseResults"))
3710                                if(checked)
3711                                        UseQRSData = 0
3712                                        UseIndra2Data = 0
3713                                endif
3714                                IR3C_MultiFixPanelControls(TopPanel,CntrolLocationShort)       
3715                                //IR3C_MultiUpdateListOfAvailFiles(CntrlLocation)
3716                        endif
3717                        if(stringmatch(cba.ctrlName,"UseQRSData"))
3718                                if(checked)
3719                                        UseIndra2Data = 0
3720                                        UseResults = 0
3721                                endif
3722                                IR3C_MultiFixPanelControls(TopPanel,CntrolLocationShort)       
3723                                //IR3C_MultiUpdateListOfAvailFiles(CntrlLocation)
3724                        endif
3725                        if(stringmatch(cba.ctrlName,"UseQRSData")||stringmatch(cba.ctrlName,"UseIndra2Data")||stringmatch(cba.ctrlName,"UseResults"))
3726                                DataStartFolder = "root:"
3727                                PopupMenu StartFolderSelection,win=$(TopPanel), mode=1,popvalue="root:"
3728                                IR3C_MultiUpdateListOfAvailFiles(CntrolLocationShort)
3729                        endif
3730                        break
3731                case -1: // control being killed
3732                        break
3733        endswitch
3734        setDataFolder OldDf
3735        return 0
3736End
3737//**********************************************************************************************************
3738//**********************************************************************************************************
3739Function IR3C_MultiFixPanelControls(TopPanel,CntrlLocationG)   
3740        string TopPanel,CntrlLocationG
3741
3742        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
3743        string CntrlLocation="root:Packages:"+CntrlLocationG
3744        NVAR UseIndra2Data=$(CntrlLocation+":UseIndra2Data")
3745        NVAR UseQRSData=$(CntrlLocation+":UseQRSData")
3746        NVAR UseResults=$(CntrlLocation+":UseResults")
3747        NVAR UseUserDefinedData=$(CntrlLocation+":UseUserDefinedData")
3748        NVAR UseModelData=$(CntrlLocation+":UseModelData")
3749        SVAR DataSubType = $(CntrlLocation+":DataSubType")
3750        SVAR DataSubTypeResultsList=$(CntrlLocation+":DataSubTypeResultsList")
3751        SVAR DataSubTypeUSAXSList = $(CntrlLocation+":DataSubTypeUSAXSList")
3752        string tempStr=CntrlLocation+":DataSubTypeUSAXSList"
3753        if(UseIndra2Data)
3754                        PopupMenu SubTypeData, win=$(TopPanel), disable =0
3755                        PopupMenu SubTypeData,mode=1,popvalue=DataSubType,value=#tempStr
3756                        PopupMenu ToolResultsSelector,win=$(TopPanel),disable=1
3757                        PopupMenu ResultsTypeSelector,win=$(TopPanel),disable=1
3758                        PopupMenu ResultsGenerationToUse,win=$(TopPanel),disable=1
3759                        SetVariable genericXgrepString,win=$(TopPanel),disable=1
3760                        SetVariable genericYgrepString,win=$(TopPanel),disable=1
3761                        SetVariable genericEgrepString,win=$(TopPanel),disable=1
3762        elseif(UseQRSData)
3763                        PopupMenu SubTypeData,win=$(TopPanel),mode=1,popvalue=DataSubType,value= ""
3764                        PopupMenu SubTypeData, disable=1
3765                        PopupMenu ToolResultsSelector,win=$(TopPanel),disable=1
3766                        PopupMenu ResultsTypeSelector,win=$(TopPanel),disable=1
3767                        PopupMenu ResultsGenerationToUse,win=$(TopPanel),disable=1
3768                        SetVariable genericXgrepString,win=$(TopPanel),disable=1
3769                        SetVariable genericYgrepString,win=$(TopPanel),disable=1
3770                        SetVariable genericEgrepString,win=$(TopPanel),disable=1
3771        elseif(UseResults)
3772                        PopupMenu SubTypeData, win=$(TopPanel),disable=1
3773                        PopupMenu ToolResultsSelector,win=$(TopPanel),disable=0
3774                        PopupMenu ResultsTypeSelector,win=$(TopPanel),disable=0
3775                        PopupMenu ResultsGenerationToUse,win=$(TopPanel),disable=0
3776                        SetVariable genericXgrepString,win=$(TopPanel),disable=1
3777                        SetVariable genericYgrepString,win=$(TopPanel),disable=1
3778                        SetVariable genericEgrepString,win=$(TopPanel),disable=1
3779        else            //this is generic type
3780                        PopupMenu SubTypeData,win=$(TopPanel),mode=1,popvalue=DataSubType,value= ""
3781                        PopupMenu SubTypeData, disable=1
3782                        PopupMenu ToolResultsSelector,win=$(TopPanel),disable=1
3783                        PopupMenu ResultsTypeSelector,win=$(TopPanel),disable=1
3784                        PopupMenu ResultsGenerationToUse,win=$(TopPanel),disable=1
3785                        SetVariable genericXgrepString,win=$(TopPanel),disable=0
3786                        SetVariable genericYgrepString,win=$(TopPanel),disable=0
3787                        SetVariable genericEgrepString,win=$(TopPanel),disable=0
3788        endif
3789end
3790
3791//**********************************************************************************************************
3792//**************************************************************************************
3793//**************************************************************************************
3794//**************************************************************************************
3795
3796Function IR3C_MultiPopMenuProc(pa) : PopupMenuControl
3797        STRUCT WMPopupAction &pa
3798
3799        if(Pa.eventCode!=2)
3800                return 0
3801        endif
3802        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
3803        String ctrlName=Pa.ctrlName
3804        Variable popNum=Pa.popNum
3805        String popStr=Pa.popStr
3806        //part to copy everywhere...   
3807        DFref oldDf= GetDataFolderDFR()
3808
3809        string TopPanel=Pa.win 
3810        SVAR ControlProcsLocations=root:Packages:IrenaControlProcs:ControlProcsLocations
3811        string CntrlLocationShort=StringByKey(TopPanel, ControlProcsLocations,":",";")
3812        string CntrlLocation="root:packages:"+CntrlLocationShort
3813
3814        if(stringmatch(ctrlName,"StartFolderSelection"))
3815                //Update the listbox using start folde popStr
3816                SVAR StartFolderName=$(CntrlLocation+":DataStartFolder")
3817                StartFolderName = popStr
3818                IR3C_MultiUpdateListOfAvailFiles(CntrlLocationShort)
3819        endif
3820        if(stringmatch(ctrlName,"SortFolders"))
3821                //do something here
3822                SVAR FolderSortString = $(CntrlLocation+":FolderSortString")
3823                FolderSortString = popStr
3824                IR3C_MultiUpdateListOfAvailFiles(CntrlLocationShort)
3825        endif
3826        if(stringmatch(ctrlName,"SubTypeData"))
3827                //do something here
3828                SVAR DataSubType = $(CntrlLocation+":DataSubType")
3829                DataSubType = popStr
3830                IR3C_MultiUpdateListOfAvailFiles(CntrlLocationShort)
3831        endif
3832        if(stringmatch(ctrlName,"ToolResultsSelector"))
3833                SVAR SelectedResultsTool=$(CntrlLocation+":SelectedResultsTool")
3834                SelectedResultsTool = popStr
3835                string ListOfAvailableResults=IR2C_ReturnKnownToolResults(popStr)
3836                execute("PopupMenu ResultsTypeSelector, win="+TopPanel+", mode=1, value=IR2C_ReturnKnownToolResults(\""+popStr+"\")")
3837                SVAR SelectedResultsType=$(CntrlLocation+":SelectedResultsType")
3838                SelectedResultsType = stringFromList(0,ListOfAvailableResults)
3839                IR3C_MultiUpdateListOfAvailFiles(CntrlLocationShort)
3840        endif
3841        if(stringmatch(ctrlName,"ResultsTypeSelector"))
3842                //Update the listbox using start folde popStr
3843                SVAR SelectedResultsType=$(CntrlLocation+":SelectedResultsType")
3844                SelectedResultsType = popStr
3845                IR3C_MultiUpdateListOfAvailFiles(CntrlLocationShort)
3846        endif
3847        if(stringmatch(ctrlName,"ResultsGenerationToUse"))
3848                //Update the listbox using start folde popStr
3849                SVAR ResultsGenerationToUse=$(CntrlLocation+":ResultsGenerationToUse")
3850                ResultsGenerationToUse = popStr
3851                IR3C_MultiUpdateListOfAvailFiles(CntrlLocationShort)
3852        endif
3853        setDataFolder OldDf
3854end
3855
3856//**************************************************************************************
3857//**************************************************************************************
3858//**************************************************************************************
3859//**************************************************************************************
3860//**************************************************************************************
3861Function IR3C_MultiUpdateListOfAvailFiles(CntrlLocationG)
3862        string CntrlLocationG
3863
3864        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
3865        DFref oldDf= GetDataFolderDFR()
3866        string CntrlLocation="root:Packages:"+CntrlLocationG
3867
3868        setDataFolder $(CntrlLocation)
3869       
3870        NVAR UseIndra2Data=$(CntrlLocation+":UseIndra2Data")
3871        NVAR UseQRSdata=$(CntrlLocation+":UseQRSData")
3872        NVAR UseResults=$(CntrlLocation+":UseResults")
3873        SVAR StartFolderName=$(CntrlLocation+":DataStartFolder")
3874        SVAR DataMatchString= $(CntrlLocation+":DataMatchString")
3875        SVAR DataSubType = $(CntrlLocation+":DataSubType")
3876        NVAR InvertGrepSearch=$(CntrlLocation+":InvertGrepSearch")
3877        string LStartFolder, FolderContent
3878        if(stringmatch(StartFolderName,"---")||!(DataFolderExists(StartFolderName )))
3879                LStartFolder="root:"
3880        else
3881                LStartFolder = StartFolderName
3882        endif
3883        //build list of availabe folders here...
3884        string CurrentFolders
3885        if(UseIndra2Data && !(StringMatch(DataSubType, "DSM_Int")||StringMatch(DataSubType, "SMR_Int")))                //special folders...
3886                CurrentFolders=IN2G_FindFolderWithWaveTypes(LStartFolder, 10, DataSubType, 1)                                                   //this does not clean up by matchstring...
3887                if(strlen(DataMatchString)>0)                                                                                                                                                                                   //match string selections
3888                        CurrentFolders = GrepList(CurrentFolders, DataMatchString, InvertGrepSearch)
3889                endif
3890        elseif(UseIndra2Data && (StringMatch(DataSubType, "DSM_Int")||StringMatch(DataSubType, "SMR_Int")))                     //DSM or SMR data wanted.
3891                //need to check if user wants DSM or SMR data.
3892                if(StringMatch(DataSubType, "DSM_Int"))
3893                        CurrentFolders=IR3C_MultiGenStringOfFolders(CntrlLocation, LStartFolder,UseIndra2Data, UseQRSData,UseResults, 0,1)
3894                else
3895                        CurrentFolders=IR3C_MultiGenStringOfFolders(CntrlLocation, LStartFolder,UseIndra2Data, UseQRSData,UseResults, 1,1)
3896                endif
3897                //apply grep list.
3898                if(strlen(DataMatchString)>0)
3899                        CurrentFolders = GrepList(CurrentFolders, DataMatchString, InvertGrepSearch)
3900                endif
3901        else
3902                CurrentFolders=IR3C_MultiGenStringOfFolders(CntrlLocation, LStartFolder,UseIndra2Data, UseQRSData,UseResults, 0,1)
3903                //apply grep list.
3904                if(strlen(DataMatchString)>0)
3905                        CurrentFolders = GrepList(CurrentFolders, DataMatchString, InvertGrepSearch)
3906                endif
3907        endif
3908
3909        CurrentFolders = GrepList(CurrentFolders, "Packages", 1)
3910
3911        Wave/T ListOfAvailableData=$(CntrlLocation+":ListOfAvailableData")
3912        Wave SelectionOfAvailableData=$(CntrlLocation+":SelectionOfAvailableData")
3913        variable i, j, match
3914        string TempStr, FolderCont
3915
3916               
3917        Redimension/N=(ItemsInList(CurrentFolders , ";")) ListOfAvailableData, SelectionOfAvailableData
3918        j=0
3919        For(i=0;i<ItemsInList(CurrentFolders , ";");i+=1)
3920                TempStr = ReplaceString(LStartFolder, StringFromList(i, CurrentFolders , ";"),"")
3921                if(strlen(TempStr)>0)
3922                        ListOfAvailableData[j] = tempStr
3923                        j+=1
3924                endif
3925        endfor
3926        if(j<ItemsInList(CurrentFolders , ";"))
3927                DeletePoints j, numpnts(ListOfAvailableData)-j, ListOfAvailableData, SelectionOfAvailableData
3928        endif
3929        SelectionOfAvailableData = 0
3930        IR3C_MultiSortListOfAvailableFldrs(CntrlLocation)
3931        setDataFolder OldDF
3932end
3933
3934
3935//**************************************************************************************
3936//**************************************************************************************
3937Function IR3C_MultiSortListOfAvailableFldrs(CntrlLocation)
3938        string CntrlLocation
3939       
3940        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
3941        SVAR FolderSortString=$(CntrlLocation+":FolderSortString")
3942        Wave/T ListOfAvailableData=$(CntrlLocation+":ListOfAvailableData")
3943        Wave SelectionOfAvailableData=$(CntrlLocation+":SelectionOfAvailableData")
3944        if(numpnts(ListOfAvailableData)<2)
3945                return 0
3946        endif
3947        Duplicate/Free SelectionOfAvailableData, TempWv
3948        variable i, InfoLoc, j=0
3949        variable DIDNotFindInfo
3950        DIDNotFindInfo =0
3951        string tempstr
3952        SelectionOfAvailableData=0
3953        if(stringMatch(FolderSortString,"---"))
3954                //nothing to do
3955        elseif(stringMatch(FolderSortString,"Alphabetical"))
3956                Sort /A ListOfAvailableData, ListOfAvailableData
3957        elseif(stringMatch(FolderSortString,"Reverse Alphabetical"))
3958                Sort /A /R ListOfAvailableData, ListOfAvailableData
3959        elseif(stringMatch(FolderSortString,"_xyz")&&(numpnts(ListOfAvailableData)>2))
3960                        //For(i=0;i<numpnts(TempWv);i+=1)
3961                TempWv = IN2G_FindNumericalIndexForSorting(ListOfAvailableData[i])
3962                        //TempWv[i] = str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-1, ListOfAvailableData[i]  , "_"))
3963                        //endfor
3964                Sort TempWv, ListOfAvailableData
3965        elseif(stringMatch(FolderSortString,"Sxyz_"))
3966                For(i=0;i<numpnts(TempWv);i+=1)
3967                        TempWv[i] = str2num(ReplaceString("S", StringFromList(0, ListOfAvailableData[i], "_"), ""))
3968                endfor
3969                Sort TempWv, ListOfAvailableData
3970        elseif(stringMatch(FolderSortString,"Reverse Sxyz_"))
3971                For(i=0;i<numpnts(TempWv);i+=1)
3972                        TempWv[i] = str2num(ReplaceString("S", StringFromList(0, ListOfAvailableData[i], "_"), ""))
3973                endfor
3974                Sort/R TempWv, ListOfAvailableData
3975        elseif(stringMatch(FolderSortString,"_xyzmin"))
3976                Do
3977                        For(i=0;i<ItemsInList(ListOfAvailableData[j] , "_");i+=1)
3978                                if(StringMatch(ReplaceString(":", StringFromList(i, ListOfAvailableData[j], "_"),""), "*min" ))
3979                                        InfoLoc = i
3980                                        break
3981                                endif
3982                        endfor
3983                        j+=1
3984                        if(j>(numpnts(ListOfAvailableData)-1))
3985                                DIDNotFindInfo=1
3986                                break
3987                        endif
3988                while (InfoLoc<1)
3989                if(DIDNotFindInfo)
3990                        DoALert /T="Information not found" 0, "Cannot find location of _xyzmin information, sorting alphabetically"
3991                        Sort /A ListOfAvailableData, ListOfAvailableData
3992                else
3993                        For(i=0;i<numpnts(TempWv);i+=1)
3994                                if(StringMatch(StringFromList(InfoLoc, ListOfAvailableData[i], "_"), "*min*" ))
3995                                        TempWv[i] = str2num(ReplaceString("min", StringFromList(InfoLoc, ListOfAvailableData[i], "_"), ""))
3996                                else    //data not found
3997                                        TempWv[i] = inf
3998                                endif
3999                        endfor
4000                        Sort TempWv, ListOfAvailableData
4001                endif
4002        elseif(stringMatch(FolderSortString,"_xyzpct"))
4003                Do
4004                        For(i=0;i<ItemsInList(ListOfAvailableData[j] , "_");i+=1)
4005                                if(StringMatch(ReplaceString(":", StringFromList(i, ListOfAvailableData[j], "_"),""), "*pct" ))
4006                                        InfoLoc = i
4007                                        break
4008                                endif
4009                        endfor
4010                        j+=1
4011                        if(j>(numpnts(ListOfAvailableData)-1))
4012                                DIDNotFindInfo=1
4013                                break
4014                        endif
4015                while (InfoLoc<1)
4016                if(DIDNotFindInfo)
4017                        DoAlert/T="Information not found" 0, "Cannot find location of _xyzpct information, sorting alphabetically"
4018                        Sort /A ListOfAvailableData, ListOfAvailableData
4019                else
4020                        For(i=0;i<numpnts(TempWv);i+=1)
4021                                if(StringMatch(StringFromList(InfoLoc, ListOfAvailableData[i], "_"), "*pct*" ))
4022                                        TempWv[i] = str2num(ReplaceString("pct", StringFromList(InfoLoc, ListOfAvailableData[i], "_"), ""))
4023                                else    //data not found
4024                                        TempWv[i] = inf
4025                                endif
4026                        endfor
4027                        Sort TempWv, ListOfAvailableData
4028                endif
4029        elseif(stringMatch(FolderSortString,"_xyzC"))
4030                Do
4031                        For(i=0;i<ItemsInList(ListOfAvailableData[j] , "_");i+=1)
4032                                if(StringMatch(ReplaceString(":", StringFromList(i, ListOfAvailableData[j], "_"),""), "*C" ))
4033                                        InfoLoc = i
4034                                        break
4035                                endif
4036                        endfor
4037                        j+=1
4038                        if(j>(numpnts(ListOfAvailableData)-1))
4039                                DIDNotFindInfo=1
4040                                break
4041                        endif
4042                while (InfoLoc<1)
4043                if(DIDNotFindInfo)
4044                        DoAlert /T="Information not found" 0, "Cannot find location of _xyzC information, sorting alphabetically"
4045                        Sort /A ListOfAvailableData, ListOfAvailableData
4046                else
4047                        For(i=0;i<numpnts(TempWv);i+=1)
4048                                if(StringMatch(StringFromList(InfoLoc, ListOfAvailableData[i], "_"), "*C*" ))
4049                                        TempWv[i] = str2num(ReplaceString("C", StringFromList(InfoLoc, ListOfAvailableData[i], "_"), ""))
4050                                else    //data not found
4051                                        TempWv[i] = inf
4052                                endif
4053                        endfor
4054                        Sort TempWv, ListOfAvailableData
4055                endif
4056        elseif(stringMatch(FolderSortString,"Reverse _xyz"))
4057                        //For(i=0;i<numpnts(TempWv);i+=1)
4058                        TempWv = IN2G_FindNumericalIndexForSorting(ListOfAvailableData[p])
4059                        //TempWv[i] = str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-1, ListOfAvailableData[i]  , "_"))
4060                        //endfor
4061                Sort /R  TempWv, ListOfAvailableData
4062        elseif(stringMatch(FolderSortString,"_xyz.ext"))
4063                For(i=0;i<numpnts(TempWv);i+=1)
4064                        tempstr = StringFromList(ItemsInList(ListOfAvailableData[i]  , ".")-2, ListOfAvailableData[i]  , ".")
4065                        TempWv[i] = str2num(StringFromList(ItemsInList(tempstr , "_")-1, tempstr , "_"))
4066                endfor
4067                Sort TempWv, ListOfAvailableData
4068        elseif(stringMatch(FolderSortString,"Reverse _xyz.ext"))
4069                For(i=0;i<numpnts(TempWv);i+=1)
4070                        tempstr = StringFromList(ItemsInList(ListOfAvailableData[i]  , ".")-2, ListOfAvailableData[i]  , ".")
4071                        TempWv[i] = str2num(StringFromList(ItemsInList(tempstr , "_")-1, tempstr , "_"))
4072                endfor
4073                Sort /R  TempWv, ListOfAvailableData
4074        elseif(stringMatch(FolderSortString,"_xyz_000"))
4075                For(i=0;i<numpnts(TempWv);i+=1)
4076                        TempWv[i] = str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-2, ListOfAvailableData[i]  , "_"))
4077                endfor
4078                Sort TempWv, ListOfAvailableData
4079        elseif(stringMatch(FolderSortString,"Reverse _xyz_000"))
4080                For(i=0;i<numpnts(TempWv);i+=1)
4081                        TempWv[i] = str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-2, ListOfAvailableData[i]  , "_"))
4082                endfor
4083                Sort /R  TempWv, ListOfAvailableData
4084        elseif(stringMatch(FolderSortString,"_XYZ_xyz"))
4085                For(i=0;i<numpnts(TempWv);i+=1)
4086                        TempWv[i] = str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-2, ListOfAvailableData[i]  , "_"))*1e6+str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-1, ListOfAvailableData[i]  , "_"))
4087                endfor
4088                Sort  TempWv, ListOfAvailableData
4089        endif
4090
4091end
4092//**************************************************************************************
4093//**************************************************************************************
4094//**************************************************************************************
4095//**************************************************************************************
4096//**************************************************************************************
4097//**************************************************************************************
4098Function/T IR3C_MultiGenStringOfFolders(CntrlLocation, StartFolder,UseIndra2Structure, UseQRSStructure, UseResults, SlitSmearedData, AllowQRDataOnly)
4099        string StartFolder, CntrlLocation
4100        variable UseIndra2Structure, UseQRSStructure, UseResults, SlitSmearedData, AllowQRDataOnly
4101                //SlitSmearedData =0 for DSM data,
4102                //                          =1 for SMR data
4103                //                    and =2 for both
4104                // AllowQRDataOnly=1 if Q and R data are allowed only (no error wave). For QRS data ONLY!
4105        DFref oldDf= GetDataFolderDFR()
4106       
4107        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
4108        string ListOfQFolders
4109        string TempStr, tempStr2
4110        variable i
4111        //      if UseIndra2Structure = 1 we are using Indra2 data, else return all folders
4112        string result
4113        if (UseIndra2Structure)
4114                if(SlitSmearedData==1)
4115                        result=IN2G_FindFolderWithWaveTypes(StartFolder, 10, "*SMR*", 1)
4116                elseif(SlitSmearedData==2)
4117                        tempStr=IN2G_FindFolderWithWaveTypes(StartFolder, 10, "*SMR*", 1)
4118                        result=IN2G_FindFolderWithWaveTypes(StartFolder, 10, "*DSM*", 1)+";"
4119                        for(i=0;i<ItemsInList(tempStr);i+=1)
4120                        //print stringmatch(result, "*"+StringFromList(i, tempStr,";")+"*")
4121                                if(stringmatch(result, "*"+StringFromList(i, tempStr,";")+"*")==0)
4122                                        result+=StringFromList(i, tempStr,";")+";"
4123                                endif
4124                        endfor
4125                else
4126                        result=IN2G_FindFolderWithWaveTypes(StartFolder, 10, "*DSM*", 1)
4127                endif
4128        elseif (UseQRSStructure)
4129                        make/N=0/FREE/T ResultingWave
4130                        IR2P_FindFolderWithWaveTypesWV(StartFolder, 10, "(?i)^r|i$", 1, ResultingWave)
4131                        result=IR3C_CheckForRightQRSTripletWvs(ResultingWave,AllowQRDataOnly)
4132        elseif (UseResults)
4133                SVAR SelectedResultsTool=$(CntrlLocation+":SelectedResultsTool")
4134                SVAR SelectedResultsType=$(CntrlLocation+":SelectedResultsType")
4135                SVAR ResultsGenerationToUse=$(CntrlLocation+":ResultsGenerationToUse")
4136                if(stringmatch(ResultsGenerationToUse,"Latest"))
4137                        result=IN2G_FindFolderWithWvTpsList(StartFolder, 10,SelectedResultsType+"*", 1)
4138                else
4139                        result=IN2G_FindFolderWithWvTpsList(StartFolder, 10,SelectedResultsType+ResultsGenerationToUse, 1)
4140                endif
4141        else                    //modify to get folder with matching type of X, Y, Z waves using grep
4142                        //result=IN2G_FindFolderWithWaveTypes(StartFolder, 10, "*", 1)
4143                        SVAR genericXgrepString=$(CntrlLocation+":genericXgrepString")
4144                        SVAR genericYgrepString=$(CntrlLocation+":genericYgrepString")
4145                        SVAR genericEgrepString=$(CntrlLocation+":genericEgrepString")
4146                        make/N=0/FREE/T ResultingWave
4147                        IR2P_FindFolderWithWaveTypesWV(StartFolder, 10, genericXgrepString, 1, ResultingWave)           //these folder should match X grep string
4148                        IR3C_SelectFolderWithWaveMatching(ResultingWave,genericYgrepString)                                                             //these should match Y grep string
4149                        //ignore E string for now, assume we can use just X/Y
4150                        result=IN2G_COnvertTextWaveToStringList(ResultingWave)
4151        endif
4152        if(stringmatch(";",result[0]))
4153                result = result [1, inf]
4154        endif
4155        setDataFolder oldDf
4156        return result
4157end
4158//*****************************************************************************************************************
4159//*****************************************************************************************************************
4160//*****************************************************************************************************************
4161Function IR3C_SelectFolderWithWaveMatching(WaveOfFolders,grepStringS)
4162                        wave/T WaveOfFolders
4163                        string grepStringS
4164                DFref oldDf= GetDataFolderDFR()
4165                variable i, imax
4166                string curfldr, AllWaves
4167                imax=numpnts(WaveOfFolders)
4168                For(i=imax-1;i>=0;i-=1)
4169                        curfldr = WaveOfFolders[i]
4170                        AllWaves = IN2G_CreateListOfItemsInFolder(curfldr,2)
4171                        AllWaves=GrepList(AllWaves,grepStringS)
4172                        if(strlen(AllWaves)<1)
4173                                DeletePoints i, 1, WaveOfFolders
4174                        endif
4175                endfor
4176        setDataFolder oldDf                     
4177end
4178
4179//*****************************************************************************************************************
4180//*****************************************************************************************************************
4181//*****************************************************************************************************************
4182Function/T IR3C_CheckForRightQRSTripletWvs(ResultingWave, AllowQROnly)
4183        wave/T ResultingWave
4184        variable AllowQROnly   
4185
4186        DFref oldDf= GetDataFolderDFR()
4187
4188        string result=""
4189        string tempResult="" , FullFldrName
4190        variable i,j, matchX=0,matchE=0
4191        string AllWaves
4192        string allRwaves
4193        string ts, tx, ty
4194
4195        for(i=0;i<numpnts(ResultingWave);i+=1)                  //this looks for qrs tripplets
4196                FullFldrName = ResultingWave[i]
4197                AllWaves = IN2G_CreateListOfItemsInFolder(FullFldrName,2)
4198                allRwaves=GrepList(AllWaves,"(?i)^r")
4199                tempresult=""
4200                        for(j=0;j<ItemsInList(allRwaves);j+=1)
4201                                matchX=0
4202                                matchE=0
4203                                ty=stringFromList(j,allRwaves)[1,inf]
4204                                if((stringmatch(";"+AllWaves, ";*q"+ty+";*" )||stringmatch(";"+AllWaves, ";*m"+ty+";*" )||stringmatch(";"+AllWaves, ";*t"+ty+";*" )||stringmatch(";"+AllWaves, ";*d"+ty+";*" )||stringmatch(";"+AllWaves, ";*az"+ty+";*" )&&!stringmatch(";"+AllWaves, ";*DSM"+ty+";*" )))
4205                                        matchX=1
4206                                endif
4207                                if(stringmatch(";"+AllWaves,";*s"+ty+";*" ))
4208                                        matchE=1
4209                                endif
4210                                if(matchX && (matchE || AllowQROnly))
4211                                        tempResult+= FullFldrName+";"
4212                                        break
4213                                endif
4214                        endfor
4215                        result+=tempresult
4216                allRwaves=GrepList(AllWaves,"(?i)i$")
4217                tempresult=""
4218                        for(j=0;j<ItemsInList(allRwaves);j+=1)
4219                                matchX=0
4220                                matchE=0
4221                                if(stringmatch(";"+AllWaves, ";*"+stringFromList(j,allRwaves)[0,strlen(stringFromList(j,allRwaves))-2]+"q;*" ))
4222                                        matchX=1
4223                                endif
4224                                if(stringmatch(";"+AllWaves,";*"+stringFromList(j,allRwaves)[0,strlen(stringFromList(j,allRwaves))-2]+"s;*" ))
4225                                        matchE=1
4226                                endif
4227                                if(matchX && matchE)
4228                                        tempResult+= FullFldrName+";"
4229                                        break
4230                                endif
4231                        endfor
4232                        result+=tempresult
4233        endfor
4234//      print ticks-startTime
4235        if(strlen(result)>1)
4236                return result
4237        else
4238                return "---"
4239        endif
4240       
4241end
4242//*****************************************************************************************************************
4243//*****************************************************************************************************************
4244//**********************************************************************************************************
4245
4246
4247Function/T IR3C_GenStringOfFolders2(UseIndra2Structure, UseQRSStructure, SlitSmearedData, AllowQRDataOnly)
4248        variable UseIndra2Structure, UseQRSStructure, SlitSmearedData, AllowQRDataOnly
4249                //SlitSmearedData =0 for DSM data,
4250                //                          =1 for SMR data
4251                //                    and =2 for both
4252                // AllowQRDataOnly=1 if Q and R data are allowed only (no error wave). For QRS data ONLY!
4253       
4254        string ListOfQFolders
4255        //      if UseIndra2Structure = 1 we are using Indra2 data, else return all folders
4256        string result
4257        variable i
4258        if (UseIndra2Structure)
4259                if(SlitSmearedData==1)
4260                        result=IN2G_FindFolderWithWaveTypes("root:USAXS:", 10, "*SMR*", 1)
4261                elseif(SlitSmearedData==2)
4262                        string tempStr=IN2G_FindFolderWithWaveTypes("root:USAXS:", 10, "*SMR*", 1)
4263                        result=IN2G_FindFolderWithWaveTypes("root:USAXS:", 10, "*DSM*", 1)+";"
4264                        for(i=0;i<ItemsInList(tempStr);i+=1)
4265                        //print stringmatch(result, "*"+StringFromList(i, tempStr,";")+"*")
4266                                if(stringmatch(result, "*"+StringFromList(i, tempStr,";")+"*")==0)
4267                                        result+=StringFromList(i, tempStr,";")+";"
4268                                endif
4269                        endfor
4270                else
4271                        result=IN2G_FindFolderWithWaveTypes("root:USAXS:", 10, "*DSM*", 1)
4272                endif
4273        elseif (UseQRSStructure)
4274                make/N=0/FREE/T ResultingWave
4275                IR2P_FindFolderWithWaveTypesWV("root:", 10, "(?i)^r|i$", 1, ResultingWave)
4276                //IR2S_SortWaveOfFolders(ResultingWave)
4277                result=IR3C_CheckForRightQRSTripletWvs(ResultingWave,AllowQRDataOnly)
4278        else
4279                result=IN2G_FindFolderWithWaveTypes("root:", 10, "*", 1)
4280        endif
4281       
4282        //now the result contains folder, we want list of parents and grandparents here. create new list...
4283        string newresult=""
4284        string tempstr2, tempstr3
4285        for(i=0;i<ItemsInList(result , ";");i+=1)
4286                tempstr2=stringFromList(i,result,";")
4287                tempstr2=RemoveListItem(ItemsInList(tempstr2,":")-1, tempstr2  , ":")
4288                if(ItemsInList(tempstr2,":")>1)
4289                        tempstr3=RemoveListItem(ItemsInList(tempstr2,":")-1, tempstr2  , ":")
4290                        if(!stringmatch(newresult, "*"+tempstr3+";*" ))
4291                                newresult+=tempstr3+";"
4292                        endif
4293                endif
4294                if(!stringmatch(newresult, "*"+tempstr2+";*" ))
4295                        newresult+=tempstr2+";"
4296                endif
4297        endfor
4298       
4299        newresult=GrepList(newresult, "^((?!Packages).)*$" )
4300        return newresult
4301end
4302//*****************************************************************************************************************
4303//*****************************************************************************************************************
4304//**********************************************************************************************************
Note: See TracBrowser for help on using the repository browser.