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

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

Fix for Igor 7.08

File size: 133.4 KB
Line 
1#pragma rtGlobals=1             // Use modern global access method.
2#pragma version=1.14
3
4Constant IR2MversionNumber = 1.13                       //Data mining tool version number
5constant IR3BversionNumber = 0.1                        //MetadataBrowser tool version number.
6
7//*************************************************************************\
8//* Copyright (c) 2005 - 2020, Argonne National Laboratory
9//* This file is distributed subject to a Software License Agreement found
10//* in the file LICENSE that is included with this distribution.
11//*************************************************************************/
12
13//1.14 added MetadataBrowser tool in this package,
14//1.13 GetHelp button
15//1.12 more fixes for panel scaling.
16//1.11 fixes for panel scaling
17//1.10 removed wave/d, Function/d and variable/d. Obsolete
18//1.09 bug fixes, bug found by igor 7.
19//1.08 fixed IR2M_CreateWaveName(WaveNameStr,ItemNameStr) for Modeling II waves
20//        removed all font and font size from panel definitions to enable user control
21//1.07 who knows?
22//1.06 modified to enable multiple selections. Shift select range, cmd/ctrl selected disjoint cells.
23//1.05 added match strings.
24//1.04 modified to handle better wave notes of qrs data.
25//1.03 added license for ANL
26
27
28//This should be package which allows mining data for variuous outputs.
29//Needs to be able to read parts of folder tree and in ech folder provide some servgices:
30//      find data and add to new graph if they exist
31//      find strings/variables/wave (notes) and print into notebook
32//      find strings/variables/wave (notes) and output to waves
33
34
35//Use no more than about 8 distinct colors.
36//Subtle differences are not obvious and can actually
37//obscure significant differences between curves.
38//Use about 6 different symbols.  You can also
39//choose open and filled symbols (but not for
40//cross, plus, and dot, of course) but symbols have
41//to be large enough to distinguish this.  Be certain
42//to have a different number of symbols and colors,
43//then the pattern has a longer repeat interval.
44//
45//
46//This example has a repeat interval of 70:
47//colors:  red green blue black brown orange purple
48//shapes:  circle square diamond uptriangle downtriangle
49//fills:   open closed
50//Vary the colors and shapes together keeping fill fixed
51//for the first half, then change fill and repeat colors
52//and shapes.
53//
54//
55//This is not Igor code but describes my selection method.
56//(zero-based arrays
57// index = zero-based number of curve on the plot
58// number(xx) = number of items in xx array
59// int(0.9) = 0  and  int(1.1) = 1
60//)
61//     color = colors[ index % number(colors) ]
62//     shape = shapes[ index % number(shapes) ]
63//     fill  = fills[ int(2*index/number(fills)) ]
64
65
66
67
68
69
70
71///******************************************************************************************
72///******************************************************************************************
73///                     Data mining tool main procedures.
74///******************************************************************************************
75///******************************************************************************************
76Function IR2M_GetDataMiner()
77
78        IR2M_InitDataMiner()
79       
80        KillWIndow/Z DataMiningTool
81        KillWIndow/Z ItemsInFolderPanel
82       
83        IR2M_DataMinerPanel()
84        ING2_AddScrollControl()
85        IR1_UpdatePanelVersionNumber("DataMiningTool", IR2MversionNumber,1)
86       
87        IR2M_SyncSearchListAndListBox() //sync the list box...
88        IR2M_MakePanelWithListBox(0)    //and create the other panel...
89        //IR1_UpdatePanelVersionNumber("ItemsInFolderPanel", IR2MversionNumber,1)
90        popupmenu QvecDataName, win=DataMiningTool, disable=1
91        popupmenu IntensityDataName, win=DataMiningTool, disable=1
92        popupmenu ErrorDataName, win=DataMiningTool, disable=1
93        popupmenu SelectDataFolder, win=DataMiningTool, title="Test data folder"
94
95end
96
97//*****************************************************************************************************************
98//*****************************************************************************************************************
99//*****************************************************************************************************************
100//*****************************************************************************************************************
101//*****************************************************************************************************************
102
103Function IR2M_MainCheckVersion()       
104        DoWindow DataMiningTool
105        if(V_Flag)
106                if(!IR1_CheckPanelVersionNumber("DataMiningTool", IR2MversionNumber))
107                        DoAlert /T="The Data mining panel was created by incorrect version of Irena " 1, "Data mining needs to be restarted to work properly. Restart now?"
108                        if(V_flag==1)
109                                IR2M_GetDataMiner()
110                        else            //at least reinitialize the variables so we avoid major crashes...
111                                IR2M_InitDataMiner()
112                                IR2M_SyncSearchListAndListBox() //sync the list box...
113                                IR2M_MakePanelWithListBox(0)    //and create the other panel...
114                                //IR1_UpdatePanelVersionNumber("ItemsInFolderPanel", IR2MversionNumber,1)
115                                popupmenu QvecDataName, win=DataMiningTool, disable=1
116                                popupmenu IntensityDataName, win=DataMiningTool, disable=1
117                                popupmenu ErrorDataName, win=DataMiningTool, disable=1
118                                popupmenu SelectDataFolder, win=DataMiningTool, title="Test data folder"
119                        endif
120                endif
121        endif
122end
123
124//*****************************************************************************************************************
125//*****************************************************************************************************************
126//*****************************************************************************************************************
127
128
129
130///******************************************************************************************
131///******************************************************************************************
132///                     Metadata Browser tool, easy way to pull metadata out of wave notes
133///******************************************************************************************
134///******************************************************************************************
135Function IR3B_MetadataBrowser()
136
137        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
138        IN2G_CheckScreenSize("width",1000)
139        IN2G_CheckScreenSize("height",670)
140        DoWIndow IR3B_MetadataBrowserPanel
141        if(V_Flag)
142                DoWindow/F IR3B_MetadataBrowserPanel
143        else
144                IR3B_InitMetadataBrowser()
145                IR3B_MetadataBrowserPanelFnct()
146                IR1_UpdatePanelVersionNumber("IR3B_MetadataBrowserPanel", IR3BversionNumber,1)
147        endif
148        IR3C_MultiUpdListOfAvailFiles("Irena:MetadataBrowser")
149end
150//**********************************************************************************************************
151//**********************************************************************************************************
152//**********************************************************************************************************
153
154Function IR3B_MainCheckVersion()       
155        DoWindow IR3B_MetadataBrowserPanel
156        if(V_Flag)
157                if(!IR1_CheckPanelVersionNumber("IR3B_MetadataBrowserPanel", IR3BversionNumber))
158                        DoAlert /T="The Metadata Browser panel was created by different version of Irena " 1, "Metadata Browser may need to be restarted to work properly. Restart now?"
159                        if(V_flag==1)
160                                KillWIndow/Z IR3B_MetadataBrowserPanel
161                                IR3B_MetadataBrowser()
162                        else            //at least reinitialize the variables so we avoid major crashes...
163                                IR3B_InitMetadataBrowser()
164                        endif
165                endif
166        endif
167end
168//**********************************************************************************************************
169//**********************************************************************************************************
170//**********************************************************************************************************
171//************************************************************************************************************
172//************************************************************************************************************
173Function IR3B_MetadataBrowserPanelFnct()
174        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
175        PauseUpdate; Silent 1           // building window...
176        NewPanel /K=1 /W=(5.25,43.25,800,820) as "Metadata Browser tool"
177        DoWIndow/C IR3B_MetadataBrowserPanel
178        TitleBox MainTitle title="\Zr220Metadata Browser",pos={140,1},frame=0,fstyle=3, fixedSize=1,font= "Times New Roman", size={360,30},fColor=(0,0,52224)
179        string UserDataTypes=""
180        string UserNameString=""
181        string XUserLookup=""
182        string EUserLookup=""
183        IR2C_AddDataControls("Irena:MetadataBrowser","IR3B_MetadataBrowserPanel","DSM_Int;M_DSM_Int;SMR_Int;M_SMR_Int;","AllCurrentlyAllowedTypes",UserDataTypes,UserNameString,XUserLookup,EUserLookup, 0,1, DoNotAddControls=1)
184        Button GetHelp,pos={700,10},size={80,15},fColor=(65535,32768,32768), proc=IR3B_ButtonProc,title="Get Help", help={"Open www manual page for this tool"}
185        IR3C_MultiAppendControls("Irena:MetadataBrowser","IR3B_MetadataBrowserPanel", "IR3B_DoubleClickAction","IR3B_MouseDownAction", 0,1)
186        //graph controls
187        TitleBox Instructions1 title="\Zr100Single/Double click to check data note",size={330,15},pos={4,680},frame=0,fColor=(0,0,65535),labelBack=0
188        TitleBox Instructions2 title="\Zr100Shift-click to select range of data",size={330,15},pos={4,695},frame=0,fColor=(0,0,65535),labelBack=0
189        TitleBox Instructions3 title="\Zr100Ctrl/Cmd-click to select one data set",size={330,15},pos={4,710},frame=0,fColor=(0,0,65535),labelBack=0
190        TitleBox Instructions4 title="\Zr100Regex for not contain: ^((?!string).)*$",size={330,15},pos={4,725},frame=0,fColor=(0,0,65535),labelBack=0
191        TitleBox Instructions5 title="\Zr100Regex for contain:  string, two: str2.*str1",size={330,15},pos={4,740},frame=0,fColor=(0,0,65535),labelBack=0
192        TitleBox Instructions6 title="\Zr100Regex for case independent:  (?i)string",size={330,15},pos={4,755},frame=0,fColor=(0,0,65535),labelBack=0
193 
194        //Note listing and selection options
195        TitleBox KeySelectionInfo title="\Zr140Selected sample & metadata : ",fixedSize=1,size={220,20},pos={290,100},frame=0,fstyle=1, fixedSize=1,fColor=(0,0,52224)
196        SetVariable DataFolderName,pos={270,124},size={280,20}, proc=IR3B_SetVarProc,title=" ",noedit=1,frame=0,fstyle=1, valueColor=(65535,0,0)
197        Setvariable DataFolderName,fStyle=2, variable=root:Packages:Irena:MetadataBrowser:DataFolderName, help={"This is grep string to clean up the key names"}
198        SetVariable GrepItemNameString,pos={270,150},size={240,20}, proc=IR3B_SetVarProc,title="\Zr120Regex key name: "
199        Setvariable GrepItemNameString,fStyle=2, variable=root:Packages:Irena:MetadataBrowser:GrepItemNameString, help={"This is grep string to clean up the key names"}
200        ListBox NoteItemsSelection,win=IR3B_MetadataBrowserPanel,pos={265,180},size={250,495}, mode=10
201        ListBox NoteItemsSelection,listWave=root:Packages:Irena:MetadataBrowser:ListOfWaveNoteItems
202        ListBox NoteItemsSelection,selWave=root:Packages:Irena:MetadataBrowser:SelectionOfWaveNoteItems
203        ListBox NoteItemsSelection,proc=IR3B_MultiListBoxProc
204       
205        TitleBox Instructions11 title="\Zr100Use Regex to display less",size={330,15},pos={280,680},frame=0,fColor=(0,0,65535),labelBack=0
206        TitleBox Instructions21 title="\Zr100https://www.rexegg.com/regex-quickstart.html",size={330,15},pos={280,695},frame=0,fColor=(0,0,65535),labelBack=0
207        TitleBox Instructions31 title="\Zr100Double click to add item to list on right",size={330,15},pos={280,710},frame=0,fColor=(0,0,65535),labelBack=0
208        TitleBox Instructions41 title="\Zr100Select range of Data and use following to graph:",size={330,15},pos={280,725},frame=0,fColor=(0,0,65535),labelBack=0
209        TitleBox Instructions51 title="\Zr100ctrl/cmd+Double click to graph selection",size={330,15},pos={280,740},frame=0,fColor=(0,0,65535),labelBack=0
210        //TitleBox Instructions61 title="\Zr100",size={330,15},pos={280,755},frame=0,fColor=(0,0,65535),labelBack=0
211
212        //selected data
213        TitleBox SelectedItemsInfo title="\Zr140List to process : ",fixedSize=1,size={150,20},pos={590,110},frame=0,fstyle=1, fixedSize=1,fColor=(0,0,52224)
214        PopupMenu ExtractFromFileName,pos={560,150},size={310,20},proc=IR3B_PopMenuProc, title="Extract From Folder Name : ",help={"Select if to extarct from name some information"}
215        PopupMenu ExtractFromFileName,value="---;_xyzC;_xyzmin;_xyz;_xyzpct;",mode=1, popvalue="---"
216        ListBox SeletectedItems,win=IR3B_MetadataBrowserPanel,pos={530,180},size={250,250}, mode=10
217        ListBox SeletectedItems,listWave=root:Packages:Irena:MetadataBrowser:SeletectedItems
218        ListBox SeletectedItems,selWave=root:Packages:Irena:MetadataBrowser:SelectionOfSelectedItems
219        ListBox SeletectedItems,proc=IR3B_MultiListBoxProc
220        TitleBox Instructions12 title="\Zr100Double click to remove item from list",size={330,15},pos={550,440},frame=0,fColor=(0,0,65535),labelBack=0
221        Button DeleleAllSelected,pos={540,460},size={220,15}, proc=IR3B_ButtonProc,title="Remove all selected", help={"Remove all selected above."}
222
223        TitleBox Instructions13 title="\Zr100Select where and extract data : ",size={330,15},pos={530,500},frame=0,fColor=(0,0,65535),labelBack=0
224
225
226        SetVariable SaveToFoldername,pos={525,530},size={260,20}, noproc,title="\Zr120Save to:"
227        Setvariable SaveToFoldername,fStyle=2, variable=root:Packages:Irena:MetadataBrowser:SaveToFoldername, help={"Where to store saved metadata"}
228
229        Button ExtractDataInWave,pos={540,570},size={220,20}, proc=IR3B_ButtonProc,title="Process Selected folders", help={"Extract above listed metadata as waves and save"}
230        Button DisplayDataInTable,pos={540,595},size={220,20}, proc=IR3B_ButtonProc,title="Display results in Table", help={"Create table with extracted data"}
231        Button DisplayDataInBrowser,pos={540,620},size={220,20}, proc=IR3B_ButtonProc,title="Display results in Data Browser", help={"Open Igor Data Browser and show folder with extracted data"}
232
233        PopupMenu PlotXWave,pos={530,645},size={120,20},proc=IR3B_PopMenuProc, title="X : ",help={"Select Wave to use as x wave to plot"}
234        PopupMenu PlotXWave,value="---;"+IR3B_ListResultsWaves(),mode=1
235        PopupMenu PlotYWave,pos={530,668},size={120,20},proc=IR3B_PopMenuProc, title="Y : ",help={"Select Wave to use as y wave to plot"}
236        PopupMenu PlotYWave,value="---;"+IR3B_ListResultsWaves(),mode=1
237
238        Button PlotDataForUser,pos={680,645},size={100,45}, proc=IR3B_ButtonProc,title="Plot \rSelected", help={"Open Igor Data Browser and show folder with extracted data"}
239
240        TitleBox Instructions45 title="\Zr100Remove stored results from Save to folder :",size={330,15},pos={545,735},frame=0,fColor=(0,0,65535),labelBack=0
241        Button DeleleDataFromFolder,pos={580,755},size={150,15}, proc=IR3B_ButtonProc,title="Delete old results", fColor=(43690,43690,43690),labelBack=0, help={"Delete data in the folder previously extracted."}
242
243end
244//**********************************************************************************************************
245//**********************************************************************************************************
246Function/T IR3B_ListResultsWaves()
247        SVAR df=root:Packages:Irena:MetadataBrowser:SaveToFoldername
248        return IN2G_CreateListOfItemsInFolder(df,2)
249end
250//**********************************************************************************************************
251//**********************************************************************************************************
252
253Function IR3B_ButtonProc(ba) : ButtonControl
254        STRUCT WMButtonAction &ba
255
256        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
257        variable i
258        string FoldernameStr
259        switch( ba.eventCode )
260                case 2: // mouse up
261                        // click code here
262                        if(cmpstr(ba.ctrlname,"ExtractDataInWave")==0)
263                                IR3B_ExtractMetadataFromList()
264                                IR3B_DisplayMetadataResults()
265                        endif
266                        if(cmpstr(ba.ctrlname,"DeleleAllSelected")==0)
267                                Wave/T ListWave=root:Packages:Irena:MetadataBrowser:SeletectedItems
268                                Wave selWave=root:Packages:Irena:MetadataBrowser:SelectionOfSelectedItems
269                                Redimension/N=1 ListWave, selWave
270                        endif
271
272                        if(cmpstr(ba.ctrlname,"PlotDataForUser")==0)
273                                IR3B_PlotSelectedResults()
274                        endif
275                        if(cmpstr(ba.ctrlname,"DeleleDataFromFolder")==0)
276                                IR3B_DeleteMetadataResults()
277                        endif
278                        if(cmpstr(ba.ctrlname,"DisplayDataInTable")==0)
279                                IR3B_DisplayMetadataResults()
280                        endif
281                        if(cmpstr(ba.ctrlname,"DisplayDataInBrowser")==0)
282                                SVAR FldrWithData=root:Packages:Irena:MetadataBrowser:SaveToFoldername
283                                CreateBrowser
284                                ModifyBrowser  setDataFolder=FldrWithData, showWaves=1                                                 
285                        endif
286                        if(cmpstr(ba.ctrlname,"GetHelp")==0)
287                                //Open www manual with the right page
288                                IN2G_OpenWebManual("Irena/MetadataBrowser.html")
289                        endif
290                        break
291                case -1: // control being killed
292                        break
293        endswitch
294        return 0
295End
296//**********************************************************************************************************
297//**********************************************************************************************************
298//**********************************************************************************************************
299
300Function IR3B_PopMenuProc(pa) : PopupMenuControl
301        STRUCT WMPopupAction &pa
302
303        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
304        String ctrlName=Pa.ctrlName
305        Variable popNum=Pa.popNum
306        String popStr=Pa.popStr
307       
308        if(Pa.eventcode!=2)
309                return 0
310        endif
311        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
312        if(stringmatch(ctrlName,"ExtractFromFileName"))
313                //do something here
314                IR3B_AddToSelectedItems("Extract"+popStr,1)
315        endif
316        DOWIndow/F IR3L_MultiSamplePlotPanel
317end
318
319//**************************************************************************************
320//**************************************************************************************
321///**************************************************************************************
322//**************************************************************************************
323
324Function IR3B_SetVarProc(sva) : SetVariableControl
325        STRUCT WMSetVariableAction &sva
326
327        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
328        variable tempP
329        switch( sva.eventCode )
330                case 1: // mouse up
331                case 2: // Enter key
332                                //                      if(stringmatch(sva.ctrlName,"FolderNameMatchString"))
333                                //                              IR3L_UpdateListOfAvailFiles()
334                                //                      endif
335                                if(stringmatch(sva.ctrlName,"GrepItemNameString"))
336                                        IR3B_DisplayWaveNote("")
337                                endif
338                                break
339                case 3: // live update
340                        break
341                case -1: // control being killed
342                        break
343        endswitch
344        DoWIndow/F IR3L_MultiSamplePlotPanel
345        return 0
346End
347
348//**************************************************************************************
349//**********************************************************************************************************
350//**********************************************************************************************************
351
352
353Function IR3B_MultiListBoxProc(lba) : ListBoxControl
354        STRUCT WMListboxAction &lba
355
356        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
357        Variable row = lba.row
358        WAVE/T/Z listWave = lba.listWave
359        WAVE/Z selWave = lba.selWave
360        string WinNameStr=lba.win
361
362        switch( lba.eventCode )
363                case -1: // control being killed
364                        break
365                case 1: // mouse down
366                        break
367                case 2: // mouse up
368                        break
369                case 3: // double click
370                        if(lba.eventMod==3 || lba.eventMod==9)  // double click + shift or ctrl/cmd
371                                IR3B_DisplayTestMetadataValues(listWave[row])
372                        endif
373                       
374                        if(lba.eventMod==1)     //normal double click
375                                if(stringmatch(lba.ctrlName,"NoteItemsSelection"))
376                                        IR3B_AddToSelectedItems(listWave[row],1)
377                                endif
378                                if(stringmatch(lba.ctrlName,"SeletectedItems"))
379                                        IR3B_AddToSelectedItems(listWave[row],0)
380                                endif
381                        endif
382                        break
383                case 4: // cell selection
384                case 5: // cell selection plus shift key
385                        break
386                case 6: // begin edit
387                        break
388                case 7: // finish edit
389                        break
390                case 13: // checkbox clicked (Igor 6.2 or later)
391                        break
392        endswitch
393
394        return 0
395End
396//**************************************************************************************
397//**************************************************************************************
398
399static Function IR3B_DisplayMetadataResults()
400
401        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
402        DfRef OldDf=GetDataFolderDFR()
403        SVAR FldrWithData=root:Packages:Irena:MetadataBrowser:SaveToFoldername
404        SetDataFolder $(FldrWithData)                                   //go into the folder
405        string ListOfWaves=IN2G_ConvertDataDirToList(DataFolderDir(2))
406        KillWIndow/Z MetadataBrowserResTable
407        variable i, NumWaves
408        string TmpNameStr
409        if(strlen(ListOfWaves)>2)
410                Edit/W=(423,162,902,874)/K=1/N=MetadataBrowserResTable  as "Table of extracted Metadata"
411                NumWaves = ItemsInList(ListOfWaves)
412                for(i=0;i<NumWaves;i+=1)
413                        TmpNameStr = stringFromList(i,ListOfWaves)
414                        AppendToTable /W=MetadataBrowserResTable $(TmpNameStr)
415                        ModifyTable title($TmpNameStr)=TmpNameStr
416                endfor
417                ModifyTable/W=MetadataBrowserResTable alignment=2, autosize={0, 0, -1, 0, 0 }
418                //now we need to make it wide enough, if possible...
419                variable TotalWidth=100
420                For(i=0;i<NumWaves;i+=1)
421                        TotalWidth+=NumberByKey("WIDTH", TableInfo("MetadataBrowserResTable", i))
422                endfor
423                TotalWidth = min(TotalWidth,900)
424                MoveWindow /W=MetadataBrowserResTable 250,162, 250+TotalWidth, 874             
425        endif
426        setDataFolder OldDF
427end
428
429//**************************************************************************************
430//**************************************************************************************
431
432
433static Function IR3B_DeleteMetadataResults()
434
435        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
436        DfRef OldDf=GetDataFolderDFR()
437        DoAlert/T="Are you sure???" 1, "Extracted metadata waves will be deleted, are you REALLY sure you want to do this?"
438        if(V_Flag)
439                SVAR FldrWithData=root:Packages:Irena:MetadataBrowser:SaveToFoldername
440                SetDataFolder $(FldrWithData)                                   //go into the folder
441                KillWIndow/Z MetadataBrowserResTable
442                KillWaves /A/Z
443                string ListOfWaves=IN2G_ConvertDataDirToList(DataFolderDir(2))
444                variable i
445                if(strlen(ListOfWaves)>2)       //could nto be deleted... Hm, at least redimension to N=0
446                        for(i=0;i<ItemsInList(ListOfWaves);i+=1)
447                                Wave tmpWv= $(stringFromList(i,ListOfWaves))
448                                redimension/N=0 tmpWv
449                        endfor
450                endif
451                //clean up popups...
452                PopupMenu PlotXWave win=IR3B_MetadataBrowserPanel, mode=1
453                PopupMenu PlotYWave win=IR3B_MetadataBrowserPanel, mode=1
454
455        endif
456        setDataFolder OldDF
457end
458//**************************************************************************************
459//**************************************************************************************
460static Function IR3B_PlotSelectedResults()
461
462        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
463        DfRef OldDf=GetDataFolderDFR()
464        //get needed values...
465        ControlInfo/W=IR3B_MetadataBrowserPanel PlotXWave
466        string XwaveNm=S_Value
467        ControlInfo/W=IR3B_MetadataBrowserPanel PlotYWave
468        string YwaveNm=S_Value
469        SVAR FldrWithData=root:Packages:Irena:MetadataBrowser:SaveToFoldername
470        string FldrWithDataStr=RemoveEnding(FldrWithData, ":")+":"
471        Wave/Z Xwave = $(FldrWithDataStr+XwaveNm)
472        Wave/Z Ywave = $(FldrWithDataStr+YwaveNm)
473        string NewGraphName="MetadataBrowserResultsPlot"
474        NewGraphName = UniqueName(NewGraphName, 6, 0)
475        if(WaveExists(Xwave)&&WaveExists(Ywave))
476                Display/K=1/N=$(NewGraphName)/W=(423,162,1293,747) Ywave vs Xwave
477                ModifyGraph mirror=1, mode=4, marker=19
478                Label left YwaveNm
479                Label bottom XwaveNm
480        endif
481        setDataFolder OldDF     
482end
483//**************************************************************************************
484//**************************************************************************************
485static Function IR3B_AddToSelectedItems(ItemToAddorRemove,Add)
486        string ItemToAddorRemove
487        variable Add                    //Add=1 to add, 0 to remove
488
489        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
490        string KeyName=StringFromList(0, ItemToAddorRemove, "=")
491        Wave/T listWave=root:Packages:Irena:MetadataBrowser:SeletectedItems
492        Wave selWave=root:Packages:Irena:MetadataBrowser:SelectionOfSelectedItems
493        //no issue to remove it first, if it is nto there, no issue.
494        //this prevents duplicates...
495        //exact match: "\bdeiauk\b"
496        make/T/Free wt
497        Grep/E={"\b"+KeyName+"\b",0} listWave as wt
498        if(numpnts(wt)>0 && Add==0)                             //item is already there... Remove
499                Grep/E={"\b"+KeyName+"\b",1} listWave as listWave
500        elseif(numpnts(wt)>0 && Add)                            //item is already there... nothing to do
501                //nothing to do
502        else                                                                                    //next, add it if needed
503                variable NewLength=numpnts(listWave)
504                if(NewLength<1)
505                        NewLength=1
506                endif
507                if(Add)
508                        Redimension/N=(NewLength+1) listWave
509                        listWave[0]="FolderName"
510                        listWave[NewLength] = KeyName
511                endif
512        endif
513        Redimension/N=(numpnts(listWave)) selWave
514        selWave = 0
515end
516//**************************************************************************************
517//**************************************************************************************
518Function IR3B_DoubleClickAction(FoldernameStr)
519                string FoldernameStr
520                IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
521
522                IR3B_DisplayWaveNote(FoldernameStr)
523end
524//**************************************************************************************
525//**********************************************************************************************************
526//**********************************************************************************************************
527
528Function IR3B_MouseDownAction(FoldernameStr)
529                string FoldernameStr
530                IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
531
532                IR3B_DisplayWaveNote(FoldernameStr)
533end
534//**********************************************************************************************************
535//**********************************************************************************************************
536static Function         IR3B_DisplayTestMetadataValues(ParameterSelected)
537        string ParameterSelected
538               
539        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
540        DfRef OldDf=GetDataFolderDFR()
541        SetDataFolder root:Packages:Irena:MetadataBrowser                                       //go into the folder
542        string KeyName=StringFromList(0, ParameterSelected, "=")
543       
544        Wave/T ListOfAvailableData=root:Packages:Irena:MetadataBrowser:ListOfAvailableData
545        Wave SelectionOfAvailableData=root:Packages:Irena:MetadataBrowser:SelectionOfAvailableData
546        variable i, imax=numpnts(ListOfAvailableData)
547        make/Free/T/N=(1+sum(SelectionOfAvailableData)/8) TempStrValues
548        variable j=0, TimeInSeconds
549        For(i=0;i<imax;i+=1)
550                if(SelectionOfAvailableData[i])
551                        print "Extracting data from "+ListOfAvailableData[i]
552                        TempStrValues[j] = IR3B_FindSpecificMetadata(ListOfAvailableData[i], KeyName)   
553                        j+=1
554                endif   
555        endfor
556        //now we need to decide, if these are numbers...
557        KillWindow/Z MetadataBrowserTempGraph
558        KillWindow/Z MetadataBrowsertempTable
559        if(GrepString(TempStrValues[0], "^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$"))            //this si number
560                Make/O/N=(numpnts(TempStrValues)) $(CleanupName(KeyName[0,25], 0)+"TmpWv")
561                Wave ResultsWv=$(CleanupName(KeyName[0,25], 0)+"TmpWv")
562                ResultsWv = str2num(TempStrValues[p])
563                Display/W=(423,162,1293,747)/K=1/N=MetadataBrowserTempGraph ResultsWv as "Temporary display of selected parameter"
564                ModifyGraph mirror=1, mode=4, marker=19
565                Label left KeyName
566                Label bottom "Sample Order"
567        else
568                TimeInSeconds = IN2G_ConvertTimeStringToSecs(TempStrValues[0])
569                if(numtype(TimeInSeconds)==0)           //looks like time!
570                        Make/O/N=(numpnts(TempStrValues)) $(CleanupName(KeyName[0,22], 0)+"TmpTimeWv")
571                        Wave ResultsTimeWv=$(CleanupName(KeyName[0,22], 0)+"TmpTimeWv")
572                        ResultsTimeWv = IN2G_ConvertTimeStringToSecs(TempStrValues[p])
573                        Display/W=(423,162,1293,747)/K=1/N=MetadataBrowserTempGraph ResultsTimeWv as "Temporary display of selected parameter"
574                        ModifyGraph mirror=1, mode=4, marker=19
575                        Label left KeyName
576                        Label bottom "Sample Order"
577                else            //ok, this is really string now...
578                        Make/O/N=(numpnts(TempStrValues))/T $(CleanupName(KeyName[0,22], 0)+"TmpStrWv")
579                        Wave/T ResultsStrWv=$(CleanupName(KeyName[0,22], 0)+"TmpStrWv")
580                        ResultsStrWv = TempStrValues[p]
581                        Edit/W=(423,162,902,874)/K=1/N=MetadataBrowsertempTable ResultsStrWv as "Temporary Display of selected parameter"
582                        ModifyTable format(Point)=1,width($nameofwave(ResultsStrWv))=208
583                        ModifyTable title($nameofwave(ResultsStrWv))=KeyName
584                        ModifyTable/W=MetadataBrowsertempTable alignment=2, autosize={0, 0, -1, 0, 0 }
585                endif
586        endif
587        setDataFolder OldDF
588end
589//**********************************************************************************************************
590//**********************************************************************************************************
591static Function/T IR3B_FindSpecificMetadata(FolderNameStr, KeyString)   
592        string FolderNameStr, KeyString
593
594        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
595        SVAR DataFolderName=root:Packages:Irena:MetadataBrowser:DataFolderName
596        SVAR IntensityWaveName=root:Packages:Irena:MetadataBrowser:IntensityWaveName
597        string result=""
598        if(strlen(FolderNameStr)>0)                                             //if strlen(FolderNameStr)=0, this is called from other other and all is set here...
599                IR3C_SelectWaveNamesData("Irena:MetadataBrowser", FolderNameStr)                        //this routine will preset names in strings as needed
600        endif
601        Wave/Z SourceIntWv=$(DataFolderName+IntensityWaveName)
602        if(!WaveExists(SourceIntWv))
603                DoAlert /T="Incorrectly defined data type" 0, "Please, check definition of data type, it seems incorrectly defined yet"
604                SetDataFolder oldDf
605                abort
606        endif
607        string CurrentNote=note(SourceIntWv)
608        result = StringByKey(KeyString, CurrentNote, "=", ";")
609        return result
610end
611//**********************************************************************************************************
612//**********************************************************************************************************
613
614
615static Function IR3B_ExtractMetadataFromList()
616       
617        Wave/T ListOfAvailableData=root:Packages:Irena:MetadataBrowser:ListOfAvailableData
618        Wave SelectionOfAvailableData=root:Packages:Irena:MetadataBrowser:SelectionOfAvailableData
619        variable i, imax=numpnts(ListOfAvailableData)
620        For(i=0;i<imax;i+=1)
621                if(SelectionOfAvailableData[i])
622                        //print "Extracting data from "+ListOfAvailableData[i]
623                        IR3B_ExtrMtdtFromOneFolder(ListOfAvailableData[i])
624                endif   
625        endfor
626        print "Extracted data from "+num2str(sum(SelectionOfAvailableData))+"   folder with data"
627end
628//**********************************************************************************************************
629//**********************************************************************************************************
630static Function IR3B_ExtrMtdtFromOneFolder(FolderNameStr)
631        string FolderNameStr
632
633        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
634        DfRef OldDf=GetDataFolderDFR()
635        SetDataFolder root:Packages:Irena:MetadataBrowser                                       //go into the folder
636        SVAR SaveToFoldername = root:Packages:Irena:MetadataBrowser:SaveToFoldername
637        SVAR DataStartFolder=root:Packages:Irena:MetadataBrowser:DataStartFolder
638        SVAR DataFolderName=root:Packages:Irena:MetadataBrowser:DataFolderName
639        SVAR IntensityWaveName=root:Packages:Irena:MetadataBrowser:IntensityWaveName
640        NewDataFOlder/O/S $(SaveToFoldername)
641        //to decide if this value is number of string...
642        //print GrepString("Sample1", "^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$")
643        // prints 1 for number, 0 for string.
644        if(strlen(FolderNameStr)>0)             //if strlen(FolderNameStr)=0, this is called from other otherols and all is set here...
645                IR3C_SelectWaveNamesData("Irena:MetadataBrowser", FolderNameStr)                        //this routine will preset names in strings as needed
646        endif
647        Wave/Z SourceIntWv=$(DataFolderName+IntensityWaveName)
648        if(!WaveExists(SourceIntWv))
649                DoAlert /T="Incorrectly defined data type" 0, "Please, check definition of data type, it seems incorrectly defined yet"
650                SetDataFolder oldDf
651                abort
652        endif
653        //OK, this is list of stuff we can get values from...
654        string CurrentNote=note(SourceIntWv)
655        //now which values?
656        Wave/T listofItemsWave=root:Packages:Irena:MetadataBrowser:SeletectedItems     
657        variable i, imax=numpnts(listofItemsWave)
658        variable TimeInSeconds
659        string KeyString, ValueString, CleanKeyName
660        Wave/Z/T FolderNameWv
661        if(!WaveExists(FolderNameWv))
662                Make/O/N=0/T FolderNameWv
663        endif
664        variable NumberOfExtractedItems
665        NumberOfExtractedItems = numpnts(FolderNameWv)
666        For(i=0;i<imax;i+=1)
667                KeyString = listofItemsWave[i]
668                ValueString = StringByKey(KeyString, CurrentNote, "=", ";")
669                if(StringMatch(KeyString, "FolderName"))
670                        Redimension/N=(NumberOfExtractedItems+1) FolderNameWv
671                        FolderNameWv[NumberOfExtractedItems] = DataFolderName
672                elseif(StringMatch(KeyString, "Extract_xyzC"))          //_xyzC, _xyzmin, _xyzpct, _xyz
673                                Wave/Z TmpWv=TemperatureWv
674                                if(!WaveExists(TmpWv))
675                                        Make/O/N=(NumberOfExtractedItems+1) TemperatureWv
676                                endif
677                                Wave TmpWv=TemperatureWv
678                                Redimension/N=(NumberOfExtractedItems+1) TmpWv
679                                TmpWv[NumberOfExtractedItems] = IR3B_IdentifyNameComponent(DataFolderName, "_xyzC")
680                elseif(StringMatch(KeyString, "Extract_xyzmin"))                //_xyzC, _xyzmin, _xyzpct, _xyz
681                                Wave/Z TmpWv=TimeWv
682                                if(!WaveExists(TmpWv))
683                                        Make/O/N=(NumberOfExtractedItems+1) TimeWv
684                                endif
685                                Wave TmpWv=TimeWv
686                                Redimension/N=(NumberOfExtractedItems+1) TmpWv
687                                TmpWv[NumberOfExtractedItems] = IR3B_IdentifyNameComponent(DataFolderName, "_xyzmin")
688                elseif(StringMatch(KeyString, "Extract_xyz"))           //_xyzC, _xyzmin, _xyzpct, _xyz
689                                Wave/Z TmpWv=OrderWv
690                                if(!WaveExists(TmpWv))
691                                        Make/O/N=(NumberOfExtractedItems+1) OrderWv
692                                endif
693                                Wave TmpWv=OrderWv
694                                Redimension/N=(NumberOfExtractedItems+1) OrderWv
695                                TmpWv[NumberOfExtractedItems] = IR3B_IdentifyNameComponent(DataFolderName, "_xyz")
696                elseif(StringMatch(KeyString, "Extract_xyzpct"))                //_xyzC, _xyzmin, _xyzpct, _xyz
697                                Wave/Z TmpWv=PercentWv
698                                if(!WaveExists(TmpWv))
699                                        Make/O/N=(NumberOfExtractedItems+1) PercentWv
700                                endif
701                                Wave TmpWv=PercentWv
702                                Redimension/N=(NumberOfExtractedItems+1) PercentWv
703                                TmpWv[NumberOfExtractedItems] = IR3B_IdentifyNameComponent(DataFolderName, "_xyzpct")
704                //done with special name based waves...
705                else            ///all others.
706                        if(GrepString(ValueString, "^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$"))         //this si number
707                                CleanKeyName = CleanupName(KeyString[0,31], 0)
708                                Wave/Z TmpWv=$(CleanKeyName)
709                                if(!WaveExists(TmpWv))
710                                        Make/O/N=(NumberOfExtractedItems+1) $(CleanKeyName)
711                                endif
712                                Wave TmpWv=$(CleanKeyName)
713                                Redimension/N=(NumberOfExtractedItems+1) TmpWv
714                                TmpWv[NumberOfExtractedItems] = str2num(ValueString)
715                        else                                            //string, check if not date...
716                                TimeInSeconds = IN2G_ConvertTimeStringToSecs(ValueString)
717                                if(numtype(TimeInSeconds)==0)           //looks like time!
718                                        CleanKeyName = CleanupName(KeyString[0,24], 0)+"Time"
719                                        Wave/Z TmpTimeWv=$(CleanKeyName)
720                                        if(!WaveExists(TmpStrWv))
721                                                Make/O/N=(NumberOfExtractedItems+1) $(CleanKeyName)
722                                        endif
723                                        Wave TmpTimeWv=$(CleanKeyName)
724                                        Redimension/N=(NumberOfExtractedItems+1) TmpTimeWv
725                                        TmpTimeWv[NumberOfExtractedItems] = TimeInSeconds
726                                else            //ok, this is really string now...
727                                        CleanKeyName = CleanupName(KeyString[0,31], 0)
728                                        Wave/Z/T TmpStrWv=$(CleanKeyName)
729                                        if(!WaveExists(TmpStrWv))
730                                                Make/O/N=(NumberOfExtractedItems+1)/T $(CleanKeyName)
731                                        endif
732                                        Wave/T TmpStrWv=$(CleanKeyName)
733                                        Redimension/N=(NumberOfExtractedItems+1) TmpStrWv
734                                        TmpStrWv[NumberOfExtractedItems] = ValueString
735                                endif
736                        endif
737                endif
738
739        endfor 
740
741        SetDataFolder oldDf
742        return 1
743
744end
745//**********************************************************************************************************
746//**********************************************************************************************************
747
748
749static Function IR3B_IdentifyNameComponent(NameStr, whichComp)
750                string NameStr, whichComp               //"_xyzC",  _xyzmin, _xyzpct, _xyz
751               
752                string NameStrLoc=StringFromList(ItemsInList(NameStr, ":")-1, NameStr, ":"  )
753                string result="", tmpStr
754                variable i
755                if(StringMatch(whichComp, "_xyz"))
756                        FOr(i=ItemsInList(NameStrLoc, "_")-1;i>=0;i-=1)
757                                tmpStr = StringFromList(i, NameStrLoc, "_")
758                                if(GrepString(tmpStr, "^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$"))
759                                        return str2num(tmpStr)
760                                endif
761                        endfor
762                endif
763                FOr(i=0;i<ItemsInList(NameStrLoc, "_");i+=1)
764                        tmpStr = StringFromList(i, NameStrLoc, "_")
765                        strswitch(whichComp)                                    // string switch
766                                case "_xyzC":                                           // execute if case matches expression
767                                        if(GrepString(tmpStr, "^[-+]?[0-9]*\.?[0-9]+C$" ))
768                                                return str2num(tmpStr)
769                                        endif
770                                        break                                                   // exit from switch
771                                case "_xyzmin": // execute if case matches expression
772                                        if(GrepString(tmpStr, "^[-+]?[0-9]*\.?[0-9]+min$" ))
773                                                return str2num(tmpStr)
774                                        endif
775                                        break
776                                case "_xyzpct": // execute if case matches expression
777                                        if(GrepString(tmpStr, "^[-+]?[0-9]*\.?[0-9]+pct$" ))
778                                                return str2num(tmpStr)
779                                        endif
780                                        break
781                        endswitch               
782                endfor
783        return Nan
784end
785//**********************************************************************************************************
786//**********************************************************************************************************
787
788static Function IR3B_DisplayWaveNote(FolderNameStr)
789        string FolderNameStr
790       
791        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
792        DfRef OldDf=GetDataFolderDFR()
793        SetDataFolder root:Packages:Irena:MetadataBrowser                                       //go into the folder
794                SVAR DataStartFolder=root:Packages:Irena:MetadataBrowser:DataStartFolder
795                SVAR DataFolderName=root:Packages:Irena:MetadataBrowser:DataFolderName
796                SVAR IntensityWaveName=root:Packages:Irena:MetadataBrowser:IntensityWaveName
797                SVAR QWavename=root:Packages:Irena:MetadataBrowser:QWavename
798                SVAR ErrorWaveName=root:Packages:Irena:MetadataBrowser:ErrorWaveName
799                SVAR dQWavename=root:Packages:Irena:MetadataBrowser:dQWavename
800                NVAR UseIndra2Data=root:Packages:Irena:MetadataBrowser:UseIndra2Data
801                NVAR UseQRSdata=root:Packages:Irena:MetadataBrowser:UseQRSdata
802                NVAR useResults=root:Packages:Irena:MetadataBrowser:useResults
803                SVAR DataSubType = root:Packages:Irena:MetadataBrowser:DataSubType
804                //these are variables used by the control procedure
805                NVAR  UseUserDefinedData=  root:Packages:Irena:MetadataBrowser:UseUserDefinedData
806                NVAR  UseModelData = root:Packages:Irena:MetadataBrowser:UseModelData
807                SVAR DataFolderName  = root:Packages:Irena:MetadataBrowser:DataFolderName
808                SVAR IntensityWaveName = root:Packages:Irena:MetadataBrowser:IntensityWaveName
809                SVAR QWavename = root:Packages:Irena:MetadataBrowser:QWavename
810                SVAR ErrorWaveName = root:Packages:Irena:MetadataBrowser:ErrorWaveName
811                //graph control variable
812                //SVAR GraphUserTitle=root:Packages:Irena:MetadataBrowser:GraphUserTitle
813                //SVAR GraphWindowName=root:Packages:Irena:MetadataBrowser:GraphWindowName
814                SVAR ResultsDataTypesLookup=root:Packages:IrenaControlProcs:ResultsDataTypesLookup
815                //Grep controls 
816                SVAR GrepItemNameString=root:Packages:Irena:MetadataBrowser:GrepItemNameString
817                //SVAR ListOfDefinedDataPlots=root:Packages:Irena:MetadataBrowser:ListOfDefinedDataPlots
818                if(strlen(FolderNameStr)>0)             //if strlen(FolderNameStr)=0, this is called from other otherols and all is set here...
819                        IR3C_SelectWaveNamesData("Irena:MetadataBrowser", FolderNameStr)                        //this routine will preset names in strings as needed
820                endif
821                Wave/Z SourceIntWv=$(DataFolderName+IntensityWaveName)
822                if(!WaveExists(SourceIntWv))
823                        DoAlert /T="Incorrectly defined data type" 0, "Please, check definition of data type, it seems incorrectly defined yet"
824                        SetDataFolder oldDf
825                        abort
826                endif
827                string CurrentNote=note(SourceIntWv)
828               
829                WAVE/T ListOfWaveNoteItems = root:Packages:Irena:MetadataBrowser:ListOfWaveNoteItems
830                WAVE     SelectionOfWaveNoteItems = root:Packages:Irena:MetadataBrowser:SelectionOfWaveNoteItems
831
832                Wave/T w = ListToTextWave(CurrentNote, ";")
833                Grep/E=GrepItemNameString w as w
834                REDIMENSION/N=(numpnts(w)) SelectionOfWaveNoteItems, ListOfWaveNoteItems
835                ListOfWaveNoteItems = w
836                SelectionOfWaveNoteItems=0
837
838        SetDataFolder oldDf
839        return 1
840end
841//**********************************************************************************************************
842//**********************************************************************************************************
843
844static Function IR3B_InitMetadataBrowser()     
845        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
846        DfRef OldDf=GetDataFolderDFR()
847        string ListOfVariables
848        string ListOfStrings
849        variable i
850               
851        if (!DataFolderExists("root:Packages:Irena:MetadataBrowser"))           //create folder
852                NewDataFolder/O root:Packages
853                NewDataFolder/O root:Packages:Irena
854                NewDataFolder/O root:Packages:Irena:MetadataBrowser
855        endif
856        SetDataFolder root:Packages:Irena:MetadataBrowser                                       //go into the folder
857
858        //here define the lists of variables and strings needed, separate names by ;...
859        ListOfStrings="DataFolderName;IntensityWaveName;QWavename;ErrorWaveName;dQWavename;DataUnits;"
860        ListOfStrings+="DataStartFolder;DataMatchString;FolderSortString;FolderSortStringAll;"
861        ListOfStrings+="GrepItemNameString;"
862        ListOfStrings+="SelectedResultsTool;SelectedResultsType;ResultsGenerationToUse;"
863        ListOfStrings+="DataSubTypeUSAXSList;DataSubTypeResultsList;DataSubType;"
864        ListOfStrings+="SaveToFoldername;"
865        ListOfStrings+="QvecLookupUSAXS;ErrorLookupUSAXS;dQLookupUSAXS;"
866//      ListOfStrings+="ListOfDefinedStyles;SelectedStyle;ListOfDefinedDataPlots;SelectedDataPlot;"
867
868        ListOfVariables="UseIndra2Data;UseQRSdata;UseResults;"
869        ListOfVariables+="InvertGrepSearch;"
870//      ListOfVariables+="LogXAxis;LogYAxis;MajorGridXaxis;MajorGridYaxis;MinorGridXaxis;MinorGridYaxis;"
871//      ListOfVariables+="Colorize;UseSymbols;UseLines;SymbolSize;LineThickness;"
872//      ListOfVariables+="XOffset;YOffset;DisplayErrorBars;ApplyFormatingEveryTime;"
873//      ListOfVariables+="AddLegend;UseOnlyFoldersInLegend;LegendSize;"
874       
875        //and here we create them
876        for(i=0;i<itemsInList(ListOfVariables);i+=1)   
877                IN2G_CreateItem("variable",StringFromList(i,ListOfVariables))
878        endfor         
879                                                               
880        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
881                IN2G_CreateItem("string",StringFromList(i,ListOfStrings))
882        endfor 
883
884        ListOfStrings="DataFolderName;IntensityWaveName;QWavename;ErrorWaveName;dQWavename;"
885        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
886                SVAR teststr=$(StringFromList(i,ListOfStrings))
887                teststr =""
888        endfor         
889        ListOfStrings="DataMatchString;FolderSortString;FolderSortStringAll;"
890        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
891                SVAR teststr=$(StringFromList(i,ListOfStrings))
892                if(strlen(teststr)<1)
893                        teststr =""
894                endif
895        endfor         
896        ListOfStrings="DataStartFolder;"
897        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
898                SVAR teststr=$(StringFromList(i,ListOfStrings))
899                if(strlen(teststr)<1)
900                        teststr ="root:"
901                endif
902        endfor         
903        SVAR FolderSortStringAll
904        FolderSortStringAll = "Alphabetical;Reverse Alphabetical;_xyz;_xyz.ext;Reverse _xyz;Reverse _xyz.ext;Sxyz_;Reverse Sxyz_;_xyzmin;_xyzC;_xyzpct;_xyz_000;Reverse _xyz_000;"
905        SVAR DataSubTypeUSAXSList
906        DataSubTypeUSAXSList="DSM_Int;SMR_Int;R_Int;Blank_R_Int;USAXS_PD;Monitor;"
907        SVAR DataSubTypeResultsList
908        DataSubTypeResultsList="Size"
909        SVAR DataSubType
910        DataSubType="DSM_Int"
911       
912        SVAR QvecLookupUSAXS
913        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;"
914        SVAR ErrorLookupUSAXS
915        ErrorLookupUSAXS="R_Int=R_Error;Blank_R_Int=Blank_R_error;SMR_Int=SMR_Error;DSM_Int=DSM_error;"
916        SVAR dQLookupUSAXS
917        dQLookupUSAXS="SMR_Int=SMR_dQ;DSM_Int=DSM_dQ;"
918       
919        SVAR SaveToFoldername
920        if(strlen(SaveToFoldername)<5)
921                SaveToFoldername="root:SavedMetadata"
922        endif
923//      SVAR GraphWindowName
924//      GraphUserTitle=""
925//      GraphWindowName=stringFromList(0,WinList("MultiDataPlot_*", ";", "WIN:1" ))
926//      if(strlen(GraphWindowName)<2)
927//              GraphWindowName="---"
928//      endif
929        SVAR SelectedResultsTool
930        SVAR SelectedResultsType
931        SVAR ResultsGenerationToUse
932        if(strlen(SelectedResultsTool)<1)
933                SelectedResultsTool="Unified Fit"
934        endif
935        if(strlen(SelectedResultsTool)<1)
936                SelectedResultsTool=IR2C_ReturnKnownToolResults(SelectedResultsTool)
937        endif
938        if(strlen(ResultsGenerationToUse)<1)
939                ResultsGenerationToUse="Latest"
940        endif
941       
942//      NVAR LegendSize
943//      if(LegendSize<8)
944//              LegendSize=12
945//      endif
946//      NVAR UseSymbols
947//      NVAR UseLines
948//      NVAR Colorize
949//      NVAR SymbolSize
950//      NVAR LineThickness
951//      NVAR AddLegend
952//      NVAR UseOnlyFoldersInLegend
953//      NVAR LegendSize
954//      if(UseSymbols+UseLines < 1)                     //seems to start new tool
955//              UseLines = 1
956//              Colorize = 1
957//              SymbolSize = 2
958//              LineThickness = 2
959//              AddLegend = 1
960//              UseOnlyFoldersInLegend = 1
961//              LegendSize = 12
962//      endif
963       
964        Make/O/T/N=(0) ListOfAvailableData, ListOfWaveNoteItems
965        Make/O/N=(0) SelectionOfAvailableData, SelectionOfWaveNoteItems
966        Make/O/T/N=(1) SeletectedItems
967        Make/O/N=(1) SelectionOfSelectedItems
968        Wave/T SeletectedItems
969        SeletectedItems[0]="FolderName"
970        Wave SelectionOfSelectedItems
971        SelectionOfSelectedItems = 0
972        SetDataFolder oldDf
973
974end
975//**************************************************************************************
976//**************************************************************************************
977
978
979
980
981
982
983
984
985
986
987
988///******************************************************************************************
989///******************************************************************************************
990///                     Data mining tool procedrues.
991///******************************************************************************************
992///******************************************************************************************
993//**********************************************************************************************************
994//*****************************************************************************************************************
995//*****************************************************************************************************************
996
997
998Function IR2M_DataMinerPanel()
999
1000        DFref oldDf= GetDataFolderDFR()
1001
1002        setDataFolder root:Packages:DataMiner
1003        SVAR DataFolderName=root:Packages:DataMiner:DataFolderName
1004        DataFolderName="---"
1005
1006        //PauseUpdate; Silent 1         // building window...
1007        NewPanel /K=1 /W=(2.25,43.25,390,690) as "Data mining tool"
1008        DoWindow/C DataMiningTool
1009       
1010        string AllowedIrenaTypes="DSM_Int;M_DSM_Int;SMR_Int;M_SMR_Int;R_Int;"
1011        IR2C_AddDataControls("DataMiner","DataMiningTool",AllowedIrenaTypes,"AllCurrentlyAllowedTypes","","","","", 0,0)
1012                PopupMenu SelectDataFolder proc=IR2M_DataFolderPopMenuProc
1013                //PopupMenu SelectDataFolder value=#DataFolderName+"+IR2P_GenStringOfFolders()"
1014                popupmenu QvecDataName, pos={500,500},disable=1
1015                popupmenu IntensityDataName, pos={500,500}, disable=1
1016                popupmenu ErrorDataName, pos={500,500}, disable=1
1017                popupmenu SelectDataFolder, title="Test data folder"
1018
1019        TitleBox MainTitle title="\Zr200Data mining tool panel",pos={20,0},frame=0,fstyle=3, fixedSize=1,font= "Times New Roman", size={350,24},anchor=MC,fColor=(0,0,52224)
1020        TitleBox FakeLine1 title=" ",fixedSize=1,size={330,3},pos={16,160},frame=0,fColor=(0,0,52224), labelBack=(0,0,52224)
1021        TitleBox Info1 title="\Zr140Test folder",pos={10,30},frame=0,fstyle=3, fixedSize=1,size={80,20},fColor=(0,0,52224)
1022        TitleBox Info2 title="\Zr140Which data:",pos={10,170},frame=0,fstyle=3, fixedSize=1,size={150,20},fColor=(0,0,52224)
1023        TitleBox Info6 title="\Zr140Output Options:",pos={10,440},frame=0,fstyle=3, fixedSize=0,size={40,15},fColor=(0,0,52224)
1024        TitleBox FakeLine2 title=" ",fixedSize=1,size={330,3},pos={16,420},frame=0,fColor=(0,0,52224), labelBack=(0,0,52224)
1025
1026        SVAR StartFolder
1027        PopupMenu StartFolder,pos={10,100},size={180,20},proc=IR2M_PanelPopupControl,title="Start Folder", help={"Select folder where to start. Only subfolders will be searched"}
1028        PopupMenu StartFolder,mode=(WhichListItem(StartFolder, IR2M_ListFoldersWithSubfolders("root:", 25))+1),value=  #"IR2M_ListFoldersWithSubfolders(\"root:\", 25)"
1029        SetVariable FolderMatchString,value= root:Packages:DataMiner:FolderMatchString,noProc, frame=1
1030        SetVariable FolderMatchString,pos={10,130},size={350,25},title="Folder Match String (RegEx):", help={"Optional Regular expression to match folder name to."}//, fSize=10,fstyle=1,labelBack=(65280,21760,0)
1031        Button GetHelp,pos={305,105},size={80,15},fColor=(65535,32768,32768), proc=IR2M_DataMinerPanelButtonProc,title="Get Help", help={"Open www manual page for this tool"}
1032
1033
1034//      ListOfVariables+="MineVariables;MineStrings;MineWaves;MineWavenotes;"
1035        CheckBox MineVariables,pos={5,200},size={80,14},proc= IR2M_DataMinerCheckProc,title="Variable?"
1036        CheckBox MineVariables,variable= root:Packages:DataMiner:MineVariables, help={"Is the info stored as variable?"}
1037        CheckBox MineStrings,pos={100,200},size={80,14},proc= IR2M_DataMinerCheckProc,title="String?"
1038        CheckBox MineStrings,variable= root:Packages:DataMiner:MineStrings, help={"Is the info stored as string?"}
1039        CheckBox MineWavenotes,pos={195,200},size={80,14},proc= IR2M_DataMinerCheckProc,title="Wave notes?"
1040        CheckBox MineWavenotes,variable= root:Packages:DataMiner:MineWavenotes, help={"Info in wave notes?"}
1041        CheckBox MineWaves,pos={290,200},size={80,14},proc= IR2M_DataMinerCheckProc,title="Waves?"
1042        CheckBox MineWaves,variable= root:Packages:DataMiner:MineWaves, help={"Waves - you can only plot the waves matching some pattern?"}
1043
1044        CheckBox MineLatestGenerationWaves,pos={195,220},size={80,14},proc= IR2M_DataMinerCheckProc,title="Latest generation (results)?"
1045        CheckBox MineLatestGenerationWaves,variable= root:Packages:DataMiner:MineLatestGenerationWaves, help={"For Waves and Wavenotes, picks the last generation found?"}
1046
1047//Waves_Xtemplate;Waves_Ytemplate;Waves_Etemplate
1048        //Graph controls
1049        SetVariable Waves_Xtemplate,variable= root:Packages:DataMiner:Waves_Xtemplate,noProc, frame=1, bodywidth=220
1050        SetVariable Waves_Xtemplate,pos={3,260},size={280,25},title="X data:", help={"Template for X data waves"}//, fSize=10,fstyle=1,labelBack=(65280,21760,0)
1051        SetVariable Waves_Ytemplate,variable= root:Packages:DataMiner:Waves_Ytemplate,noProc, frame=1,bodywidth=220
1052        SetVariable Waves_Ytemplate,pos={3,280},size={280,25},title="Y data:", help={"Template for Y data waves"}//, fSize=10,fstyle=1,labelBack=(65280,21760,0)
1053        SetVariable Waves_Etemplate,variable= root:Packages:DataMiner:Waves_Etemplate,noProc, frame=1, bodywidth=220
1054        SetVariable Waves_Etemplate,pos={3,300},size={280,25},title="Error data:", help={"Template for Error data waves"}//, fSize=10,fstyle=1,labelBack=(65280,21760,0)
1055        Button Waves_ReadX, pos={300,260},size={80,15}, proc=IR2M_DataMinerPanelButtonProc,title="Read X", help={"Read name from table"}
1056        Button Waves_ReadY, pos={300,280},size={80,15}, proc=IR2M_DataMinerPanelButtonProc,title="Read Y", help={"Read name from table"}
1057        Button Waves_ReadE, pos={300,300},size={80,15}, proc=IR2M_DataMinerPanelButtonProc,title="Read Error", help={"Read name from table"}
1058
1059        //Waves notebook controls
1060        //
1061        Button Others_Read, pos={10,245},size={100,15}, proc=IR2M_DataMinerPanelButtonProc,title="Add to list", help={"Add selected item to list of searched"}
1062        Button Others_Clear, pos={150,245},size={100,15}, proc=IR2M_DataMinerPanelButtonProc,title="Clear list", help={"Reset the list oif searched items..."}
1063
1064        ListBox SelectedItems,pos={10,270},size={330,150}
1065        ListBox SelectedItems,listWave=root:Packages:DataMiner:SelectedItems
1066        ListBox SelectedItems selRow= 0//, proc=IR2M_ListBoxProc
1067        ListBox SelectedItems mode=0,help={"List of items selected to be mined..."}
1068
1069//      ListOfVariables+="SaveToNotebook;SaveToWaves;SaveToGraph;"
1070        CheckBox SaveToNotebook,pos={5,480},size={80,14},proc= IR2M_DataMinerCheckProc,title="Save to notebook?"
1071        CheckBox SaveToNotebook,variable= root:Packages:DataMiner:SaveToNotebook, help={"Info will be stored in notebook."}
1072        CheckBox SaveToWaves,pos={130,480},size={80,14},proc= IR2M_DataMinerCheckProc,title="Save to waves?"
1073        CheckBox SaveToWaves,variable= root:Packages:DataMiner:SaveToWaves, help={"Info will be stored in waves"}
1074        CheckBox SaveToGraph,pos={255,480},size={80,14},proc= IR2M_DataMinerCheckProc,title="Create graph?"
1075        CheckBox SaveToGraph,variable= root:Packages:DataMiner:SaveToGraph, help={"Data will be graphed"}
1076
1077
1078        SetVariable Others_FolderForWaves,variable= root:Packages:DataMiner:Others_FolderForWaves,proc=IR2M_MinerSetVarProc, frame=1
1079        SetVariable Others_FolderForWaves,pos={3,455},size={350,25},title="Folder to save waves to   root:", help={"Folder to save waves with results. "}//, fSize=10,fstyle=1,labelBack=(65280,21760,0)
1080
1081//      ListOfVariables+="GraphLogX;GraphLogY;GraphColorScheme1;GraphColorScheme2;GraphColorScheme3;"
1082        CheckBox GraphLogX,pos={155,500},size={80,14},proc= IR2M_DataMinerCheckProc,title="log X axis?"
1083        CheckBox GraphLogX,variable= root:Packages:DataMiner:GraphLogX, help={"Graph with log X axis"}
1084        CheckBox GraphLogY,pos={255,500},size={80,14},proc= IR2M_DataMinerCheckProc,title="log Y axis?"
1085        CheckBox GraphLogY,variable= root:Packages:DataMiner:GraphLogY, help={"Graph with log Y axis"}
1086
1087        CheckBox GraphColorScheme1,pos={155,515},size={80,14},proc= IR2M_DataMinerCheckProc,title="Color scheme 1?"
1088        CheckBox GraphColorScheme1,variable= root:Packages:DataMiner:GraphColorScheme1, help={"One of preselected color schemes for graph"}
1089        CheckBox GraphColorScheme2,pos={255,515},size={80,14},proc= IR2M_DataMinerCheckProc,title="Color scheme 2?"
1090        CheckBox GraphColorScheme2,variable= root:Packages:DataMiner:GraphColorScheme2, help={"One of preselected color schemes for graph"}
1091        CheckBox GraphColorScheme3,pos={155,530},size={80,14},proc= IR2M_DataMinerCheckProc,title="Color scheme 3?"
1092        CheckBox GraphColorScheme3,variable= root:Packages:DataMiner:GraphColorScheme3, help={"One of preselected color schemes for graph"}
1093        NVAR GraphFontSize=root:Packages:DataMiner:GraphFontSize
1094        PopupMenu GraphFontSize,pos={155,550},size={180,20},proc=IR2M_PanelPopupControl,title="Legend font size", help={"Select font size for legend to be used."}
1095        PopupMenu GraphFontSize,mode=WhichListItem(num2str(GraphFontSize),  "6;8;10;12;14;16;18;20;22;24;")+1,value= "06;08;10;12;14;16;18;20;22;24;"//, popvalue="10"
1096
1097
1098        //
1099        CheckBox WavesNbk_contains,pos={20,500},size={80,14},proc= IR2M_DataMinerCheckProc,title="Find present?"
1100        CheckBox WavesNbk_contains,variable= root:Packages:DataMiner:WavesNbk_contains, help={"Find Folders which contain these waves..."}
1101        CheckBox WavesNbk_NOTcontains,pos={20,520},size={80,14},proc= IR2M_DataMinerCheckProc,title="Find not present?"
1102        CheckBox WavesNbk_NOTcontains,variable= root:Packages:DataMiner:WavesNbk_NOTcontains, help={"Find folders which do not contain these waves..."}
1103
1104//      Button LoadAndGraphData, pos={100,280},size={180,20}, proc=IR2E_InputPanelButtonProc,title="Load data", help={"Load data into the tool, generate graph and display notes if checkboxes are checked."}
1105//
1106//
1107
1108        Button SearchAndMineData, pos={10,615},size={180,20}, proc=IR2M_DataMinerPanelButtonProc,title="Mine data", help={"Run data miner"}
1109        Button PullUpNotebook, pos={200,590},size={180,20}, proc=IR2M_DataMinerPanelButtonProc,title="Get notebook with results", help={"Get notebook with results if it was closed"}
1110        Button KillNotebook, pos={200,615},size={180,20}, proc=IR2M_DataMinerPanelButtonProc,title="Kill notebook with results", help={"Close (kill totally) notebook with results"}
1111
1112        IR2M_FixPanelControls()
1113        setDataFolder oldDF
1114end
1115
1116///******************************************************************************************
1117///******************************************************************************************
1118///******************************************************************************************
1119
1120Function IR2M_DataFolderPopMenuProc(Pa) : PopupMenuControl
1121        STRUCT WMPopupAction &Pa
1122
1123//      Pa.win = WinName(0,64)
1124        if(Pa.eventCode!=2)
1125                return 0
1126        endif
1127        //IR2C_PanelPopupControl(ctrlName,popNum,popStr)
1128        IR2C_PanelPopupControl(Pa)
1129       
1130        IR2M_MakePanelWithListBox(0)
1131        //IR1_UpdatePanelVersionNumber("ItemsInFolderPanel", IR2MversionNumber,1)
1132End
1133///******************************************************************************************
1134///******************************************************************************************
1135///******************************************************************************************
1136Function IR2M_MinerSetVarProc(ctrlName,varNum,varStr,varName) : SetVariableControl
1137        String ctrlName
1138        Variable varNum
1139        String varStr
1140        String varName
1141       
1142        variable i
1143        DFref oldDf= GetDataFolderDFR()
1144
1145       
1146       
1147        if(cmpstr(ctrlName,"Others_FolderForWaves")==0)
1148                SVAR Others_FolderForWaves= root:Packages:DataMiner:Others_FolderForWaves
1149                //add ":" at the end, if not there
1150                if(cmpstr(Others_FolderForWaves[strlen(Others_FolderForWaves)-1,inf],":")!=0)
1151                        Others_FolderForWaves+=":"
1152                endif
1153                setDataFolder root:
1154                //Now make the folder, so it exists... Assume more than single level...
1155                For(i=0;i<ItemsInList(Others_FolderForWaves,":");I+=1)
1156                        NewDataFolder/O/S $(stringFromList(i,Others_FolderForWaves,":"))
1157                endfor
1158        endif
1159       
1160        setDataFolder OldDf
1161End
1162///******************************************************************************************
1163///******************************************************************************************
1164///******************************************************************************************
1165///******************************************************************************************
1166///******************************************************************************************
1167///******************************************************************************************
1168
1169Function/S IR2M_ListFoldersWithSubfolders(startDF, levels)
1170        String startDF               // startDF requires trailing colon.
1171        Variable levels         //set 1 for long type and 0 for short type return
1172                                //
1173        String dfSave
1174        String list = "", templist, tempWvName, tempWaveType
1175        variable i, skipRest, j
1176       
1177        dfSave = GetDataFolder(1)
1178       
1179        if (!DataFolderExists(startDF))
1180                return ""
1181        endif
1182       
1183        SetDataFolder startDF
1184       
1185        templist = DataFolderDir(1)
1186//        skipRest=0
1187//        string AllWaves = ";"+WaveList("*",";","")
1188////    For(i=0;i<ItemsInList(WaveList("*",";",""));i+=1)
1189////            tempWvName = StringFromList(i, WaveList("*",";","") ,";")
1190////     //      if (Stringmatch(WaveList("*",";",""),WaveTypes))
1191//              For(j=0;j<ItemsInList(WaveTypes);j+=1)
1192//
1193//                      if(skipRest || strlen(AllWaves)<2)
1194//                              //nothing needs to be done
1195//                      else
1196//                              tempWaveType = stringFromList(j,WaveTypes)
1197//                               if (Stringmatch(AllWaves,"*;"+tempWaveType+";*") && skipRest==0)
1198//                                      if (LongShortType)
1199//                                                      list += startDF + ";"
1200//                                                      skipRest=1
1201//                                      else
1202//                                                      list += GetDataFolder(0) + ";"
1203//                                                      skipRest=1
1204//                                      endif
1205//                              endif
1206//                    //  endfor
1207//              endif
1208//           endfor
1209        templist=templist[8,strlen(templist)-3]
1210        if(strlen(tempList)>0)
1211                list=GetDataFolder(1)+";"
1212        endif
1213        levels -= 1
1214        if (levels <= 0)
1215                return list
1216        endif
1217       
1218        String subDF
1219        Variable index = 0
1220        do
1221                String temp
1222                temp = PossiblyQuoteName(GetIndexedObjName(startDF, 4, index))          // Name of next data folder.
1223                if (strlen(temp) == 0)
1224                        break                                                                                                   // No more data folders.
1225                endif
1226                      subDF = startDF + temp + ":"
1227                         list += IR2M_ListFoldersWithSubfolders(subDF, levels)          // Recurse.
1228                index += 1
1229        while(1)
1230       
1231        SetDataFolder(dfSave)
1232        return list
1233End
1234//**********************************************************************************************
1235//**********************************************************************************************
1236
1237///******************************************************************************************
1238///******************************************************************************************
1239///******************************************************************************************
1240///******************************************************************************************
1241///******************************************************************************************
1242///******************************************************************************************
1243//popup procedure
1244Function IR2M_PanelPopupControl(ctrlName,popNum,popStr) : PopupMenuControl
1245        String ctrlName
1246        Variable popNum
1247        String popStr
1248
1249        DFref oldDf= GetDataFolderDFR()
1250
1251        setDataFolder root:Packages:DataMiner
1252
1253        NVAR GraphFontSize=root:Packages:DataMiner:GraphFontSize
1254
1255        if (cmpstr(ctrlName,"GraphFontSize")==0)
1256                GraphFontSize=str2num(popStr)
1257                IR2M_AppendLegend(GraphFontSize)
1258        endif
1259        if (cmpstr(ctrlName,"StartFolder")==0)
1260                SVAR StartFolder
1261                StartFolder=popStr
1262        endif
1263       
1264       
1265        setDataFolder oldDF
1266end
1267///******************************************************************************************
1268///******************************************************************************************
1269///******************************************************************************************
1270///******************************************************************************************
1271///******************************************************************************************
1272///******************************************************************************************
1273
1274Function IR2M_FixPanelControls()
1275
1276        DFref oldDf= GetDataFolderDFR()
1277
1278        setDataFolder root:Packages:DataMiner
1279        DoWindow/F DataMiningTool
1280       
1281        NVAR MineVariables = root:Packages:DataMiner:MineVariables
1282        NVAR MineStrings = root:Packages:DataMiner:MineStrings
1283        NVAR MineWaves = root:Packages:DataMiner:MineWaves
1284        NVAR MineWavenotes = root:Packages:DataMiner:MineWavenotes
1285
1286        NVAR SaveToNotebook = root:Packages:DataMiner:SaveToNotebook
1287        NVAR SaveToWaves = root:Packages:DataMiner:SaveToWaves
1288        NVAR SaveToGraph = root:Packages:DataMiner:SaveToGraph
1289
1290        if(MineWaves)
1291                CheckBox SaveToNotebook,win=DataMiningTool, disable=0
1292                CheckBox SaveToWaves,win=DataMiningTool, disable=1
1293                CheckBox SaveToGraph,win=DataMiningTool, disable=0
1294                SetVariable Waves_Xtemplate,win=DataMiningTool, disable=0
1295                SetVariable Waves_Ytemplate,win=DataMiningTool, disable=0
1296                SetVariable Waves_Etemplate,win=DataMiningTool, disable=0
1297                Button Waves_ReadX,win=DataMiningTool, disable=0
1298                Button Waves_ReadY,win=DataMiningTool, disable=0
1299                Button Waves_ReadE,win=DataMiningTool, disable=0
1300                ListBox SelectedItems,win=DataMiningTool, disable=1
1301                Button Others_Read,win=DataMiningTool, disable=1
1302                Button Others_Clear,win=DataMiningTool, disable=1
1303                SetVariable Others_FolderForWaves, disable=1
1304
1305        endif
1306        if(MineVariables || MineStrings || MineWavenotes)
1307                CheckBox SaveToNotebook,win=DataMiningTool, disable=0
1308                CheckBox SaveToWaves,win=DataMiningTool, disable=0
1309                CheckBox SaveToGraph,win=DataMiningTool, disable=1
1310                SetVariable Waves_Xtemplate,win=DataMiningTool, disable=1
1311                SetVariable Waves_Ytemplate,win=DataMiningTool, disable=1
1312                SetVariable Waves_Etemplate,win=DataMiningTool, disable=1
1313                Button Waves_ReadX,win=DataMiningTool, disable=1
1314                Button Waves_ReadY,win=DataMiningTool, disable=1
1315                Button Waves_ReadE,win=DataMiningTool, disable=1
1316                ListBox SelectedItems,win=DataMiningTool, disable=0
1317                Button Others_Read,win=DataMiningTool, disable=0
1318                Button Others_Clear,win=DataMiningTool, disable=0
1319        endif
1320
1321        if(MineVariables || MineStrings || MineWavenotes && SaveToWaves)
1322                SetVariable Others_FolderForWaves, disable=0
1323        else
1324                SetVariable Others_FolderForWaves, disable=1
1325        endif
1326
1327        if(MineWaves && SaveToGraph)
1328                CheckBox GraphLogX, disable=0
1329                CheckBox GraphLogY, disable=0
1330                CheckBox GraphColorScheme1, disable=0
1331                CheckBox GraphColorScheme2, disable=0
1332                CheckBox GraphColorScheme3, disable=0
1333                PopupMenu GraphFontSize, disable=0
1334        else
1335                CheckBox GraphLogX, disable=1
1336                CheckBox GraphLogY, disable=1
1337                CheckBox GraphColorScheme1, disable=1
1338                CheckBox GraphColorScheme2, disable=1
1339                CheckBox GraphColorScheme3, disable=1   
1340                PopupMenu GraphFontSize, disable=1
1341        endif   
1342        if(MineWaves && SaveToNotebook)
1343                CheckBox WavesNbk_contains, disable=0
1344                CheckBox WavesNbk_NOTcontains, disable=0
1345        else
1346                CheckBox WavesNbk_contains, disable=1
1347                CheckBox WavesNbk_NOTcontains, disable=1
1348        endif   
1349
1350        setDataFolder oldDF
1351
1352end
1353
1354///******************************************************************************************
1355///******************************************************************************************
1356///******************************************************************************************
1357///******************************************************************************************
1358///******************************************************************************************
1359///******************************************************************************************
1360Function IR2M_DataMinerPanelButtonProc(ctrlName) : ButtonControl
1361        String ctrlName
1362
1363        DFref oldDf= GetDataFolderDFR()
1364
1365        setDataFolder root:Packages:DataMiner
1366
1367        if(cmpstr(ctrlName,"Waves_ReadX")==0)
1368                IR2M_ReadWavesFromListBox("Waves_X")
1369        endif
1370        if(cmpstr(ctrlName,"Waves_ReadY")==0)
1371                IR2M_ReadWavesFromListBox("Waves_Y")
1372        endif
1373        if(cmpstr(ctrlName,"Waves_ReadE")==0)
1374                IR2M_ReadWavesFromListBox("Waves_E")
1375        endif
1376        if(stringmatch(ctrlName,"GetHelp"))
1377                IN2G_OpenWebManual("Irena/DataMining.html")
1378        endif
1379
1380        if(cmpstr(ctrlName,"SearchAndMineData")==0)
1381                IR2M_MineTheDataFunction()
1382        endif
1383        if(cmpstr(ctrlName,"PullUpNotebook")==0)
1384                IR2M_PullUpNotebook()
1385        endif
1386        if(cmpstr(ctrlName,"KillNotebook")==0)
1387                IR2M_KillNotebook()
1388        endif
1389
1390        if(cmpstr(ctrlName,"Others_Read")==0)
1391                IR2M_ReadOthersIntoLists()
1392        endif
1393        if(cmpstr(ctrlName,"Others_Clear")==0)
1394                IR2M_ClearOthersLists()
1395        endif
1396       
1397        setDataFolder oldDF
1398end
1399///******************************************************************************************
1400///******************************************************************************************
1401///******************************************************************************************
1402///******************************************************************************************
1403///******************************************************************************************
1404///******************************************************************************************
1405Function IR2M_ReadOthersIntoLists()
1406
1407
1408        DFref oldDf= GetDataFolderDFR()
1409
1410        setDataFolder root:Packages:DataMiner
1411
1412        SVAR Variables_ListToFind
1413        SVAR Strings_ListToFind
1414        SVAR WaveNotes_ListToFind
1415        NVAR MineVariables = root:Packages:DataMiner:MineVariables
1416        NVAR MineStrings = root:Packages:DataMiner:MineStrings
1417        NVAR MineWaves = root:Packages:DataMiner:MineWaves
1418        NVAR MineWavenotes = root:Packages:DataMiner:MineWavenotes
1419        NVAR UseIndra2Data = root:Packages:DataMiner:UseIndra2Data
1420        NVAR UseQRSdata = root:Packages:DataMiner:UseQRSdata
1421        wave/T ItemsInFolder =root:Packages:DataMiner:ItemsInFolder
1422        wave/T WaveNoteList =root:Packages:DataMiner:WaveNoteList
1423        variable ItmsFldr, WvNote, i
1424        string TempVValue
1425        wave WaveNoteListSelections =root:Packages:DataMiner:WaveNoteListSelections
1426        wave ItemsInFolderSelections = root:Packages:DataMiner:ItemsInFolderSelections
1427       
1428        if(MineVariables)
1429                //ControlInfo  /W=ItemsInFolderPanel ItemsInCurrentFolder
1430                for(i=0;i<numpnts(ItemsInFolderSelections);i+=1)
1431                        if(ItemsInFolderSelections[i]>0 && FindListItem(ItemsInFolder[i],Variables_ListToFind)<0)
1432                                Variables_ListToFind+= ItemsInFolder[i]+";"
1433                        endif
1434                endfor
1435        endif
1436        if(MineStrings)
1437                //ControlInfo  /W=ItemsInFolderPanel ItemsInCurrentFolder
1438                for(i=0;i<numpnts(ItemsInFolderSelections);i+=1)
1439                        if(ItemsInFolderSelections[i]>0&& FindListItem(ItemsInFolder[i],Strings_ListToFind)<0)
1440                                Strings_ListToFind+= ItemsInFolder[i]+";"
1441                        endif
1442                endfor
1443        endif
1444        if(MineWavenotes)
1445                ControlInfo  /W=ItemsInFolderPanel ItemsInCurrentFolder
1446                ItmsFldr = V_Value
1447                //ControlInfo  /W=ItemsInFolderPanel WaveNoteList
1448                for(i=0;i<numpnts(WaveNoteListSelections);i+=1)
1449                        WvNote = i
1450                        //WvNote = V_Value
1451                        string tempKey
1452                        tempKey = StringFromList(0,WaveNoteList[WvNote],"=")
1453                        if(UseQRSdata)          //wave containts also name of the folder, so this will keep failing all the time...
1454                                                                //however, the first letter here indicates which wave to look at...
1455                                if(WaveNoteListSelections[i]>0&& FindListItem(ItemsInFolder[ItmsFldr]+":"+tempKey,WaveNotes_ListToFind)<0)
1456                                        WaveNotes_ListToFind+= (ItemsInFolder[ItmsFldr])[0]+"_qrs_>"+tempKey+";"
1457                                endif
1458                        else
1459                                if(WaveNoteListSelections[i]>0&& FindListItem(ItemsInFolder[ItmsFldr]+":"+tempKey,WaveNotes_ListToFind)<0)
1460                                        WaveNotes_ListToFind+= ItemsInFolder[ItmsFldr]+">"+tempKey+";"
1461                                endif
1462                        endif
1463                endfor
1464        endif
1465
1466
1467       
1468        IR2M_SyncSearchListAndListBox()
1469        setDataFolder oldDF
1470
1471end
1472
1473///******************************************************************************************
1474///******************************************************************************************
1475///******************************************************************************************
1476///******************************************************************************************
1477///******************************************************************************************
1478///******************************************************************************************
1479Function IR2M_ClearOthersLists()
1480
1481
1482        DFref oldDf= GetDataFolderDFR()
1483
1484        setDataFolder root:Packages:DataMiner
1485
1486        SVAR Variables_ListToFind
1487        SVAR Strings_ListToFind
1488        SVAR WaveNotes_ListToFind
1489
1490        Variables_ListToFind=""
1491        Strings_ListToFind=""
1492        WaveNotes_ListToFind=""
1493       
1494        IR2M_SyncSearchListAndListBox()
1495        setDataFolder oldDF
1496
1497end
1498
1499///******************************************************************************************
1500///******************************************************************************************
1501///******************************************************************************************
1502///******************************************************************************************
1503///******************************************************************************************
1504///******************************************************************************************
1505Function IR2M_PullUpNotebook()
1506
1507        IR2M_CreateNotebook()   
1508end
1509
1510Function IR2M_KillNotebook()
1511
1512        string nbl="DataMinerNotebook"
1513        Silent 1
1514        if (strsearch(WinList("*",";","WIN:16"),nbL,0)!=-1)             ///Logbook exists
1515                KillWIndow/Z $nbl
1516        endif
1517end
1518
1519
1520///******************************************************************************************
1521///******************************************************************************************
1522///******************************************************************************************
1523///******************************************************************************************
1524///******************************************************************************************
1525///******************************************************************************************
1526
1527Function IR2M_MineTheDataFunction()
1528
1529        DFref oldDf= GetDataFolderDFR()
1530
1531        setDataFolder root:Packages:DataMiner
1532
1533        NVAR MineVariables = root:Packages:DataMiner:MineVariables
1534        NVAR MineStrings = root:Packages:DataMiner:MineStrings
1535        NVAR MineWaves = root:Packages:DataMiner:MineWaves
1536        NVAR MineWavenotes = root:Packages:DataMiner:MineWavenotes
1537        NVAR WavesNbk_contains=root:Packages:DataMiner:WavesNbk_contains
1538        NVAR WavesNbk_NOTcontains=root:Packages:DataMiner:WavesNbk_NOTcontains
1539
1540        NVAR SaveToNotebook = root:Packages:DataMiner:SaveToNotebook
1541        NVAR SaveToWaves = root:Packages:DataMiner:SaveToWaves
1542        NVAR SaveToGraph = root:Packages:DataMiner:SaveToGraph
1543
1544        SVAR Waves_Xtemplate=root:Packages:DataMiner:Waves_Xtemplate
1545        SVAR Waves_Ytemplate=root:Packages:DataMiner:Waves_Ytemplate
1546        SVAR Waves_Etemplate=root:Packages:DataMiner:Waves_Etemplate
1547        NVAR GraphFontSize=root:Packages:DataMiner:GraphFontSize
1548       
1549        SVAR StartFolder=root:Packages:DataMiner:StartFolder
1550        string NotebookHeader
1551       
1552        if(MineWaves && SaveToNotebook)
1553                IR2M_CreateNotebook()   
1554                if(WavesNbk_contains)
1555                        if(strlen(Waves_Etemplate)>0)
1556                                NotebookHeader="Folders containing "+Waves_Xtemplate+" , "+Waves_Ytemplate+" , and "+Waves_Etemplate+"\r"
1557                        elseif(strlen(Waves_Etemplate)==0 && strlen(Waves_Ytemplate)>0 && strlen(Waves_Xtemplate)>0)
1558                                NotebookHeader="Folders containing "+Waves_Xtemplate+" and "+Waves_Ytemplate+"\r"
1559                        elseif(strlen(Waves_Etemplate)==0 && strlen(Waves_Ytemplate)==0 && strlen(Waves_Xtemplate)>0)
1560                                NotebookHeader="Folders containing "+Waves_Xtemplate+"\r"
1561                        else
1562                                //nothing to do..
1563                                abort
1564                        endif
1565                else
1566                        if(strlen(Waves_Etemplate)>0)
1567                                NotebookHeader="Folders not containing "+Waves_Xtemplate+" , "+Waves_Ytemplate+" , and "+Waves_Etemplate+"\r"
1568                        elseif(strlen(Waves_Etemplate)==0 && strlen(Waves_Ytemplate)>0 && strlen(Waves_Xtemplate)>0)
1569                                NotebookHeader="Folders not containing "+Waves_Xtemplate+" and "+Waves_Ytemplate+"\r"
1570                        elseif(strlen(Waves_Etemplate)==0 && strlen(Waves_Ytemplate)==0 && strlen(Waves_Xtemplate)>0)
1571                                NotebookHeader="Folders not containing "+Waves_Xtemplate+"\r"
1572                        else
1573                                //nothing to do..
1574                                abort
1575                        endif
1576                endif
1577                IR2M_InsertText(NotebookHeader)
1578                IN2G_UniversalFolderScan(StartFolder, 25, "IR2M_MineWavesIntoNotebook()")
1579                IR2M_InsertDateAndTime()
1580        endif
1581        if(MineWaves && SaveToGraph)
1582                IR2M_CreateGraph()
1583                IN2G_UniversalFolderScan(StartFolder, 25, "IR2M_MineWavesIntoGraph()")
1584                IR2M_AppendLegend(GraphFontSize)
1585                IR2M_FormatGraphAsRequested()
1586        endif
1587        if((MineVariables || MineStrings || MineWavenotes) && SaveToNotebook)
1588                IR2M_CreateNotebook()   
1589                NotebookHeader="Result of search through data "+"\r"
1590                IR2M_InsertText(NotebookHeader)
1591                IN2G_UniversalFolderScan(StartFolder, 25, "IR2M_MineOthersIntoNotebook()")
1592                IR2M_InsertDateAndTime()
1593        endif
1594        if((MineVariables || MineStrings || MineWavenotes) && SaveToWaves)
1595                IR2M_CreateWavestoMineOthers()
1596                IN2G_UniversalFolderScan(StartFolder, 25, "IR2M_MineOthersIntoWaves()")
1597                IR2M_ConvertWavestoMineOthers()
1598                IR2M_CreateOutputTable()
1599        endif
1600
1601        setDataFolder oldDF
1602
1603end
1604
1605///******************************************************************************************
1606///******************************************************************************************
1607///******************************************************************************************
1608///******************************************************************************************
1609Function IR2M_MineOthersIntoWaves()
1610       
1611       
1612        SVAR Variables_ListToFind=root:Packages:DataMiner:Variables_ListToFind
1613        SVAR Strings_ListToFind=root:Packages:DataMiner:Strings_ListToFind
1614        SVAR WaveNotes_ListToFind=root:Packages:DataMiner:WaveNotes_ListToFind
1615        SVAR Others_FolderForWaves=root:Packages:DataMiner:Others_FolderForWaves
1616        SVAR FolderMatchString=root:Packages:DataMiner:FolderMatchString
1617
1618        variable i, tempVal
1619        string curFolder=GetDataFolder(0)
1620        string curWvName, curNote, curStrVal
1621        variable curLength
1622       
1623        //if(stringmatch(curFolder, FolderMatchString))
1624        if(GrepString(curFolder, FolderMatchString))
1625                if(IR2M_CheckIfSomethingToDo())                 
1626                        Wave/T DataFolderName=$("root:"+Others_FolderForWaves+"DataFolderName")
1627                        curLength=numpnts(DataFolderName)
1628                        redimension/N=(curLength+1) DataFolderName
1629                        DataFolderName[curLength]=GetDataFolder(0)
1630       
1631                        For(i=0;i<ItemsInList(Variables_ListToFind);i+=1)
1632                                curWvName=StringFromList(i,Variables_ListToFind)
1633                                curWvName = CleanupName(curWvName,1)
1634                                Wave TempWv= $("root:"+Others_FolderForWaves+curWvName)
1635                                redimension/N=(curLength+1) TempWv
1636                                NVAR/Z tempVar = $(curWvName)
1637                                if(NVAR_Exists(tempVar))
1638                                        TempWv[curLength]=tempVar
1639                                else
1640                                        TempWv[curLength]=NaN
1641                                endif
1642                        endfor
1643                        For(i=0;i<ItemsInList(Strings_ListToFind);i+=1)
1644                                curWvName=StringFromList(i,Strings_ListToFind)
1645                                curWvName = CleanupName(curWvName,1)
1646                                Wave/T TempWvText= $("root:"+Others_FolderForWaves+curWvName)
1647                                redimension/N=(curLength+1) TempWvText
1648                                SVAR/Z tempStr = $(curWvName)
1649                                if(SVAR_Exists(tempStr))
1650                                        TempWvText[curLength]=tempStr
1651                                else
1652                                        TempWvText[curLength]=""
1653                                endif
1654                        endfor
1655                        string tempName, FrontPart, EndPart, EndPart2, tempFrontPart
1656                        NVAR MineLatestGenerationWaves = root:Packages:DataMiner:MineLatestGenerationWaves
1657                        For(i=0;i<ItemsInList(WaveNotes_ListToFind,";");i+=1)
1658                                        tempName=StringFromList(i,WaveNotes_ListToFind,";")     
1659                                        FrontPart=StringFromList(0,tempName,">")                                //here goes function, which trunkates these damn names to 5-8 characters....
1660                                        tempFrontPart = FrontPart                       
1661                                        EndPart=StringFromList(1,tempName,">")
1662                                        if(!stringmatch(FrontPart, "*_qrs_*" ))
1663                                                if(MineLatestGenerationWaves)
1664                                                        tempFrontPart = IR2M_FindLatestGeneration(FrontPart)
1665                                                        Wave/Z SourceWv=$(tempFrontPart)
1666                                                else
1667                                                        Wave/Z SourceWv=$(FrontPart)
1668                                                endif
1669                                                //Wave/Z SourceWv=$(FrontPart)
1670                                        else
1671                                                string ListOfWaves=IN2G_CreateListOfItemsInFolder(GetDataFolder(1), 2)
1672                                                ListOfWaves = GrepList(ListOfWaves, FrontPart[0] )
1673                                                tempName = stringfromlist(0, ListOfWaves)
1674                                                Wave/Z SourceWv=$(tempName)
1675                                        endif
1676                                if(stringmatch(EndPart,"*:*"))
1677                                        EndPart2= StringFromList(ItemsInList(ENdPart,":")-1,EndPart,":")
1678                                else
1679                                        EndPart2=EndPart
1680                                endif
1681                                curWvName = IR2M_CreateWaveName(FrontPart,EndPart2)
1682                                Wave/T TempTextWave=$("root:"+Others_FolderForWaves+possiblyQuoteName(curWvName))
1683                                redimension/N=(curLength+1) TempTextWave
1684                                if(WaveExists(SourceWv))
1685                                        curNote=note(SourceWv)
1686                                        curStrVal = StringByKey(EndPart, curNote , "=")
1687                                        TempTextWave[curLength] = curStrVal
1688                                else
1689                                        TempTextWave[curLength] = ""
1690                                endif
1691                        endfor
1692                endif
1693        endif
1694end
1695///******************************************************************************************
1696///******************************************************************************************
1697///******************************************************************************************
1698///******************************************************************************************
1699///******************************************************************************************
1700Function IR2M_isWaveNumbers(ws)
1701    Wave/T ws
1702    Variable N=numpnts(ws)
1703    String wName = UniqueName("isNumbers",1,0)
1704    Make/N=(N) $wName
1705    Wave w = $wName
1706    w = !IR2M_isaNumber(ws[p])
1707    Variable allNumbers = (!sum(w))
1708    KillWaves/Z w
1709    return allNumbers
1710End
1711
1712
1713static Function IR2M_isaNumber(in)                // checks if the input string  is ONLY a number
1714    String in
1715    String str
1716    Variable v
1717    if(strlen(in)==0)
1718        return 1
1719    endif
1720    sscanf in, "%g%s", v,str
1721    return (V_flag==1)
1722End
1723
1724///******************************************************************************************
1725///******************************************************************************************
1726///******************************************************************************************
1727///******************************************************************************************
1728///******************************************************************************************
1729
1730Function IR2M_ConvertWavestoMineOthers()
1731       
1732       
1733        SVAR Variables_ListToFind=root:Packages:DataMiner:Variables_ListToFind
1734        SVAR Strings_ListToFind=root:Packages:DataMiner:Strings_ListToFind
1735        SVAR WaveNotes_ListToFind=root:Packages:DataMiner:WaveNotes_ListToFind
1736        SVAR Others_FolderForWaves=root:Packages:DataMiner:Others_FolderForWaves
1737        SVAR FolderMatchString=root:Packages:DataMiner:FolderMatchString
1738
1739        String wName = UniqueName("Temp_ConvWv",1,0)
1740   
1741        variable i, tempVal
1742        string curWvName
1743        DFref oldDf= GetDataFolderDFR()
1744
1745        SetDataFolder $("root:"+Others_FolderForWaves)
1746       
1747//      Wave/T/Z DataFolderName
1748//     
1749//      For(i=0;i<ItemsInList(Strings_ListToFind);i+=1)
1750//              curWvName=StringFromList(i,Strings_ListToFind)
1751//              curWvName = CleanupName(curWvName,1)
1752//              Wave/T CurStrWave= $(curWvName)
1753//              if(IR2M_isWaveNumbers(CurStrWave))
1754//                      make/O/N=(numpnts(CurStrWave)) $wName
1755//                      Wave TempNumWave = $wName
1756//                      tempNumWave=str2num(CurStrWave)
1757//                      killwaves CurStrWave
1758//                      Duplicate/O tempNumWave, $(curWvName)
1759//              endif
1760//      endfor
1761        For(i=0;i<ItemsInList(WaveNotes_ListToFind);i+=1)
1762                String TempName, FrontPart, EndPart, EndPart2
1763                TempName = StringFromList(i,WaveNotes_ListToFind,";")
1764                FrontPart = StringFromList(0,TempName,">")
1765                EndPart = StringFromList(1,TempName,">")
1766                if(stringmatch(EndPart,"*:*"))
1767                        EndPart2=stringFromList(ItemsInList(EndPart,":")-1,EndPart,":")
1768                else
1769                        EndPart2=EndPart
1770                endif
1771               
1772                curWvName = IR2M_CreateWaveName(FrontPart,EndPart2)
1773                Wave/T CurStrWave= $(curWvName)
1774                //if(strlen(CurStrWave)>0)
1775                if(numpnts(CurStrWave)>0)                       //bug found by Igor 7. Not sure what the fixs should be...
1776                        if(IR2M_isWaveNumbers(CurStrWave))
1777                                make/O/N=(numpnts(CurStrWave)) $wName
1778                                Wave TempNumWave = $wName
1779                                tempNumWave=str2num(CurStrWave)
1780                                killwaves/Z CurStrWave
1781                                Duplicate/O tempNumWave, $(curWvName)
1782                        endif
1783                endif
1784        endfor
1785        KillWaves/Z tempNumWave
1786       
1787        setDataFolder OldDf
1788end
1789///******************************************************************************************
1790///******************************************************************************************
1791///******************************************************************************************
1792///******************************************************************************************
1793///******************************************************************************************
1794///******************************************************************************************
1795///******************************************************************************************
1796///******************************************************************************************
1797///******************************************************************************************
1798
1799Function IR2M_CreateWavestoMineOthers()
1800       
1801       
1802        SVAR Variables_ListToFind=root:Packages:DataMiner:Variables_ListToFind
1803        SVAR Strings_ListToFind=root:Packages:DataMiner:Strings_ListToFind
1804        SVAR WaveNotes_ListToFind=root:Packages:DataMiner:WaveNotes_ListToFind
1805        SVAR Others_FolderForWaves=root:Packages:DataMiner:Others_FolderForWaves
1806        SVAR FolderMatchString=root:Packages:DataMiner:FolderMatchString
1807
1808        variable i, tempVal
1809        string curWvName
1810        DFref oldDf= GetDataFolderDFR()
1811
1812        if(!DataFolderExists("root:"+Others_FolderForWaves))
1813                setDataFolder root:
1814                For(i=0;i<itemsInList(Others_FolderForWaves,":");i+=1)
1815                        NewDataFolder/O/S $(StringFromList(i,Others_FolderForWaves,":"))
1816                endfor
1817        endif
1818        SetDataFolder $("root:"+Others_FolderForWaves)
1819       
1820        KillWIndow/Z SearchOutputTable
1821       
1822        Wave/T/Z DataFolderName
1823        if(WaveExists(DataFoldername))
1824                DoAlert 1, "Some search results in this folder exists, do you want to overwrite them? If not, click No and change output folder name."
1825                if(V_flag==2)
1826                        setDataFolder OldDf
1827                        abort
1828                endif
1829        endif
1830       
1831       
1832        make/T/O/N=0 DataFolderName
1833        For(i=0;i<ItemsInList(Variables_ListToFind);i+=1)
1834                curWvName=StringFromList(i,Variables_ListToFind)
1835                curWvName = CleanupName(curWvName,1)
1836                Wave/Z testWv=$(curWvName)
1837                if(WaveExists(testWv))
1838                        killWaves/Z testWv
1839                endif
1840                Make/O/N=0 $(curWvName)
1841        endfor
1842        For(i=0;i<ItemsInList(Strings_ListToFind);i+=1)
1843                curWvName=StringFromList(i,Strings_ListToFind)
1844                curWvName = CleanupName(curWvName,1)
1845                Wave/Z testWv=$(curWvName)
1846                if(WaveExists(testWv))
1847                        killWaves/Z testWv
1848                endif
1849                Make/T/O/N=0 $(curWvName)
1850        endfor
1851        For(i=0;i<ItemsInList(WaveNotes_ListToFind,";");i+=1)
1852                String TempName, StartPart, EndPart, EndPart2
1853                TempName = StringFromList(i,WaveNotes_ListToFind,";")
1854                StartPart = StringFromList(0,TempName, ">")
1855                EndPart = StringFromList(1,TempName, ">")
1856                if(stringMatch(EndPart,"*:*"))
1857                        EndPart2=stringfromlist(ItemsInList(EndPart,":")-1,EndPart,":")
1858                else
1859                        EndPart2=EndPart
1860                endif
1861                curWvName = IR2M_CreateWaveName(StartPart,EndPart2)
1862                Wave/Z testWv=$(curWvName)
1863                if(WaveExists(testWv))
1864                        killWaves testWv
1865                endif
1866                Make/T/O/N=0 $(curWvName)
1867        endfor
1868
1869       
1870        setDataFolder OldDf
1871end
1872///******************************************************************************************
1873///******************************************************************************************
1874///******************************************************************************************
1875///******************************************************************************************
1876Function/T IR2M_CreateWaveName(WaveNameStr,ItemNameStr)
1877        string WaveNameStr,ItemNameStr
1878
1879        string finalStr
1880
1881                finalStr=WaveNameStr+"."+ItemNameStr
1882                if(strlen(finalStr)>28)
1883                        //tempVal = 28 - strlen(StringFromList(1,StringFromList(i,WaveNotes_ListToFind),":"))
1884                        //finalStr=StringFromList(0,StringFromList(i,WaveNotes_ListToFind),":")[0,tempVal]+"."+StringFromList(1,StringFromList(i,WaveNotes_ListToFind),":")
1885                        //treat Separately the offending cases...
1886                        if (stringmatch(finalStr, "*Intensity*"))
1887                                finalStr = ReplaceString("Intensity", finalStr, "Int" , 1 , 10)
1888                        endif
1889                        if (stringmatch(finalStr, "*Qvector*"))
1890                                finalStr = ReplaceString("Qvector", finalStr, "Qvec" , 1 , 10)
1891                        endif
1892                        if (stringmatch(finalStr, "*Error*"))
1893                                finalStr = ReplaceString("Error", finalStr, "Err" , 1 , 10)
1894                        endif
1895                        if (stringmatch(finalStr, "*Volume*"))
1896                                finalStr = ReplaceString("Volume", finalStr, "Vol" , 1 , 10)
1897                        endif
1898                        if (stringmatch(finalStr, "*Surface*"))
1899                                finalStr = ReplaceString("Surface", finalStr, "Surf" , 1 , 10)
1900                        endif
1901                        if (stringmatch(finalStr, "*Background*"))
1902                                finalStr = ReplaceString("Background", finalStr, "Bckg" , 1 , 10)
1903                        endif
1904                        if (stringmatch(finalStr, "*Maximum*"))
1905                                finalStr = ReplaceString("Maximum", finalStr, "Max" , 1 , 10)
1906                        endif
1907                        if (stringmatch(finalStr, "*Minimum*"))
1908                                finalStr = ReplaceString("Minimum", finalStr, "Min" , 1 , 10)
1909                        endif
1910                        if (stringmatch(finalStr, "*ModelLSQF2*"))
1911                                finalStr = ReplaceString("ModelLSQF2", finalStr, "Mod2" , 1 , 10)
1912                        endif
1913                        if (stringmatch(finalStr, "*StructureParam*"))
1914                                finalStr = ReplaceString("StructureParam", finalStr, "SFpar" , 1 , 10)
1915                        endif
1916
1917                        if (stringmatch(finalStr, "UnifiedFit*"))
1918                                finalStr = ReplaceString("UnifiedFit", finalStr, "UF" , 1 , 1)
1919                        endif
1920                endif
1921       
1922                finalStr = CleanupName(finalStr,1)
1923       
1924       
1925        return finalStr
1926end
1927///******************************************************************************************
1928///******************************************************************************************
1929///******************************************************************************************
1930///******************************************************************************************
1931Function IR2M_CreateOutputTable()
1932        //PauseUpdate; Silent 1         // building window...
1933        String fldrSav0= GetDataFolder(1)
1934       
1935        SVAR Variables_ListToFind=root:Packages:DataMiner:Variables_ListToFind
1936        SVAR Strings_ListToFind=root:Packages:DataMiner:Strings_ListToFind
1937        SVAR WaveNotes_ListToFind=root:Packages:DataMiner:WaveNotes_ListToFind
1938        SVAR Others_FolderForWaves=root:Packages:DataMiner:Others_FolderForWaves
1939        SVAR FolderMatchString=root:Packages:DataMiner:FolderMatchString
1940
1941        variable tempVal
1942        SetDataFolder $("root:"+Others_FolderForWaves)
1943        KillWIndow/Z SearchOutputTable
1944        Edit/K=1/W=(471,48.5,1149,600.5) DataFolderName
1945        DoWindow/C SearchOutputTable
1946
1947        variable i
1948        string curWvName
1949        DFref oldDf= GetDataFolderDFR()
1950
1951        setDataFolder $(" root:"+Others_FolderForWaves)
1952       
1953        For(i=0;i<ItemsInList(Variables_ListToFind);i+=1)
1954                curWvName=StringFromList(i,Variables_ListToFind)
1955                curWvName = CleanupName(curWvName,1)
1956                AppendToTable $(curWvName)
1957        endfor
1958        For(i=0;i<ItemsInList(Strings_ListToFind);i+=1)
1959                curWvName=StringFromList(i,Strings_ListToFind)
1960                curWvName = CleanupName(curWvName,1)
1961                AppendToTable $(curWvName)
1962        endfor
1963        For(i=0;i<ItemsInList(WaveNotes_ListToFind,";");i+=1)
1964       
1965                String TempName, FrontPart, EndPart, EndPart2
1966                TempName = StringFromList(i,WaveNotes_ListToFind,";")
1967                FrontPart = StringFromList(0,TempName,">")
1968                EndPart = StringFromList(1,TempName,">")
1969                if(stringmatch(EndPart,"*:*"))
1970                        EndPart2=stringFromList(ItemsInList(EndPart,":")-1,EndPart,":")
1971                else
1972                        EndPart2=EndPart
1973                endif
1974               
1975                curWvName = IR2M_CreateWaveName(FrontPart,EndPart2)
1976                Wave/T CurStrWave= $(curWvName)
1977                AppendToTable $(curWvName)
1978        endfor
1979
1980        AutoPositionWindow/M=0 /R=DataMiningTool SearchOutputTable
1981
1982        SetDataFolder fldrSav0
1983End
1984///******************************************************************************************
1985///******************************************************************************************
1986///******************************************************************************************
1987///******************************************************************************************
1988Function IR2M_CheckIfSomethingToDo()
1989
1990        SVAR Variables_ListToFind=root:Packages:DataMiner:Variables_ListToFind
1991        SVAR Strings_ListToFind=root:Packages:DataMiner:Strings_ListToFind
1992        SVAR WaveNotes_ListToFind=root:Packages:DataMiner:WaveNotes_ListToFind
1993        NVAR MineLatestGenerationWaves = root:Packages:DataMiner:MineLatestGenerationWaves
1994        string tempName
1995       
1996        variable i
1997        string curNote
1998        For(i=0;i<ItemsInList(Variables_ListToFind);i+=1)
1999                NVAR/Z testVar=$(StringFromList(i,Variables_ListToFind))
2000                if(NVAR_Exists(testVar))
2001                        return 1
2002                endif
2003        endfor
2004        For(i=0;i<ItemsInList(Strings_ListToFind);i+=1)
2005                SVAR/Z testStr=$(StringFromList(i,Strings_ListToFind))
2006                if(SVAR_Exists(testStr))
2007                        return 1
2008                endif
2009        endfor
2010        For(i=0;i<ItemsInList(WaveNotes_ListToFind,";");i+=1)
2011                tempName=StringFromList(0,StringFromList(i,WaveNotes_ListToFind,";"),">")
2012                if(!stringmatch(tempName, "*_qrs_*" ))
2013                                        if(MineLatestGenerationWaves)
2014                                                Wave/Z testWave=$(IR2M_FindLatestGeneration(tempName))
2015                                        else
2016                                                Wave/Z testWave=$(tempName)
2017                                        endif
2018                else
2019                        string ListOfWaves=IN2G_CreateListOfItemsInFolder(GetDataFolder(1), 2)
2020                        ListOfWaves = GrepList(ListOfWaves, tempName[0] )
2021                        tempName = stringfromlist(0, ListOfWaves)
2022                        Wave/Z testWave=$(tempName)
2023                endif
2024                if(WaveExists(testWave))
2025                        curNote=note(testWave)
2026                        if(strlen(StringByKey(StringFromList(1,StringFromList(i,WaveNotes_ListToFind,";"),">"), curNote , "=")))
2027                                return 1
2028                        endif
2029                endif
2030        endfor
2031        return 0
2032
2033end
2034
2035///******************************************************************************************
2036///******************************************************************************************
2037///******************************************************************************************
2038///******************************************************************************************
2039Function IR2M_MineOthersIntoNotebook()
2040       
2041       
2042        SVAR Variables_ListToFind=root:Packages:DataMiner:Variables_ListToFind
2043        SVAR Strings_ListToFind=root:Packages:DataMiner:Strings_ListToFind
2044        SVAR WaveNotes_ListToFind=root:Packages:DataMiner:WaveNotes_ListToFind
2045        SVAR Others_FolderForWaves=root:Packages:DataMiner:Others_FolderForWaves
2046        SVAR FolderMatchString=root:Packages:DataMiner:FolderMatchString
2047
2048        variable i, FolderNameInserted=0
2049        string curNote
2050        string curFolder=GetDataFolder(0)
2051        string textToInsert
2052        string nbl="DataMinerNotebook"
2053       
2054        //if(stringmatch(curFolder, FolderMatchString))
2055        if(GrepString(curFolder, FolderMatchString)||strlen(FolderMatchString)==0)
2056                if(IR2M_CheckIfSomethingToDo())                 
2057
2058                        For(i=0;i<ItemsInList(Variables_ListToFind);i+=1)
2059                                NVAR/Z testVar=$(StringFromList(i,Variables_ListToFind))
2060                                if(NVAR_Exists(testVar))
2061                                        if(!FolderNameInserted)
2062                                                Notebook $nbl selection={endOfFile, endOfFile}
2063                                                textToInsert = "\r"+GetDataFolder(1)+"\r"
2064                                                Notebook $nbl text=textToInsert         
2065                                                FolderNameInserted=1
2066                                        endif
2067                                        textToInsert = StringFromList(i,Variables_ListToFind)+"   =   "+num2str(testVar)+ "\r"
2068                                        Notebook $nbl text=textToInsert
2069                                endif
2070                        endfor
2071                        For(i=0;i<ItemsInList(Strings_ListToFind);i+=1)
2072                                SVAR/Z testStr=$(StringFromList(i,Strings_ListToFind))
2073                                if(SVAR_Exists(testStr))
2074                                        if(!FolderNameInserted)
2075                                                Notebook $nbl selection={endOfFile, endOfFile}
2076                                                textToInsert = "\r"+GetDataFolder(1)+"\r"
2077                                                Notebook $nbl text=textToInsert         
2078                                                FolderNameInserted=1
2079                                        endif
2080                                        textToInsert = StringFromList(i,Strings_ListToFind)+"   =   "+testStr+ "\r"
2081                                        Notebook $nbl text=textToInsert
2082                                endif
2083                        endfor
2084                        string tempName1, tempStr, tempName2
2085                        NVAR MineLatestGenerationWaves = root:Packages:DataMiner:MineLatestGenerationWaves
2086                        For(i=0;i<ItemsInList(WaveNotes_ListToFind,";");i+=1)
2087                                tempStr = StringFromList(i,WaveNotes_ListToFind,";")
2088                                tempName1 =StringFromList(0,tempStr,">")
2089                                tempName2 =StringFromList(1,tempStr,">")
2090                                if(!stringmatch(tempName1, "*_qrs_*" ))
2091                                        if(MineLatestGenerationWaves)
2092                                                tempName1 = IR2M_FindLatestGeneration(tempName1)
2093                                                Wave/Z testWave=$(tempName1)
2094                                        else
2095                                                Wave/Z testWave=$(tempName1)
2096                                        endif
2097                                else
2098                                        string ListOfWaves=IN2G_CreateListOfItemsInFolder(GetDataFolder(1), 2)
2099                                        ListOfWaves = GrepList(ListOfWaves, tempName1[0] )
2100                                        tempName1 = stringfromlist(0, ListOfWaves)
2101                                        Wave/Z testWave=$(tempName1)
2102                                endif
2103                                //testWave
2104                                if(WaveExists(testWave))
2105                                        curNote=note(testWave)
2106                                        if(strlen(StringByKey(tempName2, curNote , "=")))
2107                                                if(!FolderNameInserted)
2108                                                        Notebook $nbl selection={endOfFile, endOfFile}
2109                                                        textToInsert = "\r"+GetDataFolder(1)+"\r"
2110                                                        Notebook $nbl text=textToInsert         
2111                                                        FolderNameInserted=1
2112                                                endif
2113                                                textToInsert = tempName1 +"   ;   "
2114                                                textToInsert+= tempName2+"   =   "
2115                                                textToInsert+= StringByKey(tempName2, curNote , "=") + "\r"
2116                                                Notebook $nbl text=textToInsert
2117                                        endif
2118                                endif
2119                        endfor
2120                endif
2121        endif
2122end
2123///******************************************************************************************
2124///******************************************************************************************
2125Function/S IR2M_FindLatestGeneration(ResultsName)
2126        string resultsname
2127        //assume we are in current folder, find last index of results known
2128        variable i
2129        string tempName, latestResult
2130        string endingStr, CommonPartStr
2131        latestResult = ResultsName
2132        endingStr = StringFromList(ItemsInList(ResultsName,"_")-1, ResultsName , "_")
2133        if(!GrepString(endingStr, "^[0-9]+$" ))
2134                return ResultsName
2135        endif
2136        //this is fix for cases, when some of the order numbers are missing. User is changing the model
2137        //in this case we need to create al list of matching wave names and sort it acroding to the index.
2138        CommonPartStr = RemoveEnding(ResultsName, endingStr)
2139        string ListOfWaves=IN2G_CreateListOfItemsInFolder(GetDataFolder(1), 2)  //all waves
2140        ListOfWaves = GrepList(ListOfWaves, CommonPartStr)                                                              //waves which match the string part of the name except the order number
2141        ListOfWaves = SortList(ListOfWaves , ";" , 16+1)                                                                        //this sorts the higherst order number first, 16 is special sort mode for this case and +1 inverses teh order.
2142        //print ListOfWaves
2143        if(strlen(ListOfWaves)<1)
2144                return ""
2145        else
2146                return StringFromList(0, ListOfWaves)                                                                                   //returns first element of the list, highest order
2147        endif
2148        return " "
2149        //this is old code, it failed with some of the order numebrs were missing.
2150        //      tempName = RemoveEnding(ResultsName  , StringFromList(ItemsInList(ResultsName,"_")-1, ResultsName , "_"))
2151        //      //print tempName
2152        //      For(i=0;i<1000;i+=1)
2153        //              if(checkname(tempName+num2str(i),1))
2154        //                      latestResult = tempName+num2str(i)
2155        //              else
2156        //                      if(strlen(latestResult)>1)
2157        //                              return latestResult
2158        //                      else
2159        //                              return " "
2160        //                      endif
2161        //              endif
2162        //      endfor
2163        //      return " "
2164       
2165end
2166///******************************************************************************************
2167///******************************************************************************************
2168
2169Function IR2M_FormatGraphAsRequested()
2170
2171        DFref oldDf= GetDataFolderDFR()
2172
2173        setDataFolder root:Packages:DataMiner
2174
2175        NVAR GraphLogX
2176        NVAR GraphLogY
2177        NVAR GraphColorScheme1
2178        NVAR GraphColorScheme2
2179        NVAR GraphColorScheme3
2180       
2181        DoWIndow DataMiningGraph
2182        if(!V_Flag)
2183                abort
2184        else
2185                DoWindow/F DataMiningGraph
2186        endif
2187       
2188        ModifyGraph/Z  /W=DataMiningGraph  log(bottom)=GraphLogX
2189        ModifyGraph/Z  /W=DataMiningGraph  log(left)=GraphLogY
2190        if(GraphColorScheme1)
2191                IR2M_MultiColorStyle()
2192        elseif(GraphColorScheme2)
2193                IR2M_ColorCurves()
2194        elseif(GraphColorScheme3)
2195                IR2M_RainbowColorizeTraces(0)
2196        else
2197       
2198        endif
2199       
2200        setDataFolder oldDF
2201
2202end
2203
2204///******************************************************************************************
2205///******************************************************************************************
2206///******************************************************************************************
2207///******************************************************************************************
2208///******************************************************************************************
2209///******************************************************************************************
2210///******************************************************************************************
2211///******************************************************************************************
2212
2213Function IR2M_MineWavesIntoGraph()
2214       
2215        SVAR Waves_Xtemplate=root:Packages:DataMiner:Waves_Xtemplate
2216        SVAR Waves_Ytemplate=root:Packages:DataMiner:Waves_Ytemplate
2217        SVAR Waves_Etemplate=root:Packages:DataMiner:Waves_Etemplate
2218
2219        SVAR FolderMatchString=root:Packages:DataMiner:FolderMatchString
2220
2221        string curFolder=GetDataFolder(0)
2222        string ListOfAllWaves="", ListOfXWaves="", ListOfYWaves="", ListOfEWaves="", curName=""
2223        variable i
2224
2225        //need to deal with two cases. Number one is case when full names are given, number two is when partial name and * are given...
2226
2227        //first check that the folder is selected by user to deal with
2228        //if(!stringmatch(curFolder, FolderMatchString ))
2229        if(!GrepString(curFolder, FolderMatchString ))
2230                return 1
2231        endif
2232        NVAR MineLatestGenerationWaves = root:Packages:DataMiner:MineLatestGenerationWaves
2233        NVAR UseResults = root:Packages:DataMiner:UseResults
2234        //Now we can start dealing with this
2235        if(strsearch(Waves_Xtemplate, "*", 0)<0 && strsearch(Waves_Ytemplate, "*", 0)<0  && strsearch(Waves_Etemplate, "*", 0)<0 )
2236                //no * in any of the names
2237                                        if(MineLatestGenerationWaves)
2238                                                //Wave/Z testWave=$(IR2M_FindLatestGeneration(tempName1))
2239                                                Wave/Z testX=$(IR2M_FindLatestGeneration(Waves_Xtemplate))
2240                                                Wave/Z testY=$(IR2M_FindLatestGeneration(Waves_Ytemplate))
2241                                                Wave/Z testE=$(IR2M_FindLatestGeneration(Waves_Etemplate))
2242                                        else
2243                                                Wave/Z testX=$(Waves_Xtemplate)
2244                                                Wave/Z testY=$(Waves_Ytemplate)
2245                                                Wave/Z testE=$(Waves_Etemplate)
2246                                        endif
2247                       
2248                                if(strlen(Waves_Etemplate)>0)
2249                                        if(WaveExists(testX) && WaveExists(testY) && WaveExists(testE))
2250                                                AppendToGraph /W=DataMiningGraph testY vs TestX
2251                                                //              ErrorBars /W=DataMiningGraph "traceName", Y
2252                                                //ErrorBars SMR_Int#31 Y,wave=(:'S32_-2.3 aluminum':SMR_Error,:'S32_-2.3 aluminum':SMR_Error)           
2253                                        endif
2254                                else
2255                                        if(WaveExists(testX) && WaveExists(testY))
2256                                                AppendToGraph /W=DataMiningGraph testY vs TestX
2257                                        endif
2258                                endif   
2259        else            //User wants to find partially defined waves. Much more trouble...
2260                //OK, let's figure out, which all waves should be ploted...
2261                ListOfAllWaves = stringFromList(1,DataFolderDir(2),":")
2262                ListOfAllWaves = ListOfAllWaves[0,strlen(ListOfAllWaves)-3]+","
2263                if(strlen(ListOfAllWaves)>0)
2264                        For(i=0;i<ItemsInList(ListOfAllWaves,",");i+=1)
2265                                curName = StringFromList(i,ListOfAllWaves,",")
2266                                if(stringmatch(curName,Waves_Xtemplate))
2267                                        ListOfXWaves+=curName+";"
2268                                endif
2269                                if(stringmatch(curName,Waves_Ytemplate))
2270                                        ListOfYWaves+=curName+";"
2271                                endif
2272                                if(stringmatch(curName,Waves_Etemplate))
2273                                        ListOfEWaves+=curName+";"
2274                                endif
2275                        endfor
2276                        //Note, for now... This can miserably fail and assign wave together, which do not belong together.
2277                        //there is no gurrantee, that this will not assign wrong "ends/starts" together...
2278                        //but at least we need to run this for cases when we find same number for each X and Y and when we have just one X and many Y
2279                        if(ItemsInList(ListOfXWaves)==1)
2280                                For(i=0;i<ItemsInList(ListOfYWaves);i+=1)
2281                                        Wave/Z testX=$(stringFromList(0,ListOfXWaves))
2282                                        Wave/Z testY=$(stringFromList(i,ListOfYWaves))
2283                                        Wave/Z testE=$(stringFromList(i,ListOfEWaves))
2284                               
2285                                        if(strlen(Waves_Etemplate)>0)
2286                                                if(WaveExists(testX) && WaveExists(testY) && WaveExists(testE))
2287                                                        AppendToGraph /W=DataMiningGraph testY vs TestX
2288                                        //              ErrorBars /W=DataMiningGraph "traceName", Y
2289                                        //ErrorBars SMR_Int#31 Y,wave=(:'S32_-2.3 aluminum':SMR_Error,:'S32_-2.3 aluminum':SMR_Error)           
2290                                                endif
2291                                        else
2292                                                if(WaveExists(testX) && WaveExists(testY))
2293                                                        AppendToGraph /W=DataMiningGraph testY vs TestX
2294                                                endif
2295                                        endif   
2296                                endfor
2297                        else
2298                                For(i=0;i<ItemsInList(ListOfXWaves);i+=1)
2299                                        Wave/Z testX=$(stringFromList(i,ListOfXWaves))
2300                                        Wave/Z testY=$(stringFromList(i,ListOfYWaves))
2301                                        Wave/Z testE=$(stringFromList(i,ListOfEWaves))
2302                               
2303                                        if(strlen(Waves_Etemplate)>0)
2304                                                if(WaveExists(testX) && WaveExists(testY) && WaveExists(testE))
2305                                                        AppendToGraph /W=DataMiningGraph testY vs TestX
2306                                        //              ErrorBars /W=DataMiningGraph "traceName", Y
2307                                        //ErrorBars SMR_Int#31 Y,wave=(:'S32_-2.3 aluminum':SMR_Error,:'S32_-2.3 aluminum':SMR_Error)           
2308                                                endif
2309                                        else
2310                                                if(WaveExists(testX) && WaveExists(testY))
2311                                                        AppendToGraph /W=DataMiningGraph testY vs TestX
2312                                                endif
2313                                        endif   
2314                                endfor
2315                        endif
2316                endif
2317        endif
2318end
2319///******************************************************************************************
2320///******************************************************************************************
2321///******************************************************************************************
2322///******************************************************************************************
2323///******************************************************************************************
2324///******************************************************************************************
2325///******************************************************************************************
2326///******************************************************************************************
2327Function IR2M_AppendLegend(FontSize)
2328        variable FontSize
2329
2330        string Traces=TraceNameList("DataMiningGraph", ";", 1 )
2331        variable i
2332        string legendStr=""
2333        if(Fontsize<10)
2334                legendStr="\Z0"+num2str(floor(FontSize))       
2335        else
2336                legendStr="\Z"+num2str(floor(FontSize))
2337        endif
2338        For(i=0;i<ItemsInList(Traces);i+=1)
2339                legendStr+="\\s("+StringFromList(i,traces)+") "+GetWavesDataFolder(TraceNameToWaveRef("DataMiningGraph", StringFromList(i,traces)),0)+":"+StringFromList(i,traces)+"\r"
2340        endfor
2341       
2342        Legend/C/N=text0/A=LB legendStr
2343end
2344
2345///******************************************************************************************
2346///******************************************************************************************
2347Function IR2M_CreateGraph()
2348       
2349        KillWIndow/Z DataMiningGraph
2350        Display/K=1/W=(305.25,42.5,870,498.5)
2351        DoWindow/C DataMiningGraph
2352
2353end
2354
2355///******************************************************************************************
2356///******************************************************************************************
2357Function IR2M_InsertDateAndTime()
2358
2359        Variable now=datetime
2360        string bucket11=Secs2Date(now,0)+",  "+Secs2Time(now,0) +"\r"
2361        string nbl="DataMinerNotebook"
2362        Notebook $nbl selection={endOfFile, endOfFile}
2363        Notebook $nbl text="\r\rList created on :     "+bucket11
2364
2365end
2366///******************************************************************************************
2367///******************************************************************************************
2368Function IR2M_InsertText(textToInsert)
2369        string textToInsert
2370
2371        string nbl="DataMinerNotebook"
2372        Notebook $nbl selection={endOfFile, endOfFile}
2373        Notebook $nbl text=textToInsert+"\r"
2374
2375end
2376
2377///******************************************************************************************
2378///******************************************************************************************
2379Function IR2M_MineWavesIntoNotebook()
2380       
2381        SVAR Waves_Xtemplate=root:Packages:DataMiner:Waves_Xtemplate
2382        SVAR Waves_Ytemplate=root:Packages:DataMiner:Waves_Ytemplate
2383        SVAR Waves_Etemplate=root:Packages:DataMiner:Waves_Etemplate
2384        NVAR WavesNbk_contains=root:Packages:DataMiner:WavesNbk_contains
2385        NVAR WavesNbk_NOTcontains=root:Packages:DataMiner:WavesNbk_NOTcontains
2386        SVAR FolderMatchString=root:Packages:DataMiner:FolderMatchString
2387
2388        string curFolder=GetDataFolder(0)
2389        string ListOfAllWaves="",curName="",ListOfXWaves="",ListOfYWaves="",ListOfEWaves=""
2390                string textToInsert
2391                string nbl="DataMinerNotebook"
2392        variable i
2393        //if(!stringmatch(curFolder, FolderMatchString ))
2394        if(!GrepString(curFolder, FolderMatchString ))
2395                return 1
2396        endif
2397       
2398        NVAR MineLatestGenerationWaves = root:Packages:DataMiner:MineLatestGenerationWaves
2399        NVAR UseResults = root:Packages:DataMiner:UseResults
2400        string RealYWaveName, RealXWaveName, RealEName
2401        //Now we can start dealing with this
2402        if(strsearch(Waves_Xtemplate, "*", 0)<0 && strsearch(Waves_Ytemplate, "*", 0)<0  && strsearch(Waves_Etemplate, "*", 0)<0 )
2403                if(MineLatestGenerationWaves)
2404                        //Wave/Z testWave=$(IR2M_FindLatestGeneration(tempName1))
2405                        Wave/Z testX=$(IR2M_FindLatestGeneration(Waves_Xtemplate))
2406                        Wave/Z testY=$(IR2M_FindLatestGeneration(Waves_Ytemplate))
2407                        Wave/Z testE=$(IR2M_FindLatestGeneration(Waves_Etemplate))
2408                        RealYWaveName=IR2M_FindLatestGeneration(Waves_Ytemplate)
2409                        RealXWaveName=IR2M_FindLatestGeneration(Waves_Xtemplate)
2410                        RealEName=IR2M_FindLatestGeneration(Waves_Etemplate)
2411                else
2412                        Wave/Z testX=$(Waves_Xtemplate)
2413                        Wave/Z testY=$(Waves_Ytemplate)
2414                        Wave/Z testE=$(Waves_Etemplate)
2415                        RealYWaveName=(Waves_Ytemplate)
2416                        RealXWaveName=(Waves_Xtemplate)
2417                        RealEName=(Waves_Etemplate)
2418                endif
2419                Notebook $nbl selection={endOfFile, endOfFile}
2420       
2421                if(strlen(Waves_Etemplate)>0)
2422                        if(((WaveExists(testX) && WaveExists(testY) && WaveExists(testE)) && WavesNbk_contains) || (!(WaveExists(testX) && WaveExists(testY) && WaveExists(testE)) && WavesNbk_NOTcontains))
2423                                if(MineLatestGenerationWaves)
2424                                        textToInsert = GetDataFolder(1)+"    contains   "+RealYWaveName+"\r"
2425                                else
2426                                        textToInsert = GetDataFolder(1)+"\r"
2427                                endif
2428                                Notebook $nbl text=textToInsert
2429                        endif
2430                elseif(strlen(Waves_Etemplate)==0 && strlen(Waves_Ytemplate)>0 && strlen(Waves_Xtemplate)>0 )
2431                        if(((WaveExists(testX) && WaveExists(testY)) && WavesNbk_contains) || (!(WaveExists(testX) && WaveExists(testY)) && WavesNbk_NOTcontains))
2432                                if(MineLatestGenerationWaves)
2433                                        textToInsert = GetDataFolder(1)+"    contains   "+RealYWaveName+"\r"
2434                                else
2435                                        textToInsert = GetDataFolder(1)+"\r"
2436                                endif
2437                                Notebook $nbl text=textToInsert
2438                        endif
2439                elseif(strlen(Waves_Etemplate)==0 && strlen(Waves_Ytemplate)==0 && strlen(Waves_Xtemplate)>0)
2440                        if((WaveExists(testX) && WavesNbk_contains) || (!WaveExists(testX) && WavesNbk_NOTcontains))
2441                                if(MineLatestGenerationWaves)
2442                                        textToInsert = GetDataFolder(1)+"    contains   "+RealYWaveName+"\r"
2443                                else
2444                                        textToInsert = GetDataFolder(1)+"\r"
2445                                endif
2446                                Notebook $nbl text=textToInsert
2447                        endif
2448                else
2449                        //nothing to do...
2450                endif
2451        else
2452                //here we deal with the cases when user partially described the waves... Much more difficult.
2453                //note, this will work ONLY with present, not present needs special treatment.
2454               
2455                ListOfAllWaves = stringFromList(1,DataFolderDir(2),":")
2456                ListOfAllWaves = ListOfAllWaves[0,strlen(ListOfAllWaves)-3]+","
2457                if(strlen(ListOfAllWaves)>0)
2458                        For(i=0;i<ItemsInList(ListOfAllWaves,",");i+=1)
2459                                curName = StringFromList(i,ListOfAllWaves,",")
2460                                if(stringmatch(curName,Waves_Xtemplate))
2461                                        ListOfXWaves+=curName+";"
2462                                endif
2463                                if(stringmatch(curName,Waves_Ytemplate))
2464                                        ListOfYWaves+=curName+";"
2465                                endif
2466                                if(stringmatch(curName,Waves_Etemplate))
2467                                        ListOfEWaves+=curName+";"
2468                                endif
2469                        endfor
2470                        //Note, for now... This can miserably fail and assign wave together, which do not belong together.
2471                        //there is no gurrantee, that this will not assign wrong "ends/starts" together...
2472                        For(i=0;i<ItemsInList(ListOfXWaves);i+=1)
2473                                Wave/Z testX=$(stringFromList(i,ListOfXWaves))
2474                                Wave/Z testY=$(stringFromList(i,ListOfYWaves))
2475                                Wave/Z testE=$(stringFromList(i,ListOfEWaves))
2476                                if(strlen(Waves_Etemplate)>0)
2477                                        if(((WaveExists(testX) && WaveExists(testY) && WaveExists(testE)) && WavesNbk_contains) || (!(WaveExists(testX) && WaveExists(testY) && WaveExists(testE)) && WavesNbk_NOTcontains))
2478                                                textToInsert = GetDataFolder(1)+"  contains    "+stringFromList(i,ListOfXWaves)+", "+stringFromList(i,ListOfYWaves)+", and "+stringFromList(i,ListOfEWaves)+"\r"
2479                                                Notebook $nbl text=textToInsert
2480                                        endif
2481                                elseif(strlen(Waves_Etemplate)==0 && strlen(Waves_Ytemplate)>0 && strlen(Waves_Xtemplate)>0 )
2482                                        if(((WaveExists(testX) && WaveExists(testY)) && WavesNbk_contains) || (!(WaveExists(testX) && WaveExists(testY)) && WavesNbk_NOTcontains))
2483                                                textToInsert = GetDataFolder(1)+"  contains    "+stringFromList(i,ListOfXWaves)+", and "+stringFromList(i,ListOfYWaves)+"\r"
2484                                                Notebook $nbl text=textToInsert
2485                                        endif
2486                                elseif(strlen(Waves_Etemplate)==0 && strlen(Waves_Ytemplate)==0 && strlen(Waves_Xtemplate)>0)
2487                                        if((WaveExists(testX) && WavesNbk_contains) || (!WaveExists(testX) && WavesNbk_NOTcontains))
2488                                                textToInsert = GetDataFolder(1)+"  contains    "+stringFromList(i,ListOfXWaves)+"\r"
2489                                                Notebook $nbl text=textToInsert
2490                                        endif
2491                                else
2492                                        //nothing to do...
2493                                endif
2494                        endfor
2495                endif
2496                       
2497        endif
2498end
2499
2500///******************************************************************************************
2501///******************************************************************************************
2502Function IR2M_CreateNotebook()
2503       
2504        string nbl="DataMinerNotebook"
2505        Silent 1
2506        if (strsearch(WinList("*",";","WIN:16"),nbL,0)!=-1)             ///Logbook exists
2507                DoWindow/F $nbl
2508        else
2509                NewNotebook/K=3/V=0/N=$nbl/F=1/V=1/W=(235.5,44.75,817.5,592.25) as nbl
2510                Notebook $nbl defaultTab=36, statusWidth=238, pageMargins={72,72,72,72}
2511                Notebook $nbl showRuler=1, rulerUnits=1, updating={1, 60}
2512                Notebook $nbl newRuler=Normal, justification=0, margins={0,0,468}, spacing={0,0,0}, tabs={}, rulerDefaults={"Arial",10,0,(0,0,0)}
2513                Notebook $nbl ruler=Normal; Notebook $nbl  justification=1, rulerDefaults={"Arial",14,1,(0,0,0)}
2514                Notebook $nbl text="This is log results of data mining of SAS data with Irena package.\r"
2515                Notebook $nbl text="\r"
2516                Notebook $nbl ruler=Normal
2517        endif
2518        DoWindow/F $nbl
2519end
2520///******************************************************************************************
2521///******************************************************************************************
2522///******************************************************************************************
2523///******************************************************************************************
2524///******************************************************************************************
2525///******************************************************************************************
2526Function IR2M_ReadWavesFromListBox(which)
2527        string which
2528        DFref oldDf= GetDataFolderDFR()
2529
2530        setDataFolder root:Packages:DataMiner
2531        Wave/T ItemsInFolder
2532       
2533        if(cmpstr(which,"Waves_X")==0)
2534                SVAR Waves_Xtemplate=root:Packages:DataMiner:Waves_Xtemplate
2535                ControlInfo  /W=ItemsInFolderPanel ItemsInCurrentFolder
2536                Waves_Xtemplate = ItemsInFolder[V_Value]
2537        endif
2538        if(cmpstr(which,"Waves_Y")==0)
2539                SVAR Waves_Ytemplate=root:Packages:DataMiner:Waves_Ytemplate
2540                ControlInfo  /W=ItemsInFolderPanel ItemsInCurrentFolder
2541                Waves_Ytemplate = ItemsInFolder[V_Value]
2542        endif
2543        if(cmpstr(which,"Waves_E")==0)
2544                SVAR Waves_Etemplate=root:Packages:DataMiner:Waves_Etemplate
2545                ControlInfo  /W=ItemsInFolderPanel ItemsInCurrentFolder
2546                Waves_Etemplate = ItemsInFolder[V_Value]
2547        endif
2548       
2549       
2550        setDataFolder oldDF     
2551end
2552
2553///******************************************************************************************
2554///******************************************************************************************
2555///******************************************************************************************
2556///******************************************************************************************
2557///******************************************************************************************
2558///******************************************************************************************
2559
2560Function IR2M_MakePanelWithListBox(skipCreatePanel)
2561        variable skipCreatePanel
2562       
2563        DFref oldDf= GetDataFolderDFR()
2564
2565        setDataFolder root:Packages:DataMiner
2566        if(!skipCreatePanel)
2567                KillWIndow/Z ItemsInFolderPanel
2568        endif
2569        SVAR DataFolderName=root:Packages:DataMiner:DataFolderName
2570        if(!DataFolderExists(DataFolderName) || cmpstr(DataFolderName,"---")==0)
2571                return 1
2572        endif
2573        NVAR MineVariables = root:Packages:DataMiner:MineVariables
2574        NVAR MineStrings = root:Packages:DataMiner:MineStrings
2575        NVAR MineWaves = root:Packages:DataMiner:MineWaves
2576        NVAR MineWavenotes = root:Packages:DataMiner:MineWavenotes
2577        SVAR LastSelectedItem = root:Packages:DataMiner:LastSelectedItem
2578        SVAR ItemMatchString = root:Packages:DataMiner:ItemMatchString
2579
2580        variable WhatToTest
2581        string TitleStr
2582        if(MineWaves || MineWavenotes)
2583                WhatToTest=2
2584                TitleStr = "Waves in test folder"
2585        endif
2586        if(MineVariables)
2587                WhatToTest=4
2588                TitleStr = "Variables in test folder"
2589        endif
2590        if(MineStrings)
2591                WhatToTest=8
2592                TitleStr = "Strings in test folder"
2593        endif
2594        setDataFolder DataFolderName
2595        string ListOfItems = StringFromList(1,(DataFolderDir(WhatToTest)),":")
2596        if(strlen(ItemMatchString)>0)
2597                ListOfItems = GrepList(ListOfItems, ItemMatchString,0,",")
2598        endif
2599        setDataFolder root:Packages:DataMiner
2600        make/O/T/N=(itemsInList(ListOfItems,",")) ItemsInFolder
2601        variable i
2602        variable selItemOld=0
2603        for(i=0;i<itemsInList(ListOfItems,",");i+=1)
2604                ItemsInFolder[i]= stringFromList(0,stringFromList(i,ListOfItems,","),";")
2605                if(stringmatch(ItemsInFolder[i], LastSelectedItem ))
2606                        selItemOld=i
2607                endif
2608        endfor
2609       
2610        if(strlen(ItemsInFolder[0])>0)
2611                if(MineWaves || MineWavenotes)
2612                        Wave FirstSelectedWave=$(DataFolderName+possiblyQuoteName(ItemsInFolder[selItemOld]))
2613                        string CurNote=note(FirstSelectedWave)
2614                        if(MineWaves || MineWavenotes)
2615                                make/T/O/N=(itemsInList(CurNote)) WaveNoteList
2616                                for(i=0;i<itemsInList(CurNote);i+=1)
2617                                        WaveNoteList[i]= stringFromList(i,CurNote)
2618                                endfor
2619                        endif
2620                else
2621                        if(MineStrings)
2622                                SVAR SelectedString=$(DataFolderName+possiblyQuoteName(ItemsInFolder[selItemOld]))
2623                                make/T/O/N=(1) WaveNoteList
2624                                WaveNoteList[0]=SelectedString
2625                        else
2626                                NVAR SelectedVariable=$(DataFolderName+possiblyQuoteName(ItemsInFolder[selItemOld]))
2627                                make/T/O/N=(1) WaveNoteList
2628                                WaveNoteList[0]=num2str(SelectedVariable)
2629                        endif
2630                endif
2631        else
2632                        make/T/O/N=(1) WaveNoteList
2633                        WaveNoteList=""
2634        endif
2635        Make/O/N=(numpnts(ItemsInFolder)) ItemsInFolderSelections
2636        Make/O/N=(numpnts(WaveNoteList)) WaveNoteListSelections
2637        WaveNoteListSelections = 0
2638        ItemsInFolderSelections = 0
2639        if(!skipCreatePanel)
2640                KillWIndow/Z ItemsInFolderPanel
2641                //PauseUpdate; Silent 1         // building window...
2642                NewPanel /K=1 /W=(400,50,720,696) as "Items in selected folder"
2643                DoWindow/C ItemsInFolderPanel
2644                SetDrawLayer UserBack
2645                //SetDrawEnv fsize= 16,fstyle= 3,textrgb= (0,0,65280)
2646                //DrawText 45,21,"Items In the selected folder"
2647                TitleBox Text0 title="\Zr140Items In the selected folder:",pos={15,5},frame=0,fstyle=3,size={100,24},fColor=(1,4,52428)
2648                //SetDrawEnv fsize= 16,fstyle= 3,textrgb= (0,0,65280)
2649                //DrawText 11,343,"Wave note/value for selection above:"
2650                TitleBox Text1 title="\Zr140Wave note/value for selection above:",pos={15,320},frame=0,fstyle=3,size={100,24},fColor=(1,4,52428)
2651
2652                ListBox ItemsInCurrentFolder,pos={2,23},size={311,268}, selWave=root:Packages:DataMiner:ItemsInFolderSelections
2653                ListBox ItemsInCurrentFolder,listWave=root:Packages:DataMiner:ItemsInFolder
2654                ListBox ItemsInCurrentFolder,mode= 1,selRow= selItemOld, proc=IR2M_ListBoxProc
2655                setVariable ItemMatchString, pos={5,295}, size={210,20}, bodyWidth=130, title="Match (RegEx)", limits={-inf,inf,0}, proc=IR2M_ListboxSetVarProc
2656                setVariable ItemMatchString, help={"Input Regular expressiong to match names of items to "}, variable= root:Packages:DataMiner:ItemMatchString
2657                ListBox WaveNoteList,pos={3,347},size={313,244},mode=0, selWave=root:Packages:DataMiner:WaveNoteListSelections
2658                ListBox WaveNoteList,listWave=root:Packages:DataMiner:WaveNoteList,row= 0
2659                setVariable WaveNoteMatchString, pos={5,595}, size={210,20}, bodyWidth=130, title="Match (RegEx)", limits={-inf,inf,0}, proc=IR2M_ListboxSetVarProc
2660                setVariable WaveNoteMatchString, help={"Input Regular expressiong to match names of items to "}, variable= root:Packages:DataMiner:WaveNoteMatchString
2661               
2662                IR1_UpdatePanelVersionNumber("ItemsInFolderPanel", IR2MversionNumber,1)
2663                AutoPositionWindow/M=0 /R=DataMiningTool ItemsInFolderPanel
2664        endif
2665
2666        if(MineWaves)
2667                        ListBox WaveNoteList,win=ItemsInFolderPanel,mode=0
2668                        ListBox ItemsInCurrentFolder,win=ItemsInFolderPanel,mode=1     
2669        elseif(MineVariables||MineStrings)
2670                        ListBox ItemsInCurrentFolder,win=ItemsInFolderPanel,mode=9
2671                        ListBox WaveNoteList,win=ItemsInFolderPanel,mode=0             
2672        else//wave notes
2673                        ListBox ItemsInCurrentFolder,win=ItemsInFolderPanel,mode=1     
2674                        ListBox WaveNoteList,win=ItemsInFolderPanel,mode=9     
2675        endif
2676
2677        setDataFolder oldDF
2678end
2679
2680///******************************************************************************************
2681///******************************************************************************************
2682///******************************************************************************************
2683Function  IR2M_ListboxSetVarProc(sva) : SetVariableControl
2684        STRUCT WMSetVariableAction &sva
2685
2686        switch( sva.eventCode )
2687                case 1: // mouse up
2688                case 2: // Enter key
2689                        if(stringmatch("ItemMatchString",sva.ctrlName))
2690                                IR2M_MakePanelWithListBox(1)
2691                        endif
2692                       
2693                        if(stringmatch("WaveNoteMatchString",sva.ctrlName))
2694                                IR2M_UpdateValueListBox()
2695                        endif
2696                case 3: // Live update
2697                        Variable dval = sva.dval
2698                        String sval = sva.sval
2699                        break
2700                case -1: // control being killed
2701                        break
2702        endswitch
2703
2704        return 0
2705End
2706///******************************************************************************************
2707///******************************************************************************************
2708///******************************************************************************************
2709
2710
2711Function IR2M_ListBoxProc(ctrlName,row,col,event) : ListBoxControl
2712        String ctrlName
2713        Variable row
2714        Variable col
2715        Variable event  //1=mouse down, 2=up, 3=dbl click, 4=cell select with mouse or keys
2716                                        //5=cell select with shift key, 6=begin edit, 7=end
2717
2718        if(event==4)
2719                //update
2720                IR2M_UpdateValueListBox()
2721        endif
2722        return 0
2723End
2724
2725///******************************************************************************************
2726///******************************************************************************************
2727///******************************************************************************************
2728///******************************************************************************************
2729///******************************************************************************************
2730///******************************************************************************************
2731
2732Function IR2M_UpdateValueListBox()
2733        DFref oldDf= GetDataFolderDFR()
2734
2735        setDataFolder root:Packages:DataMiner
2736       
2737        SVAR DataFolderName=root:Packages:DataMiner:DataFolderName
2738        if(!DataFolderExists(DataFolderName))
2739                abort
2740        endif
2741        NVAR MineVariables = root:Packages:DataMiner:MineVariables
2742        NVAR MineStrings = root:Packages:DataMiner:MineStrings
2743        NVAR MineWaves = root:Packages:DataMiner:MineWaves
2744        NVAR MineWavenotes = root:Packages:DataMiner:MineWavenotes
2745        SVAR LastSelectedItem = root:Packages:DataMiner:LastSelectedItem
2746        SVAR WaveNoteMatchString = root:Packages:DataMiner:WaveNoteMatchString
2747       
2748        variable WhatToTest
2749        string TitleStr
2750        if(MineWaves || MineWavenotes)
2751                WhatToTest=2
2752                TitleStr = "Waves in test folder"
2753        endif
2754        if(MineVariables)
2755                WhatToTest=4
2756                TitleStr = "Variables in test folder"
2757        endif
2758        if(MineStrings)
2759                WhatToTest=8
2760                TitleStr = "Strings in test folder"
2761        endif
2762        variable i
2763        ControlInfo  /W=ItemsInFolderPanel ItemsInCurrentFolder
2764        Wave/T ItemsInFolder
2765        variable SelectedItem=V_Value
2766        LastSelectedItem = ItemsInFolder[SelectedItem]
2767        if(MineWaves || MineWavenotes)
2768                Wave FirstSelectedWave=$(DataFolderName+possiblyQuoteName(ItemsInFolder[SelectedItem]))
2769                string CurNote=note(FirstSelectedWave)
2770                if(strlen(WaveNoteMatchString)>0)
2771                        CurNote = GrepList(CurNote, WaveNoteMatchString,0,";")
2772                endif
2773                if(MineWaves || MineWavenotes)
2774                        make/T/O/N=(itemsInList(CurNote)) WaveNoteList
2775                        for(i=0;i<itemsInList(CurNote);i+=1)
2776                                WaveNoteList[i]= stringFromList(i,CurNote)
2777                        endfor
2778                endif
2779        else
2780                if(MineStrings)
2781                        SVAR SelectedString=$(DataFolderName+possiblyQuoteName(ItemsInFolder[SelectedItem]))
2782                        string tempString
2783                        tempString = SelectedString
2784                        if(strlen(WaveNoteMatchString)>0)
2785                                tempString = GrepList(tempString, WaveNoteMatchString,0,";")
2786                        endif
2787                        make/T/O/N=(itemsInList(tempString)) WaveNoteList
2788                        for(i=0;i<itemsInList(tempString);i+=1)
2789                                WaveNoteList[i]= stringFromList(i,tempString)
2790                        endfor
2791                else
2792                        NVAR SelectedVariable=$(DataFolderName+possiblyQuoteName(ItemsInFolder[SelectedItem]))
2793                        make/T/O/N=(1) WaveNoteList
2794                        WaveNoteList[0]=num2str(SelectedVariable)
2795                endif
2796        endif
2797        Make/O/N=(numpnts(ItemsInFolder)) ItemsInFolderSelections
2798        Make/O/N=(numpnts(WaveNoteList)) WaveNoteListSelections
2799//      WaveNoteListSelections = 0
2800//      ItemsInFolderSelections = 0
2801
2802        DoWindow ItemsInFolderPanel
2803        if(V_Flag)
2804                DoWindow/F ItemsInFolderPanel
2805        else
2806                abort
2807        endif
2808        ControlUpdate  /W=ItemsInFolderPanel  WaveNoteList
2809//      ListBox WaveNoteList,win=ItemsInFolderPanel, listWave=root:Packages:DataMiner:WaveNoteList,row= 0
2810       
2811        setDataFolder oldDF
2812
2813end
2814///******************************************************************************************
2815///******************************************************************************************
2816///******************************************************************************************
2817///******************************************************************************************
2818///******************************************************************************************
2819///******************************************************************************************
2820Function  IR2M_DataMinerCheckProc(ctrlName,checked) : CheckBoxControl
2821        String ctrlName
2822        Variable checked
2823
2824//      ListOfVariables+="MineVariables;MineStrings;MineWaves;MineWavenotes;"
2825       
2826        DFref oldDf= GetDataFolderDFR()
2827
2828        setDataFolder root:Packages:DataMiner
2829        NVAR MineVariables = root:Packages:DataMiner:MineVariables
2830        NVAR MineStrings = root:Packages:DataMiner:MineStrings
2831        NVAR MineWaves = root:Packages:DataMiner:MineWaves
2832        NVAR MineWavenotes = root:Packages:DataMiner:MineWavenotes
2833       
2834        NVAR SaveToNotebook = root:Packages:DataMiner:SaveToNotebook
2835        NVAR SaveToWaves = root:Packages:DataMiner:SaveToWaves
2836        NVAR SaveToGraph = root:Packages:DataMiner:SaveToGraph
2837
2838        if(cmpstr(ctrlName,"MineVariables")==0 || cmpstr(ctrlName,"MineStrings")==0 || cmpstr(ctrlName,"MineWaves")==0 || cmpstr(ctrlName,"MineWavenotes")==0)
2839                KillWIndow/Z ItemsInFolderPanel
2840        endif
2841        if(cmpstr(ctrlName,"MineVariables")==0)
2842                if(Checked)
2843                        // MineVariables = 0
2844                         MineStrings = 0
2845                         MineWaves = 0
2846                         MineWavenotes = 0
2847                         IR2M_MakePanelWithListBox(0)
2848                endif
2849        endif
2850        if(cmpstr(ctrlName,"MineStrings")==0)
2851                if(Checked)
2852                         MineVariables = 0
2853                        // MineStrings = 0
2854                         MineWaves = 0
2855                         MineWavenotes = 0
2856                         IR2M_MakePanelWithListBox(0)
2857                endif
2858        endif
2859        if(cmpstr(ctrlName,"MineWaves")==0)
2860                if(Checked)
2861                         MineVariables = 0
2862                         MineStrings = 0
2863                        // MineWaves = 0
2864                         MineWavenotes = 0
2865                         IR2M_MakePanelWithListBox(0)
2866                endif
2867        endif
2868        if(cmpstr(ctrlName,"MineWavenotes")==0)
2869                if(Checked)
2870                         MineVariables = 0
2871                         MineStrings = 0
2872                         MineWaves = 0
2873                        // MineWavenotes = 0
2874                         IR2M_MakePanelWithListBox(0)
2875                endif
2876        endif
2877        if(cmpstr(ctrlName,"SaveToNotebook")==0)
2878                if(Checked)
2879                        // SaveToNotebook = 0
2880                         SaveToWaves = 0
2881                         SaveToGraph = 0
2882                endif
2883        endif
2884        if(cmpstr(ctrlName,"SaveToWaves")==0)
2885                if(Checked)
2886                         SaveToNotebook = 0
2887                        // SaveToWaves = 0
2888                //       SaveToGraph = 0
2889                endif
2890        endif
2891                if((SaveToNotebook + SaveToWaves !=1)&&(MineVariables || MineStrings || MineWavenotes))
2892                                SaveToWaves=1
2893                                SaveToNotebook=0
2894                endif
2895
2896                if((SaveToNotebook + SaveToGraph !=1)&& MineWaves)
2897                                SaveToGraph=1
2898                                SaveToNotebook=0
2899                endif
2900
2901        if(cmpstr(ctrlName,"GraphLogX")==0)
2902                //fix graph axis if exists
2903                IR2M_FormatGraphAsRequested()
2904        endif
2905        if(cmpstr(ctrlName,"GraphLogY")==0)
2906                //fix graph axis if exists
2907                IR2M_FormatGraphAsRequested()
2908        endif
2909
2910        NVAR GraphColorScheme1
2911        NVAR GraphColorScheme2
2912        NVAR GraphColorScheme3
2913        if(cmpstr(ctrlName,"GraphColorScheme1")==0)
2914                if(checked)
2915                        // GraphColorScheme1=0
2916                         GraphColorScheme2=0
2917                         GraphColorScheme3=0
2918                         //apply formating if graph exists
2919                         IR2M_FormatGraphAsRequested()
2920                endif
2921        endif
2922        if(cmpstr(ctrlName,"GraphColorScheme2")==0)
2923                if(checked)
2924                         GraphColorScheme1=0
2925                        // GraphColorScheme2=0
2926                         GraphColorScheme3=0
2927                         //apply formating if graph exists
2928                         IR2M_FormatGraphAsRequested()
2929                endif
2930        endif
2931        if(cmpstr(ctrlName,"GraphColorScheme3")==0)
2932                if(checked)
2933                         GraphColorScheme1=0
2934                         GraphColorScheme2=0
2935                        // GraphColorScheme3=0
2936                         //apply formating if graph exists
2937                         IR2M_FormatGraphAsRequested()
2938                endif
2939        endif
2940
2941        NVAR WavesNbk_contains
2942        NVAR WavesNbk_NOTcontains
2943        if(cmpstr(ctrlName,"WavesNbk_contains")==0)
2944                if(Checked)
2945                        WavesNbk_NOTcontains = 0
2946                else
2947                        WavesNbk_NOTcontains=1
2948                endif
2949        endif
2950        if(cmpstr(ctrlName,"WavesNbk_NOTcontains")==0)
2951                if(Checked)
2952                        WavesNbk_contains = 0
2953                else
2954                        WavesNbk_contains=1
2955                endif
2956        endif
2957
2958        IR2M_FixPanelControls()
2959        setDataFolder oldDF
2960       
2961End
2962
2963
2964///******************************************************************************************
2965///******************************************************************************************
2966///******************************************************************************************
2967///******************************************************************************************
2968///******************************************************************************************
2969///******************************************************************************************
2970Function IR2M_SyncSearchListAndListBox()
2971
2972        DFref oldDf= GetDataFolderDFR()
2973
2974        setDataFolder root:Packages:DataMiner
2975        SVAR Variables_ListToFind
2976        SVAR Strings_ListToFind
2977        SVAR WaveNotes_ListToFind
2978        Wave/T SelectedItems
2979        variable i
2980        variable numVariables=ItemsInList(Variables_ListToFind)
2981        variable numStrings=ItemsInList(Strings_ListToFind)
2982        variable numWaveNotes=ItemsInList(WaveNotes_ListToFind)
2983        redimension/N=(numVariables+numStrings+numWaveNotes+4) SelectedItems
2984        SelectedItems[0]="DataFolderName"
2985        SelectedItems[1]="               Variables:"
2986        for(i=0;i<ItemsInList(Variables_ListToFind);i+=1)
2987                SelectedItems[i+2]=stringFromList(i,Variables_ListToFind)
2988        endfor
2989        SelectedItems[2+numVariables]="               Strings:"
2990        for(i=0;i<ItemsInList(Strings_ListToFind);i+=1)
2991                SelectedItems[i+3+numVariables]=stringFromList(i,Strings_ListToFind)
2992        endfor
2993        SelectedItems[3+numVariables+numStrings]="               WaveNotes:"
2994        for(i=0;i<ItemsInList(WaveNotes_ListToFind);i+=1)
2995                SelectedItems[i+4+numVariables+numStrings]=stringFromList(i,WaveNotes_ListToFind)
2996        endfor
2997
2998        setDataFolder oldDF
2999
3000end
3001///******************************************************************************************
3002///******************************************************************************************
3003///******************************************************************************************
3004///******************************************************************************************
3005///******************************************************************************************
3006///******************************************************************************************
3007
3008Function IR2M_InitDataMiner()
3009
3010
3011        DFref oldDf= GetDataFolderDFR()
3012
3013        setdatafolder root:
3014        NewDataFolder/O/S root:Packages
3015        NewDataFolder/O/S DataMiner
3016
3017        string ListOfVariables
3018        string ListOfStrings
3019        variable i
3020       
3021        //here define the lists of variables and strings needed, separate names by ;...
3022       
3023        ListOfVariables="UseIndra2Data;UseQRSdata;UseResults;UseSMRData;UseUserDefinedData;"
3024        ListOfVariables+="MineVariables;MineStrings;MineWaves;MineWavenotes;MineLatestGenerationWaves;"
3025        ListOfVariables+="SaveToNotebook;SaveToWaves;SaveToGraph;"
3026        ListOfVariables+="GraphLogX;GraphLogY;GraphColorScheme1;GraphColorScheme2;GraphColorScheme3;GraphFontSize;"
3027        ListOfVariables+="WavesNbk_contains;WavesNbk_NOTcontains;"
3028//
3029        ListOfStrings="DataFolderName;IntensityWaveName;QWavename;ErrorWaveName;"
3030        ListOfStrings+="Waves_Xtemplate;Waves_Ytemplate;Waves_Etemplate;"
3031        ListOfStrings+="StartFolder;FolderMatchString;LastSelectedItem;ItemMatchString;WaveNoteMatchString;"
3032        ListOfStrings+="Variables_ListToFind;Strings_ListToFind;WaveNotes_ListToFind;Others_FolderForWaves;Others_ListToFind;"
3033//     
3034        //and here we create them
3035        for(i=0;i<itemsInList(ListOfVariables);i+=1)   
3036                IN2G_CreateItem("variable",StringFromList(i,ListOfVariables))
3037        endfor         
3038                                                                               
3039        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
3040                IN2G_CreateItem("string",StringFromList(i,ListOfStrings))
3041        endfor 
3042       
3043        //Waves
3044        Wave/T/Z SelectedItems
3045        if(!WaveExists(SelectedItems))
3046                make/T/N=1 SelectedItems
3047                SelectedItems[0]="DataFolderName;"
3048        endif
3049       
3050        NVAR GraphFontSize
3051        if(GraphFontSize<6)
3052                GraphFontSize=8
3053        endif
3054        NVAR WavesNbk_contains
3055        NVAR WavesNbk_NOTcontains
3056        if(WavesNbk_contains+WavesNbk_NOTcontains!=1)
3057                WavesNbk_contains=1
3058                WavesNbk_NOTcontains=0
3059        endif
3060        SVAR StartFolder
3061        if(!DataFolderExists(StartFolder) || strlen(StartFolder)<1)
3062                StartFolder="root:"
3063        endif
3064        SVAR FolderMatchString
3065        if(StringMatch(FolderMatchString,"*"))
3066                FolderMatchString=""
3067        endif
3068        SVAR Others_FolderForWaves
3069        if(Strlen(Others_FolderForWaves)==0)
3070                Others_FolderForWaves="SearchResults:"
3071        endif
3072        SVAR Others_ListToFind
3073        if(Strlen(Others_ListToFind)==0)
3074                Others_ListToFind="DataFolderName;Variables;Strings;WaveNotes;"
3075        endif
3076       
3077        NVAR MineVariables
3078        NVAR MineStrings
3079        NVAR MineWaves
3080        NVAR MineWavenotes
3081        if(MineVariables+MineStrings+MineWaves+MineWavenotes!=1)
3082                MineVariables=0
3083                MineStrings=0
3084                MineWaves=1
3085                MineWavenotes=0
3086        endif
3087       
3088//      SVAR/Z OutputNameExtension
3089//      if(!SVAR_Exists(OutputNameExtension))
3090//              string/G OutputNameExtension
3091//              OutputNameExtension="dat"
3092//      endif
3093//      SVAR/Z HeaderSeparator
3094//      if(!SVAR_Exists(HeaderSeparator))
3095//              string/G HeaderSeparator
3096//              HeaderSeparator="#   "
3097//      endif
3098//      //Ouptu path
3099//      PathInfo IR2E_ExportPath
3100//      if(!V_Flag)
3101//              PathInfo Igor
3102//              NewPath/Q IR2E_ExportPath S_Path
3103//      endif
3104//      PathInfo IR2E_ExportPath
3105//      SVAR CurrentlySetOutputPath
3106//      CurrentlySetOutputPath=S_Path
3107//     
3108//      SVAR NewFileOutputName
3109//      NewFileOutputName=""
3110//      SVAR CurrentlyLoadedDataName
3111//      CurrentlyLoadedDataName = ""
3112//      SVAR DataFolderName
3113//      DataFolderName=""
3114//      SVAR IntensityWaveName
3115//      IntensityWaveName=""
3116//      SVAR QWavename
3117//      QWavename=""
3118//      SVAR ErrorWaveName
3119//      ErrorWaveName=""
3120        setDataFolder OldDf
3121
3122
3123end
3124
3125
3126
3127function IR2M_RainbowColorizeTraces(rev)
3128variable rev  //Reverses coloring order if non-zero
3129
3130
3131    Variable k, km
3132    variable r,g,b,scale
3133
3134
3135    // Find the number of traces on the top graph
3136    String tnl = TraceNameList( "", ";", 1 )
3137    k = ItemsInList(tnl)
3138    if (k <= 1)
3139        return -1
3140    endif
3141
3142
3143    km = k
3144    colortab2wave Rainbow
3145    wave M_colors
3146
3147
3148    do
3149        k-=1
3150        scale = (rev==0 ? k : (km-k-1))  / (km-1) * dimsize(M_colors,0)
3151        r = M_colors[scale][0]
3152        g = M_colors[scale][1]
3153        b = M_colors[scale][2]
3154        ModifyGraph/Z rgb[k]=( r, g, b )
3155    while(k>0)
3156    killwaves/Z M_colors
3157    return 1
3158end
3159
3160
3161Function IR2M_ColorCurves()
3162        //PauseUpdate; Silent 1
3163
3164
3165        Variable i, NumTraces, iRed, iBlue, iGreen, io, w, Red, Blue, Green,  ColorNorm
3166        String DataName
3167        NumTraces=ItemsInList(TraceNameList("", ";", 1),";")
3168
3169
3170        i=0
3171        w = (NumTraces/2)
3172        do
3173                DataName = StringFromList(i, TraceNameList("", ";", 1),";")
3174                if(strlen(DataName)>0)
3175                        io = 0
3176                        iRed = exp(-(i-io)^2/w)
3177                        io = NumTraces/2
3178                        iBlue = exp(-(i-io)^2/w)
3179                        io = NumTraces
3180                        iGreen = exp(-(i-io)^2/w)
3181       
3182       
3183                        ColorNorm = sqrt(iRed^2 + iBlue^2 + iGreen^2)
3184       
3185       
3186                        Red = 65535 * (iRed/ColorNorm)
3187                        Blue = 65535 * (iBlue/ColorNorm)
3188                        Green = 65535 * (iGreen/ColorNorm)
3189       
3190       
3191                        ModifyGraph/Z rgb($DataName)=(Red,Blue,Green)
3192                        ModifyGraph/Z lsize($DataName)=1
3193                endif
3194                i+=1
3195        while(i<NumTraces)
3196End
3197
3198function IR2M_MultiColorStyle()
3199    variable i
3200    variable traces=ItemsInList(TraceNameList("",";",1))
3201    //there is only 18 (0-17) lstyles... so traces/8 needs to be less than 17, that is 144 waves 
3202    variable chunks     //number of 144 sets of 8 axis
3203    if(traces<144)
3204        chunks=traces
3205    else
3206        chunks=144
3207    endif
3208    for(i=0;(i<chunks/8);i+=1)
3209        ModifyGraph/Z lstyle[0+8*i]=i,lstyle[1+8*i]=i,lstyle[2+8*i] =i,lstyle[3+8*i]=i
3210        ModifyGraph/Z lstyle[4+8*i]=i,lstyle[5+8*i]=i,lstyle[6+8*i]=i
3211        ModifyGraph/Z lstyle[7+8*i]=i
3212        ModifyGraph/Z rgb[0+8*i]=(0,0,0),rgb[1+8*i]=(0,65535,0), rgb [2+8*i]=(0,65535,65535),rgb[3+8*i]=(32768,0,65535)
3213        ModifyGraph/Z rgb[4+8*i]=(65535,32768,0),rgb[5+8*i]= (65535,65535,0),rgb[6+8*i]=(65535,26214,52428)
3214        ModifyGraph/Z rgb[7+8*i]=(32768,16384,0)
3215    endfor
3216End
3217
Note: See TracBrowser for help on using the repository browser.