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

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

Add Size distribution analysis to SImple fits

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