summaryrefslogtreecommitdiffstats
path: root/ds9/library/catcds.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'ds9/library/catcds.tcl')
-rw-r--r--ds9/library/catcds.tcl246
1 files changed, 246 insertions, 0 deletions
diff --git a/ds9/library/catcds.tcl b/ds9/library/catcds.tcl
new file mode 100644
index 0000000..b6100c4
--- /dev/null
+++ b/ds9/library/catcds.tcl
@@ -0,0 +1,246 @@
+# 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
+
+proc CATCDS {varname} {
+ upvar #0 $varname var
+ global $varname
+ global pcat
+
+ global debug
+ if {$debug(tcl,cat)} {
+ puts stderr "CATCDS $varname"
+ }
+
+ # go for votable or tsv
+ if {$pcat(vot)} {
+ set var(proc,parser) VOTParse
+ } else {
+ set var(proc,reader) CATCDSReader
+ }
+
+ # url
+ set site [CATCDSURL $var(server)]
+ set cgidir {viz-bin}
+ if {$pcat(vot)} {
+ set script {votable}
+ } else {
+ set script {asu-tsv}
+ }
+ set var(url) "http://$site/$cgidir/$script"
+
+ # query
+ switch $var(skyformat) {
+ degrees {
+ set xx $var(x)
+ set yy $var(y)
+ }
+ sexagesimal {
+ switch -- $var(sky) {
+ fk4 -
+ fk5 -
+ icrs {set xx [h2d [Sex2H $var(x)]]}
+ galactic -
+ ecliptic {set xx [Sex2D $var(x)]}
+ }
+ set yy [Sex2D $var(y)]
+ }
+ }
+
+ if {$yy>0} {
+ set yy "+$yy"
+ }
+
+ switch -- $var(sky) {
+ fk4 {set eq "B1950"}
+ fk5 -
+ icrs {set eq "J2000"}
+ galactic {set eq "Gal"}
+ ecliptic {set eq "Ecl"}
+ }
+
+ switch -- $var(rformat) {
+ degrees {set cr "-c.rd"}
+ arcmin {set cr "-c.rm"}
+ arcsec {set cr "-c.rs"}
+ }
+
+ set ww $var(width)
+ set hh $var(height)
+ set rr [expr sqrt($ww*$ww+$hh*$hh)/2.]
+
+ set query [http::formatQuery -source $var(catalog) -c $xx$yy -c.eq $eq $cr $rr -oc.form dec]
+
+ if {$pcat(vot)} {
+ append query "&[http::formatQuery -out.form VOTable]"
+ } else {
+ append query "&[http::formatQuery -out.form Tab-Separated-Values]"
+ }
+
+ switch -- $var(psky) {
+ fk4 {append query "&[http::formatQuery -out.add _RAB,_DEB]"}
+ fk5 -
+ icrs {append query "&[http::formatQuery -out.add _RAJ,_DEJ]"}
+ galactic {append query "&[http::formatQuery -out.add _GLON,_GLAT]"}
+ ecliptic {append query "&[http::formatQuery -out.add _ELON,_ELAT]"}
+ }
+
+ # options
+ if {!$var(allrows)} {
+ append query "&-out.max=$var(max)"
+ }
+ if {$var(allcols)} {
+ append query "&-out.all"
+ }
+
+ # url?query
+ set var(query) $query
+
+ if {$pcat(vot)} {
+ CATLoad $varname
+ } else {
+ CATLoadIncr $varname
+ }
+}
+
+proc CATCDSReader {t sock token} {
+ upvar #0 $t T
+ global $t
+
+ set result 0
+
+ if { ![info exists ${t}(state)] } {
+ set T(state) 0
+ }
+
+ switch -- $T(state) {
+ 0 {
+ # init db
+ fconfigure $sock -blocking 1
+ set T(Nrows) 0
+ set T(Ncols) 0
+ set T(Header) {}
+ set T(HLines) 0
+
+ set T(state) 1
+ }
+
+ 1 {
+ # process header
+ incr ${t}(HLines)
+ set n $T(HLines)
+ if {[gets $sock line] == -1} {
+ set T(state) -1
+ set T(HLines) [expr $T(HLines) - 1]
+ set T(Nrows) 0
+ set T(Ncols) 0
+ return 0
+ }
+
+ set result [string length "$line"]
+ set T(H_$n) $line
+ if {[regexp -- {^ *(-)+ *(\t *(-)+ *)*} $line]} {
+ # remove units line, but save first
+ unset T(H_$n)
+ incr ${t}(HLines) -1
+ incr n -1
+ set units $T(H_$n)
+ set T(H_$n) $line
+
+ # clean up header column name
+ set hh $T(H_[expr $n-1])
+ regsub -all {\[} $hh {} hh
+ regsub -all {\]} $hh {} hh
+ set T(H_[expr $n-1]) $hh
+
+ # cols
+ set T(Header) [split $T(H_[expr $n-1]) "\t"]
+ set T(Unit) [split $units "\t"]
+ set T(Dashes) [split $T(H_$n) "\t"]
+ set T(Ndshs) [llength $T(Dashes)]
+
+ starbase_colmap $t
+ set T(state) 2
+ }
+ }
+
+ 2 {
+ # process table
+ if {[gets $sock line] == -1} {
+ set T(state) 0
+ } else {
+ set result [string length "$line"]
+ set line [string trim $line]
+
+ if {$line != {}} {
+ # check for beginning of another table
+ if {[string range $line 0 0] == "#"} {
+ set T(state) 3
+ return $result
+ }
+
+ # check for garbage at start of line
+ if {![string is double [lindex $line 0]]} {
+ set T(state) 3
+ return $result
+ }
+
+ # ok, save it
+ incr ${t}(Nrows)
+ set r $T(Nrows)
+
+ set NCols [starbase_ncols $t]
+ set c 1
+ foreach val [split $line "\t"] {
+ set T($r,$c) $val
+ incr c
+ }
+ for {} {$c <= $NCols} {incr c} {
+ set T($r,$c) {}
+ }
+ }
+ }
+ }
+
+ 3 {
+ # finished, eat everything else
+ if {[gets $sock line] == -1} {
+ set T(state) 0
+ }
+ }
+ }
+
+ return $result
+}
+
+proc CATCDSURL {server} {
+ switch -- $server {
+ cds {return {vizier.u-strasbg.fr}}
+ sao {return {vizier.cfa.harvard.edu}}
+ cadc {return {vizier.hia.nrc.ca}}
+ adac {return {vizier.nao.ac.jp}}
+ iucaa {return {vizier.iucaa.ernet.in}}
+ inasan {return {vizier.inasan.ru}}
+ bejing {return {data.bao.ac.cn}}
+ cambridge {return {vizier.ast.cam.ac.uk}}
+ ukirt {return {www.ukirt.jach.hawaii.edu}}
+ }
+}
+
+proc CATCDSAck {varname} {
+ upvar #0 $varname var
+ global $varname
+
+ set msg {Acknowledgments for CDS
+
+This research has made use of the VizieR catalogue access tool, CDS,
+Strasbourg, France. VizieR is a joint effort of
+CDS (Centre de Données astronomiques de Strasbourg) and
+ESA-ESRIN (Information Systems Division).
+ }
+
+ SimpleTextDialog ${varname}ack [msgcat::mc {Acknowledgment}] \
+ 80 10 insert top $msg
+}