source: sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_Combine_1D.ipf @ 1079

Last change on this file since 1079 was 1079, checked in by srkline, 5 years ago

cleanup of TODO items in code, no noteworthy changes

prepare a test release package for the January startup of VSANS, not a general release (since no changes to SANS or USANS)

File size: 18.5 KB
Line 
1#pragma TextEncoding = "MacRoman"
2#pragma rtGlobals=3             // Use modern global access method and strict wave access.
3
4
5
6
7
8//
9// TODO:
10// x- make  the data folder list for the popup
11// x- make the data folder popup do the work of plotting
12//
13// x- (done by invoking the panel)
14//   x-make a button to show the default table, and set up dependencies to link to the graph display
15//
16// -- have an "active" data set to trim, or make duplicates for all of the data sets
17//
18// -- button to convert the points to strings that can be used and written to data files?
19// -- is this really necessary? if the save button is clicked, the strings are automatically generated
20//  -- but what if it's not? What if I do something else to send the strings to a protocol? or to a file?
21//
22// -- find a better way to be sure that the dependency does not generate errors if it is not
23//   properly killed
24//
25// -- help file
26//
27// x- larger panel
28//
29// x- error checking if the binType and the data present don't match. (test for failure)
30// -- do I really need the binType popup? How else would I know what data sets to plot/remove?
31//
32// x- table is continually duplicated
33// -- AutoPosition the windows next to each other
34// x- (different)(not ugly) color for the control bar so it's distinguishable from the regular data plot
35// x- "Done" button that kills the root:ToTrim folder (may need to kill the dependency first)
36//
37Proc V_CombineDataGraph()
38
39// this is the "initialization" step
40        NewDataFolder/O root:ToTrim
41       
42        DoWindow/F V_1D_Combine
43
44        Variable num,ii
45        String detStr
46               
47        if(V_flag==0)
48
49                Display /W=(277,526,879,1069)/N=V_1D_Combine /K=2
50
51                ControlBar 70
52                ModifyGraph cbRGB=(44000,44000,44000)
53               
54//              Button button2,pos={15,5},size={70,20},proc=V_Load_ITX_button,title="Load Data"
55//              Button button2,help={"Load an ITX file"}
56               
57//              PopupMenu popup1,pos={125,5},size={90,20},title="Data Folder"
58//              PopupMenu popup1,help={"data folder"}
59//              PopupMenu popup1,value= GetAList(4),proc=V_DataFolderPlotPop
60               
61                PopupMenu popup0,pos={15,5},size={70,20},title="Bin Type"
62                PopupMenu popup0,help={"binning type"}
63                PopupMenu popup0,value= ksBinTypeStr,proc=V_DataBinTypePlotPop
64
65                Button button3,pos={544.00,5},size={30.00,20.00},title="?"
66                Button button3,help={"help file for combining 1D data"}
67
68                CheckBox check0,pos={18.00,36.00},size={57.00,16.00},proc=V_Plot1D_LogCheckProc,title="Log Axes"
69                CheckBox check0,value= 1
70
71                Button AllQ,pos={100,36},size={70,20},proc=V_AllQ_Plot_1D_ButtonProc,title="All Q"
72                Button AllQ,help={"Show the full q-range of the dataset"}
73
74                Button button1,pos={225,36},size={100,20},proc=V_TrimWaves2StringButton,title="Wave 2 Str"
75                Button button1,help={"Convert the waves to global strings"}
76               
77//              Button button4,pos={388,36},size={90.00,20.00},title="Trim & Save"
78//              Button button4,help={"combine and save 1D data"},proc=V_SaveTrimmed_Button
79               
80                Button button0,pos={524,36},size={70,20},proc=V_DoneCombine1D_ButtonProc,title="Done"
81                Button button0,help={"Close the panel and kill the temporary folder"}
82                               
83                Legend/C/N=text0/J/X=72.00/Y=60.00
84
85        endif   
86       
87
88        //trust that the table is present? No, but don't overwrite the data in the waves
89        // unless any one of the three doesn't exist
90       
91        SetDataFolder root:Packages:NIST:VSANS:Globals:Protocols
92
93        if(exists("PanelNameW") == 0 || exists("Beg_pts") == 0 || exists("End_pts") == 0)
94                Make/O/T/N=(ItemsInList(ksPanelBinTypeList)) PanelNameW
95                Make/O/D/N=(ItemsInList(ksPanelBinTypeList)) Beg_pts
96                Make/O/D/N=(ItemsInList(ksPanelBinTypeList)) End_pts
97       
98                num = ItemsInList(ksPanelBinTypeList)
99                ii=0
100                do
101                        detStr = StringFromList(ii, ksPanelBinTypeList)
102                        Beg_pts[ii]  = NumberByKey(detStr, ksBinTrimBegDefault,"=",";")
103                        End_pts[ii] = NumberByKey(detStr, ksBinTrimEndDefault,"=",";")
104                        PanelNameW[ii] = detStr
105                        ii += 1
106                while(ii<num)
107               
108        endif
109        // now make sure that the table is present
110        DoWindow/F V_TrimPointsTable
111
112        if(V_flag==0)
113                Edit/K=0/N=V_TrimPointsTable PanelNameW,Beg_pts,End_pts         
114        endif
115       
116        // last, set up the dependency
117        Make/O/D/N=1 trimUpdate
118        trimUpdate := V_TrimTestUpdate(Beg_pts, End_pts)
119       
120       
121        SetDataFolder root:
122               
123End
124
125
126// function that is a simple dependency, and updates the trimmed waves
127// that are displayed
128//
129// does not actually modify the real data, makes a copy, and is only a visual
130//
131//
132Function V_TrimTestUpdate(Beg_pts, End_pts)
133        Wave Beg_pts,End_pts
134       
135        // trim the data displayed
136        // do this by setting the iBin values to NaN, so it won't display
137        // won't hurt to set twice...
138       
139        Wave/T panelStr = root:Packages:NIST:VSANS:Globals:Protocols:PanelNameW
140        Wave begW = root:Packages:NIST:VSANS:Globals:Protocols:Beg_pts
141        Wave endW = root:Packages:NIST:VSANS:Globals:Protocols:End_pts
142
143        // in case the dependency is still active, and the folder was killed
144        if(DataFolderExists("root:ToTrim") == 0)
145                return(0)
146        endif
147       
148//      SetDataFolder root:ToTrim
149//      ControlInfo/W=V_1D_Combine popup1
150//      String dataFldrStr = S_Value
151       
152        SVAR curDispType = root:Packages:NIST:VSANS:Globals:gCurDispType
153        String dataFldrStr = "root:Packages:NIST:VSANS:"+curDispType
154       
155        Variable num,ii,p1,p2
156        String str,detStr
157        num=numpnts(panelStr)
158       
159        for(ii=0;ii<num;ii+=1)
160                detStr = panelStr[ii]
161                Wave/Z iw = $("root:ToTrim:iBin_qxqy_"+detStr+"_trim")
162                Wave/Z iw_orig = $(dataFldrStr+":iBin_qxqy_"+detStr)
163//              Wave/Z iw = $("iBin_qxqy_"+detStr)
164//              Wave/Z ew = $("eBin_qxqy_"+detStr)
165                if(WaveExists(iw) && WaveExists(iw_orig))
166                       
167//                      DeletePoints 0,nBeg, qw,iw,ew
168                        // start fresh
169                        iw = iw_orig
170                       
171                        p1 = begW[ii]
172                        iw[0,p1-1] = NaN
173                               
174                        Variable npt
175                        npt = numpnts(iw)
176//                      DeletePoints npt-nEnd,nEnd, qw,iw,ew
177                        p2 = EndW[ii]
178                        iw[npt-p2,npt-1] = NaN
179                       
180                endif
181               
182        endfor
183       
184        SetDataFolder root:
185
186        return(0)
187End
188
189//
190// x- verify that the proper waves exist for the binning type
191//
192// x- the logic here is wrong. if the ToTrim folder is empty (As on startup)
193//  then the waves are always missing - and the function returns an error - every time
194//
195// now works with the "current" data that is displayed, rather than relying on
196// a lot of user input regarding the details of the saved data
197//
198Function V_DataBinTypePlotPop(ctrlName,popNum,popStr) : PopupMenuControl
199        String ctrlName
200        Variable popNum // which item is currently selected (1-based)
201        String popStr           // contents of current popup item as string
202
203
204        String str,winStr="V_1D_Combine"
205        Variable binType,num,ii,err
206
207        binType = V_BinTypeStr2Num(popStr)
208       
209       
210        //  x- need to update this to make sure that the data waves are present before plotting. This
211        //    currently looks in the ToTrim folder, but the binning could be wrong in the data folder
212        //    and will be an error...
213       
214        //dataType now needs to be the full path to the folder
215        // Plot the "real" data. data copy to trim will be plotted later
216        //
217        SVAR dispType = root:Packages:NIST:VSANS:Globals:gCurDispType
218
219
220// dispatch based on the string, not on the number of selection in the pop string
221        V_QBinAllPanels_Circular(dispType,binType)
222
223        String workTypeStr
224        workTypeStr = "root:Packages:NIST:VSANS:"+dispType
225       
226
227//      dataType = "root:"+popStr
228//     
229//      //remove EVERYTHING from the graph, no matter what
230        String type,list,item
231//      list = TraceNameList(winStr,";",1)
232//      for(ii=0;ii<ItemsInList(list);ii+=1)
233//              item = StringFromList(ii, list, ";")
234////            CheckDisplayed/W=$winStr $(item)
235////            if(V_flag==1)
236//                      RemoveFromGraph/Z/W=$winStr $(item)
237////            endif
238//      endfor 
239//     
240       
241        sprintf str,"(\"%s\",%d,\"%s\")",workTypeStr,binType,winStr
242
243        Execute ("V_Back_IQ_Graph"+str)
244        Execute ("V_Middle_IQ_Graph"+str)
245        Execute ("V_Front_IQ_Graph"+str)
246
247        ModifyGraph marker=8,opaque=1,msize=3           //make the traces open white circles
248
249
250        NewDataFolder/O root:ToTrim
251       
252        //remove all of the "toTrim" data from the graph, if it's there
253        SetDataFolder root:ToTrim
254        for(ii=0;ii<ItemsInList(ksPanelBinTypeList);ii+=1)
255                type = StringFromList(ii, ksPanelBinTypeList, ";")
256                CheckDisplayed/W=$winStr $("iBin_qxqy_"+type+"_trim")
257                if(V_flag==1)
258                        RemoveFromGraph/W=$winStr $("iBin_qxqy_"+type+"_trim")
259                endif
260        endfor 
261        SetDataFolder root:
262
263
264        //then kill the data folder, so it can be duplicated
265       
266//
267//      // duplicate all of the data into the new folder
268        SetDataFolder $workTypeStr
269        list = WaveList("*",";","")             //must be in the correct data folder
270        SetDataFolder root:
271//      Print list     
272        num = ItemsInList(list)
273        for(ii=0;ii<num;ii+=1)
274                str = StringFromList(ii,list)
275                Duplicate/O $(workTypeStr+":"+str), $("root:ToTrim:"+str+"_trim")
276        endfor
277       
278//      // be sure that the data is present in the ToTrim folder before trying to plot
279//      err = V_TrimWavesExist(binType)
280//      if(err)
281//              DoAlert 0,"wrong bin type selected"
282//              return(0)
283//      endif
284       
285       
286        // plot the linked data
287        sprintf str,"(\"%s\",%d,\"%s\")","root:ToTrim",binType,winStr
288
289        Execute ("V_Back_IQ_Graph_trim"+str)
290        Execute ("V_Middle_IQ_Graph_trim"+str)
291        Execute ("V_Front_IQ_Graph_trim"+str)
292        // and link the data to the table with a dependency?
293//      done in the panel macro?
294       
295        // last, force the dependency to update so that the trimmed points are shown
296        Wave w = root:Packages:NIST:VSANS:Globals:Protocols:Beg_pts
297        w[0] += 1
298        w[0] -= 1
299       
300       
301        return(0)       
302End
303
304
305
306//
307// x- verify that the proper waves exist for the binning type
308//
309// x- the logic here is wrong. if the ToTrim folder is empty (As on startup)
310//  then the waves are always missing - and the function returns an error - every time
311//
312// currently unused, in favor of using the current data rather than saved itx data
313//
314Function V_DataFolderPlotPop(ctrlName,popNum,popStr) : PopupMenuControl
315        String ctrlName
316        Variable popNum // which item is currently selected (1-based)
317        String popStr           // contents of current popup item as string
318
319
320        String str,winStr="V_1D_Combine",dataType
321        Variable binType,num,ii
322        ControlInfo popup0
323        binType = V_BinTypeStr2Num(S_Value)
324       
325       
326        //  x- need to update this to make sure that the data waves are present before plotting. This
327        //    currently looks in the ToTrim folder, but the binning could be wrong in the data folder
328        //    and will be an error...
329       
330        // be sure that the data is present in the ToTrim folder before trying to plot
331        Variable err = V_itxWavesExist(popStr,binType)
332        if(err)
333                DoAlert 0,"wrong bin type selected"
334                return(0)
335        endif
336       
337       
338        //dataType now needs to be the full path to the folder
339        // Plot the "real" data. data copy to trim will be plotted later
340        //
341        dataType = "root:"+popStr
342       
343        //remove EVERYTHING from the graph, no matter what
344        String type,list,item
345        list = TraceNameList(winStr,";",1)
346        for(ii=0;ii<ItemsInList(list);ii+=1)
347                item = StringFromList(ii, list, ";")
348//              CheckDisplayed/W=$winStr $(item)
349//              if(V_flag==1)
350                        RemoveFromGraph/Z/W=$winStr $(item)
351//              endif
352        endfor 
353       
354       
355        sprintf str,"(\"%s\",%d,\"%s\")",dataType,binType,winStr
356
357        Execute ("V_Back_IQ_Graph"+str)
358        Execute ("V_Middle_IQ_Graph"+str)
359        Execute ("V_Front_IQ_Graph"+str)
360
361        ModifyGraph marker=8,opaque=1,msize=3           //make the traces open white circles
362
363
364        NewDataFolder/O root:ToTrim
365       
366        //remove all of the "toTrim" data from the graph, if it's there
367        SetDataFolder root:ToTrim
368        for(ii=0;ii<ItemsInList(ksPanelBinTypeList);ii+=1)
369                type = StringFromList(ii, ksPanelBinTypeList, ";")
370                CheckDisplayed/W=$winStr $("iBin_qxqy_"+type+"_trim")
371                if(V_flag==1)
372                        RemoveFromGraph/W=$winStr $("iBin_qxqy_"+type+"_trim")
373                endif
374        endfor 
375        SetDataFolder root:
376
377
378        //then kill the data folder, so it can be duplicated
379       
380//
381//      // duplicate all of the data into the new folder
382        SetDataFolder $dataType
383        list = WaveList("*",";","")             //must be in the correct data folder
384        SetDataFolder root:
385//      Print list     
386        num = ItemsInList(list)
387        for(ii=0;ii<num;ii+=1)
388                str = StringFromList(ii,list)
389                Duplicate/O $(dataType+":"+str), $("root:ToTrim:"+str+"_trim")
390        endfor
391       
392        // be sure that the data is present in the ToTrim folder before trying to plot
393        err = V_TrimWavesExist(binType)
394        if(err)
395                DoAlert 0,"wrong bin type selected"
396                return(0)
397        endif
398       
399       
400        // plot the linked data
401        sprintf str,"(\"%s\",%d,\"%s\")","root:ToTrim",binType,winStr
402
403        Execute ("V_Back_IQ_Graph_trim"+str)
404        Execute ("V_Middle_IQ_Graph_trim"+str)
405        Execute ("V_Front_IQ_Graph_trim"+str)
406        // and link the data to the table with a dependency?
407//      done in the panel macro?
408       
409        // last, force the dependency to update so that the trimmed points are shown
410        Wave w = root:Packages:NIST:VSANS:Globals:Protocols:Beg_pts
411        w[0] += 1
412        w[0] -= 1
413       
414       
415        return(0)       
416End
417
418
419
420// kill the dependency,
421// kill the panel, then the associated ToTrim folder
422// do not kill the beg/end waves
423//
424Function V_DoneCombine1D_ButtonProc(ctrlName) : ButtonControl
425        String ctrlName
426       
427        Wave trimUpdate = root:Packages:NIST:VSANS:Globals:Protocols:trimUpdate
428        trimUpdate = 1          //kills the dependency
429        DoWindow/K V_1D_Combine
430       
431        KillDataFolder/Z root:ToTrim
432       
433        return(0)
434End
435
436// TODO
437// -- verify that this works for all binning cases
438// -- see V_Trim1DDataStr to see if they can be combined
439//
440Function V_SaveTrimmed_Button(ctrlName) : ButtonControl
441        String ctrlName
442       
443        String detListStr,dataType,str
444        Variable bintype,num,ii
445
446        ControlInfo popup0
447        binType = V_BinTypeStr2Num(S_Value)
448       
449       
450        if(binType == 1)
451                detListStr = ksBinType1
452        endif
453        if(binType == 2)
454                detListStr = ksBinType2
455        endif
456        if(binType == 3)
457                detListStr = ksBinType3
458        endif
459        if(binType == 4)
460                detListStr = ksBinType4
461        endif
462        if(strlen(detListStr)==0)
463                DoAlert 0,"error in V_SaveTrimmed_Button"
464                return(0)
465        endif
466
467// set the global strings
468        V_TrimWaves2String()            //in case the button wasn't clicked
469        SVAR gBegPtsStr=root:Packages:NIST:VSANS:Globals:Protocols:gBegPtsStr
470        SVAR gEndPtsStr=root:Packages:NIST:VSANS:Globals:Protocols:gEndPtsStr
471
472// get a fresh copy of the data
473// duplicate all of the data into the new folder
474        ControlInfo popup1
475        dataType = "root:"+S_Value
476
477        SetDataFolder $dataType
478        String list = WaveList("*",";","")              //must be in the correct data folder
479        SetDataFolder root:
480//      Print list     
481        num = ItemsInList(list)
482        for(ii=0;ii<num;ii+=1)
483                str = StringFromList(ii,list)
484                Duplicate/O $(dataType+":"+str), $("root:ToTrim:"+str+"_trim")
485        endfor
486
487       
488// trim each data set
489        Variable nBeg,nEnd,npt
490        String detstr
491       
492        SetDataFolder root:ToTrim
493        num = ItemsInList(detListStr)
494        for(ii=0;ii<num;ii+=1)
495                detStr = StringFromList(ii, detListStr)
496                nBeg = NumberByKey(detStr, gBegPtsStr,"=",";")
497                nEnd = NumberByKey(detStr, gEndPtsStr,"=",";")
498               
499//              V_TrimOneSet(folderStr,detStr,nBeg,nEnd)
500                Wave/Z qw = $("qBin_qxqy_"+detStr+"_trim")
501                Wave/Z iw = $("iBin_qxqy_"+detStr+"_trim")
502                Wave/Z ew = $("eBin_qxqy_"+detStr+"_trim")
503
504                DeletePoints 0,nBeg, qw,iw,ew
505
506                npt = numpnts(qw)
507                DeletePoints npt-nEnd,nEnd, qw,iw,ew
508//             
509        endfor
510
511
512// remove Q=0 from "B" if it's present
513        SetDataFolder root:ToTrim
514        WAVE/Z qBin = qBin_qxqy_B_trim
515        WAVE/Z iBin = iBin_qxqy_B_trim
516        WAVE/Z eBin = eBin_qxqy_B_trim
517//      WAVE/Z nBin = nBin_qxqy_B_trim
518//      WAVE/Z iBin2 = iBin2_qxqy_B_trim
519
520        if(qBin[0] == 0)
521                DeletePoints 0, 1, qBin,iBin,eBin//,nBin,iBin2
522        endif
523
524       
525// concatenate
526        V_1DConcatenate("root:","ToTrim","_trim",binType)
527
528// sort the waves - concatenation creates tmp_q, tmp_i, tmp_s
529// so this call will work (doesn't need the "_trim" tag)
530        V_TmpSort1D("root:","ToTrim")
531
532// write out the data to disk
533
534        Execute "V_GetNameForSave()"
535        SVAR newName = root:saveName
536        String saveName = newName
537
538        //will write out the tmp_q, tmp_i, tmp_s waves
539        V_Write1DData("root:","ToTrim",saveName)                //don't pass the full path, just the name
540
541       
542// put a fresh copy of the data back into the folder since the data was actually trimmed
543// duplicate all of the data into the new folder
544        ControlInfo popup1
545        dataType = "root:"+S_Value
546
547        SetDataFolder $dataType
548        list = WaveList("*",";","")             //must be in the correct data folder
549        SetDataFolder root:
550//      Print list     
551        num = ItemsInList(list)
552        for(ii=0;ii<num;ii+=1)
553                str = StringFromList(ii,list)
554                Duplicate/O $(dataType+":"+str), $("root:ToTrim:"+str+"_trim")
555        endfor
556
557
558        SetDataFolder root:
559       
560        return(0)
561End
562
563
564
565//
566// dialog to select and load an itx format data file
567//
568Function V_Load_ITX_Button(ctrlName) : ButtonControl
569        String ctrlName
570       
571        Execute "V_Load_Data_ITX()"
572       
573        return(0)
574End
575
576
577// TODO
578// -- document
579Function V_TrimWaves2StringButton(ctrlName) : ButtonControl
580        String ctrlName
581       
582        V_TrimWaves2String()
583
584        return(0)
585End
586
587// for each of the binning types, be sure that the corresponding waves in the
588// root:ToTrim folder actually do exist.
589// return 0 for OK, 1 if error
590Function V_TrimWavesExist(binType)
591        Variable binType
592       
593        String binStr="",str
594        Variable num,ii
595       
596        if(binType == 1)
597                binStr = ksBinType1
598        endif
599        if(binType == 2)
600                binStr = ksBinType2
601        endif
602        if(binType == 3)
603                binStr = ksBinType3
604        endif
605        if(binType == 4)
606                binStr = ksBinType4
607        endif
608       
609        num = ItemsInList(binStr)
610        for(ii=0;ii<num;ii+=1)
611                str = StringFromList(ii,binStr)
612                if(exists("root:ToTrim:iBin_qxqy_"+Str+"_trim") == 0)           // not in use = error
613                        return(1)
614                endif
615        endfor
616       
617        return(0)               //everything checked out OK, no error
618
619end
620
621// for each of the binning types, be sure that the corresponding waves in the
622// root:ToTrim folder actually do exist.
623// return 0 for OK, 1 if error
624Function V_itxWavesExist(folderStr,binType)
625        String folderStr
626        Variable binType
627       
628        String binStr="",str
629        Variable num,ii
630       
631        if(binType == 1)
632                binStr = ksBinType1
633        endif
634        if(binType == 2)
635                binStr = ksBinType2
636        endif
637        if(binType == 3)
638                binStr = ksBinType3
639        endif
640        if(binType == 4)
641                binStr = ksBinType4
642        endif
643       
644        num = ItemsInList(binStr)
645        for(ii=0;ii<num;ii+=1)
646                str = StringFromList(ii,binStr)
647                if(exists("root:"+folderStr+":iBin_qxqy_"+Str) == 0)            // not in use = error
648                        return(1)
649                endif
650        endfor
651       
652        return(0)               //everything checked out OK, no error
653
654end
655
656
657
658//
659// take the waves, and convert to strings that can be added to the protocol
660//
661//
662// x- get the variables out of root:, and move it to Protocols
663// x- get the waves out of root:, and move it to Protocols
664// x- be sure that the variables are initialized (done in main initialization
665// x- link this to the panel?
666//
667Function V_TrimWaves2String()
668
669
670        SVAR gBegPtsStr=root:Packages:NIST:VSANS:Globals:Protocols:gBegPtsStr
671        SVAR gEndPtsStr=root:Packages:NIST:VSANS:Globals:Protocols:gEndPtsStr
672
673        Wave/T PanelNameW = root:Packages:NIST:VSANS:Globals:Protocols:PanelNameW
674        Wave Beg_pts = root:Packages:NIST:VSANS:Globals:Protocols:Beg_pts
675        Wave End_pts = root:Packages:NIST:VSANS:Globals:Protocols:End_pts
676       
677// ksPanelBinTypeList = "B;FT;FB;FL;FR;MT;MB;ML;MR;FTB;FLR;MTB;MLR;FLRTB;MLRTB;"
678// ksBinTrimBegDefault = "B=5;FT=6;FB=6;FL=6;FR=6;MT=6;MB=6;ML=6;MR=6;FTB=7;FLR=7;MTB=7;MLR=7;FLRTB=8;MLRTB=8;"
679// ksBinTrimEndDefault
680
681        // wipe out the "old" global strings
682        gBegPtsStr = ksBinTrimBegDefault
683        gEndPtsStr = ksBinTrimEndDefault
684
685        Variable num, ii,nBeg,nEnd
686        String item,panelStr
687       
688        num = numpnts(PanelNameW)
689        for(ii=0;ii<num;ii+=1)
690                panelStr = PanelNameW[ii]
691                gBegPtsStr = ReplaceNumberByKey(panelStr, gBegPtsStr, Beg_pts[ii],"=",";")
692                gEndPtsStr = ReplaceNumberByKey(panelStr, gEndPtsStr, End_pts[ii],"=",";")
693        endfor
694
695        return(0)
696End
697
698
Note: See TracBrowser for help on using the repository browser.