source: sans/Dev/trunk/NCNR_User_Procedures/Common/DataSetHandling.ipf @ 604

Last change on this file since 604 was 604, checked in by ajj, 13 years ago

-Separated panels for arithmetic and data management
-Added functionality for subtraction
-Still needs some tidying and consistency between actions (currently for instance Plot must be pressed before Calculate)

File size: 19.9 KB
Line 
1#pragma rtGlobals=1             // Use modern global access method.
2
3// Functions and interfaces to manage datasets now that they are in data folders
4// Planned interface
5// - Panel to select/load data and then select operation
6// Planned functions:
7// - Rename a data set - AJJ Done Nov 2009
8// - Duplicate a data set - AJJ Done Nov 2009
9// - Subtract one data set from another
10// - Add one data set to another
11// - Divide data sets
12// - Multiply data sets
13// - Save a data folder to file
14
15Function DataManagementPanel()
16        PauseUpdate; Silent 1           // building window...
17        NewPanel /W=(459,44,959,364)/N=DataManagementPanel/K=1 as "Data Set Management"
18        ModifyPanel fixedSize=1
19
20        //Main bit of panel
21        GroupBox grpBox_0,pos={20,10},size={460,50}
22        GroupBox grpBox_1,pos={20,80},size={460,200}
23
24        Button DS1_button,pos={300,20},size={150,20},proc=DM_LoadDataSetProc,title="Load 1D Data Set 1"
25        PopupMenu DS1_popup,pos={30,21},size={318,20},title="Data Set 1",proc=DMDS_PopMenuProc
26        PopupMenu DS1_popup,mode=1,value= #"DM_DataSetPopupList()"
27
28        //Button DS2_button,pos={300,50},size={150,20},proc=DM_LoadDataSetProc,title="Load 1D Data Set 2"
29        //PopupMenu DS2_popup,pos={30,51},size={318,20},title="Data Set 2",proc=DMDS_PopMenuProc
30        //PopupMenu DS2_popup,mode=1,value= #"DM_DataSetPopupList()"
31
32        //Default to disabled for second data set - only needed for arithmetic
33        //Button DS2_button,disable=2
34        //PopupMenu DS2_popup,disable=2
35
36        //Tabs
37        //TabControl DSTabs,pos={20,90},size={460,200},tabLabel(0)="Management", proc=DSTabsProc
38        //TabControl DSTabs,tablabel(1)="Arithmetic"
39        //TabControl DSTabs,value=0
40
41        //Management Tab
42        Button Rename_button,title="Rename",pos={75,200},size={150,20}
43        Button  Duplicate_button,title="Duplicate",pos={275,200},size={150,20}
44        Button Save_button,title="Save",pos={75,240},size={150,20}
45        Button Unload_button,title="Unload",pos={275,240},size={150,20}
46        SetVariable OldName_setvar,title="Old Name",pos={50,100},size={400,20}
47        SetVariable OldName_setvar,fsize=12,value=_STR:"",noedit=2
48        SetVariable NewName_setvar,title="New Name (max 25 characters)",pos={50,140},size={400,20}
49        SetVariable NewName_setvar,fsize=12,value=_STR:"",proc=setvarproc,live=1
50
51End
52
53Function MakeDAPanel()
54
55//      //Set up globals
56//      String/G root:Packages:NIST:gDA_DS1Name
57//      String/G root:Packages:NIST:gDA_DS2Name
58//      String/G root:Packages:NIST:gDA_ResultName     
59//
60//      String/G root:Packages:NIST:gDA_DS1Trace
61//      String/G root:Packages:NIST:gDA_DS2Trace
62//      String/G root:Packages:NIST:gDA_ResultTrace     
63
64       
65        PauseUpdate; Silent 1           // building window...
66        DoWindow/K DataArithmeticPanel
67        NewPanel /W=(459,44,959,404)/N=DataArithmeticPanel/K=1 as "Data Set Arithmetic"
68        ModifyPanel fixedSize=1
69
70        //Main bit of panel
71        GroupBox grpBox_0,pos={20,10},size={460,105}
72
73        Button DS1_button,pos={300,20},size={150,20},proc=DMDA_LoadDataSetProc,title="Load 1D Data Set 1"
74        Button DS1_button,valueColor=(65535,0,0),userdata="DS1"
75        PopupMenu DS1_popup,pos={30,21},size={318,20},title="Data Set 1"
76        PopupMenu DS1_popup,mode=1,value= #"DM_DataSetPopupList()"
77        PopupMenu DS1_popup,fsize=12,fcolor=(65535,0,0),valueColor=(65535,0,0)
78
79        Button DS2_button,pos={300,50},size={150,20},proc=DMDA_LoadDataSetProc,title="Load 1D Data Set 2"
80        Button DS2_button,valueColor=(0,0,65535),userdata="DS2"
81        PopupMenu DS2_popup,pos={30,51},size={318,20},title="Data Set 2"
82        PopupMenu DS2_popup,mode=1,value= #"DM_DataSetPopupList()"
83        PopupMenu DS2_popup,fsize=12,fcolor=(0,0,65535),valueColor=(0,0,65535)
84
85        Button DSPlot_button,title="Plot",pos={175,85},size={150,20}
86        Button DSPlot_button,proc=DSPlotButtonProc
87
88
89        //Tabs
90        TabControl DATabs,pos={20,120},size={460,220},tabLabel(0)="Subtract", proc=DATabsProc
91        TabControl DATabs,tablabel(1)="Add",tablabel(2)="Multiply",tablabel(3)="Divide"
92        TabControl DATabs,value=0
93
94        Button DACalculate_button,title="Calculate",pos={50,310},size={150,20}
95        Button DACalculate_button,proc=DACalculateProc
96        Button DASave_button,title="Save Result",pos={300,310},size={150,20}
97        Button DACursors_button,title="Get Cursors",pos={175,250},size={150,20}
98        SetVariable DAResultName_sv,title="Result Name (max 25 characters)",pos={50,280},size={400,20}
99        SetVariable DAResultName_Sv,fsize=12,value=_STR:"SubtractionResult",proc=setvarproc,live=1
100        CheckBox DANoDS2_cb,title="Data Set 2 = 1?",pos={300,180}
101       
102        ValDisplay DARangeStar_vd,title="Start",pos={40,220},size={100,20},fsize=12
103        ValDisplay DARangeEnd_vd,title="End  ",pos={160,220},size={100,20},fsize=12
104       
105        SetVariable DAScale_sv,title="Scale Factor (f)",pos={280,220},size={180,20},fsize=12,value=_NUM:1
106
107        GroupBox grpBox_1,pos={30,210},size={440,70}
108       
109        NewPanel/HOST=DataArithmeticPanel/N=arithDisplay/W=(50,150,170,190)
110        arithDisplayProc(0)
111       
112End
113
114Function MakeDAPlotPanel()
115        PauseUpdate; Silent 1           // building window...
116        DoWindow/K DAPlotPanel
117        NewPanel /W=(14,44,454,484)/N=DAPlotPanel/K=1 as "Data Set Arithmetic"
118        ModifyPanel fixedSize=1
119
120        Display/HOST=DAPlotPanel/N=DAPlot/W=(0,0,440,400)
121        SetActiveSubWindow DAPlotPanel
122        Checkbox DAPlot_log_cb, title="Log I(q)", pos={20,410}
123End
124
125
126Function DSPlotButtonProc(ba) : ButtonControl
127        STRUCT WMButtonAction &ba
128       
129        String win = ba.win
130        SVAR DS1name = root:Packages:NIST:gDA_DS1Name
131        SVAR DS2name = root:Packages:NIST:gDA_DS2Name
132        SVAR Resultname = root:Packages:NIST:gDA_ResultName     
133       
134        switch (ba.eventCode)
135                case 2:
136                        //mouse up
137                        //Get folder for DS1
138                        DoWindow DAPlotPanel
139                        if (V_Flag == 0)
140                                MakeDAPlotPanel()
141                        else
142                                DoWindow/HIDE=0/F DAPlotPanel
143                                do
144                                        String tracename = StringFromList(0,TraceNameList("DAPlotPanel#DAPlot",";",1),";")
145                                        if (cmpstr(tracename,"")==0)
146                                                break
147                                        else
148                                                RemoveFromGraph/W=DAPlotPanel#DAPlot $tracename
149                                        endif                   
150                                while(1)                               
151                        endif
152                       
153                        ControlInfo/W=$(win) DS1_popup
154                        String DS1 = S_Value
155                        if (cmpstr(DS1,"") != 0 )
156                                AddDAPlot(1)
157                        endif
158                        //Get folder for DS2
159                        ControlInfo/W=$(win) DS2_popup
160                        String DS2 = S_Value
161                        if (cmpstr(DS2,"") != 0)
162                                AddDAPlot(2)
163                        endif
164                        break
165        endswitch
166
167        return 0
168End
169
170Function AddDAPlot(dataset)
171        Variable dataset
172       
173        String win = "DataArithmeticPanel"
174
175        switch(dataset)
176                case 1:
177                        ControlInfo/W=$(win) DS1_popup
178                        String DS1name = S_Value
179                        Wave qWave = $("root:"+DS1name+":"+DS1name+"_q")
180                        Wave iWave = $("root:"+DS1name+":"+DS1name+"_i")
181                        Wave errWave = $("root:"+DS1name+":"+DS1name+"_s")
182                        AppendToGraph/W=DAPlotPanel#DAPlot iWave vs Qwave
183                        break
184                case 2:
185                        ControlInfo/W=$(win) DS2_popup
186                        String DS2name = S_Value
187                        Wave qWave = $("root:"+DS2name+":"+DS2name+"_q")
188                        Wave iWave = $("root:"+DS2name+":"+DS2name+"_i")
189                        Wave errWave = $("root:"+DS2name+":"+DS2name+"_s")
190                        AppendToGraph/W=DAPlotPanel#DAPlot iWave vs Qwave
191                        break
192                case 3:
193                        ControlInfo/W=$(win) DAResultName_sv
194                        String ResultName = S_Value
195                        Wave qWave = $("root:"+ResultName+":"+ResultName+"_q")
196                        Wave iWave = $("root:"+ResultName+":"+ResultName+"_i")
197                        Wave errWave = $("root:"+ResultName+":"+ResultName+"_s")
198                        AppendToGraph/W=DAPlotPanel#DAPlot iWave vs Qwave
199                        break
200        endswitch
201End
202
203Function arithDisplayProc(s)
204        Variable s
205
206        SetActiveSubWindow DataArithmeticPanel#arithDisplay
207
208        switch (s)
209                case 0:
210                        //Subtract
211                        DrawAction/L=progFront delete
212                        DrawRect 0,0,120,40
213                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,65535,0)
214                        DrawText 10,32,"I"
215                        SetDrawEnv fname="Times", fsize=22, fstyle= 1,textrgb= (0,0,0)
216                        DrawText 20,30,"="
217                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (65535,0,0)
218                        DrawText 35,32,"I"
219                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,0,65535)
220                        DrawText 95,32,"I"
221                        SetDrawEnv fname="Symbol", fsize=22, fstyle= 1,textrgb= (0,0,0)
222                        DrawText 52,32,"-"
223                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,0,0)
224                        DrawText 75,30,"f"
225                        SetDrawEnv fname="Times", fsize=22, fstyle= 1,textrgb= (0,0,0)
226                        DrawText 85,32,"*"
227                        break
228                case 1:
229                        //Add
230                        DrawAction/L=progFront delete
231                        DrawRect 0,0,120,40
232                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,65535,0)
233                        DrawText 10,32,"I"
234                        SetDrawEnv fname="Times", fsize=22, fstyle= 1,textrgb= (0,0,0)
235                        DrawText 20,30,"="
236                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (65535,0,0)
237                        DrawText 35,32,"I"
238                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,0,65535)
239                        DrawText 95,32,"I"
240                        SetDrawEnv fname="Symbol", fsize=22, fstyle= 1,textrgb= (0,0,0)
241                        DrawText 52,32,"+"
242                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,0,0)
243                        DrawText 75,30,"f"
244                        SetDrawEnv fname="Times", fsize=22, fstyle= 1,textrgb= (0,0,0)
245                        DrawText 85,32,"*"
246                        break
247                case 2:
248                        //Multiply
249                        DrawAction/L=progFront delete
250                        DrawRect 0,0,120,40
251                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,65535,0)
252                        DrawText 10,32,"I"
253                        SetDrawEnv fname="Times", fsize=22, fstyle= 1,textrgb= (0,0,0)
254                        DrawText 20,30,"="
255                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (65535,0,0)
256                        DrawText 35,32,"I"
257                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,0,65535)
258                        DrawText 95,32,"I"
259                        SetDrawEnv fname="Symbol", fsize=22, fstyle= 1,textrgb= (0,0,0)
260                        DrawText 52,32,"*"
261                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,0,0)
262                        DrawText 66,30,"("
263                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,0,0)
264                        DrawText 75,30,"f"
265                        SetDrawEnv fname="Times", fsize=22, fstyle= 1,textrgb= (0,0,0)
266                        DrawText 85,32,"*"
267                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,0,0)                                 
268                        DrawText 105,30,")"
269                        break
270                case 3:
271                        //Divide
272                        DrawAction/L=progFront delete
273                        DrawRect 0,0,120,40
274                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,65535,0)
275                        DrawText 10,32,"I"
276                        SetDrawEnv fname="Times", fsize=22, fstyle= 1,textrgb= (0,0,0)
277                        DrawText 20,30,"="
278                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (65535,0,0)
279                        DrawText 35,32,"I"
280                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,0,65535)
281                        DrawText 95,32,"I"
282                        SetDrawEnv fname="Symbol", fsize=22, fstyle= 1,textrgb= (0,0,0)
283                        DrawText 52,32,"/"
284                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,0,0)
285                        DrawText 66,30,"("
286                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,0,0)
287                        DrawText 75,30,"f"
288                        SetDrawEnv fname="Times", fsize=22, fstyle= 1,textrgb= (0,0,0)
289                        DrawText 85,32,"*"
290                        SetDrawEnv fname="Times", fsize=22, fstyle= 2,textrgb= (0,0,0)                                 
291                        DrawText 105,30,")"
292                        break           
293        endswitch
294
295        SetActiveSubWindow DataArithmeticPanel
296       
297        return 0
298End
299
300
301//Must follow naming scheme to match buttons to popups
302//"Name_button" goes with "Name_popup"
303Function DM_LoadDataSetProc(ba) : ButtonControl
304        STRUCT WMButtonAction &ba
305
306
307        switch( ba.eventCode )
308                case 2: // mouse up
309                        // click code here
310                        String cmd = "A_LoadOneDDataWithName(\"\","+num2str(0)+")"
311                        Execute cmd
312               
313                        SVAR gLastFileName = root:packages:NIST:gLastFileName
314
315                        String windowName = ba.win
316                        String popupName = StringFromList(0,ba.ctrlName,"_")+"_popup"
317                       
318                        ControlUpdate/W=$(windowName) $(popupName)
319                        //instead of a simple controlUpdate, better to pop the menu to make sure that the other menus follow
320                        // convoluted method to find the right item and pop the menu.
321
322                        String list,folderStr
323                        Variable num
324                        folderStr = CleanupName(gLastFileName,0)
325                        list = DM_DataSetPopupList()
326                        num=WhichListItem(folderStr,list,";",0,0)
327                        if(num != -1)
328                                PopupMenu $(popupName),mode=num+1,win=$(windowName)
329                                ControlUpdate/W=$(windowName) $(popupName)
330                               
331                                if (cmpstr(popupName,"DS1_popup") ==  0)
332                                        //send fake mouse action to popup to update old name if
333                                        Struct WMPopupAction pa
334                                        pa.eventCode = 2                //fake mouse up
335                                        pa.win = windowName
336                                        pa.ctrlName = "DS1_popup"
337                                        DMDS_PopMenuProc(pa)
338                                endif                   
339                        endif
340                        break
341        endswitch
342       
343        return 0
344End
345
346//Must follow naming scheme to match buttons to popups
347//"Name_button" goes with "Name_popup"
348Function DMDA_LoadDataSetProc(ba) : ButtonControl
349        STRUCT WMButtonAction &ba
350
351
352        switch( ba.eventCode )
353                case 2: // mouse up
354                        // click code here
355                        String cmd = "A_LoadOneDDataWithName(\"\","+num2str(0)+")"
356                        Execute cmd
357               
358                        SVAR gLastFileName = root:packages:NIST:gLastFileName
359
360                        String windowName = ba.win
361                        String popupName = StringFromList(0,ba.ctrlName,"_")+"_popup"
362                       
363                        ControlUpdate/W=$(windowName) $(popupName)
364                        //instead of a simple controlUpdate, better to pop the menu to make sure that the other menus follow
365                        // convoluted method to find the right item and pop the menu.
366
367                        String list,folderStr
368                        Variable num
369                        folderStr = CleanupName(gLastFileName,0)
370                        list = DM_DataSetPopupList()
371                        num=WhichListItem(folderStr,list,";",0,0)
372                        if(num != -1)
373                                PopupMenu $(popupName),mode=num+1,win=$(windowName)
374                                ControlUpdate/W=$(windowName) $(popupName)
375               
376                        endif
377                        break
378        endswitch
379       
380        return 0
381End
382
383
384Function DMDS_PopMenuProc(pa) : PopupMenuControl
385        STRUCT WMPopupAction &pa
386       
387        switch( pa.eventCode )
388                case 2: // mouse up
389                        ControlInfo/W=$(pa.win) $(pa.ctrlName)
390                        SetVariable OldName_setvar,win=$(pa.win),value=_STR:S_Value
391//                      ControlInfo/W=$(pa.win) DSTabItem_0e
392//                      SVAR val = S_Value
393//                       
394//                      ControlInfo/W=$(pa.win) $(pa.ctrlName)
395//                      val = S_Value
396
397                        SetDataFolder root:                     
398                        break
399        endswitch
400
401        return 0
402End
403
404Function SetVarProc(sva) : SetVariableControl
405        STRUCT WMSetVariableAction &sva
406               
407        switch( sva.eventCode )
408                case 1: // mouse up
409                case 2: // Enter key
410                case 3: // Live update
411                                String sv = sva.sval
412                                if( strlen(sv) > 25 )
413                                        sv= sv[0,24]
414                                        SetVariable  $(sva.ctrlName),win=$(sva.win),value=_STR:sv
415                                        Beep
416                                endif
417                                break
418                endswitch
419        return 0
420End
421
422// is there a simpler way to do this? I don't think so.
423Function/S DM_DataSetPopupList()
424
425        String str=GetAList(4)
426
427        if(strlen(str)==0)
428                str = "No data loaded"
429        endif
430        str = SortList(str)
431       
432        return(str)
433End
434
435Function/S DMGetDSName(dsNum)
436        Variable dsNum
437       
438        String ctrlName
439        if (dsNum == 1)
440                ctrlName = "DS1_popup"
441        elseif (dsNum == 2)
442                ctrlName = "DS2_popup"
443        endif
444       
445        ControlInfo/W=DataManagementPanel $(ctrlName)
446
447        Return S_Value
448
449End
450
451// function to control the drawing of buttons in the TabControl on the main panel
452// Naming scheme for the buttons MUST be strictly adhered to... else buttons will
453// appear in odd places...
454// all buttons are named MainButton_NA where N is the tab number and A is the letter denoting
455// the button's position on that particular tab.
456// in this way, buttons will always be drawn correctly..
457//
458Function DATabsProc(name,tab)
459        String name
460        Variable tab
461       
462//      Print "name,number",name,tab
463        String ctrlList = ControlNameList("",";"),item="",nameStr=""
464        Variable num = ItemsinList(ctrlList,";"),ii,onTab
465        for(ii=0;ii<num;ii+=1)
466                //items all start w/"DSTabItem_"
467                item=StringFromList(ii, ctrlList ,";")
468                nameStr=item[0,9]
469                if(cmpstr(nameStr,"DATabItem_")==0)
470                        onTab = str2num(item[10])
471                        ControlInfo $item
472                        switch (V_flag)
473                                case 1:
474                                        Button $item,disable=(tab!=onTab)
475                                        break
476                                case 2:
477                                        CheckBox $item,disable=(tab!=onTab)
478                                        break
479                                case 3:
480                                        PopUpMenu       $item,disable=(tab!=onTab)
481                                        break
482                                case 5:
483                                        SetVariable     $item,disable=(tab!=onTab)
484                                        break
485                        endswitch
486                endif
487        endfor
488       
489        arithDisplayProc(tab)
490End
491
492
493Function DACalculateProc(ba) : ButtonControl
494        STRUCT WMButtonAction &ba
495               
496        //Which tab?
497        ControlInfo/W=$(ba.win) DATabs
498        print V_value
499        switch(V_Value)
500                case 0:
501                        print "Doing subtraction"
502                        //do subtraction
503                        ControlInfo/W=$(ba.win) DS1_popup
504                        String DS1 = S_Value
505                        ControlInfo/W=$(ba.win) DS2_popup
506                        String DS2 = S_Value
507                        ControlInfo/W=$(ba.win) DAResultName_sv
508                        String Resultname = S_Value
509                        ControlInfo/W=$(ba.win) DAScalefactor_sv
510                        Variable Scalefactor = V_Value
511                        SubtractDataSets(DS1,DS2,Scalefactor,Resultname)
512                case 1:
513                        //do addition
514                case 2:
515                        //do multiplication
516                case 3:
517                        //do division
518        endswitch
519        //Do calculation
520       
521       
522        //Sort out plot
523        AddDAPlot(3)
524
525End
526
527/////// Functions to do manipulations /////////
528
529Function RenameDataSet(dataSetFolder, newName)
530        String dataSetFolder
531        String newName
532       
533        String dataSetFolderParent,basestr,objName
534        Variable index = 0
535       
536        //Abuse ParseFilePath to get path without folder name
537        dataSetFolderParent = ParseFilePath(1,dataSetFolder,":",1,0)
538        //Abuse ParseFilePath to get basestr
539        basestr = ParseFilePath(0,dataSetFolder,":",1,0)
540
541        try
542                RenameDataFolder $(dataSetFolder) $(newName); AbortOnRTE
543       
544
545                SetDataFolder $(dataSetFolderParent+newName); AbortOnRTE
546                do
547                        objName = GetIndexedObjName("",1,index)
548                        if (strlen(objName) == 0)
549                                break
550                        endif
551                        Rename $(objName) $(ReplaceString(basestr,objName,newName))
552                        index+=1
553                while(1)
554                SetDataFolder root:
555        catch
556                Print "Aborted: " + num2str(V_AbortCode)
557                SetDataFolder root:
558        endtry
559End
560
561
562Function DuplicateDataSet(dataSetFolder, newName)
563        String dataSetFolder
564        String newName
565
566        String dataSetFolderParent,basestr,objName
567        Variable index = 0
568
569        //Abuse ParseFilePath to get path without folder name
570        dataSetFolderParent = ParseFilePath(1,dataSetFolder,":",1,0)
571        //Abuse ParseFilePath to get basestr
572        basestr = ParseFilePath(0,dataSetFolder,":",1,0)
573       
574        try
575                DuplicateDataFolder $(dataSetFolder) $(dataSetFolderParent+newName); AbortOnRTE
576
577                SetDataFolder $(dataSetFolderParent+newName); AbortOnRTE
578                do
579                        objName = GetIndexedObjName("",1,index)
580                        if (strlen(objName) == 0)
581                                break
582                        endif
583                        Rename $(objName) $(ReplaceString(basestr,objName,newName))
584                        index+=1
585                while(1)
586                SetDataFolder root:
587        catch
588                Print "Aborted: " + num2str(V_AbortCode)
589                SetDataFolder root:
590        endtry
591End
592
593
594// Subtract Set2 From Set1
595// Use Result_I = Set1_I - f*Set2_I
596Function SubtractDataSets(set1Name,set2Name,set2Scale,resultName)
597        String set1Name
598        String set2Name
599        Variable set2Scale
600        String resultName
601
602        String set1Path = "root:"+set1Name+":"
603        String set2Path = "root:"+set2Name+":"
604        String resultPath = "root:"+resultName+":"
605       
606        SetDataFolder root:
607        //Create folder for result
608        //UnloadDataSet(resultName)
609
610
611        //Do subtraction of I waves - including interpolation if necessary.
612        //Can we flag when interpolation was necessary?
613        //AJJ Nov 2009 - assuming no interpolation user beware!
614        Wave result_i = $(resultPath+resultName+"_i")
615        Wave set1_i = $(set1Path+set1Name+"_i")
616        Wave set2_i = $(set2Path+set2Name+"_i")
617        result_i =  set1_i - (set2Scale*set2_i)
618       
619        //Generate correct result Q wave - including interpolation if necessary
620       
621        //Calculate result error wave - can we produce corrected Q error?
622       
623        //Generate history string to record what was done?
624
625End
626
627// Add Set2 to Set1
628// Use Result_I = Set1_I + f*Set2_I
629Function AddDataSets(set1Folder,set2Folder,set2Scale,resultName)
630        String set1Folder
631        String set2Folder
632        Variable set2Scale
633        String resultName
634
635        //Create folder for result
636       
637        //Create result waves
638
639        //Do addition of I waves - including interpolation if necessary.
640        //Can we flag when interpolation was necessary?
641       
642        //Generate correct result Q wave - including interpolation if necessary
643       
644        //Calculate result error wave - can we produce corrected Q error?
645
646        //Generate history string to record what was done?
647
648End
649
650// Multiply Set1 by Set2
651// Use Result_I  = Set1_I * (f*Set2_I)
652Function MultiplyDataSets(set1Folder, set2Folder, set2Scale, resultName)
653        String set1Folder
654        String set2Folder
655        Variable set2Scale
656        String resultName
657
658        //Create folder for result
659       
660        //Create result waves
661
662        //Do multiplcation of I waves - including interpolation if necessary.
663        //Can we flag when interpolation was necessary?
664       
665        //Generate correct result Q wave - including interpolation if necessary
666       
667        //Calculate result error wave - can we produce corrected Q error?
668
669        //Generate history string to record what was done?
670
671End
672
673// Divide Set1 by Set2
674// Use Result_I  = Set1_I / (f*Set2_I)
675Function DivideDataSets(set1Folder, set2Folder, set2Scale, resultName)
676        String set1Folder
677        String set2Folder
678        Variable set2Scale
679        String resultName
680
681        //Create folder for result
682       
683        //Create result waves
684
685        //Do division of I waves - including interpolation if necessary.
686        //Can we flag when interpolation was necessary?
687       
688        //Generate correct result Q wave - including interpolation if necessary
689       
690        //Calculate result error wave - can we produce corrected Q error?
691       
692        //Generate history string to record what was done?
693
694End
695
696Function SaveDataSetToFile(folderName)
697        String folderName
698
699        //Do saving of data file.
700
701        //Include history string to record what was done?
702
703End
704
705
706//This will be hideous
707Function UnloadDataSet(folderName)
708        String folderName
709
710       
711End
Note: See TracBrowser for help on using the repository browser.