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

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

Igor 9 related changes

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