diff options
Diffstat (limited to 'ds9/library/mscale.tcl')
-rw-r--r-- | ds9/library/mscale.tcl | 441 |
1 files changed, 441 insertions, 0 deletions
diff --git a/ds9/library/mscale.tcl b/ds9/library/mscale.tcl new file mode 100644 index 0000000..df6b248 --- /dev/null +++ b/ds9/library/mscale.tcl @@ -0,0 +1,441 @@ +# Copyright (C) 1999-2016 +# Smithsonian Astrophysical Observatory, Cambridge, MA, USA +# For conditions of distribution and use, see copyright notice in "copyright" + +package provide DS9 1.0 + +# Menu + +proc ScaleMainMenu {} { + global ds9 + + menu $ds9(mb).scale + $ds9(mb).scale add radiobutton -label [msgcat::mc {Linear}] \ + -variable scale(type) -command ChangeScale -value linear + $ds9(mb).scale add radiobutton -label [msgcat::mc {Log}] \ + -variable scale(type) -command ChangeScale -value log + $ds9(mb).scale add radiobutton -label [msgcat::mc {Power}] \ + -variable scale(type) -command ChangeScale -value pow + $ds9(mb).scale add radiobutton -label [msgcat::mc {Square Root}] \ + -variable scale(type) -command ChangeScale -value sqrt + $ds9(mb).scale add radiobutton -label [msgcat::mc {Squared}] \ + -variable scale(type) -command ChangeScale -value squared + $ds9(mb).scale add radiobutton -label {ASINH} \ + -variable scale(type) -command ChangeScale -value asinh + $ds9(mb).scale add radiobutton -label {SINH} \ + -variable scale(type) -command ChangeScale -value sinh + $ds9(mb).scale add radiobutton \ + -label [msgcat::mc {Histogram Equalization}] \ + -variable scale(type) -command ChangeScale -value histequ + $ds9(mb).scale add separator + $ds9(mb).scale add command -label "[msgcat::mc {Log Exponent}]..." \ + -command ScaleLogDialog + $ds9(mb).scale add separator + $ds9(mb).scale add radiobutton -label [msgcat::mc {Min Max}] \ + -variable scale(mode) -command ChangeScaleMode -value minmax + $ds9(mb).scale add radiobutton -label {99.5%} \ + -variable scale(mode) -command ChangeScaleMode -value 99.5 + $ds9(mb).scale add radiobutton -label {99%} \ + -variable scale(mode) -command ChangeScaleMode -value 99 + $ds9(mb).scale add radiobutton -label {98%} \ + -variable scale(mode) -command ChangeScaleMode -value 98 + $ds9(mb).scale add radiobutton -label {97%} \ + -variable scale(mode) -command ChangeScaleMode -value 97 + $ds9(mb).scale add radiobutton -label {96%} \ + -variable scale(mode) -command ChangeScaleMode -value 96 + $ds9(mb).scale add radiobutton -label {95%} \ + -variable scale(mode) -command ChangeScaleMode -value 95 + $ds9(mb).scale add radiobutton -label {92.5%} \ + -variable scale(mode) -command ChangeScaleMode -value 92.5 + $ds9(mb).scale add radiobutton -label {90%} \ + -variable scale(mode) -command ChangeScaleMode -value 90 + $ds9(mb).scale add radiobutton -label {ZScale} \ + -variable scale(mode) -command ChangeScaleMode -value zscale + $ds9(mb).scale add radiobutton -label {ZMax} \ + -variable scale(mode) -command ChangeScaleMode -value zmax + $ds9(mb).scale add radiobutton -label [msgcat::mc {User}] \ + -variable scale(mode) -command ChangeScaleMode -value user + $ds9(mb).scale add separator + $ds9(mb).scale add radiobutton -label [msgcat::mc {Global}] \ + -variable scale(scope) -command ChangeScaleScope -value global + $ds9(mb).scale add radiobutton -label [msgcat::mc {Local}] \ + -variable scale(scope) -command ChangeScaleScope -value local + $ds9(mb).scale add separator + $ds9(mb).scale add cascade -label [msgcat::mc {Min Max}] \ + -menu $ds9(mb).scale.minmax + $ds9(mb).scale add command -label {ZScale...} -command ZScaleDialog + $ds9(mb).scale add separator + $ds9(mb).scale add checkbutton -label "[msgcat::mc {Use}] DATASEC" \ + -variable scale(datasec) -command ChangeDATASEC + $ds9(mb).scale add separator + $ds9(mb).scale add command -label "[msgcat::mc {Scale Parameters}]..." \ + -command ScaleDialog + + menu $ds9(mb).scale.minmax + $ds9(mb).scale.minmax add radiobutton -label [msgcat::mc {Scan}] \ + -variable minmax(mode) -value scan -command ChangeMinMax + $ds9(mb).scale.minmax add radiobutton -label [msgcat::mc {Sample}] \ + -variable minmax(mode) -value sample -command ChangeMinMax + $ds9(mb).scale.minmax add radiobutton -label {DATAMIN DATAMAX} \ + -variable minmax(mode) -value datamin -command ChangeMinMax + $ds9(mb).scale.minmax add radiobutton -label {IRAF-MIN IRAF-MAX} \ + -variable minmax(mode) -value irafmin -command ChangeMinMax + $ds9(mb).scale.minmax add separator + $ds9(mb).scale.minmax add command \ + -label "[msgcat::mc {Sample Parameters}]..." -command MinMaxDialog +} + +proc PrefsDialogScaleMenu {w} { + set f [ttk::labelframe $w.mscale -text [msgcat::mc {Scale}]] + + ttk::menubutton $f.menu -text [msgcat::mc {Menu}] -menu $f.menu.menu + PrefsDialogButtonbarScale $f.buttonbar + + grid $f.menu $f.buttonbar -padx 2 -pady 2 -sticky w + + set m $f.menu.menu + menu $m + $m add radiobutton -label [msgcat::mc {Linear}] \ + -variable pscale(type) -value linear + $m add radiobutton -label [msgcat::mc {Log}] \ + -variable pscale(type) -value log + $m add radiobutton -label [msgcat::mc {Power}] \ + -variable pscale(type) -value pow + $m add radiobutton -label [msgcat::mc {Square Root}]\ + -variable pscale(type) -value sqrt + $m add radiobutton -label [msgcat::mc {Squared}] \ + -variable pscale(type) -value squared + $m add radiobutton -label {ASINH} \ + -variable pscale(type) -value asinh + $m add radiobutton -label {SINH} \ + -variable pscale(type) -value sinh + $m add radiobutton -label [msgcat::mc {Histogram Equalization}] \ + -variable pscale(type) -value histequ + $m add separator + $m add radiobutton -label [msgcat::mc {Min Max}] \ + -variable pscale(mode) -value minmax + $m add radiobutton -label {99.5%} -variable pscale(mode) -value 99.5 + $m add radiobutton -label {99%} -variable pscale(mode) -value 99 + $m add radiobutton -label {98%} -variable pscale(mode) -value 98 + $m add radiobutton -label {97%} -variable pscale(mode) -value 97 + $m add radiobutton -label {96%} -variable pscale(mode) -value 96 + $m add radiobutton -label {95%} -variable pscale(mode) -value 95 + $m add radiobutton -label {92.5%} -variable pscale(mode) -value 92.5 + $m add radiobutton -label {90%} -variable pscale(mode) -value 90 + $m add radiobutton -label {ZScale} -variable pscale(mode) -value zscale + $m add radiobutton -label {ZMax} -variable pscale(mode) -value zmax + $m add radiobutton -label [msgcat::mc {User}] \ + -variable pscale(mode) -value user + $m add separator + $m add radiobutton -label [msgcat::mc {Global}] \ + -variable pscale(scope) -value global + $m add radiobutton -label [msgcat::mc {Local}] \ + -variable pscale(scope) -value local + $m add separator + $m add cascade -label [msgcat::mc {Min Max}] -menu $m.minmax + $m add separator + $m add checkbutton -label "[msgcat::mc {Use}] DATASEC" \ + -variable pscale(datasec) + + menu $m.minmax + $m.minmax add radiobutton -label [msgcat::mc {Scan}] \ + -variable pminmax(mode) -value scan + $m.minmax add radiobutton -label [msgcat::mc {Sample}] \ + -variable pminmax(mode) -value sample + $m.minmax add radiobutton -label {DATAMIN DATAMAX} \ + -variable pminmax(mode) -value datamin + $m.minmax add radiobutton -label {IRAF-MIN IRAF-MAX} \ + -variable pminmax(mode) -value irafmin + + pack $f -side top -fill both -expand true +} + +proc PrefsDialogScale {} { + global dprefs + + set w $dprefs(tab) + + $dprefs(list) insert end [msgcat::mc {Scale}] + lappend dprefs(tabs) [ttk::frame $w.scale] + + # Log + set f [ttk::labelframe $w.scale.log -text [msgcat::mc {Log Exponent}]] + + ttk::entry $f.log -textvariable pscale(log) -width 10 + + grid $f.log -padx 2 -pady 2 -sticky w + + # MinMax + set f [ttk::labelframe $w.scale.minmax \ + -text [msgcat::mc {Min Max Parameters}]] + + slider $f.ssample 0 1000 [msgcat::mc {Sample Increment}] \ + pminmax(sample) {} + + grid $f.ssample -padx 2 -pady 2 -sticky ew + grid columnconfigure $f 0 -weight 1 + + # Zscale + set f [ttk::labelframe $w.scale.zscale \ + -text [msgcat::mc {ZScale Parameters}]] + + slider $f.scontrast 0. 1. [msgcat::mc {Contrast}] \ + pzscale(contrast) {} + slider $f.ssize 0 1000 [msgcat::mc {Number of Samples}] \ + pzscale(sample) {} + slider $f.sline 0 500 [msgcat::mc {Samples per Line}] \ + pzscale(line) {} + + grid $f.scontrast -padx 2 -pady 2 -sticky ew + grid $f.ssize -padx 2 -pady 2 -sticky ew + grid $f.sline -padx 2 -pady 2 -sticky ew + grid columnconfigure $f 0 -weight 1 + + pack $w.scale.log $w.scale.minmax $w.scale.zscale -side top -fill both -expand true +} + +# Buttons + +proc ButtonsScaleDef {} { + global pbuttons + + array set pbuttons { + scale,linear 1 + scale,log 1 + scale,pow 1 + scale,sqrt 1 + scale,squared 1 + scale,asinh 1 + scale,sinh 1 + scale,hist 1 + scale,minmax 1 + scale,995 0 + scale,99 0 + scale,98 0 + scale,97 0 + scale,96 0 + scale,95 0 + scale,925 0 + scale,90 0 + scale,zscale 1 + scale,zmax 0 + scale,user 0 + scale,global 0 + scale,local 0 + scale,datasec 0 + scale,params 0 + } +} + +proc CreateButtonsScale {} { + global buttons + global ds9 + global scale + + ttk::frame $ds9(buttons).scale + RadioButton $ds9(buttons).scale.linear \ + [string tolower [msgcat::mc {Linear}]] \ + scale(type) linear ChangeScale + RadioButton $ds9(buttons).scale.log \ + [string tolower [msgcat::mc {Log}]] \ + scale(type) log ChangeScale + RadioButton $ds9(buttons).scale.pow \ + [string tolower [msgcat::mc {Power}]] \ + scale(type) pow ChangeScale + RadioButton $ds9(buttons).scale.sqrt \ + [string tolower [msgcat::mc {Sqrt}]] \ + scale(type) sqrt ChangeScale + RadioButton $ds9(buttons).scale.squared \ + [string tolower [msgcat::mc {Squared}]] \ + scale(type) squared ChangeScale + RadioButton $ds9(buttons).scale.asinh \ + [string tolower {ASINH}] \ + scale(type) asinh ChangeScale + RadioButton $ds9(buttons).scale.sinh \ + [string tolower {SINH}] \ + scale(type) sinh ChangeScale + RadioButton $ds9(buttons).scale.hist \ + [string tolower [msgcat::mc {Histogram}]] \ + scale(type) histequ ChangeScale + + RadioButton $ds9(buttons).scale.minmax \ + [string tolower [msgcat::mc {Min Max}]] \ + scale(mode) minmax ChangeScaleMode + RadioButton $ds9(buttons).scale.995 {99.5%} scale(mode) 99.5 ChangeScaleMode + RadioButton $ds9(buttons).scale.99 {99%} scale(mode) 99 ChangeScaleMode + RadioButton $ds9(buttons).scale.98 {98%} scale(mode) 98 ChangeScaleMode + RadioButton $ds9(buttons).scale.97 {97%} scale(mode) 97 ChangeScaleMode + RadioButton $ds9(buttons).scale.96 {96%} scale(mode) 96 ChangeScaleMode + RadioButton $ds9(buttons).scale.95 {95%} scale(mode) 95 ChangeScaleMode + RadioButton $ds9(buttons).scale.925 {92.5%} scale(mode) 92.5 ChangeScaleMode + RadioButton $ds9(buttons).scale.90 {90%} scale(mode) 90 ChangeScaleMode + RadioButton $ds9(buttons).scale.zscale {zscale} \ + scale(mode) zscale ChangeScaleMode + RadioButton $ds9(buttons).scale.zmax {zmax} \ + scale(mode) zmax ChangeScaleMode + RadioButton $ds9(buttons).scale.user \ + [string tolower [msgcat::mc {User}]] \ + scale(mode) user ChangeScaleMode + + RadioButton $ds9(buttons).scale.global \ + [string tolower [msgcat::mc {Global}]] \ + scale(scope) global ChangeScaleScope + RadioButton $ds9(buttons).scale.local \ + [string tolower [msgcat::mc {Local}]] \ + scale(scope) local ChangeScaleScope + + CheckButton $ds9(buttons).scale.datasec {datasec} \ + scale(datasec) ChangeDATASEC + + ButtonButton $ds9(buttons).scale.params \ + [string tolower [msgcat::mc {Parameters}]] ScaleDialog + + set buttons(scale) " + $ds9(buttons).scale.linear pbuttons(scale,linear) + $ds9(buttons).scale.log pbuttons(scale,log) + $ds9(buttons).scale.pow pbuttons(scale,pow) + $ds9(buttons).scale.sqrt pbuttons(scale,sqrt) + $ds9(buttons).scale.squared pbuttons(scale,squared) + $ds9(buttons).scale.asinh pbuttons(scale,asinh) + $ds9(buttons).scale.sinh pbuttons(scale,sinh) + $ds9(buttons).scale.hist pbuttons(scale,hist) + $ds9(buttons).scale.minmax pbuttons(scale,minmax) + $ds9(buttons).scale.995 pbuttons(scale,995) + $ds9(buttons).scale.99 pbuttons(scale,99) + $ds9(buttons).scale.98 pbuttons(scale,98) + $ds9(buttons).scale.97 pbuttons(scale,97) + $ds9(buttons).scale.96 pbuttons(scale,96) + $ds9(buttons).scale.95 pbuttons(scale,95) + $ds9(buttons).scale.925 pbuttons(scale,925) + $ds9(buttons).scale.90 pbuttons(scale,90) + $ds9(buttons).scale.zscale pbuttons(scale,zscale) + $ds9(buttons).scale.zmax pbuttons(scale,zmax) + $ds9(buttons).scale.user pbuttons(scale,user) + $ds9(buttons).scale.global pbuttons(scale,global) + $ds9(buttons).scale.local pbuttons(scale,local) + $ds9(buttons).scale.datasec pbuttons(scale,datasec) + $ds9(buttons).scale.params pbuttons(scale,params) + " +} + +proc PrefsDialogButtonbarScale {f} { + global buttons + global pbuttons + + ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu + + set m $f.menu + menu $m + $m add checkbutton -label [msgcat::mc {Linear}] \ + -variable pbuttons(scale,linear) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label [msgcat::mc {Log}] \ + -variable pbuttons(scale,log) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label [msgcat::mc {Power}] \ + -variable pbuttons(scale,pow) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label [msgcat::mc {Square Root}] \ + -variable pbuttons(scale,sqrt) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label [msgcat::mc {Squared}] \ + -variable pbuttons(scale,squared) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label {ASINH} \ + -variable pbuttons(scale,asinh) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label {SINH} \ + -variable pbuttons(scale,sinh) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label [msgcat::mc {Histogram Equalization}] \ + -variable pbuttons(scale,hist) -command {UpdateButtons buttons(scale)} + $m add separator + $m add checkbutton -label [msgcat::mc {Min Max}] \ + -variable pbuttons(scale,minmax) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label {99.5%} \ + -variable pbuttons(scale,995) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label {99%} \ + -variable pbuttons(scale,99) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label {98%} \ + -variable pbuttons(scale,98) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label {97%} \ + -variable pbuttons(scale,97) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label {96%} \ + -variable pbuttons(scale,96) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label {95%} \ + -variable pbuttons(scale,95) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label {92.5%} \ + -variable pbuttons(scale,925) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label {90%} \ + -variable pbuttons(scale,90) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label {ZScale} \ + -variable pbuttons(scale,zscale) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label {ZMax} \ + -variable pbuttons(scale,zmax) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label [msgcat::mc {User}] \ + -variable pbuttons(scale,user) -command {UpdateButtons buttons(scale)} + $m add separator + $m add checkbutton -label [msgcat::mc {Global}] \ + -variable pbuttons(scale,global) -command {UpdateButtons buttons(scale)} + $m add checkbutton -label [msgcat::mc {Local}] \ + -variable pbuttons(scale,local) -command {UpdateButtons buttons(scale)} + $m add separator + $m add checkbutton -label "[msgcat::mc {Use}] DATASEC" \ + -variable pbuttons(scale,datasec) -command {UpdateButtons buttons(scale)} + $m add separator + $m add checkbutton -label "[msgcat::mc {Scale Parameters}]..." \ + -variable pbuttons(scale,params) -command {UpdateButtons buttons(scale)} +} + +# Support + +proc UpdateScaleMenu {} { + global ds9 + global current + global scale + + global debug + if {$debug(tcl,update)} { + puts stderr "UpdateScaleMenu" + } + + if {$current(frame) != {}} { + if {![$current(frame) has iis]} { + $ds9(mb) entryconfig [msgcat::mc {Scale}] -state normal + + set scale(type) [$current(frame) get colorscale] + set scale(log) [$current(frame) get colorscale log] + set scale(scope) [$current(frame) get clip scope] + set scale(mode) [$current(frame) get clip mode] + set scale(datasec) [$current(frame) get datasec] + set minmax(sample) [$current(frame) get clip minmax sample] + set minmax(mode) [$current(frame) get clip minmax mode] + set zscale(contrast) [$current(frame) get clip zscale contrast] + set zscale(sample) [$current(frame) get clip zscale sample] + set zscale(line) [$current(frame) get clip zscale line] + + # DATAMIN/MAX IRAFMIN/MAX + if {[$current(frame) has fits]} { + if {[$current(frame) has datamin]} { + $ds9(mb).scale.minmax entryconfig {DATAMIN DATAMAX} \ + -state normal + } else { + $ds9(mb).scale.minmax entryconfig {DATAMIN DATAMAX} \ + -state disabled + } + + if {[$current(frame) has irafmin]} { + $ds9(mb).scale.minmax entryconfig {IRAF-MIN IRAF-MAX} \ + -state normal + } else { + $ds9(mb).scale.minmax entryconfig {IRAF-MIN IRAF-MAX} \ + -state disabled + } + } else { + $ds9(mb).scale.minmax entryconfig {DATAMIN DATAMAX} \ + -state normal + $ds9(mb).scale.minmax entryconfig {IRAF-MIN IRAF-MAX} \ + -state normal + } + + } else { + $ds9(mb) entryconfig [msgcat::mc {Scale}] -state disabled + } + } else { + $ds9(mb) entryconfig [msgcat::mc {Scale}] -state disabled + } +} + |