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

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

Add ability to plot individual detectors (from Mark Laver)

  • Property svn:executable set to *
File size: 14.8 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
37proc loadBT5File  {fileName x c cr t m cn br bl fr fl} {
38        global datasets
39        global $x $c $cr $t $m $cn $br $bl $fr $fl
40
41        #puts "In load proc: $x $c $cr $t $m $cn $br $bl $fr $fl"
42
43        set lc 0
44        set mon(0) 0
45        set det1(0) 0
46        set det2(0) 0
47        set det3(0) 0
48        set det4(0) 0
49        set det5(0) 0
50        set xvar(0) 0
51        set trans(0) 0
52
53        if [catch {open $fileName r} fileId] {
54
55                puts stderr "Cannot open file for reading: $fileId"
56
57        } else {
58                for {set lc 0} {$lc < 13} {incr lc} {
59                        gets $fileId line
60                        if { $lc == 0 } {
61                                regexp {^\'.+?\' \'.+?\' \'.+?\'.+?(\d+)\..+} $line match counttime
62                        }
63                }       
64
65                set lc 0
66                while true {
67                        if {[gets $fileId line] < 0} {
68                                break
69                        } else {
70                                regexp {^ +([^ ]+).*} $line match xvar($lc)
71                        }
72
73                        gets $fileId line
74                        regexp {^ (.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),.*} $line match mon($lc) \
75                                        det2($lc) det1($lc) trans($lc) det3($lc) det4($lc) det5($lc)
76                        incr lc
77                }
78
79                close $fileId
80        }
81
82        foreach index [lsort -integer [array names xvar]] {
83            $x append {$xvar($index)}
84            $c append {$det1($index)+$det2($index)+$det3($index)+$det4($index)+$det5($index)}
85            $cr append [expr [$c index $index] / $counttime]
86            $t append {$trans($index)}
87            $m append {$mon($index)}
88            $cn append {$det2($index)}
89            $bl append {$det1($index)}
90            $br append {$det3($index)}
91            $fl append {$det4($index)}
92            $fr append {$det5($index)}
93
94        }
95
96}
97
98proc resetGraph { } {
99        global graph
100        global tv
101        global images
102
103        foreach elem [ $graph element show] {
104            $graph element delete $elem
105
106            set xvec [join "$elem _xvec" ""]
107            set countratevec [join "$elem _countratevec" ""]
108            set countvec [join "$elem _countvec" ""]
109            set transvec [join "$elem _transvec" ""]
110            set monvec [join "$elem _monvec" ""]
111            set cvec [join "$elem _cvec" ""]
112            set brvec [join "$elem _brvec" ""]
113            set blvec [join "$elem _blvec" ""]
114            set frvec [join "$elem _frvec" ""]
115            set flvec [join "$elem _flvec" ""]
116       
117            global $xvec $countvec $countratevec $transvec $monvec
118            global $cvec $brvec $blvec $frvec $flvec
119           
120            blt::vector destroy $xvec
121            blt::vector destroy $countratevec
122            blt::vector destroy $countvec
123            blt::vector destroy $transvec
124            blt::vector destroy $monvec
125            blt::vector destroy $cvec
126            blt::vector destroy $brvec
127            blt::vector destroy $blvec
128            blt::vector destroy $frvec
129            blt::vector destroy $flvec
130        }
131       
132        $tv entry configure all -activeicons "$images(normal) $images(normal)"
133        $tv entry configure all -icons "$images(normal) $images(normal)"
134}
135
136#foreach fileName $argv {
137proc addremovePlot { nodeID } {
138        global graph
139        global tv
140        global images
141        global .tree
142        global plotType
143       
144        set fileName [.tree label $nodeID]     
145        #puts "$nodeID $fileName"       
146        set filebase [string trimright $fileName .bt5]
147
148        if { ! [$graph element exists $filebase] } {
149
150                $tv entry configure $nodeID -activeicons "$images(active) $images(active)"
151                $tv entry configure $nodeID -icons "$images(active) $images(active)"
152
153                set xvec [join "$filebase _xvec" ""]
154                set countratevec [join "$filebase _countratevec" ""]
155                set countvec [join "$filebase _countvec" ""]
156                set transvec [join "$filebase _transvec" ""]
157                set monvec [join "$filebase _monvec" ""]
158                set cvec [join "$filebase _cvec" ""]
159                set brvec [join "$filebase _brvec" ""]
160                set blvec [join "$filebase _blvec" ""]
161                set frvec [join "$filebase _frvec" ""]
162                set flvec [join "$filebase _flvec" ""]
163       
164                global $xvec $countvec $countratevec $transvec $monvec
165                global $cvec $brvec $blvec $frvec $flvec
166       
167                blt::vector create $xvec
168                blt::vector create $countratevec
169                blt::vector create $countvec
170                blt::vector create $transvec
171                blt::vector create $monvec
172                blt::vector create $cvec
173                blt::vector create $brvec
174                blt::vector create $blvec
175                blt::vector create $frvec
176                blt::vector create $flvec
177
178
179                loadBT5File $fileName $xvec $countvec $countratevec $transvec $monvec $cvec $brvec $blvec $frvec $flvec
180
181                $graph element create $filebase -symbol scross \
182                        -xdata $xvec  \
183                        -ydata $countvec
184
185                switch -exact $plotType {
186                    count { $graph element configure $filebase -ydata $countvec}
187                    countrate { $graph element configure $filebase -ydata $countratevec}
188                    trans { $graph element configure $filebase -ydata $transvec}
189                    mon { $graph element configure $filebase -ydata  $monvec}
190                    central { $graph element configure $filebase -ydata  $cvec}
191                    backl {$graph element configure $filebase -ydata $blvec}
192                    backr {$graph element configure $filebase -ydata $brvec}
193                    frontl {$graph element configure $filebase -ydata $flvec}
194                    frontr {$graph element configure $filebase -ydata $frvec}
195                }
196
197        } else {
198            $tv entry configure $nodeID -activeicons "$images(normal) $images(normal)"
199            $tv entry configure $nodeID -icons "$images(normal) $images(normal)"               
200       
201            $graph element delete $filebase
202       
203            set xvec [join "$filebase _xvec" ""]
204            set countratevec [join "$filebase _countratevec" ""]
205            set countvec [join "$filebase _countvec" ""]
206            set transvec [join "$filebase _transvec" ""]
207            set monvec [join "$filebase _monvec" ""]
208            set cvec [join "$filebase _cvec" ""]
209            set brvec [join "$filebase _brvec" ""]
210            set blvec [join "$filebase _blvec" ""]
211            set frvec [join "$filebase _frvec" ""]
212            set flvec [join "$filebase _flvec" ""]
213       
214            global $xvec $countvec $transvec $monvec
215            global $cvec $brvec $blvec $frvec $flvec
216       
217                blt::vector destroy $xvec
218                blt::vector destroy $countratevec
219                blt::vector destroy $countvec
220                blt::vector destroy $transvec
221                blt::vector destroy $monvec
222                blt::vector destroy $cvec
223                blt::vector destroy $brvec
224                blt::vector destroy $blvec
225                blt::vector destroy $frvec
226                blt::vector destroy $flvec     
227       
228        }
229}
230
231proc changePlotType {elem} {
232        global graph
233        global plotType
234
235    set xvec [join "$elem _xvec" ""]
236    set countratevec [join "$elem _countratevec" ""]
237    set countvec [join "$elem _countvec" ""]
238    set transvec [join "$elem _transvec" ""]
239    set monvec [join "$elem _monvec" ""]
240    set cvec [join "$elem _cvec" ""]
241    set brvec [join "$elem _brvec" ""]
242    set blvec [join "$elem _blvec" ""]
243    set frvec [join "$elem _frvec" ""]
244    set flvec [join "$elem _flvec" ""]
245
246        global $xvec $countvec $transvec $monvec
247    global $cvec $brvec $blvec $frvec $flvec
248       
249        switch -exact $plotType {
250                        count { $graph element configure $elem -ydata $countvec}
251                        countrate { $graph element configure $elem -ydata $countratevec}
252                        trans { $graph element configure $elem -ydata $transvec}
253                        mon { $graph element configure $elem -ydata  $monvec}
254                    central { $graph element configure $elem -ydata  $cvec}
255                    backl {$graph element configure $elem -ydata $blvec}
256                    backr {$graph element configure $elem -ydata $brvec}
257                    frontl {$graph element configure $elem -ydata $flvec}
258                    frontr {$graph element configure $elem -ydata $frvec}
259        }
260}
261
262proc changeLogLinY {} {
263        global graph
264        global loglinY
265
266        $graph axis configure y -logscale $loglinY
267}       
268
269proc changeLogLinX {} {
270        global graph
271        global loglinX
272
273        $graph axis configure x -logscale $loglinX
274}       
275
276proc LoadTree { tree parentNode dir } {
277        cd $dir
278        foreach f [lsort [glob *.bt5]] {
279                set e [$tree insert $parentNode -label $f -data "Plot 0"]
280        }
281}
282
283proc EmptyTree { tree } {
284        $tree delete 0
285}
286
287proc selectDirectory {} {
288       
289        global .tree
290       
291        set dir [tk_chooseDirectory -title "Set Data Directory"]
292
293        if {$dir ne ""} {
294                EmptyTree .tree
295                catch { LoadTree .tree 0 $dir } result
296                cd $dir
297        }       
298}
299
300proc resetTree { } {
301
302        global .tree
303
304        EmptyTree .tree
305        LoadTree .tree 0 [pwd]
306}
307
308
309proc filterTree { filterString } {
310       
311        global .tree
312
313        resetTree
314       
315        if {$filterString ne ""} {
316                set filterlist [.tree find 0 -glob $filterString -invert -depth 1]
317                foreach node $filterlist {
318                        if { $node != 0 } {
319                                .tree delete $node
320                        }
321                }
322        }       
323       
324}
325
326#Create menu frame
327set mf [frame .mf]
328
329# Create File menu
330menubutton $mf.filemb -text File -menu $mf.filemb.fileMenu
331set fm [menu $mf.filemb.fileMenu -tearoff 0]
332$fm add command -label "Set Data Dir" -command selectDirectory
333
334#Create Plot menu
335menubutton $mf.plotmb -text Plot -menu $mf.plotmb.plotMenu
336set pm [menu $mf.plotmb.plotMenu -tearoff 0]
337$pm add cascade -label "Type" -menu $pm.type
338$pm add cascade -label "X-Axis" -menu $pm.xaxis
339$pm add cascade -label "Y-Axis" -menu $pm.yaxis
340#Create sub menus
341set xam [menu $pm.xaxis -tearoff 0]
342$xam add radio -label "Lin" -variable loglinX -value "no" -command {changeLogLinX}
343$xam add radio -label "Log" -variable loglinX -value "yes" -command {changeLogLinX}
344
345set yam [menu $pm.yaxis -tearoff 0]
346$yam add radio -label "Lin" -variable loglinY -value "no" -command {changeLogLinY}
347$yam add radio -label "Log" -variable loglinY -value "yes" -command {changeLogLinY}
348
349set ptm [menu $pm.type -tearoff 0]
350$ptm add radio  -label "Counts" -variable plotType -value "count" -command {foreach elem [$graph element show] { changePlotType $elem  }}
351$ptm add radio -label "Count Rate" -variable plotType -value "countrate" -command {foreach elem [$graph element show] { changePlotType $elem  }}
352$ptm add radio -label "Trans" -variable plotType -value "trans" -command {foreach elem [$graph element show] { changePlotType $elem  }}
353$ptm add radio -label "Mon" -variable plotType -value "mon" -command {foreach elem [$graph element show] { changePlotType $elem  }}
354$ptm add radio -label "Central" -variable plotType -value "central" -command {foreach elem [$graph element show] { changePlotType $elem  }}
355$ptm add radio -label "Back Left" -variable plotType -value "backl" -command {foreach elem [$graph element show] { changePlotType $elem  }}
356$ptm add radio -label "Back Right" -variable plotType -value "backr" -command {foreach elem [$graph element show] { changePlotType $elem  }}
357$ptm add radio -label "Front Left" -variable plotType -value "frontl" -command {foreach elem [$graph element show] { changePlotType $elem  }}
358$ptm add radio -label "Front Right" -variable plotType -value "frontr" -command {foreach elem [$graph element show] { changePlotType $elem  }}
359
360#Set defaults
361set loglinX "no"
362set loglinY "no"
363set plotType "count"
364
365#pack menubuttons into menu
366pack $mf.filemb -side left
367pack $mf.plotmb -side left
368
369# Create tree
370blt::tree create .tree
371catch { LoadTree .tree 0 [pwd] } result
372
373# Create view+plot frame
374frame .vp
375# Create treeview frame
376set tvf [frame .vp.tvf]
377
378set tv [blt::treeview $tvf.t -tree .tree -scrollmode listbox \
379                                        -xscrollcommand "$tvf.xscroll set" \
380                                        -yscrollcommand "$tvf.yscroll set" \
381                                        -activeicons "$images(normal) $images(normal)" \
382                                        -icons "$images(normal) $images(normal)"]
383#$tvf.t column insert end Plot
384scrollbar $tvf.xscroll -orient horizontal -command "$tvf.t xview"
385scrollbar $tvf.yscroll -orient vertical -command "$tvf.t yview"
386
387#$tvf.t bind all <ButtonPress-1> {puts stdout [.tree label [%W curselection]]}
388$tvf.t bind all <ButtonPress-1> {addremovePlot [%W curselection]}
389
390pack $tvf.xscroll -side bottom -fill x
391pack $tvf.yscroll -side right -fill y
392pack $tvf.t -side left -fill both -expand true
393pack $tvf -side left -fill y -anchor w
394
395# Create graph
396set graph [blt::graph .vp.g]
397pack $graph -fill both -expand true -side left -anchor w
398
399# Create filter frame
400frame .filter
401label .filter.filterLabel -text "Filter: "
402entry .filter.filterEntry
403bind .filter.filterEntry <Return> {filterTree [%W get]}
404
405#button .filter.filterButton -text "Filter" -command {filterTree [.filter.filterEntry get]}
406pack .filter.filterLabel -side left
407pack .filter.filterEntry -side left
408#pack .filter.filterButton -side left
409#pack .filter.filterReset -side right -padx 25
410
411#Plot controls
412set pcf [frame .filter.pc]
413#Clear plot button
414button $pcf.filterReset -text "Clear Plot" -command {resetGraph}
415
416##Frame for radiobutton set to control plot type
417#set ptf [frame .filter.pc.pt -borderwidth 1 -relief raised]
418#radiobutton $ptf.c -text "Counts" -variable plotType -value "count" -command {foreach elem [$graph element show] { changePlotType $elem  }}
419#radiobutton $ptf.cr -text "Count Rate" -variable plotType -value "countrate" -command {foreach elem [$graph element show] { changePlotType $elem  }}
420#radiobutton $ptf.t -text "Trans" -variable plotType -value "trans" -command {foreach elem [$graph element show] { changePlotType $elem  }}
421#radiobutton $ptf.m -text "Mon" -variable plotType -value "mon" -command {foreach elem [$graph element show] { changePlotType $elem  }}
422#$ptf.c select
423#pack $ptf.m -side right
424#pack $ptf.t -side right
425#pack $ptf.cr -side right
426#pack $ptf.c -side right
427
428##Frame for y-axis log/lin choice
429#set logfy [frame .filter.pc.logy -borderwidth 1 -relief raised]
430##Log/lin radiobutton set
431#radiobutton $logfy.log -text "Log Y" -variable loglinY -value "yes" -command { changeLogLinY }
432#radiobutton $logfy.lin -text "Lin Y" -variable loglinY -value "no" -command { changeLogLinY }
433#$logfy.lin select
434#pack $logfy.log -side right
435#pack $logfy.lin -side right
436
437##Frame for y-axis log/lin choice
438#set logfx [frame .filter.pc.logx -borderwidth 1 -relief raised]
439##Log/lin radiobutton set
440#radiobutton $logfx.log -text "Log X" -variable loglinX -value "yes" -command { changeLogLinX }
441#radiobutton $logfx.lin -text "Lin X" -variable loglinX -value "no" -command { changeLogLinX }
442#$logfx.lin select
443#pack $logfx.log -side right
444#pack $logfx.lin -side right
445
446pack $pcf.filterReset -side right -padx 25
447#pack $logfy -side right
448#pack $logfx -side right
449#pack $ptf -side right
450pack $pcf -side right
451
452
453# Pack  widgets
454pack $mf -side top -anchor w
455pack .vp -fill both -expand true -anchor w
456pack .filter -side bottom -fill x -anchor sw
457
458Blt_ZoomStack $graph
459
460
461
462
Note: See TracBrowser for help on using the repository browser.