source: sans/Dev/branches/nxcansas_writer/NCNR_User_Procedures/Reduction/USANS/COR_Graph.ipf @ 1160

Last change on this file since 1160 was 1160, checked in by krzywon, 3 years ago
  • Property eol-style set to native
  • Property svn:executable set to *
File size: 18.1 KB
Line 
1#pragma rtGlobals=1             // Use modern global access method.
2#pragma Version=2.20
3#pragma IgorVersion=6.1
4
5////////////////////////////
6// 101001 Vers. 1
7//
8// procedures to plot the sma, emp, and cor data
9// - user interaction is through control bar on COR_Graph
10// - provides user with feedback about peak angle, transmissions
11// - asks for information about BKG and EMP levels
12// - asks for sample thickness
13// - interactively selects range of data to save (and type)
14// - dispatches to routines to determine transmissions and correct the data
15// - dispatches to save routines
16//
17/////////////////////////////
18
19
20//plot all that is available in the root:Graph folder
21// no distinction as to what the status of the data really is
22// "Clr" buttons on the USANS_Panel will clear the graph..
23//
24Function DoCORGraph()
25
26        SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder
27       
28        DoWindow/F COR_Graph
29        if(V_flag==0)
30                //draw the blank window and the control bar
31                Display /W=(5,42,450,550) /K=1
32                DoWindow/C COR_Graph
33                ControlBar 150
34                SetVariable gTransWide,pos={210,12},size={135,15},title="Trans - Wide",format="%5.4f"
35                SetVariable gTransWide,help={"Average counts on transmssion detector at wide angles"}
36                SetVariable gTransWide,limits={0,1,0.001},value= $(USANSFolder+":Globals:MainPanel:gTransWide")
37                SetVariable gTransRock,pos={210,27},size={135,15},title="Trans - Rock",format="%5.4f"
38                SetVariable gTransRock,help={"Transmission counts at the zero-angle peak"}
39                SetVariable gTransRock,limits={0,1,0.001},value= $(USANSFolder+":Globals:MainPanel:gTransRock")
40                SetVariable gEmpCts,pos={210,42},size={135,15},title="EMP Level",format="%7.4f"
41                SetVariable gEmpCts,limits={-Inf,Inf,0.1},value= $(USANSFolder+":Globals:MainPanel:gEmpCts")
42                SetVariable gEmpCts,help={"High q limit of empty cell scattering normalized to 1.0e6 monitor counts"}
43                SetVariable gBkgCts,pos={210,57},size={135,15},title="BKG Level",format="%7.4f"
44                SetVariable gBkgCts,limits={-Inf,Inf,0.1},value= $(USANSFolder+":Globals:MainPanel:gBkgCts")
45                SetVariable gBkgCts,help={"Background scattering level normalized to 1.0e6 monitor counts"}
46                SetVariable gThick,pos={210,72},size={135,15},title="SAM Thick(cm)",format="%5.4f"
47                SetVariable gThick,help={"Thickness of the sample in centimeters"}
48                SetVariable gThick,limits={0,5,0.01},value= $(USANSFolder+":Globals:MainPanel:gThick")
49                Button UpdateButton,pos={125,15},size={70,40},proc=UpdateButtonProc,title="Update\rTrans"
50                Button UpdateButton,help={"Updates both the wide and rocking transmission values based on the raw data files"}
51                Button CorrectButton,pos={125,60},size={70,40},proc=CorrectButtonProc,title="Correct\rData"
52                Button CorrectButton,help={"Corrects the sample data by subtracting empty cell and backgrond scattering"}
53                Button SaveDataButton,pos={355,3},size={85,20},proc=SaveButtonProc,title="Save Data..."
54                Button SaveDataButton,help={"Saves the selected data type to disk in ASCII format"}
55                CheckBox useCrsrCheck,pos={360,27},size={119,14},proc=UseCrsrCheckProc,title="Use Cursors?"
56                CheckBox useCrsrCheck,value= 0
57                CheckBox useCrsrCheck,help={"Adds cursors to the datset to select the range of data points to save"}
58                CheckBox CORCheck,pos={380,44},size={40,14},title="COR",value=1,proc=TypeToggleCheckProc,mode=1
59                CheckBox CORCheck,help={"Selects COR data as the saved type"}
60                CheckBox SAMCheck,pos={380,60},size={40,14},title="SAM",value=0,proc=TypeToggleCheckProc,mode=1
61                CheckBox SAMCheck,help={"Selects SAM data s the saved type"}
62                CheckBox EMPCheck,pos={380,76},size={40,14},title="EMP",value= 0,proc=TypeToggleCheckProc,mode=1
63                CheckBox EMPCheck,help={"Selects EMP data as the saved type"}
64                Button qpkButton,pos={12,61},size={90,20},proc=QpkButtonProc,title="Change Qpk"
65                Button qpkButton,help={"Use this to override the automatically determined peak locations in SAM or EMP datasets"}
66                ValDisplay valdispSAM,pos={10,15},size={100,14},title="Qpk SAM",format="%1.3f"
67                ValDisplay valdispSAM,limits={0,0,0},barmisc={0,1000},value=QpkFromNote("SAM")
68                ValDisplay valdispSAM,help={"Displays the peak angle the raw SAM data, determined automatically"}
69                ValDisplay valdispEMP,pos={10,36},size={100,14},title="Qpk EMP",format="%1.3f"
70                ValDisplay valdispEMP,limits={0,0,0},barmisc={0,1000},value=QpkFromNote("EMP")
71                ValDisplay valdispEMP,help={"Displays the peak angle the raw EMP data, determined automatically"}
72       
73                CheckBox check0 title="Log X-axis",proc=LogLinToggleCheckProc
74                CheckBox check0 pos={12,100},value=0,mode=0
75                SetVariable setvar0,pos={210,100},size={120,20},title="Trock/Twide",format="%5.4f"
76                SetVariable setVar0,help={"fraction of unscattered neutrons"}
77                SetVariable setVar0,limits={0,2,0},value= $(USANSFolder+":Globals:MainPanel:gTransRatio")
78               
79                Legend
80        Endif
81        // add each data type to the graph, if possible (each checks on its own)
82        //SAM
83        GraphSAM()
84        //EMP
85        GraphEMP()
86        //COR
87        GraphCOR()
88        //EMP and BKG levels
89        GraphEMPBKGLevels()
90       
91        ControlUpdate/A/W=COR_Graph
92       
93        ModifyGraph log(left)=1,mirror=2,grid=1,standoff=0
94        ModifyGraph tickUnit=1
95        Label left "(Counts/sec)/(MON)*10\\S6\\M"
96        Label bottom "q (A\\S-1\\M)"
97       
98        return(0)
99End
100
101// add SAM data to the graph if it exists and is not already on the graph
102//
103Function GraphSAM()
104
105        SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder
106
107        //is it already on the graph?
108        SetDataFolder $(USANSFolder+":Graph")
109        String list=""
110        list = Wavelist("DetCts_SAM*",";","WIN:COR_Graph")
111        if(strlen(list)!=0)
112                //Print "SAM already on graph"
113                SetDataFolder root:
114                return(0)
115        Endif
116        //append the data if it exists
117        If(waveExists($"DetCts_SAM")==1)
118                DoWindow/F COR_Graph
119                AppendToGraph DetCts_SAM vs Qvals_SAM
120                ModifyGraph rgb(DetCts_SAM)=(1,12815,52428)
121                ModifyGraph mode(DetCts_SAM)=3,marker(DetCts_SAM)=19,msize(DetCts_SAM)=2
122                ModifyGraph tickUnit=1
123                ErrorBars/T=0 DetCts_SAM Y,wave=(ErrDetCts_SAM,ErrDetCts_SAM)
124        endif
125        SetDataFolder root:
126End
127
128// add EMP data to the graph if it exists and is not already on the graph
129//
130Function GraphEMP()
131
132        SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder
133
134        SetDataFolder $(USANSFolder+":Graph")
135        String list=""
136        list = Wavelist("DetCts_EMP*",";","WIN:COR_Graph")
137        if(strlen(list)!=0)
138        //      Print "EMP already on graph"
139                SetDataFolder root:
140                return(0)
141        Endif
142        //append the data if it exists
143        If(waveExists($"DetCts_EMP")==1)
144                DoWindow/F COR_Graph
145                AppendToGraph DetCts_EMP vs Qvals_EMP
146                ModifyGraph msize(DetCts_EMP)=2,rgb(DetCts_EMP)=(1,39321,19939)
147                ModifyGraph mode(DetCts_EMP)=3,marker(DetCts_EMP)=19
148                ModifyGraph tickUnit=1
149                ErrorBars/T=0 DetCts_EMP Y,wave=(ErrDetCts_EMP,ErrDetCts_EMP)
150        endif
151        SetDataFolder root:
152        return(0)
153End
154
155// add COR data to the graph if it exists and is not already on the graph
156//
157Function GraphCOR()
158        SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder
159
160        SetDataFolder $(USANSFolder+":Graph")
161       
162        String list=""
163        list = Wavelist("DetCts_COR*",";","WIN:COR_Graph")
164        if(strlen(list)!=0)
165        //      Print "COR already on graph"
166                SetDataFolder root:
167                return(0)
168        Endif
169        //append the data if it exists
170        If(waveExists($"DetCts_COR")==1)
171                DoWindow/F COR_Graph
172                AppendToGraph DetCts_COR vs Qvals_COR
173                ModifyGraph msize(DetCts_COR)=2,rgb(DetCts_COR)=(52428,34958,1)
174                ModifyGraph mode(DetCts_COR)=3,marker(DetCts_COR)=19
175                ModifyGraph tickUnit=1
176                ErrorBars/T=0 DetCts_COR Y,wave=(ErrDetCts_COR,ErrDetCts_COR)
177        endif
178
179        SetDataFolder root:
180        return(0)
181End
182
183// add horizoontal lines for the background and empty cell levels
184Function GraphEMPBKGLevels()
185
186        SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder
187
188        //if the data is on the graph, remove them and replot, to properly reset the scale
189        DoUpdate
190        String list = TraceNameList("COR_Graph",";",1)
191        //Print list
192        DoWindow/F COR_Graph
193        if(stringmatch(list,"*empLevel*")==1)
194                //remove
195                RemoveFromGraph empLevel,bkgLevel
196        Endif
197        DoUpdate
198        AppendToGraph $(USANSFolder+":EMP:EMPLevel"),$(USANSFolder+":BKG:BKGLevel")
199        ModifyGraph rgb(empLevel)=(0,0,0),lsize(bkgLevel)=2,rgb(bkgLevel)=(52428,1,1)
200        ModifyGraph lsize(empLevel)=2,offset={0,0}
201        ModifyGraph tickUnit=1
202        GetAxis/W=COR_Graph/Q bottom
203        SetScale/I x V_min,V_max,"",$(USANSFolder+":EMP:EMPLevel"),$(USANSFolder+":BKG:BKGLevel")
204        return(0)
205End
206
207// polls the control bar for proper selections of SavePath
208// checks for selected dataset from radio buttons
209// obtains the poin numbers from the cursors, if selected
210// dispatches to save routine
211//
212Function SaveButtonProc(ctrlName) : ButtonControl
213        String ctrlName
214
215        SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder
216        NVAR useXMLOutput = root:Packages:NIST:gXML_Write
217        NVAR useNXcanSASOutput = root:Packages:NIST:gNXcanSAS_Write
218
219       
220        PathInfo/S savePathName
221        if(V_Flag==0)
222                DoAlert 0,"Pick a \"SavePath...\"\rNo data file has been written"
223                return(1)
224        Endif
225       
226        String type=""
227        Variable useCrsrs=0,ptA=0,ptB=0
228       
229        //check for data save type (controlled by radio buttons)
230        NVAR gRadioVal=$(USANSFolder+":Globals:MainPanel:gTypeCheck")           //1=COR,2=SAM,3=EMP
231        switch(gRadioVal)
232                case 1: //COR
233                        type="COR"
234                        break                           
235                case 2: //SAM
236                        type="SAM"
237                        break
238                case 3: //EMP
239                        type="EMP"
240                        break   
241                default:
242                        DoAlert 0,"No Radio button selected\rNo data file written"
243                        return(1)
244        endswitch
245       
246        //check for data save between cursors
247        ControlInfo UseCrsrCheck
248        useCrsrs = V_Value              //1 if checked
249        //if so, read off the point range (cursors should be on the same wave as the save type)
250        if(useCrsrs)
251                Wave xwave=$(USANSFolder+":Graph:Qvals_"+type)
252                ptA=x2pnt(xwave,xcsr(A))
253                ptB=x2pnt(xwave,xcsr(B))
254                if(ptA>ptB)
255                        ptA=x2pnt(xwave,xcsr(B))
256                        ptB=x2pnt(xwave,xcsr(A))
257                endif
258                ptA=trunc(ptA)  //make sure it's integer
259                ptB=trunc(ptB)
260                //Print ptA,ptB
261        endif
262       
263        //fill in the blanks and dispatch to save routine
264        if (useXMLOutput == 1)
265                WriteXMLUSANSWaves(type,"",ptA,ptB,1)
266        else if (useNXcanSASOutput == 1)
267                WriteUSANSNXCanSAS(type,"",ptA,ptB,1)
268        else
269                WriteUSANSWaves(type,"",ptA,ptB,1)
270        endif
271       
272        return(0)
273End
274
275//show/hide cursors depending on the checkbox selection
276//put cursors on the selected save data type
277Function UseCrsrCheckProc(ctrlName,checked) : CheckBoxControl
278        String ctrlName
279        Variable checked
280       
281        SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder
282       
283        NVAR gRadioVal=$(USANSFolder+":Globals:MainPanel:gTypeCheck")           //1=COR,2=SAM,3=EMP
284        String type=""
285        switch(gRadioVal)
286                case 1: //COR
287                        type="COR"
288                        break                           
289                case 2: //SAM
290                        type="SAM"
291                        break
292                case 3: //EMP
293                        type="EMP"
294                        break   
295                default:
296                        DoAlert 0,"No Radio button selected\rCan't place cursors"
297                        return(1)
298        endswitch
299        if(checked)
300                //show info and cursors, if the wave in on the graph
301                String str,yname
302                str=TraceNameList("", ";", 1)
303                yname="DetCts_"+type
304                Variable ok=WhichListItem(yname, str,";",0)
305                if(ok != -1)
306                        Wave ywave=$(USANSFolder+":Graph:DetCts_"+type)
307                        Showinfo/W=COR_Graph
308                        Cursor/A=1/P/S=1 A,$yname,0
309                        Cursor/A=0/P/S=1 B,$yname,numpnts(ywave)-1
310                else
311                        //trace is not on graph
312                        CheckBox $ctrlName, value=0             //not checked
313                        HideInfo/W=COR_Graph
314                        Cursor/K/W=COR_Graph A
315                        Cursor/K/W=COR_Graph B
316                        DoAlert 0,type+" data is not on the graph"
317                endif
318        else
319                //hide info and cursors, if there are any displayed
320                HideInfo/W=COR_Graph
321                Cursor/K/W=COR_Graph A
322                Cursor/K/W=COR_Graph B
323                CheckBox useCrsrCheck,win=COR_Graph,value= 0
324        endif
325        DoUpdate
326End
327
328//radio button control of save type
329//sets global, so buttons don't need to be polled
330Function TypeToggleCheckProc(ctrlName,checked) : CheckBoxControl
331        String ctrlName
332        Variable checked
333
334        SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder
335
336        NVAR gRadioVal=$(USANSFolder+":Globals:MainPanel:gTypeCheck")
337       
338        strswitch(ctrlName)
339                case "CORCheck":
340                        gRadioVal=1
341                        break
342                case "SAMCheck":
343                        gRadioVal=2
344                        break
345                case "EMPCheck":
346                        gRadioVal=3
347                        break
348        endswitch
349        CheckBox CORCheck,win=COR_Graph,value= (gRadioVal==1)
350        CheckBox SAMCheck,win=COR_Graph,value= (gRadioVal==2)
351        CheckBox EMPCheck,win=COR_Graph,value= (gRadioVal==3)
352       
353        //move the cursors to the correct trace on the graph
354        ControlInfo useCrsrCheck
355        checked=V_Value
356        UseCrsrCheckProc("useCrsrCheck",V_Value)
357End
358
359//updates the trans values and the bkg/empty values on the graph, if necessary
360//calculate the T_Wide and T_Rock from the wave notes
361// if there is an error in the wave notes, "NaN" will typically be returned
362//
363Function UpdateButtonProc(ctrlName) : ButtonControl
364        String ctrlName
365
366        SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder
367       
368        Wave/Z samCts=$(USANSFolder+":SAM:DetCts")
369        Wave/Z empCts=$(USANSFolder+":EMP:DetCts")
370        if((WaveExists(samCts)==0) || (WaveExists(empCts)==0))
371                DoAlert 0,"Sample and Empty data must both be plotted before you can calculate the transmission"
372                Variable/G $(USANSFolder+":Globals:MainPanel:gTransWide")=NaN           //error
373                Variable/G $(USANSFolder+":Globals:MainPanel:gTransRock")=NaN
374                return(1)
375        Endif
376        //get the wave notes, and the transCt values
377        String samNote=note(samCts),empNote=note(empCts)
378        Variable samWide,empWide,samRock,empRock
379        samWide = NumberByKey("TWIDE",samNote,":",";")
380        empWide = NumberByKey("TWIDE",empNote,":",";")
381        samRock = NumberByKey("PEAKVAL",samNote,":",";")
382        empRock = NumberByKey("PEAKVAL",empNote,":",";")
383        Variable/G $(USANSFolder+":Globals:MainPanel:gTransWide")=samWide/empWide
384        Variable/G $(USANSFolder+":Globals:MainPanel:gTransRock")=samRock/empRock
385       
386        TransRatio()            //calculate the ratio and update
387       
388        return(0)
389End
390
391// dispatches to the function to perform the data correction
392//
393Function CorrectButtonProc(ctrlName) : ButtonControl
394        String ctrlName
395       
396        DoCorrectData()
397        return(0)
398End
399
400//button to present a simple input dialog to ask the user for the data type
401// (either SAM or EMP) and the new value of the peak angle to use.
402//
403// rarely needed, but sometimes the data can fool IGOR, and no peak can be found
404// in some cases, data may not cover the primary beam. In both of these cases it
405// is necessary to manually override the peak angle
406//
407// calls RePlotWithUserAngle to "re-do" everything
408//
409Function QpkButtonProc(ctrlName) : ButtonControl
410        String ctrlName
411       
412        Variable newPkAngle=0
413        String dataSet="SAM;EMP;",type=""
414       
415        Prompt type,"Select Data Set",popup,dataSet
416        Prompt newPkAngle, "Enter new peak ANGLE, in Degrees"
417        DoPrompt "Override the peak angle",type,newPkAngle
418        //Print newPkAngle,type
419        if(V_Flag==1)           //user cancel, exit
420                return(1)
421        endif
422        //with the new information (type and angle) re-do the whole mess
423        //...as if the "plot" button was hit, except that the angle is known...
424       
425        RePlotWithUserAngle(type,newPkAngle)
426End
427
428Function TransRatio()
429        NVAR tr = root:Packages:NIST:USANS:Globals:MainPanel:gTransRock
430        NVAR tw = root:Packages:NIST:USANS:Globals:MainPanel:gTransWide
431        NVAR rat = root:Packages:NIST:USANS:Globals:MainPanel:gTransRatio
432       
433        rat = tr/tw
434        if(rat < 0.9)
435                SetVariable setVar0 labelBack=(65535,32768,32768)
436        else
437                SetVariable setVar0 labelBack=0
438        endif
439        return(0)
440End
441
442Function LogLinToggleCheckProc(cba) : CheckBoxControl
443        STRUCT WMCheckboxAction &cba
444
445        switch( cba.eventCode )
446                case 2: // mouse up
447                        Variable checked = cba.checked                 
448                        if(checked)
449                                ModifyGraph log(bottom)=1
450                        else
451                                ModifyGraph log(bottom)=0
452                        endif
453                        break
454        endswitch
455
456        return 0
457End
458
459
460//returns the peak location found (and used) for zero angle
461//displayed on the COR_Graph
462Function QpkFromNote(type)
463        String type
464
465        SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder
466               
467        Wave/Z detCts=$(USANSFolder+":Graph:DetCts_"+type)
468        if(!WaveExists(detCts))
469                return(NaN)
470        Endif
471        String str=note(detcts)
472        Variable val
473       
474        val=NumberByKey("PEAKANG", str,":",";")
475        return(val)
476End
477
478//nearly identical to PlotSelectedSAMButtonProc
479// - re-loads the data and goes through all the steps as it they were new datsets
480// - DOES NOT try to find the peak angle, instead uses the input zeroAngle
481// - replaces the PEAKANG:value with the input zeroAngle
482// updates the plot with the corrected angle
483//
484Function RePlotWithUserAngle(type,zeroAngle)
485        String type
486        Variable zeroAngle
487
488        SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder
489       
490        //SETS the wave note with the PEAKANG value
491       
492        //loads each of the data files
493        //normalizes each file to countrate immediately
494        //appends them to the individual waves in "SAM" folder
495        //sorts by angle
496        //converts to Q-values USING SUPPLIED ANGLE
497        //
498        //get selected files from listbox (everything)
499        //use the listBox wave directly
500       
501        Wave/T listW=$(USANSFolder+":Globals:MainPanel:"+type+"Wave")
502        Variable ii,num=numpnts(listW)
503        String fname="",fpath="",str=""
504        PathInfo bt5PathName
505        fpath = S_Path
506       
507        //load, normalize, and append
508        //loop over the number of items in the list
509        for(ii=0;ii<num;ii+=1)
510                fname = fpath + listw[ii]
511                LoadBT5File(fname,"SWAP")       //overwrite what's in the SWAP folder
512                Convert2Countrate("SWAP",1)
513                if(ii==0)       //first time, overwrite
514                        NewDataWaves("SWAP",type)
515                else            //append to waves in TYPE folder
516                        AppendDataWaves("SWAP",type)
517                endif
518        endfor
519        //sort after all loaded
520        DoAngleSort(type)
521       
522        //find the peak and convert to Q-values
523        //Variable zeroAngle = FindZeroAngle("SAM")
524        //if(zeroAngle == -9999)
525                //DoAlert 0,"Couldn't find a peak - using zero as zero angle"
526        //      zeroAngle = 0
527        //Endif
528       
529        //find the peak value at the supplied angle, rather than automatic...
530        Wave tmpangle = $(USANSFolder+":"+type+":Angle")
531        Wave tmpdetCts = $(USANSFolder+":"+type+":DetCts")
532        Variable pkHt=0
533        pkHt = interp(zeroAngle,tmpangle,tmpdetcts)
534       
535        if(numtype(pkHt) != 0)          // bad but it warns, useful if only positive angles are available, use the smallest
536                str = "Can't find peak at angle = "+num2str(zeroAngle)+" Using the value at angle = "+num2str(tmpAngle[0])
537                pkHt = tmpDetCts[0]
538        endif
539
540        str=note(tmpDetCts)
541        str = ReplaceNumberByKey("PEAKANG",str,zeroAngle,":",";")
542        str = ReplaceNumberByKey("PEAKVAL",str,pkHt,":",";")
543        Note/K tmpDetCts
544        Note tmpdetCts,str
545       
546        ConvertAngle2Qvals(type,zeroAngle)
547        //find the Trans Cts for T_Wide
548        FindTWideCts(type)
549        //
550        //copy the data to plot to the root:Graph directory, and give clear names
551        if(WaveExists($(USANSFolder+":"+type+":Qvals")))
552                Duplicate/O $(USANSFolder+":"+type+":Qvals"),$(USANSFolder+":Graph:Qvals_"+type)
553        Endif
554        Duplicate/O $(USANSFolder+":"+type+":Angle"),$(USANSFolder+":Graph:Angle_"+type)
555        Duplicate/O $(USANSFolder+":"+type+":DetCts"),$(USANSFolder+":Graph:DetCts_"+type)
556        Duplicate/O $(USANSFolder+":"+type+":ErrDetCts"),$(USANSFolder+":Graph:ErrDetCts_"+type)
557       
558        //now plot the data (or just bring the graph to the front)
559        DoCORGraph()
560       
561        //update the valDisplays
562        ControlUpdate/A/W=COR_Graph             //overkill, does them all
563End
Note: See TracBrowser for help on using the repository browser.