aboutsummaryrefslogtreecommitdiff
path: root/noao/lib/smw.h
diff options
context:
space:
mode:
Diffstat (limited to 'noao/lib/smw.h')
-rw-r--r--noao/lib/smw.h164
1 files changed, 164 insertions, 0 deletions
diff --git a/noao/lib/smw.h b/noao/lib/smw.h
new file mode 100644
index 00000000..7a6c5aa1
--- /dev/null
+++ b/noao/lib/smw.h
@@ -0,0 +1,164 @@
+# SMW definitions.
+# The SMW package (the SMW structure and routines) provide an interface
+# between the MWCS and the ONEDSPEC packages. It provides translation
+# between different image formats and a standard interface for the spectral
+# tasks. The types of formats supported are MULTISPEC, EQUISPEC, and 1-3D
+# simple linear WCS as well as some older formats.
+#
+# The SMW package also provides separating the MULTISPEC MWCS into groups to
+# avoid limitations in the number of attributes allowed by MWCS. This is
+# primarily required for dispersion correction.
+
+define SMW_NSPLIT 500 # Number of spectra per WCS
+
+define SMW_LEN (33 + $1) # Length of SMW structure
+
+define SMW_FORMAT Memi[$1] # Spectrum format
+define SMW_NSPEC Memi[$1+1] # Number of spectra
+define SMW_NBANDS Memi[$1+2] # Number of associated bands
+
+define SMW_TRANS Memi[$1+3] # Transposed image?
+define SMW_PDIM Memi[$1+4] # Physical dimension
+define SMW_PAXIS Memi[$1+$2+4] # Physical axes [3]
+
+define SMW_LDIM Memi[$1+8] # Logical dimension
+define SMW_LAXIS Memi[$1+$2+8] # Logical axes [3]
+define SMW_LLEN Memi[$1+$2+11] # Logical axes lengths [3]
+define SMW_NSUM Memi[$1+$2+14] # Logical summing factors [2]
+
+define SMW_DTYPE Memi[$1+17] # Dispersion type
+define SMW_W1 Memd[P2D($1+18)] # Coord of first phys pixel
+define SMW_DW Memd[P2D($1+20)] # Coord interval per phys pixel
+define SMW_Z Memd[P2D($1+22)] # Doppler factor
+define SMW_NW Memi[$1+24] # Number of dispersion pixels
+define SMW_APS Memi[$1+25] # Pointer to apertures
+define SMW_BEAMS Memi[$1+26] # Pointer to beams
+define SMW_APLOW Memi[$1+27] # Pointer to aplows
+define SMW_APHIGH Memi[$1+28] # Pointer to aphighs
+define SMW_APID Memi[$1+29] # Pointer to default apid
+define SMW_APIDS Memi[$1+30] # Pointer to apids
+
+define SMW_CTLP Memi[$1+31] # CT logical -> physical
+define SMW_NMW Memi[$1+32] # Number of MWCS pointers
+define SMW_MW Memi[$1+$2+33] # MWCS pointer(s)
+
+# Spectrum formats
+define SMW_FORMATS "|equispec|multispec|"
+define SMW_ND 0 # N-dimensional linear WCS
+define SMW_ES 1 # Equispec WCS
+define SMW_MS 2 # Multispec WCS
+
+# Coordinate transformation structure.
+define SMW_CTLEN (6 + $1) # Length of SMW CT structure
+
+define SMW_SMW Memi[$1] # SMW pointer
+define SMW_CTTYPE Memi[$1+1] # Transformation type
+define SMW_DAXIS Memi[$1+2] # Dispersion axis
+define SMW_AAXIS Memi[$1+3] # Aperture axis
+define SMW_CTL Memi[$1+4] # Logical/physical pointer
+define SMW_NCT Memi[$1+5] # Number of CT pointers
+define SMW_CT Memi[$1+$2+6] # Physical/world pointer
+
+# Transformation types
+define SMW_CTTYPES "|logical|physical|"
+define SMW_WL 12 # World to logical
+define SMW_WP 13 # World to physical
+define SMW_LW 21 # Logical to world
+define SMW_LP 23 # Logical to physical
+define SMW_PW 31 # Physical to world
+define SMW_PL 32 # Physical to logical
+
+
+# SHDR - Spectrum header data structure
+
+define LEN_SHDR 380
+define LEN_SHDRS 79 # Length of strings
+
+define IMNAME Memc[P2C($1)] # Spectrum image name
+define IMSEC Memc[P2C($1+40)] # Spectrum image section
+define TITLE Memc[P2C($1+80)] # Title
+define LABEL Memc[P2C($1+120)] # Dispersion label
+define UNITS Memc[P2C($1+160)] # Dispersion units
+define FLABEL Memc[P2C($1+200)] # Flux label
+define FUNITS Memc[P2C($1+240)] # Flux units
+define IM Memi[$1+280] # IMIO pointer
+define MW Memi[$1+281] # SMW pointer
+define CTLW Memi[$1+282] # SMW logical -> world
+define CTWL Memi[$1+283] # SMW world -> logical
+define CTLW1 Memi[$1+284] # SMW logical -> world
+define CTWL1 Memi[$1+285] # SMW world -> logical
+define UN Memi[$1+286] # UNITS pointer for SX
+define MWUN Memi[$1+287] # UNITS pointer of SMW
+define FUN Memi[$1+288] # Flux units pointer
+define FUNIM Memi[$1+289] # Flux units pointer for image
+define LINDEX Memi[$1+$2+289] # Logical image index [2]
+define PINDEX Memi[$1+$2+291] # Physical image index [2]
+define APINDEX Memi[$1+294] # Aperture index
+
+define AP Memi[$1+295] # Aperture ID
+define APLOW Memr[P2R($1+296)+$2-1] # Aperture lower limit [2]
+define APHIGH Memr[P2R($1+298)+$2-1] # Aperture upper limit [2]
+define BEAM Memi[$1+300] # Beam ID
+define OFLAG Memi[$1+301] # Spectrum object type flag
+define IT Memr[P2R($1+302)] # Integ. time
+define RA Memr[P2R($1+303)] # Right ascension
+define DEC Memr[P2R($1+304)] # Declination
+define UT Memr[P2R($1+305)] # Universal time
+define ST Memr[P2R($1+306)] # Siderial time
+define HA Memr[P2R($1+307)] # Hour angle
+define AM Memr[P2R($1+308)] # Airmass
+define W0 Memr[P2R($1+309)] # Starting wavelength
+define W1 Memr[P2R($1+310)] # Ending wavelength
+define WP Memr[P2R($1+311)] # Wavelength increment per pixel
+define DC Memi[$1+312] # Dispersion correction
+define EC Memi[$1+313] # Extinction correction
+define FC Memi[$1+314] # Flux calibration
+define RC Memc[P2C($1+315)] # Reddening correction
+
+define NP1 Memi[$1+355] # First logical pixel
+define NP2 Memi[$1+356] # Last logical pixel
+define SN Memi[$1+357] # Number of pixels
+define SPEC Memi[$1+$2+357] # Pointers to spectra
+define SID Memi[$1+$2+364] # Pointers to spectra ID strings
+define STYPE Memi[$1+$2+371] # Spectrum type
+
+# Spectrum types and access modes.
+
+define STYPES "|coordinates|spectrum|raw|background|sigma|continuum|"
+
+define SH_NTYPES 6 # Number of spectrum types
+define SHHDR 0 # Get header only
+define SHX 1 # Get coordinates
+define SHDATA 2 # Get spectrum
+define SHRAW 3 # Get raw spectrum
+define SHSKY 4 # Get sky
+define SHSIG 5 # Get sigma
+define SHCONT 6 # Get continuum
+
+# Shorthand for pointers to spectra.
+define SX SPEC($1,SHX) # Spectrum coordinates
+define SY SPEC($1,SHDATA) # Spectrum pointer
+define SR SPEC($1,SHRAW) # Raw spectrum pointer
+define SS SPEC($1,SHSKY) # Sky pointer
+define SE SPEC($1,SHSIG) # Sigma pointer
+define SC SPEC($1,SHCONT) # Continuum pointer
+
+# Object flag values
+define SKY 0
+define OBJECT 1
+define ARC 2
+define FLAT 3
+
+# Dispersion correction
+define DCNO -1
+define DCLINEAR 0
+define DCLOG 1
+define DCFUNC 2
+
+# Extinction correction
+define ECNO -1
+define ECYES 0
+
+# Flux calibration
+define FCNO -1
+define FCYES 0