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

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

Added check boxes to determine plot type

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