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

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

Removed variable and used cd to change to newly selected dir. Notice bug whereby changing directory created a new listing, but plot wouldn't work since cwd hadn't changed.

  • Property svn:executable set to *
File size: 6.0 KB
Line 
1#!/usr/bin/wish
2
3package require BLT
4
5set images(normal) [image create photo -format gif -data {
6    R0lGODlhEAANAMIAAAAAAH9/f///////AL+/vwAA/wAAAAAAACH5BAEAAAUALAAAAAAQAA0A
7    AAM1WBrM+rAEMigJ8c3Kb3OSII6kGABhp1JnaK1VGwjwKwtvHqNzzd263M3H4n2OH1QBwGw6
8    nQkAOw==
9} ]
10
11set images(active) [image create photo -format gif -data {
12    R0lGODlhEAANAMIAAAAAAH9/f/////+/AL+/vwAA/wAAAAAAACH5BAEAAAUALAAAAAAQAA0A
13    AAM8WBrM+rAEQWmIb5KxiWjNInCkV32AJHRlGQBgDA7vdN4vUa8tC78qlrCWmvRKsJTquHkp
14    ZTKAsiCtWq0JADs=
15} ]
16
17proc loadBT5File  {fileName x c t m} {
18        global datasets
19        global $x $c $t $m
20
21        #puts "In load proc: $x $c $cr $t $m"
22
23        set lc 0
24        set mon(0) 0
25        set det1(0) 0
26        set det2(0) 0
27        set det3(0) 0
28        set det4(0) 0
29        set det5(0) 0
30        set xvar(0) 0
31        set trans(0) 0
32
33        if [catch {open $fileName r} fileId] {
34
35                puts stderr "Cannot open file for reading: $fileId"
36
37        } else {
38                for {set lc 0} {$lc < 13} {incr lc} {
39                        gets $fileId line
40                        if { $lc == 0 } {
41                                regexp {^\'.+?\' \'.+?\' \'.+?\'.+?(\d+)\..+} $line match counttime
42                        }
43                }       
44
45                set lc 0
46                while true {
47                        if {[gets $fileId line] < 0} {
48                                break
49                        } else {
50                                regexp {^ +([^ ]+).*} $line match xvar($lc)
51                        }
52
53                        gets $fileId line
54                        regexp {^ (.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),.*} $line match mon($lc) \
55                                        det2($lc) det1($lc) trans($lc) det3($lc) det4($lc) det5($lc)
56                        incr lc
57                }
58
59                close $fileId
60        }
61
62        foreach index [lsort -integer [array names xvar]] {
63                $x append {$xvar($index)}
64                $c append {$det1($index)+$det2($index)+$det3($index)+$det4($index)+$det5($index)}
65                $t append {$trans($index)}
66                $m append {$mon($index)}
67        }
68
69}
70
71proc resetGraph { } {
72        global graph
73        global tv
74        global images
75
76        foreach elem [ $graph element show] {
77                $graph element delete $elem
78
79                set xvec [join "$elem _xvec" ""]
80                set countvec [join "$elem _countvec" ""]
81                set transvec [join "$elem _transvec" ""]
82                set monvec [join "$elem _monvec" ""]
83       
84                global $xvec $countvec $transvec $monvec
85       
86                blt::vector destroy $xvec
87                blt::vector destroy $countvec
88                blt::vector destroy $transvec
89                blt::vector destroy $monvec
90        }
91       
92        $tv entry configure all -activeicons "$images(normal) $images(normal)"
93        $tv entry configure all -icons "$images(normal) $images(normal)"
94}
95
96#foreach fileName $argv {
97proc addremovePlot { nodeID } {
98        global graph
99        global tv
100        global images
101        global .tree
102       
103        set fileName [.tree label $nodeID]     
104        #puts "$nodeID $fileName"       
105        set filebase [string trimright $fileName .bt5]
106
107        if { ! [$graph element exists $filebase] } {
108
109                $tv entry configure $nodeID -activeicons "$images(active) $images(active)"
110                $tv entry configure $nodeID -icons "$images(active) $images(active)"
111
112                set xvec [join "$filebase _xvec" ""]
113                set countvec [join "$filebase _countvec" ""]
114                set transvec [join "$filebase _transvec" ""]
115                set monvec [join "$filebase _monvec" ""]
116       
117                global $xvec $countvec $transvec $monvec
118       
119                blt::vector create $xvec
120                blt::vector create $countvec
121                blt::vector create $transvec
122                blt::vector create $monvec
123
124                loadBT5File $fileName $xvec $countvec $transvec $monvec
125
126                $graph element create $filebase -symbol scross \
127                        -xdata $xvec  \
128                        -ydata $countvec
129
130
131        } else {
132                $tv entry configure $nodeID -activeicons "$images(normal) $images(normal)"
133                $tv entry configure $nodeID -icons "$images(normal) $images(normal)"           
134       
135                $graph element delete $filebase
136       
137                set xvec [join "$filebase _xvec" ""]
138                set countvec [join "$filebase _countvec" ""]
139                set transvec [join "$filebase _transvec" ""]
140                set monvec [join "$filebase _monvec" ""]
141       
142                global $xvec $countvec $transvec $monvec
143       
144                blt::vector destroy $xvec
145                blt::vector destroy $countvec
146                blt::vector destroy $transvec
147                blt::vector destroy $monvec
148
149       
150        }
151}
152
153
154proc LoadTree { tree parentNode dir } {
155        cd $dir
156        foreach f [lsort [glob *.bt5]] {
157                set e [$tree insert $parentNode -label $f -data "Plot 0"]
158        }
159}
160
161proc EmptyTree { tree } {
162        $tree delete 0
163}
164
165proc selectDirectory {} {
166       
167        global .tree
168       
169        set dir [tk_chooseDirectory -title "Set Data Directory"]
170
171        if {$dir ne ""} {
172                EmptyTree .tree
173                LoadTree .tree 0 $dir
174                cd $dir
175        }       
176}
177
178proc resetTree { } {
179
180        global .tree
181
182        EmptyTree .tree
183        LoadTree .tree 0 [pwd]
184}
185
186
187proc filterTree { filterString } {
188       
189        global .tree
190
191        resetTree
192       
193        if {$filterString ne ""} {
194                set filterlist [.tree find 0 -glob $filterString -invert -depth 1]
195                foreach node $filterlist {
196                        if { $node != 0 } {
197                                .tree delete $node
198                        }
199                }
200        }       
201       
202}
203
204# Create menu
205menubutton .mb -text File -menu .mb.fileMenu
206set m [menu .mb.fileMenu -tearoff 0]
207$m add command -label "Set Data Dir" -command selectDirectory
208
209# Create tree
210blt::tree create .tree
211LoadTree .tree 0 [pwd]
212
213# Create view+plot frame
214frame .vp
215# Create treeview frame
216set tvf [frame .vp.tvf]
217
218set tv [blt::treeview $tvf.t -tree .tree -scrollmode listbox \
219                                        -xscrollcommand "$tvf.xscroll set" \
220                                        -yscrollcommand "$tvf.yscroll set" \
221                                        -activeicons "$images(normal) $images(normal)" \
222                                        -icons "$images(normal) $images(normal)"]
223#$tvf.t column insert end Plot
224scrollbar $tvf.xscroll -orient horizontal -command "$tvf.t xview"
225scrollbar $tvf.yscroll -orient vertical -command "$tvf.t yview"
226
227#$tvf.t bind all <ButtonPress-1> {puts stdout [.tree label [%W curselection]]}
228$tvf.t bind all <ButtonPress-1> {addremovePlot [%W curselection]}
229
230pack $tvf.xscroll -side bottom -fill x
231pack $tvf.yscroll -side right -fill y
232pack $tvf.t -side left -fill both -expand true
233pack $tvf -side left -fill y -anchor w
234
235# Create graph
236set graph [blt::graph .vp.g]
237pack $graph -fill both -expand true -side left -anchor w
238
239# Create filter frame
240frame .filter
241label .filter.filterLabel -text "Filter: "
242entry .filter.filterEntry
243bind .filter.filterEntry <Return> {filterTree [%W get]}
244
245#button .filter.filterButton -text "Filter" -command {filterTree [.filter.filterEntry get]}
246pack .filter.filterLabel -side left
247pack .filter.filterEntry -side left
248
249#Plot controls
250set pcf [frame .filter.pc]
251button $pcf.filterReset -text "Clear Plot" -command {resetGraph}
252pack $pcf.filterReset -side right -padx 25
253pack $pcf -side right
254
255
256# Pack  widgets
257pack .mb -side top -anchor w
258pack .vp -fill both -expand true -anchor w
259pack .filter -side bottom -fill x -anchor sw
260
261Blt_ZoomStack $graph
262
263
264
265
Note: See TracBrowser for help on using the repository browser.