source: sans/utils/bt5/bt5plot/bt5plot @ 463

Last change on this file since 463 was 350, checked in by ajj, 15 years ago

Fixed valMarker problem.
Made rate display work properly

  • Property svn:executable set to *
File size: 15.9 KB
Line 
1#!/usr/bin/wish
2
3package require BLT
4
5#set images(normal) [image create photo -format gif -data {
6#    R0lGODlhEAANAMIAAAAAAH9/f///////AL+/vwAA/wAAAAAAACH5BAEAAAUALAAAAAAQAA0A
7#    AAM1WBrM+rAEMigJ8c3Kb3OSII6kGABhp1JnaK1VGwjwKwtvHqNzzd263M3H4n2OH1QBwGw6
8#    nQkAOw==
9#} ]
10
11#Red dot image
12set images(normal) [image create photo -format gif -data {
13R0lGODlhDAAMANUAAPUAAO0EBOsFBeYICOQJCeIKCtwNDdoODsIaGsAbG74cHLoeHrgfH7YgILQh
14IbAjI25FRWhISGRKSmJLS2BMTF1OTvv7+/n5+ff39/X19e3t7enp6ePj47a2trKysrCwsKysrKqq
15qqioqH19fXt7e3l5eXNzc3FxcW9vb21tbWtra2lpaWdnZ11dXVlZWVVVVVNTU////wAAAAAAAAAA
16AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADEALAAAAAAMAAwAAAZjwFgs
17A1rBYKkPRhjjsI5QmGozNEoUhMKCAkNdRDCIAEAGDCIwjxFRLjNgpmOgTS7AXC/YmG5vnWAJdAAN
18MCQhMBEDbQUTMB0YKjAUDgYHDxUwJxYxG5FRmRpMFx8lRyMdmzFBADs=
19} ]
20
21#set images(active) [image create photo -format gif -data {
22#    R0lGODlhEAANAMIAAAAAAH9/f/////+/AL+/vwAA/wAAAAAAACH5BAEAAAUALAAAAAAQAA0A
23#    AAM8WBrM+rAEQWmIb5KxiWjNInCkV32AJHRlGQBgDA7vdN4vUa8tC78qlrCWmvRKsJTquHkp
24#    ZTKAsiCtWq0JADs=
25#} ]
26
27#Green dot image
28set images(active) [image create photo -format gif -data {
29R0lGODlhDAAMANUAAADIAATCBAXBBQi9CAm8CQq6Cg22DQ61DhqjGhuhGxygHB6dHh+cHyCbICGZ
30ISOWI0VmRUhiSEpfSkteS0xdTE5aTvv7+/n5+ff39/X19e3t7enp6ePj47a2trKysrCwsKysrKqq
31qqioqH19fXt7e3l5eXNzc3FxcW9vb21tbWtra2lpaWdnZ11dXVlZWVVVVVNTU////wAAAAAAAAAA
32AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADEALAAAAAAMAAwAAAZjwFgs
33A1rBYKkPRhjjsI5QmGozNEoUhMKCAkNdRDCIAEAGDCIwjxFRLjNgpmOgTS7AXC/YmG5vnWAJdAAN
34MCQhMBEDbQUTMB0YKjAUDgYHDxUwJxYxG5FRmRpMFx8lRyMdmzFBADs=
35} ]
36
37set plotcolors [list darkblue darkred darkgreen darkorange darkmagenta darkcyan darkgrey black blue red green orange magenta cyan grey]
38set plotcolor 0
39#array set plotVals [
40
41
42proc loadBT5File  {fileName x c cr t m cn br bl fr fl} {
43        global datasets
44        global $x $c $cr $t $m $cn $br $bl $fr $fl
45
46        #puts "In load proc: $x $c $cr $t $m $cn $br $bl $fr $fl"
47
48        set lc 0
49        set mon(0) 0
50        set det1(0) 0
51        set det2(0) 0
52        set det3(0) 0
53        set det4(0) 0
54        set det5(0) 0
55        set xvar(0) 0
56        set trans(0) 0
57
58        if [catch {open $fileName r} fileId] {
59
60                puts stderr "Cannot open file for reading: $fileId"
61
62        } else {
63                for {set lc 0} {$lc < 13} {incr lc} {
64                        gets $fileId line
65                        if { $lc == 0 } {
66                                regexp {^\'.+?\' \'.+?\' \'.+?\'.+?(\d+)\..+} $line match counttime
67                        }
68                }       
69
70                set lc 0
71                while true {
72                        if {[gets $fileId line] < 0} {
73                                break
74                        } else {
75                                regexp {^ +([^ ]+).*} $line match xvar($lc)
76                        }
77
78                        gets $fileId line
79                        regexp {^ (.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),.*} $line match mon($lc) \
80                                        det2($lc) det1($lc) trans($lc) det3($lc) det4($lc) det5($lc)
81                        incr lc
82                }
83
84                close $fileId
85        }
86
87        foreach index [lsort -integer [array names xvar]] {
88            $x append {$xvar($index)}
89            $c append {$det1($index)+$det2($index)+$det3($index)+$det4($index)+$det5($index)}
90            $cr append [expr [$c index $index] / $counttime]
91            $t append {$trans($index)}
92            $m append {$mon($index)}
93            $cn append {$det2($index)}
94            $bl append {$det1($index)}
95            $br append {$det3($index)}
96            $fl append {$det4($index)}
97            $fr append {$det5($index)}
98
99        }
100
101}
102
103proc resetGraph { } {
104        global graph
105        global tv
106        global images
107        global plotcolor
108        global transvar
109        global sumvar
110        global monvar
111        global num4var
112
113        set plotcolor 0
114
115        foreach elem [ $graph element show] {
116       
117            if { [string equal $elem "valMarker"] != 1} {
118                $graph element delete $elem
119           
120                set xvec [join "$elem _xvec" ""]
121                set countratevec [join "$elem _countratevec" ""]
122                set countvec [join "$elem _countvec" ""]
123                set transvec [join "$elem _transvec" ""]
124                set monvec [join "$elem _monvec" ""]
125                set cvec [join "$elem _cvec" ""]
126                set brvec [join "$elem _brvec" ""]
127                set blvec [join "$elem _blvec" ""]
128                set frvec [join "$elem _frvec" ""]
129                set flvec [join "$elem _flvec" ""]
130       
131                global $xvec $countvec $countratevec $transvec $monvec
132                global $cvec $brvec $blvec $frvec $flvec
133           
134                blt::vector destroy $xvec
135                blt::vector destroy $countratevec
136                blt::vector destroy $countvec
137                blt::vector destroy $transvec
138                blt::vector destroy $monvec
139                blt::vector destroy $cvec
140                blt::vector destroy $brvec
141                blt::vector destroy $blvec
142                blt::vector destroy $frvec
143                blt::vector destroy $flvec
144            } else {
145                clearValMarks
146            }
147        }
148       
149        $tv entry configure all -activeicons "$images(normal) $images(normal)"
150        $tv entry configure all -icons "$images(normal) $images(normal)"
151}
152
153#foreach fileName $argv {
154proc addremovePlot { nodeID } {
155        global graph
156        global tv
157        global images
158        global .tree
159        global plotType
160        global plotcolors
161        global plotcolor
162        global useColors
163        global valMarkElem
164       
165        set fileName [.tree label $nodeID]     
166        #puts "$nodeID $fileName"       
167        set filebase [string trimright $fileName .bt5]
168
169        if { ! [$graph element exists $filebase] } {
170
171                $tv entry configure $nodeID -activeicons "$images(active) $images(active)"
172                $tv entry configure $nodeID -icons "$images(active) $images(active)"
173
174                set xvec [join "$filebase _xvec" ""]
175                set countratevec [join "$filebase _countratevec" ""]
176                set countvec [join "$filebase _countvec" ""]
177                set transvec [join "$filebase _transvec" ""]
178                set monvec [join "$filebase _monvec" ""]
179                set cvec [join "$filebase _cvec" ""]
180                set brvec [join "$filebase _brvec" ""]
181                set blvec [join "$filebase _blvec" ""]
182                set frvec [join "$filebase _frvec" ""]
183                set flvec [join "$filebase _flvec" ""]
184       
185                global $xvec $countvec $countratevec $transvec $monvec
186                global $cvec $brvec $blvec $frvec $flvec
187       
188                blt::vector create $xvec
189                blt::vector create $countratevec
190                blt::vector create $countvec
191                blt::vector create $transvec
192                blt::vector create $monvec
193                blt::vector create $cvec
194                blt::vector create $brvec
195                blt::vector create $blvec
196                blt::vector create $frvec
197                blt::vector create $flvec
198
199
200                loadBT5File $fileName $xvec $countvec $countratevec $transvec $monvec $cvec $brvec $blvec $frvec $flvec
201
202
203
204                $graph element create $filebase -symbol scross \
205                        -xdata $xvec  \
206                        -ydata $countvec
207
208                if {$useColors} {
209                        set pcol [lindex $plotcolors $plotcolor]
210                       
211                        $graph element configure $filebase -outline $pcol -color $pcol
212               
213                        incr plotcolor
214                        if { $plotcolor >= [llength $plotcolors] } { set plotcolor 0}
215                }
216
217                switch -exact $plotType {
218                    count { $graph element configure $filebase -ydata $countvec}
219                    countrate { $graph element configure $filebase -ydata $countratevec}
220                    trans { $graph element configure $filebase -ydata $transvec}
221                    mon { $graph element configure $filebase -ydata  $monvec}
222                    central { $graph element configure $filebase -ydata  $cvec}
223                    backl {$graph element configure $filebase -ydata $blvec}
224                    backr {$graph element configure $filebase -ydata $brvec}
225                    frontl {$graph element configure $filebase -ydata $flvec}
226                    frontr {$graph element configure $filebase -ydata $frvec}
227                }
228
229        } else {
230            $tv entry configure $nodeID -activeicons "$images(normal) $images(normal)"
231            $tv entry configure $nodeID -icons "$images(normal) $images(normal)"               
232       
233            if { [$graph element exists valMarker] == 1 } {
234                clearValMarks
235            }
236            $graph element delete $filebase
237       
238            set xvec [join "$filebase _xvec" ""]
239            set countratevec [join "$filebase _countratevec" ""]
240            set countvec [join "$filebase _countvec" ""]
241            set transvec [join "$filebase _transvec" ""]
242            set monvec [join "$filebase _monvec" ""]
243            set cvec [join "$filebase _cvec" ""]
244            set brvec [join "$filebase _brvec" ""]
245            set blvec [join "$filebase _blvec" ""]
246            set frvec [join "$filebase _frvec" ""]
247            set flvec [join "$filebase _flvec" ""]
248       
249            global $xvec $countvec $transvec $monvec
250            global $cvec $brvec $blvec $frvec $flvec
251       
252                blt::vector destroy $xvec
253                blt::vector destroy $countratevec
254                blt::vector destroy $countvec
255                blt::vector destroy $transvec
256                blt::vector destroy $monvec
257                blt::vector destroy $cvec
258                blt::vector destroy $brvec
259                blt::vector destroy $blvec
260                blt::vector destroy $frvec
261                blt::vector destroy $flvec     
262       
263        }
264}
265
266proc changePlotType {elem} {
267        global graph
268        global plotType
269
270    set xvec [join "$elem _xvec" ""]
271    set countratevec [join "$elem _countratevec" ""]
272    set countvec [join "$elem _countvec" ""]
273    set transvec [join "$elem _transvec" ""]
274    set monvec [join "$elem _monvec" ""]
275    set cvec [join "$elem _cvec" ""]
276    set brvec [join "$elem _brvec" ""]
277    set blvec [join "$elem _blvec" ""]
278    set frvec [join "$elem _frvec" ""]
279    set flvec [join "$elem _flvec" ""]
280
281    global $xvec $countvec $transvec $monvec $countratevec
282    global $cvec $brvec $blvec $frvec $flvec
283       
284        switch -exact $plotType {
285                count { $graph element configure $elem -ydata $countvec}
286                countrate { $graph element configure $elem -ydata $countratevec}
287                trans { $graph element configure $elem -ydata $transvec}
288                mon { $graph element configure $elem -ydata  $monvec}
289                central { $graph element configure $elem -ydata  $cvec}
290                backl {$graph element configure $elem -ydata $blvec}
291                backr {$graph element configure $elem -ydata $brvec}
292                frontl {$graph element configure $elem -ydata $flvec}
293                frontr {$graph element configure $elem -ydata $frvec}
294        }
295}
296
297proc changeLogLinY {} {
298        global graph
299        global loglinY
300
301        $graph axis configure y -logscale $loglinY
302}       
303
304proc changeLogLinX {} {
305        global graph
306        global loglinX
307
308        $graph axis configure x -logscale $loglinX
309}       
310
311proc LoadTree { tree parentNode dir } {
312        cd $dir
313        foreach f [lsort [glob *.bt5]] {
314                set e [$tree insert $parentNode -label $f -data "Plot 0"]
315        }
316}
317
318proc EmptyTree { tree } {
319        $tree delete 0
320}
321
322proc selectDirectory {} {
323       
324        global .tree
325       
326        set dir [tk_chooseDirectory -title "Set Data Directory"]
327
328        if {$dir ne ""} {
329                EmptyTree .tree
330                catch { LoadTree .tree 0 $dir } result
331                cd $dir
332        }       
333}
334
335proc resetTree { } {
336
337        global .tree
338
339        EmptyTree .tree
340        LoadTree .tree 0 [pwd]
341}
342
343
344proc filterTree { filterString } {
345       
346        global .tree
347
348        resetTree
349       
350        if {$filterString ne ""} {
351                set filterlist [.tree find 0 -glob $filterString -invert -depth 1]
352                foreach node $filterlist {
353                        if { $node != 0 } {
354                                .tree delete $node
355                        }
356                }
357        }       
358       
359}
360
361proc getDataVals {} {
362        global pointVals
363        global num4var
364        global transvar
365        global sumvar
366        global monvar
367        global ratevar
368        global valMarkElem
369
370        global graph
371
372        set elem [lindex [array get pointVals name] 1]
373        set vecindex [lindex [array get pointVals index] 1] 
374        set xval [lindex [array get pointVals x] 1]
375        set yval [lindex [array get pointVals y] 1]
376
377        set valMarkElem $elem
378
379        if { [string length $elem] != 0 } {
380        set num4var [lindex [[ join "$elem _cvec" ""] range $vecindex $vecindex] 0]
381        set transvar [lindex [[ join "$elem _transvec" ""] range $vecindex $vecindex] 0]
382        set sumvar [lindex [[ join "$elem _countvec" ""] range $vecindex $vecindex] 0]
383        set monvar [lindex [[ join "$elem _monvec" ""] range $vecindex $vecindex] 0]
384        set ratevar [lindex [[ join "$elem _countratevec" ""] range $vecindex $vecindex] 0]
385
386        if { [$graph element exists valMarker] == 1} {         
387                $graph element configure valMarker -data "$xval $yval"
388        } else {
389                $graph element create valMarker -data "$xval $yval" -symbol circle
390        }
391        }
392}
393
394proc clearValMarks {} {
395        uplevel #0 {
396                set num4var "";
397                set transvar "";
398                set sumvar "";
399                set monvar "";
400                set ratevar "";
401                set valMarkElem "";
402                if { [$graph element exists valMarker] == 1} {
403                        $graph element delete valMarker
404                }
405        }
406
407}
408
409#Create menu frame
410set mf [frame .mf]
411
412# Create File menu
413menubutton $mf.filemb -text File -menu $mf.filemb.fileMenu
414set fm [menu $mf.filemb.fileMenu -tearoff 0]
415$fm add command -label "Set Data Dir" -command selectDirectory
416
417#Create Plot menu
418menubutton $mf.plotmb -text Plot -menu $mf.plotmb.plotMenu
419set pm [menu $mf.plotmb.plotMenu -tearoff 0]
420$pm add cascade -label "Type" -menu $pm.type
421$pm add cascade -label "X-Axis" -menu $pm.xaxis
422$pm add cascade -label "Y-Axis" -menu $pm.yaxis
423$pm add cascade -label "Settings" -menu $pm.settings
424#Create sub menus
425set xam [menu $pm.xaxis -tearoff 0]
426$xam add radio -label "Lin" -variable loglinX -value "no" -command {changeLogLinX}
427$xam add radio -label "Log" -variable loglinX -value "yes" -command {changeLogLinX}
428
429set yam [menu $pm.yaxis -tearoff 0]
430$yam add radio -label "Lin" -variable loglinY -value "no" -command {changeLogLinY}
431$yam add radio -label "Log" -variable loglinY -value "yes" -command {changeLogLinY}
432
433set ptm [menu $pm.type -tearoff 0]
434$ptm add radio  -label "Counts" -variable plotType -value "count" -command {foreach elem [$graph element show] { changePlotType $elem  }}
435$ptm add radio -label "Count Rate" -variable plotType -value "countrate" -command {foreach elem [$graph element show] { changePlotType $elem  }}
436$ptm add radio -label "Trans" -variable plotType -value "trans" -command {foreach elem [$graph element show] { changePlotType $elem  }}
437$ptm add radio -label "Mon" -variable plotType -value "mon" -command {foreach elem [$graph element show] { changePlotType $elem  }}
438$ptm add radio -label "Central" -variable plotType -value "central" -command {foreach elem [$graph element show] { changePlotType $elem  }}
439$ptm add radio -label "Back Left" -variable plotType -value "backl" -command {foreach elem [$graph element show] { changePlotType $elem  }}
440$ptm add radio -label "Back Right" -variable plotType -value "backr" -command {foreach elem [$graph element show] { changePlotType $elem  }}
441$ptm add radio -label "Front Left" -variable plotType -value "frontl" -command {foreach elem [$graph element show] { changePlotType $elem  }}
442$ptm add radio -label "Front Right" -variable plotType -value "frontr" -command {foreach elem [$graph element show] { changePlotType $elem  }}
443
444set psm [menu $pm.settings -tearoff 0]
445$psm add check -label "Use Colors" -variable useColors -offvalue 0 -onvalue 1
446
447#Set defaults
448set loglinX "no"
449set loglinY "no"
450set plotType "count"
451set useColors 0
452
453#pack menubuttons into menu
454pack $mf.filemb -side left
455pack $mf.plotmb -side left
456
457# Create tree
458blt::tree create .tree
459catch { LoadTree .tree 0 [pwd] } result
460
461# Create view+plot frame
462frame .vp
463# Create treeview frame
464set tvf [frame .vp.tvf]
465
466set tv [blt::treeview $tvf.t -tree .tree -scrollmode listbox \
467                                        -xscrollcommand "$tvf.xscroll set" \
468                                        -yscrollcommand "$tvf.yscroll set" \
469                                        -activeicons "$images(normal) $images(normal)" \
470                                        -icons "$images(normal) $images(normal)"]
471#$tvf.t column insert end Plot
472scrollbar $tvf.xscroll -orient horizontal -command "$tvf.t xview"
473scrollbar $tvf.yscroll -orient vertical -command "$tvf.t yview"
474
475#$tvf.t bind all <ButtonPress-1> {puts stdout [.tree label [%W curselection]]}
476$tvf.t bind all <ButtonPress-1> {addremovePlot [%W curselection]}
477
478pack $tvf.xscroll -side bottom -fill x
479pack $tvf.yscroll -side right -fill y
480pack $tvf.t -side left -fill both -expand true
481pack $tvf -side left -fill y -anchor w
482
483# Create graph
484set graph [blt::graph .vp.g -halo 30]
485pack $graph -fill both -expand true -side left -anchor w
486
487# Create filter frame
488frame .filter
489label .filter.filterLabel -text "Filter: "
490entry .filter.filterEntry
491bind .filter.filterEntry <Return> {filterTree [%W get]}
492
493pack .filter.filterLabel -side left
494pack .filter.filterEntry -side left
495
496#Plot controls
497set pcf [frame .filter.pc]
498#Clear plot button
499button $pcf.filterReset -text "Clear Plot" -command {resetGraph}
500
501pack $pcf.filterReset -side right -padx 25
502pack $pcf -side right
503
504
505#Data Value Display
506set dvdf [frame .filter.dvd -padx 25]
507pack [label $dvdf.num4lbl -text "#4: "] -side left
508pack [label $dvdf.num4 -textvariable num4var] -side left
509pack [label $dvdf.translbl -text "Trans: "] -side left
510pack [label $dvdf.trans -textvariable transvar] -side left
511pack [label $dvdf.sumlbl -text "Sum: "] -side left
512pack [label $dvdf.sum -textvariable sumvar] -side left
513pack [label $dvdf.monlbl -text "Mon: "] -side left
514pack [label $dvdf.mon -textvariable monvar] -side left
515pack [label $dvdf.ratelbl -text "Rate: "] -side left
516pack [label $dvdf.rate -textvariable ratevar] -side left
517pack $dvdf -side right -anchor s
518
519
520# Pack  widgets
521pack $mf -side top -anchor w
522pack .vp -fill both -expand true -anchor w
523pack .filter -side bottom -fill x -anchor sw
524
525#Blt_ZoomStack $graph
526
527bind $graph <ButtonPress-1> {
528%W element closest %x %y pointVals
529getDataVals
530#puts [array get pointVals name]
531}
532
533
534
535
Note: See TracBrowser for help on using the repository browser.