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

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

Added code (commented) to put tabs for plot and file data - for future use maybe.

  • Property svn:executable set to *
File size: 10.3 KB
Line 
1#!/usr/bin/wish
2
3package require BLT
4package require Tix
5
6#set images(normal) [image create photo -format gif -data {
7#    R0lGODlhEAANAMIAAAAAAH9/f///////AL+/vwAA/wAAAAAAACH5BAEAAAUALAAAAAAQAA0A
8#    AAM1WBrM+rAEMigJ8c3Kb3OSII6kGABhp1JnaK1VGwjwKwtvHqNzzd263M3H4n2OH1QBwGw6
9#    nQkAOw==
10#} ]
11
12#Red dot image
13set images(normal) [image create photo -format gif -data {
14R0lGODlhDAAMANUAAPUAAO0EBOsFBeYICOQJCeIKCtwNDdoODsIaGsAbG74cHLoeHrgfH7YgILQh
15IbAjI25FRWhISGRKSmJLS2BMTF1OTvv7+/n5+ff39/X19e3t7enp6ePj47a2trKysrCwsKysrKqq
16qqioqH19fXt7e3l5eXNzc3FxcW9vb21tbWtra2lpaWdnZ11dXVlZWVVVVVNTU////wAAAAAAAAAA
17AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADEALAAAAAAMAAwAAAZjwFgs
18A1rBYKkPRhjjsI5QmGozNEoUhMKCAkNdRDCIAEAGDCIwjxFRLjNgpmOgTS7AXC/YmG5vnWAJdAAN
19MCQhMBEDbQUTMB0YKjAUDgYHDxUwJxYxG5FRmRpMFx8lRyMdmzFBADs=
20} ]
21
22#set images(active) [image create photo -format gif -data {
23#    R0lGODlhEAANAMIAAAAAAH9/f/////+/AL+/vwAA/wAAAAAAACH5BAEAAAUALAAAAAAQAA0A
24#    AAM8WBrM+rAEQWmIb5KxiWjNInCkV32AJHRlGQBgDA7vdN4vUa8tC78qlrCWmvRKsJTquHkp
25#    ZTKAsiCtWq0JADs=
26#} ]
27
28#Green dot image
29set images(active) [image create photo -format gif -data {
30R0lGODlhDAAMANUAAADIAATCBAXBBQi9CAm8CQq6Cg22DQ61DhqjGhuhGxygHB6dHh+cHyCbICGZ
31ISOWI0VmRUhiSEpfSkteS0xdTE5aTvv7+/n5+ff39/X19e3t7enp6ePj47a2trKysrCwsKysrKqq
32qqioqH19fXt7e3l5eXNzc3FxcW9vb21tbWtra2lpaWdnZ11dXVlZWVVVVVNTU////wAAAAAAAAAA
33AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADEALAAAAAAMAAwAAAZjwFgs
34A1rBYKkPRhjjsI5QmGozNEoUhMKCAkNdRDCIAEAGDCIwjxFRLjNgpmOgTS7AXC/YmG5vnWAJdAAN
35MCQhMBEDbQUTMB0YKjAUDgYHDxUwJxYxG5FRmRpMFx8lRyMdmzFBADs=
36} ]
37
38proc loadBT5File  {fileName x c cr t m} {
39        global datasets
40        global $x $c $cr $t $m
41
42        #puts "In load proc: $x $c $cr $t $m"
43
44        set lc 0
45        set mon(0) 0
46        set det1(0) 0
47        set det2(0) 0
48        set det3(0) 0
49        set det4(0) 0
50        set det5(0) 0
51        set xvar(0) 0
52        set trans(0) 0
53
54        if [catch {open $fileName r} fileId] {
55
56                puts stderr "Cannot open file for reading: $fileId"
57
58        } else {
59                for {set lc 0} {$lc < 13} {incr lc} {
60                        gets $fileId line
61                        if { $lc == 0 } {
62                                regexp {^\'.+?\' \'.+?\' \'.+?\'.+?(\d+)\..+} $line match counttime
63                        }
64                }       
65
66                set lc 0
67                while true {
68                        if {[gets $fileId line] < 0} {
69                                break
70                        } else {
71                                regexp {^ +([^ ]+).*} $line match xvar($lc)
72                        }
73
74                        gets $fileId line
75                        regexp {^ (.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),.*} $line match mon($lc) \
76                                        det2($lc) det1($lc) trans($lc) det3($lc) det4($lc) det5($lc)
77                        incr lc
78                }
79
80                close $fileId
81        }
82
83        foreach index [lsort -integer [array names xvar]] {
84                $x append {$xvar($index)}
85                $c append {$det1($index)+$det2($index)+$det3($index)+$det4($index)+$det5($index)}
86                $cr append [expr [$c index $index] / $counttime]
87                $t append {$trans($index)}
88                $m append {$mon($index)}
89        }
90
91}
92
93proc resetGraph { } {
94        global graph
95        global tv
96        global images
97
98        foreach elem [ $graph element show] {
99                $graph element delete $elem
100
101                set xvec [join "$elem _xvec" ""]
102                set countratevec [join "$elem _countratevec" ""]
103                set countvec [join "$elem _countvec" ""]
104                set transvec [join "$elem _transvec" ""]
105                set monvec [join "$elem _monvec" ""]
106       
107                global $xvec $countvec $countratevec $transvec $monvec
108       
109                blt::vector destroy $xvec
110                blt::vector destroy $countratevec
111                blt::vector destroy $countvec
112                blt::vector destroy $transvec
113                blt::vector destroy $monvec
114        }
115       
116        $tv entry configure all -activeicons "$images(normal) $images(normal)"
117        $tv entry configure all -icons "$images(normal) $images(normal)"
118}
119
120#foreach fileName $argv {
121proc addremovePlot { nodeID } {
122        global graph
123        global tv
124        global images
125        global .tree
126        global plotType
127       
128        set fileName [.tree label $nodeID]     
129        #puts "$nodeID $fileName"       
130        set filebase [string trimright $fileName .bt5]
131
132        if { ! [$graph element exists $filebase] } {
133
134                $tv entry configure $nodeID -activeicons "$images(active) $images(active)"
135                $tv entry configure $nodeID -icons "$images(active) $images(active)"
136
137                set xvec [join "$filebase _xvec" ""]
138                set countratevec [join "$filebase _countratevec" ""]
139                set countvec [join "$filebase _countvec" ""]
140                set transvec [join "$filebase _transvec" ""]
141                set monvec [join "$filebase _monvec" ""]
142       
143                global $xvec $countvec $countratevec $transvec $monvec
144       
145                blt::vector create $xvec
146                blt::vector create $countratevec
147                blt::vector create $countvec
148                blt::vector create $transvec
149                blt::vector create $monvec
150
151                loadBT5File $fileName $xvec $countvec $countratevec $transvec $monvec
152
153                $graph element create $filebase -symbol scross \
154                        -xdata $xvec  \
155                        -ydata $countvec
156
157                switch -exact $plotType {
158                        count { $graph element configure $filebase -ydata $countvec}
159                        countrate { $graph element configure $filebase -ydata $countratevec}
160                        trans { $graph element configure $filebase -ydata $transvec}
161                        mon { $graph element configure $filebase -ydata  $monvec}
162                }
163
164        } else {
165                $tv entry configure $nodeID -activeicons "$images(normal) $images(normal)"
166                $tv entry configure $nodeID -icons "$images(normal) $images(normal)"           
167       
168                $graph element delete $filebase
169       
170                set xvec [join "$filebase _xvec" ""]
171                set countratevec [join "$filebase _countratevec" ""]
172                set countvec [join "$filebase _countvec" ""]
173                set transvec [join "$filebase _transvec" ""]
174                set monvec [join "$filebase _monvec" ""]
175       
176                global $xvec $countvec $transvec $monvec
177       
178                blt::vector destroy $xvec
179                blt::vector destroy $countratevec
180                blt::vector destroy $countvec
181                blt::vector destroy $transvec
182                blt::vector destroy $monvec
183
184       
185        }
186}
187
188proc changePlotType {elem} {
189        global graph
190        global plotType
191
192        set xvec [join "$elem _xvec" ""]
193        set countratevec [join "$elem _countratevec" ""]
194        set countvec [join "$elem _countvec" ""]
195        set transvec [join "$elem _transvec" ""]
196        set monvec [join "$elem _monvec" ""]
197
198        global $xvec $countvec $transvec $monvec
199       
200        switch -exact $plotType {
201                        count { $graph element configure $elem -ydata $countvec}
202                        countrate { $graph element configure $elem -ydata $countratevec}
203                        trans { $graph element configure $elem -ydata $transvec}
204                        mon { $graph element configure $elem -ydata  $monvec}
205        }
206}
207
208proc changeLogLinY {} {
209        global graph
210        global loglinY
211
212        $graph axis configure y -logscale $loglinY
213}       
214
215proc changeLogLinX {} {
216        global graph
217        global loglinX
218
219        $graph axis configure x -logscale $loglinX
220}       
221
222proc LoadTree { tree parentNode dir } {
223        cd $dir
224        foreach f [lsort [glob *.bt5]] {
225                set e [$tree insert $parentNode -label $f -data "Plot 0"]
226        }
227}
228
229proc EmptyTree { tree } {
230        $tree delete 0
231}
232
233proc selectDirectory {} {
234       
235        global .tree
236       
237        set dir [tk_chooseDirectory -title "Set Data Directory"]
238
239        if {$dir ne ""} {
240                EmptyTree .tree
241                catch { LoadTree .tree 0 $dir } result
242                cd $dir
243        }       
244}
245
246proc resetTree { } {
247
248        global .tree
249
250        EmptyTree .tree
251        LoadTree .tree 0 [pwd]
252}
253
254
255proc filterTree { filterString } {
256       
257        global .tree
258
259        resetTree
260       
261        if {$filterString ne ""} {
262                set filterlist [.tree find 0 -glob $filterString -invert -depth 1]
263                foreach node $filterlist {
264                        if { $node != 0 } {
265                                .tree delete $node
266                        }
267                }
268        }       
269       
270}
271
272#Create menu frame
273set mf [frame .mf]
274
275# Create File menu
276menubutton $mf.filemb -text File -menu $mf.filemb.fileMenu
277set fm [menu $mf.filemb.fileMenu -tearoff 0]
278$fm add command -label "Set Data Dir" -command selectDirectory
279
280#Create Plot menu
281menubutton $mf.plotmb -text Plot -menu $mf.plotmb.plotMenu
282set pm [menu $mf.plotmb.plotMenu -tearoff 0]
283$pm add cascade -label "Type" -menu $pm.type
284$pm add cascade -label "X-Axis" -menu $pm.xaxis
285$pm add cascade -label "Y-Axis" -menu $pm.yaxis
286#Create sub menus
287set xam [menu $pm.xaxis -tearoff 0]
288$xam add radio -label "Lin" -variable loglinX -value "no" -command {changeLogLinX}
289$xam add radio -label "Log" -variable loglinX -value "yes" -command {changeLogLinX}
290
291set yam [menu $pm.yaxis -tearoff 0]
292$yam add radio -label "Lin" -variable loglinY -value "no" -command {changeLogLinY}
293$yam add radio -label "Log" -variable loglinY -value "yes" -command {changeLogLinY}
294
295set ptm [menu $pm.type -tearoff 0]
296$ptm add radio  -label "Counts" -variable plotType -value "count" -command {foreach elem [$graph element show] { changePlotType $elem  }}
297$ptm add radio -label "Count Rate" -variable plotType -value "countrate" -command {foreach elem [$graph element show] { changePlotType $elem  }}
298$ptm add radio -label "Trans" -variable plotType -value "trans" -command {foreach elem [$graph element show] { changePlotType $elem  }}
299$ptm add radio -label "Mon" -variable plotType -value "mon" -command {foreach elem [$graph element show] { changePlotType $elem  }}
300
301#Set defaults
302set loglinX "no"
303set loglinY "no"
304set plotType "count"
305
306#pack menubuttons into menu
307pack $mf.filemb -side left
308pack $mf.plotmb -side left
309
310# Create tree
311blt::tree create .tree
312catch { LoadTree .tree 0 [pwd] } result
313
314# Create view+plot frame
315frame .vp
316# Create treeview frame
317set tvf [frame .vp.tvf]
318
319set tv [blt::treeview $tvf.t -tree .tree -scrollmode listbox \
320                                        -xscrollcommand "$tvf.xscroll set" \
321                                        -yscrollcommand "$tvf.yscroll set" \
322                                        -activeicons "$images(normal) $images(normal)" \
323                                        -icons "$images(normal) $images(normal)"]
324#$tvf.t column insert end Plot
325scrollbar $tvf.xscroll -orient horizontal -command "$tvf.t xview"
326scrollbar $tvf.yscroll -orient vertical -command "$tvf.t yview"
327
328#$tvf.t bind all <ButtonPress-1> {puts stdout [.tree label [%W curselection]]}
329$tvf.t bind all <ButtonPress-1> {addremovePlot [%W curselection]}
330
331pack $tvf.xscroll -side bottom -fill x
332pack $tvf.yscroll -side right -fill y
333pack $tvf.t -side left -fill both -expand true
334pack $tvf -side left -fill y -anchor w
335
336# Create Notebook
337#set nb [tixNoteBook .vp.nb]
338#$nb add plot -label "Plot" -underline 0
339#$nb add data -label "File Data" -underline 0
340#set plottab [frame [$nb subwidget plot].f]
341#set datatab [frame [$nb subwidget data].f]
342#pack $nb $plottab $datatab -fill both -expand true
343
344# Create File Details Tab
345
346
347# Create graph
348#set graph [blt::graph $plottab.g]
349set graph [blt::graph .vp.g]
350pack $graph -fill both -expand true -side left -anchor w
351
352# Create filter frame
353frame .filter
354label .filter.filterLabel -text "Filter: "
355entry .filter.filterEntry
356bind .filter.filterEntry <Return> {filterTree [%W get]}
357
358pack .filter.filterLabel -side left
359pack .filter.filterEntry -side left
360
361#Plot controls
362set pcf [frame .filter.pc]
363#Clear plot button
364button $pcf.filterReset -text "Clear Plot" -command {resetGraph}
365
366pack $pcf.filterReset -side right -padx 25
367pack $pcf -side right
368
369
370# Pack  widgets
371pack $mf -side top -anchor w
372pack .vp -fill both -expand true -anchor w
373pack .filter -side bottom -fill x -anchor sw
374
375Blt_ZoomStack $graph
376
377
378
379
Note: See TracBrowser for help on using the repository browser.