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

Last change on this file since 939 was 939, checked in by ilavsky, 3 years ago

minor fixes

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