diff options
Diffstat (limited to 'ds9/library/catcxc.tcl')
-rw-r--r-- | ds9/library/catcxc.tcl | 390 |
1 files changed, 390 insertions, 0 deletions
diff --git a/ds9/library/catcxc.tcl b/ds9/library/catcxc.tcl new file mode 100644 index 0000000..6580650 --- /dev/null +++ b/ds9/library/catcxc.tcl @@ -0,0 +1,390 @@ +# 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 CATCXC {varname} { + upvar #0 $varname var + global $varname + global pcat + + global debug + if {$debug(tcl,cat)} { + puts stderr "CATCXC $varname" + } + + # go for votable or tsv + if {$pcat(vot)} { + CATCXCVOT $varname + } else { + CATCXCTSV $varname + } +} + +proc CATCXCVOT {varname} { + upvar #0 $varname var + global $varname + + global debug + if {$debug(tcl,cat)} { + puts stderr "CATCXCVOT $varname" + } + + set var(proc,parser) VOTParse + + # coord (degrees) + switch $var(skyformat) { + degrees { + set xx $var(x) + set yy $var(y) + } + sexagesimal { + set xx [h2d [Sex2H $var(x)]] + set yy [Sex2D $var(y)] + } + } + + # size (degrees) + switch $var(rformat) { + degrees { + set ww $var(width) + set hh $var(height) + } + arcmin { + set ww [expr $var(width)/60.] + set hh [expr $var(height)/60.] + } + arcsec { + set ww [expr $var(width)/60./60.] + set hh [expr $var(height)/60./60.] + } + } + + # now to radius + set rr [expr sqrt($ww*$ww+$hh*$hh)/2.] + + # output + if {$var(allcols)} { + set type 3 + } else { + set type 2 + } + + # query + set var(query) [http::formatQuery RA $xx DEC $yy SR $rr VERB $type] + set var(url) "http://cda.cfa.harvard.edu/cscvo/coneSearch" + + CATLoad $varname +} + +proc CATCXCTSV {varname} { + upvar #0 $varname var + global $varname + + global debug + if {$debug(tcl,cat)} { + puts stderr "CATCXCTSV $varname" + } + + set var(proc,reader) CATCXCReader + + # coord (degrees) + 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)] + } + } + + # size (arcmin) + switch $var(rformat) { + degrees { + set ww [expr $var(width)*60.] + set hh [expr $var(height)*60.] + } + arcmin { + set ww $var(width) + set hh $var(height) + } + arcsec { + set ww [expr $var(width)/60.] + set hh [expr $var(height)/60.] + } + } + + # now to radius + set rr [expr sqrt($ww*$ww+$hh*$hh)/2.] + + # output + if {$var(allcols)} { + set type observation + } else { + set type master + } + + # query + set var(query) "ra=$xx&dec=$yy&sr=$rr&type=$type" + + # rows + if {!$var(allrows)} { + append var(query) "&rows=$var(max)" + } + + set var(url) "http://cda.cfa.harvard.edu/cscds9/coneSearch" + + CATLoadIncr $varname +} + +proc CATCXCReader {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 + if {[gets $sock line] == -1} { + set T(Nrows) 0 + set T(Ncols) 0 + set T(Header) {} + set T(HLines) 0 + + set T(state) -1 + return $result + } + + set result [string length "$line"] + + incr ${t}(HLines) + set n $T(HLines) + set T(H_$n) $line + + if {[regexp -- {^ *(-)+ *(\t *(-)+ *)*} $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(Dashes) [split $T(H_$n) "\t"] + set T(Ndshs) [llength $T(Dashes)] + starbase_colmap $t + set T(state) 2 + + # these are hard coded + set T(Id) $T(Header) + set T(DataType) {} + set T(ArraySize) {} + set T(Unit) {} + set T(Ucd) {} + # name + lappend T(DataType) {char} + lappend T(ArraySize) {*} + lappend T(Unit) {} + lappend T(Ucd) {} + # ra + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {deg} + lappend T(Ucd) {pos.eq.ra;meta.main} + # dec + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {deg} + lappend T(Ucd) {pos.eq.dec;meta.main} + # err_ellipse_r0 + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # err_ellipse_r1 + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # err_ellipse_ang + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {deg} + lappend T(Ucd) {} + # conf_flag + lappend T(DataType) {boolean} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # extent_flag + lappend T(DataType) {boolean} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # sat_src_flag + lappend T(DataType) {boolean} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # flux_aper90_b + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # flux_aper90_hilim_b + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # flux_aper90_lolim_b + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # significance + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # hard_hm + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # hard_ms + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # var_intra_index_b + lappend T(DataType) {int} + lappend T(ArraySize) {} + lappend T(Unit) {} + # var_inter_index_b + lappend T(DataType) {int} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + + if {[llength $T(Header)] > 17} { + # obsid + lappend T(DataType) {int} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # ra_aper + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {deg} + lappend T(Ucd) {} + # dec_aper + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {deg} + lappend T(Ucd) {} + # mjr_axis_aper + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # mnr_axis_aper + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {} + lappend T(Ucd) {} + # pos_angle_aper + lappend T(DataType) {float} + lappend T(ArraySize) {} + lappend T(Unit) {deg} + lappend T(Ucd) {} + } + } + } + + 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 != {}} { + # 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) {} + } + } + } + } + } + + return $result +} + +proc CATCXCAck {varname} { + upvar #0 $varname var + global $varname + + set msg {Acknowledgments for CXC + +Request for Acknowledgment of Use of the Chandra Source Catalog + +Users are kindly requested to acknowledge in the acknowledgment +section of any resulting publications their use of the Chandra Source +Catalog. + +This will help us greatly to keep track of catalog usage, information +that is essential for providing full accountability of our work and +services, as well as for planning future services. + +The following language is suggested: + +This research has made use of data obtained from the Chandra Source +Catalog, provided by the Chandra X-ray Center (CXC) as part of the +Chandra Data Archive. + +We would like to remind you that it is also very helpful for us if you +could include Dataset Identifiers in the manuscript. The Dataset +Identifier for the Chandra Source Catalog is: + +ADS/Sa.CXO#CSC + } + + SimpleTextDialog ${varname}ack [msgcat::mc {Acknowledgment}] \ + 80 10 insert top $msg +} |