home *** CD-ROM | disk | FTP | other *** search
- # Hist
-
- source {<tcl$Dir>.!Choices}
-
- w_init Hist
-
- source {<tcl$Dir>.library.debug}
-
- set diag 0
-
- w_box progInfo create "About this program"\
- { hlist {sprite !hist}
- {vlist {info Name Hist}
- {info Purpose "Draw Histograms"}
- {info Author C.T.Stretch}
- {info Version 0.00}
- }
- }
-
- w_bar -menu { Hist {Info -dbox progInfo}
- {Quit -click exit}
- }\
- -drag { dragproc $w_file %t}
-
- w_box dataInfo create "About the data"\
- { vlist {display File fname}
- {display N num}
- {hlist {display Max maxd 10} {display Min mind 10}}
- } -tag
-
- w_box saveBox create "Save as:"\
- { vlist {save DrawFile dname {savedrag $w_file %d}}
- {hlist {action Cancel} {default Save {saveclick %d}}}
- } -tag
-
- proc savedrag {f w}\
- { global dname
- w_draw $w save $f
- set dname($w) $f
- return 0
- }
-
- proc saveclick {w}\
- { global dname
- if [string match *.* $dname($w)] \
- { w_draw $w save $dname($w)
- return 0
- }
- w_error "To save, drag the icon to a directory display"
- return 0
- }
-
- proc saveMclick {w}\
- { global dname
- if [string match *.* $dname($w)] \
- { w_draw $w save $dname($w)
- } \
- else \
- { w_box saveBox open $w
- }
- }
-
- proc dragproc {f t}\
- { global diag fname num maxd mind dname
- if {$t!=4095} return
- set infile [open $f r]
- incr diag
- set fname(diag$diag) $f
- set dname(diag$diag) DrawFile
- while {![eof $infile]}\
- { set line [gets $infile]
- regsub -all {[^0-9.eE+-]+} $line " " line
- set line [string trim $line]
- append val "$line "
- }
- set val [lsort -real $val]
- set n [llength $val]
- set num(diag$diag) $n
- if {$n<8} {w_error "Insufficient data (n=$n)" ; return}
- set m [expr round(sqrt($n)+0.5)]
- if {$m>25} {set m 25}
- set least [lindex $val 0]
- set most [lindex $val [expr $n-1]]
- set maxd(diag$diag) $most
- set mind(diag$diag) $least
- set gap [expr double($most-$least)]
- if {$gap<0.00001} { w_error "Insufficient range (range=$gap)" ; return}
- set gap [expr $gap/$m]
- set e10 [expr round(log10($gap)-0.5)]
- set mant [expr $gap/pow(10,$e10)]
- set gap 1
- if {$mant>1.5} {set gap 2}
- if {$mant>3} {set gap 5}
- if {$mant>7} {set gap 10}
- set gap [expr $gap*pow(10,$e10)]
- if {$gap>.99} {set gap [expr round($gap)]}
- set start [expr round(double($least)/$gap-0.5)]
- set end [expr round(double($most)/$gap+0.5)]
- set last [expr $end-$start]
- w_draw diag$diag create -page 5ix6i \
- -xscale [expr 5.0/($last+2)]i -yscale 0.5i \
- -menu { Hist {Data -dbox dataInfo}
- {Save -dbox saveBox -click {saveMclick %w} }
- {Quit -click exit}
- }
- w_draw diag$diag path (1,1)-([expr $last+1],1) -t0.03i
- set skip 1
- if {$last>5} {set skip 2}
- if {$last>12} {set skip 5}
- for {set i 0} {$i<=$last} {incr i $skip}\
- { w_draw diag$diag text ([expr $i+1],0.5) [expr $gap*($start+$i)]\
- -oc -fn@10p
- }
- for {set i 0} {$i<=$last} {incr i} {set count($i) 0}
- foreach i $val \
- { set x [expr round(double($i)/$gap-0.5)-$start]
- incr count($x)
- }
- set top 0
- for {set i 0} {$i<$last} {incr i}\
- { if {$count($i)>$top} {set top $count($i)}
- }
- set ys [expr 10.0/$top]
- for {set i 0} {$i<$last} {incr i}\
- { set y [expr $count($i)*$ys+1]
- set x0 [expr $i+1]
- set x1 [expr $i+2]
- w_draw diag$diag path ($x0,1)-($x0,$y)-($x1,$y)-($x1,1). -iyellow -t0.03i
- }
- w_draw diag$diag open
- close $infile
- }
-
-
-
-
-