summaryrefslogtreecommitdiffstats
path: root/ds9/library/mscale.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'ds9/library/mscale.tcl')
-rw-r--r--ds9/library/mscale.tcl441
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
+ }
+}
+