diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2018-01-09 19:06:55 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2018-01-09 19:06:55 (GMT) |
commit | 01e0ebfe59d9028b0246ec4a549bd7528ada94eb (patch) | |
tree | a6c5b54db03177a1c8f3e7fb531990dfbc7bae39 /ast/ast_tester | |
parent | d64cf9c0bd23e752867b149be636d1bbd4501cf4 (diff) | |
download | blt-01e0ebfe59d9028b0246ec4a549bd7528ada94eb.zip blt-01e0ebfe59d9028b0246ec4a549bd7528ada94eb.tar.gz blt-01e0ebfe59d9028b0246ec4a549bd7528ada94eb.tar.bz2 |
update ast 8.6.2
Diffstat (limited to 'ast/ast_tester')
159 files changed, 48084 insertions, 0 deletions
diff --git a/ast/ast_tester/README b/ast/ast_tester/README new file mode 100644 index 0000000..8c50db6 --- /dev/null +++ b/ast/ast_tester/README @@ -0,0 +1,33 @@ + +This directory contains files used for performing some fairly restricted +testing of the AST library. A Fortran 77 compiler is required. As supplied +it uses the g77 Fortran compiler, but this can be changed by editing the ast_tester +script. + +To perform a test: + +- build AST + +- define the environment variables AST and STARLINK so that $AST/lib contains + the AST libraries to be tested, and $STARLINK/lib contains the the USSC libraries. + +- If required, edit the ast_tester script to modify the fortran compiler and/or options. + +- execute the ast_tester script. + + +The script generates various output files which are compared with existing files +which are presumed to represent correct behaviour of the AST library. Any differences +are reported by the script. + +The script also generates various postscript files representing "critically difficult" plots. +A file "*-new.ps" is created for each file "*.head" in the directory. The directory also +contains files "*.ps" which represent the expected appearance of the plots. By default, the +new plots are displayed using ghostview. This can be disabled by specifying the "-nd" option +on the ast_tester command line. + + + + + + diff --git a/ast/ast_tester/a20070718_00010_02_cube.ast b/ast/ast_tester/a20070718_00010_02_cube.ast new file mode 100644 index 0000000..f005938 --- /dev/null +++ b/ast/ast_tester/a20070718_00010_02_cube.ast @@ -0,0 +1,339 @@ + Begin FrameSet # Set of inter-related coordinate systems +# Title = "3-d compound coordinate system" # Title of coordinate system +# Naxes = 3 # Number of coordinate axes +# Domain = "SKY-DSBSPECTRUM" # Coordinate system domain +# Epoch = 2007.54208230851 # Julian epoch of observation +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# Lbl3 = "Radio velocity (USB)" # Label for axis 3 +# System = "Compound" # Coordinate system type +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Uni3 = "km/s" # Units for axis 3 +# Dir1 = 0 # Plot axis 1 in reverse direction + IsA Frame # Coordinate system description + Nframe = 4 # Number of Frames in FrameSet +# Base = 1 # Index of base Frame + Currnt = 4 # Index of current Frame + Nnode = 5 # Number of nodes in FrameSet + Nod1 = 3 # Frame 1 is associated with node 3 + Nod2 = 4 # Frame 2 is associated with node 4 + Nod3 = 5 # Frame 3 is associated with node 5 + Nod4 = 2 # Frame 4 is associated with node 2 + Lnk2 = 1 # Node 2 is derived from node 1 + Lnk3 = 1 # Node 3 is derived from node 1 + Lnk4 = 1 # Node 4 is derived from node 1 + Lnk5 = 1 # Node 5 is derived from node 1 + Frm1 = # Frame number 1 + Begin Frame # Coordinate system description + Title = "Data grid indices; first pixel at (1,1,1)" # Title of coordinate system + Naxes = 3 # Number of coordinate axes + Domain = "GRID" # Coordinate system domain +# Lbl1 = "Data grid index 1" # Label for axis 1 +# Lbl2 = "Data grid index 2" # Label for axis 2 +# Lbl3 = "Data grid index 3" # Label for axis 3 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 +# Uni3 = "pixel" # Units for axis 3 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Data grid index 1" # Axis Label + Symbol = "g1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Data grid index 2" # Axis Label + Symbol = "g2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax3 = # Axis number 3 + Begin Axis # Coordinate axis + Label = "Data grid index 3" # Axis Label + Symbol = "g3" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm2 = # Frame number 2 + Begin Frame # Coordinate system description + Title = "Pixel coordinates; first pixel at (-8.5,-8.5,-2048.5)" # Title of coordinate system + Naxes = 3 # Number of coordinate axes + Domain = "PIXEL" # Coordinate system domain +# Lbl1 = "Pixel coordinate 1" # Label for axis 1 +# Lbl2 = "Pixel coordinate 2" # Label for axis 2 +# Lbl3 = "Pixel coordinate 3" # Label for axis 3 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 +# Uni3 = "pixel" # Units for axis 3 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 1" # Axis Label + Symbol = "p1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 2" # Axis Label + Symbol = "p2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax3 = # Axis number 3 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 3" # Axis Label + Symbol = "p3" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm3 = # Frame number 3 + Begin Frame # Coordinate system description + Title = "Axis coordinates; first pixel at (-8.5,-8.5,-2048.5)" # Title of coordinate system + Naxes = 3 # Number of coordinate axes + Domain = "AXIS" # Coordinate system domain +# Lbl1 = "Axis 1" # Label for axis 1 +# Lbl2 = "Axis 2" # Label for axis 2 +# Lbl3 = "Axis 3" # Label for axis 3 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 +# Uni3 = "pixel" # Units for axis 3 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Axis 1" # Axis Label + Symbol = "a1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Axis 2" # Axis Label + Symbol = "a2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax3 = # Axis number 3 + Begin Axis # Coordinate axis + Label = "Axis 3" # Axis Label + Symbol = "a3" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm4 = # Frame number 4 + Begin CmpFrame # Compound coordinate system description +# Title = "3-d compound coordinate system" # Title of coordinate system +# Naxes = 3 # Number of coordinate axes +# Domain = "SKY-DSBSPECTRUM" # Coordinate system domain +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# Lbl3 = "Radio velocity (USB)" # Label for axis 3 +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Uni3 = "km/s" # Units for axis 3 +# Dir1 = 0 # Plot axis 1 in reverse direction + IsA Frame # Coordinate system description + FrameA = # First component Frame + Begin SkyFrame # Description of celestial coordinate system + Naxes = 2 # Number of coordinate axes + Epoch = 2007.54208230851 # Julian epoch of observation + System = "FK5" # Coordinate system type + ObsLat = 0.346026050148997 # Observers geodetic latitude (rads) + ObsLon = -2.71363306946838 # Observers geodetic longitude (rads) + Dut1 = -0.162963400559962 # UT1-UTC in seconds + Ax1 = # Axis number 1 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + Ax2 = # Axis number 2 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + IsA Frame # Coordinate system description + SRef1 = 4.90555239050187 # Ref. pos. RA 18:44:16.2 + SRef2 = -0.0698132003068136 # Ref. pos. Dec -4:00:00 + End SkyFrame + FrameB = # Second component Frame + Begin DSBSpecFrame # Dual sideband spectral axis + Naxes = 1 # Number of coordinate axes + Epoch = 2007.54208230851 # Julian epoch of observation + System = "VRAD" # Coordinate system type + ObsLat = 0.346026069000144 # Observers geodetic latitude (rads) + ObsLon = -2.71363307300091 # Observers geodetic longitude (rads) + Dut1 = -0.162963400559962 # UT1-UTC in seconds + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + End Axis + IsA Frame # Coordinate system description + SoR = "LSRK" # Standard of rest + RefRA = 4.90553899950038 # Reference RA (rads, FK5 J2000) + RefDec = -0.0698131700797732 # Reference Dec (rads, FK5 J2000) + RstFrq = 372672509000 # Rest frequency (Hz) + SrcVel = 87012.623732646 # Source velocity (m/s) + SrcVRF = "LSRK" # Source velocity rest frame + UFreq = "GHz" # Preferred units for frequency + IsA SpecFrame # Description of spectral coordinate system + DSBCen = 372576971505.836 # Central frequency (Hz topo) + IF = -5251168918.31241 # Intermediate frequency (Hz) + SideBn = "USB" # Represents upper sideband + End DSBSpecFrame + End CmpFrame + Map2 = # Mapping between nodes 1 and 2 + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = 10 # Shift for axis 1 + Sft2 = 10.4938775599003 # Shift for axis 2 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 1 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = 6105939.046167 # Shift for axis 1 + Scl1 = -1.63834485003565e-05 # Scale factor for axis 1 + End WinMap + MapB = # Second component Mapping + Begin SpecMap # Conversion between spectral coordinate systems + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Nspec = 2 # Number of conversion steps + Spec1 = "FRTOVL" # Convert frequency to rel. velocity + Spec1a = 372672509000 # Rest frequency (Hz) + Spec2 = "VLTOVR" # Convert relativistic to radio velocity + End SpecMap + End CmpMap + End CmpMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 2 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + M0 = -2.90888208665722e-05 # Forward matrix value + M1 = 2.90888208665722e-05 # Forward matrix value + Form = "Diagonal" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WcsMap # FITS-WCS sky projection + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Type = "TAN" # Gnomonic projection + End WcsMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 0 # Polar longitude (rad.s) + End SphMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 3 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + M0 = -0.0133908234539359 # Forward matrix value + M1 = 0.981401710741326 # Forward matrix value + M2 = 0.191497697117288 # Forward matrix value + M3 = 0.068459122667767 # Forward matrix value + M4 = 0.191965314976427 # Forward matrix value + M5 = -0.979011065499037 # Forward matrix value + M6 = -0.997564050259824 # Forward matrix value + M7 = 0 # Forward matrix value + M8 = -0.0697564737441253 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 4.90555329534916 # Polar longitude (rad.s) + End SphMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + MapB = # Second component Mapping + Begin ZoomMap # Zoom about the origin + Nin = 1 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Zoom = 0.001 # Zoom factor + End ZoomMap + End CmpMap + End CmpMap + Map3 = # Mapping between nodes 1 and 3 + Begin UnitMap # Unit (null) Mapping + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + End UnitMap + Map4 = # Mapping between nodes 1 and 4 + Begin WinMap # Map one window on to another + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + Sft1 = -9.5 # Shift for axis 1 + Sft2 = -9.5 # Shift for axis 2 + Sft3 = -2049.5 # Shift for axis 3 + End WinMap + Map5 = # Mapping between nodes 1 and 5 + Begin WinMap # Map one window on to another + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + Sft1 = -9.5 # Shift for axis 1 + Sft2 = -9.5 # Shift for axis 2 + Sft3 = -2049.5 # Shift for axis 3 + End WinMap + End FrameSet diff --git a/ast/ast_tester/a20070718_00010_02_cube.fits-wcs b/ast/ast_tester/a20070718_00010_02_cube.fits-wcs new file mode 100644 index 0000000..428efaa --- /dev/null +++ b/ast/ast_tester/a20070718_00010_02_cube.fits-wcs @@ -0,0 +1,61 @@ +WCSAXES = 3 / Number of WCS axes +CRPIX1 = 10.0 / Reference pixel on axis 1 +CRPIX2 = 10.493878 / Reference pixel on axis 2 +CRPIX3 = 1.0 / Reference pixel on axis 3 +CRVAL1 = 281.0675 / Value at ref. pixel on axis 1 +CRVAL2 = -4.0 / Value at ref. pixel on axis 2 +CRVAL3 = -13.610153 / Value at ref. pixel on axis 3 +CTYPE1 = 'RA---TAN' / Type of co-ordinate on axis 1 +CTYPE2 = 'DEC--TAN' / Type of co-ordinate on axis 2 +CTYPE3 = 'VRAD ' / Type of co-ordinate on axis 3 +CDELT1 = -0.0016666667 / Pixel size on axis 1 +CDELT2 = 0.0016666667 / Pixel size on axis 2 +CDELT3 = 0.049100739 / Pixel size on axis 3 +CUNIT3 = 'km/s ' / Units for axis 3 +MJD-OBS = 54299.245 / Modified Julian Date of observation +DATE-OBS= '2007-07-18T05:52:31.475' / Date of observation +RADESYS = 'FK5 ' / Reference frame for RA/DEC values +EQUINOX = 2000.0 / [yr] Epoch of reference equinox +SPECSYS = 'LSRK ' / Standard of rest for spectral axis +SSYSSRC = 'LSRK ' / Standard of rest for source redshift +ZSOURCE = 0.000290285 / [] Redshift of source +VELOSYS = -10097.217 / [m/s] Topo. apparent velocity of rest frame +RESTFRQ = 3.7267251E+11 / [Hz] Rest frequency +IMAGFREQ= 3.621676E+11 / [Hz] Image frequency +OBSGEO-X= -5461073.2 / [m] Observatory geocentric X +OBSGEO-Y= -2491089.0 / [m] Observatory geocentric Y +OBSGEO-Z= 2149568.8 / [m] Observatory geocentric Z +WCSAXESA= 3 / Number of WCS axes +WCSNAMEA= 'PIXEL ' / Reference name for the coord. frame +CRPIX1A = 1.0 / Reference pixel on axis 1 +CRPIX2A = 1.0 / Reference pixel on axis 2 +CRPIX3A = 1.0 / Reference pixel on axis 3 +CRVAL1A = -8.5 / Value at ref. pixel on axis 1 +CRVAL2A = -8.5 / Value at ref. pixel on axis 2 +CRVAL3A = -2048.5 / Value at ref. pixel on axis 3 +CTYPE1A = 'p1 ' / Pixel coordinate 1 +CTYPE2A = 'p2 ' / Pixel coordinate 2 +CTYPE3A = 'p3 ' / Pixel coordinate 3 +CDELT1A = 1.0 / Pixel size on axis 1 +CDELT2A = 1.0 / Pixel size on axis 2 +CDELT3A = 1.0 / Pixel size on axis 3 +CUNIT1A = 'pixel ' / Units for axis 1 +CUNIT2A = 'pixel ' / Units for axis 2 +CUNIT3A = 'pixel ' / Units for axis 3 +WCSAXESB= 3 / Number of WCS axes +WCSNAMEB= 'AXIS ' / Reference name for the coord. frame +CRPIX1B = 1.0 / Reference pixel on axis 1 +CRPIX2B = 1.0 / Reference pixel on axis 2 +CRPIX3B = 1.0 / Reference pixel on axis 3 +CRVAL1B = -8.5 / Value at ref. pixel on axis 1 +CRVAL2B = -8.5 / Value at ref. pixel on axis 2 +CRVAL3B = -2048.5 / Value at ref. pixel on axis 3 +CTYPE1B = 'a1 ' / Axis 1 +CTYPE2B = 'a2 ' / Axis 2 +CTYPE3B = 'a3 ' / Axis 3 +CDELT1B = 1.0 / Pixel size on axis 1 +CDELT2B = 1.0 / Pixel size on axis 2 +CDELT3B = 1.0 / Pixel size on axis 3 +CUNIT1B = 'pixel ' / Units for axis 1 +CUNIT2B = 'pixel ' / Units for axis 2 +CUNIT3B = 'pixel ' / Units for axis 3 diff --git a/ast/ast_tester/aitoff.attr b/ast/ast_tester/aitoff.attr new file mode 100644 index 0000000..85aa9de --- /dev/null +++ b/ast/ast_tester/aitoff.attr @@ -0,0 +1 @@ +Grid=1,tickall=0,border=1,tol=0.001 diff --git a/ast/ast_tester/aitoff.box b/ast/ast_tester/aitoff.box new file mode 100644 index 0000000..b4f303e --- /dev/null +++ b/ast/ast_tester/aitoff.box @@ -0,0 +1 @@ +10.0 -10.0 300.0 280.0 diff --git a/ast/ast_tester/aitoff.head b/ast/ast_tester/aitoff.head new file mode 100644 index 0000000..5f34de0 --- /dev/null +++ b/ast/ast_tester/aitoff.head @@ -0,0 +1,13 @@ +SIMPLE = T / Written by IDL: 30-Jul-1997 05:35:42.00 +BITPIX = -32 / Bits per pixel. +NAXIS = 2 / Number of dimensions +NAXIS1 = 300 / Length of x axis. +NAXIS2 = 300 / Length of y axis. +CTYPE1 = 'GLON-AIT' / X-axis type +CTYPE2 = 'GLAT-AIT' / Y-axis type +CRVAL1 = -149.56866 / Reference pixel value +CRVAL2 = -19.758201 / Reference pixel value +CRPIX1 = 150.500 / Reference pixel +CRPIX2 = 150.500 / Reference pixel +CDELT1 = -1.20000 / Degrees/pixel +CDELT2 = 1.20000 / Degrees/pixel diff --git a/ast/ast_tester/ast_tester b/ast/ast_tester/ast_tester new file mode 100755 index 0000000..e626157 --- /dev/null +++ b/ast/ast_tester/ast_tester @@ -0,0 +1,232 @@ +#!/bin/tcsh +#+ +# Purpose: +# Does a few tests of the version of AST installed in $INSTALL. + +# Usage: +# ast_tester <-nd> + +# Description: +# Build and run various tests of an AST installation. +# +# Some tests produce graphical output. Postscript plots of the FITS +# headers in the current directory are produced for visual comparison +# with previous versions. For each file matching "*.head" in the current +# directory, a file is created called "*-new.ps". This file should be +# compared visually with the file "*.ps". The new files are displayed +# automatically unless the -nd option is supplied on the command line +# +# This script assumes the gfortran compiler is available. If this is not +# the case, do a global edit of gfortran to whatever fortran 77 compiler +# you have available (you will probably also need to change the compiler +# flags). + +# Options: +# -nd : Suppresses display of test plots. + +# Prior Requirements: +# - Unless the "-nd" option is specified, it requires the gv command (a +# frontend for ghostscript) to be on your PATH. +# - The following environment variables are used: +# STARLINK_DIR - should be set to the root of the tree in which the SSC is +# installed. A default of /star is used if not set. +# AST - should be set to the root of the tree in which the version of +# AST to be tested is installed. A default of $STARLINK_DIR is used +# if not set. + +# Author: +# DSB: David Berry (JAC, Hawaii) +#- + +if( ! $?STARLINK_DIR ) then + setenv STARLINK_DIR /star +endif + +if( ! $?AST ) then + setenv AST $STARLINK_DIR +endif + +if( ! $?LDFLAGS ) then + setenv LDFLAGS "" +endif + +setenv PATH $AST/bin\:$STARLINK_DIR/bin\:$PATH + + +# Build the progs +#gfortran -fno-second-underscore -o regression regression.f -fno-range-check $LDFLAGS -I$AST/include -I$STARLINK_DIR/include -L$AST/lib -L$STARLINK_DIR/lib `ast_link -ems` `chr_link` +gfortran -fno-second-underscore -o plotter plotter.f -fno-range-check $LDFLAGS -I$AST/include -I$STARLINK_DIR/include -L$AST/lib -L$STARLINK_DIR/lib `ast_link -pgp -ems` `pgplot_link` +gfortran -fno-second-underscore -o wcsconverter wcsconverter.f -fno-range-check $LDFLAGS -I$AST/include -I$STARLINK_DIR/include -L$AST/lib -L$STARLINK_DIR/lib `ast_link -ems` `chr_link` `err_link` +gfortran -fno-second-underscore -o simplify simplify.f -fno-range-check $LDFLAGS -I$AST/include -I$STARLINK_DIR/include -L$AST/lib -L$STARLINK_DIR/lib `ast_link -ems` `chr_link` `err_link` + +# Run the other test progs +echo "" + + +foreach prog (testmapping testchebymap testunitnormmap testskyframe testframeset testchannel testpolymap testcmpmap testlutmap testfitstable testtable teststcschan teststc testspecframe testfitschan testswitchmap testrebin testrebinseq testtrangrid testnormmap testtime testrate testflux testratemap testspecflux testxmlchan testregions testkeymap ) + +gfortran -fno-second-underscore -w -g -o $prog -g $prog.f -fno-range-check $LDFLAGS -I$AST/include \ + -I$STARLINK_DIR/include -L$AST/lib -L$STARLINK_DIR/lib `ast_link -ems` \ + `psx_link` `prm_link` `chr_link` `err_link` + +./$prog +\rm $prog + +end + + + +foreach prog (testobject testconvert testerror) + +gcc -o $prog $prog.c -I.. -DHAVE_CONFIG_H $LDFLAGS -L$STARLINK_DIR/lib `ast_link` + +./$prog +\rm $prog + +end + + + + +# Make new plots. +echo "" +echo "Generating new plots..." +echo "" +if( $1 == "-nd" ) then +echo " (but not displaying them because the -nd option was supplied)" +echo "" +endif + +\rm *-new.ps >& /dev/null + +foreach n (*.head) + set bn = `basename $n .head` + + set atfile = "${bn}.attr" + if( -e $atfile ) then + set attr1 = `cat $atfile` + else + set attr1 = ' ' + endif + + set atfile = "${bn}.fattr" + if( -e $atfile ) then + set attr2 = `cat $atfile` + else + set attr2 = ' ' + endif + + set boxfile = "${bn}.box" + if( -e $boxfile ) then + set box = `cat $boxfile` + else + set box = ' ' + endif + + + set psfile = "${bn}-new.ps" + ./plotter $n "$attr1" "$attr2" a.ps $box + + if( -e $STARLINK_DIR/bin/psmerge ) then + $STARLINK_DIR/bin/psmerge -t300x300 -r90 a.ps > $psfile + else + cp a.ps $psfile + endif + + if( $1 != "-nd" ) then + gv $psfile -orientation=landscape + endif + +end + +\rm -f a.ps + + +# Make new fits headers +echo "" +echo "Doing WCS conversion tests..." +echo "" + +set ok = 1 +foreach n ( "timj ast fits-wcs cdmatrix=1" \ + "timj ast fits-iraf" \ + "timj ast fits-aips" \ + "timj ast fits-pc" \ + "timj ast native" \ + "timj ast native" \ + "a20070718_00010_02_cube ast fits-wcs" \ + "dss fits-dss ast" \ + "dss ast dss" \ + "dss ast fits-wcs cdmatrix=1" \ + "degen1 ast fits-wcs cdmatrix=1" \ + "degen1 ast fits-wcs cdmatrix=1" \ + "sip head fits-wcs cdmatrix=1,sipreplace=0" \ + "longslit fits-pc fits-wcs cdmatrix=1" ) + + set a = `echo $n` + + set base = $a[1] + set in_suffix = $a[2] + set encoding = $a[3] + if( $#a > 3 ) then + set attrs = $a[4] + else + set attrs = "" + endif + + set in_file = "$base.$in_suffix" + set old_file = "$base.$encoding" + set new_file = "$base-new.$encoding" + + + ./wcsconverter $in_file $encoding $new_file "$attrs,FitsDigits=8" + diff -c $old_file $new_file > ! $old_file.diff + + if( $status == 0 ) then + \rm -f $old_file.diff $new_file + else + echo " $old_file and $new_file differ\!\! (see $old_file.diff)" + echo " Command was:" + echo " wcsconverter $in_file $encoding $new_file <quote>$attrs,FitsDigits=8<quote>" + set ok = 0 + endif + +end + +if( $ok == 1 ) then + echo " All WCS conversion tests passed" + echo "" +endif + + +echo "" +echo "Doing Simplification tests..." +echo "" + +set ok = 1 +foreach n ( *.map ) + set a = `basename $n .map` + ./simplify $n $a.out + diff -c $a.simp $a.out > ! $a.diff + + if( $status == 0 ) then + \rm -f $a.out $a.diff + else + echo " $a.simp and $a.out differ\!\! (see $a.diff)" + set ok = 0 + endif + +end + +if( $ok == 1 ) then + echo " All simplification tests passed" + echo "" + echo "" +endif + + + + + + +\rm -f plotter wcsconverter simplify testxmlchan diff --git a/ast/ast_tester/brad.map b/ast/ast_tester/brad.map new file mode 100644 index 0000000..d403fce --- /dev/null +++ b/ast/ast_tester/brad.map @@ -0,0 +1,58 @@ +Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates +IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 1 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 1 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = 0.215698 # Shift for axis 1 + End WinMap + MapB = # Second component Mapping + Begin LutMap # Map 1-d coordinates using a lookup table + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Nlut = 11 # Number of lookup table elements + Start = 1 # Input value at first element + Incr = 100 # Input value increment between elements + LutInt = 0 # Interpolation method + L1 = 1.39532005786896 # Lookup table elements... + L2 = 1.50432002544403 + L3 = 1.61332011222839 + L4 = 1.72232007980347 + L5 = 1.83132004737854 + L6 = 1.94032001495361 + L7 = 2.04932022094727 + L8 = 2.15831995010376 + L9 = 2.26732015609741 + L10 = 2.37632012367249 + L11 = 2.48532009124756 + End LutMap + End CmpMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin ZoomMap # Zoom about the origin + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Zoom = 5.23598775598299e-06 # Zoom factor + End ZoomMap + MapB = # Second component Mapping + Begin WcsMap # FITS-WCS sky projection + Nin = 2 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Type = "TAN" # Gnomonic projection + End WcsMap + End CmpMap +End CmpMap diff --git a/ast/ast_tester/brad.simp b/ast/ast_tester/brad.simp new file mode 100644 index 0000000..ffa6e18 --- /dev/null +++ b/ast/ast_tester/brad.simp @@ -0,0 +1,49 @@ + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + Sft1 = -0.215698 # Shift for axis 1 + Scl2 = 5.2359877559829903e-06 # Scale factor for axis 2 + Scl3 = 5.2359877559829903e-06 # Scale factor for axis 3 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + MapA = # First component Mapping + Begin LutMap # Map 1-d coordinates using a lookup table + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Nlut = 11 # Number of lookup table elements + Start = 1 # Input value at first element + Incr = 100 # Input value increment between elements + LutInt = 0 # Interpolation method + L1 = 1.39532005786896 # Lookup table elements... + L2 = 1.5043200254440301 + L3 = 1.61332011222839 + L4 = 1.7223200798034699 + L5 = 1.83132004737854 + L6 = 1.94032001495361 + L7 = 2.0493202209472701 + L8 = 2.1583199501037602 + L9 = 2.2673201560974099 + L10 = 2.3763201236724898 + L11 = 2.4853200912475599 + End LutMap + MapB = # Second component Mapping + Begin WcsMap # FITS-WCS sky projection + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Type = "TAN" # Gnomonic projection + End WcsMap + End CmpMap + End CmpMap diff --git a/ast/ast_tester/car1.attr b/ast/ast_tester/car1.attr new file mode 100644 index 0000000..f74084f --- /dev/null +++ b/ast/ast_tester/car1.attr @@ -0,0 +1 @@ +numlabgap=0.05 diff --git a/ast/ast_tester/car1.box b/ast/ast_tester/car1.box new file mode 100644 index 0000000..09670e6 --- /dev/null +++ b/ast/ast_tester/car1.box @@ -0,0 +1 @@ +0 0 2962 562 diff --git a/ast/ast_tester/car1.fattr b/ast/ast_tester/car1.fattr new file mode 100644 index 0000000..5f408d2 --- /dev/null +++ b/ast/ast_tester/car1.fattr @@ -0,0 +1 @@ +carlin=1 diff --git a/ast/ast_tester/car1.head b/ast/ast_tester/car1.head new file mode 100644 index 0000000..bec8d59 --- /dev/null +++ b/ast/ast_tester/car1.head @@ -0,0 +1,32 @@ +SIMPLE = T / Standard FITS format +BITPIX = 16 / Bits per pixel +NAXIS = 2 / Number of axes +NAXIS1 = 2961 / Number pixels on axis 1 +NAXIS2 = 561 / Number pixels on axis 2 +CTYPE1 = 'GLON-CAR' / axis 1 coord type +CRVAL1 = 1.850000e+02 / coord value at CRPIX1 +CDELT1 = -1.250000e-01 / pixel spacing for axis 1 +CRPIX1 = 1.000000 / ref pixel for axis 1 +CTYPE2 = 'GLAT-CAR' / axis 2 coord type +CRVAL2 = -3.500000e+01 / coord value at CRPIX2 +CDELT2 = 1.250000e-01 / pixel spacing for axis 2 +CRPIX2 = 1.000000 / ref pixel for axis 2 +BSCALE = 2.610167e-02 / real = int*bscale + bzero +BZERO = 8.321995e+02 / +DATAMIN = -6.326761e+00 / minimum real value +DATAMAX = 1.670731e+03 / maximum real value +BLANK = -32768 / missing data flag +COMMENT PARENT DISK FILE: Wco_DHT2001.fits +COMMENT temp =colscales( CHANGE-ME , -185.0000, 185.0000) +COMMENT coords=rowscales( temp, 35.0000, -35.0000) +COMMENT Written by MacFITS +COMMENT Created: Tuesday, 14 August, 2001 01:18:06 PM +COMMENT Whole-Galaxy velocity-integrated CO(1-0) map (Fig. 2) from +COMMENT "The Milky Way in Molecular Clouds: A New Complete CO Survey" +COMMENT T. M. Dame, Dap Hartmann, & P. Thaddeus (2001), ApJ, 547, 792. +COMMENT WARNING: Both the angular resolution and the sensitivity varies +COMMENT from region to region in this map: see Fig. 1 and Table 1 from +COMMENT the paper above. Moment masking and clipping were used as +COMMENT necessary to keep the noise in the map below ~1.5 K km/s. +COMMENT See Section 2.2 for details. +END diff --git a/ast/ast_tester/car2.attr b/ast/ast_tester/car2.attr new file mode 100644 index 0000000..483f747 --- /dev/null +++ b/ast/ast_tester/car2.attr @@ -0,0 +1 @@ +numlabgap(2)=0.05,labelling=interior diff --git a/ast/ast_tester/car2.box b/ast/ast_tester/car2.box new file mode 100644 index 0000000..09670e6 --- /dev/null +++ b/ast/ast_tester/car2.box @@ -0,0 +1 @@ +0 0 2962 562 diff --git a/ast/ast_tester/car2.fattr b/ast/ast_tester/car2.fattr new file mode 100644 index 0000000..5f408d2 --- /dev/null +++ b/ast/ast_tester/car2.fattr @@ -0,0 +1 @@ +carlin=1 diff --git a/ast/ast_tester/car2.head b/ast/ast_tester/car2.head new file mode 100644 index 0000000..bec8d59 --- /dev/null +++ b/ast/ast_tester/car2.head @@ -0,0 +1,32 @@ +SIMPLE = T / Standard FITS format +BITPIX = 16 / Bits per pixel +NAXIS = 2 / Number of axes +NAXIS1 = 2961 / Number pixels on axis 1 +NAXIS2 = 561 / Number pixels on axis 2 +CTYPE1 = 'GLON-CAR' / axis 1 coord type +CRVAL1 = 1.850000e+02 / coord value at CRPIX1 +CDELT1 = -1.250000e-01 / pixel spacing for axis 1 +CRPIX1 = 1.000000 / ref pixel for axis 1 +CTYPE2 = 'GLAT-CAR' / axis 2 coord type +CRVAL2 = -3.500000e+01 / coord value at CRPIX2 +CDELT2 = 1.250000e-01 / pixel spacing for axis 2 +CRPIX2 = 1.000000 / ref pixel for axis 2 +BSCALE = 2.610167e-02 / real = int*bscale + bzero +BZERO = 8.321995e+02 / +DATAMIN = -6.326761e+00 / minimum real value +DATAMAX = 1.670731e+03 / maximum real value +BLANK = -32768 / missing data flag +COMMENT PARENT DISK FILE: Wco_DHT2001.fits +COMMENT temp =colscales( CHANGE-ME , -185.0000, 185.0000) +COMMENT coords=rowscales( temp, 35.0000, -35.0000) +COMMENT Written by MacFITS +COMMENT Created: Tuesday, 14 August, 2001 01:18:06 PM +COMMENT Whole-Galaxy velocity-integrated CO(1-0) map (Fig. 2) from +COMMENT "The Milky Way in Molecular Clouds: A New Complete CO Survey" +COMMENT T. M. Dame, Dap Hartmann, & P. Thaddeus (2001), ApJ, 547, 792. +COMMENT WARNING: Both the angular resolution and the sensitivity varies +COMMENT from region to region in this map: see Fig. 1 and Table 1 from +COMMENT the paper above. Moment masking and clipping were used as +COMMENT necessary to keep the noise in the map below ~1.5 K km/s. +COMMENT See Section 2.2 for details. +END diff --git a/ast/ast_tester/car3.attr b/ast/ast_tester/car3.attr new file mode 100644 index 0000000..b80a7c0 --- /dev/null +++ b/ast/ast_tester/car3.attr @@ -0,0 +1 @@ +grid=1 diff --git a/ast/ast_tester/car3.box b/ast/ast_tester/car3.box new file mode 100644 index 0000000..54240c7 --- /dev/null +++ b/ast/ast_tester/car3.box @@ -0,0 +1 @@ +0 0 400 400 diff --git a/ast/ast_tester/car3.head b/ast/ast_tester/car3.head new file mode 100644 index 0000000..de6c76e --- /dev/null +++ b/ast/ast_tester/car3.head @@ -0,0 +1,8 @@ +CTYPE1 = 'GLON-CAR' +CRVAL1 = 1.850000e+02 +CDELT1 = -1.250000e-01 +CRPIX1 = 200.000000 +CTYPE2 = 'GLAT-CAR' +CRVAL2 = -3.500000e+01 +CDELT2 = 1.250000e-01 +CRPIX2 = 200.000000 diff --git a/ast/ast_tester/car4.attr b/ast/ast_tester/car4.attr new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ast/ast_tester/car4.attr diff --git a/ast/ast_tester/car4.box b/ast/ast_tester/car4.box new file mode 100644 index 0000000..0393b0d --- /dev/null +++ b/ast/ast_tester/car4.box @@ -0,0 +1 @@ +0 0 951 1851 diff --git a/ast/ast_tester/car4.fattr b/ast/ast_tester/car4.fattr new file mode 100644 index 0000000..5f408d2 --- /dev/null +++ b/ast/ast_tester/car4.fattr @@ -0,0 +1 @@ +carlin=1 diff --git a/ast/ast_tester/car4.head b/ast/ast_tester/car4.head new file mode 100644 index 0000000..95cd97a --- /dev/null +++ b/ast/ast_tester/car4.head @@ -0,0 +1,38 @@ +SIMPLE = T / Written by IDL: Thu Apr 27 08:52:27 2000 +BITPIX = -32 / +NAXIS = 2 / +NAXIS1 = 951 / +NAXIS2 = 1851 / +CRPIX1 = 211076.0 / +CRVAL1 = 0.000000000 / +CTYPE1 = 'GLON-CAR' / +CRPIX2 = 475.39400 / +CRVAL2 = 0.000000000 / +CTYPE2 = 'GLAT-CAR' / +CROTA2 = 0.000000000 / +LONPOLE = 0.00000 / Defined by Greisen and Calabretta +CD1_1 = -0.0016666667 / +CD1_2 = 0.00000 / +CD2_1 = 0.00000 / +CD2_2 = 0.0016666667 / +WAVELENG= 8.28000e-06 / Isophotal wavelength in meters +BUNIT = 'W/m^2-sr' / +SECURITY= 'Unclassified' / +TELESCOP= 'MSX ' / +INSTRUME= 'SPIRITIII' / +ORIGIN = 'AFRL-VSBC' / +MJD-OBS = 50295.5 / Mean modified Julian date of observation +DATE = '16/02/2000' / Date of file generation +HISTORY Convert Version 6.2.X +HISTORY Level-2A Deshadow Version 4.0 +HISTORY Level-2A Saturation Correction Version 1.0 +HISTORY Pointing Convert Version 6.0.1 +HISTORY Makeimage Version 3.2 +HISTORY Destriped +HISTORY Data collected in J2000 FK5 coordinates +HISTORY Data samples transformed to Galactic coordinates +HISTORY and convolved onto image grid using sigma=3.0 arcsec +HISTORY Gaussian kernel +HISTORY Master Plate: GP_351.0_+0.0_A.fits +HISTORY Written by IDL: 28-Jan-2000 17:44:54.00 +END diff --git a/ast/ast_tester/car5.attr b/ast/ast_tester/car5.attr new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ast/ast_tester/car5.attr diff --git a/ast/ast_tester/car5.box b/ast/ast_tester/car5.box new file mode 100644 index 0000000..0393b0d --- /dev/null +++ b/ast/ast_tester/car5.box @@ -0,0 +1 @@ +0 0 951 1851 diff --git a/ast/ast_tester/car5.head b/ast/ast_tester/car5.head new file mode 100644 index 0000000..2be3a64 --- /dev/null +++ b/ast/ast_tester/car5.head @@ -0,0 +1,38 @@ +SIMPLE = T / Written by IDL: Thu Apr 27 08:52:27 2000 +BITPIX = -32 / +NAXIS = 2 / +NAXIS1 = 951 / +NAXIS2 = 1851 / +CRPIX1 = -4932.0204 / +CRVAL1 = 0.000000000 / +CTYPE1 = 'GLON-CAR' / +CRPIX2 = 475.39400 / +CRVAL2 = 0.000000000 / +CTYPE2 = 'GLAT-CAR' / +CROTA2 = 0.000000000 / +LONPOLE = 0.00000 / Defined by Greisen and Calabretta +CD1_1 = -0.0016666667 / +CD1_2 = 0.00000 / +CD2_1 = 0.00000 / +CD2_2 = 0.0016666667 / +WAVELENG= 8.28000e-06 / Isophotal wavelength in meters +BUNIT = 'W/m^2-sr' / +SECURITY= 'Unclassified' / +TELESCOP= 'MSX ' / +INSTRUME= 'SPIRITIII' / +ORIGIN = 'AFRL-VSBC' / +MJD-OBS = 50295.5 / Mean modified Julian date of observation +DATE = '16/02/2000' / Date of file generation +HISTORY Convert Version 6.2.X +HISTORY Level-2A Deshadow Version 4.0 +HISTORY Level-2A Saturation Correction Version 1.0 +HISTORY Pointing Convert Version 6.0.1 +HISTORY Makeimage Version 3.2 +HISTORY Destriped +HISTORY Data collected in J2000 FK5 coordinates +HISTORY Data samples transformed to Galactic coordinates +HISTORY and convolved onto image grid using sigma=3.0 arcsec +HISTORY Gaussian kernel +HISTORY Master Plate: GP_351.0_+0.0_A.fits +HISTORY Written by IDL: 28-Jan-2000 17:44:54.00 +END diff --git a/ast/ast_tester/car6.attr b/ast/ast_tester/car6.attr new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ast/ast_tester/car6.attr diff --git a/ast/ast_tester/car6.box b/ast/ast_tester/car6.box new file mode 100644 index 0000000..e5f0493 --- /dev/null +++ b/ast/ast_tester/car6.box @@ -0,0 +1 @@ +0 0 5401 1741 diff --git a/ast/ast_tester/car6.head b/ast/ast_tester/car6.head new file mode 100644 index 0000000..5356fa5 --- /dev/null +++ b/ast/ast_tester/car6.head @@ -0,0 +1,39 @@ +FITS headers in CHIPASS_Equ.fits: +SIMPLE = T / file does conform to FITS standard +BITPIX = -32 / IEEE (big-endian) 32-bit floating point data +NAXIS = 2 / number of data axes +NAXIS1 = 5401 / length of data axis 1 +NAXIS2 = 1741 / length of data axis 2 +EXTEND = T / FITS dataset may contain extensions +COMMENT FITS (Flexible Image Transport System) format is defined in 'Astronomy +COMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H +BUNIT = 'mK ' / Using 438.5 mK/(Jy/beam) plus 3300 mK offset +CTYPE1 = 'RA---CAR' +CRPIX1 = 2701. +CDELT1 = -0.0666666666666667 +CRVAL1 = 180. +CTYPE2 = 'DEC--CAR' +CRPIX2 = 1351. +CDELT2 = 0.0666666666666667 +CRVAL2 = 0. +LONPOLE = 0. / Native longitude of celestial pole +LATPOLE = 90. / Native latitude of celestial pole +RADESYS = 'FK5 ' / Equatorial coordinate system +EQUINOX = 2000.0 / Equinox of equatorial coordinates +BMAJ = 0.24000 / [deg] Beam major axis +BMIN = 0.24000 / [deg] Beam minor axis +BPA = 0.0 / [deg] Beam position angle +FREQENCY= 1.3945E+09 / [Hz] Centre frequency +BANDWID = 6.4E+07 / [Hz] Bandwidth +DATE = '2013-04-20T13:20:39' / file creation date (YYYY-MM-DDThh:mm:ss UT) +COMMENT ------------------------------------------------------------------------ +COMMENT This file contains a 1.4 GHz continuum map of the sky south of dec +26 +COMMENT produced from HIPASS and ZOA data. These surveys were undertaken with +COMMENT the 13-beam multibeam system on the Parkes radio telescope. +COMMENT Details may be found in the following paper: +COMMENT Calabretta, M.R., Staveley-Smith, L., and Barnes, D.G., (2013) +COMMENT PASA (in preparation). +COMMENT ------------------------------------------------------------------------ +COMMENT THIS IS A PRE-PUBLICATION IMAGE, FOR RESTRICTED DISTRIBUTION ONLY +COMMENT ------------------------------------------------------------------------ +END diff --git a/ast/ast_tester/cobe.attr b/ast/ast_tester/cobe.attr new file mode 100644 index 0000000..c1f61e5 --- /dev/null +++ b/ast/ast_tester/cobe.attr @@ -0,0 +1 @@ +format(1)=gd,format(2)=gd,Grid=1,tickall=0,width(axes)=3 diff --git a/ast/ast_tester/cobe.box b/ast/ast_tester/cobe.box new file mode 100644 index 0000000..b4f303e --- /dev/null +++ b/ast/ast_tester/cobe.box @@ -0,0 +1 @@ +10.0 -10.0 300.0 280.0 diff --git a/ast/ast_tester/cobe.head b/ast/ast_tester/cobe.head new file mode 100644 index 0000000..fb6da34 --- /dev/null +++ b/ast/ast_tester/cobe.head @@ -0,0 +1,61 @@ +SIMPLE = T / Written by IDL: 30-Jul-1997 05:35:42.00 +BITPIX = -32 / Bits per pixel. +NAXIS = 2 / Number of dimensions +NAXIS1 = 300 / Length of x axis. +NAXIS2 = 300 / Length of y axis. +CTYPE1 = 'GLON-ZEA' / X-axis type +CTYPE2 = 'GLAT-ZEA' / Y-axis type +CRVAL1 = -149.56866 / Reference pixel value +CRVAL2 = -19.758201 / Reference pixel value +CRPIX1 = 150.500 / Reference pixel +CRPIX2 = 150.500 / Reference pixel +CDELT1 = -1.20000 / Degrees/pixel +CDELT2 = 1.20000 / Degrees/pixel +CROTA1 = 0.00000 / Rotation in degrees. +COMMENT +COMMENT This file was produced by the SkyView survey analysis system from +COMMENT available astronomical surveys. The data are formatted +COMMENT as a simple two-dimensional FITS image with the same units as +COMMENT the orginal survey. A single ASCII table extension may be present +COMMENT which describes catalog objects found within the field of view. +COMMENT Copies of relevant copyright notices are included in this file. +COMMENT +COMMENT Questions should be directed to: +COMMENT +COMMENT scollick@skyview.gsfc.nasa.gov +COMMENT or +COMMENT mcglynn@grossc.gsfc.nasa.gov +COMMENT +COMMENT SkyView +COMMENT Code 668.1 +COMMENT Goddard Space Flight Center, Greenbelt, MD 20771 +COMMENT 301-286-7780 +COMMENT +COMMENT SkyView is supported by NASA ADP grant NAS 5-32068. +COMMENT +SURVEY = 'COBE DIRBE' +BUNITS = 'MJy/sr ' / +ORIGIN = 'CDAC ' / Cosmology Data Analysis Center +TELESCOP= 'COBE ' / COsmic Background Explorer satellite +INSTRUME= 'DIRBE ' / COBE instrument [DIRBE, DMR, FIRAS] +PIXRESOL= 9 / Quad tree pixel resolution [6, 9] +DATE = '27/09/94' / FITS file creation date (dd/mm/yy) +DATE-MAP= '16/09/94' / Date of original file creation (dd/mm/yy) +COMMENT COBE specific keywords +DATE-BEG= '08/12/89' / date of initial data represented (dd/mm/yy) +DATE-END= '25/09/90' / date of final data represented (dd/mm/yy) +COMMENT +COMMENT THE COBE DIRBE map is a combination of the original ten +COMMENT band passes with the following wavelengths: +COMMENT Band 1 - 1.25 microns +COMMENT Band 2 - 2.2 microns +COMMENT Band 3 - 3.5 microns +COMMENT Band 4 - 4.9 microns +COMMENT Band 5 - 12 microns +COMMENT Band 6 - 25 microns +COMMENT Band 7 - 60 microns +COMMENT Band 8 - 100 microns +COMMENT Band 9 - 140 microns +COMMENT Band 10 - 240 microns +COMMENT +END diff --git a/ast/ast_tester/degen1.ast b/ast/ast_tester/degen1.ast new file mode 100644 index 0000000..202f149 --- /dev/null +++ b/ast/ast_tester/degen1.ast @@ -0,0 +1,318 @@ +# +# This FrameSet has 2 axes in the Base (GRID) Frame, but 3 in the Current +# Frame. It is used to test the ability of FitsChan to create degenerate +# WCS axes. It represents the first DEC plane from a WAVE/RA/DEC 3D NDF. +# + Begin FrameSet # Set of inter-related coordinate systems +# Title = "3-d compound coordinate system" # Title of coordinate system +# Naxes = 3 # Number of coordinate axes +# Domain = "CMP" # Coordinate system domain +# Epoch = 2003.0173483725 # Julian epoch of observation +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# Lbl3 = "Wavelength axis with no distortion" # Label for axis 3 +# System = "Compound" # Coordinate system type +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Uni3 = "um " # Units for axis 3 +# Dir1 = 0 # Plot axis 1 in reverse direction + ActUnt = 0 # Unit strings do not affect alignment + IsA Frame # Coordinate system description + Nframe = 4 # Number of Frames in FrameSet +# Base = 1 # Index of base Frame + Currnt = 4 # Index of current Frame + Nnode = 5 # Number of nodes in FrameSet + Nod1 = 3 # Frame 1 is associated with node 3 + Nod2 = 4 # Frame 2 is associated with node 4 + Nod3 = 5 # Frame 3 is associated with node 5 + Nod4 = 2 # Frame 4 is associated with node 2 + Lnk2 = 1 # Node 2 is derived from node 1 + Lnk3 = 1 # Node 3 is derived from node 1 + Lnk4 = 1 # Node 4 is derived from node 1 + Lnk5 = 1 # Node 5 is derived from node 1 + Frm1 = # Frame number 1 + Begin Frame # Coordinate system description + Title = "Data grid indices; first pixel at (1,1)" # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "GRID" # Coordinate system domain +# Lbl1 = "Data grid index 1" # Label for axis 1 +# Lbl2 = "Data grid index 2" # Label for axis 2 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 + ActUnt = 0 # Unit strings do not affect alignment + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Data grid index 1" # Axis Label + Symbol = "g1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Data grid index 2" # Axis Label + Symbol = "g2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm2 = # Frame number 2 + Begin Frame # Coordinate system description + Title = "Pixel coordinates; first pixel at (0.5,0.5)" # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "PIXEL" # Coordinate system domain +# Lbl1 = "Pixel coordinate 1" # Label for axis 1 +# Lbl2 = "Pixel coordinate 2" # Label for axis 2 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 + ActUnt = 0 # Unit strings do not affect alignment + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 1" # Axis Label + Symbol = "p1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 2" # Axis Label + Symbol = "p2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm3 = # Frame number 3 + Begin Frame # Coordinate system description + Title = "Axis coordinates; first pixel at (0.5,0.5)" # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "AXIS" # Coordinate system domain +# Lbl1 = "Axis 1" # Label for axis 1 +# Lbl2 = "Axis 2" # Label for axis 2 + ActUnt = 0 # Unit strings do not affect alignment + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Axis 1" # Axis Label + Symbol = "a1" # Axis symbol + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Axis 2" # Axis Label + Symbol = "a2" # Axis symbol + End Axis + End Frame + Frm4 = # Frame number 4 + Begin CmpFrame # Compound coordinate system description +# Title = "3-d compound coordinate system" # Title of coordinate system +# Naxes = 3 # Number of coordinate axes +# Domain = "CMP" # Coordinate system domain +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# Lbl3 = "Wavelength axis with no distortion" # Label for axis 3 +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Uni3 = "um " # Units for axis 3 +# Dir1 = 0 # Plot axis 1 in reverse direction + ActUnt = 0 # Unit strings do not affect alignment + IsA Frame # Coordinate system description + Axp1 = 3 # Axis 1 permuted to use internal axis 3 + Axp2 = 1 # Axis 2 permuted to use internal axis 1 + Axp3 = 2 # Axis 3 permuted to use internal axis 2 + FrameA = # First component Frame + Begin SkyFrame # Description of celestial coordinate system + Naxes = 2 # Number of coordinate axes + Epoch = 2003.0173483725 # Julian epoch of observation + System = "FK5" # Coordinate system type + ActUnt = 0 # Unit strings do not affect alignment + Ax1 = # Axis number 1 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + Ax2 = # Axis number 2 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + IsA Frame # Coordinate system description + Proj = "gnomonic" # Description of sky projection + Eqnox = 2000 # Julian epoch of mean equinox + End SkyFrame + FrameB = # Second component Frame + Begin Frame # Coordinate system description + Naxes = 1 # Number of coordinate axes + ActUnt = 0 # Unit strings do not affect alignment + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Wavelength axis with no distortion" # Axis Label + Symbol = "WAVE-WAV" # Axis symbol + Unit = "um " # Axis units + End Axis + End Frame + End CmpFrame + Map2 = # Mapping between nodes 1 and 2 + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + Nout = 3 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin PermMap # Coordinate permutation + Nin = 2 # Number of input coordinates + Nout = 3 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Out1 = 1 # Output coordinate 1 = input coordinate 1 + Out2 = 2 # Output coordinate 2 = input coordinate 2 + Out3 = -1 # Output coordinate 3 = constant no. 1 + InCpy = 1 # Input coordinates = output coordinates + Nconst = 1 # Number of constants + Con1 = 1 # Constant number 1 + End PermMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -512.5 # Shift for axis 1 + Sft2 = -480.5 # Shift for axis 2 + Sft3 = -480.5 # Shift for axis 3 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = -0.00109 # Forward matrix value + M1 = 5.84161700642502e-07 # Forward matrix value + M2 = -5.84161700642502e-07 # Forward matrix value + Form = "Diagonal" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WcsMap # FITS-WCS sky projection + Nin = 3 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Type = "TAN" # Gnomonic projection + WcsAx1 = 2 # Index of celestial longitude axis + WcsAx2 = 3 # Index of celestial latitude axis + End WcsMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin PermMap # Coordinate permutation + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Out1 = 2 # Output coordinate 1 = input coordinate 2 + Out2 = 3 # Output coordinate 2 = input coordinate 3 + Out3 = 1 # Output coordinate 3 = input coordinate 1 + In1 = 3 # Input coordinate 1 = output coordinate 3 + In2 = 1 # Input coordinate 2 = output coordinate 1 + In3 = 2 # Input coordinate 3 = output coordinate 2 + End PermMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + Nout = 3 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + End SphMap + MapB = # Second component Mapping + Begin MatrixMap # Matrix transformation + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = 0.0122898607703168 # Forward matrix value + M1 = -0.231781944526882 # Forward matrix value + M2 = -0.972690130264301 # Forward matrix value + M3 = -0.00292831230784838 # Forward matrix value + M4 = -0.972767767862061 # Forward matrix value + M5 = 0.231763445771093 # Forward matrix value + M6 = -0.999920188969737 # Forward matrix value + M7 = 0 # Forward matrix value + M8 = -0.0126339103497717 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + End CmpMap + MapB = # Second component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + End SphMap + End CmpMap + MapB = # Second component Mapping + Begin WinMap # Map one window on to another + Nin = 1 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Sft1 = 1.9534 # Shift for axis 1 + End WinMap + End CmpMap + MapB = # Second component Mapping + Begin PermMap # Coordinate permutation + Nin = 3 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Out1 = 3 # Output coordinate 1 = input coordinate 3 + Out2 = 1 # Output coordinate 2 = input coordinate 1 + Out3 = 2 # Output coordinate 3 = input coordinate 2 + In1 = 2 # Input coordinate 1 = output coordinate 2 + In2 = 3 # Input coordinate 2 = output coordinate 3 + In3 = 1 # Input coordinate 3 = output coordinate 1 + End PermMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + Map3 = # Mapping between nodes 1 and 3 + Begin UnitMap # Unit (null) Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + End UnitMap + Map4 = # Mapping between nodes 1 and 4 + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Sft1 = -0.5 # Shift for axis 1 + Sft2 = -0.5 # Shift for axis 2 + End WinMap + Map5 = # Mapping between nodes 1 and 5 + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Sft1 = -0.5 # Shift for axis 1 + Sft2 = -0.5 # Shift for axis 2 + End WinMap + End FrameSet diff --git a/ast/ast_tester/degen1.fits-wcs b/ast/ast_tester/degen1.fits-wcs new file mode 100644 index 0000000..6e5309d --- /dev/null +++ b/ast/ast_tester/degen1.fits-wcs @@ -0,0 +1,40 @@ +WCSAXES = 3 / Number of WCS axes +CRPIX1 = 1.0 / Reference pixel on axis 1 +CRPIX2 = 480.5 / Reference pixel on axis 2 +CRPIX3 = 480.5 / Reference pixel on axis 3 +CRVAL1 = 2.510935 / Value at ref. pixel on axis 1 +CRVAL2 = 166.59799 / Value at ref. pixel on axis 2 +CRVAL3 = -0.723889 / Value at ref. pixel on axis 3 +CTYPE1 = 'WAVE-WAV' / Wavelength axis with no distortion +CTYPE2 = 'RA---TAN' / Type of co-ordinate on axis 2 +CTYPE3 = 'DEC--TAN' / Type of co-ordinate on axis 3 +CD1_1 = -0.00109 / Transformation matrix element +CD2_2 = 3.347E-5 / Transformation matrix element +CD3_3 = -3.347E-5 / Transformation matrix element +CUNIT1 = 'um ' / Units for axis 1 +MJD-OBS = 52646.586 / Modified Julian Date of observation +DATE-OBS= '2003-01-07T14:03:28.816' / Date of observation +RADESYS = 'FK5 ' / Reference frame for RA/DEC values +EQUINOX = 2000.0 / [yr] Epoch of reference equinox +WCSAXESA= 2 / Number of WCS axes +WCSNAMEA= 'PIXEL ' / Reference name for the coord. frame +CRPIX1A = 1.0 / Reference pixel on axis 1 +CRPIX2A = 1.0 / Reference pixel on axis 2 +CRVAL1A = 0.5 / Value at ref. pixel on axis 1 +CRVAL2A = 0.5 / Value at ref. pixel on axis 2 +CTYPE1A = 'p1 ' / Pixel coordinate 1 +CTYPE2A = 'p2 ' / Pixel coordinate 2 +CD1_1A = 1.0 / Transformation matrix element +CD2_2A = 1.0 / Transformation matrix element +CUNIT1A = 'pixel ' / Units for axis 1 +CUNIT2A = 'pixel ' / Units for axis 2 +WCSAXESB= 2 / Number of WCS axes +WCSNAMEB= 'AXIS ' / Reference name for the coord. frame +CRPIX1B = 1.0 / Reference pixel on axis 1 +CRPIX2B = 1.0 / Reference pixel on axis 2 +CRVAL1B = 0.5 / Value at ref. pixel on axis 1 +CRVAL2B = 0.5 / Value at ref. pixel on axis 2 +CTYPE1B = 'a1 ' / Axis 1 +CTYPE2B = 'a2 ' / Axis 2 +CD1_1B = 1.0 / Transformation matrix element +CD2_2B = 1.0 / Transformation matrix element diff --git a/ast/ast_tester/doplot b/ast/ast_tester/doplot new file mode 100755 index 0000000..f7df1ce --- /dev/null +++ b/ast/ast_tester/doplot @@ -0,0 +1,53 @@ +#!/bin/tcsh + + if( ! $?STARLINK ) then + setenv STARLINK /star + endif + + if( ! $?AST ) then + setenv AST $STARLINK + endif + + if( ! $?LDFLAGS ) then + setenv LDFLAGS "" + endif + + setenv PATH $AST/bin\:$STARLINK/bin\:$PATH + + gfortran -fno-second-underscore -o plotter plotter.f -fno-range-check $LDFLAGS -I$AST/include -I$STARLINK/include -L$AST/lib -L$STARLINK/lib `ast_link -pgp -ems` `pgplot_link` + + set bn = $1 + set n = "${bn}.head" + + set atfile = "${bn}.attr" + if( -e $atfile ) then + set attr1 = `cat $atfile` + else + set attr1 = ' ' + endif + + set atfile = "${bn}.fattr" + if( -e $atfile ) then + set attr2 = `cat $atfile` + else + set attr2 = ' ' + endif + + set boxfile = "${bn}.box" + if( -e $boxfile ) then + set box = `cat $boxfile` + else + set box = ' ' + endif + + + plotter $n "$attr1" "$attr2" a.ps $box + + if( -e $STARLINK/bin/psmerge ) then + $STARLINK/bin/psmerge -t300x300 -r90 a.ps > b.ps + else + cp a.ps b.ps + endif + + gv b.ps -orientation=landscape + diff --git a/ast/ast_tester/dss.ast b/ast/ast_tester/dss.ast new file mode 100644 index 0000000..6c778c4 --- /dev/null +++ b/ast/ast_tester/dss.ast @@ -0,0 +1,166 @@ + Begin FrameSet # Set of inter-related coordinate systems +# Title = "FK5 equatorial coordinates; mean equinox J2000.0; gnomonic polynomial projection" # Title of coordinate system +# Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain +# Epoch = 2000 # Julian epoch of observation +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# System = "FK5" # Coordinate system type +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Dir1 = 0 # Plot axis 1 in reverse direction +# Bot2 = -1.5707963267948966 # Lowest legal axis value +# Top2 = 1.5707963267948966 # Highest legal axis value + IsA Frame # Coordinate system description + Nframe = 2 # Number of Frames in FrameSet + Base = 1 # Index of base Frame + Currnt = 2 # Index of current Frame + Lnk2 = 1 # Node 2 is derived from node 1 + Frm1 = # Frame number 1 + Begin Frame # Coordinate system description + Title = "Pixel Coordinates" # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "GRID" # Coordinate system domain +# Lbl1 = "Pixel axis 1" # Label for axis 1 +# Lbl2 = "Pixel axis 2" # Label for axis 2 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Pixel axis 1" # Axis Label + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Pixel axis 2" # Axis Label + End Axis + End Frame + Frm2 = # Frame number 2 + Begin SkyFrame # Description of celestial coordinate system + Ident = " " # Permanent Object identification string + IsA Object # AST Object +# Title = "FK5 equatorial coordinates; mean equinox J2000.0; gnomonic polynomial projection" # Title of coordinate system + Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain + Epoch = 2000 # Julian epoch of observation +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 + System = "FK5" # Coordinate system type +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Dir1 = 0 # Plot axis 1 in reverse direction +# Bot2 = -1.5707963267948966 # Lowest legal axis value +# Top2 = 1.5707963267948966 # Highest legal axis value + Ax1 = # Axis number 1 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + Ax2 = # Axis number 2 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + IsA Frame # Coordinate system description + Proj = "gnomonic polynomial" # Description of sky projection +# SkyTol = 0.001 # Smallest significant separation [arc-sec] + Eqnox = 2000 # Julian epoch of mean equinox + SRefIs = "Ignored" # Not rotated (ref. pos. is ignored) + SRef1 = 2.8272374655684112 # Ref. pos. RA 10:47:57.3 + SRef2 = -1.0518122540502668 # Ref. pos. Dec -60:15:52 + End SkyFrame + Map2 = # Mapping between nodes 1 and 2 + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -0.3287946560728543 # Shift for axis 1 + Scl1 = -0.00044129690205585437 # Scale factor for axis 1 + Sft2 = 0.38797155568647818 # Shift for axis 2 + Scl2 = 0.00044129690205585437 # Scale factor for axis 2 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WcsMap # FITS-WCS sky projection + Nin = 2 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Type = "TPN" # Gnomonic polynomial projection + PV1_0 = 0.00037777813768480556 # Projection parameter 0 for axis 1 + PV1_1 = 0.018675372165510556 # Projection parameter 1 for axis 1 + PV1_2 = 1.4659181119170556e-05 # Projection parameter 2 for axis 1 + PV1_4 = -5.6541834490241662e-09 # Projection parameter 4 for axis 1 + PV1_5 = -1.6598619578175834e-10 # Projection parameter 5 for axis 1 + PV1_6 = 3.324645548432778e-09 # Projection parameter 6 for axis 1 + PV1_7 = 6.8029375162963896e-10 # Projection parameter 7 for axis 1 + PV1_8 = -1.0315391309210556e-11 # Projection parameter 8 for axis 1 + PV1_9 = 6.5770184096316667e-10 # Projection parameter 9 for axis 1 + PV1_10 = 4.6843790588691666e-11 # Projection parameter 10 for axis 1 + PV1_17 = 0 # Projection parameter 17 for axis 1 + PV1_19 = 0 # Projection parameter 19 for axis 1 + PV1_21 = 0 # Projection parameter 21 for axis 1 + PV2_0 = 0.00020734395690532499 # Projection parameter 0 for axis 2 + PV2_1 = 0.018675089806542779 # Projection parameter 1 for axis 2 + PV2_2 = -1.6578391725152224e-05 # Projection parameter 2 for axis 2 + PV2_4 = -5.1378767937980552e-09 # Projection parameter 4 for axis 2 + PV2_5 = -1.7623932712259446e-09 # Projection parameter 5 for axis 2 + PV2_6 = 2.7161547313251387e-10 # Projection parameter 6 for axis 2 + PV2_7 = 7.088907407099166e-10 # Projection parameter 7 for axis 2 + PV2_8 = 1.8432618513145277e-11 # Projection parameter 8 for axis 2 + PV2_9 = 6.8491061989569442e-10 # Projection parameter 9 for axis 2 + PV2_10 = 7.3325859634708332e-13 # Projection parameter 10 for axis 2 + PV2_17 = 0 # Projection parameter 17 for axis 2 + PV2_19 = 0 # Projection parameter 19 for axis 2 + PV2_21 = 0 # Projection parameter 21 for axis 2 + End WcsMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 0 # Polar longitude (rad.s) + End SphMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = 0.82577216035104439 # Forward matrix value + M1 = -0.30920332196760869 # Forward matrix value + M2 = -0.47169232013396639 # Forward matrix value + M3 = -0.26848851872737706 # Forward matrix value + M4 = -0.95099595460979502 # Forward matrix value + M5 = 0.153364303628268 # Forward matrix value + M6 = -0.49599824042101986 # Forward matrix value + M7 = 0 # Forward matrix value + M8 = -0.86832352582390171 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 2.8272374655684112 # Polar longitude (rad.s) + End SphMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End FrameSet diff --git a/ast/ast_tester/dss.dss b/ast/ast_tester/dss.dss new file mode 100644 index 0000000..c57a035 --- /dev/null +++ b/ast/ast_tester/dss.dss @@ -0,0 +1,58 @@ +CNPIX1 = 1.0 / X corner (pixels) +CNPIX2 = 1.0 / Y corner (pixels) +PPO1 = 0.0 / Orientation co-efficients +PPO2 = 0.0 +PPO3 = -18825.904 +PPO4 = 0.0 +PPO5 = 0.0 +PPO6 = -22216.49 +XPIXELSZ= 25.28445 / X pixel size (microns) +YPIXELSZ= 25.28445 / Y pixel size (microns) +PLTRAH = 10.0 / RA at plate centre +PLTRAM = 47.0 +PLTRAS = 57.30587 +PLTDECD = 60.0 / DEC at plate centre +PLTDECM = 15.0 +PLTDECS = 51.85079 +PLTDECSN= '- ' +PLTSCALE= 67.230832 / Plate scale (arcsec/mm) +AMDX1 = 67.23134 / Plate solution x co-efficients +AMDX2 = 0.052773052 +AMDX3 = 1.3600013 +AMDX4 = -2.035506E-5 +AMDX5 = -5.975503E-7 +AMDX6 = 1.1968724E-5 +AMDX7 = 0.0 +AMDX8 = 2.4490575E-6 +AMDX9 = -3.7135409E-8 +AMDX10 = 2.3677266E-6 +AMDX11 = 1.6863765E-7 +AMDX12 = 0.0 +AMDX13 = 0.0 +AMDX14 = 0.0 +AMDX15 = 0.0 +AMDX16 = 0.0 +AMDX17 = 0.0 +AMDX18 = 0.0 +AMDX19 = 0.0 +AMDX20 = 0.0 +AMDY1 = 67.230323 / Plate solution y co-efficients +AMDY2 = -0.05968221 +AMDY3 = 0.74643824 +AMDY4 = -1.8496356E-5 +AMDY5 = -6.3446158E-6 +AMDY6 = 9.778157E-7 +AMDY7 = 0.0 +AMDY8 = 2.5520067E-6 +AMDY9 = 6.6357427E-8 +AMDY10 = 2.4656782E-6 +AMDY11 = 2.6397309E-9 +AMDY12 = 0.0 +AMDY13 = 0.0 +AMDY14 = 0.0 +AMDY15 = 0.0 +AMDY16 = 0.0 +AMDY17 = 0.0 +AMDY18 = 0.0 +AMDY19 = 0.0 +AMDY20 = 0.0 diff --git a/ast/ast_tester/dss.fits-dss b/ast/ast_tester/dss.fits-dss new file mode 100644 index 0000000..c728dc4 --- /dev/null +++ b/ast/ast_tester/dss.fits-dss @@ -0,0 +1,108 @@ +SIMPLE = T /FITS header +BITPIX = 16 /No.Bits per pixel +NAXIS = 2 /No.dimensions +NAXIS1 = 530 /Length X axis +NAXIS2 = 530 /Length Y axis +EXTEND = T / +DATE = '29/08/02 ' /Date of FITS file creation +ORIGIN = 'CASB -- STScI ' /Origin of FITS image +PLTLABEL= 'V 11596 ' /Observatory plate label +PLATEID = '06A6 ' /GSSS Plate ID +REGION = 'XV128 ' /GSSS Region Name +DATE-OBS= '19/01/87 ' /UT date of Observation +UT = '17:35:00.00 ' /UT time of observation +EPOCH = 1.9870512695313E+03 /Epoch of plate +PLTRAH = 10 /Plate center RA +PLTRAM = 47 / +PLTRAS = 5.7305870000000E+01 / +PLTDECSN= '- ' /Plate center Dec +PLTDECD = 60 / +PLTDECM = 15 / +PLTDECS = 5.1850790000000E+01 / +EQUINOX = 2.0000000000000E+03 /Julian Reference frame equinox +EXPOSURE= 4.0000000000000E+00 /Exposure time minutes +BANDPASS= 6 /GSSS Bandpass code +PLTGRADE= 1 /Plate grade +PLTSCALE= 6.7200000000000E+01 /Plate Scale arcsec per mm +SITELAT = '-31:16:24.00 ' /Latitude of Observatory +SITELONG= '+149:03:42.00 ' /Longitude of Observatory +TELESCOP= 'UK Schmidt (new optics)' /Telescope where plate taken +CNPIX1 = 7696 /X corner (pixels) +CNPIX2 = 7926 /Y corner +DATATYPE= 'INTEGER*2 ' /Type of Data +SCANIMG = 'XV128_06A6_00_00.PIM' /Name of original scan +SCANNUM = 0 /Identifies scan of the plate +DCHOPPED= F /Image repaired for chopping effects +DSHEARED= F /Image repaired for shearing effects +DSCNDNUM= 0 /Identifies descendant of plate scan image +XPIXELSZ= 2.5284450000000E+01 /X pixel size microns +YPIXELSZ= 2.5284450000000E+01 /Y pixel size microns +PPO1 = 0.0000000000000E+00 /Orientation Coefficients +PPO2 = 0.0000000000000E+00 / +PPO3 = 1.7573793885557E+05 / +PPO4 = 0.0000000000000E+00 / +PPO5 = 0.0000000000000E+00 / +PPO6 = 1.7816277576304E+05 / +AMDX1 = 6.7231339795838E+01 /Plate solution x coefficients +AMDX2 = 5.2773052029014E-02 / +AMDX3 = 1.3600012956653E+00 / +AMDX4 = -2.0355060416487E-05 / +AMDX5 = -5.9755030481433E-07 / +AMDX6 = 1.1968723974358E-05 / +AMDX7 = 0.0000000000000E+00 / +AMDX8 = 2.4490575058667E-06 / +AMDX9 = -3.7135408713158E-08 / +AMDX10 = 2.3677266274674E-06 / +AMDX11 = 1.6863764611929E-07 / +AMDX12 = 0.0000000000000E+00 / +AMDX13 = 0.0000000000000E+00 / +AMDX14 = 0.0000000000000E+00 / +AMDX15 = 0.0000000000000E+00 / +AMDX16 = 0.0000000000000E+00 / +AMDX17 = 0.0000000000000E+00 / +AMDX18 = 0.0000000000000E+00 / +AMDX19 = 0.0000000000000E+00 / +AMDX20 = 0.0000000000000E+00 / +AMDY1 = 6.7230323303554E+01 /Plate solution y coefficients +AMDY2 = -5.9682210210548E-02 / +AMDY3 = 7.4643824485917E-01 / +AMDY4 = -1.8496356457673E-05 / +AMDY5 = -6.3446157764134E-06 / +AMDY6 = 9.7781570327705E-07 / +AMDY7 = 0.0000000000000E+00 / +AMDY8 = 2.5520066665557E-06 / +AMDY9 = 6.6357426647323E-08 / +AMDY10 = 2.4656782316245E-06 / +AMDY11 = 2.6397309468495E-09 / +AMDY12 = 0.0000000000000E+00 / +AMDY13 = 0.0000000000000E+00 / +AMDY14 = 0.0000000000000E+00 / +AMDY15 = 0.0000000000000E+00 / +AMDY16 = 0.0000000000000E+00 / +AMDY17 = 0.0000000000000E+00 / +AMDY18 = 0.0000000000000E+00 / +AMDY19 = 0.0000000000000E+00 / +AMDY20 = 0.0000000000000E+00 / + Based on photographic data obtained using The UK Schmidt Telescope. + The UK Schmidt Telescope was operated by the Royal Observatory + Edinburgh, with funding from the UK Science and Engineering Research + Council, until 1988 June, and thereafter by the Anglo-Australian + Observatory. Original plate material is copyright (c) the Royal + Observatory Edinburgh and the Anglo-Australian Observatory. The + plates were processed into the present compressed digital form with + their permission. The Digitized Sky Survey was produced at the Space + Telescope Science Institute under US Government grant NAG W-2166. + + Investigators using these scans are requested to include the above + acknowledgements in any publications. + + Copyright (c) 1993, 1994, Association of Universities for Research in + Astronomy, Inc. All rights reserved. +DATAMAX = 23833 /Maximum data value +DATAMIN = 3673 /Minimum data value +OBJECT = 'data ' /Object ID +OBJCTRA = '10 44 10.340 ' /Object Right Ascension (J2000) +OBJCTDEC= '-59 43 11.40 ' /Object Declination (J2000) +OBJCTX = 7961.96 /Object X on plate (pixels) +OBJCTY = 8191.07 /Object Y on plate (pixels) +END diff --git a/ast/ast_tester/dss.fits-wcs b/ast/ast_tester/dss.fits-wcs new file mode 100644 index 0000000..e9896db --- /dev/null +++ b/ast/ast_tester/dss.fits-wcs @@ -0,0 +1,39 @@ +WCSAXES = 2 / Number of WCS axes +CRPIX1 = -745.0645 / Reference pixel on axis 1 +CRPIX2 = -879.1622 / Reference pixel on axis 2 +CRVAL1 = 161.98877 / Value at ref. pixel on axis 1 +CRVAL2 = -60.264403 / Value at ref. pixel on axis 2 +CTYPE1 = 'RA---TAN' / Type of co-ordinate on axis 1 +CTYPE2 = 'DEC--TAN' / Type of co-ordinate on axis 2 +CD1_1 = -0.02528445 / Transformation matrix element +CD2_2 = 0.02528445 / Transformation matrix element +MJD-OBS = 51544.499 / Modified Julian Date of observation +DATE-OBS= '2000-01-01T11:58:55.816' / Date of observation +QV1_0 = 0.00037777814 / Projection parameter +QV1_1 = 0.018675372 / Projection parameter +QV1_2 = 1.4659181E-5 / Projection parameter +QV1_4 = -5.6541834E-9 / Projection parameter +QV1_5 = -1.659862E-10 / Projection parameter +QV1_6 = 3.3246455E-9 / Projection parameter +QV1_7 = 6.8029375E-10 / Projection parameter +QV1_8 = -1.0315391E-11 / Projection parameter +QV1_9 = 6.5770184E-10 / Projection parameter +QV1_10 = 4.6843791E-11 / Projection parameter +QV1_17 = 0.0 / Projection parameter +QV1_19 = 0.0 / Projection parameter +QV1_21 = 0.0 / Projection parameter +QV2_0 = 0.00020734396 / Projection parameter +QV2_1 = 0.01867509 / Projection parameter +QV2_2 = -1.6578392E-5 / Projection parameter +QV2_4 = -5.1378768E-9 / Projection parameter +QV2_5 = -1.7623933E-9 / Projection parameter +QV2_6 = 2.7161547E-10 / Projection parameter +QV2_7 = 7.0889074E-10 / Projection parameter +QV2_8 = 1.8432619E-11 / Projection parameter +QV2_9 = 6.8491062E-10 / Projection parameter +QV2_10 = 7.332586E-13 / Projection parameter +QV2_17 = 0.0 / Projection parameter +QV2_19 = 0.0 / Projection parameter +QV2_21 = 0.0 / Projection parameter +RADESYS = 'FK5 ' / Reference frame for RA/DEC values +EQUINOX = 2000.0 / [yr] Epoch of reference equinox diff --git a/ast/ast_tester/hpx.attr b/ast/ast_tester/hpx.attr new file mode 100644 index 0000000..496403c --- /dev/null +++ b/ast/ast_tester/hpx.attr @@ -0,0 +1 @@ +border=1 diff --git a/ast/ast_tester/hpx.box b/ast/ast_tester/hpx.box new file mode 100644 index 0000000..8b52762 --- /dev/null +++ b/ast/ast_tester/hpx.box @@ -0,0 +1 @@ +0.5 0.5 300.5 200.5 diff --git a/ast/ast_tester/hpx.head b/ast/ast_tester/hpx.head new file mode 100644 index 0000000..9e82b8e --- /dev/null +++ b/ast/ast_tester/hpx.head @@ -0,0 +1,10 @@ +NAXIS1 = 300 +NAXIS2 = 200 +CTYPE1 = 'GLON-HPX' +CTYPE2 = 'GLAT-HPX' +CRVAL1 = -149.56866 +CRVAL2 = -19.758201 +CRPIX1 = 150.500 +CRPIX2 = 100.500 +CDELT1 = -1.00000 +CDELT2 = 1.00000 diff --git a/ast/ast_tester/joye_car_headers/CAR_model.head b/ast/ast_tester/joye_car_headers/CAR_model.head new file mode 100644 index 0000000..82a7d4e --- /dev/null +++ b/ast/ast_tester/joye_car_headers/CAR_model.head @@ -0,0 +1,47 @@ +FITS headers in CAR_model.fits: +SIMPLE = T / File conforms to NOST standard +BITPIX = -32 / Bits per pixel +NAXIS = 2 / No data is associated with this header +NAXIS1 = 72 / Length of data axis 1 +NAXIS2 = 36 / Length of data axis 2 +EXTEND = T / Extensions may be present +COMMENT FITS (Flexible Image Transport System) format is defined in 'Astronomy +COMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H +CTYPE1 = 'RA---CAR' / RA---%%%, %%% is the projection, e.g., AIT +CRPIX1 = 36.5 / Reference pixel +CRVAL1 = 266.41683 / RA at the reference pixel +CDELT1 = -5. / X-axis incr per pixel at ref pixel (deg) +CUNIT1 = 'deg ' / Physical unit of X-axis +CTYPE2 = 'DEC--CAR' / DEC---%%%, %%% is the projection, e.g., AIT +CRPIX2 = 18.5 / Reference pixel +CRVAL2 = -29.00781 / DEC at the reference pixel +CDELT2 = 5. / Y-axis incr per pixel at ref pixel (deg) +CUNIT2 = 'deg ' / Physical unit of Y-axis +CROTA2 = 0. / Image rotation (deg) +DATE = '2011-03-16T11:50:24' / +TELESCOP= 'GLAST ' / Name of telescope generating data +INSTRUME= 'LAT ' / Name of instrument generating data +EQUINOX = 2000. / Equinox of RA & DEC specifications +CREATOR = 'gtmodel ' / Software creating file +HISTORY $Id: LatCountsMapTemplate,v 1.2 2004/09/24 03:54:20 jc +HISTORY hiang E +CHECKSUM= 'AU2LCU0IAU0IAU0I' / HDU checksum updated 2011-03-16T15:51:49 +DATASUM = '2800807754' / data unit checksum updated 2011-03-16T15:51:49 +DSTYP1 = 'TIME ' +DSUNI1 = 's ' +DSVAL1 = 'TABLE ' +DSREF1 = ':GTI ' +DSTYP2 = 'ENERGY ' +DSUNI2 = 'MeV ' +DSVAL2 = '100:1000' +DSTYP3 = 'EVENT_CLASS' +DSUNI3 = 'dimensionless' +DSVAL3 = '4:4 ' +DSTYP4 = 'ZENITH_ANGLE' +DSUNI4 = 'deg ' +DSVAL4 = '0:105 ' +NDSKEYS = 4 +FILENAME= 'CAR_model.fits' +HISTORY File modified by user 'jsperki1' with fv on 2011-03-16T12:00:29 +HISTORY File modified by user 'jsperki1' with fv on 2011-03-16T12:01:49 +END diff --git a/ast/ast_tester/joye_car_headers/CHIPASS_Equ.head b/ast/ast_tester/joye_car_headers/CHIPASS_Equ.head new file mode 100644 index 0000000..5356fa5 --- /dev/null +++ b/ast/ast_tester/joye_car_headers/CHIPASS_Equ.head @@ -0,0 +1,39 @@ +FITS headers in CHIPASS_Equ.fits: +SIMPLE = T / file does conform to FITS standard +BITPIX = -32 / IEEE (big-endian) 32-bit floating point data +NAXIS = 2 / number of data axes +NAXIS1 = 5401 / length of data axis 1 +NAXIS2 = 1741 / length of data axis 2 +EXTEND = T / FITS dataset may contain extensions +COMMENT FITS (Flexible Image Transport System) format is defined in 'Astronomy +COMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H +BUNIT = 'mK ' / Using 438.5 mK/(Jy/beam) plus 3300 mK offset +CTYPE1 = 'RA---CAR' +CRPIX1 = 2701. +CDELT1 = -0.0666666666666667 +CRVAL1 = 180. +CTYPE2 = 'DEC--CAR' +CRPIX2 = 1351. +CDELT2 = 0.0666666666666667 +CRVAL2 = 0. +LONPOLE = 0. / Native longitude of celestial pole +LATPOLE = 90. / Native latitude of celestial pole +RADESYS = 'FK5 ' / Equatorial coordinate system +EQUINOX = 2000.0 / Equinox of equatorial coordinates +BMAJ = 0.24000 / [deg] Beam major axis +BMIN = 0.24000 / [deg] Beam minor axis +BPA = 0.0 / [deg] Beam position angle +FREQENCY= 1.3945E+09 / [Hz] Centre frequency +BANDWID = 6.4E+07 / [Hz] Bandwidth +DATE = '2013-04-20T13:20:39' / file creation date (YYYY-MM-DDThh:mm:ss UT) +COMMENT ------------------------------------------------------------------------ +COMMENT This file contains a 1.4 GHz continuum map of the sky south of dec +26 +COMMENT produced from HIPASS and ZOA data. These surveys were undertaken with +COMMENT the 13-beam multibeam system on the Parkes radio telescope. +COMMENT Details may be found in the following paper: +COMMENT Calabretta, M.R., Staveley-Smith, L., and Barnes, D.G., (2013) +COMMENT PASA (in preparation). +COMMENT ------------------------------------------------------------------------ +COMMENT THIS IS A PRE-PUBLICATION IMAGE, FOR RESTRICTED DISTRIBUTION ONLY +COMMENT ------------------------------------------------------------------------ +END diff --git a/ast/ast_tester/joye_car_headers/car1.fattr b/ast/ast_tester/joye_car_headers/car1.fattr new file mode 100644 index 0000000..5f408d2 --- /dev/null +++ b/ast/ast_tester/joye_car_headers/car1.fattr @@ -0,0 +1 @@ +carlin=1 diff --git a/ast/ast_tester/joye_car_headers/car1.head b/ast/ast_tester/joye_car_headers/car1.head new file mode 100644 index 0000000..bec8d59 --- /dev/null +++ b/ast/ast_tester/joye_car_headers/car1.head @@ -0,0 +1,32 @@ +SIMPLE = T / Standard FITS format +BITPIX = 16 / Bits per pixel +NAXIS = 2 / Number of axes +NAXIS1 = 2961 / Number pixels on axis 1 +NAXIS2 = 561 / Number pixels on axis 2 +CTYPE1 = 'GLON-CAR' / axis 1 coord type +CRVAL1 = 1.850000e+02 / coord value at CRPIX1 +CDELT1 = -1.250000e-01 / pixel spacing for axis 1 +CRPIX1 = 1.000000 / ref pixel for axis 1 +CTYPE2 = 'GLAT-CAR' / axis 2 coord type +CRVAL2 = -3.500000e+01 / coord value at CRPIX2 +CDELT2 = 1.250000e-01 / pixel spacing for axis 2 +CRPIX2 = 1.000000 / ref pixel for axis 2 +BSCALE = 2.610167e-02 / real = int*bscale + bzero +BZERO = 8.321995e+02 / +DATAMIN = -6.326761e+00 / minimum real value +DATAMAX = 1.670731e+03 / maximum real value +BLANK = -32768 / missing data flag +COMMENT PARENT DISK FILE: Wco_DHT2001.fits +COMMENT temp =colscales( CHANGE-ME , -185.0000, 185.0000) +COMMENT coords=rowscales( temp, 35.0000, -35.0000) +COMMENT Written by MacFITS +COMMENT Created: Tuesday, 14 August, 2001 01:18:06 PM +COMMENT Whole-Galaxy velocity-integrated CO(1-0) map (Fig. 2) from +COMMENT "The Milky Way in Molecular Clouds: A New Complete CO Survey" +COMMENT T. M. Dame, Dap Hartmann, & P. Thaddeus (2001), ApJ, 547, 792. +COMMENT WARNING: Both the angular resolution and the sensitivity varies +COMMENT from region to region in this map: see Fig. 1 and Table 1 from +COMMENT the paper above. Moment masking and clipping were used as +COMMENT necessary to keep the noise in the map below ~1.5 K km/s. +COMMENT See Section 2.2 for details. +END diff --git a/ast/ast_tester/joye_car_headers/car2.fattr b/ast/ast_tester/joye_car_headers/car2.fattr new file mode 100644 index 0000000..5f408d2 --- /dev/null +++ b/ast/ast_tester/joye_car_headers/car2.fattr @@ -0,0 +1 @@ +carlin=1 diff --git a/ast/ast_tester/joye_car_headers/car2.head b/ast/ast_tester/joye_car_headers/car2.head new file mode 100644 index 0000000..bec8d59 --- /dev/null +++ b/ast/ast_tester/joye_car_headers/car2.head @@ -0,0 +1,32 @@ +SIMPLE = T / Standard FITS format +BITPIX = 16 / Bits per pixel +NAXIS = 2 / Number of axes +NAXIS1 = 2961 / Number pixels on axis 1 +NAXIS2 = 561 / Number pixels on axis 2 +CTYPE1 = 'GLON-CAR' / axis 1 coord type +CRVAL1 = 1.850000e+02 / coord value at CRPIX1 +CDELT1 = -1.250000e-01 / pixel spacing for axis 1 +CRPIX1 = 1.000000 / ref pixel for axis 1 +CTYPE2 = 'GLAT-CAR' / axis 2 coord type +CRVAL2 = -3.500000e+01 / coord value at CRPIX2 +CDELT2 = 1.250000e-01 / pixel spacing for axis 2 +CRPIX2 = 1.000000 / ref pixel for axis 2 +BSCALE = 2.610167e-02 / real = int*bscale + bzero +BZERO = 8.321995e+02 / +DATAMIN = -6.326761e+00 / minimum real value +DATAMAX = 1.670731e+03 / maximum real value +BLANK = -32768 / missing data flag +COMMENT PARENT DISK FILE: Wco_DHT2001.fits +COMMENT temp =colscales( CHANGE-ME , -185.0000, 185.0000) +COMMENT coords=rowscales( temp, 35.0000, -35.0000) +COMMENT Written by MacFITS +COMMENT Created: Tuesday, 14 August, 2001 01:18:06 PM +COMMENT Whole-Galaxy velocity-integrated CO(1-0) map (Fig. 2) from +COMMENT "The Milky Way in Molecular Clouds: A New Complete CO Survey" +COMMENT T. M. Dame, Dap Hartmann, & P. Thaddeus (2001), ApJ, 547, 792. +COMMENT WARNING: Both the angular resolution and the sensitivity varies +COMMENT from region to region in this map: see Fig. 1 and Table 1 from +COMMENT the paper above. Moment masking and clipping were used as +COMMENT necessary to keep the noise in the map below ~1.5 K km/s. +COMMENT See Section 2.2 for details. +END diff --git a/ast/ast_tester/joye_car_headers/car3.head b/ast/ast_tester/joye_car_headers/car3.head new file mode 100644 index 0000000..de6c76e --- /dev/null +++ b/ast/ast_tester/joye_car_headers/car3.head @@ -0,0 +1,8 @@ +CTYPE1 = 'GLON-CAR' +CRVAL1 = 1.850000e+02 +CDELT1 = -1.250000e-01 +CRPIX1 = 200.000000 +CTYPE2 = 'GLAT-CAR' +CRVAL2 = -3.500000e+01 +CDELT2 = 1.250000e-01 +CRPIX2 = 200.000000 diff --git a/ast/ast_tester/joye_car_headers/car4.fattr b/ast/ast_tester/joye_car_headers/car4.fattr new file mode 100644 index 0000000..5f408d2 --- /dev/null +++ b/ast/ast_tester/joye_car_headers/car4.fattr @@ -0,0 +1 @@ +carlin=1 diff --git a/ast/ast_tester/joye_car_headers/car4.head b/ast/ast_tester/joye_car_headers/car4.head new file mode 100644 index 0000000..95cd97a --- /dev/null +++ b/ast/ast_tester/joye_car_headers/car4.head @@ -0,0 +1,38 @@ +SIMPLE = T / Written by IDL: Thu Apr 27 08:52:27 2000 +BITPIX = -32 / +NAXIS = 2 / +NAXIS1 = 951 / +NAXIS2 = 1851 / +CRPIX1 = 211076.0 / +CRVAL1 = 0.000000000 / +CTYPE1 = 'GLON-CAR' / +CRPIX2 = 475.39400 / +CRVAL2 = 0.000000000 / +CTYPE2 = 'GLAT-CAR' / +CROTA2 = 0.000000000 / +LONPOLE = 0.00000 / Defined by Greisen and Calabretta +CD1_1 = -0.0016666667 / +CD1_2 = 0.00000 / +CD2_1 = 0.00000 / +CD2_2 = 0.0016666667 / +WAVELENG= 8.28000e-06 / Isophotal wavelength in meters +BUNIT = 'W/m^2-sr' / +SECURITY= 'Unclassified' / +TELESCOP= 'MSX ' / +INSTRUME= 'SPIRITIII' / +ORIGIN = 'AFRL-VSBC' / +MJD-OBS = 50295.5 / Mean modified Julian date of observation +DATE = '16/02/2000' / Date of file generation +HISTORY Convert Version 6.2.X +HISTORY Level-2A Deshadow Version 4.0 +HISTORY Level-2A Saturation Correction Version 1.0 +HISTORY Pointing Convert Version 6.0.1 +HISTORY Makeimage Version 3.2 +HISTORY Destriped +HISTORY Data collected in J2000 FK5 coordinates +HISTORY Data samples transformed to Galactic coordinates +HISTORY and convolved onto image grid using sigma=3.0 arcsec +HISTORY Gaussian kernel +HISTORY Master Plate: GP_351.0_+0.0_A.fits +HISTORY Written by IDL: 28-Jan-2000 17:44:54.00 +END diff --git a/ast/ast_tester/joye_car_headers/car5.head b/ast/ast_tester/joye_car_headers/car5.head new file mode 100644 index 0000000..2be3a64 --- /dev/null +++ b/ast/ast_tester/joye_car_headers/car5.head @@ -0,0 +1,38 @@ +SIMPLE = T / Written by IDL: Thu Apr 27 08:52:27 2000 +BITPIX = -32 / +NAXIS = 2 / +NAXIS1 = 951 / +NAXIS2 = 1851 / +CRPIX1 = -4932.0204 / +CRVAL1 = 0.000000000 / +CTYPE1 = 'GLON-CAR' / +CRPIX2 = 475.39400 / +CRVAL2 = 0.000000000 / +CTYPE2 = 'GLAT-CAR' / +CROTA2 = 0.000000000 / +LONPOLE = 0.00000 / Defined by Greisen and Calabretta +CD1_1 = -0.0016666667 / +CD1_2 = 0.00000 / +CD2_1 = 0.00000 / +CD2_2 = 0.0016666667 / +WAVELENG= 8.28000e-06 / Isophotal wavelength in meters +BUNIT = 'W/m^2-sr' / +SECURITY= 'Unclassified' / +TELESCOP= 'MSX ' / +INSTRUME= 'SPIRITIII' / +ORIGIN = 'AFRL-VSBC' / +MJD-OBS = 50295.5 / Mean modified Julian date of observation +DATE = '16/02/2000' / Date of file generation +HISTORY Convert Version 6.2.X +HISTORY Level-2A Deshadow Version 4.0 +HISTORY Level-2A Saturation Correction Version 1.0 +HISTORY Pointing Convert Version 6.0.1 +HISTORY Makeimage Version 3.2 +HISTORY Destriped +HISTORY Data collected in J2000 FK5 coordinates +HISTORY Data samples transformed to Galactic coordinates +HISTORY and convolved onto image grid using sigma=3.0 arcsec +HISTORY Gaussian kernel +HISTORY Master Plate: GP_351.0_+0.0_A.fits +HISTORY Written by IDL: 28-Jan-2000 17:44:54.00 +END diff --git a/ast/ast_tester/joye_car_headers/cmap_3years_GP_D2.head b/ast/ast_tester/joye_car_headers/cmap_3years_GP_D2.head new file mode 100644 index 0000000..d27e368 --- /dev/null +++ b/ast/ast_tester/joye_car_headers/cmap_3years_GP_D2.head @@ -0,0 +1,162 @@ +FITS headers in cmap_3years_GP_D2.fits: +SIMPLE = T / File conforms to NOST standard +BITPIX = 32 / Bits per pixel +NAXIS = 2 / No data is associated with this header +NAXIS1 = 1800 / Length of data axis 1 +NAXIS2 = 500 / Length of data axis 2 +EXTEND = T / Extensions may be present +COMMENT FITS (Flexible Image Transport System) format is defined in 'Astronomy +COMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H +CTYPE1 = 'GLON-CAR' / RA---%%%, %%% represents the projection method +CRPIX1 = 900.5 / Reference pixel +CRVAL1 = 0. / RA at the reference pixel +CDELT1 = -0.2 / X-axis incr per pixel of physical coord at posi +CUNIT1 = 'deg ' / Physical unit of X-axis +CTYPE2 = 'GLAT-CAR' / DEC---%%%, %%% represents the projection method +CRPIX2 = 250.5 / Reference pixel +CRVAL2 = 0. / DEC at the reference pixel +CDELT2 = 0.2 / Y-axis incr per pixel of physical coord at posi +CUNIT2 = 'deg ' / Physical unit of Y-axis +CROTA2 = 0. / Image rotation (deg) +DATE = '2011-11-18T09:38:44' / file creation date (YYYY-MM-DDThh:mm:ss U +FILENAME= 'cmap_3years_GP_D2.fits' / +TELESCOP= 'GLAST ' / name of telescope generating data +INSTRUME= 'LAT ' / name of instrument generating data +DATE-OBS= '2008-08-04T15:43:37.6089' / start date and time of the observation (U +DATE-END= '2011-07-31T23:59:59.0000' / end date and time of the observation (UTC +TIMEUNIT= 's ' / units for the time related keywords +TIMEZERO= 0. / clock correction +TIMESYS = 'TT ' / type of time system that is used +TIMEREF = 'LOCAL ' / reference frame used for times +CLOCKAPP= F / whether a clock drift correction has been appli +GPS_OUT = F / whether GPS time was unavailable at any time du +NDSKEYS = 5 +EQUINOX = 2000. / Equinox of RA & DEC specifications +OBSERVER= 'Peter Michelson' / GLAST/LAT PI +CREATOR = 'gtbin ' / Software and version creating file +HISTORY LatCountMapTemplate,v 1.3 2005/04/05 21:06:39 peachey +HISTORY Exp +CHECKSUM= 'HG8SH95PHE5PH95P' / HDU checksum updated 2011-11-18T08:38:44 +DATASUM = '3748023 ' / data unit checksum updated 2011-11-18T08:38:44 +DSTYP1 = 'TIME ' +DSUNI1 = 's ' +DSVAL1 = 'TABLE ' +DSREF1 = ':GTI ' +DSTYP2 = 'CONVERSION_TYPE' +DSUNI2 = 'dimensionless' +DSVAL2 = '1:1 ' +DSTYP3 = 'ENERGY ' +DSUNI3 = 'MeV ' +DSVAL3 = '2000:10000' +DSTYP4 = 'EVENT_CLASS' +DSUNI4 = 'dimensionless' +DSVAL4 = '4: ' +DSTYP5 = 'ZENITH_ANGLE' +DSUNI5 = 'deg ' +DSVAL5 = '0:100 ' +HISTORY The following history was copied from input files by gtbin +HISTORY ------------------------------------------------------------------------ +HISTORY BEGIN history copied from ft1_D2_Front.fits[EVENTS] +HISTORY ------------------------------------------------------------------------ +HISTORY Input merit file: /scratch/glastmp/P120-FT1/128/r0240311566_v120_merit.r +HISTORY oot +HISTORY Filter string: (FT1EventClass!=0) && (EvtElapsedTime >= 240311568) && ( +HISTORY EvtElapsedTime <= 240314221) +HISTORY CFITSIO used the following filtering expression to create this table: +HISTORY /scratch/glastmp/P120-FT1/128/foo.fit[EVENTS][gtifilter("/scratch/glastm +HISTORY p/P120-FT1/128/gll_xp_p120_r0240311566_v122.fit_tempgti")] +HISTORY CFITSIO used the following filtering expression to create this table: +HISTORY data/august_08-ft1.fits[EVENTS][100 <= ENERGY && ENERGY <= 1000000 && 4 +HISTORY <= EVENT_CLASS && 0 <= TIME && TIME <= 1000000000 && 0 <= ZENITH_ANGLE & +HISTORY & ZENITH_ANGLE <= 100 && gtifilter()] +HISTORY Filter string: 100 <= ENERGY && ENERGY <= 1000000 && 4 <= EVENT_CLASS && +HISTORY 0 <= TIME && TIME <= 1000000000 && 0 <= ZENITH_ANGLE && ZENITH_ANGLE <= +HISTORY 100 && gtifilter() +HISTORY CFITSIO used the following filtering expression to create this table: +HISTORY data/august_08_z100_ft1.fits[EVENTS][gtifilter("data/august_08-ft1.fits_ +HISTORY rocking_tempgti")] +HISTORY Filter string: 0 <= CONVERSION_TYPE && CONVERSION_TYPE <= 0 && 1000 <= E +HISTORY NERGY && ENERGY <= 5000 && 4 <= EVENT_CLASS && 0 <= TIME && TIME <= 1000 +HISTORY 000000 && 0 <= ZENITH_ANGLE && ZENITH_ANGLE <= 100 && gtifilter() +HISTORY ------------------------------------------------------------------------ +HISTORY END copied history +HISTORY ------------------------------------------------------------------------ +HISTORY ------------------------------------------------------------------------ +HISTORY BEGIN history copied from ft1_D2_Back.fits[EVENTS] +HISTORY ------------------------------------------------------------------------ +HISTORY Input merit file: /scratch/glastmp/P120-FT1/128/r0240311566_v120_merit.r +HISTORY oot +HISTORY Filter string: (FT1EventClass!=0) && (EvtElapsedTime >= 240311568) && ( +HISTORY EvtElapsedTime <= 240314221) +HISTORY CFITSIO used the following filtering expression to create this table: +HISTORY /scratch/glastmp/P120-FT1/128/foo.fit[EVENTS][gtifilter("/scratch/glastm +HISTORY p/P120-FT1/128/gll_xp_p120_r0240311566_v122.fit_tempgti")] +HISTORY CFITSIO used the following filtering expression to create this table: +HISTORY data/august_08-ft1.fits[EVENTS][100 <= ENERGY && ENERGY <= 1000000 && 4 +HISTORY <= EVENT_CLASS && 0 <= TIME && TIME <= 1000000000 && 0 <= ZENITH_ANGLE & +HISTORY & ZENITH_ANGLE <= 100 && gtifilter()] +HISTORY Filter string: 100 <= ENERGY && ENERGY <= 1000000 && 4 <= EVENT_CLASS && +HISTORY 0 <= TIME && TIME <= 1000000000 && 0 <= ZENITH_ANGLE && ZENITH_ANGLE <= +HISTORY 100 && gtifilter() +HISTORY CFITSIO used the following filtering expression to create this table: +HISTORY data/august_08_z100_ft1.fits[EVENTS][gtifilter("data/august_08-ft1.fits_ +HISTORY rocking_tempgti")] +HISTORY Filter string: 1 <= CONVERSION_TYPE && CONVERSION_TYPE <= 1 && 2000 <= E +HISTORY NERGY && ENERGY <= 10000 && 4 <= EVENT_CLASS && 0 <= TIME && TIME <= 100 +HISTORY 0000000 && 0 <= ZENITH_ANGLE && ZENITH_ANGLE <= 100 && gtifilter() +HISTORY ------------------------------------------------------------------------ +HISTORY END copied history +HISTORY ------------------------------------------------------------------------ +END +XTENSION= 'BINTABLE' / Binary table extension +BITPIX = 8 / Bits per pixel +NAXIS = 2 / Required value +NAXIS1 = 16 / Number of bytes per row +NAXIS2 = 17159 / Number of rows +PCOUNT = 0 / Normally 0 (no varying arrays) +GCOUNT = 1 / Required value +TFIELDS = 2 / Number of columns in table +TTYPE1 = 'START ' / Start time of an interval +TFORM1 = 'D ' / Data format of this field +TTYPE2 = 'STOP ' / Stop time of an interval +TFORM2 = 'D ' / Data format of this field +EXTNAME = 'GTI ' / Extension name +TELESCOP= 'GLAST ' / name of telescope generating data +INSTRUME= 'LAT ' / name of instrument generating data +MJDREFI = 51910. / Integer part of MJD corresponding to SC clock s +MJDREFF = '7.428703703703703D-4' / Fractional part of MJD corresponding to SC c +TSTART = 239557418.608944 / mission time of the start of the observation +TSTOP = 333849601. / mission time of the end of the observation +EXPOSURE= 69878014.2344566 / Integration time (in seconds) for the PHA data +HDUCLASS= 'OGIP ' / File format is OGIP standard +HDUCLAS1= 'GTI ' / Contains Good Time Intervals +HDUVERS = '1.2.0 ' / Version of file format +DATE-OBS= '2008-08-04T15:43:37.6089' / start date and time of the observation (U +DATE-END= '2011-07-31T23:59:59.0000' / end date and time of the observation (UTC +TIMEUNIT= 's ' / units for the time related keywords +TIMEZERO= 0. / clock correction +TIMESYS = 'TT ' / type of time system that is used +TIMEREF = 'LOCAL ' / reference frame used for times +CLOCKAPP= F / whether a clock drift correction has been appli +GPS_OUT = F / whether GPS time was unavailable at any time du +CREATOR = 'gtbin ' / Software and version creating file +HISTORY LatCountMapTemplate,v 1.3 2005/04/05 21:06:39 peachey +HISTORY Exp + + + + +TUNIT1 = 's ' / Unit of this field + +TUNIT2 = 's ' / Unit of this field +EXTVER = 1 / auto assigned by template parser +CHECKSUM= 'S4FDU3FBS3FBS3FB' / HDU checksum updated 2011-11-18T08:38:44 +DATASUM = '1639695499' / data unit checksum updated 2011-11-18T08:38:44 +HISTORY The following history was copied from input files by gtbin +HISTORY ------------------------------------------------------------------------ +HISTORY No history available in ft1_D2_Front.fits[GTI] +HISTORY ------------------------------------------------------------------------ +HISTORY ------------------------------------------------------------------------ +HISTORY No history available in ft1_D2_Back.fits[GTI] +HISTORY ------------------------------------------------------------------------ +END diff --git a/ast/ast_tester/joye_car_headers/doit b/ast/ast_tester/joye_car_headers/doit new file mode 100755 index 0000000..a78a590 --- /dev/null +++ b/ast/ast_tester/joye_car_headers/doit @@ -0,0 +1,17 @@ +#!/bin/tcsh + +foreach n (*.head) + set bn = `basename $n .head` + echo "Doing $bn" + + set fat = "${bn}.fattr" + if( -e "$fat" ) then + set fattr = `cat $fat` + else + set fattr = "" + endif + + $HOME/work/ast/fplottest $n ps_l "$fattr" n + mv gks74.ps ${bn}.ps +end + diff --git a/ast/ast_tester/joye_car_headers/total_hi.head b/ast/ast_tester/joye_car_headers/total_hi.head new file mode 100644 index 0000000..2ed691c --- /dev/null +++ b/ast/ast_tester/joye_car_headers/total_hi.head @@ -0,0 +1,35 @@ +SIMPLE = T +BITPIX = -32 +NAXIS = 2 +NAXIS1 = 721 +NAXIS2 = 361 +BUNIT = 'K km/s ' +DATAMAX = 11847.260742187500 +DATAMIN = -368.407501220703 +BZERO = 0.000000000000 +BSCALE = 1.000000000000 +BLANK = -32768 +OBJECT = 'Leiden/Dwingeloo HI Survey; (l,b) total HI' +TELESCOP= 'Dwingeloo 25-m' +OBSERVER= 'Dap Hartmann' +DATE-OBS= '02/09/93' +DATE = '20/01/96' +CTYPE1 = 'GLON-CAR' +CRVAL1 = 360.000000000000 +CRPIX1 = 1 +CDELT1 = -0.500000000000 +CTYPE2 = 'GLAT-CAR' +CRVAL2 = -90.000000000000 +CRPIX2 = 1 +CDELT2 = 0.500000000000 +COMMENT = +-------------------------------------------------------------+ +COMMENT = | (l,b) map, integrated between -450 km/s < V_lsr < +400 km/s | +COMMENT = | To Convert to N_HI, multiply by 1.8224e18 K km s^-1 cm^-2 | +COMMENT = +-------------------------------------------------------------+ +COMMENT = +COMMENT = +-------------------------------------------------+ +COMMENT = | The Leiden/Dwingeloo Survey of HI in the Galaxy | +COMMENT = | Dap Hartmann & W.B.Burton | +COMMENT = | Leiden Observatory | +COMMENT = | Cambridge University Press 1997 | +END diff --git a/ast/ast_tester/longslit.fits-pc b/ast/ast_tester/longslit.fits-pc new file mode 100644 index 0000000..2adf05a --- /dev/null +++ b/ast/ast_tester/longslit.fits-pc @@ -0,0 +1,18 @@ +NAXIS = 3 +NAXIS1 = 1024 +NAXIS2 = 2048 +NAXIS3 = 1 +CRPIX1 = 1 +CRPIX2 = 1024.5 +CRPIX3 = 1 +CDELT1 = 100.0 / delta lambda = 100 nm +CDELT2 = -0.0005555555 / sigma = 2 arcsec +CDELT3 = 1 +CTYPE1 = 'WAVE ' +CTYPE2 = 'RA---ARC' +CTYPE3 = 'DEC--ARC' +CUNIT1 = 'nm ' +CRVAL1 = 1000.0 / Lambda-ref = 1000 nm +CRVAL2 = 150.000 / RA-ref = 150 deg (10:00:00) +CRVAL3 = -35.0 / Dec-ref = -35:00:00 +LONPOLE = 120.0 / rho = 30 degs diff --git a/ast/ast_tester/longslit.fits-wcs b/ast/ast_tester/longslit.fits-wcs new file mode 100644 index 0000000..cff2ca0 --- /dev/null +++ b/ast/ast_tester/longslit.fits-wcs @@ -0,0 +1,22 @@ +NAXIS = 3 +NAXIS1 = 1024 +NAXIS2 = 2048 +NAXIS3 = 1 +CRPIX1 = 1.0 / Reference pixel on axis 1 +CRPIX2 = 1024.5 / Reference pixel on axis 2 +CRPIX3 = 1.0 / Reference pixel on axis 3 +CTYPE1 = 'WAVE ' / Type of co-ordinate on axis 1 +CTYPE2 = 'RA---ARC' / Type of co-ordinate on axis 2 +CTYPE3 = 'DEC--ARC' / Type of co-ordinate on axis 3 +CUNIT1 = 'nm ' / Units for axis 1 +CRVAL1 = 1000.0 / Lambda-ref = 1000 nm +CRVAL2 = 150.0 / RA-ref = 150 deg (10:00:00) +CRVAL3 = -35.0 / Dec-ref = -35:00:00 +LONPOLE = 120.0 / rho = 30 degs +CD1_1 = 100.0 / Transformation matrix element +CD2_2 = -5.555555E-4 / Transformation matrix element +CD3_3 = 1.0 / Transformation matrix element +PV2_3 = 120.0 / Projection parameter +RADESYS = 'ICRS ' / Reference frame for RA/DEC values +SPECSYS = 'HELIOCEN' / Standard of rest for spectral axis +VELOSYS = -20038.807 / [m/s] Topo. apparent velocity of rest frame diff --git a/ast/ast_tester/makeplot b/ast/ast_tester/makeplot new file mode 100755 index 0000000..760fac9 --- /dev/null +++ b/ast/ast_tester/makeplot @@ -0,0 +1,47 @@ +#!/bin/tcsh + +if( "$1" == "" ) then + echo "Usage: makeplot <plot>" + echo " (e.g. makeplot serpens)" + exit +endif + +gfortran -fno-second-underscore -w -g -fno-range-check -o plotter plotter.f \ + -I$GITSTAR/include -L$GITSTAR/lib `ast_link -pgp -ems` `pgplot_link` + +set bn = $1 + +set atfile = "${bn}.attr" +if( -e $atfile ) then + set attr1 = `cat $atfile` +else + set attr1 = ' ' +endif + +set atfile = "${bn}.fattr" +if( -e $atfile ) then + set attr2 = `cat $atfile` +else + set attr2 = ' ' +endif + +set boxfile = "${bn}.box" +if( -e $boxfile ) then + set box = `cat $boxfile` +else + set box = ' ' +endif + + +set psfile = "${bn}-new.ps" +echo "plotter $bn.head '$attr1' '$attr2' a.ps $box" +plotter $bn.head "$attr1" "$attr2" a.ps $box + +if( -e $GITSTAR/bin/psmerge ) then + $GITSTAR/bin/psmerge -t300x300 -r90 a.ps > $psfile +else + cp a.ps $psfile +endif + +gv $psfile -orientation=landscape + diff --git a/ast/ast_tester/maketest b/ast/ast_tester/maketest new file mode 100755 index 0000000..5891121 --- /dev/null +++ b/ast/ast_tester/maketest @@ -0,0 +1,35 @@ +#!/bin/tcsh + +if( "$1" == "" ) then + echo "Usage: maketest <test>" + echo " (e.g. maketest regions)" + exit +endif + +if( ! $?LDFLAGS ) then + setenv LDFLAGS "" +endif + +set a = "test$1" + +echo "Building $a" +if( "$a" == "testplot3d" ) then + gfortran -fno-second-underscore -w -g -fno-range-check $LDFLAGS -o testplot3d testplot3d.f \ + -L$GITSTAR/lib -I$GITSTAR/include \ + `ast_link -ems -pgplot3d` `sla_link` `chr_link` `err_link` + +else if( -e "$a.f" ) then + gfortran -fno-second-underscore -w -g -fno-range-check $LDFLAGS -o $a $a.f -L$GITSTAR/lib -I$GITSTAR/include \ + `ast_link -ems` `chr_link` `err_link` `prm_link` `psx_link` + +else if( -e "$a.c" ) then + gcc -o $a -g $a.c -I.. -DHAVE_CONFIG_H -L$GITSTAR/lib $LDFLAGS `ast_link` + +else + echo "Cannot find $a.f or $a.c" + +endif + +echo "Running $a" +$a + diff --git a/ast/ast_tester/origin.attr b/ast/ast_tester/origin.attr new file mode 100644 index 0000000..277e359 --- /dev/null +++ b/ast/ast_tester/origin.attr @@ -0,0 +1 @@ +format(1)=ghms,format(2)=gdm,edge(2)=r,tickall=0,grid=1 diff --git a/ast/ast_tester/origin.box b/ast/ast_tester/origin.box new file mode 100644 index 0000000..9b5eb80 --- /dev/null +++ b/ast/ast_tester/origin.box @@ -0,0 +1 @@ +0 0 500 500 diff --git a/ast/ast_tester/origin.head b/ast/ast_tester/origin.head new file mode 100644 index 0000000..88ea783 --- /dev/null +++ b/ast/ast_tester/origin.head @@ -0,0 +1,18 @@ +SIMPLE = T / file does conform to FITS standard +BITPIX = 16 / number of bits per data pixel +NAXIS = 2 / number of data axes +NAXIS1 = 500 / length of data axis 1 +NAXIS2 = 500 / length of data axis 2 +EPOCH = 1.977780E+03 / Epoch of observation +RADECSYS= 'ICRS ' / Reference frame for RA/DEC in original file +CRVAL1 = 0.0 / Axis 1 reference value +CRPIX1 = 250 / Axis 1 pixel value +CTYPE1 = 'RA---ARC' / Quantity represented by axis 1 +CRVAL2 = 0.0 / Axis 2 reference value +CRPIX2 = 250 / Axis 2 pixel value +CTYPE2 = 'DEC--ARC' / Quantity represented by axis 2 +CDELT1 = 0.001 / Co-ordinate transformation matrix +CDELT2 = 0.001 / Co-ordinate transformation matrix +EQUINOX = 2.000000E+03 / Julian reference frame equinox + +END diff --git a/ast/ast_tester/plot3d-test1.ast b/ast/ast_tester/plot3d-test1.ast new file mode 100644 index 0000000..271faf1 --- /dev/null +++ b/ast/ast_tester/plot3d-test1.ast @@ -0,0 +1,340 @@ + Begin FrameSet # Set of inter-related coordinate systems +# Title = "3-d compound coordinate system" # Title of coordinate system +# Naxes = 3 # Number of coordinate axes +# Domain = "SKY-DSBSPECTRUM" # Coordinate system domain +# Epoch = 2007.3268594222 # Julian epoch of observation +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# Lbl3 = "Radio velocity (USB)" # Label for axis 3 +# System = "Compound" # Coordinate system type +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Uni3 = "km/s" # Units for axis 3 +# Dir1 = 0 # Plot axis 1 in reverse direction + IsA Frame # Coordinate system description + Nframe = 4 # Number of Frames in FrameSet +# Base = 1 # Index of base Frame + Currnt = 4 # Index of current Frame + Nnode = 5 # Number of nodes in FrameSet + Nod1 = 3 # Frame 1 is associated with node 3 + Nod2 = 4 # Frame 2 is associated with node 4 + Nod3 = 5 # Frame 3 is associated with node 5 + Nod4 = 2 # Frame 4 is associated with node 2 + Lnk2 = 1 # Node 2 is derived from node 1 + Lnk3 = 1 # Node 3 is derived from node 1 + Lnk4 = 1 # Node 4 is derived from node 1 + Lnk5 = 1 # Node 5 is derived from node 1 + Frm1 = # Frame number 1 + Begin Frame # Coordinate system description + Title = "Data grid indices; first pixel at (1,1,1)" # Title of coordinate system + Naxes = 3 # Number of coordinate axes + Domain = "GRID" # Coordinate system domain +# Lbl1 = "Data grid index 1" # Label for axis 1 +# Lbl2 = "Data grid index 2" # Label for axis 2 +# Lbl3 = "Data grid index 3" # Label for axis 3 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 +# Uni3 = "pixel" # Units for axis 3 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Data grid index 1" # Axis Label + Symbol = "g1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Data grid index 2" # Axis Label + Symbol = "g2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax3 = # Axis number 3 + Begin Axis # Coordinate axis + Label = "Data grid index 3" # Axis Label + Symbol = "g3" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm2 = # Frame number 2 + Begin Frame # Coordinate system description + Title = "Pixel coordinates; first pixel at (-77.5,-52.5,-820.5)" # Title of coordinate system + Naxes = 3 # Number of coordinate axes + Domain = "PIXEL" # Coordinate system domain +# Lbl1 = "Pixel coordinate 1" # Label for axis 1 +# Lbl2 = "Pixel coordinate 2" # Label for axis 2 +# Lbl3 = "Pixel coordinate 3" # Label for axis 3 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 +# Uni3 = "pixel" # Units for axis 3 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 1" # Axis Label + Symbol = "p1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 2" # Axis Label + Symbol = "p2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax3 = # Axis number 3 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 3" # Axis Label + Symbol = "p3" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm3 = # Frame number 3 + Begin Frame # Coordinate system description + Title = "Axis coordinates; first pixel at (-77.5,-52.5,-820.5)" # Title of coordinate system + Naxes = 3 # Number of coordinate axes + Domain = "AXIS" # Coordinate system domain +# Lbl1 = "Axis 1" # Label for axis 1 +# Lbl2 = "Axis 2" # Label for axis 2 +# Lbl3 = "Axis 3" # Label for axis 3 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 +# Uni3 = "pixel" # Units for axis 3 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Axis 1" # Axis Label + Symbol = "a1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Axis 2" # Axis Label + Symbol = "a2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax3 = # Axis number 3 + Begin Axis # Coordinate axis + Label = "Axis 3" # Axis Label + Symbol = "a3" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm4 = # Frame number 4 + Begin CmpFrame # Compound coordinate system description +# Title = "3-d compound coordinate system" # Title of coordinate system +# Naxes = 3 # Number of coordinate axes +# Domain = "SKY-DSBSPECTRUM" # Coordinate system domain +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# Lbl3 = "Radio velocity (USB)" # Label for axis 3 +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Uni3 = "km/s" # Units for axis 3 +# Dir1 = 0 # Plot axis 1 in reverse direction + IsA Frame # Coordinate system description + FrameA = # First component Frame + Begin SkyFrame # Description of celestial coordinate system + Naxes = 2 # Number of coordinate axes + Epoch = 2007.3268594222 # Julian epoch of observation + System = "FK5" # Coordinate system type + ObsLat = 0.346026050148997 # Observers geodetic latitude (rads) + ObsLon = -2.71363306946838 # Observers geodetic longitude (rads) + Dut1 = -0.0989801599329792 # UT1-UTC in seconds + Ax1 = # Axis number 1 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + Ax2 = # Axis number 2 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + IsA Frame # Coordinate system description + SRef1 = 4.8432980149123 # Ref. pos. RA 18:30:00.1 + SRef2 = 0.0213067755653197 # Ref. pos. Dec 1:13:15 + End SkyFrame + FrameB = # Second component Frame + Begin DSBSpecFrame # Dual sideband spectral axis + Naxes = 1 # Number of coordinate axes + Epoch = 2007.3268594222 # Julian epoch of observation + System = "VRAD" # Coordinate system type + ObsLat = 0.346026069000144 # Observers geodetic latitude (rads) + ObsLon = -2.71363307300091 # Observers geodetic longitude (rads) + Dut1 = -0.0989801599329792 # UT1-UTC in seconds + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + End Axis + IsA Frame # Coordinate system description + SoR = "LSRK" # Standard of rest + RefRA = 4.84328867428426 # Reference RA (rads, FK5 J2000) + RefDec = 0.0213075607299356 # Reference Dec (rads, FK5 J2000) + RstFrq = 345795989900 # Rest frequency (Hz) + SrcVel = 7000.08172321467 # Source velocity (m/s) + SrcVRF = "LSRK" # Source velocity rest frame + UFreq = "GHz" # Preferred units for frequency + IsA SpecFrame # Description of spectral coordinate system + DSBCen = 345834569302.861 # Central frequency (Hz topo) + IF = -5000001243.89453 # Intermediate frequency (Hz) + SideBn = "USB" # Represents upper sideband + AlSdBn = 1 # Align sidebands? + End DSBSpecFrame + End CmpFrame + Map2 = # Mapping between nodes 1 and 2 + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -78.9102040827274 # Shift for axis 1 + Sft2 = -54.3591836988926 # Shift for axis 2 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 1 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = 346188848728.921 # Shift for axis 1 + Scl1 = -488347.122802699 # Scale factor for axis 1 + End WinMap + MapB = # Second component Mapping + Begin SpecMap # Conversion between spectral coordinate systems + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Nspec = 2 # Number of conversion steps + Spec1 = "FRTOVL" # Convert frequency to rel. velocity + Spec1a = 345795989900 # Rest frequency (Hz) + Spec2 = "VLTOVR" # Convert relativistic to radio velocity + End SpecMap + End CmpMap + End CmpMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 2 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + M0 = 1.49080827566563e-05 # Forward matrix value + M1 = -3.19704866431787e-05 # Forward matrix value + M2 = -3.19704866431787e-05 # Forward matrix value + M3 = -1.49080827566563e-05 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WcsMap # FITS-WCS sky projection + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Type = "TAN" # Gnomonic projection + End WcsMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 0 # Polar longitude (rad.s) + End SphMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 3 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + M0 = 0.00278113801100606 # Forward matrix value + M1 = 0.991443912134338 # Forward matrix value + M2 = 0.130503771451718 # Forward matrix value + M3 = -0.021123653434259 # Forward matrix value + M4 = 0.130533402207093 # Forward matrix value + M5 = -0.9912188568494 # Forward matrix value + M6 = -0.999773002504545 # Forward matrix value + M7 = 0 # Forward matrix value + M8 = 0.0213059490060158 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 4.84329594648948 # Polar longitude (rad.s) + End SphMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + MapB = # Second component Mapping + Begin ZoomMap # Zoom about the origin + Nin = 1 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Zoom = 0.001 # Zoom factor + End ZoomMap + End CmpMap + End CmpMap + Map3 = # Mapping between nodes 1 and 3 + Begin UnitMap # Unit (null) Mapping + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + End UnitMap + Map4 = # Mapping between nodes 1 and 4 + Begin WinMap # Map one window on to another + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + Sft1 = -78.5 # Shift for axis 1 + Sft2 = -53.5 # Shift for axis 2 + Sft3 = -821.5 # Shift for axis 3 + End WinMap + Map5 = # Mapping between nodes 1 and 5 + Begin WinMap # Map one window on to another + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + Sft1 = -78.5 # Shift for axis 1 + Sft2 = -53.5 # Shift for axis 2 + Sft3 = -821.5 # Shift for axis 3 + End WinMap + End FrameSet diff --git a/ast/ast_tester/plotter.f b/ast/ast_tester/plotter.f new file mode 100644 index 0000000..79bb8e1 --- /dev/null +++ b/ast/ast_tester/plotter.f @@ -0,0 +1,230 @@ + PROGRAM PLOTTER + +* Usage: +* PLOTTER <fits file> <attr1> <attr2> <ps file> [<xlo> <ylo> <xhi> <yhi>] + +* Description: +* Plots a standard grid from the specified fits header file, using +* the specified attributes, and sends postscript output to the +* specified ps file. + +* Parameters: +* file file +* A text file containing fits headers. +* attr1 +* A string containg a comma-separated list of attribute +* settings for the Plot. +* attr2 +* A string containg a comma-separated list of attribute +* settings for the FitsChan. +* ps file +* The output postscript file +* xlo ylo xhi yhi +* The bounds within the GRID Frame of the required plot. +* Taken from the FITS headers if not supplied + + + IMPLICIT NONE + INCLUDE 'AST_PAR' + + INTEGER STATUS, FC, FS, NAXIS1, NAXIS2, PL, PGBEG, IARGC, OC + CHARACTER FILE*80, CARD*80, DEVN*80, PSFILE*80, ATTR*255, TEXT*80 + REAL GBOX(4), RANGE, DELTA, ASP + DOUBLE PRECISION PBOX(4) + + STATUS = 0 +* +* Check command line arguments have been supplied. +* + IF( IARGC() .LT. 3 ) THEN + WRITE(*,*) 'Usage: plotter <file file> <attrs> <fattrs> '// + : '<ps file> [<xlo> <ylo> <xhi> <yhi>]' + RETURN + END IF + +* +* Use object caching to minimise allocation of new memory +* + OC = AST_TUNE( 'ObjectCaching', 1, STATUS ) + IF( OC .NE. 0 ) THEN + WRITE(*,'(A,I6)') 'Default ObjectCaching VALUE is ',OC + END IF + + IF( AST_TUNE( 'ObjectCaching', AST__TUNULL, STATUS ) .NE. 1 ) THEN + WRITE(*,'(A,I6)') 'Set ObjectCaching VALUE is ',OC + END IF + +* +* Create a FitsChan to store the FITS headers. +* + CALL GETARG( 3, ATTR ) + FC = AST_FITSCHAN( AST_NULL, AST_NULL, ATTR, STATUS ) + +* +* Open a text file containing a list of FITS headers. +* + CALL GETARG( 1, FILE ) + OPEN( UNIT=10, FILE=FILE, STATUS='OLD' ) + +* +* Read each card out of the text file and store it in the FitsChan. +* + DO WHILE( .TRUE. ) + READ( 10, '(A)', END = 10 ) CARD + CALL AST_PUTFITS( FC, CARD, 0, STATUS ) + END DO + + 10 CLOSE( 10 ) + + +* +* If the base frame box was supplied on the command line, use it. +* + IF( IARGC() .GT. 6 ) THEN + CALL GETARG( 5, TEXT ) + READ( TEXT, * ) PBOX( 1 ) + + CALL GETARG( 6, TEXT ) + READ( TEXT, * ) PBOX( 2 ) + + CALL GETARG( 7, TEXT ) + READ( TEXT, * ) PBOX( 3 ) + + CALL GETARG( 8, TEXT ) + READ( TEXT, * ) PBOX( 4 ) + +* Otherwise use NAXISi keywords in the header. + ELSE + +* +* See if values were supplied for NAXIS1 and NAXIS2. If not assume a value +* of 100 for each. The FitsChan is re-wound before calling AST_FINDFITS so +* that the search starts form the beginning. +* + CALL AST_CLEAR( FC, 'CARD', STATUS ) + IF ( AST_FINDFITS( FC, 'NAXIS1', CARD, .TRUE., STATUS ) ) THEN + READ(CARD(11:),*) NAXIS1 + ELSE + NAXIS1 = 100 + END IF + + CALL AST_CLEAR( FC, 'CARD', STATUS ) + IF ( AST_FINDFITS( FC, 'NAXIS2', CARD, .TRUE., STATUS ) ) THEN + READ(CARD(11:),*) NAXIS2 + ELSE + NAXIS2 = 100 + END IF + + PBOX(1) = 0.5 + PBOX(2) = 0.5 + PBOX(3) = DBLE( NAXIS1 )+0.5 + PBOX(4) = DBLE( NAXIS2 )+0.5 + END IF + +* +* Read an Object from the contents of the FitsChan. This should be a +* FrameSet (this should be tested really, and an error reported if any +* other type of Object is obtained). Re-wind the FitsChan first so that +* its entire contents are read. Note, this is a destructive read, in that +* the cards which are significant to the creation of the FrameSet are +* removed from the FitsChan (this is why NAXIS1 and NAXIS2 are read out +* earlier - just in case they are significant to the FrameSet). Any +* insignificant cards are left as they are. +* + CALL AST_CLEAR( FC, 'CARD', STATUS ) + FS = AST_READ( FC, STATUS ) + + IF( FS .EQ. AST__NULL ) THEN + WRITE(*,*) '!!! No object read from FitsChan!!!' + GO TO 999 + END IF + +* +* If all is OK, start up PGPLOT. +* + IF( STATUS .EQ. 0 ) THEN + CALL GETARG( 4, PSFILE ) + CALL DELETEFILE( PSFILE ) + + DEVN = 'pscol_l;'//PSFILE +c IF( PGBEG( 0, '?', 1, 1 ) .EQ. 1 ) THEN + IF( PGBEG( 0, DEVN, 1, 1 ) .EQ. 1 ) THEN + CALL PGPAGE + CALL PGWNAD( 0.0, 1.0, 0.0, 1.0 ) + +* +* Create the Plot. The pixel coordinates box is +* mapped onto a window which is 10% smaller than the full PGPLOT window. +* This gives some space for things like tick marks with negative length +* (which stick outside the pixel cooridnates box). +* + CALL PGQWIN( GBOX(1), GBOX(3), GBOX(2), GBOX(4) ) + + RANGE = GBOX(3) - GBOX(1) + GBOX(1) = GBOX(1) + 0.05*RANGE + GBOX(3) = GBOX(3) - 0.05*RANGE + + RANGE = GBOX(4) - GBOX(2) + GBOX(2) = GBOX(2) + 0.05*RANGE + GBOX(4) = GBOX(4) - 0.05*RANGE + + ASP = REAL( PBOX(4) - PBOX(2) )/REAL( PBOX(3) - PBOX(1) ) + IF( ASP .LT. 0.05 .OR. ASP .GT. 20 ) ASP = 1.0 + + IF( ASP .GT. 1.0 ) THEN + DELTA = 0.5*( ( GBOX(3) - GBOX(1) ) - + : ( GBOX(4) - GBOX(2) )/ASP ) + GBOX(3) = GBOX(3) - DELTA + GBOX(1) = GBOX(1) + DELTA + ELSE + DELTA = 0.5*( ( GBOX(4) - GBOX(2) ) - + : ASP*( GBOX(3) - GBOX(1) ) ) + GBOX(4) = GBOX(4) - DELTA + GBOX(2) = GBOX(2) + DELTA + END IF + + CALL GETARG( 2, ATTR ) + PL = AST_PLOT( FS, GBOX, PBOX, 'title = A FITS test', + : STATUS ) + CALL AST_SET( PL, ATTR, STATUS ) + +* +* Draw the grid. +* + CALL AST_GRID( PL, STATUS ) + +* +* Annul the Plot, and close PGPLOT. +* + CALL AST_ANNUL( PL, STATUS ) + CALL PGEND + END IF + END IF + +* +* Annul the other objects. +* + CALL AST_ANNUL( FS, STATUS ) + 999 CALL AST_ANNUL( FC, STATUS ) + + END + + +* +* Delete a file if it exists. +* + SUBROUTINE DELETEFILE( FILNAM ) + IMPLICIT NONE + + CHARACTER FILNAM*(*) + LOGICAL EXISTS + + INQUIRE ( FILE = FILNAM, + : EXIST = EXISTS ) + + IF( EXISTS ) THEN + OPEN ( UNIT=10, FILE=FILNAM, STATUS='OLD' ) + CLOSE ( 10, STATUS='DELETE' ) + END IF + + END diff --git a/ast/ast_tester/polco.attr b/ast/ast_tester/polco.attr new file mode 100644 index 0000000..c220287 --- /dev/null +++ b/ast/ast_tester/polco.attr @@ -0,0 +1 @@ +Grid=1,labelling=interior,bottom(1)=0 diff --git a/ast/ast_tester/polco.box b/ast/ast_tester/polco.box new file mode 100644 index 0000000..0661792 --- /dev/null +++ b/ast/ast_tester/polco.box @@ -0,0 +1 @@ +-300 -300 500 500 diff --git a/ast/ast_tester/polco.head b/ast/ast_tester/polco.head new file mode 100644 index 0000000..d953089 --- /dev/null +++ b/ast/ast_tester/polco.head @@ -0,0 +1,86 @@ + +COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST +COMMENT AST Beginning of AST data for FrameSet object AST +COMMENT AST ................................................................ AST +BEGAST_A= 'FrameSet' / Set of inter-related coordinate systems +NFRAME_A= 2 / Number of Frames in FrameSet +CURRNT_A= 2 / Index of current Frame +NOD1_A = 2 / Frame 1 is associated with node 2 +NOD2_A = 1 / Frame 2 is associated with node 1 +LNK2_A = 1 / Node 2 is derived from node 1 +FRM1_A = ' ' / Frame number 1 +BEGAST_B= 'Frame ' / Coordinate system description +TITLE_A = 'Data grid indices; first pixel at (1&'/ Title of coordinate system +CONTINUE '",1) "' +NAXES_A = 2 / Number of coordinate axes +DOMAIN_A= 'GRID ' / Coordinate system domain +AX1_A = ' ' / Axis number 1 +BEGAST_C= 'Axis ' / Coordinate axis +LABEL_A = 'Data grid index 1' / Axis Label +SYMBOL_A= 'g1 ' / Axis symbol +UNIT_A = 'pixel ' / Axis units +FORMAT_A= '%3.1f ' / Format specifier +ENDAST_A= 'Axis ' / End of object definition +AX2_A = ' ' / Axis number 2 +BEGAST_D= 'Axis ' / Coordinate axis +LABEL_B = 'Data grid index 2' / Axis Label +SYMBOL_B= 'g2 ' / Axis symbol +UNIT_B = 'pixel ' / Axis units +FORMAT_B= '%3.1f ' / Format specifier +ENDAST_B= 'Axis ' / End of object definition +ENDAST_C= 'Frame ' / End of object definition +FRM2_A = ' ' / Frame number 2 +BEGAST_E= 'Frame ' / Coordinate system description +TITLE_B = 'Pixel coordinates; first pixel at (-&'/ Title of coordinate system +CONTINUE '100.5,-200.5)' +NAXES_B = 2 / Number of coordinate axes +DOMAIN_B= 'POLAR ' / Coordinate system domain +AX1_B = ' ' / Axis number 1 +BEGAST_F= 'Axis ' / Coordinate axis +LABEL_C = 'Pixel coordinate 1' / Axis Label +SYMBOL_C= 'p1 ' / Axis symbol +UNIT_C = 'pixel ' / Axis units +FORMAT_C= '%3.1f ' / Format specifier +BOTTOM_A= 0.0 / Minimum legal axis value +ENDAST_D= 'Axis ' / End of object definition +AX2_B = ' ' / Axis number 2 +BEGAST_G= 'Axis ' / Coordinate axis +LABEL_D = 'Pixel coordinate 2' / Axis Label +SYMBOL_D= 'p2 ' / Axis symbol +UNIT_D = 'pixel ' / Axis units +FORMAT_D= '%3.1f ' / Format specifier +TOP_A = 3.141592 / Maximum legal axis value +BOTTOM_B= -3.141592 / Minimum legal axis value +ENDAST_E= 'Axis ' / End of object definition +ENDAST_F= 'Frame ' / End of object definition +MAP2_A = ' ' / Mapping between nodes 1 and 2 +BEGAST_H= 'CmpMap ' / Compound Mapping +NIN_A = 2 / Number of input coordinates +ISA_A = 'Mapping ' / Mapping between coordinate systems +INVA_A = 1 / First Mapping used in inverse direction +INVB_A = 1 / Second Mapping used in inverse direction +MAPA_A = ' ' / First component Mapping +BEGAST_I= 'MathMap ' / Transformation using mathematical functions +NIN_B = 2 / Number of input coordinates +INVERT_A= 0 / Mapping not inverted +ISA_B = 'Mapping ' / Mapping between coordinate systems +FWD1_A = 'r=sqrt(x*x+y*y)' / Forward function 1 +FWD2_A = 'theta=atan2(y,x)' / Forward function 2 +INV1_A = 'x=r*cos(theta)' / Inverse function 1 +INV2_A = 'y=r*sin(theta)' / Inverse function 2 +SIMPFI_A= 1 / Forward-inverse pairs may simplify +SIMPIF_A= 1 / Inverse-forward pairs may simplify +ENDAST_G= 'MathMap ' / End of object definition +MAPB_A = ' ' / Second component Mapping +BEGAST_J= 'WinMap ' / Map one window on to another +NIN_C = 2 / Number of input coordinates +INVERT_B= 0 / Mapping not inverted +ISA_C = 'Mapping ' / Mapping between coordinate systems +SFT1_A = -101.5 / Shift for axis 1 +SFT2_A = -201.5 / Shift for axis 2 +ENDAST_H= 'WinMap ' / End of object definition +ENDAST_I= 'CmpMap ' / End of object definition +ENDAST_J= 'FrameSet' / End of object definition +COMMENT AST ................................................................ AST +COMMENT AST End of AST data for FrameSet object AST +COMMENT AST ---------------------------------------------------------------- AST diff --git a/ast/ast_tester/polco2.attr b/ast/ast_tester/polco2.attr new file mode 100644 index 0000000..5019421 --- /dev/null +++ b/ast/ast_tester/polco2.attr @@ -0,0 +1 @@ +Grid=0,labelling=exterior,gap(1)=50 diff --git a/ast/ast_tester/polco2.box b/ast/ast_tester/polco2.box new file mode 100644 index 0000000..0661792 --- /dev/null +++ b/ast/ast_tester/polco2.box @@ -0,0 +1 @@ +-300 -300 500 500 diff --git a/ast/ast_tester/polco2.head b/ast/ast_tester/polco2.head new file mode 100644 index 0000000..d953089 --- /dev/null +++ b/ast/ast_tester/polco2.head @@ -0,0 +1,86 @@ + +COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST +COMMENT AST Beginning of AST data for FrameSet object AST +COMMENT AST ................................................................ AST +BEGAST_A= 'FrameSet' / Set of inter-related coordinate systems +NFRAME_A= 2 / Number of Frames in FrameSet +CURRNT_A= 2 / Index of current Frame +NOD1_A = 2 / Frame 1 is associated with node 2 +NOD2_A = 1 / Frame 2 is associated with node 1 +LNK2_A = 1 / Node 2 is derived from node 1 +FRM1_A = ' ' / Frame number 1 +BEGAST_B= 'Frame ' / Coordinate system description +TITLE_A = 'Data grid indices; first pixel at (1&'/ Title of coordinate system +CONTINUE '",1) "' +NAXES_A = 2 / Number of coordinate axes +DOMAIN_A= 'GRID ' / Coordinate system domain +AX1_A = ' ' / Axis number 1 +BEGAST_C= 'Axis ' / Coordinate axis +LABEL_A = 'Data grid index 1' / Axis Label +SYMBOL_A= 'g1 ' / Axis symbol +UNIT_A = 'pixel ' / Axis units +FORMAT_A= '%3.1f ' / Format specifier +ENDAST_A= 'Axis ' / End of object definition +AX2_A = ' ' / Axis number 2 +BEGAST_D= 'Axis ' / Coordinate axis +LABEL_B = 'Data grid index 2' / Axis Label +SYMBOL_B= 'g2 ' / Axis symbol +UNIT_B = 'pixel ' / Axis units +FORMAT_B= '%3.1f ' / Format specifier +ENDAST_B= 'Axis ' / End of object definition +ENDAST_C= 'Frame ' / End of object definition +FRM2_A = ' ' / Frame number 2 +BEGAST_E= 'Frame ' / Coordinate system description +TITLE_B = 'Pixel coordinates; first pixel at (-&'/ Title of coordinate system +CONTINUE '100.5,-200.5)' +NAXES_B = 2 / Number of coordinate axes +DOMAIN_B= 'POLAR ' / Coordinate system domain +AX1_B = ' ' / Axis number 1 +BEGAST_F= 'Axis ' / Coordinate axis +LABEL_C = 'Pixel coordinate 1' / Axis Label +SYMBOL_C= 'p1 ' / Axis symbol +UNIT_C = 'pixel ' / Axis units +FORMAT_C= '%3.1f ' / Format specifier +BOTTOM_A= 0.0 / Minimum legal axis value +ENDAST_D= 'Axis ' / End of object definition +AX2_B = ' ' / Axis number 2 +BEGAST_G= 'Axis ' / Coordinate axis +LABEL_D = 'Pixel coordinate 2' / Axis Label +SYMBOL_D= 'p2 ' / Axis symbol +UNIT_D = 'pixel ' / Axis units +FORMAT_D= '%3.1f ' / Format specifier +TOP_A = 3.141592 / Maximum legal axis value +BOTTOM_B= -3.141592 / Minimum legal axis value +ENDAST_E= 'Axis ' / End of object definition +ENDAST_F= 'Frame ' / End of object definition +MAP2_A = ' ' / Mapping between nodes 1 and 2 +BEGAST_H= 'CmpMap ' / Compound Mapping +NIN_A = 2 / Number of input coordinates +ISA_A = 'Mapping ' / Mapping between coordinate systems +INVA_A = 1 / First Mapping used in inverse direction +INVB_A = 1 / Second Mapping used in inverse direction +MAPA_A = ' ' / First component Mapping +BEGAST_I= 'MathMap ' / Transformation using mathematical functions +NIN_B = 2 / Number of input coordinates +INVERT_A= 0 / Mapping not inverted +ISA_B = 'Mapping ' / Mapping between coordinate systems +FWD1_A = 'r=sqrt(x*x+y*y)' / Forward function 1 +FWD2_A = 'theta=atan2(y,x)' / Forward function 2 +INV1_A = 'x=r*cos(theta)' / Inverse function 1 +INV2_A = 'y=r*sin(theta)' / Inverse function 2 +SIMPFI_A= 1 / Forward-inverse pairs may simplify +SIMPIF_A= 1 / Inverse-forward pairs may simplify +ENDAST_G= 'MathMap ' / End of object definition +MAPB_A = ' ' / Second component Mapping +BEGAST_J= 'WinMap ' / Map one window on to another +NIN_C = 2 / Number of input coordinates +INVERT_B= 0 / Mapping not inverted +ISA_C = 'Mapping ' / Mapping between coordinate systems +SFT1_A = -101.5 / Shift for axis 1 +SFT2_A = -201.5 / Shift for axis 2 +ENDAST_H= 'WinMap ' / End of object definition +ENDAST_I= 'CmpMap ' / End of object definition +ENDAST_J= 'FrameSet' / End of object definition +COMMENT AST ................................................................ AST +COMMENT AST End of AST data for FrameSet object AST +COMMENT AST ---------------------------------------------------------------- AST diff --git a/ast/ast_tester/regression.current b/ast/ast_tester/regression.current new file mode 100644 index 0000000..788c2bc --- /dev/null +++ b/ast/ast_tester/regression.current @@ -0,0 +1,7583 @@ + Begin FitsChan # I/O channels to FITS files + Card = 1 # Index of current card +# Encod = "NATIVE" # Encoding system +# FitsDg = 15 # No. of digits for floating point values +# DfB1950 = 1 # Default to FK4 B1950 +# CdMat = 0 # Use PC matrix +# CarLin = 0 # Use full FITS-WCS CAR projections +# Iwc = 0 # Do not include an IWC Frame +# Warn = "Tnx Zpx BadCel BadMat BadCTYPE" # Warnings to be reported + Nm1 = "NAXIS" # FITS keyword name + Ty1 = "integer" # FITS keyword data type + Dt1 = 1 # FITS keyword value + Nm2 = "NAXIS1" # FITS keyword name + Ty2 = "integer" # FITS keyword data type + Dt2 = 100 # FITS keyword value + Nm3 = "CTYPE1" # FITS keyword name + Ty3 = "string" # FITS keyword data type + Dt3 = "fred" # FITS keyword value + Nm4 = "CDELT1" # FITS keyword name + Ty4 = "floating point" # FITS keyword data type + Dt4 = 0 # FITS keyword value + Nm5 = "CRPIX1" # FITS keyword name + Ty5 = "integer" # FITS keyword data type + Dt5 = 50 # FITS keyword value + Nm6 = "CUNIT1" # FITS keyword name + Ty6 = "string" # FITS keyword data type + Dt6 = "GHz" # FITS keyword value + Nm7 = " " # FITS keyword name + Ty7 = "comment" # FITS keyword data type + End FitsChan + Begin FrameSet # Set of inter-related coordinate systems +# Title = "IAU (1958) galactic coordinates; zenithal equal area projection" # Title of coordinate system +# Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain +# Epoch = 1950 # Besselian epoch of observation +# Lbl1 = "Galactic longitude" # Label for axis 1 +# Lbl2 = "Galactic latitude" # Label for axis 2 +# System = "GALACTIC" # Coordinate system type +# Uni1 = "degrees" # Units for axis 1 +# Uni2 = "degrees" # Units for axis 2 +# Bot2 = -1.5707963267949 # Lowest legal axis value +# Top2 = 1.5707963267949 # Highest legal axis value + IsA Frame # Coordinate system description + Nframe = 2 # Number of Frames in FrameSet + Base = 1 # Index of base Frame + Currnt = 2 # Index of current Frame + Lnk2 = 1 # Node 2 is derived from node 1 + Frm1 = # Frame number 1 + Begin Frame # Coordinate system description + Title = "Pixel Coordinates" # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "GRID" # Coordinate system domain +# Lbl1 = "Pixel axis 1" # Label for axis 1 +# Lbl2 = "Pixel axis 2" # Label for axis 2 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Pixel axis 1" # Axis Label + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Pixel axis 2" # Axis Label + End Axis + End Frame + Frm2 = # Frame number 2 + Begin SkyFrame # Description of celestial coordinate system + Ident = " " # Permanent Object identification string + IsA Object # AST Object +# Title = "IAU (1958) galactic coordinates; zenithal equal area projection" # Title of coordinate system + Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain + Epoch = 1950 # Besselian epoch of observation +# Lbl1 = "Galactic longitude" # Label for axis 1 +# Lbl2 = "Galactic latitude" # Label for axis 2 + System = "GALACTIC" # Coordinate system type +# Uni1 = "degrees" # Units for axis 1 +# Uni2 = "degrees" # Units for axis 2 +# Bot2 = -1.5707963267949 # Lowest legal axis value +# Top2 = 1.5707963267949 # Highest legal axis value + Ax1 = # Axis number 1 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + Ax2 = # Axis number 2 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + IsA Frame # Coordinate system description + Proj = "zenithal equal area" # Description of sky projection + SRefIs = "Ignored" # Not rotated (ref. pos. is ignored) + SRef1 = -2.61046557479594 # Ref. pos. l -149.5687 + SRef2 = -0.344845661720836 # Ref. pos. b -19.7582 + End SkyFrame + Map2 = # Mapping between nodes 1 and 2 + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -150.5 # Shift for axis 1 + Sft2 = -150.5 # Shift for axis 2 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = -0.020943951023932 # Forward matrix value + M1 = 0.020943951023932 # Forward matrix value + Form = "Diagonal" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WcsMap # FITS-WCS sky projection + Nin = 2 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Type = "ZEA" # Zenithal equal area projection + End WcsMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 0 # Polar longitude (rad.s) + End SphMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = 0.291480364581799 # Forward matrix value + M1 = 0.506505471460186 # AST version 4.2- 1 +PutCards Ncards = 7 +PutCards Card = 1 +PutCards Card = 8 +PutCards Ncards = 7 +PutCards Card = 1 + + + + + FITS test number 1 + ==================== + + + +AST_SHOW: + +REG_SINK: +SIMPLE = T / Written by IDL: 30-Jul-1997 05:35:42.00 +BITPIX = -32 / Bits per pixel. +NAXIS = 2 / Number of dimensions +NAXIS1 = 300 / Length of x axis. +NAXIS2 = 300 / Length of y axis. +COMMENT +COMMENT This file was produced by the SkyView survey analysis system from +COMMENT available astronomical surveys. The data are formatted +COMMENT as a simple two-dimensional FITS image with the same units as +COMMENT the orginal survey. A single ASCII table extension may be present +COMMENT which describes catalog objects found within the field of view. +COMMENT Copies of relevant copyright notices are included in this file. +COMMENT +COMMENT Questions should be directed to: +COMMENT +COMMENT scollick@skyview.gsfc.nasa.gov +COMMENT or +COMMENT mcglynn@grossc.gsfc.nasa.gov +COMMENT +COMMENT SkyView +COMMENT Code 668.1 +COMMENT Goddard Space Flight Center, Greenbelt, MD 20771 +COMMENT 301-286-7780 +COMMENT +COMMENT SkyView is supported by NASA ADP grant NAS 5-32068. +COMMENT +SURVEY = 'COBE DIRBE' +BUNITS = 'MJy/sr ' +ORIGIN = 'CDAC ' / Cosmology Data Analysis Center +TELESCOP= 'COBE ' / COsmic Background Explorer satellite +INSTRUME= 'DIRBE ' / COBE instrument [DIRBE, DMR, FIRAS] +PIXRESOL= 9 / Quad tree pixel resolution [6, 9] +DATE = '27/09/94' / FITS file creation date (dd/mm/yy) +DATE-MAP= '16/09/94' / Date of original file creation (dd/mm/yy) +COMMENT COBE specific keywords +DATE-BEG= '08/12/89' / date of initial data represented (dd/mm/yy) +DATE-END= '25/09/90' / date of final data represented (dd/mm/yy) +COMMENT +COMMENT THE COBE DIRBE map is a combination of the original ten +COMMENT band passes with the following wavelengths: +COMMENT Band 1 - 1.25 microns +COMMENT Band 2 - 2.2 microns +COMMENT Band 3 - 3.5 microns +COMMENT Band 4 - 4.9 microns +COMMENT Band 5 - 12 microns +COMMENT Band 6 - 25 microns +COMMENT Band 7 - 60 microns +COMMENT Band 8 - 100 microns +COMMENT Band 9 - 140 microns +COMMENT Band 10 - 240 microns +COMMENT + +Objects written: 1 + +Native Encoding: + +COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST +COMMENT AST WCS information in AST format AST +COMMENT AST See http://www.starlink.ac.uk/ast/ AST +COMMENT AST Beginning of AST data for FrameSet object AST +COMMENT AST ................................................................ AST +BEGAST_A= 'FrameSet' / Set of inter-related coordinate systems +NFRAME_A= 2 / Number of Frames in FrameSet +BASE_A = 1 / Index of base Frame +CURRNT_A= 2 / Index of current Frame +LNK2_A = 1 / Node 2 is derived from node 1 +FRM1_A = ' ' / Frame number 1 +BEGAST_B= 'Frame ' / Coordinate system description +TITLE_A = 'Pixel Coordinates' / Title of coordinate system +NAXES_A = 2 / Number of coordinate axes +DOMAIN_A= 'GRID ' / Coordinate system domain +AX1_A = ' ' / Axis number 1 +BEGAST_C= 'Axis ' / Coordinate axis +LABEL_A = 'Pixel axis 1' / Axis Label +ENDAST_A= 'Axis ' / End of object definition +AX2_A = ' ' / Axis number 2 +BEGAST_D= 'Axis ' / Coordinate axis +LABEL_B = 'Pixel axis 2' / Axis Label +ENDAST_B= 'Axis ' / End of object definition +ENDAST_C= 'Frame ' / End of object definition +FRM2_A = ' ' / Frame number 2 +BEGAST_E= 'SkyFrame' / Description of celestial coordinate system +IDENT_A = '" " ' / Permanent Object identification string +ISA_A = 'Object ' / AST Object +NAXES_B = 2 / Number of coordinate axes +EPOCH_A = 1950.0 / Besselian epoch of observation +SYSTEM_A= 'GALACTIC' / Coordinate system type +AX1_B = ' ' / Axis number 1 +BEGAST_F= 'SkyAxis ' / Celestial coordinate axis +ENDAST_D= 'SkyAxis ' / End of object definition +AX2_B = ' ' / Axis number 2 +BEGAST_G= 'SkyAxis ' / Celestial coordinate axis +ENDAST_E= 'SkyAxis ' / End of object definition +ISA_B = 'Frame ' / Coordinate system description +PROJ_A = 'zenithal equal area'/ Description of sky projection +SREFIS_A= 'Ignored ' / Not rotated (ref. pos. is ignored) +SREF1_A = -2.61046557479594 / Ref. pos. l -149.5687 +SREF2_A = -0.344845661720836 / Ref. pos. b -19.7582 +ENDAST_F= 'SkyFrame' / End of object definition +MAP2_A = ' ' / Mapping between nodes 1 and 2 +BEGAST_H= 'CmpMap ' / Compound Mapping +NIN_A = 2 / Number of input coordinates +ISSIMP_A= 1 / Mapping has been simplified +ISA_C = 'Mapping ' / Mapping between coordinate systems +MAPA_A = ' ' / First component Mapping +BEGAST_I= 'WinMap ' / Map one window on to another +NIN_B = 2 / Number of input coordinates +INVERT_A= 0 / Mapping not inverted +ISA_D = 'Mapping ' / Mapping between coordinate systems +SFT1_A = -150.5 / Shift for axis 1 +SFT2_A = -150.5 / Shift for axis 2 +ENDAST_G= 'WinMap ' / End of object definition +MAPB_A = ' ' / Second component Mapping +BEGAST_J= 'CmpMap ' / Compound Mapping +NIN_C = 2 / Number of input coordinates +ISA_E = 'Mapping ' / Mapping between coordinate systems +MAPA_B = ' ' / First component Mapping +BEGAST_K= 'MatrixMap' / Matrix transformation +NIN_D = 2 / Number of input coordinates +INVERT_B= 0 / Mapping not inverted +ISA_F = 'Mapping ' / Mapping between coordinate systems +M0_A = -0.020943951023932 / Forward matrix value +M1_A = 0.020943951023932 / Forward matrix value +FORM_A = 'Diagonal' / Matrix storage form +ENDAST_H= 'MatrixMap' / End of object definition +MAPB_B = ' ' / Second component Mapping +BEGAST_L= 'CmpMap ' / Compound Mapping +NIN_E = 2 / Number of input coordinates +ISA_G = 'Mapping ' / Mapping between coordinate systems +INVA_A = 1 / First Mapping used in inverse direction +MAPA_C = ' ' / First component Mapping +BEGAST_M= 'WcsMap ' / FITS-WCS sky projection +NIN_F = 2 / Number of input coordinates +INVERT_C= 1 / Mapping inverted +ISA_H = 'Mapping ' / Mapping between coordinate systems +TYPE_A = 'ZEA ' / Zenithal equal area projection +ENDAST_I= 'WcsMap ' / End of object definition +MAPB_C = ' ' / Second component Mapping +BEGAST_N= 'CmpMap ' / Compound Mapping +NIN_G = 2 / Number of input coordinates +ISA_I = 'Mapping ' / Mapping between coordinate systems +INVA_B = 1 / First Mapping used in inverse direction +MAPA_D = ' ' / First component Mapping +BEGAST_O= 'SphMap ' / Cartesian to Spherical mapping +NIN_H = 3 / Number of input coordinates +NOUT_A = 2 / Number of output coordinates +INVERT_D= 1 / Mapping inverted +ISA_J = 'Mapping ' / Mapping between coordinate systems +UNTRD_A = 1 / All input vectors have unit length +PLRLG_A = 0.0 / Polar longitude (rad.s) +ENDAST_J= 'SphMap ' / End of object definition +MAPB_D = ' ' / Second component Mapping +BEGAST_P= 'CmpMap ' / Compound Mapping +NIN_I = 3 / Number of input coordinates +NOUT_B = 2 / Number of output coordinates +ISA_K = 'Mapping ' / Mapping between coordinate systems +MAPA_E = ' ' / First component Mapping +BEGAST_Q= 'MatrixMap' / Matrix transformation +NIN_J = 3 / Number of input coordinates +INVERT_E= 0 / Mapping not inverted +ISA_L = 'Mapping ' / Mapping between coordinate systems +M0_B = 0.291480364581799 / Forward matrix value +M1_B = 0.506505471460186 / Forward matrix value +M2_A = -0.811474832908671 / Forward matrix value +M3_A = 0.171224898552328 / Forward matrix value +M4_A = -0.862236746712233 / Forward matrix value +M5_A = -0.476686298035564 / Forward matrix value +M6_A = -0.941127638091139 / Forward matrix value +M7_A = 0.0 / Forward matrix value +M8_A = -0.338051429254475 / Forward matrix value +FORM_B = 'Full ' / Matrix storage form +ENDAST_K= 'MatrixMap' / End of object definition +MAPB_E = ' ' / Second component Mapping +BEGAST_R= 'SphMap ' / Cartesian to Spherical mapping +NIN_K = 3 / Number of input coordinates +NOUT_C = 2 / Number of output coordinates +INVERT_F= 0 / Mapping not inverted +ISA_M = 'Mapping ' / Mapping between coordinate systems +UNTRD_B = 1 / All input vectors have unit length +PLRLG_B = -2.61046557479594 / Polar longitude (rad.s) +ENDAST_L= 'SphMap ' / End of object definition +ENDAST_M= 'CmpMap ' / End of object definition +ENDAST_N= 'CmpMap ' / End of object definition +ENDAST_O= 'CmpMap ' / End of object definition +ENDAST_P= 'CmpMap ' / End of object definition +ENDAST_Q= 'CmpMap ' / End of object definition +ENDAST_R= 'FrameSet' / End of object definition +COMMENT AST ................................................................ AST +COMMENT AST End of AST data for FrameSet object AST +COMMENT AST ---------------------------------------------------------------- AST + +ATTRIBUTES: + Colour(axis1) : 1 + Font(Stri) : 1 + Nout : 1 + Class : 4 + Tol : 0.100000E-01 + Gap(1) : 1.04720 + Border : 0 + Invert : 0 + TextLabGap : 0.100000E-01 + Nin : 2 + Current : 3 + Base : 1 + Nobject : 1 + RefCOUNT : 1 + +AST_GRID: +REG_LINE: 15 + 25.4 -29.7 + 20.1 -16.6 + 15.4 -2.03 + 11.5 13.7 + 8.35 30.3 + 5.92 47.5 + 4.25 65.0 + 3.39 82.6 + 3.35 100. + 4.19 117. + 5.99 133. + 8.83 149. + 12.9 163. + 18.3 175. + 25.4 185. +REG_LINE: 119 + 25.4 -29.7 + 24.6 -29.7 + 23.8 -29.7 + 22.9 -29.6 + 22.1 -29.5 + 21.3 -29.5 + 20.4 -29.3 + 19.6 -29.2 + 18.8 -29.0 + 17.9 -28.9 + 17.1 -28.7 + 16.3 -28.5 + 15.5 -28.2 + 14.6 -28.0 + 13.8 -27.7 + 13.0 -27.4 + 12.2 -27.1 + 11.4 -26.7 + 10.6 -26.4 + 9.74 -26.0 + 8.93 -25.6 + 8.12 -25.2 + 7.32 -24.8 + 6.52 -24.3 + 5.73 -23.9 + 4.93 -23.4 + 4.14 -22.9 + 3.35 -22.3 + 2.57 -21.8 + 1.79 -21.2 + 1.02 -20.6 + .247 -20.0 + -.520 -19.4 + -1.28 -18.8 + -2.04 -18.1 + -2.79 -17.4 + -3.54 -16.7 + -4.29 -16.0 + -5.02 -15.3 + -5.76 -14.5 + -6.49 -13.7 + -7.21 -12.9 + -7.92 -12.1 + -17.3 1.12 + -25.1 17.7 + -31.1 37.2 + -34.6 59.1 + -35.4 82.8 + -33.1 107. + -32.8 109. + -32.5 111. + -32.2 112. + -31.9 114. + -31.5 116. + -31.1 117. + -30.7 119. + -30.3 121. + -29.9 123. + -29.4 124. + -28.9 126. + -28.5 128. + -27.9 129. + -27.4 131. + -26.9 132. + -26.3 134. + -25.7 136. + -25.2 137. + -24.5 139. + -23.9 140. + -23.3 142. + -22.6 143. + -21.9 145. + -21.2 146. + -20.5 148. + -19.8 149. + -19.0 151. + -18.2 152. + -17.5 154. + -16.7 155. + -15.8 156. + -15.0 158. + -14.2 159. + -13.3 160. + -12.4 162. + -11.5 163. + -10.6 164. + -9.69 165. + -8.75 166. + -7.80 167. + -6.83 168. + -5.85 170. + -4.86 171. + -3.85 172. + -2.83 172. + -1.80 173. + -.761 174. + .293 175. + 1.36 176. + 2.43 177. + 3.52 178. + 4.61 178. + 5.72 179. + 6.83 180. + 7.95 180. + 9.08 181. + 10.2 181. + 11.4 182. + 12.5 182. + 13.7 183. + 14.8 183. + 16.0 184. + 17.2 184. + 18.3 184. + 19.5 184. + 20.7 185. + 21.9 185. + 23.1 185. + 24.3 185. + 25.4 185. +REG_LINE: 171 + 25.4 -29.7 + 19.1 -40.9 + 11.9 -49.9 + 11.3 -50.4 + 10.8 -50.9 + 10.2 -51.4 + 9.62 -51.9 + 9.04 -52.4 + 8.46 -52.8 + 7.87 -53.3 + 7.28 -53.7 + 6.68 -54.1 + 6.07 -54.5 + 5.46 -54.9 + 4.84 -55.2 + 4.21 -55.6 + 3.58 -55.9 + 2.95 -56.2 + 2.30 -56.5 + 1.65 -56.7 + .990 -56.9 + .325 -57.2 + -.348 -57.3 + -1.03 -57.5 + -1.71 -57.7 + -2.41 -57.8 + -3.11 -57.9 + -3.82 -57.9 + -4.54 -58.0 + -5.27 -58.0 + -6.00 -58.0 + -6.74 -58.0 + -7.50 -57.9 + -8.26 -57.8 + -9.03 -57.7 + -9.80 -57.5 + -10.6 -57.3 + -11.4 -57.1 + -12.2 -56.8 + -13.0 -56.5 + -13.8 -56.2 + -14.7 -55.8 + -15.5 -55.4 + -16.4 -55.0 + -17.2 -54.5 + -18.1 -53.9 + -19.0 -53.4 + -19.9 -52.7 + -20.8 -52.0 + -21.7 -51.3 + -22.6 -50.5 + -23.6 -49.7 + -24.5 -48.8 + -25.5 -47.8 + -26.4 -46.8 + -27.4 -45.7 + -28.4 -44.5 + -29.4 -43.3 + -30.4 -42.0 + -31.4 -40.6 + -32.4 -39.1 + -33.5 -37.6 + -34.5 -36.0 + -35.5 -34.3 + -36.6 -32.5 + -37.6 -30.5 + -38.7 -28.5 + -39.7 -26.4 + -40.8 -24.2 + -41.8 -21.9 + -42.8 -19.5 + -43.9 -16.9 + -44.9 -14.2 + -45.9 -11.4 + -46.9 -8.53 + -47.8 -5.48 + -48.8 -2.30 + -49.7 1.01 + -50.6 4.45 + -51.4 8.02 + -52.2 11.7 + -53.0 15.6 + -53.7 19.5 + -54.4 23.6 + -55.0 27.8 + -55.5 32.2 + -56.0 36.6 + -56.4 41.1 + -56.7 45.8 + -56.9 50.5 + -57.1 55.3 + -57.1 60.1 + -57.1 65.1 + -56.9 70.0 + -56.7 74.9 + -56.4 79.9 + -55.9 84.9 + -55.4 89.8 + -54.8 94.7 + -54.1 99.5 + -53.3 104. + -52.4 109. + -51.4 114. + -50.3 118. + -49.2 122. + -48.0 127. + -46.7 131. + -45.4 135. + -44.1 138. + -42.7 142. + -41.2 146. + -39.8 149. + -38.3 152. + -36.8 155. + -35.2 158. + -33.7 161. + -32.2 164. + -30.6 166. + -29.1 168. + -27.5 171. + -26.0 173. + -24.5 175. + -23.0 176. + -21.5 178. + -20.0 180. + -18.5 181. + -17.1 182. + -15.7 184. + -14.3 185. + -12.9 186. + -11.5 187. + -10.2 188. + -8.92 188. + -7.64 189. + -6.38 190. + -5.15 190. + -3.94 191. + -2.75 191. + -1.59 192. + -.448 192. + .669 193. + 1.76 193. + 2.83 193. + 3.88 193. + 4.91 193. + 5.92 193. + 6.91 193. + 7.88 193. + 8.82 193. + 9.75 193. + 10.7 193. + 11.6 193. + 12.4 193. + 13.3 192. + 14.1 192. + 14.9 192. + 15.7 192. + 16.5 191. + 17.3 191. + 18.1 190. + 18.8 190. + 19.5 190. + 20.2 189. + 20.9 189. + 21.6 188. + 22.3 188. + 22.9 187. + 23.6 187. + 24.2 186. + 24.8 185. + 25.4 185. +REG_LINE: 171 + 25.4 -29.7 + 31.6 -41.1 + 38.7 -50.2 + 39.2 -50.7 + 39.8 -51.2 + 40.3 -51.8 + 40.9 -52.3 + 41.5 -52.8 + 42.0 -53.2 + 42.6 -53.7 + 43.2 -54.1 + 43.8 -54.6 + 44.4 -55.0 + 45.0 -55.4 + 45.6 -55.7 + 46.2 -56.1 + 46.8 -56.4 + 47.4 -56.7 + 48.1 -57.0 + 48.7 -57.3 + 49.4 -57.6 + 50.0 -57.8 + 50.7 -58.0 + 51.3 -58.2 + 52.0 -58.4 + 52.7 -58.5 + 53.4 -58.6 + 54.1 -58.7 + 54.8 -58.8 + 55.5 -58.8 + 56.2 -58.9 + 57.0 -58.8 + 57.7 -58.8 + 58.5 -58.7 + 59.2 -58.6 + 60.0 -58.5 + 60.8 -58.3 + 61.6 -58.2 + 62.4 -57.9 + 63.2 -57.7 + 64.0 -57.4 + 64.8 -57.0 + 65.6 -56.6 + 66.5 -56.2 + 67.3 -55.8 + 68.2 -55.2 + 69.1 -54.7 + 70.0 -54.1 + 70.9 -53.4 + 71.8 -52.7 + 72.7 -52.0 + 73.7 -51.2 + 74.6 -50.3 + 75.6 -49.4 + 76.6 -48.4 + 77.5 -47.3 + 78.5 -46.2 + 79.5 -45.0 + 80.5 -43.7 + 81.6 -42.4 + 82.6 -41.0 + 83.6 -39.5 + 84.7 -37.9 + 85.7 -36.2 + 86.8 -34.4 + 87.8 -32.5 + 88.9 -30.5 + 90.0 -28.5 + 91.1 -26.3 + 92.1 -23.9 + 93.2 -21.5 + 94.2 -19.0 + 95.3 -16.3 + 96.3 -13.5 + 97.3 -10.6 + 98.4 -7.51 + 99.3 -4.31 + 100. -.976 + 101. 2.50 + 102. 6.12 + 103. 9.88 + 104. 13.8 + 105. 17.8 + 105. 22.0 + 106. 26.3 + 106. 30.7 + 107. 35.2 + 107. 39.9 + 108. 44.7 + 108. 49.5 + 108. 54.4 + 108. 59.4 + 108. 64.5 + 108. 69.5 + 108. 74.6 + 107. 79.7 + 107. 84.8 + 106. 89.9 + 106. 94.9 + 105. 99.9 + 104. 105. + 103. 110. + 102. 114. + 101. 119. + 100. 123. + 98.8 128. + 97.5 132. + 96.1 136. + 94.7 140. + 93.3 143. + 91.8 147. + 90.3 150. + 88.8 154. + 87.2 157. + 85.7 159. + 84.1 162. + 82.5 165. + 80.9 167. + 79.4 170. + 77.8 172. + 76.3 174. + 74.7 176. + 73.2 177. + 71.7 179. + 70.2 181. + 68.8 182. + 67.3 183. + 65.9 185. + 64.5 186. + 63.2 187. + 61.8 188. + 60.5 188. + 59.2 189. + 57.9 190. + 56.7 191. + 55.5 191. + 54.3 192. + 53.1 192. + 51.9 192. + 50.8 193. + 49.7 193. + 48.6 193. + 47.6 193. + 46.5 193. + 45.5 194. + 44.5 194. + 43.6 194. + 42.6 194. + 41.7 193. + 40.8 193. + 39.9 193. + 39.0 193. + 38.2 193. + 37.3 193. + 36.5 192. + 35.7 192. + 34.9 192. + 34.2 191. + 33.4 191. + 32.7 191. + 31.9 190. + 31.2 190. + 30.5 189. + 29.8 189. + 29.2 188. + 28.5 188. + 27.9 187. + 27.3 187. + 26.6 186. + 26.0 185. + 25.4 185. +REG_LINE: 119 + 25.4 -29.7 + 26.3 -29.7 + 27.1 -29.7 + 28.0 -29.7 + 28.8 -29.6 + 29.6 -29.5 + 30.5 -29.4 + 31.3 -29.3 + 32.1 -29.2 + 33.0 -29.0 + 33.8 -28.8 + 34.6 -28.6 + 35.4 -28.4 + 36.3 -28.2 + 37.1 -27.9 + 37.9 -27.6 + 38.7 -27.3 + 39.5 -27.0 + 40.4 -26.7 + 41.2 -26.3 + 42.0 -25.9 + 42.8 -25.5 + 43.6 -25.1 + 44.4 -24.7 + 45.2 -24.2 + 46.0 -23.7 + 46.8 -23.2 + 47.6 -22.7 + 48.4 -22.2 + 49.2 -21.6 + 49.9 -21.1 + 50.7 -20.5 + 51.5 -19.8 + 52.2 -19.2 + 53.0 -18.6 + 53.8 -17.9 + 54.5 -17.2 + 55.3 -16.5 + 56.0 -15.8 + 56.8 -15.0 + 57.5 -14.3 + 58.2 -13.5 + 58.9 -12.7 + 68.4 .462 + 76.3 17.0 + 82.3 36.5 + 85.9 58.6 + 86.8 82.4 + 84.5 107. + 84.2 109. + 83.9 110. + 83.5 112. + 83.2 114. + 82.8 116. + 82.4 117. + 82.0 119. + 81.6 121. + 81.2 122. + 80.7 124. + 80.2 126. + 79.7 128. + 79.2 129. + 78.7 131. + 78.1 132. + 77.6 134. + 77.0 136. + 76.4 137. + 75.8 139. + 75.1 140. + 74.5 142. + 73.8 144. + 73.1 145. + 72.4 147. + 71.7 148. + 70.9 150. + 70.2 151. + 69.4 152. + 68.6 154. + 67.8 155. + 67.0 157. + 66.1 158. + 65.3 159. + 64.4 160. + 63.5 162. + 62.6 163. + 61.7 164. + 60.8 165. + 59.8 166. + 58.8 168. + 57.9 169. + 56.9 170. + 55.9 171. + 54.9 172. + 53.8 173. + 52.8 174. + 51.8 175. + 50.7 175. + 49.6 176. + 48.5 177. + 47.4 178. + 46.3 178. + 45.2 179. + 44.1 180. + 43.0 180. + 41.8 181. + 40.7 182. + 39.6 182. + 38.4 182. + 37.2 183. + 36.1 183. + 34.9 184. + 33.7 184. + 32.6 184. + 31.4 184. + 30.2 185. + 29.0 185. + 27.8 185. + 26.6 185. + 25.4 185. +REG_LINE: 15 + 25.4 -29.7 + 31.0 -16.7 + 35.7 -2.18 + 39.8 13.5 + 43.0 30.1 + 45.5 47.3 + 47.2 64.8 + 48.1 82.5 + 48.2 99.9 + 47.3 117. + 45.5 133. + 42.5 149. + 38.4 163. + 32.8 175. + 25.4 185. +REG_LINE: 197 + 37.2 2.94 + 36.4 3.34 + 35.6 3.71 + 34.8 4.05 + 34.0 4.37 + 33.2 4.65 + 32.3 4.90 + 31.5 5.13 + 30.7 5.32 + 29.8 5.49 + 29.0 5.63 + 28.2 5.74 + 27.3 5.82 + 26.5 5.87 + 25.6 5.89 + 24.8 5.88 + 23.9 5.84 + 23.1 5.77 + 22.2 5.68 + 21.4 5.55 + 20.5 5.40 + 19.7 5.21 + 18.9 5.00 + 18.1 4.75 + 17.2 4.48 + 16.4 4.18 + 15.6 3.85 + 14.8 3.49 + 14.0 3.10 + 13.3 2.69 + 12.5 2.24 + 11.8 1.77 + 11.0 1.26 + 10.3 .730 + 9.57 .169 + 8.87 -.420 + 8.18 -1.04 + 7.51 -1.68 + 6.86 -2.36 + 6.23 -3.06 + 5.61 -3.79 + 5.02 -4.55 + 4.44 -5.33 + 3.89 -6.14 + 3.35 -6.98 + 2.84 -7.84 + 2.36 -8.73 + 1.89 -9.65 + 1.46 -10.6 + 1.04 -11.6 + .660 -12.5 + .304 -13.6 + -0.240E-01 -14.6 + -.322 -15.7 + -.589 -16.7 + -.825 -17.8 + -1.03 -19.0 + -1.20 -20.1 + -1.34 -21.3 + -1.44 -22.5 + -1.50 -23.6 + -1.53 -24.9 + -1.52 -26.1 + -1.48 -27.3 + -1.39 -28.6 + -1.26 -29.8 + -1.10 -31.1 + -.889 -32.3 + -.640 -33.6 + -.348 -34.9 + -0.127E-01 -36.1 + .365 -37.4 + .787 -38.7 + 1.25 -39.9 + 1.76 -41.2 + 2.32 -42.4 + 2.92 -43.6 + 3.56 -44.8 + 4.24 -45.9 + 4.97 -47.1 + 5.74 -48.2 + 6.56 -49.2 + 7.41 -50.3 + 8.30 -51.3 + 9.23 -52.2 + 10.2 -53.1 + 11.2 -54.0 + 12.2 -54.8 + 13.3 -55.5 + 14.4 -56.2 + 15.5 -56.8 + 16.7 -57.4 + 17.9 -57.9 + 19.1 -58.3 + 20.3 -58.7 + 21.5 -58.9 + 22.7 -59.1 + 24.0 -59.3 + 25.2 -59.3 + 26.4 -59.3 + 27.7 -59.2 + 28.9 -59.0 + 30.1 -58.8 + 31.4 -58.5 + 32.6 -58.1 + 33.7 -57.6 + 34.9 -57.1 + 36.0 -56.5 + 37.1 -55.8 + 38.2 -55.1 + 39.3 -54.3 + 40.3 -53.5 + 41.3 -52.6 + 42.2 -51.7 + 43.1 -50.7 + 44.0 -49.7 + 44.8 -48.6 + 45.6 -47.5 + 46.4 -46.4 + 47.1 -45.2 + 47.7 -44.1 + 48.3 -42.9 + 48.9 -41.7 + 49.4 -40.4 + 49.9 -39.2 + 50.4 -37.9 + 50.8 -36.7 + 51.1 -35.4 + 51.4 -34.1 + 51.7 -32.8 + 51.9 -31.6 + 52.1 -30.3 + 52.2 -29.1 + 52.3 -27.8 + 52.4 -26.6 + 52.4 -25.3 + 52.4 -24.1 + 52.4 -22.9 + 52.3 -21.7 + 52.2 -20.6 + 52.0 -19.4 + 51.8 -18.3 + 51.6 -17.2 + 51.3 -16.1 + 51.0 -15.0 + 50.7 -14.0 + 50.4 -13.0 + 50.0 -12.0 + 49.6 -11.0 + 49.2 -10.0 + 48.7 -9.10 + 48.2 -8.20 + 47.7 -7.32 + 47.2 -6.48 + 46.7 -5.65 + 46.1 -4.86 + 45.5 -4.09 + 44.9 -3.35 + 44.3 -2.64 + 43.6 -1.95 + 43.0 -1.29 + 42.3 -.665 + 41.6 -0.645E-01 + 40.9 .508 + 40.2 1.05 + 39.4 1.57 + 38.7 2.05 + 37.9 2.51 + 37.2 2.94 + 36.4 3.34 + 35.6 3.71 + 34.8 4.05 + 34.0 4.37 + 33.2 4.65 + 32.3 4.90 + 31.5 5.13 + 30.7 5.32 + 29.8 5.49 + 29.0 5.63 + 28.2 5.74 + 27.3 5.82 + 26.5 5.87 + 25.6 5.89 + 24.8 5.88 + 23.9 5.84 + 23.1 5.77 + 22.2 5.68 + 21.4 5.55 + 20.5 5.40 + 19.7 5.21 + 18.9 5.00 + 18.1 4.75 + 17.2 4.48 + 16.4 4.18 + 15.6 3.85 + 14.8 3.49 + 14.0 3.10 +REG_LINE: 197 + 44.8 41.5 + 43.5 42.0 + 42.1 42.5 + 40.8 42.9 + 39.5 43.3 + 38.1 43.6 + 36.7 43.9 + 35.4 44.2 + 34.0 44.4 + 32.6 44.6 + 31.3 44.8 + 29.9 44.9 + 28.5 45.0 + 27.1 45.1 + 25.7 45.1 + 24.3 45.1 + 23.0 45.1 + 21.6 45.0 + 20.2 44.9 + 18.8 44.7 + 17.4 44.5 + 16.1 44.3 + 14.7 44.0 + 13.3 43.7 + 12.0 43.4 + 10.6 43.0 + 9.29 42.6 + 7.96 42.2 + 6.65 41.7 + 5.34 41.2 + 4.04 40.6 + 2.75 40.0 + 1.48 39.4 + .220 38.8 + -1.02 38.0 + -2.25 37.3 + -3.47 36.5 + -4.66 35.7 + -5.84 34.8 + -7.00 33.9 + -8.14 33.0 + -9.25 32.0 + -10.3 31.0 + -11.4 29.9 + -12.5 28.8 + -13.5 27.6 + -14.5 26.4 + -15.5 25.2 + -16.4 23.9 + -17.3 22.5 + -18.2 21.2 + -19.0 19.7 + -19.8 18.2 + -20.6 16.7 + -21.4 15.1 + -22.1 13.5 + -22.7 11.8 + -23.3 10.1 + -23.9 8.29 + -24.4 6.45 + -24.9 4.55 + -25.3 2.59 + -25.7 .576 + -26.0 -1.49 + -26.3 -3.62 + -26.5 -5.81 + -26.6 -8.05 + -26.7 -10.4 + -26.7 -12.7 + -26.6 -15.1 + -26.4 -17.6 + -26.2 -20.2 + -25.8 -22.7 + -25.4 -25.4 + -24.9 -28.1 + -24.3 -30.8 + -23.5 -33.6 + -22.7 -36.4 + -21.7 -39.3 + -20.7 -42.1 + -19.5 -45.0 + -18.1 -47.9 + -16.6 -50.8 + -15.0 -53.6 + -13.3 -56.4 + -11.4 -59.2 + -9.34 -61.9 + -7.15 -64.5 + -4.82 -67.0 + -2.34 -69.3 + .268 -71.5 + 3.01 -73.5 + 5.87 -75.3 + 8.84 -76.9 + 11.9 -78.3 + 15.1 -79.3 + 18.3 -80.1 + 21.5 -80.6 + 24.8 -80.9 + 28.1 -80.8 + 31.3 -80.4 + 34.6 -79.7 + 37.7 -78.7 + 40.8 -77.5 + 43.8 -76.0 + 46.7 -74.3 + 49.5 -72.4 + 52.2 -70.2 + 54.7 -67.9 + 57.1 -65.5 + 59.4 -63.0 + 61.5 -60.3 + 63.4 -57.6 + 65.2 -54.8 + 66.9 -51.9 + 68.4 -49.1 + 69.8 -46.2 + 71.1 -43.3 + 72.2 -40.4 + 73.2 -37.6 + 74.1 -34.7 + 74.9 -31.9 + 75.5 -29.2 + 76.1 -26.5 + 76.6 -23.8 + 76.9 -21.2 + 77.2 -18.6 + 77.4 -16.1 + 77.5 -13.7 + 77.6 -11.3 + 77.5 -8.97 + 77.4 -6.71 + 77.3 -4.50 + 77.0 -2.34 + 76.7 -.250 + 76.4 1.79 + 76.0 3.76 + 75.5 5.69 + 75.0 7.55 + 74.5 9.37 + 73.9 11.1 + 73.2 12.8 + 72.5 14.5 + 71.8 16.1 + 71.1 17.6 + 70.3 19.1 + 69.4 20.6 + 68.6 22.0 + 67.7 23.3 + 66.7 24.7 + 65.8 25.9 + 64.8 27.1 + 63.8 28.3 + 62.7 29.5 + 61.7 30.5 + 60.6 31.6 + 59.5 32.6 + 58.4 33.5 + 57.2 34.5 + 56.0 35.3 + 54.8 36.2 + 53.6 37.0 + 52.4 37.7 + 51.2 38.5 + 49.9 39.2 + 48.7 39.8 + 47.4 40.4 + 46.1 41.0 + 44.8 41.5 + 43.5 42.0 + 42.1 42.5 + 40.8 42.9 + 39.5 43.3 + 38.1 43.6 + 36.7 43.9 + 35.4 44.2 + 34.0 44.4 + 32.6 44.6 + 31.3 44.8 + 29.9 44.9 + 28.5 45.0 + 27.1 45.1 + 25.7 45.1 + 24.3 45.1 + 23.0 45.1 + 21.6 45.0 + 20.2 44.9 + 18.8 44.7 + 17.4 44.5 + 16.1 44.3 + 14.7 44.0 + 13.3 43.7 + 12.0 43.4 + 10.6 43.0 + 9.29 42.6 + 7.96 42.2 + 6.65 41.7 +REG_LINE: 197 + 48.1 82.5 + 46.6 82.8 + 45.0 83.2 + 43.4 83.5 + 41.8 83.8 + 40.3 84.1 + 38.7 84.4 + 37.1 84.6 + 35.5 84.8 + 33.8 84.9 + 32.2 85.0 + 30.6 85.2 + 29.0 85.2 + 27.4 85.3 + 25.8 85.3 + 24.2 85.3 + 22.5 85.3 + 20.9 85.2 + 19.3 85.1 + 17.7 85.0 + 16.1 84.8 + 14.5 84.6 + 12.9 84.4 + 11.3 84.2 + 9.69 83.9 + 8.10 83.7 + 6.52 83.3 + 4.95 83.0 + 3.39 82.6 + 1.83 82.2 + .284 81.8 + -1.25 81.3 + -2.78 80.8 + -4.29 80.3 + -5.80 79.7 + -7.29 79.2 + -8.77 78.6 + -10.2 77.9 + -11.7 77.2 + -13.1 76.5 + -14.5 75.8 + -15.9 75.0 + -17.3 74.2 + -18.7 73.4 + -20.1 72.5 + -21.4 71.6 + -22.7 70.7 + -24.0 69.7 + -25.3 68.7 + -26.5 67.6 + -27.8 66.5 + -29.0 65.4 + -30.1 64.2 + -31.3 63.0 + -32.4 61.8 + -33.5 60.5 + -34.6 59.1 + -35.7 57.8 + -36.7 56.3 + -37.7 54.8 + -38.7 53.3 + -39.6 51.7 + -40.5 50.0 + -41.3 48.3 + -42.2 46.5 + -42.9 44.6 + -43.7 42.7 + -44.4 40.6 + -45.0 38.5 + -45.7 36.3 + -46.2 34.0 + -46.7 31.6 + -47.1 29.1 + -47.5 26.5 + -47.8 23.7 + -48.1 20.8 + -48.2 17.8 + -48.3 14.5 + -48.2 11.1 + -48.1 7.50 + -47.8 3.67 + -47.3 -.401 + -46.7 -4.73 + -45.9 -9.33 + -44.9 -14.2 + -43.6 -19.5 + -42.0 -25.0 + -40.0 -30.9 + -37.7 -37.2 + -34.8 -43.8 + -31.3 -50.6 + -27.2 -57.6 + -22.3 -64.7 + -16.7 -71.6 + -10.1 -78.1 + -2.67 -83.8 + 5.54 -88.4 + 14.4 -91.5 + 23.6 -92.8 + 32.8 -92.3 + 41.9 -89.9 + 50.3 -85.8 + 58.1 -80.5 + 65.0 -74.3 + 71.1 -67.5 + 76.2 -60.5 + 80.7 -53.4 + 84.4 -46.5 + 87.5 -39.8 + 90.0 -33.4 + 92.1 -27.4 + 93.9 -21.7 + 95.3 -16.3 + 96.4 -11.3 + 97.3 -6.55 + 98.0 -2.11 + 98.5 2.06 + 98.8 5.99 + 99.1 9.69 + 99.1 13.2 + 99.1 16.5 + 99.0 19.6 + 98.8 22.6 + 98.5 25.4 + 98.2 28.1 + 97.8 30.6 + 97.3 33.1 + 96.8 35.4 + 96.2 37.7 + 95.6 39.8 + 94.9 41.9 + 94.1 43.8 + 93.4 45.7 + 92.6 47.6 + 91.7 49.3 + 90.8 51.0 + 89.9 52.6 + 89.0 54.2 + 88.0 55.7 + 87.0 57.2 + 85.9 58.6 + 84.9 60.0 + 83.8 61.3 + 82.7 62.5 + 81.5 63.8 + 80.3 65.0 + 79.1 66.1 + 77.9 67.2 + 76.7 68.3 + 75.4 69.3 + 74.1 70.3 + 72.8 71.2 + 71.5 72.2 + 70.1 73.0 + 68.8 73.9 + 67.4 74.7 + 66.0 75.5 + 64.6 76.2 + 63.2 77.0 + 61.7 77.6 + 60.3 78.3 + 58.8 78.9 + 57.3 79.5 + 55.8 80.1 + 54.3 80.6 + 52.8 81.1 + 51.2 81.6 + 49.7 82.0 + 48.1 82.5 + 46.6 82.8 + 45.0 83.2 + 43.4 83.5 + 41.8 83.8 + 40.3 84.1 + 38.7 84.4 + 37.1 84.6 + 35.5 84.8 + 33.8 84.9 + 32.2 85.0 + 30.6 85.2 + 29.0 85.2 + 27.4 85.3 + 25.8 85.3 + 24.2 85.3 + 22.5 85.3 + 20.9 85.2 + 19.3 85.1 + 17.7 85.0 + 16.1 84.8 + 14.5 84.6 + 12.9 84.4 + 11.3 84.2 + 9.69 83.9 + 8.10 83.7 + 6.52 83.3 + 4.95 83.0 + 3.39 82.6 +REG_LINE: 158 + 46.8 122. + 25.8 124. + 4.68 123. + -14.9 119. + -31.6 115. + -32.7 115. + -33.7 115. + -34.7 114. + -35.7 114. + -36.6 114. + -37.5 114. + -38.4 114. + -39.3 113. + -40.1 113. + -41.0 113. + -41.7 113. + -42.5 113. + -43.2 113. + -43.9 113. + -44.6 113. + -45.2 113. + -45.8 114. + -46.3 114. + -46.8 114. + -47.2 115. + -47.6 116. + -48.0 116. + -48.3 117. + -48.5 118. + -48.6 120. + -48.7 121. + -48.6 123. + -48.4 125. + -48.1 128. + -47.6 131. + -46.8 134. + -45.8 138. + -44.3 143. + -42.4 149. + -39.8 155. + -36.3 163. + -31.6 172. + -25.2 181. + -16.8 192. + -5.96 201. + -5.08 202. + -4.20 203. + -3.30 203. + -2.39 204. + -1.47 204. + -.536 205. + .410 205. + 1.37 206. + 2.33 206. + 3.31 207. + 4.30 207. + 5.30 208. + 6.31 208. + 7.33 209. + 8.36 209. + 9.40 209. + 10.4 210. + 11.5 210. + 12.6 210. + 13.6 211. + 14.7 211. + 15.8 211. + 16.9 211. + 17.9 212. + 19.0 212. + 20.1 212. + 21.2 212. + 22.3 212. + 23.4 212. + 24.5 212. + 25.6 212. + 26.8 212. + 27.9 212. + 29.0 212. + 30.1 212. + 31.2 212. + 32.3 212. + 33.3 212. + 34.4 211. + 35.5 211. + 36.6 211. + 37.7 211. + 38.7 210. + 39.8 210. + 40.8 210. + 41.9 209. + 42.9 209. + 43.9 209. + 44.9 208. + 46.0 208. + 47.0 207. + 47.9 207. + 48.9 206. + 49.9 206. + 50.8 205. + 51.8 205. + 52.7 204. + 53.6 204. + 54.5 203. + 55.4 202. + 56.3 202. + 57.2 201. + 58.0 200. + 58.9 200. + 59.7 199. + 60.5 198. + 61.3 198. + 62.1 197. + 62.9 196. + 63.6 196. + 73.0 186. + 80.2 176. + 85.5 166. + 89.4 158. + 92.4 151. + 94.5 145. + 96.1 140. + 97.3 136. + 98.2 132. + 98.8 129. + 99.2 126. + 99.4 124. + 99.5 122. + 99.5 120. + 99.4 119. + 99.3 118. + 99.0 117. + 98.7 116. + 98.3 115. + 97.9 115. + 97.4 114. + 96.9 114. + 96.3 114. + 95.7 113. + 95.1 113. + 94.4 113. + 93.7 113. + 92.9 113. + 92.2 113. + 91.4 113. + 90.5 113. + 89.7 113. + 88.8 114. + 87.9 114. + 86.9 114. + 86.0 114. + 85.0 115. + 84.0 115. + 82.9 115. + 66.3 119. + 46.8 122. + 25.8 124. + 4.68 123. +REG_LINE: 132 + 39.9 158. + 25.7 158. + 11.4 158. + -1.28 160. + -2.08 160. + -2.85 160. + -3.60 160. + -4.34 161. + -5.05 161. + -5.74 161. + -6.40 162. + -7.04 162. + -7.66 162. + -8.25 163. + -8.81 163. + -9.34 163. + -9.84 164. + -10.3 164. + -10.7 165. + -11.1 165. + -11.5 166. + -11.8 167. + -12.1 167. + -12.4 168. + -12.6 169. + -12.7 169. + -12.8 170. + -12.9 171. + -12.9 172. + -12.9 173. + -12.8 174. + -12.6 174. + -12.4 175. + -12.1 177. + -11.7 178. + -11.3 179. + -10.8 180. + -10.2 181. + -9.53 182. + -8.78 184. + -7.94 185. + -7.02 186. + -6.00 188. + -4.88 189. + -3.67 190. + -2.36 192. + -.951 193. + .557 194. + 2.16 195. + 3.87 197. + 5.66 198. + 7.55 199. + 9.52 200. + 11.6 201. + 13.7 202. + 15.9 202. + 18.1 203. + 20.4 203. + 22.7 203. + 25.0 203. + 27.3 203. + 29.6 203. + 31.9 203. + 34.1 202. + 36.3 202. + 38.5 201. + 40.6 200. + 42.6 199. + 44.5 198. + 46.3 197. + 48.1 196. + 49.7 195. + 51.2 193. + 52.7 192. + 54.0 191. + 55.3 189. + 56.5 188. + 57.5 187. + 58.5 185. + 59.3 184. + 60.1 183. + 60.8 182. + 61.4 180. + 62.0 179. + 62.4 178. + 62.8 177. + 63.2 176. + 63.4 175. + 63.6 174. + 63.7 173. + 63.8 172. + 63.8 171. + 63.8 170. + 63.7 170. + 63.5 169. + 63.3 168. + 63.1 167. + 62.9 167. + 62.5 166. + 62.2 166. + 61.8 165. + 61.4 165. + 60.9 164. + 60.4 164. + 59.9 163. + 59.4 163. + 58.8 162. + 58.2 162. + 57.6 162. + 56.9 161. + 56.2 161. + 55.5 161. + 54.8 161. + 54.0 160. + 53.3 160. + 52.5 160. + 51.7 160. + 50.9 159. + 50.0 159. + 49.2 159. + 48.3 159. + 47.4 159. + 46.5 159. + 45.6 159. + 44.7 158. + 43.8 158. + 42.8 158. + 41.9 158. + 40.9 158. + 39.9 158. + 25.7 158. + 11.4 158. +REG_LINE: 2 + 40.8 84.0 + 40.8 85.8 +REG_LINE: 2 + 33.3 85.0 + 33.3 86.7 +REG_LINE: 2 + 25.8 85.3 + 25.8 87.0 +REG_LINE: 2 + 18.2 85.0 + 18.2 86.8 +REG_LINE: 2 + 10.7 84.1 + 10.7 85.9 +REG_LINE: 2 + -3.79 80.5 + -3.83 82.2 +REG_LINE: 2 + -10.7 77.7 + -10.8 79.4 +REG_LINE: 2 + -17.3 74.2 + -17.4 76.0 +REG_LINE: 2 + -23.6 70.0 + -23.6 71.8 +REG_LINE: 2 + -29.4 65.0 + -29.5 66.8 +REG_LINE: 2 + -39.3 52.2 + -39.4 54.0 +REG_LINE: 2 + -43.2 44.0 + -43.4 45.7 +REG_LINE: 2 + -46.2 34.0 + -46.4 35.8 +REG_LINE: 2 + -48.0 21.8 + -48.3 23.5 +REG_LINE: 2 + -48.0 6.25 + -48.3 7.96 +REG_LINE: 2 + -35.8 -41.5 + -36.5 -39.9 +REG_LINE: 2 + -14.6 -73.9 + -15.8 -72.6 +REG_LINE: 2 + 23.6 -92.8 + 22.6 -94.3 +REG_LINE: 2 + 62.8 -76.5 + 64.1 -75.2 +REG_LINE: 2 + 85.5 -44.2 + 86.2 -42.6 +REG_LINE: 2 + 98.7 4.70 + 99.1 6.41 +REG_LINE: 2 + 99.0 20.6 + 99.3 22.3 +REG_LINE: 2 + 97.3 33.1 + 97.5 34.8 +REG_LINE: 2 + 94.4 43.2 + 94.6 44.9 +REG_LINE: 2 + 90.5 51.6 + 90.7 53.3 +REG_LINE: 2 + 80.7 64.6 + 80.8 66.3 +REG_LINE: 2 + 75.0 69.6 + 75.1 71.4 +REG_LINE: 2 + 68.8 73.9 + 68.8 75.6 +REG_LINE: 2 + 62.2 77.4 + 62.2 79.2 +REG_LINE: 2 + 55.3 80.3 + 55.3 82.0 +REG_LINE: 2 + 40.8 84.0 + 40.8 85.8 +REG_LINE: 2 + 33.3 85.0 + 33.3 86.7 +REG_LINE: 2 + 25.8 85.3 + 25.8 87.0 +REG_LINE: 2 + 18.2 85.0 + 18.2 86.8 +REG_LINE: 2 + 10.7 84.1 + 10.7 85.9 +REG_LINE: 2 + 23.1 -34.3 + 21.6 -33.5 +REG_LINE: 2 + 20.6 -38.6 + 19.1 -37.7 +REG_LINE: 2 + 18.0 -42.6 + 16.5 -41.7 +REG_LINE: 2 + 15.2 -46.2 + 13.8 -45.2 +REG_LINE: 2 + 12.3 -49.4 + 10.9 -48.4 +REG_LINE: 2 + 6.00 -54.5 + 4.63 -53.5 +REG_LINE: 2 + 2.59 -56.3 + 1.25 -55.2 +REG_LINE: 2 + -1.03 -57.5 + -2.33 -56.3 +REG_LINE: 2 + -4.86 -58.0 + -6.12 -56.8 +REG_LINE: 2 + -8.94 -57.7 + -10.1 -56.4 +REG_LINE: 2 + -17.9 -54.1 + -19.0 -52.7 +REG_LINE: 2 + -22.8 -50.3 + -23.9 -48.9 +REG_LINE: 2 + -28.1 -44.9 + -29.0 -43.4 +REG_LINE: 2 + -33.6 -37.4 + -34.4 -35.9 +REG_LINE: 2 + -39.3 -27.4 + -40.0 -25.8 +REG_LINE: 2 + -50.1 2.52 + -50.5 4.22 +REG_LINE: 2 + -54.3 23.2 + -54.6 24.9 +REG_LINE: 2 + -56.8 47.3 + -56.8 49.1 +REG_LINE: 2 + -56.8 73.8 + -56.1 75.5 +REG_LINE: 2 + -53.9 101. + -54.0 98.8 +REG_LINE: 2 + -41.1 146. + -41.7 144. +REG_LINE: 2 + -32.8 162. + -33.7 161. +REG_LINE: 2 + -24.5 175. + -25.5 173. +REG_LINE: 2 + -16.5 183. + -17.6 182. +REG_LINE: 2 + -9.06 188. + -10.4 187. +REG_LINE: 2 + 3.65 193. + 2.17 192. +REG_LINE: 2 + 9.03 193. + 7.49 192. +REG_LINE: 2 + 13.8 192. + 12.2 192. +REG_LINE: 2 + 18.1 190. + 16.5 190. +REG_LINE: 2 + 22.0 188. + 20.3 187. +REG_LINE: 15 + 3.39 82.6 + 6.52 83.3 + 9.69 83.9 + 12.9 84.4 + 16.1 84.8 + 19.3 85.1 + 22.5 85.3 + 25.8 85.3 + 29.0 85.2 + 32.2 85.0 + 35.5 84.8 + 38.7 84.4 + 41.8 83.8 + 45.0 83.2 + 48.1 82.5 +REG_LINE: 15 + 3.39 82.6 + .284 81.8 + -2.78 80.8 + -5.80 79.7 + -8.77 78.6 + -11.7 77.2 + -14.5 75.8 + -17.3 74.2 + -20.1 72.5 + -22.7 70.7 + -25.3 68.7 + -27.8 66.5 + -30.1 64.2 + -32.4 61.8 + -34.6 59.1 +REG_LINE: 15 + -34.6 59.1 + -36.7 56.3 + -38.7 53.3 + -40.5 50.0 + -42.2 46.5 + -43.7 42.7 + -45.0 38.5 + -46.2 34.0 + -47.1 29.1 + -47.8 23.7 + -48.2 17.8 + -48.2 11.1 + -47.8 3.67 + -46.7 -4.73 + -44.9 -14.2 +REG_LINE: 93 + -44.9 -14.2 + -42.0 -25.0 + -37.7 -37.2 + -31.3 -50.6 + -22.3 -64.7 + -21.6 -65.7 + -20.8 -66.7 + -20.0 -67.7 + -19.2 -68.7 + -18.4 -69.7 + -17.5 -70.7 + -16.7 -71.6 + -15.8 -72.6 + -14.9 -73.5 + -14.0 -74.5 + -13.0 -75.4 + -12.1 -76.3 + -11.1 -77.2 + -10.1 -78.1 + -9.08 -79.0 + -8.06 -79.8 + -7.01 -80.7 + -5.95 -81.5 + -4.87 -82.3 + -3.78 -83.1 + -2.67 -83.8 + -1.54 -84.6 + -.395 -85.3 + .764 -86.0 + 1.94 -86.6 + 3.13 -87.2 + 4.33 -87.8 + 5.54 -88.4 + 6.77 -89.0 + 8.01 -89.5 + 9.27 -89.9 + 10.5 -90.4 + 11.8 -90.8 + 13.1 -91.2 + 14.4 -91.5 + 15.7 -91.8 + 17.0 -92.1 + 18.3 -92.3 + 19.6 -92.5 + 20.9 -92.6 + 22.3 -92.8 + 23.6 -92.8 + 24.9 -92.9 + 26.2 -92.9 + 27.6 -92.8 + 28.9 -92.7 + 30.2 -92.6 + 31.5 -92.5 + 32.8 -92.3 + 34.2 -92.0 + 35.5 -91.8 + 36.8 -91.4 + 38.0 -91.1 + 39.3 -90.7 + 40.6 -90.3 + 41.9 -89.9 + 43.1 -89.4 + 44.3 -88.9 + 45.6 -88.3 + 46.8 -87.7 + 48.0 -87.1 + 49.2 -86.5 + 50.3 -85.8 + 51.5 -85.2 + 52.6 -84.4 + 53.8 -83.7 + 54.9 -82.9 + 56.0 -82.2 + 57.0 -81.4 + 58.1 -80.5 + 59.1 -79.7 + 60.2 -78.8 + 61.2 -78.0 + 62.2 -77.1 + 63.1 -76.2 + 64.1 -75.2 + 65.0 -74.3 + 65.9 -73.4 + 66.8 -72.4 + 67.7 -71.4 + 68.6 -70.5 + 69.4 -69.5 + 70.2 -68.5 + 71.1 -67.5 + 80.7 -53.4 + 87.5 -39.8 + 92.1 -27.4 + 95.3 -16.3 +REG_LINE: 15 + 95.3 -16.3 + 97.3 -6.55 + 98.5 2.06 + 99.1 9.69 + 99.1 16.5 + 98.8 22.6 + 98.2 28.1 + 97.3 33.1 + 96.2 37.7 + 94.9 41.9 + 93.4 45.7 + 91.7 49.3 + 89.9 52.6 + 88.0 55.7 + 85.9 58.6 +REG_LINE: 15 + 85.9 58.6 + 83.8 61.3 + 81.5 63.8 + 79.1 66.1 + 76.7 68.3 + 74.1 70.3 + 71.5 72.2 + 68.8 73.9 + 66.0 75.5 + 63.2 77.0 + 60.3 78.3 + 57.3 79.5 + 54.3 80.6 + 51.2 81.6 + 48.1 82.5 +REG_LINE: 15 + 48.1 82.5 + 45.0 83.2 + 41.8 83.8 + 38.7 84.4 + 35.5 84.8 + 32.2 85.0 + 29.0 85.2 + 25.8 85.3 + 22.5 85.3 + 19.3 85.1 + 16.1 84.8 + 12.9 84.4 + 9.69 83.9 + 6.52 83.3 + 3.39 82.6 +REG_LINE: 15 + 48.1 82.5 + 45.0 83.2 + 41.8 83.8 + 38.7 84.4 + 35.5 84.8 + 32.2 85.0 + 29.0 85.2 + 25.8 85.3 + 22.5 85.3 + 19.3 85.1 + 16.1 84.8 + 12.9 84.4 + 9.69 83.9 + 6.52 83.3 + 3.39 82.6 +REG_LINE: 15 + 25.4 -29.7 + 24.4 -31.7 + 23.4 -33.7 + 22.4 -35.6 + 21.3 -37.4 + 20.2 -39.2 + 19.1 -40.9 + 18.0 -42.6 + 16.8 -44.2 + 15.6 -45.7 + 14.4 -47.2 + 13.1 -48.6 + 11.9 -49.9 + 10.6 -51.1 + 9.23 -52.2 +REG_LINE: 15 + 9.23 -52.2 + 7.87 -53.3 + 6.48 -54.2 + 5.05 -55.1 + 3.58 -55.9 + 2.08 -56.5 + .548 -57.1 + -1.03 -57.5 + -2.64 -57.8 + -4.30 -58.0 + -6.00 -58.0 + -7.75 -57.9 + -9.54 -57.6 + -11.4 -57.1 + -13.3 -56.4 +REG_LINE: 15 + -13.3 -56.4 + -15.2 -55.6 + -17.2 -54.5 + -19.3 -53.2 + -21.4 -51.6 + -23.6 -49.7 + -25.8 -47.5 + -28.1 -44.9 + -30.4 -42.0 + -32.8 -38.6 + -35.2 -34.8 + -37.6 -30.5 + -40.1 -25.7 + -42.5 -20.3 + -44.9 -14.2 +REG_LINE: 15 + -44.9 -14.2 + -47.2 -7.52 + -49.4 -.109 + -51.4 8.02 + -53.3 16.9 + -54.8 26.4 + -56.0 36.6 + -56.8 47.3 + -57.1 58.5 + -56.9 70.0 + -56.2 81.6 + -55.0 93.1 + -53.3 104. + -51.0 115. + -48.4 125. +REG_LINE: 15 + -48.4 125. + -45.4 135. + -42.2 143. + -38.8 151. + -35.2 158. + -31.6 164. + -28.0 170. + -24.5 175. + -21.0 179. + -17.6 182. + -14.3 185. + -11.1 187. + -8.06 189. + -5.15 190. + -2.36 192. +REG_LINE: 15 + -2.36 192. + .299 192. + 2.83 193. + 5.25 193. + 7.56 193. + 9.75 193. + 11.8 193. + 13.8 192. + 15.7 192. + 17.6 191. + 19.3 190. + 20.9 189. + 22.5 188. + 24.0 186. + 25.4 185. +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +Forward matrix value + M2 = -0.811474832908671 # Forward matrix value + M3 = 0.171224898552328 # Forward matrix value + M4 = -0.862236746712233 # Forward matrix value + M5 = -0.476686298035564 # Forward matrix value + M6 = -0.941127638091139 # Forward matrix value + M7 = 0 # Forward matrix value + M8 = -0.338051429254475 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = -2.61046557479594 # Polar longitude (rad.s) + End SphMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End FrameSet + Begin FrameSet # Set of inter-related coordinate systems +# Title = "Pixel coordinates; first pixel at (-100.5,-200.5)" # Title of coordinate system +# Naxes = 2 # Number of coordinate axes +# Domain = "POLAR" # Coordinate system domain +# Lbl1 = "Pixel coordinate 1" # Label for axis 1 +# Lbl2 = "Pixel coordinate 2" # Label for axis 2 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 + IsA Frame # Coordinate system description + Nframe = 2 # Number of Frames in FrameSet +# Base = 1 # Index of base Frame + Currnt = 2 # Index of current Frame + Nod1 = 2 # Frame 1 is associated with node 2 + Nod2 = 1 # Frame 2 is associated with node 1 + Lnk2 = 1 # Node 2 is derived from node 1 + Frm1 = # Frame number 1 + Begin Frame # Coordinate system description + Title = "Data grid indices; first pixel at (1,1) " # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "GRID" # Coordinate system domain +# Lbl1 = "Data grid index 1" # Label for axis 1 +# Lbl2 = "Data grid index 2" # Label for axis 2 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Data grid index 1" # Axis Label + Symbol = "g1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Data grid index 2" # Axis Label + Symbol = "g2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm2 = # Frame number 2 + Begin Frame # Coordinate system description + Title = "Pixel coordinates; first pixel at (-100.5,-200.5)" # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "POLAR" # Coordinate system domain +# Lbl1 = "Pixel coordinate 1" # Label for axis 1 +# Lbl2 = "Pixel coordinate 2" # Label for axis 2 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 1" # Axis Label + REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '240' + 4.00 80.2 TC -.245 .969 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '300' + -32.7 57.6 TC -.791 .612 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '0' + -42.4 -13.7 BC .974 .227 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '60' + 92.9 -15.7 BC -.973 .231 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '120' + 84.0 57.1 TC .798 .602 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '180' + 47.5 80.0 TC .253 .968 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-90' + 27.7 -30.8 TC -.899 .438 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-60' + 10.8 -54.2 TC -.629 .777 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-30' + -14.2 -58.8 TC .374 .927 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '0' + -47.2 -15.1 TC .937 .350 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '30' + -50.8 126. BC -.960 .278 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '60' + -3.21 194. BC -.341 .940 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '90' + 27.2 187. BC .711 .704 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 1 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: ' A FITS test' + 31.5 225. BC .000 1.00 + + + + + FITS test number 2 + ==================== + + + +AST_SHOW: + +REG_SINK: +COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +AST +COMMENT AST Beginning of AST data for FrameSet object +AST +COMMENT AST ................................................................ +AST +COMMENT AST ................................................................ +AST +COMMENT AST End of AST data for FrameSet object +AST +COMMENT AST ---------------------------------------------------------------- + +Objects written: 1 + +Native Encoding: + +COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST +COMMENT AST WCS information in AST format AST +COMMENT AST See http://www.starlink.ac.uk/ast/ AST +COMMENT AST Beginning of AST data for FrameSet object AST +COMMENT AST ................................................................ AST +BEGAST_A= 'FrameSet' / Set of inter-related coordinate systems +NFRAME_A= 2 / Number of Frames in FrameSet +CURRNT_A= 2 / Index of current Frame +NOD1_A = 2 / Frame 1 is associated with node 2 +NOD2_A = 1 / Frame 2 is associated with node 1 +LNK2_A = 1 / Node 2 is derived from node 1 +FRM1_A = ' ' / Frame number 1 +BEGAST_B= 'Frame ' / Coordinate system description +TITLE_A = 'Data grid indices; first pixel at (1&'/ Title of coordinate system +CONTINUE '",1) "' +NAXES_A = 2 / Number of coordinate axes +DOMAIN_A= 'GRID ' / Coordinate system domain +AX1_A = ' ' / Axis number 1 +BEGAST_C= 'Axis ' / Coordinate axis +LABEL_A = 'Data grid index 1' / Axis Label +SYMBOL_A= 'g1 ' / Axis symbol +UNIT_A = 'pixel ' / Axis units +FORMAT_A= '%3.1f ' / Format specifier +ENDAST_A= 'Axis ' / End of object definition +AX2_A = ' ' / Axis number 2 +BEGAST_D= 'Axis ' / Coordinate axis +LABEL_B = 'Data grid index 2' / Axis Label +SYMBOL_B= 'g2 ' / Axis symbol +UNIT_B = 'pixel ' / Axis units +FORMAT_B= '%3.1f ' / Format specifier +ENDAST_B= 'Axis ' / End of object definition +ENDAST_C= 'Frame ' / End of object definition +FRM2_A = ' ' / Frame number 2 +BEGAST_E= 'Frame ' / Coordinate system description +TITLE_B = 'Pixel coordinates; first pixel at (-&'/ Title of coordinate system +CONTINUE '100.5,-200.5)' +NAXES_B = 2 / Number of coordinate axes +DOMAIN_B= 'POLAR ' / Coordinate system domain +AX1_B = ' ' / Axis number 1 +BEGAST_F= 'Axis ' / Coordinate axis +LABEL_C = 'Pixel coordinate 1' / Axis Label +SYMBOL_C= 'p1 ' / Axis symbol +UNIT_C = 'pixel ' / Axis units +FORMAT_C= '%3.1f ' / Format specifier +ENDAST_D= 'Axis ' / End of object definition +AX2_B = ' ' / Axis number 2 +BEGAST_G= 'Axis ' / Coordinate axis +LABEL_D = 'Pixel coordinate 2' / Axis Label +SYMBOL_D= 'p2 ' / Axis symbol +UNIT_D = 'pixel ' / Axis units +FORMAT_D= '%3.1f ' / Format specifier +ENDAST_E= 'Axis ' / End of object definition +ENDAST_F= 'Frame ' / End of object definition +MAP2_A = ' ' / Mapping between nodes 1 and 2 +BEGAST_H= 'CmpMap ' / Compound Mapping +NIN_A = 2 / Number of input coordinates +ISA_A = 'Mapping ' / Mapping between coordinate systems +INVA_A = 1 / First Mapping used in inverse direction +INVB_A = 1 / Second Mapping used in inverse direction +MAPA_A = ' ' / First component Mapping +BEGAST_I= 'MathMap ' / Transformation using mathematical functions +NIN_B = 2 / Number of input coordinates +INVERT_A= 0 / Mapping not inverted +ISA_B = 'Mapping ' / Mapping between coordinate systems +FWD1_A = 'r=sqrt(x*x+y*y)' / Forward function 1 +FWD2_A = 'theta=atan2(y,x)' / Forward function 2 +INV1_A = 'x=r*cos(theta)' / Inverse function 1 +INV2_A = 'y=r*sin(theta)' / Inverse function 2 +SIMPFI_A= 1 / Forward-inverse pairs may simplify +SIMPIF_A= 1 / Inverse-forward pairs may simplify +ENDAST_G= 'MathMap ' / End of object definition +MAPB_A = ' ' / Second component Mapping +BEGAST_J= 'WinMap ' / Map one window on to another +NIN_C = 2 / Number of input coordinates +INVERT_B= 0 / Mapping not inverted +ISA_C = 'Mapping ' / Mapping between coordinate systems +SFT1_A = -101.5 / Shift for axis 1 +SFT2_A = -201.5 / Shift for axis 2 +ENDAST_H= 'WinMap ' / End of object definition +ENDAST_I= 'CmpMap ' / End of object definition +ENDAST_J= 'FrameSet' / End of object definition +COMMENT AST ................................................................ AST +COMMENT AST End of AST data for FrameSet object AST +COMMENT AST ---------------------------------------------------------------- AST + +ATTRIBUTES: + Colour(axis1) : 1 + Font(Stri) : 1 + Nout : 1 + Class : 4 + Tol : 0.100000E-01 + Gap(1) : 50.0000 + Border : 0 + Invert : 0 + TextLabGap : 0.100000E-01 + Nin : 2 + Current : 3 + Base : 1 + Nobject : 1 + RefCOUNT : 1 + +AST_GRID: +REG_LINE: 197 + 10.8 124. + 10.7 123. + 10.5 122. + 10.3 121. + 10.2 120. + 10.1 119. + 10.0 118. + 9.94 117. + 9.89 116. + 9.85 115. + 9.84 113. + 9.85 112. + 9.88 111. + 9.93 110. + 10.0 109. + 10.1 108. + 10.2 107. + 10.3 106. + 10.5 105. + 10.6 104. + 10.8 103. + 11.0 102. + 11.2 100. + 11.5 99.5 + 11.7 98.5 + 12.0 97.5 + 12.3 96.6 + 12.6 95.6 + 13.0 94.7 + 13.3 93.9 + 13.7 93.0 + 14.0 92.2 + 14.4 91.4 + 14.8 90.6 + 15.2 89.8 + 15.7 89.1 + 16.1 88.4 + 16.5 87.8 + 17.0 87.2 + 17.5 86.6 + 18.0 86.0 + 18.5 85.5 + 19.0 85.0 + 19.5 84.6 + 20.0 84.2 + 20.5 83.8 + 21.1 83.5 + 21.6 83.2 + 22.1 82.9 + 22.7 82.7 + 23.2 82.5 + 23.8 82.4 + 24.3 82.3 + 24.9 82.2 + 25.5 82.2 + 26.0 82.2 + 26.6 82.3 + 27.1 82.4 + 27.7 82.5 + 28.2 82.7 + 28.8 82.9 + 29.3 83.2 + 29.9 83.4 + 30.4 83.8 + 30.9 84.2 + 31.4 84.6 + 32.0 85.0 + 32.5 85.5 + 33.0 86.0 + 33.4 86.6 + 33.9 87.1 + 34.4 87.8 + 34.8 88.4 + 35.3 89.1 + 35.7 89.8 + 36.1 90.6 + 36.5 91.3 + 36.9 92.1 + 37.3 93.0 + 37.6 93.8 + 38.0 94.7 + 38.3 95.6 + 38.6 96.5 + 38.9 97.5 + 39.2 98.5 + 39.4 99.4 + 39.7 100. + 39.9 101. + 40.1 103. + 40.3 104. + 40.5 105. + 40.6 106. + 40.7 107. + 40.8 108. + 40.9 109. + 41.0 110. + 41.1 111. + 41.1 112. + 41.1 113. + 41.1 115. + 41.1 116. + 41.0 117. + 40.9 118. + 40.8 119. + 40.7 120. + 40.6 121. + 40.5 122. + 40.3 123. + 40.1 124. + 39.9 125. + 39.7 126. + 39.4 127. + 39.2 128. + 38.9 129. + 38.6 130. + 38.3 131. + 38.0 132. + 37.6 133. + 37.3 134. + 36.9 135. + 36.5 136. + 36.1 136. + 35.7 137. + 35.3 138. + 34.8 138. + 34.4 139. + 33.9 140. + 33.4 140. + 33.0 141. + 32.5 141. + 32.0 142. + 31.4 142. + 30.9 143. + 30.4 143. + 29.9 143. + 29.3 144. + 28.8 144. + 28.2 144. + 27.7 144. + 27.1 145. + 26.6 145. + 26.0 145. + 25.5 145. + 24.9 145. + 24.3 145. + 23.8 145. + 23.2 144. + 22.7 144. + 22.1 144. + 21.6 144. + 21.1 143. + 20.5 143. + 20.0 143. + 19.5 142. + 19.0 142. + 18.5 141. + 18.0 141. + 17.5 140. + 17.0 140. + 16.5 139. + 16.1 138. + 15.7 138. + 15.2 137. + 14.8 136. + 14.4 136. + 14.0 135. + 13.7 134. + 13.3 133. + 13.0 132. + 12.6 131. + 12.3 130. + 12.0 129. + 11.7 128. + 11.5 127. + 11.2 126. + 11.0 125. + 10.8 124. + 10.6 123. + 10.5 122. + 10.3 121. + 10.2 120. + 10.1 119. + 10.0 118. + 9.93 117. + 9.88 116. + 9.85 115. + 9.84 113. + 9.85 112. + 9.89 111. + 9.94 110. + 10.0 109. + 10.1 108. + 10.2 107. + 10.3 106. + 10.5 105. + 10.7 104. + 10.8 102. +REG_LINE: 197 + -3.80 135. + -4.17 133. + -4.50 131. + -4.80 129. + -5.06 127. + -5.28 125. + -5.46 122. + -5.60 120. + -5.70 118. + -5.76 116. + -5.78 114. + -5.76 111. + -5.70 109. + -5.61 107. + -5.47 105. + -5.29 102. + -5.07 100. + -4.82 98.1 + -4.53 95.9 + -4.19 93.8 + -3.82 91.7 + -3.42 89.6 + -2.97 87.5 + -2.49 85.5 + -1.97 83.5 + -1.42 81.6 + -.838 79.7 + -.219 77.8 + .433 76.0 + 1.12 74.3 + 1.83 72.6 + 2.58 70.9 + 3.35 69.3 + 4.15 67.7 + 4.98 66.2 + 5.84 64.8 + 6.72 63.4 + 7.62 62.1 + 8.55 60.9 + 9.50 59.7 + 10.5 58.6 + 11.5 57.6 + 12.5 56.6 + 13.5 55.7 + 14.5 54.9 + 15.6 54.2 + 16.6 53.5 + 17.7 52.9 + 18.8 52.4 + 19.9 51.9 + 21.0 51.6 + 22.1 51.3 + 23.2 51.1 + 24.3 51.0 + 25.4 50.9 + 26.6 51.0 + 27.7 51.1 + 28.8 51.3 + 29.9 51.6 + 31.0 51.9 + 32.1 52.4 + 33.2 52.9 + 34.3 53.5 + 35.3 54.1 + 36.4 54.9 + 37.4 55.7 + 38.4 56.6 + 39.4 57.5 + 40.4 58.6 + 41.4 59.7 + 42.4 60.8 + 43.3 62.1 + 44.2 63.4 + 45.1 64.8 + 45.9 66.2 + 46.8 67.7 + 47.6 69.2 + 48.3 70.8 + 49.1 72.5 + 49.8 74.2 + 50.5 76.0 + 51.1 77.8 + 51.8 79.6 + 52.3 81.5 + 52.9 83.5 + 53.4 85.5 + 53.9 87.5 + 54.3 89.5 + 54.7 91.6 + 55.1 93.7 + 55.5 95.8 + 55.7 98.0 + 56.0 100. + 56.2 102. + 56.4 105. + 56.5 107. + 56.6 109. + 56.7 111. + 56.7 113. + 56.7 116. + 56.6 118. + 56.5 120. + 56.4 122. + 56.2 125. + 56.0 127. + 55.7 129. + 55.5 131. + 55.1 133. + 54.7 135. + 54.3 137. + 53.9 139. + 53.4 141. + 52.9 143. + 52.3 145. + 51.8 147. + 51.1 149. + 50.5 151. + 49.8 153. + 49.1 154. + 48.3 156. + 47.6 158. + 46.8 159. + 45.9 161. + 45.1 162. + 44.2 163. + 43.3 165. + 42.4 166. + 41.4 167. + 40.4 168. + 39.4 169. + 38.4 170. + 37.4 171. + 36.4 172. + 35.3 173. + 34.3 173. + 33.2 174. + 32.1 175. + 31.0 175. + 29.9 175. + 28.8 176. + 27.7 176. + 26.6 176. + 25.4 176. + 24.3 176. + 23.2 176. + 22.1 176. + 21.0 175. + 19.9 175. + 18.8 174. + 17.7 174. + 16.6 173. + 15.6 173. + 14.5 172. + 13.5 171. + 12.5 170. + 11.5 169. + 10.5 168. + 9.50 167. + 8.55 166. + 7.62 165. + 6.72 163. + 5.84 162. + 4.98 161. + 4.15 159. + 3.35 158. + 2.58 156. + 1.83 154. + 1.12 153. + .433 151. + -.219 149. + -.838 147. + -1.42 145. + -1.97 143. + -2.49 141. + -2.97 139. + -3.42 137. + -3.82 135. + -4.19 133. + -4.53 131. + -4.82 129. + -5.07 127. + -5.29 124. + -5.47 122. + -5.61 120. + -5.70 118. + -5.76 116. + -5.78 113. + -5.76 111. + -5.70 109. + -5.60 107. + -5.46 104. + -5.28 102. + -5.06 100. + -4.80 97.9 + -4.50 95.7 + -4.17 93.6 + -3.80 91.5 +REG_LINE: 197 + -18.4 146. + -19.0 143. + -19.5 140. + -19.9 137. + -20.3 133. + -20.7 130. + -20.9 127. + -21.1 124. + -21.3 120. + -21.4 117. + -21.4 114. + -21.4 110. + -21.3 107. + -21.1 104. + -20.9 100. + -20.7 96.9 + -20.3 93.6 + -20.0 90.4 + -19.5 87.1 + -19.0 83.9 + -18.5 80.8 + -17.9 77.7 + -17.2 74.6 + -16.5 71.6 + -15.7 68.6 + -14.9 65.7 + -14.0 62.8 + -13.1 60.0 + -12.1 57.3 + -11.1 54.7 + -9.99 52.1 + -8.87 49.6 + -7.71 47.2 + -6.50 44.9 + -5.26 42.6 + -3.98 40.5 + -2.66 38.4 + -1.30 36.5 + 0.922E-01 34.6 + 1.52 32.9 + 2.97 31.2 + 4.45 29.6 + 5.96 28.2 + 7.50 26.9 + 9.05 25.6 + 10.6 24.5 + 12.2 23.5 + 13.8 22.6 + 15.5 21.8 + 17.1 21.2 + 18.8 20.7 + 20.4 20.2 + 22.1 19.9 + 23.8 19.7 + 25.4 19.7 + 27.1 19.7 + 28.8 19.9 + 30.5 20.2 + 32.1 20.6 + 33.8 21.2 + 35.4 21.8 + 37.0 22.6 + 38.7 23.5 + 40.2 24.5 + 41.8 25.6 + 43.4 26.8 + 44.9 28.1 + 46.4 29.6 + 47.9 31.1 + 49.4 32.8 + 50.8 34.5 + 52.2 36.4 + 53.5 38.4 + 54.9 40.4 + 56.2 42.6 + 57.4 44.8 + 58.6 47.1 + 59.8 49.5 + 60.9 52.0 + 62.0 54.6 + 63.0 57.2 + 64.0 60.0 + 64.9 62.7 + 65.8 65.6 + 66.6 68.5 + 67.4 71.5 + 68.1 74.5 + 68.8 77.5 + 69.4 80.7 + 69.9 83.8 + 70.4 87.0 + 70.9 90.2 + 71.3 93.5 + 71.6 96.8 + 71.9 100. + 72.1 103. + 72.2 107. + 72.3 110. + 72.3 113. + 72.3 117. + 72.2 120. + 72.1 123. + 71.9 127. + 71.6 130. + 71.3 133. + 70.9 137. + 70.4 140. + 69.9 143. + 69.4 146. + 68.8 149. + 68.1 152. + 67.4 155. + 66.6 158. + 65.8 161. + 64.9 164. + 64.0 167. + 63.0 170. + 62.0 172. + 60.9 175. + 59.8 177. + 58.6 180. + 57.4 182. + 56.2 184. + 54.9 186. + 53.5 189. + 52.2 190. + 50.8 192. + 49.4 194. + 47.9 196. + 46.4 197. + 44.9 199. + 43.4 200. + 41.8 201. + 40.2 202. + 38.7 203. + 37.0 204. + 35.4 205. + 33.8 206. + 32.1 206. + 30.5 207. + 28.8 207. + 27.1 207. + 25.4 207. + 23.8 207. + 22.1 207. + 20.4 207. + 18.8 206. + 17.1 206. + 15.5 205. + 13.8 204. + 12.2 203. + 10.6 202. + 9.05 201. + 7.50 200. + 5.96 199. + 4.45 197. + 2.97 196. + 1.52 194. + 0.922E-01 192. + -1.30 190. + -2.66 188. + -3.98 186. + -5.26 184. + -6.50 182. + -7.71 180. + -8.87 177. + -9.99 175. + -11.1 172. + -12.1 170. + -13.1 167. + -14.0 164. + -14.9 161. + -15.7 158. + -16.5 155. + -17.2 152. + -17.9 149. + -18.5 146. + -19.0 143. + -19.5 140. + -20.0 137. + -20.3 133. + -20.7 130. + -20.9 127. + -21.1 123. + -21.3 120. + -21.4 117. + -21.4 113. + -21.4 110. + -21.3 107. + -21.1 103. + -20.9 100. + -20.7 96.7 + -20.3 93.4 + -19.9 90.1 + -19.5 86.9 + -19.0 83.7 + -18.4 80.6 +REG_LINE: 197 + -33.1 157. + -33.8 153. + -34.5 149. + -35.1 145. + -35.6 140. + -36.0 136. + -36.4 131. + -36.7 127. + -36.9 123. + -37.0 118. + -37.0 114. + -37.0 109. + -36.9 105. + -36.7 100. + -36.4 95.8 + -36.1 91.4 + -35.6 87.0 + -35.1 82.7 + -34.5 78.4 + -33.9 74.1 + -33.1 69.9 + -32.3 65.7 + -31.4 61.6 + -30.5 57.6 + -29.4 53.6 + -28.3 49.8 + -27.1 46.0 + -25.9 42.3 + -24.6 38.6 + -23.2 35.1 + -21.8 31.7 + -20.3 28.3 + -18.8 25.1 + -17.2 22.0 + -15.5 19.0 + -13.8 16.2 + -12.0 13.4 + -10.2 10.8 + -8.37 8.34 + -6.47 5.99 + -4.53 3.78 + -2.55 1.71 + -.540 -.225 + 1.51 -2.01 + 3.58 -3.65 + 5.69 -5.14 + 7.82 -6.47 + 9.97 -7.66 + 12.1 -8.69 + 14.3 -9.56 + 16.5 -10.3 + 18.7 -10.8 + 21.0 -11.2 + 23.2 -11.5 + 25.4 -11.6 + 27.7 -11.5 + 29.9 -11.2 + 32.1 -10.9 + 34.3 -10.3 + 36.5 -9.59 + 38.7 -8.72 + 40.9 -7.70 + 43.0 -6.52 + 45.2 -5.19 + 47.3 -3.70 + 49.4 -2.07 + 51.4 -.290 + 53.4 1.63 + 55.4 3.70 + 57.3 5.91 + 59.2 8.25 + 61.1 10.7 + 62.9 13.3 + 64.7 16.1 + 66.4 18.9 + 68.0 21.9 + 69.6 25.0 + 71.2 28.2 + 72.7 31.6 + 74.1 35.0 + 75.5 38.5 + 76.8 42.1 + 78.0 45.8 + 79.2 49.6 + 80.3 53.5 + 81.4 57.5 + 82.3 61.5 + 83.2 65.6 + 84.0 69.7 + 84.8 73.9 + 85.4 78.2 + 86.0 82.5 + 86.5 86.9 + 87.0 91.2 + 87.3 95.6 + 87.6 100. + 87.8 105. + 87.9 109. + 88.0 113. + 87.9 118. + 87.8 122. + 87.6 127. + 87.3 131. + 87.0 136. + 86.5 140. + 86.0 144. + 85.4 149. + 84.8 153. + 84.0 157. + 83.2 161. + 82.3 165. + 81.4 169. + 80.3 173. + 79.2 177. + 78.0 181. + 76.8 185. + 75.5 188. + 74.1 192. + 72.7 195. + 71.2 199. + 69.6 202. + 68.0 205. + 66.4 208. + 64.7 211. + 62.9 214. + 61.1 216. + 59.2 219. + 57.3 221. + 55.4 223. + 53.4 225. + 51.4 227. + 49.4 229. + 47.3 231. + 45.2 232. + 43.0 233. + 40.9 235. + 38.7 236. + 36.5 236. + 34.3 237. + 32.1 238. + 29.9 238. + 27.7 238. + 25.4 238. + 23.2 238. + 21.0 238. + 18.7 238. + 16.5 237. + 14.3 236. + 12.1 236. + 9.97 235. + 7.82 233. + 5.69 232. + 3.58 231. + 1.51 229. + -.540 227. + -2.55 225. + -4.53 223. + -6.47 221. + -8.37 219. + -10.2 216. + -12.0 213. + -13.8 211. + -15.5 208. + -17.2 205. + -18.8 202. + -20.3 199. + -21.8 195. + -23.2 192. + -24.6 188. + -25.9 185. + -27.1 181. + -28.3 177. + -29.4 173. + -30.5 169. + -31.4 165. + -32.3 161. + -33.1 157. + -33.9 153. + -34.5 149. + -35.1 144. + -35.6 140. + -36.1 135. + -36.4 131. + -36.7 127. + -36.9 122. + -37.0 118. + -37.0 113. + -37.0 109. + -36.9 104. + -36.7 99.9 + -36.4 95.5 + -36.0 91.1 + -35.6 86.7 + -35.1 82.4 + -34.5 78.1 + -33.8 73.8 + -33.1 69.6 +REG_LINE: 197 + -47.7 168. + -48.6 163. + -49.5 158. + -50.2 152. + -50.8 147. + -51.4 141. + -51.8 136. + -52.2 130. + -52.4 125. + -52.6 119. + -52.7 114. + -52.6 108. + -52.5 102. + -52.2 96.9 + -51.9 91.4 + -51.4 85.9 + -50.9 80.4 + -50.3 75.0 + -49.5 69.6 + -48.7 64.3 + -47.8 59.0 + -46.7 53.8 + -45.6 48.7 + -44.4 43.6 + -43.1 38.7 + -41.8 33.8 + -40.3 29.1 + -38.8 24.5 + -37.1 19.9 + -35.4 15.5 + -33.6 11.2 + -31.8 7.08 + -29.8 3.06 + -27.8 -.822 + -25.7 -4.55 + -23.6 -8.14 + -21.4 -11.6 + -19.1 -14.8 + -16.8 -17.9 + -14.5 -20.9 + -12.0 -23.6 + -9.56 -26.2 + -7.04 -28.6 + -4.49 -30.9 + -1.89 -32.9 + .740 -34.8 + 3.40 -36.5 + 6.09 -37.9 + 8.81 -39.2 + 11.5 -40.3 + 14.3 -41.2 + 17.1 -41.9 + 19.8 -42.4 + 22.6 -42.7 + 25.4 -42.8 + 28.2 -42.7 + 31.0 -42.4 + 33.8 -41.9 + 36.5 -41.2 + 39.3 -40.3 + 42.0 -39.3 + 44.7 -38.0 + 47.4 -36.5 + 50.1 -34.8 + 52.7 -33.0 + 55.3 -30.9 + 57.9 -28.7 + 60.4 -26.3 + 62.9 -23.7 + 65.3 -21.0 + 67.7 -18.0 + 70.0 -14.9 + 72.3 -11.7 + 74.5 -8.26 + 76.6 -4.68 + 78.7 -.956 + 80.7 2.92 + 82.6 6.93 + 84.5 11.1 + 86.3 15.4 + 88.0 19.8 + 89.6 24.3 + 91.2 28.9 + 92.6 33.7 + 94.0 38.5 + 95.3 43.5 + 96.5 48.5 + 97.6 53.6 + 98.7 58.8 + 99.6 64.1 + 100. 69.4 + 101. 74.8 + 102. 80.2 + 102. 85.7 + 103. 91.2 + 103. 96.7 + 103. 102. + 104. 108. + 104. 113. + 104. 119. + 103. 125. + 103. 130. + 103. 136. + 102. 141. + 102. 147. + 101. 152. + 100. 157. + 99.6 163. + 98.7 168. + 97.6 173. + 96.5 178. + 95.3 183. + 94.0 188. + 92.6 193. + 91.2 198. + 89.6 203. + 88.0 207. + 86.3 212. + 84.5 216. + 82.6 220. + 80.7 224. + 78.7 228. + 76.6 232. + 74.5 235. + 72.3 239. + 70.0 242. + 67.7 245. + 65.3 248. + 62.9 251. + 60.4 253. + 57.9 256. + 55.3 258. + 52.7 260. + 50.1 262. + 47.4 263. + 44.7 265. + 42.0 266. + 39.3 267. + 36.5 268. + 33.8 269. + 31.0 269. + 28.2 270. + 25.4 270. + 22.6 270. + 19.8 269. + 17.1 269. + 14.3 268. + 11.5 267. + 8.81 266. + 6.09 265. + 3.40 263. + .740 262. + -1.89 260. + -4.49 258. + -7.04 256. + -9.56 253. + -12.0 251. + -14.5 248. + -16.8 245. + -19.1 242. + -21.4 238. + -23.6 235. + -25.7 231. + -27.8 228. + -29.8 224. + -31.8 220. + -33.6 216. + -35.4 211. + -37.1 207. + -38.8 202. + -40.3 198. + -41.8 193. + -43.1 188. + -44.4 183. + -45.6 178. + -46.7 173. + -47.8 168. + -48.7 163. + -49.5 157. + -50.3 152. + -50.9 146. + -51.4 141. + -51.9 135. + -52.2 130. + -52.5 124. + -52.6 119. + -52.7 113. + -52.6 108. + -52.4 102. + -52.2 96.5 + -51.8 91.0 + -51.4 85.5 + -50.8 80.0 + -50.2 74.6 + -49.5 69.2 + -48.6 63.9 + -47.7 58.6 +REG_LINE: 141 + -62.3 179. + -63.4 173. + -64.4 167. + -65.3 160. + -66.1 154. + -66.8 147. + -67.3 140. + -67.7 134. + -68.0 127. + -68.2 120. + -68.3 114. + -68.2 107. + -68.1 100. + -67.8 93.6 + -67.3 87.0 + -66.8 80.4 + -66.2 73.8 + -65.4 67.3 + -64.5 60.8 + -63.5 54.4 + -62.4 48.1 + -61.2 41.9 + -59.9 35.7 + -58.4 29.7 + -56.9 23.8 + -55.2 17.9 + -53.5 12.2 + -51.6 6.66 + -49.6 1.22 + -47.6 -4.07 + -45.4 -9.21 + -43.2 -14.2 + -40.9 -19.0 + -38.5 -23.7 + -36.0 -28.2 + -33.4 -32.5 + -30.8 -36.6 + -28.1 -40.5 + -25.3 -44.2 + -22.4 -47.7 + -19.5 -51.1 + -16.6 -54.2 + -13.5 -57.1 + -10.5 -59.7 + -7.36 -62.2 + -4.21 -64.4 + -1.01 -66.4 + 2.22 -68.2 + 5.47 -69.7 + 8.76 -71.1 + 12.1 -72.1 + 15.4 -73.0 + 18.7 -73.6 + 22.1 -73.9 + 25.4 -74.1 + 28.8 -73.9 + 32.1 -73.6 + 35.4 -73.0 + 38.8 -72.2 + 42.1 -71.1 + 45.3 -69.8 + 48.6 -68.3 + 51.8 -66.5 + 55.0 -64.5 + 58.2 -62.3 + 61.3 -59.8 + 64.4 -57.2 + 67.4 -54.3 + 70.4 -51.2 + 73.3 -47.9 + 76.1 -44.3 + 78.9 -40.6 + 81.6 -36.7 + 84.3 -32.6 + 86.8 -28.3 + 89.3 -23.8 + 91.7 -19.2 + 94.1 -14.4 + 96.3 -9.39 + 98.5 -4.25 + 101. 1.03 + 102. 6.46 + 104. 12.0 + 106. 17.7 + 108. 23.5 + 109. 29.5 + 111. 35.5 + 112. 41.7 + 113. 47.9 + 114. 54.2 + 115. 60.6 + 116. 67.0 + 117. 73.6 + 118. 80.1 + 118. 86.7 + 119. 93.4 + 119. 100. + 119. 107. + 119. 113. + 119. 120. + 119. 127. + 119. 133. + 118. 140. + 118. 147. + 117. 153. + 116. 160. + 115. 166. + 114. 173. + 113. 179. + 112. 185. + 111. 191. + 109. 197. + 108. 203. + 106. 209. + 104. 215. + 102. 220. + 101. 226. + 98.5 231. + 96.3 236. + 94.1 241. + 91.7 246. + 89.3 251. + 86.8 255. + 84.3 259. + 81.6 264. + 78.9 267. + 76.1 271. + 73.3 275. + 70.4 278. + 67.4 281. + 64.4 284. + 61.3 287. + 58.2 289. + 55.0 291. + 51.8 293. + 48.6 295. + 45.3 297. + 42.1 298. + 38.8 299. + 35.4 300. + 34.7 300. +REG_LINE: 53 + 16.2 300. + 15.4 300. + 12.1 299. + 8.76 298. + 5.47 297. + 2.22 295. + -1.01 293. + -4.21 291. + -7.36 289. + -10.5 287. + -13.5 284. + -16.6 281. + -19.5 278. + -22.4 275. + -25.3 271. + -28.1 267. + -30.8 263. + -33.4 259. + -36.0 255. + -38.5 251. + -40.9 246. + -43.2 241. + -45.4 236. + -47.6 231. + -49.6 226. + -51.6 220. + -53.5 215. + -55.2 209. + -56.9 203. + -58.4 197. + -59.9 191. + -61.2 185. + -62.4 179. + -63.5 172. + -64.5 166. + -65.4 160. + -66.2 153. + -66.8 147. + -67.3 140. + -67.8 133. + -68.1 127. + -68.2 120. + -68.3 113. + -68.2 107. + -68.0 99.8 + -67.7 93.2 + -67.3 86.5 + -66.8 79.9 + -66.1 73.3 + -65.3 66.8 + -64.4 60.4 + -63.4 54.0 + -62.3 47.7 +REG_LINE: 128 + -77.0 190. + -78.3 183. + -79.4 175. + -80.5 168. + -81.4 160. + -82.1 153. + -82.8 145. + -83.3 137. + -83.6 129. + -83.8 122. + -83.9 114. + -83.8 106. + -83.6 98.1 + -83.3 90.3 + -82.8 82.6 + -82.2 74.9 + -81.4 67.2 + -80.5 59.6 + -79.5 52.0 + -78.3 44.6 + -77.1 37.2 + -75.6 29.9 + -74.1 22.8 + -72.4 15.7 + -70.6 8.81 + -68.7 2.01 + -66.6 -4.64 + -64.4 -11.1 + -62.2 -17.5 + -59.8 -23.7 + -57.3 -29.7 + -54.7 -35.5 + -51.9 -41.1 + -49.1 -46.5 + -46.2 -51.8 + -43.2 -56.8 + -40.2 -61.6 + -37.0 -66.1 + -33.7 -70.5 + -30.4 -74.6 + -27.0 -78.5 + -23.6 -82.1 + -20.0 -85.5 + -16.5 -88.6 + -12.8 -91.5 + -9.15 -94.1 + -5.42 -96.4 + -1.66 -98.5 + 2.14 -100. + 5.97 -102. + 9.83 -103. + 13.7 -104. + 17.6 -105. + 21.5 -105. + 25.4 -105. + 29.3 -105. + 33.2 -105. + 37.1 -104. + 41.0 -103. + 44.8 -102. + 48.7 -100. + 52.5 -98.5 + 56.2 -96.5 + 60.0 -94.2 + 63.6 -91.6 + 67.3 -88.7 + 70.9 -85.6 + 74.4 -82.2 + 77.8 -78.6 + 81.2 -74.7 + 84.6 -70.6 + 87.8 -66.3 + 91.0 -61.7 + 94.1 -56.9 + 97.1 -51.9 + 100. -46.7 + 103. -41.3 + 105. -35.7 + 108. -29.9 + 111. -23.9 + 113. -17.7 + 115. -11.4 + 117. -4.87 + 120. 1.78 + 121. 8.56 + 123. 15.5 + 125. 22.5 + 127. 29.7 + 128. 37.0 + 129. 44.3 + 130. 51.8 + 131. 59.3 + 132. 66.9 + 133. 74.6 + 134. 82.3 + 134. 90.0 + 135. 97.8 + 135. 106. + 135. 113. + 135. 121. + 135. 129. + 134. 137. + 134. 145. + 133. 152. + 132. 160. + 131. 168. + 130. 175. + 129. 183. + 128. 190. + 127. 197. + 125. 204. + 123. 211. + 121. 218. + 120. 225. + 117. 232. + 115. 238. + 113. 245. + 111. 251. + 108. 257. + 105. 263. + 103. 268. + 100. 274. + 97.1 279. + 94.1 284. + 91.0 289. + 87.8 293. + 84.6 298. + 82.5 300. +REG_LINE: 40 + -31.6 300. + -33.7 297. + -37.0 293. + -40.2 288. + -43.2 284. + -46.2 279. + -49.1 273. + -51.9 268. + -54.7 262. + -57.3 257. + -59.8 251. + -62.2 244. + -64.4 238. + -66.6 232. + -68.7 225. + -70.6 218. + -72.4 211. + -74.1 204. + -75.6 197. + -77.1 190. + -78.3 182. + -79.5 175. + -80.5 167. + -81.4 160. + -82.2 152. + -82.8 144. + -83.3 137. + -83.6 129. + -83.8 121. + -83.9 113. + -83.8 105. + -83.6 97.5 + -83.3 89.8 + -82.8 82.0 + -82.1 74.3 + -81.4 66.7 + -80.5 59.0 + -79.4 51.5 + -78.3 44.1 + -77.0 36.7 +REG_LINE: 97 + -91.6 201. + -93.1 193. + -94.4 184. + -95.6 176. + -96.6 167. + -97.5 158. + -98.2 149. + -98.8 140. + -99.2 132. + -99.4 123. + -99.5 114. + -99.5 105. + -99.2 95.9 + -98.8 87.0 + -98.3 78.2 + -97.6 69.3 + -96.7 60.6 + -95.7 51.9 + -94.5 43.3 + -93.2 34.8 + -91.7 26.3 + -90.1 18.0 + -88.3 9.83 + -86.4 1.77 + -84.3 -6.14 + -82.1 -13.9 + -79.8 -21.5 + -77.3 -28.9 + -74.7 -36.2 + -71.9 -43.2 + -69.1 -50.1 + -66.1 -56.7 + -63.0 -63.2 + -59.8 -69.4 + -56.5 -75.3 + -53.1 -81.1 + -49.5 -86.6 + -45.9 -91.8 + -42.2 -96.8 + -38.4 -101. + -34.5 -106. + -30.6 -110. + -26.5 -114. + -22.5 -117. + -18.3 -121. + -14.1 -124. + -9.84 -126. + -5.53 -129. + -1.19 -131. + 3.19 -133. + 7.59 -134. + 12.0 -135. + 16.5 -136. + 20.9 -136. + 25.4 -137. + 29.9 -136. + 34.3 -136. + 38.8 -135. + 43.2 -134. + 47.6 -133. + 52.0 -131. + 56.3 -129. + 60.6 -126. + 64.9 -124. + 69.1 -121. + 73.2 -118. + 77.3 -114. + 81.4 -110. + 85.3 -106. + 89.2 -102. + 93.0 -96.9 + 96.7 -92.0 + 100. -86.8 + 104. -81.3 + 107. -75.6 + 111. -69.6 + 114. -63.4 + 117. -57.0 + 120. -50.3 + 123. -43.5 + 126. -36.4 + 128. -29.2 + 131. -21.8 + 133. -14.2 + 135. -6.42 + 137. 1.49 + 139. 9.54 + 141. 17.7 + 143. 26.0 + 144. 34.5 + 145. 43.0 + 147. 51.6 + 148. 60.3 + 148. 69.0 + 149. 77.8 + 150. 86.7 + 150. 92.2 +REG_LINE: 23 + 150. 135. + 150. 140. + 149. 149. + 148. 158. + 148. 167. + 147. 175. + 145. 184. + 144. 192. + 143. 201. + 141. 209. + 139. 217. + 137. 225. + 135. 233. + 133. 241. + 131. 249. + 128. 256. + 126. 263. + 123. 270. + 120. 277. + 117. 284. + 114. 290. + 111. 296. + 109. 300. +REG_LINE: 35 + -57.7 300. + -59.8 296. + -63.0 290. + -66.1 284. + -69.1 277. + -71.9 270. + -74.7 263. + -77.3 256. + -79.8 248. + -82.1 241. + -84.3 233. + -86.4 225. + -88.3 217. + -90.1 209. + -91.7 201. + -93.2 192. + -94.5 184. + -95.7 175. + -96.7 166. + -97.6 158. + -98.3 149. + -98.8 140. + -99.2 131. + -99.5 122. + -99.5 113. + -99.4 104. + -99.2 95.3 + -98.8 86.4 + -98.2 77.5 + -97.5 68.7 + -96.6 60.0 + -95.6 51.3 + -94.4 42.7 + -93.1 34.2 + -91.6 25.7 +REG_LINE: 63 + -100. -13.5 + -98.0 -21.1 + -95.5 -29.8 + -92.9 -38.4 + -90.1 -46.7 + -87.2 -54.9 + -84.1 -62.8 + -80.9 -70.5 + -77.5 -78.0 + -74.1 -85.2 + -70.5 -92.2 + -66.7 -98.9 + -62.9 -105. + -58.9 -112. + -54.8 -117. + -50.7 -123. + -46.4 -128. + -42.0 -133. + -37.6 -138. + -33.1 -142. + -28.4 -146. + -23.8 -150. + -19.0 -153. + -14.3 -156. + -9.41 -159. + -4.52 -161. + .403 -163. + 5.36 -165. + 10.3 -166. + 15.3 -167. + 20.4 -168. + 25.4 -168. + 30.4 -168. + 35.4 -167. + 40.4 -166. + 45.4 -165. + 50.4 -163. + 55.3 -161. + 60.2 -159. + 65.0 -156. + 69.8 -153. + 74.5 -150. + 79.2 -146. + 83.8 -142. + 88.4 -138. + 92.8 -133. + 97.2 -129. + 101. -123. + 106. -118. + 110. -112. + 114. -106. + 118. -99.2 + 121. -92.5 + 125. -85.5 + 128. -78.3 + 132. -70.8 + 135. -63.1 + 138. -55.2 + 141. -47.0 + 144. -38.7 + 146. -30.1 + 149. -21.4 + 150. -17.1 +REG_LINE: 9 + 150. 244. + 149. 248. + 146. 257. + 144. 266. + 141. 274. + 138. 282. + 135. 290. + 132. 298. + 131. 300. +REG_LINE: 9 + -79.7 300. + -80.9 297. + -84.1 290. + -87.2 282. + -90.1 274. + -92.9 265. + -95.5 257. + -98.0 248. + -100. 240. +REG_LINE: 54 + -100. -72.8 + -99.7 -73.6 + -96.3 -82.4 + -92.7 -91.0 + -89.0 -99.3 + -85.1 -107. + -81.1 -115. + -77.0 -123. + -72.7 -130. + -68.3 -137. + -63.8 -143. + -59.1 -149. + -54.4 -155. + -49.5 -161. + -44.6 -166. + -39.6 -171. + -34.4 -175. + -29.2 -179. + -24.0 -183. + -18.7 -186. + -13.3 -189. + -7.85 -192. + -2.38 -194. + 3.13 -196. + 8.66 -197. + 14.2 -198. + 19.8 -199. + 25.4 -199. + 30.9 -199. + 36.5 -198. + 42.1 -197. + 47.6 -196. + 53.1 -194. + 58.6 -192. + 64.0 -189. + 69.4 -186. + 74.7 -183. + 80.0 -179. + 85.2 -175. + 90.3 -171. + 95.3 -166. + 100. -161. + 105. -155. + 110. -150. + 115. -143. + 119. -137. + 123. -130. + 128. -123. + 132. -115. + 136. -108. + 140. -99.6 + 144. -91.3 + 147. -82.7 + 150. -75.3 +REG_LINE: 2 + -99.9 300. + -100. 300. +REG_LINE: 13 + -100. -121. + -96.2 -129. + -91.8 -138. + -87.2 -146. + -82.5 -154. + -77.7 -162. + -72.7 -169. + -67.6 -176. + -62.4 -182. + -57.0 -188. + -51.6 -194. + -46.1 -199. + -45.1 -200. +REG_LINE: 13 + 96.0 -200. + 96.8 -199. + 102. -194. + 108. -188. + 113. -182. + 118. -176. + 123. -169. + 128. -162. + 133. -154. + 138. -146. + 143. -138. + 147. -130. + 150. -123. +REG_LINE: 6 + -100. -165. + -97.4 -170. + -92.3 -178. + -87.0 -187. + -81.6 -194. + -77.4 -200. +REG_LINE: 6 + 128. -200. + 132. -195. + 138. -187. + 143. -179. + 148. -170. + 150. -167. +REG_LINE: 10 + 40.9 118. + 24.4 113. + 7.79 108. + -8.78 104. + -25.4 98.9 + -41.9 94.2 + -58.5 89.5 + -75.1 84.8 + -91.7 80.0 + -100. 77.7 +REG_LINE: 12 + 38.0 132. + 24.6 112. + 11.2 92.1 + -2.25 72.0 + -15.7 52.0 + -29.1 31.9 + -42.5 11.9 + -55.9 -8.13 + -69.3 -28.2 + -82.7 -48.2 + -96.1 -68.2 + -100. -74.0 +REG_LINE: 13 + 32.0 142. + 25.0 111. + 18.0 81.0 + 11.1 50.5 + 4.10 20.1 + -2.86 -10.4 + -9.83 -40.8 + -16.8 -71.3 + -23.8 -102. + -30.7 -132. + -37.7 -163. + -44.7 -193. + -46.3 -200. +REG_LINE: 12 + 24.4 145. + 25.5 111. + 26.7 77.8 + 27.9 44.4 + 29.1 11.0 + 30.3 -22.4 + 31.5 -55.8 + 32.7 -89.2 + 33.8 -123. + 35.0 -156. + 36.2 -189. + 36.6 -200. +REG_LINE: 14 + 17.0 140. + 26.1 112. + 35.1 83.4 + 44.2 55.2 + 53.2 27.0 + 62.3 -1.14 + 71.3 -29.3 + 80.3 -57.5 + 89.4 -85.7 + 98.4 -114. + 107. -142. + 117. -170. + 126. -198. + 126. -200. +REG_LINE: 11 + 11.8 128. + 26.4 112. + 41.1 96.3 + 55.8 80.3 + 70.5 64.2 + 85.2 48.2 + 99.9 32.1 + 115. 16.1 + 129. 0.199E-02 + 144. -16.1 + 150. -22.6 +REG_LINE: 10 + 9.84 113. + 26.6 113. + 43.3 113. + 60.1 113. + 76.8 113. + 93.5 113. + 110. 113. + 127. 113. + 144. 113. + 150. 113. +REG_LINE: 11 + 11.8 98.5 + 26.4 115. + 41.1 131. + 55.8 147. + 70.5 163. + 85.2 179. + 99.9 195. + 115. 211. + 129. 227. + 144. 243. + 150. 250. +REG_LINE: 9 + 17.0 87.1 + 26.1 115. + 35.1 143. + 44.2 172. + 53.2 200. + 62.3 228. + 71.3 256. + 80.3 284. + 85.4 300. +REG_LINE: 8 + 24.4 82.3 + 25.5 116. + 26.7 149. + 27.9 182. + 29.1 216. + 30.3 249. + 31.5 283. + 32.1 300. +REG_LINE: 9 + 32.0 85.0 + 25.0 115. + 18.0 146. + 11.1 176. + 4.10 207. + -2.86 237. + -9.83 268. + -16.8 298. + -17.2 300. +REG_LINE: 12 + 38.0 94.7 + 24.6 115. + 11.2 135. + -2.25 155. + -15.7 175. + -29.1 195. + -42.5 215. + -55.9 235. + -69.3 255. + -82.7 275. + -96.1 295. + -99.4 300. +REG_LINE: 10 + 40.9 109. + 24.4 114. + 7.79 118. + -8.78 123. + -25.4 128. + -41.9 133. + -58.5 137. + -75.1 142. + -91.7 147. + -100. 149. +REG_LINE: 2 + 18.7 134. + 17.7 133. +REG_LINE: 2 + 20.4 129. + 19.4 128. +REG_LINE: 2 + 22.1 124. + 21.1 123. +REG_LINE: 2 + 23.8 119. + 22.8 117. +REG_LINE: 2 + 27.2 108. + 28.2 110. +REG_LINE: 2 + 28.8 103. + 29.8 104. +REG_LINE: 2 + 30.5 97.7 + 31.5 99.1 +REG_LINE: 2 + 32.2 92.4 + 33.2 93.8 +REG_LINE: 2 + 35.6 81.9 + 36.6 83.3 +REG_LINE: 2 + 37.3 76.6 + 38.3 78.1 +REG_LINE: 2 + 39.0 71.4 + 40.0 72.8 +REG_LINE: 2 + 40.7 66.1 + 41.7 67.5 +REG_LINE: 2 + 44.0 55.6 + 45.0 57.0 +REG_LINE: 2 + 45.7 50.3 + 46.7 51.8 +REG_LINE: 2 + 47.4 45.1 + 48.4 46.5 +REG_LINE: 2 + 49.1 39.8 + 50.1 41.2 +REG_LINE: 2 + 52.5 29.3 + 53.5 30.7 +REG_LINE: 2 + 54.2 24.0 + 55.2 25.5 +REG_LINE: 2 + 55.9 18.8 + 56.9 20.2 +REG_LINE: 2 + 57.5 13.5 + 58.6 14.9 +REG_LINE: 2 + 60.9 2.99 + 61.9 4.43 +REG_LINE: 2 + 62.6 -2.26 + 63.6 -.831 +REG_LINE: 2 + 64.3 -7.52 + 65.3 -6.09 +REG_LINE: 2 + 66.0 -12.8 + 67.0 -11.3 +REG_LINE: 2 + 69.4 -23.3 + 70.4 -21.9 +REG_LINE: 2 + 71.1 -28.6 + 72.1 -27.1 +REG_LINE: 2 + 72.7 -33.8 + 73.7 -32.4 +REG_LINE: 2 + 74.4 -39.1 + 75.4 -37.6 +REG_LINE: 2 + 77.8 -49.6 + 78.8 -48.2 +REG_LINE: 2 + 79.5 -54.9 + 80.5 -53.4 +REG_LINE: 2 + 81.2 -60.1 + 82.2 -58.7 +REG_LINE: 2 + 82.9 -65.4 + 83.9 -63.9 +REG_LINE: 2 + 86.3 -75.9 + 87.3 -74.5 +REG_LINE: 2 + 87.9 -81.2 + 88.9 -79.7 +REG_LINE: 2 + 89.6 -86.4 + 90.6 -85.0 +REG_LINE: 2 + 91.3 -91.7 + 92.3 -90.2 +REG_LINE: 2 + 94.7 -102. + 95.7 -101. +REG_LINE: 2 + 96.4 -107. + 97.4 -106. +REG_LINE: 2 + 98.1 -113. + 99.1 -111. +REG_LINE: 2 + 99.8 -118. + 101. -117. +REG_LINE: 2 + 103. -128. + 104. -127. +REG_LINE: 2 + 105. -134. + 106. -132. +REG_LINE: 2 + 107. -139. + 108. -138. +REG_LINE: 2 + 108. -144. + 109. -143. +REG_LINE: 2 + 112. -155. + 113. -153. +REG_LINE: 2 + 113. -160. + 114. -159. +REG_LINE: 2 + 115. -165. + 116. -164. +REG_LINE: 2 + 117. -171. + 118. -169. +REG_LINE: 2 + 120. -181. + 121. -180. +REG_LINE: 2 + 122. -186. + 123. -185. +REG_LINE: 2 + 123. -192. + 124. -190. +REG_LINE: 2 + 125. -197. + 126. -195. +REG_LINE: 2 + -80.3 169. + -81.8 170. +REG_LINE: 2 + -82.5 148. + -84.2 148. +REG_LINE: 2 + -83.7 126. + -85.5 126. +REG_LINE: 2 + -83.8 104. + -85.6 104. +REG_LINE: 2 + -80.7 61.1 + -82.3 60.3 +REG_LINE: 2 + -77.6 40.2 + -79.0 39.1 +REG_LINE: 2 + -73.4 19.9 + -74.7 18.7 +REG_LINE: 2 + -68.3 .672 + -69.4 -.674 +REG_LINE: 2 + -55.2 -34.3 + -56.0 -35.9 +REG_LINE: 2 + -47.4 -49.7 + -48.1 -51.3 +REG_LINE: 2 + -38.9 -63.4 + -39.5 -65.1 +REG_LINE: 2 + -29.7 -75.4 + -30.2 -77.1 +REG_LINE: 2 + -9.89 -93.6 + -10.2 -95.3 +REG_LINE: 2 + .619 -99.6 + .416 -101. +REG_LINE: 2 + 11.4 -103. + 11.3 -105. +REG_LINE: 2 + 22.3 -105. + 22.2 -107. +REG_LINE: 2 + 44.1 -102. + 44.2 -104. +REG_LINE: 2 + 54.7 -97.3 + 55.0 -99.1 +REG_LINE: 2 + 65.1 -90.4 + 65.4 -92.2 +REG_LINE: 2 + 75.1 -81.5 + 75.5 -83.2 +REG_LINE: 2 + 93.5 -57.9 + 94.1 -59.5 +REG_LINE: 2 + 102. -43.5 + 102. -45.1 +REG_LINE: 2 + 109. -27.5 + 110. -29.0 +REG_LINE: 2 + 116. -10.1 + 117. -11.5 +REG_LINE: 2 + 126. 28.3 + 128. 27.1 +REG_LINE: 2 + 130. 48.8 + 131. 47.9 +REG_LINE: 2 + 133. 70.0 + 134. 69.3 +REG_LINE: 2 + 134. 91.6 + 136. 91.3 +REG_LINE: 2 + 134. 135. + 136. 136. +REG_LINE: 2 + 133. 157. + 134. 158. +REG_LINE: 2 + 130. 178. + 131. 179. +REG_LINE: 2 + 126. 199. + 128. 200. +REG_LINE: 2 + 116. 237. + 117. 238. +REG_LINE: 2 + 109. 254. + 110. 256. +REG_LINE: 2 + 102. 270. + 102. 272. +REG_LINE: 2 + 93.5 285. + 94.1 286. +REG_LINE: 2 + -38.9 290. + -39.5 292. +REG_LINE: 2 + -47.4 277. + -48.1 278. +REG_LINE: 2 + -55.2 261. + -56.0 263. +REG_LINE: 2 + -68.3 226. + -69.4 228. +REG_LINE: 2 + -73.4 207. + -74.7 208. +REG_LINE: 2 + -77.6 187. + -79.0 188. +REG_LINE: 2 + -80.7 166. + -82.3 167. +REG_LINE: 2 + -83.8 123. + -85.6 123. +REG_LINE: 2 + -83.7 101. + -85.5 100. +REG_LINE: 2 + -82.5 78.9 + -84.2 78.4 +REG_LINE: 2 + -80.3 57.5 + -81.8 56.7 +REG_LINE: 15 + 25.5 113. + 24.9 115. + 24.3 117. + 23.7 119. + 23.1 121. + 22.5 123. + 21.9 125. + 21.2 127. + 20.6 128. + 20.0 130. + 19.4 132. + 18.8 134. + 18.2 136. + 17.6 138. + 17.0 140. +REG_LINE: 15 + 25.5 113. + 26.1 112. + 26.7 110. + 27.3 108. + 27.9 106. + 28.5 104. + 29.1 102. + 29.7 100. + 30.3 98.4 + 30.9 96.5 + 31.5 94.7 + 32.1 92.8 + 32.7 90.9 + 33.3 89.0 + 33.9 87.1 +REG_LINE: 15 + 33.9 87.1 + 34.5 85.3 + 35.1 83.4 + 35.7 81.5 + 36.3 79.6 + 36.9 77.8 + 37.5 75.9 + 38.1 74.0 + 38.7 72.1 + 39.3 70.2 + 39.9 68.4 + 40.5 66.5 + 41.1 64.6 + 41.8 62.7 + 42.4 60.8 +REG_LINE: 15 + 42.4 60.8 + 43.0 59.0 + 43.6 57.1 + 44.2 55.2 + 44.8 53.3 + 45.4 51.5 + 46.0 49.6 + 46.6 47.7 + 47.2 45.8 + 47.8 43.9 + 48.4 42.1 + 49.0 40.2 + 49.6 38.3 + 50.2 36.4 + 50.8 34.5 +REG_LINE: 15 + 50.8 34.5 + 51.4 32.7 + 52.0 30.8 + 52.6 28.9 + 53.2 27.0 + 53.8 25.2 + 54.4 23.3 + 55.0 21.4 + 55.6 19.5 + 56.2 17.6 + 56.8 15.8 + 57.4 13.9 + 58.0 12.0 + 58.6 10.1 + 59.2 8.25 +REG_LINE: 15 + 59.2 8.25 + 59.8 6.38 + 60.4 4.50 + 61.0 2.62 + 61.6 .740 + 62.3 -1.14 + 62.9 -3.02 + 63.5 -4.89 + 64.1 -6.77 + 64.7 -8.65 + 65.3 -10.5 + 65.9 -12.4 + 66.5 -14.3 + 67.1 -16.2 + 67.7 -18.0 +REG_LINE: 15 + 67.7 -18.0 + 68.3 -19.9 + 68.9 -21.8 + 69.5 -23.7 + 70.1 -25.6 + 70.7 -27.4 + 71.3 -29.3 + 71.9 -31.2 + 72.5 -33.1 + 73.1 -34.9 + 73.7 -36.8 + 74.3 -38.7 + 74.9 -40.6 + 75.5 -42.5 + 76.1 -44.3 +REG_LINE: 15 + 76.1 -44.3 + 76.7 -46.2 + 77.3 -48.1 + 77.9 -50.0 + 78.5 -51.9 + 79.1 -53.7 + 79.7 -55.6 + 80.3 -57.5 + 80.9 -59.4 + 81.5 -61.2 + 82.2 -63.1 + 82.8 -65.0 + 83.4 -66.9 + 84.0 -68.8 + 84.6 -70.6 +REG_LINE: 15 + 84.6 -70.6 + 85.2 -72.5 + 85.8 -74.4 + 86.4 -76.3 + 87.0 -78.1 + 87.6 -80.0 + 88.2 -81.9 + 88.8 -83.8 + 89.4 -85.7 + 90.0 -87.5 + 90.6 -89.4 + 91.2 -91.3 + 91.8 -93.2 + 92.4 -95.1 + 93.0 -96.9 +REG_LINE: 15 + 93.0 -96.9 + 93.6 -98.8 + 94.2 -101. + 94.8 -103. + 95.4 -104. + 96.0 -106. + 96.6 -108. + 97.2 -110. + 97.8 -112. + 98.4 -114. + 99.0 -116. + 99.6 -118. + 100. -119. + 101. -121. + 101. -123. +REG_LINE: 15 + 101. -123. + 102. -125. + 103. -127. + 103. -129. + 104. -131. + 104. -133. + 105. -134. + 106. -136. + 106. -138. + 107. -140. + 107. -142. + 108. -144. + 109. -146. + 109. -148. + 110. -150. +REG_LINE: 15 + 110. -150. + 110. -151. + 111. -153. + 112. -155. + 112. -157. + 113. -159. + 114. -161. + 114. -163. + 115. -165. + 115. -166. + 116. -168. + 117. -170. + 117. -172. + 118. -174. + 118. -176. +REG_LINE: 14 + 118. -176. + 119. -178. + 120. -180. + 120. -181. + 121. -183. + 121. -185. + 122. -187. + 123. -189. + 123. -191. + 124. -193. + 124. -195. + 125. -196. + 126. -198. + 126. -200. +REG_LINE: 15 + -82.8 82.6 + -83.3 90.3 + -83.6 98.1 + -83.8 106. + -83.9 114. + -83.8 122. + -83.6 129. + -83.3 137. + -82.8 145. + -82.1 153. + -81.4 160. + -80.5 168. + -79.4 175. + -78.3 183. + -77.0 190. +REG_LINE: 15 + -82.8 82.6 + -82.2 74.9 + -81.4 67.2 + -80.5 59.6 + -79.5 52.0 + -78.3 44.6 + -77.1 37.2 + -75.6 29.9 + -74.1 22.8 + -72.4 15.7 + -70.6 8.81 + -68.7 2.01 + -66.6 -4.64 + -64.4 -11.1 + -62.2 -17.5 +REG_LINE: 15 + -62.2 -17.5 + -59.8 -23.7 + -57.3 -29.7 + -54.7 -35.5 + -51.9 -41.1 + -49.1 -46.5 + -46.2 -51.8 + -43.2 -56.8 + -40.2 -61.6 + -37.0 -66.1 + -33.7 -70.5 + -30.4 -74.6 + -27.0 -78.5 + -23.6 -82.1 + -20.0 -85.5 +REG_LINE: 15 + -20.0 -85.5 + -16.5 -88.6 + -12.8 -91.5 + -9.15 -94.1 + -5.42 -96.4 + -1.66 -98.5 + 2.14 -100. + 5.97 -102. + 9.83 -103. + 13.7 -104. + 17.6 -105. + 21.5 -105. + 25.4 -105. + 29.3 -105. + 33.2 -105. +REG_LINE: 15 + 33.2 -105. + 37.1 -104. + 41.0 -103. + 44.8 -102. + 48.7 -100. + 52.5 -98.5 + 56.2 -96.5 + 60.0 -94.2 + 63.6 -91.6 + 67.3 -88.7 + 70.9 -85.6 + 74.4 -82.2 + 77.8 -78.6 + 81.2 -74.7 + 84.6 -70.6 +REG_LINE: 15 + 84.6 -70.6 + 87.8 -66.3 + 91.0 -61.7 + 94.1 -56.9 + 97.1 -51.9 + 100. -46.7 + 103. -41.3 + 105. -35.7 + 108. -29.9 + 111. -23.9 + 113. -17.7 + 115. -11.4 + 117. -4.87 + 120. 1.78 + 121. 8.56 +REG_LINE: 15 + 121. 8.56 + 123. 15.5 + 125. 22.5 + 127. 29.7 + 128. 37.0 + 129. 44.3 + 130. 51.8 + 131. 59.3 + 132. 66.9 + 133. 74.6 + 134. 82.3 + 134. 90.0 + 135. 97.8 + 135. 106. + 135. 113. +REG_LINE: 15 + 135. 113. + 135. 121. + 135. 129. + 134. 137. + 134. 145. + 133. 152. + 132. 160. + 131. 168. + 130. 175. + 129. 183. + 128. 190. + 127. 197. + 125. 204. + 123. 211. + 121. 218. +REG_LINE: 15 + 121. 218. + 120. 225. + 117. 232. + 115. 238. + 113. 245. + 111. 251. + 108. 257. + 105. 263. + 103. 268. + 100. 274. + 97.1 279. + 94.1 284. + 91.0 289. + 87.8 293. + 84.6 298. +REG_LINE: 2 + 84.6 298. + 82.5 300. +REG_LINE: 12 + -31.6 300. + -33.7 297. + -37.0 293. + -40.2 288. + -43.2 284. + -46.2 279. + -49.1 273. + -51.9 268. + -54.7 262. + -57.3 257. + -59.8 251. + -62.2 244. +REG_LINE: 15 + -62.2 244. + -64.4 238. + -66.6 232. + -68.7 225. + -70.6 218. + -72.4 211. + -74.1 204. + -75.6 197. + -77.1 190. + -78.3 182. + -79.5 175. + -80.5 167. + -81.4 160. + -82.2 152. + -82.8 144. +REG_LINE: 15 + -82.8 144. + -83.3 137. + -83.6 129. + -83.8 121. + -83.9 113. + -83.8 105. + -83.6 97.5 + -83.3 89.8 + -82.8 82.0 + -82.1 74.3 + -81.4 66.7 + -80.5 59.0 + -79.4 51.5 + -78.3 44.1 + -77.0 36.7 +REG_LINE: 15 + -82.8 144. + -83.3 137. + -83.6 129. + -83.8 121. + -83.9 113. + -83.8 105. + -83.6 97.5 + -83.3 89.8 + -82.8 82.0 + -82.1 74.3 + -81.4 66.7 + -80.5 59.0 + -79.4 51.5 + -78.3 44.1 + -77.0 36.7 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '0.0' + 27.8 114. BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '50.0' + 36.3 87.9 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '100.0' + 44.7 61.6 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '150.0' + 53.2 35.3 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '200.0' + 61.6 9.02 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '250.0' + 70.1 -17.3 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '300.0' + 78.5 -43.6 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '350.0' + 86.9 -69.9 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '400.0' + 95.4 -96.2 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '450.0' + 104. -122. BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '500.0' + 112. -149. BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '550.0' + 121. -175. BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-3.0' + -80.3 82.7 BC .997 0.724E-01 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-2.5' + -59.8 -16.6 BC .936 .352 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-2.0' + -18.4 -83.6 BC .673 .740 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-1.5' +Symbol = "p1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 2" # Axis Label + Symbol = "p2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Map2 = # Mapping between nodes 1 and 2 + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + InvB = 1 # Second Mapping used in inverse direction + MapA = # First component Mapping + Begin MathMap # Transformation using mathematical functions + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Fwd1 = "r=sqrt(x*x+y*y)" # Forward function 1 + Fwd2 = "theta=atan2(y,x)" # Forward function 2 + Inv1 = "x=r*cos(theta)" # Inverse function 1 + Inv2 = "y=r*sin(theta)" # Inverse function 2 + SimpFI = 1 # Forward-inverse pairs may simplify + SimpIF = 1 # Inverse-forward pairs may simplify + End MathMap + MapB = # Second component Mapping + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -101.5 # Shift for axis 1 + Sft2 = -201.5 # Shift for axis 2 + End WinMap + End CmpMap + End FrameSet + Begin FrameSet # Set of inter-related coordinate systems +# Title = "FK5 equatorial coordinates; mean equinox J2000.0; gnomonic projection" # Title of coordinate system +# Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain +# Epoch = 1977.77512999212 # Besselian epoch of observation +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# System = "FK5" # Coordinate system type +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Dir1 = 0 # Plot axis 1 in reverse direction +# Bot2 = -1.5707963267949 # Lowest legal axis value +# Top2 = 1.5707963267949 # Highest legal axis value + IsA Frame # Coordinate system description + Nframe = 2 # Number of Frames in FrameSet + Base = 1 # Index of base Frame + Currnt = 2 # Index of current Frame + Lnk2 = 1 # Node 2 is derived from node 1 + Frm1 = # Frame number 1 + Begin Frame # Coordinate system description + Title = "Pixel Coordinates" # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "GRID" # Coordinate system domain +# Lbl1 = "Pixel axis 1" # Label for axis 1 +# Lbl2 = "Pixel axis 2" # Label for axis 2 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Pixel axis 1" # Axis Label + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Pixel axis 2" # Axis Label + End Axis + End Frame + Frm2 = # Frame number 2 + Begin SkyFrame # Description of celestial coordinate system + Ident = " " # Permanent Object identification string + IsA Object # AST Object +# Title = "FK5 equatorial coordinates; mean equinox J2000.0; gnomonic projection" # Title of coordinate system + Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain + Epoch = 1977.77512999212 # Besselian epoch of observation +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 + System = "FK5" # Coordinate system type +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Dir1 = 0 # Plot axis 1 in reverse direction +# Bot2 = -1.5707963267949 # Lowest legal axis value +# Top2 = 1.5707963267949 # Highest legal axis value + Ax1 = # Axis number 1 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + Ax2 = # Axis number 2 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + IsA Frame # Coordinate system description + Proj = "gnomonic" # Description of sky projection + Eqnox = 2000 # Julian epoch of mean equinox + SRefIs = "Ignored" # Not rotated (ref. pos. is ignored) + SRef1 = 0 # Ref. pos. RA 0:00:00.0 + SRef2 = -1.57079633000002 # Ref. pos. Dec -90:00:00 + End SkyFrame + Map2 = # Mapping between nodes 1 and 2 + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -893.6318379289 # Shift for axis 1 + Sft2 = -223.8380193875 # Shift for axis 2 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = -3.25441534352674e-06 # Forward matrix value + M1 = -1.60367292352974e-08 # Forward matrix value + M2 = -1.812057487023e-08 # Forward matrix value + M3 = 3.25725533992408e-06 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WcsMap # FITS-WCS sky projection + Nin = 2 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Type = "TAN" # Gnomonic projection + End WcsMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 0 # Polar longit 32.8 -102. BC -.145 .989 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-0.5' + 119. 9.22 BC -.965 .262 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '0.0' + 132. 113. BC -1.00 0.125E-02 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '0.5' + 119. 218. TC .964 .265 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '1.0' + 82.6 296. TC .787 .617 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '2.5' + -59.8 243. TC -.936 .352 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '3.0' + -80.3 144. TC -.997 0.724E-01 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 1 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: ' A FITS test' + 31.0 313. BC .000 1.00 + + + + + FITS test number 3 + ==================== + + + +AST_SHOW: + +REG_SINK: +SIMPLE = T / file does conform to FITS standard +BITPIX = 16 / number of bits per data pixel +NAXIS = 2 / number of data axes +NAXIS1 = 1787 / length of data axis 1 +NAXIS2 = 447 / length of data axis 2 +EXTEND = T / FITS dataset may contain extensions +COMMENT FITS (Flexible Image Transport System) format defined in Astronomy and +COMMENT Astrophysics Supplement Series v44/p363, v44/p371, v73/p359, v73/p365. +COMMENT Contact the NASA Science Office of Standards and Technology for the +COMMENT FITS Definition document #100 and other FITS information. +PLATENUM= '3665 ' / Plate number +EMULSION= 'IIIaJ ' / Kodak emulsion type +FILTER = 'GG395 ' / Schott glass filter type +PLTSCALE= '67.14 ' / [arcsec/mm] plate scale +FIELDNUM= '1 ' / Sky survey field number +TELESCOP= 'UKST ' / Telescope on which the plate was taken +TELETYPE= 'SCHM ' / Type of telescope +SITELAT = -0.5458410576565 / [radians] latitude of telescope +SITELONG= 2.601766194458 / [radians] longitude of telescope +LST = '00:20 ' / [hh:mm] local sidereal time at start of obs +INSTRUME= 'SuperCOSMOS I' / Measuring machine +DATE-MES= '2000-11-04' / [yyyy-mm-dd] Date of this plate measurement +NHKLINES= 146 / Number of lines from house-keeping file +HKLIN001= 'JOB.JOBNO UKJ001' +HKLIN002= 'JOB.DATE-MES 2000:11:04' +HKLIN003= 'JOB.TIME 12:51:09' +HKLIN004= 'JOB.INSTRUME SuperCOSMOS I' +HKLIN005= 'JOB.ORIGIN Royal Observatory Edinburgh' +HKLIN006= 'JOB.SOFTWARE /home/scosdev/v033' +HKLIN007= 'JOB.OPERATOR ebt' +HKLIN008= 'JOB.USER htm' +HKLIN009= 'JOB.USERREF NONE' +HKLIN010= 'JOB.UORIGIN ROE' +HKLIN011= 'JOB.UCOUNTRY uk' +HKLIN012= 'JOB.COMMENT Digital catalogue of the Sky' +HKLIN013= 'JOB.IAM_FILE iam.srt'/ / ' / +HKLIN014= 'PLATE.TELESCOP UKST' +HKLIN015= 'PLATE.TELTYPE SCHM' +HKLIN016= 'PLATE.PLATE 3665' +HKLIN017= 'PLATE.MATERIAL 3mm glass' +HKLIN018= 'PLATE.EMULSION IIIaJ' +HKLIN019= 'PLATE.FILTER GG395' +HKLIN020= 'PLATE.PSCALE 67.14' +HKLIN021= 'PLATE.FIELD 1' +HKLIN022= 'PLATE.RA_PNT 0' +HKLIN023= 'PLATE.DEC_PNT -90' +HKLIN024= 'PLATE.RADECSYS FK4' +HKLIN025= 'PLATE.EQUINOX 1950' +HKLIN026= 'PLATE.TIMESYS BESSELIAN' +HKLIN027= 'PLATE.EPOCH 1977.78'/ / ' / +HKLIN028= 'PLATE.EXPOSURE 75' +HKLIN029= 'PLATE.UTDATE 771011' +HKLIN030= 'PLATE.LST 0020' +HKLIN031= 'PLATE.MJD 43426.573008796' +HKLIN032= 'PLATE.TELLAT -0.54584105765654' +HKLIN033= 'PLATE.TELLONG 2.6017661944583' +HKLIN034= 'PLATE.TELHT 1145' +HKLIN035= 'PLATE.TEMP 273.155'/ / ' / +HKLIN036= 'PLATE.ATMOSP 1013.25'/ / ' / +HKLIN037= 'PLATE.HUMID 0.5' +HKLIN038= 'PLATE.WAVE 4500' +HKLIN039= 'PLATE.TROPL 0.0065' +HKLIN040= 'CALIBRATION.CALTYPE SPLINE' +HKLIN041= 'CALIBRATION.STEPWEDG KPNO' +HKLIN042= 'CALIBRATION.NSTEPS 8' +HKLIN043= 'MEASUREMENT.ORIENTAT news' +HKLIN044= 'MEASUREMENT.EMULPOS UP' +HKLIN045= 'MEASUREMENT.SCANFILT 14' +HKLIN046= 'MEASUREMENT.SOSP 552' +HKLIN047= 'MEASUREMENT.STEPSIZE 10' +HKLIN048= 'MEASUREMENT.SCANLEN 1152' +HKLIN049= 'MEASUREMENT.A-XMIN 1622000'/ / ' / +HKLIN050= 'MEASUREMENT.A-YMIN 1622000'/ / ' / +HKLIN051= 'MEASUREMENT.A-XMAX 33878000' +HKLIN052= 'MEASUREMENT.A-YMAX 33878000' +HKLIN053= 'MEASUREMENT.X_PNT 17500000' +HKLIN054= 'MEASUREMENT.Y_PNT 18000000' +HKLIN055= 'ANALYSIS.NPARAMS 32' +HKLIN056= 'ANALYSIS.AREACUT 8' +HKLIN057= 'ANALYSIS.AP-PARAM 1.07' +HKLIN058= 'DEBLEND.DB-PARAM 1.05' +HKLIN059= 'DEBLEND.DB-AMIN 16' +HKLIN060= 'DEBLEND.DB-AMAX 100000' +HKLIN061= 'DEBLEND.DB-ACUT 8' +HKLIN062= 'DEBLEND.DB-LEVEL 16' +HKLIN063= 'DEBLEND.SELECT PARENT+CHILD' +HKLIN064= 'SKY.SKYSQUAR 64' +HKLIN065= 'SKY.SKYDEFN MEDIAN' +HKLIN066= 'SKY.SKYFILTR bdkjunk'/ / ' / +HKLIN067= 'SKY.F-THRESH 8' +HKLIN068= 'SKY.F-SCLEN 4' +HKLIN069= 'THRESHOLDING.PCUT 10' +HKLIN070= 'IAMQC.AREAMIN 8' +HKLIN071= 'IAMQC.AREAMAX 77346' +HKLIN072= 'IAMQC.MINMAG -30515' +HKLIN073= 'IAMQC.MAXMAG -17954' +HKLIN074= 'IAMQC.MINELL 0.0004156232' +HKLIN075= 'IAMQC.MAXELL 1' +HKLIN076= 'IAMQC.MODELL 0.14' +HKLIN077= 'IAMQC.MODOR 91' +HKLIN078= 'IAMQC.MIDELL 0.21' +HKLIN079= 'IAMQC.MIDOR 93' +HKLIN080= 'IAMQC.MEANELL 0.2467037' +HKLIN081= 'IAMQC.MEANOR 91.63474' +HKLIN082= 'IAMQC.NUMOBJ 556985' +HKLIN083= 'IAMQC.PARENTS 486656' +HKLIN084= 'IAMQC.RANGING TRUE' +HKLIN085= 'IAMQC.LANE_1 15571' +HKLIN086= 'IAMQC.LANE_2 33207' +HKLIN087= 'IAMQC.LANE_3 51478' +HKLIN088= 'IAMQC.LANE_4 69944' +HKLIN089= 'IAMQC.LANE_5 89236' +HKLIN090= 'IAMQC.LANE_6 108416' +HKLIN091= 'IAMQC.LANE_7 127481' +HKLIN092= 'IAMQC.LANE_8 146699' +HKLIN093= 'IAMQC.LANE_9 166380' +HKLIN094= 'IAMQC.LANE_10 186126' +HKLIN095= 'IAMQC.LANE_11 205946' +HKLIN096= 'IAMQC.LANE_12 225915' +HKLIN097= 'IAMQC.LANE_13 245926' +HKLIN098= 'IAMQC.LANE_14 266574' +HKLIN099= 'IAMQC.LANE_15 287150' +HKLIN100= 'IAMQC.LANE_16 308087' +HKLIN101= 'IAMQC.LANE_17 328830' +HKLIN102= 'IAMQC.LANE_18 350253' +HKLIN103= 'IAMQC.LANE_19 370738' +HKLIN104= 'IAMQC.LANE_20 391722' +HKLIN105= 'IAMQC.LANE_21 412801' +HKLIN106= 'IAMQC.LANE_22 433795' +HKLIN107= 'IAMQC.LANE_23 454383' +HKLIN108= 'IAMQC.LANE_24 474711' +HKLIN109= 'IAMQC.LANE_25 495108' +HKLIN110= 'IAMQC.LANE_26 515755' +HKLIN111= 'IAMQC.LANE_27 536499' +HKLIN112= 'IAMQC.LANE_28 556985' +HKLIN113= 'XYTORADEC.STARCAT /sdata/scos/refcats/tycho2.FIT' +HKLIN114= 'XYTORADEC.BRIGHTLIM 9' +HKLIN115= 'XYTORADEC.C-EQUIN 2000' +HKLIN116= 'XYTORADEC.C-EQTSYS JULIAN' +HKLIN117= 'XYTORADEC.C-EPOCH 2000' +HKLIN118= 'XYTORADEC.C-EPTSYS JULIAN' +HKLIN119= 'XYTORADEC.R-EQUIN 2000' +HKLIN120= 'XYTORADEC.R-TSYS JULIAN' +HKLIN121= 'XYTORADEC.MAXITER 5000' +HKLIN122= 'XYTORADEC.RCRITINI 500000' +HKLIN123= 'XYTORADEC.RCRITABS 50000' +HKLIN124= 'XYTORADEC.RCRITREL 1' +HKLIN125= 'XYTORADEC.RCRITFIN 3' +HKLIN126= 'XYTORADEC.HARDCOPY /scos1/scos/UKJ001/UKJ001.ps' +HKLIN127= 'XYTORADEC.REFSMULT 5' +HKLIN128= 'XYTORADEC.RESDMULT 1000' +HKLIN129= 'XYTORADEC.RACOL RA' +HKLIN130= 'XYTORADEC.DECOL DEC' +HKLIN131= 'XYTORADEC.RAPMCOL PMRA' +HKLIN132= 'XYTORADEC.DECPMCOL PMDE' +HKLIN133= 'XYTORADEC.PLXCOL NONE' +HKLIN134= 'XYTORADEC.RVCOL NONE' +HKLIN135= 'XYTORADEC.MAGCOL VT' +HKLIN136= 'XYTORADEC.STARSC 2374' +HKLIN137= 'XYTORADEC.STARSU 1727' +HKLIN138= 'XYTORADEC.COEFFS_1 17.640343856524' +HKLIN139= 'XYTORADEC.COEFFS_2 -260.44151995641' +HKLIN140= 'XYTORADEC.COEFFS_3 -163.09155572601' +HKLIN141= 'XYTORADEC.COEFFS_4 17.504230442205' +HKLIN142= 'XYTORADEC.COEFFS_5 -163.08676953832' +HKLIN143= 'XYTORADEC.COEFFS_6 260.48817907668' +HKLIN144= 'XYTORADEC.DISTR -0.33333333333333' +HKLIN145= 'XYTORADEC.RA_PNT 0.54924996662137' +HKLIN146= 'XYTORADEC.DEC_PNT -1.5684931501781' +HISTORY = 'SuperCOSMOS image analysis and mapping mode (IAM and MM)' / +HISTORY = 'data written by xydcomp_ss.' / +HISTORY = 'Any questions/comments/suggestions/bug reports should be sent' / +HISTORY = 'to N.Hambly@roe.ac.uk' / +ASTSIGX = 0.37 / [arcsec] std. dev. of astrometric fit in X +ASTSIGY = 0.38 / [arcsec] std. dev. of astrometric fit in Y +PC001001= 1.0 / DEPRECATED - Axis rotation matrix +PC001002= 0.004927623810613 / DEPRECATED - Axis rotation matrix +PC002001= -0.005563056187788 / DEPRECATED - Axis rotation matrix +PC002002= 1.0 / DEPRECATED - Axis rotation matrix +CROTA2 = 0.3005532298491 / DEPRECATED - rotation of axis 2 +DATATYPE= 'INTEGER*2' / Type of data +DATUNITS= 'DENSITY ' / Units: transmission, density or intensity +XPIXELSZ= 9.997114974 / [microns] X pixel size +YPIXELSZ= 10.0 / [microns] Y pixel size +OBJCTRA = ' 0 0 0.000' / Centre Right Ascension (J2000) +OBJCTDEC= '-90 0 0.00' / Centre Declination (J2000) +OBJCTX = 16368.63183793 / [pixels] Centre X on plate +OBJCTY = 14740.83801939 / [pixels] Centre Y on plate + +Objects written: 1 + +Native Encoding: + +COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST +COMMENT AST WCS information in AST format AST +COMMENT AST See http://www.starlink.ac.uk/ast/ AST +COMMENT AST Beginning of AST data for FrameSet object AST +COMMENT AST ................................................................ AST +BEGAST_A= 'FrameSet' / Set of inter-related coordinate systems +NFRAME_A= 2 / Number of Frames in FrameSet +BASE_A = 1 / Index of base Frame +CURRNT_A= 2 / Index of current Frame +LNK2_A = 1 / Node 2 is derived from node 1 +FRM1_A = ' ' / Frame number 1 +BEGAST_B= 'Frame ' / Coordinate system description +TITLE_A = 'Pixel Coordinates' / Title of coordinate system +NAXES_A = 2 / Number of coordinate axes +DOMAIN_A= 'GRID ' / Coordinate system domain +AX1_A = ' ' / Axis number 1 +BEGAST_C= 'Axis ' / Coordinate axis +LABEL_A = 'Pixel axis 1' / Axis Label +ENDAST_A= 'Axis ' / End of object definition +AX2_A = ' ' / Axis number 2 +BEGAST_D= 'Axis ' / Coordinate axis +LABEL_B = 'Pixel axis 2' / Axis Label +ENDAST_B= 'Axis ' / End of object definition +ENDAST_C= 'Frame ' / End of object definition +FRM2_A = ' ' / Frame number 2 +BEGAST_E= 'SkyFrame' / Description of celestial coordinate system +IDENT_A = '" " ' / Permanent Object identification string +ISA_A = 'Object ' / AST Object +NAXES_B = 2 / Number of coordinate axes +EPOCH_A = 1977.77512999212 / Besselian epoch of observation +SYSTEM_A= 'FK5 ' / Coordinate system type +AX1_B = ' ' / Axis number 1 +BEGAST_F= 'SkyAxis ' / Celestial coordinate axis +ENDAST_D= 'SkyAxis ' / End of object definition +AX2_B = ' ' / Axis number 2 +BEGAST_G= 'SkyAxis ' / Celestial coordinate axis +ENDAST_E= 'SkyAxis ' / End of object definition +ISA_B = 'Frame ' / Coordinate system description +PROJ_A = 'gnomonic' / Description of sky projection +EQNOX_A = 2000.0 / Julian epoch of mean equinox +SREFIS_A= 'Ignored ' / Not rotated (ref. pos. is ignored) +SREF1_A = 0.0 / Ref. pos. RA 0:00:00.0 +SREF2_A = -1.57079633 / Ref. pos. Dec -90:00:00 +ENDAST_F= 'SkyFrame' / End of object definition +MAP2_A = ' ' / Mapping between nodes 1 and 2 +BEGAST_H= 'CmpMap ' / Compound Mapping +NIN_A = 2 / Number of input coordinates +ISSIMP_A= 1 / Mapping has been simplified +ISA_C = 'Mapping ' / Mapping between coordinate systems +MAPA_A = ' ' / First component Mapping +BEGAST_I= 'WinMap ' / Map one window on to another +NIN_B = 2 / Number of input coordinates +INVERT_A= 0 / Mapping not inverted +ISA_D = 'Mapping ' / Mapping between coordinate systems +SFT1_A = -893.6318379289 / Shift for axis 1 +SFT2_A = -223.8380193875 / Shift for axis 2 +ENDAST_G= 'WinMap ' / End of object definition +MAPB_A = ' ' / Second component Mapping +BEGAST_J= 'CmpMap ' / Compound Mapping +NIN_C = 2 / Number of input coordinates +ISA_E = 'Mapping ' / Mapping between coordinate systems +MAPA_B = ' ' / First component Mapping +BEGAST_K= 'MatrixMap' / Matrix transformation +NIN_D = 2 / Number of input coordinates +INVERT_B= 0 / Mapping not inverted +ISA_F = 'Mapping ' / Mapping between coordinate systems +M0_A = -3.25441534352674E-6/ Forward matrix value +M1_A = -1.60367292352974E-8/ Forward matrix value +M2_A = -1.812057487023E-8 / Forward matrix value +M3_A = 3.25725533992408E-6 / Forward matrix value +FORM_A = 'Full ' / Matrix storage form +ENDAST_H= 'MatrixMap' / End of object definition +MAPB_B = ' ' / Second component Mapping +BEGAST_L= 'CmpMap ' / Compound Mapping +NIN_E = 2 / Number of input coordinates +ISA_G = 'Mapping ' / Mapping between coordinate systems +INVA_A = 1 / First Mapping used in inverse direction +MAPA_C = ' ' / First component Mapping +BEGAST_M= 'WcsMap ' / FITS-WCS sky projection +NIN_F = 2 / Number of input coordinates +INVERT_C= 1 / Mapping inverted +ISA_H = 'Mapping ' / Mapping between coordinate systems +TYPE_A = 'TAN ' / Gnomonic projection +ENDAST_I= 'WcsMap ' / End of object definition +MAPB_C = ' ' / Second component Mapping +BEGAST_N= 'CmpMap ' / Compound Mapping +NIN_G = 2 / Number of input coordinates +ISA_I = 'Mapping ' / Mapping between coordinate systems +INVA_B = 1 / First Mapping used in inverse direction +MAPA_D = ' ' / First component Mapping +BEGAST_O= 'SphMap ' / Cartesian to Spherical mapping +NIN_H = 3 / Number of input coordinates +NOUT_A = 2 / Number of output coordinates +INVERT_D= 1 / Mapping inverted +ISA_J = 'Mapping ' / Mapping between coordinate systems +UNTRD_A = 1 / All input vectors have unit length +PLRLG_A = 0.0 / Polar longitude (rad.s) +ENDAST_J= 'SphMap ' / End of object definition +MAPB_D = ' ' / Second component Mapping +BEGAST_P= 'CmpMap ' / Compound Mapping +NIN_I = 3 / Number of input coordinates +NOUT_B = 2 / Number of output coordinates +ISA_K = 'Mapping ' / Mapping between coordinate systems +MAPA_E = ' ' / First component Mapping +BEGAST_Q= 'MatrixMap' / Matrix transformation +NIN_J = 3 / Number of input coordinates +INVERT_E= 0 / Mapping not inverted +ISA_L = 'Mapping ' / Mapping between coordinate systems +M0_B = -1.0 / Forward matrix value +M1_B = 1.0 / Forward matrix value +M2_B = -1.0 / Forward matrix value +FORM_B = 'Diagonal' / Matrix storage form +ENDAST_K= 'MatrixMap' / End of object definition +MAPB_E = ' ' / Second component Mapping +BEGAST_R= 'SphMap ' / Cartesian to Spherical mapping +NIN_K = 3 / Number of input coordinates +NOUT_C = 2 / Number of output coordinates +INVERT_F= 0 / Mapping not inverted +ISA_M = 'Mapping ' / Mapping between coordinate systems +UNTRD_B = 1 / All input vectors have unit length +PLRLG_B = 0.0 / Polar longitude (rad.s) +ENDAST_L= 'SphMap ' / End of object definition +ENDAST_M= 'CmpMap ' / End of object definition +ENDAST_N= 'CmpMap ' / End of object definition +ENDAST_O= 'CmpMap ' / End of object definition +ENDAST_P= 'CmpMap ' / End of object definition +ENDAST_Q= 'CmpMap ' / End of object definition +ENDAST_R= 'FrameSet' / End of object definition +COMMENT AST ................................................................ AST +COMMENT AST End of AST data for FrameSet object AST +COMMENT AST ---------------------------------------------------------------- AST + +ATTRIBUTES: + Colour(axis1) : 1 + Font(Stri) : 1 + Nout : 1 + Class : 4 + Tol : 0.100000E-01 + Gap(1) : .523599 + Border : 0 + Invert : 0 + TextLabGap : 0.100000E-01 + Nin : 2 + Current : 3 + Base : 1 + Nobject : 1 + RefCOUNT : 1 + +AST_GRID: +REG_LINE: 2 + 15.5 -136. + 15.4 -137. +REG_LINE: 2 + 18.6 -144. + 18.5 -146. +REG_LINE: 2 + 21.8 -149. + 21.8 -151. +REG_LINE: 2 + 25.1 -150. + 25.1 -154. +REG_LINE: 2 + 28.3 -149. + 28.4 -150. +REG_LINE: 2 + 31.5 -143. + 31.6 -145. +REG_LINE: 2 + 34.6 -135. + 34.7 -136. +REG_LINE: 2 + 37.6 -123. + 37.8 -127. +REG_LINE: 2 + 40.3 -108. + 40.4 -110. +REG_LINE: 2 + 42.7 -91.0 + 42.9 -92.7 +REG_LINE: 2 + 44.9 -71.2 + 45.2 -72.9 +REG_LINE: 2 + 46.7 -49.3 + 47.5 -53.0 +REG_LINE: 2 + 48.1 -25.8 + 48.6 -27.4 +REG_LINE: 2 + 49.2 -.928 + 49.9 -2.51 +REG_LINE: 2 + 49.8 24.8 + 51.0 23.5 +REG_LINE: 2 + 50.0 50.9 + 53.7 51.1 +REG_LINE: 2 + 49.7 77.1 + 50.9 78.4 +REG_LINE: 2 + 49.1 103. + 49.8 104. +REG_LINE: 2 + 48.0 127. + 48.5 129. +REG_LINE: 2 + 46.6 151. + 47.3 155. +REG_LINE: 2 + 44.7 173. + 45.0 174. +REG_LINE: 2 + 42.6 192. + 42.8 194. +REG_LINE: 2 + 40.1 209. + 40.2 211. +REG_LINE: 2 + 37.4 224. + 37.6 228. +REG_LINE: 2 + 34.4 235. + 34.5 237. +REG_LINE: 2 + 31.3 244. + 31.4 245. +REG_LINE: 2 + 28.1 248. + 28.1 250. +REG_LINE: 2 + 24.8 250. + 24.8 254. +REG_LINE: 2 + 21.6 248. + 21.5 250. +REG_LINE: 2 + 18.4 243. + 18.3 245. +REG_LINE: 2 + 15.3 234. + 15.2 236. +REG_LINE: 2 + 12.3 223. + 12.1 226. +REG_LINE: 2 + 9.62 208. + 9.45 210. +REG_LINE: 2 + 7.17 191. + 6.95 192. +REG_LINE: 2 + 5.02 171. + 4.74 173. +REG_LINE: 2 + 3.22 149. + 2.41 153. +REG_LINE: 2 + 1.78 125. + 1.27 127. +REG_LINE: 2 + .747 101. + -0.657E-02 102. +REG_LINE: 2 + .124 74.8 + -1.11 76.1 +REG_LINE: 2 + -0.740E-01 48.7 + -3.82 48.5 +REG_LINE: 2 + .156 22.6 + -1.02 21.3 +REG_LINE: 2 + .811 -3.08 + 0.841E-01 -4.67 +REG_LINE: 2 + 1.88 -27.8 + 1.38 -29.5 +REG_LINE: 2 + 3.34 -51.3 + 2.56 -54.9 +REG_LINE: 2 + 5.17 -73.0 + 4.89 -74.7 +REG_LINE: 2 + 7.34 -92.6 + 7.13 -94.3 +REG_LINE: 2 + 9.81 -110. + 9.65 -111. +REG_LINE: 2 + 12.5 -124. + 12.3 -128. +REG_LINE: 2 + 15.5 -136. + 15.4 -137. +REG_LINE: 2 + 18.6 -144. + 18.5 -146. +REG_LINE: 2 + 21.8 -149. + 21.8 -151. +REG_LINE: 2 + 25.1 -150. + 25.1 -154. +REG_LINE: 2 + 28.3 -149. + 28.4 -150. +REG_LINE: 2 + 31.5 -143. + 31.6 -145. +REG_LINE: 2 + 34.6 -135. + 34.7 -136. +REG_LINE: 2 + 24.9 74.8 + 26.5 75.6 +REG_LINE: 2 + 24.9 99.9 + 26.5 101. +REG_LINE: 2 + 24.9 125. + 26.5 126. +REG_LINE: 2 + 24.9 150. + 28.3 152. +REG_LINE: 2 + 24.9 175. + 26.5 176. +REG_LINE: 2 + 24.9 200. + 26.4 201. +REG_LINE: 2 + 24.8 225. + 26.4 226. +REG_LINE: 2 + 24.8 250. + 28.2 252. +REG_LINE: 2 + 24.8 275. + 26.4 276. +REG_LINE: 15 + 25.1 -150. + 24.1 -150. + 23.2 -150. + 22.3 -149. + 21.3 -148. + 20.4 -147. + 19.5 -146. + 18.6 -144. + 17.7 -142. + 16.8 -140. + 15.9 -137. + 15.1 -134. + 14.2 -131. + 13.4 -128. + 12.5 -124. +REG_LINE: 15 + 25.1 -150. + 26.0 -150. + 26.9 -150. + 27.9 -149. + 28.8 -148. + 29.7 -147. + 30.6 -145. + 31.5 -143. + 32.4 -141. + 33.3 -139. + 34.2 -136. + 35.1 -133. + 35.9 -130. + 36.7 -127. + 37.6 -123. +REG_LINE: 15 + 37.6 -123. + 38.4 -119. + 39.1 -115. + 39.9 -111. + 40.6 -106. + 41.4 -101. + 42.1 -96.2 + 42.7 -91.0 + 43.4 -85.6 + 44.0 -79.9 + 44.6 -74.2 + 45.2 -68.2 + 45.7 -62.1 + 46.2 -55.8 + 46.7 -49.3 +REG_LINE: 15 + 46.7 -49.3 + 47.1 -42.8 + 47.5 -36.1 + 47.9 -29.2 + 48.3 -22.3 + 48.6 -15.3 + 48.9 -8.13 + 49.2 -.928 + 49.4 6.35 + 49.6 13.7 + 49.7 21.1 + 49.8 28.5 + 49.9 36.0 + 50.0 43.4 + 50.0 50.9 +REG_LINE: 15 + 50.0 50.9 + 49.9 58.4 + 49.9 65.9 + 49.8 73.3 + 49.7 80.8 + 49.5 88.1 + 49.3 95.5 + 49.1 103. + 48.8 110. + 48.5 117. + 48.2 124. + 47.8 131. + 47.4 138. + 47.0 144. + 46.6 151. +REG_LINE: 15 + 46.6 151. + 46.1 157. + 45.6 164. + 45.0 170. + 44.4 176. + 43.8 181. + 43.2 187. + 42.6 192. + 41.9 197. + 41.2 202. + 40.5 207. + 39.7 212. + 38.9 216. + 38.2 220. + 37.4 224. +REG_LINE: 15 + 37.4 224. + 36.5 227. + 35.7 231. + 34.8 234. + 34.0 237. + 33.1 239. + 32.2 241. + 31.3 244. + 30.4 245. + 29.5 247. + 28.6 248. + 27.6 249. + 26.7 250. + 25.8 250. + 24.8 250. +REG_LINE: 15 + 24.8 250. + 23.9 250. + 23.0 249. + 22.0 249. + 21.1 248. + 20.2 246. + 19.3 245. + 18.4 243. + 17.5 241. + 16.6 238. + 15.7 236. + 14.8 233. + 14.0 230. + 13.1 226. + 12.3 223. +REG_LINE: 15 + 12.3 223. + 11.5 219. + 10.8 215. + 9.99 210. + 9.25 206. + 8.53 201. + 7.84 196. + 7.17 191. + 6.52 185. + 5.90 180. + 5.31 174. + 4.74 168. + 4.20 162. + 3.70 155. + 3.22 149. +REG_LINE: 15 + 3.22 149. + 2.77 142. + 2.35 136. + 1.96 129. + 1.61 122. + 1.29 115. + 1.00 108. + .747 101. + .526 93.3 + .339 85.9 + .187 78.6 + 0.696E-01 71.1 + -0.132E-01 63.7 + -0.611E-01 56.2 + -0.740E-01 48.7 +REG_LINE: 15 + -0.740E-01 48.7 + -0.519E-01 41.2 + 0.519E-02 33.7 + 0.971E-01 26.3 + .224 18.9 + .385 11.5 + .581 4.18 + .811 -3.08 + 1.07 -10.3 + 1.37 -17.4 + 1.70 -24.4 + 2.06 -31.3 + 2.46 -38.1 + 2.88 -44.7 + 3.34 -51.3 +REG_LINE: 15 + 3.34 -51.3 + 3.83 -57.7 + 4.34 -63.9 + 4.89 -70.0 + 5.46 -75.9 + 6.06 -81.6 + 6.69 -87.2 + 7.34 -92.6 + 8.02 -97.7 + 8.72 -103. + 9.44 -107. + 10.2 -112. + 11.0 -116. + 11.7 -120. + 12.5 -124. +REG_LINE: 15 + 12.5 -124. + 13.4 -128. + 14.2 -131. + 15.1 -134. + 15.9 -137. + 16.8 -140. + 17.7 -142. + 18.6 -144. + 19.5 -146. + 20.4 -147. + 21.3 -148. + 22.3 -149. + 23.2 -150. + 24.1 -150. + 25.1 -150. +REG_LINE: 15 + 25.1 -150. + 26.0 -150. + 26.9 -150. + 27.9 -149. + 28.8 -148. + 29.7 -147. + 30.6 -145. + 31.5 -143. + 32.4 -141. + 33.3 -139. + 34.2 -136. + 35.1 -133. + 35.9 -130. + 36.7 -127. + 37.6 -123. +REG_LINE: 15 + 25.1 -150. + 26.0 -150. + 26.9 -150. + 27.9 -149. + 28.8 -148. + 29.7 -147. + 30.6 -145. + 31.5 -143. + 32.4 -141. + 33.3 -139. + 34.2 -136. + 35.1 -133. + 35.9 -130. + 36.7 -127. + 37.6 -123. +REG_LINE: 15 + 24.9 49.8 + 24.9 57.0 + 24.9 64.1 + 24.9 71.3 + 24.9 78.4 + 24.9 85.6 + 24.9 92.7 + 24.9 99.9 + 24.9 107. + 24.9 114. + 24.9 121. + 24.9 128. + 24.9 136. + 24.9 143. + 24.9 150. +REG_LINE: 15 + 24.9 150. + 24.9 157. + 24.9 164. + 24.9 171. + 24.9 179. + 24.9 186. + 24.9 193. + 24.9 200. + 24.9 207. + 24.8 214. + 24.8 221. + 24.8 229. + 24.8 236. + 24.8 243. + 24.8 250. +REG_LINE: 8 + 24.8 250. + 24.8 257. + 24.8 264. + 24.8 272. + 24.8 279. + 24.8 286. + 24.8 293. + 24.8 300. +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '12' + 24.9 -148. BC -0.654E-01 .998 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '14' + 35.1 -123. BC -.978 .210 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '16' + 44.2 -49.2 BC -.997 0.716E-01 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '18' + 47.5 50.9 BC -1.00 -0.942E-03 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '20' + 44.1 151. TC .997 0.732E-01 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '22' + 34.9 223. TC .977 .213 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '0' + 24.9 248. TC -0.236E-01 1.00 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '2' + 14.8 222. TC -.978 .210 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '4' + 5.71 149. TC -.997 0.716E-01 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '6' + 2.43 48.7 BC 1.00 0.288E-03 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '8' + 5.83 -51.1 BC .997 0.732E-01 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '10' + 15.0 -124. BC .977 .215 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-90:00' + 22.4 49.8 BC -1.00 -0.615E-03 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '59' + 22.4 150. BC -1.00 -0.615E-03 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-89:58' + 22.3 250. BC -1.00 -0.615E-03 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 1 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: ' A FITS test' + 30.9 313. BC .000 1.00 +ude (rad.s) + End SphMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = -1 # Forward matrix value + M1 = 1 # Forward matrix value + M2 = -1 # Forward matrix value + Form = "Diagonal" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 0 # Polar longitude (rad.s) + End SphMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End FrameSet diff --git a/ast/ast_tester/regression.f b/ast/ast_tester/regression.f new file mode 100644 index 0000000..e9ca32e --- /dev/null +++ b/ast/ast_tester/regression.f @@ -0,0 +1,1515 @@ + PROGRAM REGRESSION +*+ +* Name: +* REGRESSION + +* Purpose: +* Tests many aspects of the AST library (Fortran interface). + +* Language: +* Starlink Fortran 77 + +* Type of Module: +* Fortran program + +* Invocation: +* regression + +* Description: +* This application utilizes many aspects of the AST library, producing +* textual output on standard output. The output should be redirected +* to a text file and compared to the output from previous runs to +* detect any changes in functionality. + +* Authors: +* DSB: David Berry (STARLINK) +* {enter_new_authors_here} + +* History: +* 29-JAN-2002 (DSB): +* Original version. +* {enter_further_changes_here} + +*- + +* Type Definitions: + IMPLICIT NONE ! No implicit typing + +* Global Variables: + INTEGER CMN_FTEST ! Which FITS test are we doing? + INTEGER CMN_LINE ! The index of the next header to read + COMMON /REG/ CMN_FTEST, CMN_LINE + +* Global Constants: + INCLUDE 'SAE_PAR' ! Standard SAE constants + INCLUDE 'AST_PAR' ! AST constants and declarations + +* Status: + INTEGER STATUS ! Global status + +* External References: + INTEGER CHR_LEN + + EXTERNAL REG_SOURCE + EXTERNAL REG_SINK + + EXTERNAL REG_ATTR + EXTERNAL REG_FLUSH + EXTERNAL REG_LINE + EXTERNAL REG_MARK + EXTERNAL REG_TEXT + EXTERNAL REG_TXEXT + EXTERNAL REG_CAP + EXTERNAL REG_QCH + EXTERNAL REG_SCALES + +* Local Constants: + INTEGER NFITS_TESTS ! How many FITS tests? + PARAMETER ( NFITS_TESTS = 3 ) + + INTEGER NCAT, NRAT, NLAT, NDAT, NIAT ! Numbers of Attributes of each type + PARAMETER ( NCAT = 4, + : NRAT = 2, + : NLAT = 2, + : NDAT = 1, + : NIAT = 5 ) + +* Local Variables: + CHARACTER ATTRS( NFITS_TESTS )*255 ! Plot attributes for each FITS test + CHARACTER CARDS*(7*80) ! Used fot testing ast_putcards + INTEGER FC, FS, PLOT, I, J, OC + + REAL GBOX( 4 ) ! Area of graphics coords to use + DOUBLE PRECISION BBOX( 4, NFITS_TESTS ) ! Base Frame area to be + ! mapped onto GBOX for each FITS test + + CHARACTER*20 CAT(NCAT), RAT(NRAT), LAT(NLAT), DAT(NDAT), IAT(NIAT) + CHARACTER CV*50 + REAL RV + LOGICAL LV + DOUBLE PRECISION DV + INTEGER IV, VERS, MAJ, MIN, REV + +* Data initialization: + DATA CAT / 'Colour(axis1)', 'Font(Stri)', 'Nout', 'Class' / + DATA RAT / 'Tol', 'Gap(1)' / + DATA LAT / 'Border', 'Invert' / + DATA DAT / 'TextLabGap' / + DATA IAT / 'Nin', 'Current', 'Base', 'Nobject', 'RefCOUNT' / + DATA GBOX /-100.0, -200.0, 150.0, 300.0/ + + + + DATA BBOX / 10.0, -10.0, 290.0, 300.0, + : -300.0, -300.0, 500.0, 500.0, + : 1.0, 1.0, 1787.0, 447.0 / + + + + DATA ATTRS/ 'Grid=1,tickall=0', + : 'Grid=1,labelling=interior', + : 'Grid=0' / + + +*. + +* Initialize inherited global status. + STATUS = SAI__OK + +* Use object caching to minimise allocation of new memory + OC = AST_TUNE( 'ObjectCaching', 1, STATUS ) + IF( OC .NE. 0 ) THEN + WRITE(*,'(A,I2)') 'Default ObjectCaching VALUE is ',OC + END IF + + IF( AST_TUNE( 'ObjectCaching', AST__TUNULL, STATUS ) .NE. 1 ) THEN + WRITE(*,'(A,I2)') 'Set ObjectCaching VALUE is ',OC + END IF + +* Display the AST version number. + VERS = AST_VERSION() + MAJ = VERS/1000000 + VERS = VERS - 1000000*MAJ + MIN = VERS/1000 + REV = VERS - 1000*MIN + WRITE(*,'(A,I2,A,I1,A,I2)') 'AST version ',MAJ,'.',MIN,'-',REV + +* First do a test of the AST_PUTCARDS routine. + FC = AST_FITSCHAN( AST_NULL, AST_NULL, ' ', STATUS ) + + CARDS = 'NAXIS = 1' + CARDS( 81: ) = 'NAXIS1 = 100' + CARDS( 2*80 + 1: ) = 'CTYPE1 = ''fred''' + CARDS( 3*80 + 1: ) = 'CDELT1 = 0.0' + CARDS( 4*80 + 1: ) = 'CRPIX1 = 50' + CARDS( 5*80 + 1: ) = 'CUNIT1 = ''GHz''' + + CALL AST_PUTCARDS( FC, CARDS, STATUS ) + WRITE(*,'(A,I2)') 'PutCards Ncards = ',AST_GETI( FC, 'NCARD', + : STATUS ) + WRITE(*,'(A,I2)') 'PutCards Card = ',AST_GETI( FC, 'CARD', + : STATUS ) + + CALL AST_SETI( FC, 'CARD', 10, STATUS ) + WRITE(*,'(A,I2)') 'PutCards Card = ',AST_GETI( FC, 'CARD', + : STATUS ) + + CALL AST_PUTCARDS( FC, CARDS, STATUS ) + WRITE(*,'(A,I2)') 'PutCards Ncards = ',AST_GETI( FC, 'NCARD', + : STATUS ) + WRITE(*,'(A,I2)') 'PutCards Card = ',AST_GETI( FC, 'CARD', + : STATUS ) + CALL AST_SHOW( FC, STATUS ) + +* We loop round testing several sorts of FITS Headers. + DO I = 1, NFITS_TESTS + IF ( STATUS .NE. SAI__OK ) GO TO 999 + +* Tell the REG_SOURCE function which FITS header to load. + CMN_FTEST = I + CMN_LINE = 1 + + WRITE(*,'(A)') ' ' + WRITE(*,'(A)') ' ' + WRITE(*,'(A)') ' ' + WRITE(*,'(A)') ' ' + WRITE(*,'(A,I2)') ' FITS test number ',I + WRITE(*,'(A)') ' ====================' + WRITE(*,'(A)') ' ' + WRITE(*,'(A)') ' ' + +* Create a FitsChan, read an Object from it, and dump the Object +* to standard output. The Object should be a FrameSet if all is OK. + FC = AST_FITSCHAN( REG_SOURCE, REG_SINK, ' ', STATUS ) + FS = AST_READ( FC, STATUS ) + WRITE(*,'(A)') ' ' + WRITE(*,'(A)') 'AST_SHOW:' + CALL AST_SHOW( FS, STATUS ) + +* Annul the FitsChan. This will cause the unused contents (if any) to +* be written out using REG_SINK. + WRITE(*,'(A)') ' ' + WRITE(*,'(A)') 'REG_SINK:' + CALL AST_ANNUL( FC, STATUS ) + +* Create another FrameSet with Native encoding. Write the FrameSet to +* it, and then annul the FitsChan (this will cause the FITS cards to be +* written to stdout). + FC = AST_FITSCHAN( AST_NULL, REG_SINK, 'Encoding=native', + : STATUS ) + WRITE(*,'(A)') ' ' + WRITE(*,'(A,I2)') 'Objects written: ', AST_WRITE( FC, FS, + : STATUS ) + WRITE(*,'(A)') ' ' + WRITE(*,'(A)') 'Native Encoding:' + CALL AST_ANNUL( FC, STATUS ) + +* Create a Plot which maps the area specified by BBOX the Base Frame +* of the FrameSet onto the GBOX area in graphics coords. + PLOT = AST_PLOT( FS, GBOX, BBOX( 1, I), ' grf = 1 , '// + : 'title = A FITS test', STATUS ) + +* Annul the FrameSet. + CALL AST_ANNUL( FS, STATUS ) + +* Tell the Plot to use the REG_... routines included in this file to +* do the drawing. + CALL AST_GRFSET( PLOT, 'Attr', REG_ATTR, STATUS ) + CALL AST_GRFSET( PLOT, 'Flush', REG_FLUSH, STATUS ) + CALL AST_GRFSET( PLOT, 'Line', REG_LINE, STATUS ) + CALL AST_GRFSET( PLOT, 'Mark', REG_MARK, STATUS ) + CALL AST_GRFSET( PLOT, 'Text', REG_TEXT, STATUS ) + CALL AST_GRFSET( PLOT, 'TxExt', REG_TXEXT, STATUS ) + CALL AST_GRFSET( PLOT, 'Scales', REG_SCALES, STATUS ) + CALL AST_GRFSET( PLOT, 'Cap', REG_CAP, STATUS ) + CALL AST_GRFSET( PLOT, 'Qch', REG_QCH, STATUS ) + +* Set some attributes. + CALL AST_SET( PLOT, ATTRS( I ), STATUS ) + +* Get some attributes (separate the AST_GET calls and the WRITEs in order +* to avoid recursive I/O due to the REG_xxx routines trying to write to +* standard output). + WRITE(*,'(A)') ' ' + WRITE(*,'(A)') 'ATTRIBUTES:' + + DO J = 1, NCAT + CV = AST_GETC( PLOT, CAT(J), STATUS ) + WRITE(*,'(A,I10)') ' '//CAT(J)//': ',CHR_LEN(CV) + END DO + + DO J = 1, NRAT + RV = AST_GETR( PLOT, RAT(J), STATUS ) + WRITE(*,'(A,G13.6)') ' '//RAT(J)//': ',RV + END DO + + DO J = 1, NLAT + LV = AST_GETL( PLOT, LAT(J), STATUS ) + IF( LV ) THEN + IV = 1 + ELSE + IV = 0 + END IF + WRITE(*,'(A,I1)') ' '//LAT(J)//': ',IV + END DO + + DO J = 1, NDAT + DV = AST_GETD( PLOT, DAT(J), STATUS ) + WRITE(*,'(A,G13.6)') ' '//DAT(J)//': ',DV + END DO + + DO J = 1, NIAT + IV = AST_GETI( PLOT, IAT(J), STATUS ) + WRITE(*,'(A,I4)') ' '//IAT(J)//': ',IV + END DO + + +* Draw a grid. + WRITE(*,'(A)') ' ' + WRITE(*,'(A)') 'AST_GRID:' + CALL AST_GRID( PLOT, STATUS ) + +* Annul the Plot. + CALL AST_ANNUL( PLOT, STATUS ) + + END DO + + 999 CONTINUE + + END + + + + + +* Grf plotting routines for the Plot tests. These are used in preference +* to the grf routines specified at link time. +* ====================================================================== + +* Flush graphics. +* --------------- + INTEGER FUNCTION REG_FLUSH() + WRITE(*,'(A)') 'REG_FLUSH:' + REG_FLUSH = 1 + END + +* Set or get a Plot graphics attribute. +* ------------------------------------- + INTEGER FUNCTION REG_ATTR( ATT, VAL, OLDVAL, PRIM ) + IMPLICIT NONE + +* Includes: + INCLUDE 'AST_PAR' + INCLUDE 'GRF_PAR' + +* Arguments: + INTEGER ATT + DOUBLE PRECISION VAL + INTEGER PRIM + DOUBLE PRECISION OLDVAL + +* Local Variables: + INTEGER I, J + DOUBLE PRECISION ATTRS( 5, 3 ) + +* Initialization: + DATA ATTRS /15*0.0D0/ + +* Log this call. + WRITE(*,'(I4,1X,G10.3,1X,I4)') 'REG_GATTR: ', ATT, VAL, PRIM + +* Identify the required element. + IF( ATT .EQ. GRF__STYLE ) THEN + I = 1 + ELSE IF( ATT .EQ. GRF__WIDTH ) THEN + I = 2 + ELSE IF( ATT .EQ. GRF__SIZE ) THEN + I = 3 + ELSE IF( ATT .EQ. GRF__FONT ) THEN + I = 4 + ELSE IF( ATT .EQ. GRF__COLOUR ) THEN + I = 5 + ELSE + WRITE(*,'(A,I2)') 'Bad ATT value: ', ATT + END IF + + IF( PRIM .EQ. GRF__LINE ) THEN + J = 1 + ELSE IF( PRIM .EQ. GRF__MARK ) THEN + J = 2 + ELSE IF( PRIM .EQ. GRF__TEXT ) THEN + J = 3 + ELSE + WRITE(*,'(A,I2)') 'Bad PRIM value: ', PRIM + END IF + +* Return the old value. + OLDVAL = ATTRS( I, J ) + +* Store the new value if not bad. + IF( VAL .NE. AST__BAD ) ATTRS( I, J ) = VAL + +* Initialize the returned value to indicate success. + REG_ATTR = 1 + + END + + +* Draw a polyline. +* ---------------- + INTEGER FUNCTION REG_LINE( N, X, Y ) + IMPLICIT NONE + + INTEGER N + REAL X( N ) + REAL Y( N ) + INTEGER I + + WRITE(*,'(A,I4)') 'REG_LINE: ',N + DO I = 1, N + WRITE(*,'(3X,G10.3,1X,G10.3)') X(I),Y(I) + END DO + + REG_LINE = 1 + END + +* Draw a set of markers. +* ---------------------- + INTEGER FUNCTION REG_MARK( N, X, Y, TYPE ) + IMPLICIT NONE + + INTEGER N, TYPE + REAL X( N ) + REAL Y( N ) + INTEGER I + + WRITE(*,'(A,I4,I2)') 'REG_MARK: ', N, TYPE + DO I = 1, N + WRITE(*,'(3X,G10.3,1X,G10.3)') X(I),Y(I) + END DO + + REG_MARK = 1 + END + +* Draw a text string. +* ------------------- + INTEGER FUNCTION REG_TEXT( TEXT, X, Y, JUST, UPX, UPY ) + IMPLICIT NONE + + CHARACTER TEXT*(*), JUST*(*) + REAL X, Y, UPX, UPY + + WRITE(*,'(A,A,A)') 'REG_TEXT: ''', TEXT,'''' + WRITE(*,'(3X,G10.3,1X,G10.3,1X,A,1X,G10.3,1X,G10.3)') + : X, Y, JUST, UPX, UPY + + REG_TEXT = 1 + END + +* Return the extent of a text string. +* +* For some reason, the arguments to this function seem particularly +* prone to random rounding errors, resulting in the regression test +* always failing when run twice in succession, even if not changes +* have been made to the code in plot.c. For this reason this function +* does not write out its argument to standard output. +* -------------------------------------------------------------------- + INTEGER FUNCTION REG_TXEXT( TEXT, X, Y, JUST, UPX, UPY, XB, YB ) + IMPLICIT NONE + + CHARACTER TEXT*(*), JUST*(*) + REAL X, Y, UPX, UPY, XB(4), YB(4) + +c WRITE(*,*) 'REG_TXEXT: ''', TEXT,'''' +c WRITE(*,*) ' ', X, Y, ' ''', JUST,''' ', UPX, UPY + + XB( 1 ) = X - LEN( TEXT )*0.5 + XB( 2 ) = X + LEN( TEXT )*0.5 + XB( 3 ) = XB( 2 ) + XB( 4 ) = XB( 1 ) + + YB( 1 ) = Y - 0.5 + YB( 2 ) = YB( 1 ) + YB( 3 ) = Y + 0.5 + YB( 4 ) = YB( 3 ) + + REG_TXEXT = 1 + END + +* Inquire a capability +* --------------------- + INTEGER FUNCTION REG_CAP( CAP, VALUE ) + IMPLICIT NONE + + INCLUDE 'GRF_PAR' + + INTEGER CAP, VALUE + + WRITE(*,'(A,I2)') 'REG_CAP: ', CAP + + REG_CAP = 0 + IF( CAP .EQ. GRF__SCALES ) REG_CAP = 1 + + END + +* Inquire axis scales +* --------------------- + INTEGER FUNCTION REG_SCALES( ALPHA, BETA ) + IMPLICIT NONE + REAL ALPHA, BETA + + WRITE(*,'(A)') 'REG_SCALES: ' + + ALPHA = 1.0 + BETA = 1.0 + + REG_SCALES = 1 + + END + +* Inquire character size +* ---------------------- + INTEGER FUNCTION REG_QCH( CHV, CHH ) + IMPLICIT NONE + REAL CHV, CHH + + WRITE(*,'(A)') 'REG_QCH: ' + + CHV = 0.01 + CHH = 0.01 + + REG_QCH = 1 + + END + + + +* A Sink funtion for use with the FitsChan class. It writes the FitsChan +* contents to standard output. +* ====================================================================== + SUBROUTINE REG_SINK( CARD, STATUS ) + IMPLICIT NONE + CHARACTER CARD*80 + INTEGER STATUS + WRITE(*,'(A)') CARD + END + + + +* A Source funtion for use with the FitsChan class. It returns a different +* header for each value of REG_FTEST. +* ====================================================================== + INTEGER FUNCTION REG_SOURCE( CARD, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + + INTEGER CMN_FTEST ! Which FITS test are we doing? + INTEGER CMN_LINE ! The index of the next header to read + COMMON /REG/ CMN_FTEST, CMN_LINE + + CHARACTER CARD*80 + INTEGER STATUS + +* Check the inherited status + REG_SOURCE = 0 + IF( STATUS .NE. SAI__OK ) RETURN + +* Assume more cards will be returned. + REG_SOURCE = 1 + +* The following code defines the FITS headers and is generated automatically +* from FITS header files using script make_regtest (in the AST development +* system).... + + +* FITS headers from cobe.head (Tue Jan 29 13:37:07 2002) + IF( CMN_FTEST .EQ. 1 ) THEN + IF( CMN_LINE .EQ. 1 ) THEN + CARD = 'SIMPLE = T / Written by I'// + : 'DL: 30-Jul-1997 05:35:42.00' + ELSE IF( CMN_LINE .EQ. 2 ) THEN + CARD = 'BITPIX = -32 / Bits per pix'// + : 'el.' + ELSE IF( CMN_LINE .EQ. 3 ) THEN + CARD = 'NAXIS = 2 / Number of di'// + : 'mensions' + ELSE IF( CMN_LINE .EQ. 4 ) THEN + CARD = 'NAXIS1 = 300 / Length of x '// + : 'axis.' + ELSE IF( CMN_LINE .EQ. 5 ) THEN + CARD = 'NAXIS2 = 300 / Length of y '// + : 'axis.' + ELSE IF( CMN_LINE .EQ. 6 ) THEN + CARD = 'CTYPE1 = ''GLON-ZEA'' / X-axis typ'// + : 'e' + ELSE IF( CMN_LINE .EQ. 7 ) THEN + CARD = 'CTYPE2 = ''GLAT-ZEA'' / Y-axis typ'// + : 'e' + ELSE IF( CMN_LINE .EQ. 8 ) THEN + CARD = 'CRVAL1 = -149.56866 / Reference pi'// + : 'xel value' + ELSE IF( CMN_LINE .EQ. 9 ) THEN + CARD = 'CRVAL2 = -19.758201 / Reference pi'// + : 'xel value' + ELSE IF( CMN_LINE .EQ. 10 ) THEN + CARD = 'CRPIX1 = 150.500 / Reference pi'// + : 'xel' + ELSE IF( CMN_LINE .EQ. 11 ) THEN + CARD = 'CRPIX2 = 150.500 / Reference pi'// + : 'xel' + ELSE IF( CMN_LINE .EQ. 12 ) THEN + CARD = 'CDELT1 = -1.20000 / Degrees/pixe'// + : 'l' + ELSE IF( CMN_LINE .EQ. 13 ) THEN + CARD = 'CDELT2 = 1.20000 / Degrees/pixe'// + : 'l' + ELSE IF( CMN_LINE .EQ. 14 ) THEN + CARD = 'CROTA1 = 0.00000 / Rotation in '// + : 'degrees.' + ELSE IF( CMN_LINE .EQ. 15 ) THEN + CARD = 'COMMENT' + ELSE IF( CMN_LINE .EQ. 16 ) THEN + CARD = 'COMMENT This file was produced by the SkyView'// + : ' survey analysis system from' + ELSE IF( CMN_LINE .EQ. 17 ) THEN + CARD = 'COMMENT available astronomical surveys. The '// + : 'data are formatted' + ELSE IF( CMN_LINE .EQ. 18 ) THEN + CARD = 'COMMENT as a simple two-dimensional FITS imag'// + : 'e with the same units as' + ELSE IF( CMN_LINE .EQ. 19 ) THEN + CARD = 'COMMENT the orginal survey. A single ASCII t'// + : 'able extension may be present' + ELSE IF( CMN_LINE .EQ. 20 ) THEN + CARD = 'COMMENT which describes catalog objects found'// + : ' within the field of view.' + ELSE IF( CMN_LINE .EQ. 21 ) THEN + CARD = 'COMMENT Copies of relevant copyright notices '// + : 'are included in this file.' + ELSE IF( CMN_LINE .EQ. 22 ) THEN + CARD = 'COMMENT' + ELSE IF( CMN_LINE .EQ. 23 ) THEN + CARD = 'COMMENT Questions should be directed to:' + ELSE IF( CMN_LINE .EQ. 24 ) THEN + CARD = 'COMMENT' + ELSE IF( CMN_LINE .EQ. 25 ) THEN + CARD = 'COMMENT scollick@skyview.gsfc.nasa.gov' + ELSE IF( CMN_LINE .EQ. 26 ) THEN + CARD = 'COMMENT or' + ELSE IF( CMN_LINE .EQ. 27 ) THEN + CARD = 'COMMENT mcglynn@grossc.gsfc.nasa.gov' + ELSE IF( CMN_LINE .EQ. 28 ) THEN + CARD = 'COMMENT' + ELSE IF( CMN_LINE .EQ. 29 ) THEN + CARD = 'COMMENT SkyView' + ELSE IF( CMN_LINE .EQ. 30 ) THEN + CARD = 'COMMENT Code 668.1' + ELSE IF( CMN_LINE .EQ. 31 ) THEN + CARD = 'COMMENT Goddard Space Flight Center, Gree'// + : 'nbelt, MD 20771' + ELSE IF( CMN_LINE .EQ. 32 ) THEN + CARD = 'COMMENT 301-286-7780' + ELSE IF( CMN_LINE .EQ. 33 ) THEN + CARD = 'COMMENT' + ELSE IF( CMN_LINE .EQ. 34 ) THEN + CARD = 'COMMENT SkyView is supported by NASA ADP gran'// + : 't NAS 5-32068.' + ELSE IF( CMN_LINE .EQ. 35 ) THEN + CARD = 'COMMENT' + ELSE IF( CMN_LINE .EQ. 36 ) THEN + CARD = 'SURVEY = ''COBE DIRBE''' + ELSE IF( CMN_LINE .EQ. 37 ) THEN + CARD = 'BUNITS = ''MJy/sr '' /' + ELSE IF( CMN_LINE .EQ. 38 ) THEN + CARD = 'ORIGIN = ''CDAC '' / Cosmology '// + : 'Data Analysis Center' + ELSE IF( CMN_LINE .EQ. 39 ) THEN + CARD = 'TELESCOP= ''COBE '' / COsmic Bac'// + : 'kground Explorer satellite' + ELSE IF( CMN_LINE .EQ. 40 ) THEN + CARD = 'INSTRUME= ''DIRBE '' / COBE instr'// + : 'ument [DIRBE, DMR, FIRAS]' + ELSE IF( CMN_LINE .EQ. 41 ) THEN + CARD = 'PIXRESOL= 9 / Quad tree pi'// + : 'xel resolution [6, 9]' + ELSE IF( CMN_LINE .EQ. 42 ) THEN + CARD = 'DATE = ''27/09/94'' / FITS file '// + : 'creation date (dd/mm/yy)' + ELSE IF( CMN_LINE .EQ. 43 ) THEN + CARD = 'DATE-MAP= ''16/09/94'' / Date of or'// + : 'iginal file creation (dd/mm/yy)' + ELSE IF( CMN_LINE .EQ. 44 ) THEN + CARD = 'COMMENT COBE specific keywords' + ELSE IF( CMN_LINE .EQ. 45 ) THEN + CARD = 'DATE-BEG= ''08/12/89'' / date of in'// + : 'itial data represented (dd/mm/yy)' + ELSE IF( CMN_LINE .EQ. 46 ) THEN + CARD = 'DATE-END= ''25/09/90'' / date of fi'// + : 'nal data represented (dd/mm/yy)' + ELSE IF( CMN_LINE .EQ. 47 ) THEN + CARD = 'COMMENT' + ELSE IF( CMN_LINE .EQ. 48 ) THEN + CARD = 'COMMENT THE COBE DIRBE map is a combination o'// + : 'f the original ten' + ELSE IF( CMN_LINE .EQ. 49 ) THEN + CARD = 'COMMENT band passes with the following wavele'// + : 'ngths:' + ELSE IF( CMN_LINE .EQ. 50 ) THEN + CARD = 'COMMENT Band 1 - 1.25 microns' + ELSE IF( CMN_LINE .EQ. 51 ) THEN + CARD = 'COMMENT Band 2 - 2.2 microns' + ELSE IF( CMN_LINE .EQ. 52 ) THEN + CARD = 'COMMENT Band 3 - 3.5 microns' + ELSE IF( CMN_LINE .EQ. 53 ) THEN + CARD = 'COMMENT Band 4 - 4.9 microns' + ELSE IF( CMN_LINE .EQ. 54 ) THEN + CARD = 'COMMENT Band 5 - 12 microns' + ELSE IF( CMN_LINE .EQ. 55 ) THEN + CARD = 'COMMENT Band 6 - 25 microns' + ELSE IF( CMN_LINE .EQ. 56 ) THEN + CARD = 'COMMENT Band 7 - 60 microns' + ELSE IF( CMN_LINE .EQ. 57 ) THEN + CARD = 'COMMENT Band 8 - 100 microns' + ELSE IF( CMN_LINE .EQ. 58 ) THEN + CARD = 'COMMENT Band 9 - 140 microns' + ELSE IF( CMN_LINE .EQ. 59 ) THEN + CARD = 'COMMENT Band 10 - 240 microns' + ELSE IF( CMN_LINE .EQ. 60 ) THEN + CARD = 'COMMENT' + ELSE IF( CMN_LINE .EQ. 61 ) THEN + CARD = 'END' + REG_SOURCE = 0 + ELSE + REG_SOURCE = 0 + END IF + +* FITS headers from polco.head (Tue Jan 29 15:06:35 2002) + ELSE IF( CMN_FTEST .EQ. 2 ) THEN + IF( CMN_LINE .EQ. 1 ) THEN + CARD = 'COMMENT AST +++++++++++++++++++++++++++++++++'// + : '+++++++++++++++++++++++++++++++' + ELSE IF( CMN_LINE .EQ. 2 ) THEN + CARD = 'AST' + ELSE IF( CMN_LINE .EQ. 3 ) THEN + CARD = 'COMMENT AST Beginning of AST data '// + : 'for FrameSet object' + ELSE IF( CMN_LINE .EQ. 4 ) THEN + CARD = 'AST' + ELSE IF( CMN_LINE .EQ. 5 ) THEN + CARD = 'COMMENT AST .................................'// + : '...............................' + ELSE IF( CMN_LINE .EQ. 6 ) THEN + CARD = 'AST' + ELSE IF( CMN_LINE .EQ. 7 ) THEN + CARD = 'BEGAST_A= ''FrameSet'' / Set of int'// + : 'er-related coordinate systems' + ELSE IF( CMN_LINE .EQ. 8 ) THEN + CARD = 'NFRAME_A= 2 / Number of Fr'// + : 'ames in FrameSet' + ELSE IF( CMN_LINE .EQ. 9 ) THEN + CARD = 'CURRNT_A= 2 / Index of cur'// + : 'rent Frame' + ELSE IF( CMN_LINE .EQ. 10 ) THEN + CARD = 'NOD1_A = 2 / Frame 1 is a'// + : 'ssociated with node 2' + ELSE IF( CMN_LINE .EQ. 11 ) THEN + CARD = 'NOD2_A = 1 / Frame 2 is a'// + : 'ssociated with node 1' + ELSE IF( CMN_LINE .EQ. 12 ) THEN + CARD = 'LNK2_A = 1 / Node 2 is de'// + : 'rived from node 1' + ELSE IF( CMN_LINE .EQ. 13 ) THEN + CARD = 'FRM1_A = '' '' / Frame numb'// + : 'er 1' + ELSE IF( CMN_LINE .EQ. 14 ) THEN + CARD = 'BEGAST_B= ''Frame '' / Coordinate'// + : ' system description' + ELSE IF( CMN_LINE .EQ. 15 ) THEN + CARD = 'TITLE_A = ''Data grid indices; first pixel at'// + : ' (1&''/ Title of coordinate system' + ELSE IF( CMN_LINE .EQ. 16 ) THEN + CARD = 'CONTINUE '',1) ''' + ELSE IF( CMN_LINE .EQ. 17 ) THEN + CARD = 'NAXES_A = 2 / Number of co'// + : 'ordinate axes' + ELSE IF( CMN_LINE .EQ. 18 ) THEN + CARD = 'DOMAIN_A= ''GRID '' / Coordinate'// + : ' system domain' + ELSE IF( CMN_LINE .EQ. 19 ) THEN + CARD = 'AX1_A = '' '' / Axis numbe'// + : 'r 1' + ELSE IF( CMN_LINE .EQ. 20 ) THEN + CARD = 'BEGAST_C= ''Axis '' / Coordinate'// + : ' axis' + ELSE IF( CMN_LINE .EQ. 21 ) THEN + CARD = 'LABEL_A = ''Data grid index 1'' / Axis Label' + ELSE IF( CMN_LINE .EQ. 22 ) THEN + CARD = 'SYMBOL_A= ''g1 '' / Axis symbo'// + : 'l' + ELSE IF( CMN_LINE .EQ. 23 ) THEN + CARD = 'UNIT_A = ''pixel '' / Axis units' + ELSE IF( CMN_LINE .EQ. 24 ) THEN + CARD = 'FORMAT_A= ''%3.1f '' / Format spe'// + : 'cifier' + ELSE IF( CMN_LINE .EQ. 25 ) THEN + CARD = 'ENDAST_A= ''Axis '' / End of obj'// + : 'ect definition' + ELSE IF( CMN_LINE .EQ. 26 ) THEN + CARD = 'AX2_A = '' '' / Axis numbe'// + : 'r 2' + ELSE IF( CMN_LINE .EQ. 27 ) THEN + CARD = 'BEGAST_D= ''Axis '' / Coordinate'// + : ' axis' + ELSE IF( CMN_LINE .EQ. 28 ) THEN + CARD = 'LABEL_B = ''Data grid index 2'' / Axis Label' + ELSE IF( CMN_LINE .EQ. 29 ) THEN + CARD = 'SYMBOL_B= ''g2 '' / Axis symbo'// + : 'l' + ELSE IF( CMN_LINE .EQ. 30 ) THEN + CARD = 'UNIT_B = ''pixel '' / Axis units' + ELSE IF( CMN_LINE .EQ. 31 ) THEN + CARD = 'FORMAT_B= ''%3.1f '' / Format spe'// + : 'cifier' + ELSE IF( CMN_LINE .EQ. 32 ) THEN + CARD = 'ENDAST_B= ''Axis '' / End of obj'// + : 'ect definition' + ELSE IF( CMN_LINE .EQ. 33 ) THEN + CARD = 'ENDAST_C= ''Frame '' / End of obj'// + : 'ect definition' + ELSE IF( CMN_LINE .EQ. 34 ) THEN + CARD = 'FRM2_A = '' '' / Frame numb'// + : 'er 2' + ELSE IF( CMN_LINE .EQ. 35 ) THEN + CARD = 'BEGAST_E= ''Frame '' / Coordinate'// + : ' system description' + ELSE IF( CMN_LINE .EQ. 36 ) THEN + CARD = 'TITLE_B = ''Pixel coordinates; first pixel at'// + : ' (-&''/ Title of coordinate system' + ELSE IF( CMN_LINE .EQ. 37 ) THEN + CARD = 'CONTINUE ''100.5,-200.5)''' + ELSE IF( CMN_LINE .EQ. 38 ) THEN + CARD = 'NAXES_B = 2 / Number of co'// + : 'ordinate axes' + ELSE IF( CMN_LINE .EQ. 39 ) THEN + CARD = 'DOMAIN_B= ''POLAR '' / Coordinate'// + : ' system domain' + ELSE IF( CMN_LINE .EQ. 40 ) THEN + CARD = 'AX1_B = '' '' / Axis numbe'// + : 'r 1' + ELSE IF( CMN_LINE .EQ. 41 ) THEN + CARD = 'BEGAST_F= ''Axis '' / Coordinate'// + : ' axis' + ELSE IF( CMN_LINE .EQ. 42 ) THEN + CARD = 'LABEL_C = ''Pixel coordinate 1'' / Axis Label' + ELSE IF( CMN_LINE .EQ. 43 ) THEN + CARD = 'SYMBOL_C= ''p1 '' / Axis symbo'// + : 'l' + ELSE IF( CMN_LINE .EQ. 44 ) THEN + CARD = 'UNIT_C = ''pixel '' / Axis units' + ELSE IF( CMN_LINE .EQ. 45 ) THEN + CARD = 'FORMAT_C= ''%3.1f '' / Format spe'// + : 'cifier' + ELSE IF( CMN_LINE .EQ. 46 ) THEN + CARD = 'ENDAST_D= ''Axis '' / End of obj'// + : 'ect definition' + ELSE IF( CMN_LINE .EQ. 47 ) THEN + CARD = 'AX2_B = '' '' / Axis numbe'// + : 'r 2' + ELSE IF( CMN_LINE .EQ. 48 ) THEN + CARD = 'BEGAST_G= ''Axis '' / Coordinate'// + : ' axis' + ELSE IF( CMN_LINE .EQ. 49 ) THEN + CARD = 'LABEL_D = ''Pixel coordinate 2'' / Axis Label' + ELSE IF( CMN_LINE .EQ. 50 ) THEN + CARD = 'SYMBOL_D= ''p2 '' / Axis symbo'// + : 'l' + ELSE IF( CMN_LINE .EQ. 51 ) THEN + CARD = 'UNIT_D = ''pixel '' / Axis units' + ELSE IF( CMN_LINE .EQ. 52 ) THEN + CARD = 'FORMAT_D= ''%3.1f '' / Format spe'// + : 'cifier' + ELSE IF( CMN_LINE .EQ. 53 ) THEN + CARD = 'ENDAST_E= ''Axis '' / End of obj'// + : 'ect definition' + ELSE IF( CMN_LINE .EQ. 54 ) THEN + CARD = 'ENDAST_F= ''Frame '' / End of obj'// + : 'ect definition' + ELSE IF( CMN_LINE .EQ. 55 ) THEN + CARD = 'MAP2_A = '' '' / Mapping be'// + : 'tween nodes 1 and 2' + ELSE IF( CMN_LINE .EQ. 56 ) THEN + CARD = 'BEGAST_H= ''CmpMap '' / Compound M'// + : 'apping' + ELSE IF( CMN_LINE .EQ. 57 ) THEN + CARD = 'NIN_A = 2 / Number of in'// + : 'put coordinates' + ELSE IF( CMN_LINE .EQ. 58 ) THEN + CARD = 'ISA_A = ''Mapping '' / Mapping be'// + : 'tween coordinate systems' + ELSE IF( CMN_LINE .EQ. 59 ) THEN + CARD = 'INVA_A = 1 / First Mappin'// + : 'g used in inverse direction' + ELSE IF( CMN_LINE .EQ. 60 ) THEN + CARD = 'INVB_A = 1 / Second Mappi'// + : 'ng used in inverse direction' + ELSE IF( CMN_LINE .EQ. 61 ) THEN + CARD = 'MAPA_A = '' '' / First comp'// + : 'onent Mapping' + ELSE IF( CMN_LINE .EQ. 62 ) THEN + CARD = 'BEGAST_I= ''MathMap '' / Transforma'// + : 'tion using mathematical functions' + ELSE IF( CMN_LINE .EQ. 63 ) THEN + CARD = 'NIN_B = 2 / Number of in'// + : 'put coordinates' + ELSE IF( CMN_LINE .EQ. 64 ) THEN + CARD = 'INVERT_A= 0 / Mapping not '// + : 'inverted' + ELSE IF( CMN_LINE .EQ. 65 ) THEN + CARD = 'ISA_B = ''Mapping '' / Mapping be'// + : 'tween coordinate systems' + ELSE IF( CMN_LINE .EQ. 66 ) THEN + CARD = 'FWD1_A = ''r=sqrt(x*x+y*y)'' / Forward fu'// + : 'nction 1' + ELSE IF( CMN_LINE .EQ. 67 ) THEN + CARD = 'FWD2_A = ''theta=atan2(y,x)'' / Forward fu'// + : 'nction 2' + ELSE IF( CMN_LINE .EQ. 68 ) THEN + CARD = 'INV1_A = ''x=r*cos(theta)'' / Inverse fu'// + : 'nction 1' + ELSE IF( CMN_LINE .EQ. 69 ) THEN + CARD = 'INV2_A = ''y=r*sin(theta)'' / Inverse fu'// + : 'nction 2' + ELSE IF( CMN_LINE .EQ. 70 ) THEN + CARD = 'SIMPFI_A= 1 / Forward-inve'// + : 'rse pairs may simplify' + ELSE IF( CMN_LINE .EQ. 71 ) THEN + CARD = 'SIMPIF_A= 1 / Inverse-forw'// + : 'ard pairs may simplify' + ELSE IF( CMN_LINE .EQ. 72 ) THEN + CARD = 'ENDAST_G= ''MathMap '' / End of obj'// + : 'ect definition' + ELSE IF( CMN_LINE .EQ. 73 ) THEN + CARD = 'MAPB_A = '' '' / Second com'// + : 'ponent Mapping' + ELSE IF( CMN_LINE .EQ. 74 ) THEN + CARD = 'BEGAST_J= ''WinMap '' / Map one wi'// + : 'ndow on to another' + ELSE IF( CMN_LINE .EQ. 75 ) THEN + CARD = 'NIN_C = 2 / Number of in'// + : 'put coordinates' + ELSE IF( CMN_LINE .EQ. 76 ) THEN + CARD = 'INVERT_B= 0 / Mapping not '// + : 'inverted' + ELSE IF( CMN_LINE .EQ. 77 ) THEN + CARD = 'ISA_C = ''Mapping '' / Mapping be'// + : 'tween coordinate systems' + ELSE IF( CMN_LINE .EQ. 78 ) THEN + CARD = 'SFT1_A = -101.5 / Shift for ax'// + : 'is 1' + ELSE IF( CMN_LINE .EQ. 79 ) THEN + CARD = 'SFT2_A = -201.5 / Shift for ax'// + : 'is 2' + ELSE IF( CMN_LINE .EQ. 80 ) THEN + CARD = 'ENDAST_H= ''WinMap '' / End of obj'// + : 'ect definition' + ELSE IF( CMN_LINE .EQ. 81 ) THEN + CARD = 'ENDAST_I= ''CmpMap '' / End of obj'// + : 'ect definition' + ELSE IF( CMN_LINE .EQ. 82 ) THEN + CARD = 'ENDAST_J= ''FrameSet'' / End of obj'// + : 'ect definition' + ELSE IF( CMN_LINE .EQ. 83 ) THEN + CARD = 'COMMENT AST .................................'// + : '...............................' + ELSE IF( CMN_LINE .EQ. 84 ) THEN + CARD = 'AST' + ELSE IF( CMN_LINE .EQ. 85 ) THEN + CARD = 'COMMENT AST End of AST data for'// + : ' FrameSet object' + ELSE IF( CMN_LINE .EQ. 86 ) THEN + CARD = 'AST' + ELSE IF( CMN_LINE .EQ. 87 ) THEN + CARD = 'COMMENT AST ---------------------------------'// + : '-------------------------------' + ELSE IF( CMN_LINE .EQ. 88 ) THEN + CARD = 'AST' + REG_SOURCE = 0 + ELSE + REG_SOURCE = 0 + END IF + + +* FITS headers from scp.head (Tue Jan 29 15:17:50 2002) + ELSE IF( CMN_FTEST .EQ. 3 ) THEN + IF( CMN_LINE .EQ. 1 ) THEN + CARD = 'SIMPLE = T / file does co'// + : 'nform to FITS standard' + ELSE IF( CMN_LINE .EQ. 2 ) THEN + CARD = 'BITPIX = 16 / number of bi'// + : 'ts per data pixel' + ELSE IF( CMN_LINE .EQ. 3 ) THEN + CARD = 'NAXIS = 2 / number of da'// + : 'ta axes' + ELSE IF( CMN_LINE .EQ. 4 ) THEN + CARD = 'NAXIS1 = 1787 / length of da'// + : 'ta axis 1' + ELSE IF( CMN_LINE .EQ. 5 ) THEN + CARD = 'NAXIS2 = 447 / length of da'// + : 'ta axis 2' + ELSE IF( CMN_LINE .EQ. 6 ) THEN + CARD = 'EXTEND = T / FITS dataset'// + : ' may contain extensions' + ELSE IF( CMN_LINE .EQ. 7 ) THEN + CARD = 'COMMENT FITS (Flexible Image Transport Syst'// + : 'em) format defined in Astronomy and' + ELSE IF( CMN_LINE .EQ. 8 ) THEN + CARD = 'COMMENT Astrophysics Supplement Series v44/'// + : 'p363, v44/p371, v73/p359, v73/p365.' + ELSE IF( CMN_LINE .EQ. 9 ) THEN + CARD = 'COMMENT Contact the NASA Science Office of '// + : 'Standards and Technology for the' + ELSE IF( CMN_LINE .EQ. 10 ) THEN + CARD = 'COMMENT FITS Definition document #100 and o'// + : 'ther FITS information.' + ELSE IF( CMN_LINE .EQ. 11 ) THEN + CARD = 'PLATENUM= ''3665 '' / Plate numb'// + : 'er' + ELSE IF( CMN_LINE .EQ. 12 ) THEN + CARD = 'EMULSION= ''IIIaJ '' / Kodak emul'// + : 'sion type' + ELSE IF( CMN_LINE .EQ. 13 ) THEN + CARD = 'FILTER = ''GG395 '' / Schott gla'// + : 'ss filter type' + ELSE IF( CMN_LINE .EQ. 14 ) THEN + CARD = 'PLTSCALE= ''67.14 '' / [arcsec/mm'// + : '] plate scale' + ELSE IF( CMN_LINE .EQ. 15 ) THEN + CARD = 'FIELDNUM= ''1 '' / Sky survey'// + : ' field number' + ELSE IF( CMN_LINE .EQ. 16 ) THEN + CARD = 'EPOCH = 1.977780E+03 / Epoch of obs'// + : 'ervation' + ELSE IF( CMN_LINE .EQ. 17 ) THEN + CARD = 'DATE-OBS= ''1977-10-11'' / [yyyy-mm-d'// + : 'd] UT date of observation' + ELSE IF( CMN_LINE .EQ. 18 ) THEN + CARD = 'TELESCOP= ''UKST '' / Telescope '// + : 'on which the plate was taken' + ELSE IF( CMN_LINE .EQ. 19 ) THEN + CARD = 'TELETYPE= ''SCHM '' / Type of te'// + : 'lescope' + ELSE IF( CMN_LINE .EQ. 20 ) THEN + CARD = 'SITELAT = -5.458410576565E-01 / [radians] la'// + : 'titude of telescope' + ELSE IF( CMN_LINE .EQ. 21 ) THEN + CARD = 'SITELONG= 2.601766194458E+00 / [radians] lo'// + : 'ngitude of telescope' + ELSE IF( CMN_LINE .EQ. 22 ) THEN + CARD = 'LST = ''00:20 '' / [hh:mm] lo'// + : 'cal sidereal time at start of obs' + ELSE IF( CMN_LINE .EQ. 23 ) THEN + CARD = 'MJD-OBS = 4.342657300880E+04 / Modified Jul'// + : 'ian Date of observation' + ELSE IF( CMN_LINE .EQ. 24 ) THEN + CARD = 'INSTRUME= ''SuperCOSMOS I'' / Measuring '// + : 'machine' + ELSE IF( CMN_LINE .EQ. 25 ) THEN + CARD = 'DATE-MES= ''2000-11-04'' / [yyyy-mm-d'// + : 'd] Date of this plate measurement' + ELSE IF( CMN_LINE .EQ. 26 ) THEN + CARD = 'RADECSYS= ''FK5 '' / Reference '// + : 'frame for RA/DEC in original file' + ELSE IF( CMN_LINE .EQ. 27 ) THEN + CARD = 'NHKLINES= 146 / Number of li'// + : 'nes from house-keeping file' + ELSE IF( CMN_LINE .EQ. 28 ) THEN + CARD = 'HKLIN001= ''JOB.JOBNO UKJ001'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 29 ) THEN + CARD = 'HKLIN002= ''JOB.DATE-MES 2000:11:'// + : '04'' /' + ELSE IF( CMN_LINE .EQ. 30 ) THEN + CARD = 'HKLIN003= ''JOB.TIME 12:51:09'// + : ''' /' + ELSE IF( CMN_LINE .EQ. 31 ) THEN + CARD = 'HKLIN004= ''JOB.INSTRUME SuperCOS'// + : 'MOS I'' /' + ELSE IF( CMN_LINE .EQ. 32 ) THEN + CARD = 'HKLIN005= ''JOB.ORIGIN Royal Ob'// + : 'servatory Edinburgh'' /' + ELSE IF( CMN_LINE .EQ. 33 ) THEN + CARD = 'HKLIN006= ''JOB.SOFTWARE /home/sc'// + : 'osdev/v033'' /' + ELSE IF( CMN_LINE .EQ. 34 ) THEN + CARD = 'HKLIN007= ''JOB.OPERATOR ebt'' /' + ELSE IF( CMN_LINE .EQ. 35 ) THEN + CARD = 'HKLIN008= ''JOB.USER htm'' /' + ELSE IF( CMN_LINE .EQ. 36 ) THEN + CARD = 'HKLIN009= ''JOB.USERREF NONE'' /' + ELSE IF( CMN_LINE .EQ. 37 ) THEN + CARD = 'HKLIN010= ''JOB.UORIGIN ROE'' /' + ELSE IF( CMN_LINE .EQ. 38 ) THEN + CARD = 'HKLIN011= ''JOB.UCOUNTRY uk'' /' + ELSE IF( CMN_LINE .EQ. 39 ) THEN + CARD = 'HKLIN012= ''JOB.COMMENT Digital '// + : 'catalogue of the Sky'' /' + ELSE IF( CMN_LINE .EQ. 40 ) THEN + CARD = 'HKLIN013= ''JOB.IAM_FILE iam.srt''// + : '' /' + ELSE IF( CMN_LINE .EQ. 41 ) THEN + CARD = 'HKLIN014= ''PLATE.TELESCOP UKST'' /' + ELSE IF( CMN_LINE .EQ. 42 ) THEN + CARD = 'HKLIN015= ''PLATE.TELTYPE SCHM'' /' + ELSE IF( CMN_LINE .EQ. 43 ) THEN + CARD = 'HKLIN016= ''PLATE.PLATE 3665'' /' + ELSE IF( CMN_LINE .EQ. 44 ) THEN + CARD = 'HKLIN017= ''PLATE.MATERIAL 3mm glas'// + : 's'' /' + ELSE IF( CMN_LINE .EQ. 45 ) THEN + CARD = 'HKLIN018= ''PLATE.EMULSION IIIaJ'' '// + : '/' + ELSE IF( CMN_LINE .EQ. 46 ) THEN + CARD = 'HKLIN019= ''PLATE.FILTER GG395'' '// + : '/' + ELSE IF( CMN_LINE .EQ. 47 ) THEN + CARD = 'HKLIN020= ''PLATE.PSCALE 67.14'' '// + : '/' + ELSE IF( CMN_LINE .EQ. 48 ) THEN + CARD = 'HKLIN021= ''PLATE.FIELD 1'' /' + ELSE IF( CMN_LINE .EQ. 49 ) THEN + CARD = 'HKLIN022= ''PLATE.RA_PNT 0'' /' + ELSE IF( CMN_LINE .EQ. 50 ) THEN + CARD = 'HKLIN023= ''PLATE.DEC_PNT -90'' /' + ELSE IF( CMN_LINE .EQ. 51 ) THEN + CARD = 'HKLIN024= ''PLATE.RADECSYS FK4'' /' + ELSE IF( CMN_LINE .EQ. 52 ) THEN + CARD = 'HKLIN025= ''PLATE.EQUINOX 1950'' /' + ELSE IF( CMN_LINE .EQ. 53 ) THEN + CARD = 'HKLIN026= ''PLATE.TIMESYS BESSELIA'// + : 'N'' /' + ELSE IF( CMN_LINE .EQ. 54 ) THEN + CARD = 'HKLIN027= ''PLATE.EPOCH 1977.78''// + : '' /' + ELSE IF( CMN_LINE .EQ. 55 ) THEN + CARD = 'HKLIN028= ''PLATE.EXPOSURE 75'' /' + ELSE IF( CMN_LINE .EQ. 56 ) THEN + CARD = 'HKLIN029= ''PLATE.UTDATE 771011'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 57 ) THEN + CARD = 'HKLIN030= ''PLATE.LST 0020'' /' + ELSE IF( CMN_LINE .EQ. 58 ) THEN + CARD = 'HKLIN031= ''PLATE.MJD 43426.57'// + : '3008796'' /' + ELSE IF( CMN_LINE .EQ. 59 ) THEN + CARD = 'HKLIN032= ''PLATE.TELLAT -0.54584'// + : '105765654'' /' + ELSE IF( CMN_LINE .EQ. 60 ) THEN + CARD = 'HKLIN033= ''PLATE.TELLONG 2.601766'// + : '1944583'' /' + ELSE IF( CMN_LINE .EQ. 61 ) THEN + CARD = 'HKLIN034= ''PLATE.TELHT 1145'' /' + ELSE IF( CMN_LINE .EQ. 62 ) THEN + CARD = 'HKLIN035= ''PLATE.TEMP 273.155''// + : '' /' + ELSE IF( CMN_LINE .EQ. 63 ) THEN + CARD = 'HKLIN036= ''PLATE.ATMOSP 1013.25''// + : '' /' + ELSE IF( CMN_LINE .EQ. 64 ) THEN + CARD = 'HKLIN037= ''PLATE.HUMID 0.5'' /' + ELSE IF( CMN_LINE .EQ. 65 ) THEN + CARD = 'HKLIN038= ''PLATE.WAVE 4500'' /' + ELSE IF( CMN_LINE .EQ. 66 ) THEN + CARD = 'HKLIN039= ''PLATE.TROPL 0.0065'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 67 ) THEN + CARD = 'HKLIN040= ''CALIBRATION.CALTYPE SPLINE'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 68 ) THEN + CARD = 'HKLIN041= ''CALIBRATION.STEPWEDG KPNO'' /' + ELSE IF( CMN_LINE .EQ. 69 ) THEN + CARD = 'HKLIN042= ''CALIBRATION.NSTEPS 8'' /' + ELSE IF( CMN_LINE .EQ. 70 ) THEN + CARD = 'HKLIN043= ''MEASUREMENT.ORIENTAT news'' /' + ELSE IF( CMN_LINE .EQ. 71 ) THEN + CARD = 'HKLIN044= ''MEASUREMENT.EMULPOS UP'' /' + ELSE IF( CMN_LINE .EQ. 72 ) THEN + CARD = 'HKLIN045= ''MEASUREMENT.SCANFILT 14'' /' + ELSE IF( CMN_LINE .EQ. 73 ) THEN + CARD = 'HKLIN046= ''MEASUREMENT.SOSP 552'' /' + ELSE IF( CMN_LINE .EQ. 74 ) THEN + CARD = 'HKLIN047= ''MEASUREMENT.STEPSIZE 10'' /' + ELSE IF( CMN_LINE .EQ. 75 ) THEN + CARD = 'HKLIN048= ''MEASUREMENT.SCANLEN 1152'' /' + ELSE IF( CMN_LINE .EQ. 76 ) THEN + CARD = 'HKLIN049= ''MEASUREMENT.A-XMIN 1622000''// + : '' /' + ELSE IF( CMN_LINE .EQ. 77 ) THEN + CARD = 'HKLIN050= ''MEASUREMENT.A-YMIN 1622000''// + : '' /' + ELSE IF( CMN_LINE .EQ. 78 ) THEN + CARD = 'HKLIN051= ''MEASUREMENT.A-XMAX 33878000'// + : ''' /' + ELSE IF( CMN_LINE .EQ. 79 ) THEN + CARD = 'HKLIN052= ''MEASUREMENT.A-YMAX 33878000'// + : ''' /' + ELSE IF( CMN_LINE .EQ. 80 ) THEN + CARD = 'HKLIN053= ''MEASUREMENT.X_PNT 17500000'// + : ''' /' + ELSE IF( CMN_LINE .EQ. 81 ) THEN + CARD = 'HKLIN054= ''MEASUREMENT.Y_PNT 18000000'// + : ''' /' + ELSE IF( CMN_LINE .EQ. 82 ) THEN + CARD = 'HKLIN055= ''ANALYSIS.NPARAMS 32'' /' + ELSE IF( CMN_LINE .EQ. 83 ) THEN + CARD = 'HKLIN056= ''ANALYSIS.AREACUT 8'' /' + ELSE IF( CMN_LINE .EQ. 84 ) THEN + CARD = 'HKLIN057= ''ANALYSIS.AP-PARAM 1.07'' /' + ELSE IF( CMN_LINE .EQ. 85 ) THEN + CARD = 'HKLIN058= ''DEBLEND.DB-PARAM 1.05'' /' + ELSE IF( CMN_LINE .EQ. 86 ) THEN + CARD = 'HKLIN059= ''DEBLEND.DB-AMIN 16'' /' + ELSE IF( CMN_LINE .EQ. 87 ) THEN + CARD = 'HKLIN060= ''DEBLEND.DB-AMAX 100000'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 88 ) THEN + CARD = 'HKLIN061= ''DEBLEND.DB-ACUT 8'' /' + ELSE IF( CMN_LINE .EQ. 89 ) THEN + CARD = 'HKLIN062= ''DEBLEND.DB-LEVEL 16'' /' + ELSE IF( CMN_LINE .EQ. 90 ) THEN + CARD = 'HKLIN063= ''DEBLEND.SELECT PARENT+C'// + : 'HILD'' /' + ELSE IF( CMN_LINE .EQ. 91 ) THEN + CARD = 'HKLIN064= ''SKY.SKYSQUAR 64'' /' + ELSE IF( CMN_LINE .EQ. 92 ) THEN + CARD = 'HKLIN065= ''SKY.SKYDEFN MEDIAN'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 93 ) THEN + CARD = 'HKLIN066= ''SKY.SKYFILTR bdkjunk''// + : '' /' + ELSE IF( CMN_LINE .EQ. 94 ) THEN + CARD = 'HKLIN067= ''SKY.F-THRESH 8'' /' + ELSE IF( CMN_LINE .EQ. 95 ) THEN + CARD = 'HKLIN068= ''SKY.F-SCLEN 4'' /' + ELSE IF( CMN_LINE .EQ. 96 ) THEN + CARD = 'HKLIN069= ''THRESHOLDING.PCUT 10'' /' + ELSE IF( CMN_LINE .EQ. 97 ) THEN + CARD = 'HKLIN070= ''IAMQC.AREAMIN 8'' /' + ELSE IF( CMN_LINE .EQ. 98 ) THEN + CARD = 'HKLIN071= ''IAMQC.AREAMAX 77346'' '// + : '/' + ELSE IF( CMN_LINE .EQ. 99 ) THEN + CARD = 'HKLIN072= ''IAMQC.MINMAG -30515'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 100 ) THEN + CARD = 'HKLIN073= ''IAMQC.MAXMAG -17954'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 101 ) THEN + CARD = 'HKLIN074= ''IAMQC.MINELL 0.000415'// + : '6232'' /' + ELSE IF( CMN_LINE .EQ. 102 ) THEN + CARD = 'HKLIN075= ''IAMQC.MAXELL 1'' /' + ELSE IF( CMN_LINE .EQ. 103 ) THEN + CARD = 'HKLIN076= ''IAMQC.MODELL 0.14'' /' + ELSE IF( CMN_LINE .EQ. 104 ) THEN + CARD = 'HKLIN077= ''IAMQC.MODOR 91'' /' + ELSE IF( CMN_LINE .EQ. 105 ) THEN + CARD = 'HKLIN078= ''IAMQC.MIDELL 0.21'' /' + ELSE IF( CMN_LINE .EQ. 106 ) THEN + CARD = 'HKLIN079= ''IAMQC.MIDOR 93'' /' + ELSE IF( CMN_LINE .EQ. 107 ) THEN + CARD = 'HKLIN080= ''IAMQC.MEANELL 0.246703'// + : '7'' /' + ELSE IF( CMN_LINE .EQ. 108 ) THEN + CARD = 'HKLIN081= ''IAMQC.MEANOR 91.63474'// + : ''' /' + ELSE IF( CMN_LINE .EQ. 109 ) THEN + CARD = 'HKLIN082= ''IAMQC.NUMOBJ 556985'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 110 ) THEN + CARD = 'HKLIN083= ''IAMQC.PARENTS 486656'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 111 ) THEN + CARD = 'HKLIN084= ''IAMQC.RANGING TRUE'' /' + ELSE IF( CMN_LINE .EQ. 112 ) THEN + CARD = 'HKLIN085= ''IAMQC.LANE_1 15571'' '// + : '/' + ELSE IF( CMN_LINE .EQ. 113 ) THEN + CARD = 'HKLIN086= ''IAMQC.LANE_2 33207'' '// + : '/' + ELSE IF( CMN_LINE .EQ. 114 ) THEN + CARD = 'HKLIN087= ''IAMQC.LANE_3 51478'' '// + : '/' + ELSE IF( CMN_LINE .EQ. 115 ) THEN + CARD = 'HKLIN088= ''IAMQC.LANE_4 69944'' '// + : '/' + ELSE IF( CMN_LINE .EQ. 116 ) THEN + CARD = 'HKLIN089= ''IAMQC.LANE_5 89236'' '// + : '/' + ELSE IF( CMN_LINE .EQ. 117 ) THEN + CARD = 'HKLIN090= ''IAMQC.LANE_6 108416'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 118 ) THEN + CARD = 'HKLIN091= ''IAMQC.LANE_7 127481'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 119 ) THEN + CARD = 'HKLIN092= ''IAMQC.LANE_8 146699'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 120 ) THEN + CARD = 'HKLIN093= ''IAMQC.LANE_9 166380'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 121 ) THEN + CARD = 'HKLIN094= ''IAMQC.LANE_10 186126'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 122 ) THEN + CARD = 'HKLIN095= ''IAMQC.LANE_11 205946'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 123 ) THEN + CARD = 'HKLIN096= ''IAMQC.LANE_12 225915'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 124 ) THEN + CARD = 'HKLIN097= ''IAMQC.LANE_13 245926'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 125 ) THEN + CARD = 'HKLIN098= ''IAMQC.LANE_14 266574'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 126 ) THEN + CARD = 'HKLIN099= ''IAMQC.LANE_15 287150'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 127 ) THEN + CARD = 'HKLIN100= ''IAMQC.LANE_16 308087'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 128 ) THEN + CARD = 'HKLIN101= ''IAMQC.LANE_17 328830'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 129 ) THEN + CARD = 'HKLIN102= ''IAMQC.LANE_18 350253'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 130 ) THEN + CARD = 'HKLIN103= ''IAMQC.LANE_19 370738'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 131 ) THEN + CARD = 'HKLIN104= ''IAMQC.LANE_20 391722'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 132 ) THEN + CARD = 'HKLIN105= ''IAMQC.LANE_21 412801'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 133 ) THEN + CARD = 'HKLIN106= ''IAMQC.LANE_22 433795'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 134 ) THEN + CARD = 'HKLIN107= ''IAMQC.LANE_23 454383'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 135 ) THEN + CARD = 'HKLIN108= ''IAMQC.LANE_24 474711'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 136 ) THEN + CARD = 'HKLIN109= ''IAMQC.LANE_25 495108'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 137 ) THEN + CARD = 'HKLIN110= ''IAMQC.LANE_26 515755'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 138 ) THEN + CARD = 'HKLIN111= ''IAMQC.LANE_27 536499'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 139 ) THEN + CARD = 'HKLIN112= ''IAMQC.LANE_28 556985'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 140 ) THEN + CARD = 'HKLIN113= ''XYTORADEC.STARCAT /sdata/s'// + : 'cos/refcats/tycho2.FIT'' /' + ELSE IF( CMN_LINE .EQ. 141 ) THEN + CARD = 'HKLIN114= ''XYTORADEC.BRIGHTLIM 9'' /' + ELSE IF( CMN_LINE .EQ. 142 ) THEN + CARD = 'HKLIN115= ''XYTORADEC.C-EQUIN 2000'' /' + ELSE IF( CMN_LINE .EQ. 143 ) THEN + CARD = 'HKLIN116= ''XYTORADEC.C-EQTSYS JULIAN'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 144 ) THEN + CARD = 'HKLIN117= ''XYTORADEC.C-EPOCH 2000'' /' + ELSE IF( CMN_LINE .EQ. 145 ) THEN + CARD = 'HKLIN118= ''XYTORADEC.C-EPTSYS JULIAN'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 146 ) THEN + CARD = 'HKLIN119= ''XYTORADEC.R-EQUIN 2000'' /' + ELSE IF( CMN_LINE .EQ. 147 ) THEN + CARD = 'HKLIN120= ''XYTORADEC.R-TSYS JULIAN'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 148 ) THEN + CARD = 'HKLIN121= ''XYTORADEC.MAXITER 5000'' /' + ELSE IF( CMN_LINE .EQ. 149 ) THEN + CARD = 'HKLIN122= ''XYTORADEC.RCRITINI 500000'''// + : ' /' + ELSE IF( CMN_LINE .EQ. 150 ) THEN + CARD = 'HKLIN123= ''XYTORADEC.RCRITABS 50000'' '// + : '/' + ELSE IF( CMN_LINE .EQ. 151 ) THEN + CARD = 'HKLIN124= ''XYTORADEC.RCRITREL 1'' /' + ELSE IF( CMN_LINE .EQ. 152 ) THEN + CARD = 'HKLIN125= ''XYTORADEC.RCRITFIN 3'' /' + ELSE IF( CMN_LINE .EQ. 153 ) THEN + CARD = 'HKLIN126= ''XYTORADEC.HARDCOPY /scos1/s'// + : 'cos/UKJ001/UKJ001.ps'' /' + ELSE IF( CMN_LINE .EQ. 154 ) THEN + CARD = 'HKLIN127= ''XYTORADEC.REFSMULT 5'' /' + ELSE IF( CMN_LINE .EQ. 155 ) THEN + CARD = 'HKLIN128= ''XYTORADEC.RESDMULT 1000'' /' + ELSE IF( CMN_LINE .EQ. 156 ) THEN + CARD = 'HKLIN129= ''XYTORADEC.RACOL RA'' /' + ELSE IF( CMN_LINE .EQ. 157 ) THEN + CARD = 'HKLIN130= ''XYTORADEC.DECOL DEC'' /' + ELSE IF( CMN_LINE .EQ. 158 ) THEN + CARD = 'HKLIN131= ''XYTORADEC.RAPMCOL PMRA'' /' + ELSE IF( CMN_LINE .EQ. 159 ) THEN + CARD = 'HKLIN132= ''XYTORADEC.DECPMCOL PMDE'' /' + ELSE IF( CMN_LINE .EQ. 160 ) THEN + CARD = 'HKLIN133= ''XYTORADEC.PLXCOL NONE'' /' + ELSE IF( CMN_LINE .EQ. 161 ) THEN + CARD = 'HKLIN134= ''XYTORADEC.RVCOL NONE'' /' + ELSE IF( CMN_LINE .EQ. 162 ) THEN + CARD = 'HKLIN135= ''XYTORADEC.MAGCOL VT'' /' + ELSE IF( CMN_LINE .EQ. 163 ) THEN + CARD = 'HKLIN136= ''XYTORADEC.STARSC 2374'' /' + ELSE IF( CMN_LINE .EQ. 164 ) THEN + CARD = 'HKLIN137= ''XYTORADEC.STARSU 1727'' /' + ELSE IF( CMN_LINE .EQ. 165 ) THEN + CARD = 'HKLIN138= ''XYTORADEC.COEFFS_1 17.64034'// + : '3856524'' /' + ELSE IF( CMN_LINE .EQ. 166 ) THEN + CARD = 'HKLIN139= ''XYTORADEC.COEFFS_2 -260.441'// + : '51995641'' /' + ELSE IF( CMN_LINE .EQ. 167 ) THEN + CARD = 'HKLIN140= ''XYTORADEC.COEFFS_3 -163.091'// + : '55572601'' /' + ELSE IF( CMN_LINE .EQ. 168 ) THEN + CARD = 'HKLIN141= ''XYTORADEC.COEFFS_4 17.50423'// + : '0442205'' /' + ELSE IF( CMN_LINE .EQ. 169 ) THEN + CARD = 'HKLIN142= ''XYTORADEC.COEFFS_5 -163.086'// + : '76953832'' /' + ELSE IF( CMN_LINE .EQ. 170 ) THEN + CARD = 'HKLIN143= ''XYTORADEC.COEFFS_6 260.4881'// + : '7907668'' /' + ELSE IF( CMN_LINE .EQ. 171 ) THEN + CARD = 'HKLIN144= ''XYTORADEC.DISTR -0.33333'// + : '333333333'' /' + ELSE IF( CMN_LINE .EQ. 172 ) THEN + CARD = 'HKLIN145= ''XYTORADEC.RA_PNT 0.549249'// + : '96662137'' /' + ELSE IF( CMN_LINE .EQ. 173 ) THEN + CARD = 'HKLIN146= ''XYTORADEC.DEC_PNT -1.56849'// + : '31501781'' /' + ELSE IF( CMN_LINE .EQ. 174 ) THEN + CARD = 'HISTORY = ''SuperCOSMOS image analysis and ma'// + : 'pping mode (IAM and MM)'' /' + ELSE IF( CMN_LINE .EQ. 175 ) THEN + CARD = 'HISTORY = ''data written by xydcomp_ss.'' /' + ELSE IF( CMN_LINE .EQ. 176 ) THEN + CARD = 'HISTORY = ''Any questions/comments/suggestion'// + : 's/bug reports should be sent'' /' + ELSE IF( CMN_LINE .EQ. 177 ) THEN + CARD = 'HISTORY = ''to N.Hambly@roe.ac.uk'' /' + ELSE IF( CMN_LINE .EQ. 178 ) THEN + CARD = 'ASTSIGX = 3.700000E-01 / [arcsec] std'// + : '. dev. of astrometric fit in X' + ELSE IF( CMN_LINE .EQ. 179 ) THEN + CARD = 'ASTSIGY = 3.800000E-01 / [arcsec] std'// + : '. dev. of astrometric fit in Y' + ELSE IF( CMN_LINE .EQ. 180 ) THEN + CARD = 'CRVAL1 = 0.000000000000E+00 / Axis 1 refer'// + : 'ence value' + ELSE IF( CMN_LINE .EQ. 181 ) THEN + CARD = 'CRPIX1 = 8.936318379289E+02 / Axis 1 pixel'// + : ' value' + ELSE IF( CMN_LINE .EQ. 182 ) THEN + CARD = 'CTYPE1 = ''RA---TAN'' / Quantity r'// + : 'epresented by axis 1' + ELSE IF( CMN_LINE .EQ. 183 ) THEN + CARD = 'CRVAL2 = -9.000000018364E+01 / Axis 2 refer'// + : 'ence value' + ELSE IF( CMN_LINE .EQ. 184 ) THEN + CARD = 'CRPIX2 = 2.238380193875E+02 / Axis 2 pixel'// + : ' value' + ELSE IF( CMN_LINE .EQ. 185 ) THEN + CARD = 'CTYPE2 = ''DEC--TAN'' / Quantity r'// + : 'epresented by axis 2' + ELSE IF( CMN_LINE .EQ. 186 ) THEN + CARD = 'CD1_1 = -1.864642639667E-04 / Co-ordinate '// + : 'transformation matrix' + ELSE IF( CMN_LINE .EQ. 187 ) THEN + CARD = 'CD1_2 = -9.188369023766E-07 / Co-ordinate '// + : 'transformation matrix' + ELSE IF( CMN_LINE .EQ. 188 ) THEN + CARD = 'CD2_1 = -1.038232462415E-06 / Co-ordinate '// + : 'transformation matrix' + ELSE IF( CMN_LINE .EQ. 189 ) THEN + CARD = 'CD2_2 = 1.866269837741E-04 / Co-ordinate '// + : 'transformation matrix' + ELSE IF( CMN_LINE .EQ. 190 ) THEN + CARD = 'CDELT1 = -1.864665278217E-04 / DEPRECATED -'// + : ' Increment per pixel on axis 1' + ELSE IF( CMN_LINE .EQ. 191 ) THEN + CARD = 'CDELT2 = 1.866298716692E-04 / DEPRECATED -'// + : ' Increment per pixel on axis 2' + ELSE IF( CMN_LINE .EQ. 192 ) THEN + CARD = 'PC001001= 9.999878591881E-01 / DEPRECATED -'// + : ' Axis rotation matrix' + ELSE IF( CMN_LINE .EQ. 193 ) THEN + CARD = 'PC001002= 4.927623810613E-03 / DEPRECATED -'// + : ' Axis rotation matrix' + ELSE IF( CMN_LINE .EQ. 194 ) THEN + CARD = 'PC002001= -5.563056187788E-03 / DEPRECATED -'// + : ' Axis rotation matrix' + ELSE IF( CMN_LINE .EQ. 195 ) THEN + CARD = 'PC002002= 9.999845260832E-01 / DEPRECATED -'// + : ' Axis rotation matrix' + ELSE IF( CMN_LINE .EQ. 196 ) THEN + CARD = 'CROTA2 = 3.005532298491E-01 / DEPRECATED -'// + : ' rotation of axis 2' + ELSE IF( CMN_LINE .EQ. 197 ) THEN + CARD = 'EQUINOX = 2.000000E+03 / Julian refer'// + : 'ence frame equinox' + ELSE IF( CMN_LINE .EQ. 198 ) THEN + CARD = 'DATATYPE= ''INTEGER*2'' / Type of da'// + : 'ta' + ELSE IF( CMN_LINE .EQ. 199 ) THEN + CARD = 'DATUNITS= ''DENSITY '' / Units: tra'// + : 'nsmission, density or intensity' + ELSE IF( CMN_LINE .EQ. 200 ) THEN + CARD = 'XPIXELSZ= 9.997114974000E+00 / [microns] X '// + : 'pixel size' + ELSE IF( CMN_LINE .EQ. 201 ) THEN + CARD = 'YPIXELSZ= 1.000000000000E+01 / [microns] Y '// + : 'pixel size' + ELSE IF( CMN_LINE .EQ. 202 ) THEN + CARD = 'OBJCTRA = '' 0 0 0.000'' / Centre Rig'// + : 'ht Ascension (J2000)' + ELSE IF( CMN_LINE .EQ. 203 ) THEN + CARD = 'OBJCTDEC= ''-90 0 0.00'' / Centre Dec'// + : 'lination (J2000)' + ELSE IF( CMN_LINE .EQ. 204 ) THEN + CARD = 'OBJCTX = 1.636863183793E+04 / [pixels] Cen'// + : 'tre X on plate' + ELSE IF( CMN_LINE .EQ. 205 ) THEN + CARD = 'OBJCTY = 1.474083801939E+04 / [pixels] Cen'// + : 'tre Y on plate' + ELSE IF( CMN_LINE .EQ. 206 ) THEN + CARD = 'END' + REG_SOURCE = 0 + ELSE + REG_SOURCE = 0 + END IF + + +* Insert new header code here.... (create new header code using script +* "make_regtest" in the AST development archive). + ELSE + REG_SOURCE = 0 + STATUS = SAI__ERROR + WRITE(*,'(A,I2)') 'REG_SOURCE: No such test: ',CMN_FTEST + END IF + + CMN_LINE = CMN_LINE + 1 + + END + + diff --git a/ast/ast_tester/regression.out b/ast/ast_tester/regression.out new file mode 100644 index 0000000..7fcaa9c --- /dev/null +++ b/ast/ast_tester/regression.out @@ -0,0 +1,7630 @@ + Begin FitsChan # I/O channels to FITS files + Card = 1 # Index of current card +# Encod = "NATIVE" # Encoding system +# FitsDg = 15 # No. of digits for floating point values +# DfB1950 = 1 # Default to FK4 B1950 +# CdMat = 0 # Use PC matrix +# CarLin = 0 # Use full FITS-WCS CAR projections +# Iwc = 0 # Do not include an IWC Frame +# Warn = "Tnx Zpx BadCel BadMat BadCTYPE" # Warnings to be reported + Nm1 = "NAXIS" # FITS keyword name + Ty1 = "integer" # FITS keyword data type + Dt1 = 1 # FITS keyword value + Nm2 = "NAXIS1" # FITS keyword name + Ty2 = "integer" # FITS keyword data type + Dt2 = 100 # FITS keyword value + Nm3 = "CTYPE1" # FITS keyword name + Ty3 = "string" # FITS keyword data type + Dt3 = "fred" # FITS keyword value + Nm4 = "CDELT1" # FITS keyword name + Ty4 = "floating point" # FITS keyword data type + Dt4 = 0 # FITS keyword value + Nm5 = "CRPIX1" # FITS keyword name + Ty5 = "integer" # FITS keyword data type + Dt5 = 50 # FITS keyword value + Nm6 = "CUNIT1" # FITS keyword name + Ty6 = "string" # FITS keyword data type + Dt6 = "GHz" # FITS keyword value + Nm7 = " " # FITS keyword name + Ty7 = "comment" # FITS keyword data type + End FitsChan + Begin FrameSet # Set of inter-related coordinate systems +# Title = "IAU (1958) galactic coordinates; zenithal equal area projection" # Title of coordinate system +# Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain +# Epoch = 1950 # Besselian epoch of observation +# Lbl1 = "Galactic longitude" # Label for axis 1 +# Lbl2 = "Galactic latitude" # Label for axis 2 +# System = "GALACTIC" # Coordinate system type +# Uni1 = "degrees" # Units for axis 1 +# Uni2 = "degrees" # Units for axis 2 +# Bot2 = -1.5707963267949 # Lowest legal axis value +# Top2 = 1.5707963267949 # Highest legal axis value + IsA Frame # Coordinate system description + Nframe = 2 # Number of Frames in FrameSet + Base = 1 # Index of base Frame + Currnt = 2 # Index of current Frame + Lnk2 = 1 # Node 2 is derived from node 1 + Frm1 = # Frame number 1 + Begin Frame # Coordinate system description + Title = "Pixel Coordinates" # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "GRID" # Coordinate system domain +# Lbl1 = "Pixel axis 1" # Label for axis 1 +# Lbl2 = "Pixel axis 2" # Label for axis 2 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Pixel axis 1" # Axis Label + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Pixel axis 2" # Axis Label + End Axis + End Frame + Frm2 = # Frame number 2 + Begin SkyFrame # Description of celestial coordinate system + Ident = " " # Permanent Object identification string + IsA Object # AST Object +# Title = "IAU (1958) galactic coordinates; zenithal equal area projection" # Title of coordinate system + Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain + Epoch = 1950 # Besselian epoch of observation +# Lbl1 = "Galactic longitude" # Label for axis 1 +# Lbl2 = "Galactic latitude" # Label for axis 2 + System = "GALACTIC" # Coordinate system type +# Uni1 = "degrees" # Units for axis 1 +# Uni2 = "degrees" # Units for axis 2 +# Bot2 = -1.5707963267949 # Lowest legal axis value +# Top2 = 1.5707963267949 # Highest legal axis value + Ax1 = # Axis number 1 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + Ax2 = # Axis number 2 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + IsA Frame # Coordinate system description + Proj = "zenithal equal area" # Description of sky projection + SRefIs = "Ignored" # Not rotated (ref. pos. is ignored) + SRef1 = -2.61046557479594 # Ref. pos. l -149.5687 + SRef2 = -0.344845661720836 # Ref. pos. b -19.7582 + End SkyFrame + Map2 = # Mapping between nodes 1 and 2 + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -150.5 # Shift for axis 1 + Sft2 = -150.5 # Shift for axis 2 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = -0.020943951023932 # Forward matrix value + M1 = 0.020943951023932 # Forward matrix value + Form = "Diagonal" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WcsMap # FITS-WCS sky projection + Nin = 2 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Type = "ZEA" # Zenithal equal area projection + End WcsMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 0 # Polar longitude (rad.s) + End SphMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = 0.291480364581799 # Forward matrix value + M1 = 0.506505471460186 # AST version 4.3- 0 +PutCards Ncards = 7 +PutCards Card = 1 +PutCards Card = 8 +PutCards Ncards = 7 +PutCards Card = 1 + + + + + FITS test number 1 + ==================== + + + +AST_SHOW: + +REG_SINK: +SIMPLE = T / Written by IDL: 30-Jul-1997 05:35:42.00 +BITPIX = -32 / Bits per pixel. +NAXIS = 2 / Number of dimensions +NAXIS1 = 300 / Length of x axis. +NAXIS2 = 300 / Length of y axis. +COMMENT +COMMENT This file was produced by the SkyView survey analysis system from +COMMENT available astronomical surveys. The data are formatted +COMMENT as a simple two-dimensional FITS image with the same units as +COMMENT the orginal survey. A single ASCII table extension may be present +COMMENT which describes catalog objects found within the field of view. +COMMENT Copies of relevant copyright notices are included in this file. +COMMENT +COMMENT Questions should be directed to: +COMMENT +COMMENT scollick@skyview.gsfc.nasa.gov +COMMENT or +COMMENT mcglynn@grossc.gsfc.nasa.gov +COMMENT +COMMENT SkyView +COMMENT Code 668.1 +COMMENT Goddard Space Flight Center, Greenbelt, MD 20771 +COMMENT 301-286-7780 +COMMENT +COMMENT SkyView is supported by NASA ADP grant NAS 5-32068. +COMMENT +SURVEY = 'COBE DIRBE' +BUNITS = 'MJy/sr ' +ORIGIN = 'CDAC ' / Cosmology Data Analysis Center +TELESCOP= 'COBE ' / COsmic Background Explorer satellite +INSTRUME= 'DIRBE ' / COBE instrument [DIRBE, DMR, FIRAS] +PIXRESOL= 9 / Quad tree pixel resolution [6, 9] +DATE = '27/09/94' / FITS file creation date (dd/mm/yy) +DATE-MAP= '16/09/94' / Date of original file creation (dd/mm/yy) +COMMENT COBE specific keywords +DATE-BEG= '08/12/89' / date of initial data represented (dd/mm/yy) +DATE-END= '25/09/90' / date of final data represented (dd/mm/yy) +COMMENT +COMMENT THE COBE DIRBE map is a combination of the original ten +COMMENT band passes with the following wavelengths: +COMMENT Band 1 - 1.25 microns +COMMENT Band 2 - 2.2 microns +COMMENT Band 3 - 3.5 microns +COMMENT Band 4 - 4.9 microns +COMMENT Band 5 - 12 microns +COMMENT Band 6 - 25 microns +COMMENT Band 7 - 60 microns +COMMENT Band 8 - 100 microns +COMMENT Band 9 - 140 microns +COMMENT Band 10 - 240 microns +COMMENT + +Objects written: 1 + +Native Encoding: + +COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST +COMMENT AST WCS information in AST format AST +COMMENT AST See http://www.starlink.ac.uk/ast/ AST +COMMENT AST Beginning of AST data for FrameSet object AST +COMMENT AST ................................................................ AST +BEGAST_A= 'FrameSet' / Set of inter-related coordinate systems +NFRAME_A= 2 / Number of Frames in FrameSet +BASE_A = 1 / Index of base Frame +CURRNT_A= 2 / Index of current Frame +LNK2_A = 1 / Node 2 is derived from node 1 +FRM1_A = ' ' / Frame number 1 +BEGAST_B= 'Frame ' / Coordinate system description +TITLE_A = 'Pixel Coordinates' / Title of coordinate system +NAXES_A = 2 / Number of coordinate axes +DOMAIN_A= 'GRID ' / Coordinate system domain +AX1_A = ' ' / Axis number 1 +BEGAST_C= 'Axis ' / Coordinate axis +LABEL_A = 'Pixel axis 1' / Axis Label +ENDAST_A= 'Axis ' / End of object definition +AX2_A = ' ' / Axis number 2 +BEGAST_D= 'Axis ' / Coordinate axis +LABEL_B = 'Pixel axis 2' / Axis Label +ENDAST_B= 'Axis ' / End of object definition +ENDAST_C= 'Frame ' / End of object definition +FRM2_A = ' ' / Frame number 2 +BEGAST_E= 'SkyFrame' / Description of celestial coordinate system +IDENT_A = '" " ' / Permanent Object identification string +ISA_A = 'Object ' / AST Object +NAXES_B = 2 / Number of coordinate axes +EPOCH_A = 1950.0 / Besselian epoch of observation +SYSTEM_A= 'GALACTIC' / Coordinate system type +AX1_B = ' ' / Axis number 1 +BEGAST_F= 'SkyAxis ' / Celestial coordinate axis +ENDAST_D= 'SkyAxis ' / End of object definition +AX2_B = ' ' / Axis number 2 +BEGAST_G= 'SkyAxis ' / Celestial coordinate axis +ENDAST_E= 'SkyAxis ' / End of object definition +ISA_B = 'Frame ' / Coordinate system description +PROJ_A = 'zenithal equal area'/ Description of sky projection +SREFIS_A= 'Ignored ' / Not rotated (ref. pos. is ignored) +SREF1_A = -2.61046557479594 / Ref. pos. l -149.5687 +SREF2_A = -0.344845661720836 / Ref. pos. b -19.7582 +ENDAST_F= 'SkyFrame' / End of object definition +MAP2_A = ' ' / Mapping between nodes 1 and 2 +BEGAST_H= 'CmpMap ' / Compound Mapping +NIN_A = 2 / Number of input coordinates +ISSIMP_A= 1 / Mapping has been simplified +ISA_C = 'Mapping ' / Mapping between coordinate systems +MAPA_A = ' ' / First component Mapping +BEGAST_I= 'WinMap ' / Map one window on to another +NIN_B = 2 / Number of input coordinates +INVERT_A= 0 / Mapping not inverted +ISA_D = 'Mapping ' / Mapping between coordinate systems +SFT1_A = -150.5 / Shift for axis 1 +SFT2_A = -150.5 / Shift for axis 2 +ENDAST_G= 'WinMap ' / End of object definition +MAPB_A = ' ' / Second component Mapping +BEGAST_J= 'CmpMap ' / Compound Mapping +NIN_C = 2 / Number of input coordinates +ISA_E = 'Mapping ' / Mapping between coordinate systems +MAPA_B = ' ' / First component Mapping +BEGAST_K= 'MatrixMap' / Matrix transformation +NIN_D = 2 / Number of input coordinates +INVERT_B= 0 / Mapping not inverted +ISA_F = 'Mapping ' / Mapping between coordinate systems +M0_A = -0.020943951023932 / Forward matrix value +M1_A = 0.020943951023932 / Forward matrix value +FORM_A = 'Diagonal' / Matrix storage form +ENDAST_H= 'MatrixMap' / End of object definition +MAPB_B = ' ' / Second component Mapping +BEGAST_L= 'CmpMap ' / Compound Mapping +NIN_E = 2 / Number of input coordinates +ISA_G = 'Mapping ' / Mapping between coordinate systems +INVA_A = 1 / First Mapping used in inverse direction +MAPA_C = ' ' / First component Mapping +BEGAST_M= 'WcsMap ' / FITS-WCS sky projection +NIN_F = 2 / Number of input coordinates +INVERT_C= 1 / Mapping inverted +ISA_H = 'Mapping ' / Mapping between coordinate systems +TYPE_A = 'ZEA ' / Zenithal equal area projection +ENDAST_I= 'WcsMap ' / End of object definition +MAPB_C = ' ' / Second component Mapping +BEGAST_N= 'CmpMap ' / Compound Mapping +NIN_G = 2 / Number of input coordinates +ISA_I = 'Mapping ' / Mapping between coordinate systems +INVA_B = 1 / First Mapping used in inverse direction +MAPA_D = ' ' / First component Mapping +BEGAST_O= 'SphMap ' / Cartesian to Spherical mapping +NIN_H = 3 / Number of input coordinates +NOUT_A = 2 / Number of output coordinates +INVERT_D= 1 / Mapping inverted +ISA_J = 'Mapping ' / Mapping between coordinate systems +UNTRD_A = 1 / All input vectors have unit length +PLRLG_A = 0.0 / Polar longitude (rad.s) +ENDAST_J= 'SphMap ' / End of object definition +MAPB_D = ' ' / Second component Mapping +BEGAST_P= 'CmpMap ' / Compound Mapping +NIN_I = 3 / Number of input coordinates +NOUT_B = 2 / Number of output coordinates +ISA_K = 'Mapping ' / Mapping between coordinate systems +MAPA_E = ' ' / First component Mapping +BEGAST_Q= 'MatrixMap' / Matrix transformation +NIN_J = 3 / Number of input coordinates +INVERT_E= 0 / Mapping not inverted +ISA_L = 'Mapping ' / Mapping between coordinate systems +M0_B = 0.291480364581799 / Forward matrix value +M1_B = 0.506505471460186 / Forward matrix value +M2_A = -0.811474832908671 / Forward matrix value +M3_A = 0.171224898552328 / Forward matrix value +M4_A = -0.862236746712233 / Forward matrix value +M5_A = -0.476686298035564 / Forward matrix value +M6_A = -0.941127638091139 / Forward matrix value +M7_A = 0.0 / Forward matrix value +M8_A = -0.338051429254475 / Forward matrix value +FORM_B = 'Full ' / Matrix storage form +ENDAST_K= 'MatrixMap' / End of object definition +MAPB_E = ' ' / Second component Mapping +BEGAST_R= 'SphMap ' / Cartesian to Spherical mapping +NIN_K = 3 / Number of input coordinates +NOUT_C = 2 / Number of output coordinates +INVERT_F= 0 / Mapping not inverted +ISA_M = 'Mapping ' / Mapping between coordinate systems +UNTRD_B = 1 / All input vectors have unit length +PLRLG_B = -2.61046557479594 / Polar longitude (rad.s) +ENDAST_L= 'SphMap ' / End of object definition +ENDAST_M= 'CmpMap ' / End of object definition +ENDAST_N= 'CmpMap ' / End of object definition +ENDAST_O= 'CmpMap ' / End of object definition +ENDAST_P= 'CmpMap ' / End of object definition +ENDAST_Q= 'CmpMap ' / End of object definition +ENDAST_R= 'FrameSet' / End of object definition +COMMENT AST ................................................................ AST +COMMENT AST End of AST data for FrameSet object AST +COMMENT AST ---------------------------------------------------------------- AST + +ATTRIBUTES: + Colour(axis1) : 1 + Font(Stri) : 1 + Nout : 1 + Class : 4 + Tol : 0.100000E-01 + Gap(1) : 1.04720 + Border : 0 + Invert : 0 + TextLabGap : 0.100000E-01 + Nin : 2 + Current : 3 + Base : 1 + Nobject : 1 + RefCOUNT : 1 + +AST_GRID: +REG_LINE: 15 + 25.4 -29.7 + 31.0 -16.7 + 35.7 -2.18 + 39.8 13.5 + 43.0 30.1 + 45.5 47.3 + 47.2 64.8 + 48.1 82.5 + 48.2 99.9 + 47.3 117. + 45.5 133. + 42.5 149. + 38.4 163. + 32.8 175. + 25.4 185. +REG_LINE: 15 + 25.4 -29.7 + 20.1 -16.6 + 15.4 -2.03 + 11.5 13.7 + 8.35 30.3 + 5.92 47.5 + 4.25 65.0 + 3.39 82.6 + 3.35 100. + 4.19 117. + 5.99 133. + 8.83 149. + 12.9 163. + 18.3 175. + 25.4 185. +REG_LINE: 119 + 25.4 -29.7 + 24.6 -29.7 + 23.8 -29.7 + 22.9 -29.6 + 22.1 -29.5 + 21.3 -29.5 + 20.4 -29.3 + 19.6 -29.2 + 18.8 -29.0 + 17.9 -28.9 + 17.1 -28.7 + 16.3 -28.5 + 15.5 -28.2 + 14.6 -28.0 + 13.8 -27.7 + 13.0 -27.4 + 12.2 -27.1 + 11.4 -26.7 + 10.6 -26.4 + 9.74 -26.0 + 8.93 -25.6 + 8.12 -25.2 + 7.32 -24.8 + 6.52 -24.3 + 5.73 -23.9 + 4.93 -23.4 + 4.14 -22.9 + 3.35 -22.3 + 2.57 -21.8 + 1.79 -21.2 + 1.02 -20.6 + .247 -20.0 + -.520 -19.4 + -1.28 -18.8 + -2.04 -18.1 + -2.79 -17.4 + -3.54 -16.7 + -4.29 -16.0 + -5.02 -15.3 + -5.76 -14.5 + -6.49 -13.7 + -7.21 -12.9 + -7.92 -12.1 + -17.3 1.12 + -25.1 17.7 + -31.1 37.2 + -34.6 59.1 + -35.4 82.8 + -33.1 107. + -32.8 109. + -32.5 111. + -32.2 112. + -31.9 114. + -31.5 116. + -31.1 117. + -30.7 119. + -30.3 121. + -29.9 123. + -29.4 124. + -28.9 126. + -28.5 128. + -27.9 129. + -27.4 131. + -26.9 132. + -26.3 134. + -25.7 136. + -25.2 137. + -24.5 139. + -23.9 140. + -23.3 142. + -22.6 143. + -21.9 145. + -21.2 146. + -20.5 148. + -19.8 149. + -19.0 151. + -18.2 152. + -17.5 154. + -16.7 155. + -15.8 156. + -15.0 158. + -14.2 159. + -13.3 160. + -12.4 162. + -11.5 163. + -10.6 164. + -9.69 165. + -8.75 166. + -7.80 167. + -6.83 168. + -5.85 170. + -4.86 171. + -3.85 172. + -2.83 172. + -1.80 173. + -.761 174. + .293 175. + 1.36 176. + 2.43 177. + 3.52 178. + 4.61 178. + 5.72 179. + 6.83 180. + 7.95 180. + 9.08 181. + 10.2 181. + 11.4 182. + 12.5 182. + 13.7 183. + 14.8 183. + 16.0 184. + 17.2 184. + 18.3 184. + 19.5 184. + 20.7 185. + 21.9 185. + 23.1 185. + 24.3 185. + 25.4 185. +REG_LINE: 171 + 25.4 -29.7 + 19.1 -40.9 + 11.9 -49.9 + 11.3 -50.4 + 10.8 -50.9 + 10.2 -51.4 + 9.62 -51.9 + 9.04 -52.4 + 8.46 -52.8 + 7.87 -53.3 + 7.28 -53.7 + 6.68 -54.1 + 6.07 -54.5 + 5.46 -54.9 + 4.84 -55.2 + 4.21 -55.6 + 3.58 -55.9 + 2.95 -56.2 + 2.30 -56.5 + 1.65 -56.7 + .990 -56.9 + .325 -57.2 + -.348 -57.3 + -1.03 -57.5 + -1.71 -57.7 + -2.41 -57.8 + -3.11 -57.9 + -3.82 -57.9 + -4.54 -58.0 + -5.27 -58.0 + -6.00 -58.0 + -6.74 -58.0 + -7.50 -57.9 + -8.26 -57.8 + -9.03 -57.7 + -9.80 -57.5 + -10.6 -57.3 + -11.4 -57.1 + -12.2 -56.8 + -13.0 -56.5 + -13.8 -56.2 + -14.7 -55.8 + -15.5 -55.4 + -16.4 -55.0 + -17.2 -54.5 + -18.1 -53.9 + -19.0 -53.4 + -19.9 -52.7 + -20.8 -52.0 + -21.7 -51.3 + -22.6 -50.5 + -23.6 -49.7 + -24.5 -48.8 + -25.5 -47.8 + -26.4 -46.8 + -27.4 -45.7 + -28.4 -44.5 + -29.4 -43.3 + -30.4 -42.0 + -31.4 -40.6 + -32.4 -39.1 + -33.5 -37.6 + -34.5 -36.0 + -35.5 -34.3 + -36.6 -32.5 + -37.6 -30.5 + -38.7 -28.5 + -39.7 -26.4 + -40.8 -24.2 + -41.8 -21.9 + -42.8 -19.5 + -43.9 -16.9 + -44.9 -14.2 + -45.9 -11.4 + -46.9 -8.53 + -47.8 -5.48 + -48.8 -2.30 + -49.7 1.01 + -50.6 4.45 + -51.4 8.02 + -52.2 11.7 + -53.0 15.6 + -53.7 19.5 + -54.4 23.6 + -55.0 27.8 + -55.5 32.2 + -56.0 36.6 + -56.4 41.1 + -56.7 45.8 + -56.9 50.5 + -57.1 55.3 + -57.1 60.1 + -57.1 65.1 + -56.9 70.0 + -56.7 74.9 + -56.4 79.9 + -55.9 84.9 + -55.4 89.8 + -54.8 94.7 + -54.1 99.5 + -53.3 104. + -52.4 109. + -51.4 114. + -50.3 118. + -49.2 122. + -48.0 127. + -46.7 131. + -45.4 135. + -44.1 138. + -42.7 142. + -41.2 146. + -39.8 149. + -38.3 152. + -36.8 155. + -35.2 158. + -33.7 161. + -32.2 164. + -30.6 166. + -29.1 168. + -27.5 171. + -26.0 173. + -24.5 175. + -23.0 176. + -21.5 178. + -20.0 180. + -18.5 181. + -17.1 182. + -15.7 184. + -14.3 185. + -12.9 186. + -11.5 187. + -10.2 188. + -8.92 188. + -7.64 189. + -6.38 190. + -5.15 190. + -3.94 191. + -2.75 191. + -1.59 192. + -.448 192. + .669 193. + 1.76 193. + 2.83 193. + 3.88 193. + 4.91 193. + 5.92 193. + 6.91 193. + 7.88 193. + 8.82 193. + 9.75 193. + 10.7 193. + 11.6 193. + 12.4 193. + 13.3 192. + 14.1 192. + 14.9 192. + 15.7 192. + 16.5 191. + 17.3 191. + 18.1 190. + 18.8 190. + 19.5 190. + 20.2 189. + 20.9 189. + 21.6 188. + 22.3 188. + 22.9 187. + 23.6 187. + 24.2 186. + 24.8 185. + 25.4 185. +REG_LINE: 171 + 25.4 -29.7 + 31.6 -41.1 + 38.7 -50.2 + 39.2 -50.7 + 39.8 -51.2 + 40.3 -51.8 + 40.9 -52.3 + 41.5 -52.8 + 42.0 -53.2 + 42.6 -53.7 + 43.2 -54.1 + 43.8 -54.6 + 44.4 -55.0 + 45.0 -55.4 + 45.6 -55.7 + 46.2 -56.1 + 46.8 -56.4 + 47.4 -56.7 + 48.1 -57.0 + 48.7 -57.3 + 49.4 -57.6 + 50.0 -57.8 + 50.7 -58.0 + 51.3 -58.2 + 52.0 -58.4 + 52.7 -58.5 + 53.4 -58.6 + 54.1 -58.7 + 54.8 -58.8 + 55.5 -58.8 + 56.2 -58.9 + 57.0 -58.8 + 57.7 -58.8 + 58.5 -58.7 + 59.2 -58.6 + 60.0 -58.5 + 60.8 -58.3 + 61.6 -58.2 + 62.4 -57.9 + 63.2 -57.7 + 64.0 -57.4 + 64.8 -57.0 + 65.6 -56.6 + 66.5 -56.2 + 67.3 -55.8 + 68.2 -55.2 + 69.1 -54.7 + 70.0 -54.1 + 70.9 -53.4 + 71.8 -52.7 + 72.7 -52.0 + 73.7 -51.2 + 74.6 -50.3 + 75.6 -49.4 + 76.6 -48.4 + 77.5 -47.3 + 78.5 -46.2 + 79.5 -45.0 + 80.5 -43.7 + 81.6 -42.4 + 82.6 -41.0 + 83.6 -39.5 + 84.7 -37.9 + 85.7 -36.2 + 86.8 -34.4 + 87.8 -32.5 + 88.9 -30.5 + 90.0 -28.5 + 91.1 -26.3 + 92.1 -23.9 + 93.2 -21.5 + 94.2 -19.0 + 95.3 -16.3 + 96.3 -13.5 + 97.3 -10.6 + 98.4 -7.51 + 99.3 -4.31 + 100. -.976 + 101. 2.50 + 102. 6.12 + 103. 9.88 + 104. 13.8 + 105. 17.8 + 105. 22.0 + 106. 26.3 + 106. 30.7 + 107. 35.2 + 107. 39.9 + 108. 44.7 + 108. 49.5 + 108. 54.4 + 108. 59.4 + 108. 64.5 + 108. 69.5 + 108. 74.6 + 107. 79.7 + 107. 84.8 + 106. 89.9 + 106. 94.9 + 105. 99.9 + 104. 105. + 103. 110. + 102. 114. + 101. 119. + 100. 123. + 98.8 128. + 97.5 132. + 96.1 136. + 94.7 140. + 93.3 143. + 91.8 147. + 90.3 150. + 88.8 154. + 87.2 157. + 85.7 159. + 84.1 162. + 82.5 165. + 80.9 167. + 79.4 170. + 77.8 172. + 76.3 174. + 74.7 176. + 73.2 177. + 71.7 179. + 70.2 181. + 68.8 182. + 67.3 183. + 65.9 185. + 64.5 186. + 63.2 187. + 61.8 188. + 60.5 188. + 59.2 189. + 57.9 190. + 56.7 191. + 55.5 191. + 54.3 192. + 53.1 192. + 51.9 192. + 50.8 193. + 49.7 193. + 48.6 193. + 47.6 193. + 46.5 193. + 45.5 194. + 44.5 194. + 43.6 194. + 42.6 194. + 41.7 193. + 40.8 193. + 39.9 193. + 39.0 193. + 38.2 193. + 37.3 193. + 36.5 192. + 35.7 192. + 34.9 192. + 34.2 191. + 33.4 191. + 32.7 191. + 31.9 190. + 31.2 190. + 30.5 189. + 29.8 189. + 29.2 188. + 28.5 188. + 27.9 187. + 27.3 187. + 26.6 186. + 26.0 185. + 25.4 185. +REG_LINE: 119 + 25.4 -29.7 + 26.3 -29.7 + 27.1 -29.7 + 28.0 -29.7 + 28.8 -29.6 + 29.6 -29.5 + 30.5 -29.4 + 31.3 -29.3 + 32.1 -29.2 + 33.0 -29.0 + 33.8 -28.8 + 34.6 -28.6 + 35.4 -28.4 + 36.3 -28.2 + 37.1 -27.9 + 37.9 -27.6 + 38.7 -27.3 + 39.5 -27.0 + 40.4 -26.7 + 41.2 -26.3 + 42.0 -25.9 + 42.8 -25.5 + 43.6 -25.1 + 44.4 -24.7 + 45.2 -24.2 + 46.0 -23.7 + 46.8 -23.2 + 47.6 -22.7 + 48.4 -22.2 + 49.2 -21.6 + 49.9 -21.1 + 50.7 -20.5 + 51.5 -19.8 + 52.2 -19.2 + 53.0 -18.6 + 53.8 -17.9 + 54.5 -17.2 + 55.3 -16.5 + 56.0 -15.8 + 56.8 -15.0 + 57.5 -14.3 + 58.2 -13.5 + 58.9 -12.7 + 68.4 .462 + 76.3 17.0 + 82.3 36.5 + 85.9 58.6 + 86.8 82.4 + 84.5 107. + 84.2 109. + 83.9 110. + 83.5 112. + 83.2 114. + 82.8 116. + 82.4 117. + 82.0 119. + 81.6 121. + 81.2 122. + 80.7 124. + 80.2 126. + 79.7 128. + 79.2 129. + 78.7 131. + 78.1 132. + 77.6 134. + 77.0 136. + 76.4 137. + 75.8 139. + 75.1 140. + 74.5 142. + 73.8 144. + 73.1 145. + 72.4 147. + 71.7 148. + 70.9 150. + 70.2 151. + 69.4 152. + 68.6 154. + 67.8 155. + 67.0 157. + 66.1 158. + 65.3 159. + 64.4 160. + 63.5 162. + 62.6 163. + 61.7 164. + 60.8 165. + 59.8 166. + 58.8 168. + 57.9 169. + 56.9 170. + 55.9 171. + 54.9 172. + 53.8 173. + 52.8 174. + 51.8 175. + 50.7 175. + 49.6 176. + 48.5 177. + 47.4 178. + 46.3 178. + 45.2 179. + 44.1 180. + 43.0 180. + 41.8 181. + 40.7 182. + 39.6 182. + 38.4 182. + 37.2 183. + 36.1 183. + 34.9 184. + 33.7 184. + 32.6 184. + 31.4 184. + 30.2 185. + 29.0 185. + 27.8 185. + 26.6 185. + 25.4 185. +REG_LINE: 15 + 25.4 -29.7 + 31.0 -16.7 + 35.7 -2.18 + 39.8 13.5 + 43.0 30.1 + 45.5 47.3 + 47.2 64.8 + 48.1 82.5 + 48.2 99.9 + 47.3 117. + 45.5 133. + 42.5 149. + 38.4 163. + 32.8 175. + 25.4 185. +REG_LINE: 197 + 52.0 -19.4 + 51.8 -18.1 + 51.5 -16.9 + 51.2 -15.6 + 50.9 -14.4 + 50.5 -13.2 + 50.1 -12.1 + 49.6 -11.0 + 49.1 -9.89 + 48.6 -8.84 + 48.0 -7.82 + 47.5 -6.84 + 46.8 -5.89 + 46.2 -4.97 + 45.5 -4.09 + 44.8 -3.25 + 44.1 -2.44 + 43.4 -1.67 + 42.6 -.931 + 41.8 -.233 + 41.0 .428 + 40.2 1.05 + 39.3 1.64 + 38.5 2.19 + 37.6 2.70 + 36.7 3.17 + 35.8 3.61 + 34.9 4.01 + 34.0 4.37 + 33.0 4.69 + 32.1 4.97 + 31.2 5.22 + 30.2 5.42 + 29.2 5.59 + 28.3 5.72 + 27.3 5.82 + 26.3 5.87 + 25.4 5.89 + 24.4 5.87 + 23.4 5.81 + 22.5 5.71 + 21.5 5.57 + 20.5 5.40 + 19.6 5.18 + 18.6 4.93 + 17.7 4.64 + 16.8 4.31 + 15.9 3.95 + 14.9 3.55 + 14.0 3.10 + 13.2 2.63 + 12.3 2.11 + 11.4 1.55 + 10.6 .962 + 9.77 .333 + 8.97 -.334 + 8.18 -1.04 + 7.42 -1.78 + 6.68 -2.56 + 5.96 -3.37 + 5.27 -4.22 + 4.60 -5.10 + 3.96 -6.02 + 3.35 -6.98 + 2.77 -7.97 + 2.22 -8.99 + 1.70 -10.1 + 1.22 -11.1 + .767 -12.3 + .353 -13.4 + -0.240E-01 -14.6 + -.362 -15.8 + -.660 -17.1 + -.917 -18.3 + -1.13 -19.6 + -1.30 -20.9 + -1.42 -22.3 + -1.50 -23.6 + -1.53 -25.0 + -1.51 -26.4 + -1.44 -27.8 + -1.32 -29.3 + -1.15 -30.7 + -.921 -32.2 + -.640 -33.6 + -.302 -35.1 + 0.909E-01 -36.5 + .541 -37.9 + 1.05 -39.4 + 1.61 -40.8 + 2.24 -42.2 + 2.92 -43.6 + 3.65 -44.9 + 4.45 -46.3 + 5.30 -47.5 + 6.20 -48.8 + 7.16 -50.0 + 8.17 -51.1 + 9.23 -52.2 + 10.3 -53.3 + 11.5 -54.2 + 12.7 -55.1 + 13.9 -55.9 + 15.2 -56.7 + 16.5 -57.3 + 17.9 -57.9 + 19.2 -58.4 + 20.6 -58.7 + 22.0 -59.0 + 23.4 -59.2 + 24.8 -59.3 + 26.3 -59.3 + 27.7 -59.2 + 29.1 -59.0 + 30.5 -58.7 + 31.9 -58.3 + 33.2 -57.8 + 34.6 -57.2 + 35.9 -56.6 + 37.1 -55.8 + 38.4 -55.0 + 39.6 -54.1 + 40.7 -53.1 + 41.8 -52.1 + 42.9 -51.0 + 43.9 -49.8 + 44.8 -48.6 + 45.7 -47.4 + 46.6 -46.1 + 47.4 -44.7 + 48.1 -43.4 + 48.8 -42.0 + 49.4 -40.6 + 49.9 -39.2 + 50.4 -37.7 + 50.9 -36.3 + 51.2 -34.8 + 51.6 -33.4 + 51.9 -31.9 + 52.1 -30.5 + 52.2 -29.1 + 52.3 -27.6 + 52.4 -26.2 + 52.4 -24.8 + 52.4 -23.4 + 52.3 -22.1 + 52.2 -20.7 + 52.0 -19.4 + 51.8 -18.1 + 51.5 -16.9 + 51.2 -15.6 + 50.9 -14.4 + 50.5 -13.2 + 50.1 -12.1 + 49.6 -11.0 + 49.1 -9.89 + 48.6 -8.84 + 48.0 -7.82 + 47.5 -6.84 + 46.8 -5.89 + 46.2 -4.97 + 45.5 -4.09 + 44.8 -3.25 + 44.1 -2.44 + 43.4 -1.67 + 42.6 -.931 + 41.8 -.233 + 41.0 .428 + 40.2 1.05 + 39.3 1.64 + 38.5 2.19 + 37.6 2.70 + 36.7 3.17 + 35.8 3.61 + 34.9 4.01 + 34.0 4.37 + 33.0 4.69 + 32.1 4.97 + 31.2 5.22 + 30.2 5.42 + 29.2 5.59 + 28.3 5.72 + 27.3 5.82 + 26.3 5.87 + 25.4 5.89 + 24.4 5.87 + 23.4 5.81 + 22.5 5.71 + 21.5 5.57 + 20.5 5.40 + 19.6 5.18 + 18.6 4.93 + 17.7 4.64 + 16.8 4.31 + 15.9 3.95 + 14.9 3.55 + 14.0 3.10 +REG_LINE: 197 + 73.9 11.1 + 73.1 13.1 + 72.3 14.9 + 71.5 16.8 + 70.6 18.5 + 69.7 20.2 + 68.7 21.8 + 67.7 23.3 + 66.6 24.8 + 65.5 26.3 + 64.4 27.7 + 63.2 29.0 + 62.0 30.2 + 60.7 31.4 + 59.5 32.6 + 58.2 33.7 + 56.9 34.7 + 55.5 35.7 + 54.2 36.7 + 52.8 37.5 + 51.4 38.4 + 49.9 39.2 + 48.5 39.9 + 47.0 40.6 + 45.5 41.2 + 44.0 41.8 + 42.5 42.3 + 41.0 42.8 + 39.5 43.3 + 37.9 43.7 + 36.4 44.0 + 34.8 44.3 + 33.2 44.6 + 31.7 44.8 + 30.1 44.9 + 28.5 45.0 + 26.9 45.1 + 25.3 45.1 + 23.7 45.1 + 22.2 45.0 + 20.6 44.9 + 19.0 44.7 + 17.4 44.5 + 15.9 44.3 + 14.3 44.0 + 12.8 43.6 + 11.2 43.2 + 9.68 42.8 + 8.15 42.3 + 6.65 41.7 + 5.15 41.1 + 3.67 40.5 + 2.20 39.8 + .758 39.0 + -.671 38.2 + -2.08 37.4 + -3.47 36.5 + -4.83 35.6 + -6.17 34.6 + -7.49 33.5 + -8.78 32.4 + -10.0 31.3 + -11.3 30.0 + -12.5 28.8 + -13.6 27.5 + -14.8 26.1 + -15.9 24.6 + -16.9 23.1 + -17.9 21.6 + -18.9 19.9 + -19.8 18.2 + -20.7 16.5 + -21.6 14.7 + -22.3 12.8 + -23.1 10.8 + -23.7 8.81 + -24.4 6.71 + -24.9 4.55 + -25.4 2.30 + -25.8 -0.953E-02 + -26.1 -2.40 + -26.4 -4.86 + -26.6 -7.41 + -26.7 -10.0 + -26.7 -12.7 + -26.6 -15.5 + -26.4 -18.3 + -26.0 -21.3 + -25.6 -24.2 + -25.0 -27.3 + -24.4 -30.4 + -23.5 -33.6 + -22.6 -36.8 + -21.4 -40.1 + -20.2 -43.4 + -18.7 -46.7 + -17.1 -49.9 + -15.3 -53.2 + -13.3 -56.4 + -11.1 -59.6 + -8.73 -62.7 + -6.17 -65.6 + -3.42 -68.3 + -.492 -70.9 + 2.61 -73.3 + 5.87 -75.3 + 9.27 -77.1 + 12.8 -78.6 + 16.4 -79.7 + 20.1 -80.5 + 23.8 -80.8 + 27.6 -80.8 + 31.3 -80.4 + 35.0 -79.6 + 38.6 -78.4 + 42.1 -76.9 + 45.5 -75.1 + 48.8 -72.9 + 51.8 -70.6 + 54.7 -67.9 + 57.5 -65.2 + 60.0 -62.2 + 62.3 -59.1 + 64.5 -56.0 + 66.4 -52.7 + 68.2 -49.5 + 69.8 -46.2 + 71.2 -42.9 + 72.5 -39.6 + 73.6 -36.3 + 74.6 -33.1 + 75.4 -30.0 + 76.0 -26.8 + 76.6 -23.8 + 77.0 -20.8 + 77.3 -17.9 + 77.5 -15.1 + 77.6 -12.3 + 77.5 -9.63 + 77.4 -7.03 + 77.3 -4.50 + 77.0 -2.04 + 76.6 .337 + 76.2 2.64 + 75.7 4.87 + 75.2 7.03 + 74.5 9.11 + 73.9 11.1 + 73.1 13.1 + 72.3 14.9 + 71.5 16.8 + 70.6 18.5 + 69.7 20.2 + 68.7 21.8 + 67.7 23.3 + 66.6 24.8 + 65.5 26.3 + 64.4 27.7 + 63.2 29.0 + 62.0 30.2 + 60.7 31.4 + 59.5 32.6 + 58.2 33.7 + 56.9 34.7 + 55.5 35.7 + 54.2 36.7 + 52.8 37.5 + 51.4 38.4 + 49.9 39.2 + 48.5 39.9 + 47.0 40.6 + 45.5 41.2 + 44.0 41.8 + 42.5 42.3 + 41.0 42.8 + 39.5 43.3 + 37.9 43.7 + 36.4 44.0 + 34.8 44.3 + 33.2 44.6 + 31.7 44.8 + 30.1 44.9 + 28.5 45.0 + 26.9 45.1 + 25.3 45.1 + 23.7 45.1 + 22.2 45.0 + 20.6 44.9 + 19.0 44.7 + 17.4 44.5 + 15.9 44.3 + 14.3 44.0 + 12.8 43.6 + 11.2 43.2 + 9.68 42.8 + 8.15 42.3 + 6.65 41.7 +REG_LINE: 197 + 85.9 58.6 + 84.7 60.1 + 83.5 61.6 + 82.2 63.1 + 80.8 64.4 + 79.5 65.8 + 78.1 67.0 + 76.7 68.3 + 75.2 69.4 + 73.7 70.6 + 72.2 71.6 + 70.7 72.7 + 69.2 73.6 + 67.6 74.6 + 66.0 75.5 + 64.4 76.3 + 62.7 77.2 + 61.1 77.9 + 59.4 78.7 + 57.7 79.3 + 56.0 80.0 + 54.3 80.6 + 52.5 81.2 + 50.8 81.7 + 49.0 82.2 + 47.2 82.7 + 45.5 83.1 + 43.7 83.5 + 41.8 83.8 + 40.0 84.1 + 38.2 84.4 + 36.4 84.7 + 34.5 84.9 + 32.7 85.0 + 30.9 85.1 + 29.0 85.2 + 27.2 85.3 + 25.3 85.3 + 23.5 85.3 + 21.6 85.2 + 19.8 85.1 + 17.9 85.0 + 16.1 84.8 + 14.2 84.6 + 12.4 84.4 + 10.6 84.1 + 8.78 83.8 + 6.97 83.4 + 5.17 83.0 + 3.39 82.6 + 1.61 82.2 + -.156 81.6 + -1.91 81.1 + -3.65 80.5 + -5.37 79.9 + -7.08 79.2 + -8.77 78.6 + -10.4 77.8 + -12.1 77.0 + -13.7 76.2 + -15.3 75.4 + -16.9 74.4 + -18.5 73.5 + -20.1 72.5 + -21.6 71.5 + -23.1 70.4 + -24.5 69.3 + -26.0 68.1 + -27.4 66.9 + -28.8 65.6 + -30.1 64.2 + -31.5 62.9 + -32.8 61.4 + -34.0 59.9 + -35.2 58.4 + -36.4 56.7 + -37.6 55.0 + -38.7 53.3 + -39.7 51.4 + -40.7 49.5 + -41.7 47.5 + -42.6 45.4 + -43.5 43.2 + -44.3 40.9 + -45.0 38.5 + -45.7 36.0 + -46.4 33.4 + -46.9 30.6 + -47.4 27.6 + -47.7 24.5 + -48.0 21.3 + -48.2 17.8 + -48.3 14.1 + -48.2 10.1 + -47.9 5.89 + -47.5 1.37 + -46.9 -3.46 + -46.0 -8.66 + -44.9 -14.2 + -43.4 -20.2 + -41.5 -26.7 + -39.1 -33.6 + -36.1 -40.9 + -32.4 -48.6 + -27.8 -56.6 + -22.3 -64.7 + -15.8 -72.6 + -8.06 -79.8 + .764 -86.0 + 10.5 -90.4 + 20.9 -92.6 + 31.5 -92.5 + 41.9 -89.9 + 51.5 -85.2 + 60.2 -78.8 + 67.7 -71.4 + 74.1 -63.5 + 79.5 -55.4 + 83.9 -47.5 + 87.5 -39.8 + 90.4 -32.5 + 92.7 -25.7 + 94.5 -19.3 + 96.0 -13.4 + 97.1 -7.87 + 97.9 -2.73 + 98.5 2.06 + 98.9 6.53 + 99.1 10.7 + 99.2 14.6 + 99.1 18.3 + 98.9 21.7 + 98.6 25.0 + 98.2 28.1 + 97.7 31.0 + 97.2 33.8 + 96.5 36.4 + 95.8 38.9 + 95.1 41.3 + 94.3 43.6 + 93.4 45.7 + 92.5 47.8 + 91.5 49.8 + 90.5 51.7 + 89.4 53.5 + 88.3 55.3 + 87.1 57.0 + 85.9 58.6 + 84.7 60.1 + 83.5 61.6 + 82.2 63.1 + 80.8 64.4 + 79.5 65.8 + 78.1 67.0 + 76.7 68.3 + 75.2 69.4 + 73.7 70.6 + 72.2 71.6 + 70.7 72.7 + 69.2 73.6 + 67.6 74.6 + 66.0 75.5 + 64.4 76.3 + 62.7 77.2 + 61.1 77.9 + 59.4 78.7 + 57.7 79.3 + 56.0 80.0 + 54.3 80.6 + 52.5 81.2 + 50.8 81.7 + 49.0 82.2 + 47.2 82.7 + 45.5 83.1 + 43.7 83.5 + 41.8 83.8 + 40.0 84.1 + 38.2 84.4 + 36.4 84.7 + 34.5 84.9 + 32.7 85.0 + 30.9 85.1 + 29.0 85.2 + 27.2 85.3 + 25.3 85.3 + 23.5 85.3 + 21.6 85.2 + 19.8 85.1 + 17.9 85.0 + 16.1 84.8 + 14.2 84.6 + 12.4 84.4 + 10.6 84.1 + 8.78 83.8 + 6.97 83.4 + 5.17 83.0 + 3.39 82.6 +REG_LINE: 145 + 82.9 115. + 63.7 120. + 40.9 123. + 16.6 123. + -6.79 121. + -27.2 116. + -28.5 116. + -29.8 116. + -31.0 115. + -32.2 115. + -33.4 115. + -34.5 114. + -35.7 114. + -36.7 114. + -37.8 114. + -38.8 113. + -39.8 113. + -40.7 113. + -41.6 113. + -42.5 113. + -43.3 113. + -44.1 113. + -44.8 113. + -45.5 114. + -46.1 114. + -46.7 114. + -47.2 115. + -47.7 116. + -48.1 117. + -48.4 118. + -48.6 119. + -48.7 121. + -48.6 123. + -48.4 125. + -48.0 128. + -47.4 132. + -46.4 136. + -45.0 141. + -43.0 147. + -40.2 154. + -36.3 163. + -30.8 173. + -23.1 184. + -12.5 196. + -11.6 197. + -10.7 198. + -9.78 198. + -8.85 199. + -7.90 200. + -6.94 201. + -5.96 201. + -4.96 202. + -3.94 203. + -2.91 203. + -1.87 204. + -.804 205. + .274 205. + 1.37 206. + 2.47 207. + 3.60 207. + 4.73 208. + 5.88 208. + 7.04 209. + 8.21 209. + 9.40 209. + 10.6 210. + 11.8 210. + 13.0 211. + 14.2 211. + 15.5 211. + 16.7 211. + 17.9 212. + 19.2 212. + 20.4 212. + 21.7 212. + 23.0 212. + 24.2 212. + 25.5 212. + 26.8 212. + 28.0 212. + 29.3 212. + 30.5 212. + 31.8 212. + 33.0 212. + 34.3 211. + 35.5 211. + 36.7 211. + 38.0 211. + 39.2 210. + 40.4 210. + 41.6 209. + 42.8 209. + 43.9 209. + 45.1 208. + 46.2 208. + 47.4 207. + 48.5 206. + 49.6 206. + 50.7 205. + 51.8 205. + 65.1 194. + 75.3 183. + 82.6 171. + 87.9 162. + 91.6 153. + 94.3 146. + 96.1 140. + 97.5 135. + 98.4 131. + 99.0 128. + 99.3 125. + 99.5 122. + 99.5 121. + 99.4 119. + 99.2 118. + 98.9 116. + 98.5 116. + 98.1 115. + 97.5 114. + 97.0 114. + 96.3 114. + 95.6 113. + 94.9 113. + 94.1 113. + 93.3 113. + 92.4 113. + 91.5 113. + 90.5 113. + 89.5 113. + 88.5 114. + 87.5 114. + 86.4 114. + 85.3 114. + 84.1 115. + 82.9 115. + 81.7 115. + 80.5 116. + 79.2 116. + 77.9 116. + 76.6 117. + 75.3 117. + 73.9 117. + 52.6 122. + 28.8 124. + 4.68 123. +REG_LINE: 145 + 61.4 165. + 60.9 164. + 60.3 163. + 59.7 163. + 59.0 163. + 58.4 162. + 57.6 162. + 56.9 161. + 56.1 161. + 55.3 161. + 54.5 160. + 53.6 160. + 52.7 160. + 51.8 160. + 50.9 159. + 49.9 159. + 48.9 159. + 47.9 159. + 46.9 159. + 45.9 159. + 44.8 158. + 43.8 158. + 42.7 158. + 41.6 158. + 40.5 158. + 39.4 158. + 38.2 158. + 37.1 158. + 35.9 158. + 19.4 158. + 3.82 159. + 2.81 159. + 1.81 159. + .836 159. + -.119 159. + -1.05 160. + -1.96 160. + -2.85 160. + -3.71 160. + -4.54 161. + -5.35 161. + -6.12 161. + -6.86 162. + -7.57 162. + -8.25 163. + -8.88 163. + -9.48 164. + -10.0 164. + -10.6 165. + -11.0 165. + -11.5 166. + -11.8 167. + -12.2 167. + -12.4 168. + -12.6 169. + -12.8 170. + -12.9 171. + -12.9 172. + -12.9 173. + -12.7 174. + -12.5 175. + -12.3 176. + -11.9 177. + -11.4 178. + -10.9 180. + -10.2 181. + -9.43 183. + -8.55 184. + -7.56 186. + -6.44 187. + -5.21 189. + -3.85 190. + -2.36 192. + -.742 193. + 1.01 195. + 2.88 196. + 4.88 197. + 7.00 199. + 9.23 200. + 11.6 201. + 14.0 202. + 16.5 202. + 19.1 203. + 21.7 203. + 24.3 203. + 27.0 203. + 29.6 203. + 32.2 203. + 34.8 202. + 37.3 202. + 39.7 201. + 42.0 200. + 44.2 198. + 46.3 197. + 48.3 196. + 50.2 194. + 51.9 193. + 53.5 191. + 55.0 190. + 56.3 188. + 57.5 187. + 58.6 185. + 59.6 184. + 60.4 182. + 61.2 181. + 61.8 180. + 62.4 178. + 62.8 177. + 63.2 176. + 63.5 175. + 63.7 173. + 63.8 172. + 63.8 171. + 63.8 170. + 63.7 170. + 63.5 169. + 63.3 168. + 63.0 167. + 62.7 166. + 62.3 166. + 61.9 165. + 61.4 165. + 60.9 164. + 60.3 163. + 59.7 163. + 59.0 163. + 58.4 162. + 57.6 162. + 56.9 161. + 56.1 161. + 55.3 161. + 54.5 160. + 53.6 160. + 52.7 160. + 51.8 160. + 50.9 159. + 49.9 159. + 48.9 159. + 47.9 159. + 46.9 159. + 45.9 159. + 44.8 158. + 43.8 158. + 27.7 158. + 11.4 158. +REG_LINE: 2 + 80.7 64.6 + 80.8 66.3 +REG_LINE: 2 + 75.0 69.6 + 75.1 71.4 +REG_LINE: 2 + 68.8 73.9 + 68.8 75.6 +REG_LINE: 2 + 62.2 77.4 + 62.2 79.2 +REG_LINE: 2 + 55.3 80.3 + 55.3 82.0 +REG_LINE: 2 + 40.8 84.0 + 40.8 85.8 +REG_LINE: 2 + 33.3 85.0 + 33.3 86.7 +REG_LINE: 2 + 25.8 85.3 + 25.8 87.0 +REG_LINE: 2 + 18.2 85.0 + 18.2 86.8 +REG_LINE: 2 + 10.7 84.1 + 10.7 85.9 +REG_LINE: 2 + -3.79 80.5 + -3.83 82.2 +REG_LINE: 2 + -10.7 77.7 + -10.8 79.4 +REG_LINE: 2 + -17.3 74.2 + -17.4 76.0 +REG_LINE: 2 + -23.6 70.0 + -23.6 71.8 +REG_LINE: 2 + -29.4 65.0 + -29.5 66.8 +REG_LINE: 2 + -39.3 52.2 + -39.4 54.0 +REG_LINE: 2 + -43.2 44.0 + -43.4 45.7 +REG_LINE: 2 + -46.2 34.0 + -46.4 35.8 +REG_LINE: 2 + -48.0 21.8 + -48.3 23.5 +REG_LINE: 2 + -48.0 6.25 + -48.3 7.96 +REG_LINE: 2 + -35.8 -41.5 + -36.5 -39.9 +REG_LINE: 2 + -14.6 -73.9 + -15.8 -72.6 +REG_LINE: 2 + 23.6 -92.8 + 22.6 -94.3 +REG_LINE: 2 + 62.8 -76.5 + 64.1 -75.2 +REG_LINE: 2 + 85.5 -44.2 + 86.2 -42.6 +REG_LINE: 2 + 98.7 4.70 + 99.1 6.41 +REG_LINE: 2 + 99.0 20.6 + 99.3 22.3 +REG_LINE: 2 + 97.3 33.1 + 97.5 34.8 +REG_LINE: 2 + 94.4 43.2 + 94.6 44.9 +REG_LINE: 2 + 90.5 51.6 + 90.7 53.3 +REG_LINE: 2 + 80.7 64.6 + 80.8 66.3 +REG_LINE: 2 + 75.0 69.6 + 75.1 71.4 +REG_LINE: 2 + 68.8 73.9 + 68.8 75.6 +REG_LINE: 2 + 62.2 77.4 + 62.2 79.2 +REG_LINE: 2 + 55.3 80.3 + 55.3 82.0 +REG_LINE: 2 + 40.8 84.0 + 40.8 85.8 +REG_LINE: 2 + 33.3 85.0 + 33.3 86.7 +REG_LINE: 2 + 25.8 85.3 + 25.8 87.0 +REG_LINE: 2 + 18.2 85.0 + 18.2 86.8 +REG_LINE: 2 + 10.7 84.1 + 10.7 85.9 +REG_LINE: 2 + 23.1 -34.3 + 21.6 -33.5 +REG_LINE: 2 + 20.6 -38.6 + 19.1 -37.7 +REG_LINE: 2 + 18.0 -42.6 + 16.5 -41.7 +REG_LINE: 2 + 15.2 -46.2 + 13.8 -45.2 +REG_LINE: 2 + 12.3 -49.4 + 10.9 -48.4 +REG_LINE: 2 + 6.00 -54.5 + 4.63 -53.5 +REG_LINE: 2 + 2.59 -56.3 + 1.25 -55.2 +REG_LINE: 2 + -1.03 -57.5 + -2.33 -56.3 +REG_LINE: 2 + -4.86 -58.0 + -6.12 -56.8 +REG_LINE: 2 + -8.94 -57.7 + -10.1 -56.4 +REG_LINE: 2 + -17.9 -54.1 + -19.0 -52.7 +REG_LINE: 2 + -22.8 -50.3 + -23.9 -48.9 +REG_LINE: 2 + -28.1 -44.9 + -29.0 -43.4 +REG_LINE: 2 + -33.6 -37.4 + -34.4 -35.9 +REG_LINE: 2 + -39.3 -27.4 + -40.0 -25.8 +REG_LINE: 2 + -50.1 2.52 + -50.5 4.22 +REG_LINE: 2 + -54.3 23.2 + -54.6 24.9 +REG_LINE: 2 + -56.8 47.3 + -56.8 49.1 +REG_LINE: 2 + -56.8 73.8 + -56.1 75.5 +REG_LINE: 2 + -53.9 101. + -54.0 98.8 +REG_LINE: 2 + -41.1 146. + -41.7 144. +REG_LINE: 2 + -32.8 162. + -33.7 161. +REG_LINE: 2 + -24.5 175. + -25.5 173. +REG_LINE: 2 + -16.5 183. + -17.6 182. +REG_LINE: 2 + -9.06 188. + -10.4 187. +REG_LINE: 2 + 3.65 193. + 2.17 192. +REG_LINE: 2 + 9.03 193. + 7.49 192. +REG_LINE: 2 + 13.8 192. + 12.2 192. +REG_LINE: 2 + 18.1 190. + 16.5 190. +REG_LINE: 2 + 22.0 188. + 20.3 187. +REG_LINE: 15 + 48.1 82.5 + 51.2 81.6 + 54.3 80.6 + 57.3 79.5 + 60.3 78.3 + 63.2 77.0 + 66.0 75.5 + 68.8 73.9 + 71.5 72.2 + 74.1 70.3 + 76.7 68.3 + 79.1 66.1 + 81.5 63.8 + 83.8 61.3 + 85.9 58.6 +REG_LINE: 15 + 48.1 82.5 + 45.0 83.2 + 41.8 83.8 + 38.7 84.4 + 35.5 84.8 + 32.2 85.0 + 29.0 85.2 + 25.8 85.3 + 22.5 85.3 + 19.3 85.1 + 16.1 84.8 + 12.9 84.4 + 9.69 83.9 + 6.52 83.3 + 3.39 82.6 +REG_LINE: 15 + 3.39 82.6 + .284 81.8 + -2.78 80.8 + -5.80 79.7 + -8.77 78.6 + -11.7 77.2 + -14.5 75.8 + -17.3 74.2 + -20.1 72.5 + -22.7 70.7 + -25.3 68.7 + -27.8 66.5 + -30.1 64.2 + -32.4 61.8 + -34.6 59.1 +REG_LINE: 15 + -34.6 59.1 + -36.7 56.3 + -38.7 53.3 + -40.5 50.0 + -42.2 46.5 + -43.7 42.7 + -45.0 38.5 + -46.2 34.0 + -47.1 29.1 + -47.8 23.7 + -48.2 17.8 + -48.2 11.1 + -47.8 3.67 + -46.7 -4.73 + -44.9 -14.2 +REG_LINE: 93 + -44.9 -14.2 + -42.0 -25.0 + -37.7 -37.2 + -31.3 -50.6 + -22.3 -64.7 + -21.6 -65.7 + -20.8 -66.7 + -20.0 -67.7 + -19.2 -68.7 + -18.4 -69.7 + -17.5 -70.7 + -16.7 -71.6 + -15.8 -72.6 + -14.9 -73.5 + -14.0 -74.5 + -13.0 -75.4 + -12.1 -76.3 + -11.1 -77.2 + -10.1 -78.1 + -9.08 -79.0 + -8.06 -79.8 + -7.01 -80.7 + -5.95 -81.5 + -4.87 -82.3 + -3.78 -83.1 + -2.67 -83.8 + -1.54 -84.6 + -.395 -85.3 + .764 -86.0 + 1.94 -86.6 + 3.13 -87.2 + 4.33 -87.8 + 5.54 -88.4 + 6.77 -89.0 + 8.01 -89.5 + 9.27 -89.9 + 10.5 -90.4 + 11.8 -90.8 + 13.1 -91.2 + 14.4 -91.5 + 15.7 -91.8 + 17.0 -92.1 + 18.3 -92.3 + 19.6 -92.5 + 20.9 -92.6 + 22.3 -92.8 + 23.6 -92.8 + 24.9 -92.9 + 26.2 -92.9 + 27.6 -92.8 + 28.9 -92.7 + 30.2 -92.6 + 31.5 -92.5 + 32.8 -92.3 + 34.2 -92.0 + 35.5 -91.8 + 36.8 -91.4 + 38.0 -91.1 + 39.3 -90.7 + 40.6 -90.3 + 41.9 -89.9 + 43.1 -89.4 + 44.3 -88.9 + 45.6 -88.3 + 46.8 -87.7 + 48.0 -87.1 + 49.2 -86.5 + 50.3 -85.8 + 51.5 -85.2 + 52.6 -84.4 + 53.8 -83.7 + 54.9 -82.9 + 56.0 -82.2 + 57.0 -81.4 + 58.1 -80.5 + 59.1 -79.7 + 60.2 -78.8 + 61.2 -78.0 + 62.2 -77.1 + 63.1 -76.2 + 64.1 -75.2 + 65.0 -74.3 + 65.9 -73.4 + 66.8 -72.4 + 67.7 -71.4 + 68.6 -70.5 + 69.4 -69.5 + 70.2 -68.5 + 71.1 -67.5 + 80.7 -53.4 + 87.5 -39.8 + 92.1 -27.4 + 95.3 -16.3 +REG_LINE: 15 + 95.3 -16.3 + 97.3 -6.55 + 98.5 2.06 + 99.1 9.69 + 99.1 16.5 + 98.8 22.6 + 98.2 28.1 + 97.3 33.1 + 96.2 37.7 + 94.9 41.9 + 93.4 45.7 + 91.7 49.3 + 89.9 52.6 + 88.0 55.7 + 85.9 58.6 +REG_LINE: 15 + 85.9 58.6 + 83.8 61.3 + 81.5 63.8 + 79.1 66.1 + 76.7 68.3 + 74.1 70.3 + 71.5 72.2 + 68.8 73.9 + 66.0 75.5 + 63.2 77.0 + 60.3 78.3 + 57.3 79.5 + 54.3 80.6 + 51.2 81.6 + 48.1 82.5 +REG_LINE: 15 + 48.1 82.5 + 45.0 83.2 + 41.8 83.8 + 38.7 84.4 + 35.5 84.8 + 32.2 85.0 + 29.0 85.2 + 25.8 85.3 + 22.5 85.3 + 19.3 85.1 + 16.1 84.8 + 12.9 84.4 + 9.69 83.9 + 6.52 83.3 + 3.39 82.6 +REG_LINE: 15 + 48.1 82.5 + 45.0 83.2 + 41.8 83.8 + 38.7 84.4 + 35.5 84.8 + 32.2 85.0 + 29.0 85.2 + 25.8 85.3 + 22.5 85.3 + 19.3 85.1 + 16.1 84.8 + 12.9 84.4 + 9.69 83.9 + 6.52 83.3 + 3.39 82.6 +REG_LINE: 15 + 25.4 -29.7 + 24.4 -31.7 + 23.4 -33.7 + 22.4 -35.6 + 21.3 -37.4 + 20.2 -39.2 + 19.1 -40.9 + 18.0 -42.6 + 16.8 -44.2 + 15.6 -45.7 + 14.4 -47.2 + 13.1 -48.6 + 11.9 -49.9 + 10.6 -51.1 + 9.23 -52.2 +REG_LINE: 15 + 9.23 -52.2 + 7.87 -53.3 + 6.48 -54.2 + 5.05 -55.1 + 3.58 -55.9 + 2.08 -56.5 + .548 -57.1 + -1.03 -57.5 + -2.64 -57.8 + -4.30 -58.0 + -6.00 -58.0 + -7.75 -57.9 + -9.54 -57.6 + -11.4 -57.1 + -13.3 -56.4 +REG_LINE: 15 + -13.3 -56.4 + -15.2 -55.6 + -17.2 -54.5 + -19.3 -53.2 + -21.4 -51.6 + -23.6 -49.7 + -25.8 -47.5 + -28.1 -44.9 + -30.4 -42.0 + -32.8 -38.6 + -35.2 -34.8 + -37.6 -30.5 + -40.1 -25.7 + -42.5 -20.3 + -44.9 -14.2 +REG_LINE: 15 + -44.9 -14.2 + -47.2 -7.52 + -49.4 -.109 + -51.4 8.02 + -53.3 16.9 + -54.8 26.4 + -56.0 36.6 + -56.8 47.3 + -57.1 58.5 + -56.9 70.0 + -56.2 81.6 + -55.0 93.1 + -53.3 104. + -51.0 115. + -48.4 125. +REG_LINE: 15 + -48.4 125. + -45.4 135. + -42.2 143. + -38.8 151. + -35.2 158. + -31.6 164. + -28.0 170. + -24.5 175. + -21.0 179. + -17.6 182. + -14.3 185. + -11.1 187. +Forward matrix value + M2 = -0.811474832908671 # Forward matrix value + M3 = 0.171224898552328 # Forward matrix value + M4 = -0.862236746712233 # Forward matrix value + M5 = -0.476686298035564 # Forward matrix value + M6 = -0.941127638091139 # Forward matrix value + M7 = 0 # Forward matrix value + M8 = -0.338051429254475 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = -2.61046557479594 # Polar longitude (rad.s) + End SphMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End FrameSet + Begin FrameSet # Set of inter-related coordinate systems +# Title = "Pixel coordinates; first pixel at (-100.5,-200.5)" # Title of coordinate system +# Naxes = 2 # Number of coordinate axes +# Domain = "POLAR" # Coordinate system domain +# Lbl1 = "Pixel coordinate 1" # Label for axis 1 +# Lbl2 = "Pixel coordinate 2" # Label for axis 2 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 + IsA Frame # Coordinate system description + Nframe = 2 # Number of Frames in FrameSet +# Base = 1 # Index of base Frame + Currnt = 2 # Index of current Frame + Nod1 = 2 # Frame 1 is associated with node 2 + Nod2 = 1 # Frame 2 is associated with node 1 + Lnk2 = 1 # Node 2 is derived from node 1 + Frm1 = # Frame number 1 + Begin Frame # Coordinate system description + Title = "Data grid indices; first pixel at (1,1) " # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "GRID" # Coordinate system domain +# Lbl1 = "Data grid index 1" # Label for axis 1 +# Lbl2 = "Data grid index 2" # Label for axis 2 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Data grid index 1" # Axis Label + Symbol = "g1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Data grid index 2" # Axis Label + Symbol = "g2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm2 = # Frame number 2 + Begin Frame # Coordinate system description + Title = "Pixel coordinates; first pixel at (-100.5,-200.5)" # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "POLAR" # Coordinate system domain +# Lbl1 = "Pixel coordinate 1" # Label for axis 1 +# Lbl2 = "Pixel coordinate 2" # Label for axis 2 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 1" # Axis Label + -8.06 189. + -5.15 190. + -2.36 192. +REG_LINE: 15 + -2.36 192. + .299 192. + 2.83 193. + 5.25 193. + 7.56 193. + 9.75 193. + 11.8 193. + 13.8 192. + 15.7 192. + 17.6 191. + 19.3 190. + 20.9 189. + 22.5 188. + 24.0 186. + 25.4 185. +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '180' + 47.5 80.0 TC .248 .969 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '240' + 4.00 80.2 TC -.245 .969 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '300' + -32.7 57.6 TC -.786 .618 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '0' + -42.4 -13.7 BC .976 .217 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '60' + 92.9 -15.7 BC -.971 .241 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '120' + 84.0 57.1 TC .798 .602 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-90' + 27.7 -30.8 TC -.899 .438 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-60' + 10.8 -54.2 TC -.629 .777 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-30' + -14.2 -58.8 TC .374 .927 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '0' + -47.2 -15.1 TC .937 .350 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '30' + -50.8 126. BC -.960 .278 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '60' + -3.21 194. BC -.341 .940 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '90' + 27.2 187. BC .711 .704 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 1 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: ' A FITS test' + 31.5 225. BC .000 1.00 + + + + + FITS test number 2 + ==================== + + + +AST_SHOW: + +REG_SINK: +COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +AST +COMMENT AST Beginning of AST data for FrameSet object +AST +COMMENT AST ................................................................ +AST +COMMENT AST ................................................................ +AST +COMMENT AST End of AST data for FrameSet object +AST +COMMENT AST ---------------------------------------------------------------- + +Objects written: 1 + +Native Encoding: + +COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST +COMMENT AST WCS information in AST format AST +COMMENT AST See http://www.starlink.ac.uk/ast/ AST +COMMENT AST Beginning of AST data for FrameSet object AST +COMMENT AST ................................................................ AST +BEGAST_A= 'FrameSet' / Set of inter-related coordinate systems +NFRAME_A= 2 / Number of Frames in FrameSet +CURRNT_A= 2 / Index of current Frame +NOD1_A = 2 / Frame 1 is associated with node 2 +NOD2_A = 1 / Frame 2 is associated with node 1 +LNK2_A = 1 / Node 2 is derived from node 1 +FRM1_A = ' ' / Frame number 1 +BEGAST_B= 'Frame ' / Coordinate system description +TITLE_A = 'Data grid indices; first pixel at (1&'/ Title of coordinate system +CONTINUE '",1) "' +NAXES_A = 2 / Number of coordinate axes +DOMAIN_A= 'GRID ' / Coordinate system domain +AX1_A = ' ' / Axis number 1 +BEGAST_C= 'Axis ' / Coordinate axis +LABEL_A = 'Data grid index 1' / Axis Label +SYMBOL_A= 'g1 ' / Axis symbol +UNIT_A = 'pixel ' / Axis units +FORMAT_A= '%3.1f ' / Format specifier +ENDAST_A= 'Axis ' / End of object definition +AX2_A = ' ' / Axis number 2 +BEGAST_D= 'Axis ' / Coordinate axis +LABEL_B = 'Data grid index 2' / Axis Label +SYMBOL_B= 'g2 ' / Axis symbol +UNIT_B = 'pixel ' / Axis units +FORMAT_B= '%3.1f ' / Format specifier +ENDAST_B= 'Axis ' / End of object definition +ENDAST_C= 'Frame ' / End of object definition +FRM2_A = ' ' / Frame number 2 +BEGAST_E= 'Frame ' / Coordinate system description +TITLE_B = 'Pixel coordinates; first pixel at (-&'/ Title of coordinate system +CONTINUE '100.5,-200.5)' +NAXES_B = 2 / Number of coordinate axes +DOMAIN_B= 'POLAR ' / Coordinate system domain +AX1_B = ' ' / Axis number 1 +BEGAST_F= 'Axis ' / Coordinate axis +LABEL_C = 'Pixel coordinate 1' / Axis Label +SYMBOL_C= 'p1 ' / Axis symbol +UNIT_C = 'pixel ' / Axis units +FORMAT_C= '%3.1f ' / Format specifier +ENDAST_D= 'Axis ' / End of object definition +AX2_B = ' ' / Axis number 2 +BEGAST_G= 'Axis ' / Coordinate axis +LABEL_D = 'Pixel coordinate 2' / Axis Label +SYMBOL_D= 'p2 ' / Axis symbol +UNIT_D = 'pixel ' / Axis units +FORMAT_D= '%3.1f ' / Format specifier +ENDAST_E= 'Axis ' / End of object definition +ENDAST_F= 'Frame ' / End of object definition +MAP2_A = ' ' / Mapping between nodes 1 and 2 +BEGAST_H= 'CmpMap ' / Compound Mapping +NIN_A = 2 / Number of input coordinates +ISA_A = 'Mapping ' / Mapping between coordinate systems +INVA_A = 1 / First Mapping used in inverse direction +INVB_A = 1 / Second Mapping used in inverse direction +MAPA_A = ' ' / First component Mapping +BEGAST_I= 'MathMap ' / Transformation using mathematical functions +NIN_B = 2 / Number of input coordinates +INVERT_A= 0 / Mapping not inverted +ISA_B = 'Mapping ' / Mapping between coordinate systems +FWD1_A = 'r=sqrt(x*x+y*y)' / Forward function 1 +FWD2_A = 'theta=atan2(y,x)' / Forward function 2 +INV1_A = 'x=r*cos(theta)' / Inverse function 1 +INV2_A = 'y=r*sin(theta)' / Inverse function 2 +SIMPFI_A= 1 / Forward-inverse pairs may simplify +SIMPIF_A= 1 / Inverse-forward pairs may simplify +ENDAST_G= 'MathMap ' / End of object definition +MAPB_A = ' ' / Second component Mapping +BEGAST_J= 'WinMap ' / Map one window on to another +NIN_C = 2 / Number of input coordinates +INVERT_B= 0 / Mapping not inverted +ISA_C = 'Mapping ' / Mapping between coordinate systems +SFT1_A = -101.5 / Shift for axis 1 +SFT2_A = -201.5 / Shift for axis 2 +ENDAST_H= 'WinMap ' / End of object definition +ENDAST_I= 'CmpMap ' / End of object definition +ENDAST_J= 'FrameSet' / End of object definition +COMMENT AST ................................................................ AST +COMMENT AST End of AST data for FrameSet object AST +COMMENT AST ---------------------------------------------------------------- AST + +ATTRIBUTES: + Colour(axis1) : 1 + Font(Stri) : 1 + Nout : 1 + Class : 4 + Tol : 0.100000E-01 + Gap(1) : 50.0000 + Border : 0 + Invert : 0 + TextLabGap : 0.100000E-01 + Nin : 2 + Current : 3 + Base : 1 + Nobject : 1 + RefCOUNT : 1 + +AST_GRID: +REG_LINE: 197 + 10.8 124. + 10.7 123. + 10.5 122. + 10.3 121. + 10.2 120. + 10.1 119. + 10.0 118. + 9.94 117. + 9.89 116. + 9.85 115. + 9.84 113. + 9.85 112. + 9.88 111. + 9.93 110. + 10.0 109. + 10.1 108. + 10.2 107. + 10.3 106. + 10.5 105. + 10.6 104. + 10.8 103. + 11.0 102. + 11.2 100. + 11.5 99.5 + 11.7 98.5 + 12.0 97.5 + 12.3 96.6 + 12.6 95.6 + 13.0 94.7 + 13.3 93.9 + 13.7 93.0 + 14.0 92.2 + 14.4 91.4 + 14.8 90.6 + 15.2 89.8 + 15.7 89.1 + 16.1 88.4 + 16.5 87.8 + 17.0 87.2 + 17.5 86.6 + 18.0 86.0 + 18.5 85.5 + 19.0 85.0 + 19.5 84.6 + 20.0 84.2 + 20.5 83.8 + 21.1 83.5 + 21.6 83.2 + 22.1 82.9 + 22.7 82.7 + 23.2 82.5 + 23.8 82.4 + 24.3 82.3 + 24.9 82.2 + 25.5 82.2 + 26.0 82.2 + 26.6 82.3 + 27.1 82.4 + 27.7 82.5 + 28.2 82.7 + 28.8 82.9 + 29.3 83.2 + 29.9 83.4 + 30.4 83.8 + 30.9 84.2 + 31.4 84.6 + 32.0 85.0 + 32.5 85.5 + 33.0 86.0 + 33.4 86.6 + 33.9 87.1 + 34.4 87.8 + 34.8 88.4 + 35.3 89.1 + 35.7 89.8 + 36.1 90.6 + 36.5 91.3 + 36.9 92.1 + 37.3 93.0 + 37.6 93.8 + 38.0 94.7 + 38.3 95.6 + 38.6 96.5 + 38.9 97.5 + 39.2 98.5 + 39.4 99.4 + 39.7 100. + 39.9 101. + 40.1 103. + 40.3 104. + 40.5 105. + 40.6 106. + 40.7 107. + 40.8 108. + 40.9 109. + 41.0 110. + 41.1 111. + 41.1 112. + 41.1 113. + 41.1 115. + 41.1 116. + 41.0 117. + 40.9 118. + 40.8 119. + 40.7 120. + 40.6 121. + 40.5 122. + 40.3 123. + 40.1 124. + 39.9 125. + 39.7 126. + 39.4 127. + 39.2 128. + 38.9 129. + 38.6 130. + 38.3 131. + 38.0 132. + 37.6 133. + 37.3 134. + 36.9 135. + 36.5 136. + 36.1 136. + 35.7 137. + 35.3 138. + 34.8 138. + 34.4 139. + 33.9 140. + 33.4 140. + 33.0 141. + 32.5 141. + 32.0 142. + 31.4 142. + 30.9 143. + 30.4 143. + 29.9 143. + 29.3 144. + 28.8 144. + 28.2 144. + 27.7 144. + 27.1 145. + 26.6 145. + 26.0 145. + 25.5 145. + 24.9 145. + 24.3 145. + 23.8 145. + 23.2 144. + 22.7 144. + 22.1 144. + 21.6 144. + 21.1 143. + 20.5 143. + 20.0 143. + 19.5 142. + 19.0 142. + 18.5 141. + 18.0 141. + 17.5 140. + 17.0 140. + 16.5 139. + 16.1 138. + 15.7 138. + 15.2 137. + 14.8 136. + 14.4 136. + 14.0 135. + 13.7 134. + 13.3 133. + 13.0 132. + 12.6 131. + 12.3 130. + 12.0 129. + 11.7 128. + 11.5 127. + 11.2 126. + 11.0 125. + 10.8 124. + 10.6 123. + 10.5 122. + 10.3 121. + 10.2 120. + 10.1 119. + 10.0 118. + 9.93 117. + 9.88 116. + 9.85 115. + 9.84 113. + 9.85 112. + 9.89 111. + 9.94 110. + 10.0 109. + 10.1 108. + 10.2 107. + 10.3 106. + 10.5 105. + 10.7 104. + 10.8 102. +REG_LINE: 197 + -3.80 135. + -4.17 133. + -4.50 131. + -4.80 129. + -5.06 127. + -5.28 125. + -5.46 122. + -5.60 120. + -5.70 118. + -5.76 116. + -5.78 114. + -5.76 111. + -5.70 109. + -5.61 107. + -5.47 105. + -5.29 102. + -5.07 100. + -4.82 98.1 + -4.53 95.9 + -4.19 93.8 + -3.82 91.7 + -3.42 89.6 + -2.97 87.5 + -2.49 85.5 + -1.97 83.5 + -1.42 81.6 + -.838 79.7 + -.219 77.8 + .433 76.0 + 1.12 74.3 + 1.83 72.6 + 2.58 70.9 + 3.35 69.3 + 4.15 67.7 + 4.98 66.2 + 5.84 64.8 + 6.72 63.4 + 7.62 62.1 + 8.55 60.9 + 9.50 59.7 + 10.5 58.6 + 11.5 57.6 + 12.5 56.6 + 13.5 55.7 + 14.5 54.9 + 15.6 54.2 + 16.6 53.5 + 17.7 52.9 + 18.8 52.4 + 19.9 51.9 + 21.0 51.6 + 22.1 51.3 + 23.2 51.1 + 24.3 51.0 + 25.4 50.9 + 26.6 51.0 + 27.7 51.1 + 28.8 51.3 + 29.9 51.6 + 31.0 51.9 + 32.1 52.4 + 33.2 52.9 + 34.3 53.5 + 35.3 54.1 + 36.4 54.9 + 37.4 55.7 + 38.4 56.6 + 39.4 57.5 + 40.4 58.6 + 41.4 59.7 + 42.4 60.8 + 43.3 62.1 + 44.2 63.4 + 45.1 64.8 + 45.9 66.2 + 46.8 67.7 + 47.6 69.2 + 48.3 70.8 + 49.1 72.5 + 49.8 74.2 + 50.5 76.0 + 51.1 77.8 + 51.8 79.6 + 52.3 81.5 + 52.9 83.5 + 53.4 85.5 + 53.9 87.5 + 54.3 89.5 + 54.7 91.6 + 55.1 93.7 + 55.5 95.8 + 55.7 98.0 + 56.0 100. + 56.2 102. + 56.4 105. + 56.5 107. + 56.6 109. + 56.7 111. + 56.7 113. + 56.7 116. + 56.6 118. + 56.5 120. + 56.4 122. + 56.2 125. + 56.0 127. + 55.7 129. + 55.5 131. + 55.1 133. + 54.7 135. + 54.3 137. + 53.9 139. + 53.4 141. + 52.9 143. + 52.3 145. + 51.8 147. + 51.1 149. + 50.5 151. + 49.8 153. + 49.1 154. + 48.3 156. + 47.6 158. + 46.8 159. + 45.9 161. + 45.1 162. + 44.2 163. + 43.3 165. + 42.4 166. + 41.4 167. + 40.4 168. + 39.4 169. + 38.4 170. + 37.4 171. + 36.4 172. + 35.3 173. + 34.3 173. + 33.2 174. + 32.1 175. + 31.0 175. + 29.9 175. + 28.8 176. + 27.7 176. + 26.6 176. + 25.4 176. + 24.3 176. + 23.2 176. + 22.1 176. + 21.0 175. + 19.9 175. + 18.8 174. + 17.7 174. + 16.6 173. + 15.6 173. + 14.5 172. + 13.5 171. + 12.5 170. + 11.5 169. + 10.5 168. + 9.50 167. + 8.55 166. + 7.62 165. + 6.72 163. + 5.84 162. + 4.98 161. + 4.15 159. + 3.35 158. + 2.58 156. + 1.83 154. + 1.12 153. + .433 151. + -.219 149. + -.838 147. + -1.42 145. + -1.97 143. + -2.49 141. + -2.97 139. + -3.42 137. + -3.82 135. + -4.19 133. + -4.53 131. + -4.82 129. + -5.07 127. + -5.29 124. + -5.47 122. + -5.61 120. + -5.70 118. + -5.76 116. + -5.78 113. + -5.76 111. + -5.70 109. + -5.60 107. + -5.46 104. + -5.28 102. + -5.06 100. + -4.80 97.9 + -4.50 95.7 + -4.17 93.6 + -3.80 91.5 +REG_LINE: 197 + -18.4 146. + -19.0 143. + -19.5 140. + -19.9 137. + -20.3 133. + -20.7 130. + -20.9 127. + -21.1 124. + -21.3 120. + -21.4 117. + -21.4 114. + -21.4 110. + -21.3 107. + -21.1 104. + -20.9 100. + -20.7 96.9 + -20.3 93.6 + -20.0 90.4 + -19.5 87.1 + -19.0 83.9 + -18.5 80.8 + -17.9 77.7 + -17.2 74.6 + -16.5 71.6 + -15.7 68.6 + -14.9 65.7 + -14.0 62.8 + -13.1 60.0 + -12.1 57.3 + -11.1 54.7 + -9.99 52.1 + -8.87 49.6 + -7.71 47.2 + -6.50 44.9 + -5.26 42.6 + -3.98 40.5 + -2.66 38.4 + -1.30 36.5 + 0.922E-01 34.6 + 1.52 32.9 + 2.97 31.2 + 4.45 29.6 + 5.96 28.2 + 7.50 26.9 + 9.05 25.6 + 10.6 24.5 + 12.2 23.5 + 13.8 22.6 + 15.5 21.8 + 17.1 21.2 + 18.8 20.7 + 20.4 20.2 + 22.1 19.9 + 23.8 19.7 + 25.4 19.7 + 27.1 19.7 + 28.8 19.9 + 30.5 20.2 + 32.1 20.6 + 33.8 21.2 + 35.4 21.8 + 37.0 22.6 + 38.7 23.5 + 40.2 24.5 + 41.8 25.6 + 43.4 26.8 + 44.9 28.1 + 46.4 29.6 + 47.9 31.1 + 49.4 32.8 + 50.8 34.5 + 52.2 36.4 + 53.5 38.4 + 54.9 40.4 + 56.2 42.6 + 57.4 44.8 + 58.6 47.1 + 59.8 49.5 + 60.9 52.0 + 62.0 54.6 + 63.0 57.2 + 64.0 60.0 + 64.9 62.7 + 65.8 65.6 + 66.6 68.5 + 67.4 71.5 + 68.1 74.5 + 68.8 77.5 + 69.4 80.7 + 69.9 83.8 + 70.4 87.0 + 70.9 90.2 + 71.3 93.5 + 71.6 96.8 + 71.9 100. + 72.1 103. + 72.2 107. + 72.3 110. + 72.3 113. + 72.3 117. + 72.2 120. + 72.1 123. + 71.9 127. + 71.6 130. + 71.3 133. + 70.9 137. + 70.4 140. + 69.9 143. + 69.4 146. + 68.8 149. + 68.1 152. + 67.4 155. + 66.6 158. + 65.8 161. + 64.9 164. + 64.0 167. + 63.0 170. + 62.0 172. + 60.9 175. + 59.8 177. + 58.6 180. + 57.4 182. + 56.2 184. + 54.9 186. + 53.5 189. + 52.2 190. + 50.8 192. + 49.4 194. + 47.9 196. + 46.4 197. + 44.9 199. + 43.4 200. + 41.8 201. + 40.2 202. + 38.7 203. + 37.0 204. + 35.4 205. + 33.8 206. + 32.1 206. + 30.5 207. + 28.8 207. + 27.1 207. + 25.4 207. + 23.8 207. + 22.1 207. + 20.4 207. + 18.8 206. + 17.1 206. + 15.5 205. + 13.8 204. + 12.2 203. + 10.6 202. + 9.05 201. + 7.50 200. + 5.96 199. + 4.45 197. + 2.97 196. + 1.52 194. + 0.922E-01 192. + -1.30 190. + -2.66 188. + -3.98 186. + -5.26 184. + -6.50 182. + -7.71 180. + -8.87 177. + -9.99 175. + -11.1 172. + -12.1 170. + -13.1 167. + -14.0 164. + -14.9 161. + -15.7 158. + -16.5 155. + -17.2 152. + -17.9 149. + -18.5 146. + -19.0 143. + -19.5 140. + -20.0 137. + -20.3 133. + -20.7 130. + -20.9 127. + -21.1 123. + -21.3 120. + -21.4 117. + -21.4 113. + -21.4 110. + -21.3 107. + -21.1 103. + -20.9 100. + -20.7 96.7 + -20.3 93.4 + -19.9 90.1 + -19.5 86.9 + -19.0 83.7 + -18.4 80.6 +REG_LINE: 197 + -33.1 157. + -33.8 153. + -34.5 149. + -35.1 145. + -35.6 140. + -36.0 136. + -36.4 131. + -36.7 127. + -36.9 123. + -37.0 118. + -37.0 114. + -37.0 109. + -36.9 105. + -36.7 100. + -36.4 95.8 + -36.1 91.4 + -35.6 87.0 + -35.1 82.7 + -34.5 78.4 + -33.9 74.1 + -33.1 69.9 + -32.3 65.7 + -31.4 61.6 + -30.5 57.6 + -29.4 53.6 + -28.3 49.8 + -27.1 46.0 + -25.9 42.3 + -24.6 38.6 + -23.2 35.1 + -21.8 31.7 + -20.3 28.3 + -18.8 25.1 + -17.2 22.0 + -15.5 19.0 + -13.8 16.2 + -12.0 13.4 + -10.2 10.8 + -8.37 8.34 + -6.47 5.99 + -4.53 3.78 + -2.55 1.71 + -.540 -.225 + 1.51 -2.01 + 3.58 -3.65 + 5.69 -5.14 + 7.82 -6.47 + 9.97 -7.66 + 12.1 -8.69 + 14.3 -9.56 + 16.5 -10.3 + 18.7 -10.8 + 21.0 -11.2 + 23.2 -11.5 + 25.4 -11.6 + 27.7 -11.5 + 29.9 -11.2 + 32.1 -10.9 + 34.3 -10.3 + 36.5 -9.59 + 38.7 -8.72 + 40.9 -7.70 + 43.0 -6.52 + 45.2 -5.19 + 47.3 -3.70 + 49.4 -2.07 + 51.4 -.290 + 53.4 1.63 + 55.4 3.70 + 57.3 5.91 + 59.2 8.25 + 61.1 10.7 + 62.9 13.3 + 64.7 16.1 + 66.4 18.9 + 68.0 21.9 + 69.6 25.0 + 71.2 28.2 + 72.7 31.6 + 74.1 35.0 + 75.5 38.5 + 76.8 42.1 + 78.0 45.8 + 79.2 49.6 + 80.3 53.5 + 81.4 57.5 + 82.3 61.5 + 83.2 65.6 + 84.0 69.7 + 84.8 73.9 + 85.4 78.2 + 86.0 82.5 + 86.5 86.9 + 87.0 91.2 + 87.3 95.6 + 87.6 100. + 87.8 105. + 87.9 109. + 88.0 113. + 87.9 118. + 87.8 122. + 87.6 127. + 87.3 131. + 87.0 136. + 86.5 140. + 86.0 144. + 85.4 149. + 84.8 153. + 84.0 157. + 83.2 161. + 82.3 165. + 81.4 169. + 80.3 173. + 79.2 177. + 78.0 181. + 76.8 185. + 75.5 188. + 74.1 192. + 72.7 195. + 71.2 199. + 69.6 202. + 68.0 205. + 66.4 208. + 64.7 211. + 62.9 214. + 61.1 216. + 59.2 219. + 57.3 221. + 55.4 223. + 53.4 225. + 51.4 227. + 49.4 229. + 47.3 231. + 45.2 232. + 43.0 233. + 40.9 235. + 38.7 236. + 36.5 236. + 34.3 237. + 32.1 238. + 29.9 238. + 27.7 238. + 25.4 238. + 23.2 238. + 21.0 238. + 18.7 238. + 16.5 237. + 14.3 236. + 12.1 236. + 9.97 235. + 7.82 233. + 5.69 232. + 3.58 231. + 1.51 229. + -.540 227. + -2.55 225. + -4.53 223. + -6.47 221. + -8.37 219. + -10.2 216. + -12.0 213. + -13.8 211. + -15.5 208. + -17.2 205. + -18.8 202. + -20.3 199. + -21.8 195. + -23.2 192. + -24.6 188. + -25.9 185. + -27.1 181. + -28.3 177. + -29.4 173. + -30.5 169. + -31.4 165. + -32.3 161. + -33.1 157. + -33.9 153. + -34.5 149. + -35.1 144. + -35.6 140. + -36.1 135. + -36.4 131. + -36.7 127. + -36.9 122. + -37.0 118. + -37.0 113. + -37.0 109. + -36.9 104. + -36.7 99.9 + -36.4 95.5 + -36.0 91.1 + -35.6 86.7 + -35.1 82.4 + -34.5 78.1 + -33.8 73.8 + -33.1 69.6 +REG_LINE: 197 + -47.7 168. + -48.6 163. + -49.5 158. + -50.2 152. + -50.8 147. + -51.4 141. + -51.8 136. + -52.2 130. + -52.4 125. + -52.6 119. + -52.7 114. + -52.6 108. + -52.5 102. + -52.2 96.9 + -51.9 91.4 + -51.4 85.9 + -50.9 80.4 + -50.3 75.0 + -49.5 69.6 + -48.7 64.3 + -47.8 59.0 + -46.7 53.8 + -45.6 48.7 + -44.4 43.6 + -43.1 38.7 + -41.8 33.8 + -40.3 29.1 + -38.8 24.5 + -37.1 19.9 + -35.4 15.5 + -33.6 11.2 + -31.8 7.08 + -29.8 3.06 + -27.8 -.822 + -25.7 -4.55 + -23.6 -8.14 + -21.4 -11.6 + -19.1 -14.8 + -16.8 -17.9 + -14.5 -20.9 + -12.0 -23.6 + -9.56 -26.2 + -7.04 -28.6 + -4.49 -30.9 + -1.89 -32.9 + .740 -34.8 + 3.40 -36.5 + 6.09 -37.9 + 8.81 -39.2 + 11.5 -40.3 + 14.3 -41.2 + 17.1 -41.9 + 19.8 -42.4 + 22.6 -42.7 + 25.4 -42.8 + 28.2 -42.7 + 31.0 -42.4 + 33.8 -41.9 + 36.5 -41.2 + 39.3 -40.3 + 42.0 -39.3 + 44.7 -38.0 + 47.4 -36.5 + 50.1 -34.8 + 52.7 -33.0 + 55.3 -30.9 + 57.9 -28.7 + 60.4 -26.3 + 62.9 -23.7 + 65.3 -21.0 + 67.7 -18.0 + 70.0 -14.9 + 72.3 -11.7 + 74.5 -8.26 + 76.6 -4.68 + 78.7 -.956 + 80.7 2.92 + 82.6 6.93 + 84.5 11.1 + 86.3 15.4 + 88.0 19.8 + 89.6 24.3 + 91.2 28.9 + 92.6 33.7 + 94.0 38.5 + 95.3 43.5 + 96.5 48.5 + 97.6 53.6 + 98.7 58.8 + 99.6 64.1 + 100. 69.4 + 101. 74.8 + 102. 80.2 + 102. 85.7 + 103. 91.2 + 103. 96.7 + 103. 102. + 104. 108. + 104. 113. + 104. 119. + 103. 125. + 103. 130. + 103. 136. + 102. 141. + 102. 147. + 101. 152. + 100. 157. + 99.6 163. + 98.7 168. + 97.6 173. + 96.5 178. + 95.3 183. + 94.0 188. + 92.6 193. + 91.2 198. + 89.6 203. + 88.0 207. + 86.3 212. + 84.5 216. + 82.6 220. + 80.7 224. + 78.7 228. + 76.6 232. + 74.5 235. + 72.3 239. + 70.0 242. + 67.7 245. + 65.3 248. + 62.9 251. + 60.4 253. + 57.9 256. + 55.3 258. + 52.7 260. + 50.1 262. + 47.4 263. + 44.7 265. + 42.0 266. + 39.3 267. + 36.5 268. + 33.8 269. + 31.0 269. + 28.2 270. + 25.4 270. + 22.6 270. + 19.8 269. + 17.1 269. + 14.3 268. + 11.5 267. + 8.81 266. + 6.09 265. + 3.40 263. + .740 262. + -1.89 260. + -4.49 258. + -7.04 256. + -9.56 253. + -12.0 251. + -14.5 248. + -16.8 245. + -19.1 242. + -21.4 238. + -23.6 235. + -25.7 231. + -27.8 228. + -29.8 224. + -31.8 220. + -33.6 216. + -35.4 211. + -37.1 207. + -38.8 202. + -40.3 198. + -41.8 193. + -43.1 188. + -44.4 183. + -45.6 178. + -46.7 173. + -47.8 168. + -48.7 163. + -49.5 157. + -50.3 152. + -50.9 146. + -51.4 141. + -51.9 135. + -52.2 130. + -52.5 124. + -52.6 119. + -52.7 113. + -52.6 108. + -52.4 102. + -52.2 96.5 + -51.8 91.0 + -51.4 85.5 + -50.8 80.0 + -50.2 74.6 + -49.5 69.2 + -48.6 63.9 + -47.7 58.6 +REG_LINE: 141 + -62.3 179. + -63.4 173. + -64.4 167. + -65.3 160. + -66.1 154. + -66.8 147. + -67.3 140. + -67.7 134. + -68.0 127. + -68.2 120. + -68.3 114. + -68.2 107. + -68.1 100. + -67.8 93.6 + -67.3 87.0 + -66.8 80.4 + -66.2 73.8 + -65.4 67.3 + -64.5 60.8 + -63.5 54.4 + -62.4 48.1 + -61.2 41.9 + -59.9 35.7 + -58.4 29.7 + -56.9 23.8 + -55.2 17.9 + -53.5 12.2 + -51.6 6.66 + -49.6 1.22 + -47.6 -4.07 + -45.4 -9.21 + -43.2 -14.2 + -40.9 -19.0 + -38.5 -23.7 + -36.0 -28.2 + -33.4 -32.5 + -30.8 -36.6 + -28.1 -40.5 + -25.3 -44.2 + -22.4 -47.7 + -19.5 -51.1 + -16.6 -54.2 + -13.5 -57.1 + -10.5 -59.7 + -7.36 -62.2 + -4.21 -64.4 + -1.01 -66.4 + 2.22 -68.2 + 5.47 -69.7 + 8.76 -71.1 + 12.1 -72.1 + 15.4 -73.0 + 18.7 -73.6 + 22.1 -73.9 + 25.4 -74.1 + 28.8 -73.9 + 32.1 -73.6 + 35.4 -73.0 + 38.8 -72.2 + 42.1 -71.1 + 45.3 -69.8 + 48.6 -68.3 + 51.8 -66.5 + 55.0 -64.5 + 58.2 -62.3 + 61.3 -59.8 + 64.4 -57.2 + 67.4 -54.3 + 70.4 -51.2 + 73.3 -47.9 + 76.1 -44.3 + 78.9 -40.6 + 81.6 -36.7 + 84.3 -32.6 + 86.8 -28.3 + 89.3 -23.8 + 91.7 -19.2 + 94.1 -14.4 + 96.3 -9.39 + 98.5 -4.25 + 101. 1.03 + 102. 6.46 + 104. 12.0 + 106. 17.7 + 108. 23.5 + 109. 29.5 + 111. 35.5 + 112. 41.7 + 113. 47.9 + 114. 54.2 + 115. 60.6 + 116. 67.0 + 117. 73.6 + 118. 80.1 + 118. 86.7 + 119. 93.4 + 119. 100. + 119. 107. + 119. 113. + 119. 120. + 119. 127. + 119. 133. + 118. 140. + 118. 147. + 117. 153. + 116. 160. + 115. 166. + 114. 173. + 113. 179. + 112. 185. + 111. 191. + 109. 197. + 108. 203. + 106. 209. + 104. 215. + 102. 220. + 101. 226. + 98.5 231. + 96.3 236. + 94.1 241. + 91.7 246. + 89.3 251. + 86.8 255. + 84.3 259. + 81.6 264. + 78.9 267. + 76.1 271. + 73.3 275. + 70.4 278. + 67.4 281. + 64.4 284. + 61.3 287. + 58.2 289. + 55.0 291. + 51.8 293. + 48.6 295. + 45.3 297. + 42.1 298. + 38.8 299. + 35.4 300. + 34.7 300. +REG_LINE: 53 + 16.2 300. + 15.4 300. + 12.1 299. + 8.76 298. + 5.47 297. + 2.22 295. + -1.01 293. + -4.21 291. + -7.36 289. + -10.5 287. + -13.5 284. + -16.6 281. + -19.5 278. + -22.4 275. + -25.3 271. + -28.1 267. + -30.8 263. + -33.4 259. + -36.0 255. + -38.5 251. + -40.9 246. + -43.2 241. + -45.4 236. + -47.6 231. + -49.6 226. + -51.6 220. + -53.5 215. + -55.2 209. + -56.9 203. + -58.4 197. + -59.9 191. + -61.2 185. + -62.4 179. + -63.5 172. + -64.5 166. + -65.4 160. + -66.2 153. + -66.8 147. + -67.3 140. + -67.8 133. + -68.1 127. + -68.2 120. + -68.3 113. + -68.2 107. + -68.0 99.8 + -67.7 93.2 + -67.3 86.5 + -66.8 79.9 + -66.1 73.3 + -65.3 66.8 + -64.4 60.4 + -63.4 54.0 + -62.3 47.7 +REG_LINE: 128 + -77.0 190. + -78.3 183. + -79.4 175. + -80.5 168. + -81.4 160. + -82.1 153. + -82.8 145. + -83.3 137. + -83.6 129. + -83.8 122. + -83.9 114. + -83.8 106. + -83.6 98.1 + -83.3 90.3 + -82.8 82.6 + -82.2 74.9 + -81.4 67.2 + -80.5 59.6 + -79.5 52.0 + -78.3 44.6 + -77.1 37.2 + -75.6 29.9 + -74.1 22.8 + -72.4 15.7 + -70.6 8.81 + -68.7 2.01 + -66.6 -4.64 + -64.4 -11.1 + -62.2 -17.5 + -59.8 -23.7 + -57.3 -29.7 + -54.7 -35.5 + -51.9 -41.1 + -49.1 -46.5 + -46.2 -51.8 + -43.2 -56.8 + -40.2 -61.6 + -37.0 -66.1 + -33.7 -70.5 + -30.4 -74.6 + -27.0 -78.5 + -23.6 -82.1 + -20.0 -85.5 + -16.5 -88.6 + -12.8 -91.5 + -9.15 -94.1 + -5.42 -96.4 + -1.66 -98.5 + 2.14 -100. + 5.97 -102. + 9.83 -103. + 13.7 -104. + 17.6 -105. + 21.5 -105. + 25.4 -105. + 29.3 -105. + 33.2 -105. + 37.1 -104. + 41.0 -103. + 44.8 -102. + 48.7 -100. + 52.5 -98.5 + 56.2 -96.5 + 60.0 -94.2 + 63.6 -91.6 + 67.3 -88.7 + 70.9 -85.6 + 74.4 -82.2 + 77.8 -78.6 + 81.2 -74.7 + 84.6 -70.6 + 87.8 -66.3 + 91.0 -61.7 + 94.1 -56.9 + 97.1 -51.9 + 100. -46.7 + 103. -41.3 + 105. -35.7 + 108. -29.9 + 111. -23.9 + 113. -17.7 + 115. -11.4 + 117. -4.87 + 120. 1.78 + 121. 8.56 + 123. 15.5 + 125. 22.5 + 127. 29.7 + 128. 37.0 + 129. 44.3 + 130. 51.8 + 131. 59.3 + 132. 66.9 + 133. 74.6 + 134. 82.3 + 134. 90.0 + 135. 97.8 + 135. 106. + 135. 113. + 135. 121. + 135. 129. + 134. 137. + 134. 145. + 133. 152. + 132. 160. + 131. 168. + 130. 175. + 129. 183. + 128. 190. + 127. 197. + 125. 204. + 123. 211. + 121. 218. + 120. 225. + 117. 232. + 115. 238. + 113. 245. + 111. 251. + 108. 257. + 105. 263. + 103. 268. + 100. 274. + 97.1 279. + 94.1 284. + 91.0 289. + 87.8 293. + 84.6 298. + 82.5 300. +REG_LINE: 40 + -31.6 300. + -33.7 297. + -37.0 293. + -40.2 288. + -43.2 284. + -46.2 279. + -49.1 273. + -51.9 268. + -54.7 262. + -57.3 257. + -59.8 251. + -62.2 244. + -64.4 238. + -66.6 232. + -68.7 225. + -70.6 218. + -72.4 211. + -74.1 204. + -75.6 197. + -77.1 190. + -78.3 182. + -79.5 175. + -80.5 167. + -81.4 160. + -82.2 152. + -82.8 144. + -83.3 137. + -83.6 129. + -83.8 121. + -83.9 113. + -83.8 105. + -83.6 97.5 + -83.3 89.8 + -82.8 82.0 + -82.1 74.3 + -81.4 66.7 + -80.5 59.0 + -79.4 51.5 + -78.3 44.1 + -77.0 36.7 +REG_LINE: 97 + -91.6 201. + -93.1 193. + -94.4 184. + -95.6 176. + -96.6 167. + -97.5 158. + -98.2 149. + -98.8 140. + -99.2 132. + -99.4 123. + -99.5 114. + -99.5 105. + -99.2 95.9 + -98.8 87.0 + -98.3 78.2 + -97.6 69.3 + -96.7 60.6 + -95.7 51.9 + -94.5 43.3 + -93.2 34.8 + -91.7 26.3 + -90.1 18.0 + -88.3 9.83 + -86.4 1.77 + -84.3 -6.14 + -82.1 -13.9 + -79.8 -21.5 + -77.3 -28.9 + -74.7 -36.2 + -71.9 -43.2 + -69.1 -50.1 + -66.1 -56.7 + -63.0 -63.2 + -59.8 -69.4 + -56.5 -75.3 + -53.1 -81.1 + -49.5 -86.6 + -45.9 -91.8 + -42.2 -96.8 + -38.4 -101. + -34.5 -106. + -30.6 -110. + -26.5 -114. + -22.5 -117. + -18.3 -121. + -14.1 -124. + -9.84 -126. + -5.53 -129. + -1.19 -131. + 3.19 -133. + 7.59 -134. + 12.0 -135. + 16.5 -136. + 20.9 -136. + 25.4 -137. + 29.9 -136. + 34.3 -136. + 38.8 -135. + 43.2 -134. + 47.6 -133. + 52.0 -131. + 56.3 -129. + 60.6 -126. + 64.9 -124. + 69.1 -121. + 73.2 -118. + 77.3 -114. + 81.4 -110. + 85.3 -106. + 89.2 -102. + 93.0 -96.9 + 96.7 -92.0 + 100. -86.8 + 104. -81.3 + 107. -75.6 + 111. -69.6 + 114. -63.4 + 117. -57.0 + 120. -50.3 + 123. -43.5 + 126. -36.4 + 128. -29.2 + 131. -21.8 + 133. -14.2 + 135. -6.42 + 137. 1.49 + 139. 9.54 + 141. 17.7 + 143. 26.0 + 144. 34.5 + 145. 43.0 + 147. 51.6 + 148. 60.3 + 148. 69.0 + 149. 77.8 + 150. 86.7 + 150. 92.2 +REG_LINE: 23 + 150. 135. + 150. 140. + 149. 149. + 148. 158. + 148. 167. + 147. 175. + 145. 184. + 144. 192. + 143. 201. + 141. 209. + 139. 217. + 137. 225. + 135. 233. + 133. 241. + 131. 249. + 128. 256. + 126. 263. + 123. 270. + 120. 277. + 117. 284. + 114. 290. + 111. 296. + 109. 300. +REG_LINE: 35 + -57.7 300. + -59.8 296. + -63.0 290. + -66.1 284. + -69.1 277. + -71.9 270. + -74.7 263. + -77.3 256. + -79.8 248. + -82.1 241. + -84.3 233. + -86.4 225. + -88.3 217. + -90.1 209. + -91.7 201. + -93.2 192. + -94.5 184. + -95.7 175. + -96.7 166. + -97.6 158. + -98.3 149. + -98.8 140. + -99.2 131. + -99.5 122. + -99.5 113. + -99.4 104. + -99.2 95.3 + -98.8 86.4 + -98.2 77.5 + -97.5 68.7 + -96.6 60.0 + -95.6 51.3 + -94.4 42.7 + -93.1 34.2 + -91.6 25.7 +REG_LINE: 63 + -100. -13.5 + -98.0 -21.1 + -95.5 -29.8 + -92.9 -38.4 + -90.1 -46.7 + -87.2 -54.9 + -84.1 -62.8 + -80.9 -70.5 + -77.5 -78.0 + -74.1 -85.2 + -70.5 -92.2 + -66.7 -98.9 + -62.9 -105. + -58.9 -112. + -54.8 -117. + -50.7 -123. + -46.4 -128. + -42.0 -133. + -37.6 -138. + -33.1 -142. + -28.4 -146. + -23.8 -150. + -19.0 -153. + -14.3 -156. + -9.41 -159. + -4.52 -161. + .403 -163. + 5.36 -165. + 10.3 -166. + 15.3 -167. + 20.4 -168. + 25.4 -168. + 30.4 -168. + 35.4 -167. + 40.4 -166. + 45.4 -165. + 50.4 -163. + 55.3 -161. + 60.2 -159. + 65.0 -156. + 69.8 -153. + 74.5 -150. + 79.2 -146. + 83.8 -142. + 88.4 -138. + 92.8 -133. + 97.2 -129. + 101. -123. + 106. -118. + 110. -112. + 114. -106. + 118. -99.2 + 121. -92.5 + 125. -85.5 + 128. -78.3 + 132. -70.8 + 135. -63.1 + 138. -55.2 + 141. -47.0 + 144. -38.7 + 146. -30.1 + 149. -21.4 + 150. -17.1 +REG_LINE: 9 + 150. 244. + 149. 248. + 146. 257. + 144. 266. + 141. 274. + 138. 282. + 135. 290. + 132. 298. + 131. 300. +REG_LINE: 9 + -79.7 300. + -80.9 297. + -84.1 290. + -87.2 282. + -90.1 274. + -92.9 265. + -95.5 257. + -98.0 248. + -100. 240. +REG_LINE: 54 + -100. -72.8 + -99.7 -73.6 + -96.3 -82.4 + -92.7 -91.0 + -89.0 -99.3 + -85.1 -107. + -81.1 -115. + -77.0 -123. + -72.7 -130. + -68.3 -137. + -63.8 -143. + -59.1 -149. + -54.4 -155. + -49.5 -161. + -44.6 -166. + -39.6 -171. + -34.4 -175. + -29.2 -179. + -24.0 -183. + -18.7 -186. + -13.3 -189. + -7.85 -192. + -2.38 -194. + 3.13 -196. + 8.66 -197. + 14.2 -198. + 19.8 -199. + 25.4 -199. + 30.9 -199. + 36.5 -198. + 42.1 -197. + 47.6 -196. + 53.1 -194. + 58.6 -192. + 64.0 -189. + 69.4 -186. + 74.7 -183. + 80.0 -179. + 85.2 -175. + 90.3 -171. + 95.3 -166. + 100. -161. + 105. -155. + 110. -150. + 115. -143. + 119. -137. + 123. -130. + 128. -123. + 132. -115. + 136. -108. + 140. -99.6 + 144. -91.3 + 147. -82.7 + 150. -75.3 +REG_LINE: 2 + -99.9 300. + -100. 300. +REG_LINE: 13 + -100. -121. + -96.2 -129. + -91.8 -138. + -87.2 -146. + -82.5 -154. + -77.7 -162. + -72.7 -169. + -67.6 -176. + -62.4 -182. + -57.0 -188. + -51.6 -194. + -46.1 -199. + -45.1 -200. +REG_LINE: 13 + 96.0 -200. + 96.8 -199. + 102. -194. + 108. -188. + 113. -182. + 118. -176. + 123. -169. + 128. -162. + 133. -154. + 138. -146. + 143. -138. + 147. -130. + 150. -123. +REG_LINE: 6 + -100. -165. + -97.4 -170. + -92.3 -178. + -87.0 -187. + -81.6 -194. + -77.4 -200. +REG_LINE: 6 + 128. -200. + 132. -195. + 138. -187. + 143. -179. + 148. -170. + 150. -167. +REG_LINE: 10 + 40.9 118. + 24.4 113. + 7.79 108. + -8.78 104. + -25.4 98.9 + -41.9 94.2 + -58.5 89.5 + -75.1 84.8 + -91.7 80.0 + -100. 77.7 +REG_LINE: 12 + 38.0 132. + 24.6 112. + 11.2 92.1 + -2.25 72.0 + -15.7 52.0 + -29.1 31.9 + -42.5 11.9 + -55.9 -8.13 + -69.3 -28.2 + -82.7 -48.2 + -96.1 -68.2 + -100. -74.0 +REG_LINE: 13 + 32.0 142. + 25.0 111. + 18.0 81.0 + 11.1 50.5 + 4.10 20.1 + -2.86 -10.4 + -9.83 -40.8 + -16.8 -71.3 + -23.8 -102. + -30.7 -132. + -37.7 -163. + -44.7 -193. + -46.3 -200. +REG_LINE: 12 + 24.4 145. + 25.5 111. + 26.7 77.8 + 27.9 44.4 + 29.1 11.0 + 30.3 -22.4 + 31.5 -55.8 + 32.7 -89.2 + 33.8 -123. + 35.0 -156. + 36.2 -189. + 36.6 -200. +REG_LINE: 14 + 17.0 140. + 26.1 112. + 35.1 83.4 + 44.2 55.2 + 53.2 27.0 + 62.3 -1.14 + 71.3 -29.3 + 80.3 -57.5 + 89.4 -85.7 + 98.4 -114. + 107. -142. + 117. -170. + 126. -198. + 126. -200. +REG_LINE: 11 + 11.8 128. + 26.4 112. + 41.1 96.3 + 55.8 80.3 + 70.5 64.2 + 85.2 48.2 + 99.9 32.1 + 115. 16.1 + 129. 0.199E-02 + 144. -16.1 + 150. -22.6 +REG_LINE: 10 + 9.84 113. + 26.6 113. + 43.3 113. + 60.1 113. + 76.8 113. + 93.5 113. + 110. 113. + 127. 113. + 144. 113. + 150. 113. +REG_LINE: 11 + 11.8 98.5 + 26.4 115. + 41.1 131. + 55.8 147. + 70.5 163. + 85.2 179. + 99.9 195. + 115. 211. + 129. 227. + 144. 243. + 150. 250. +REG_LINE: 9 + 17.0 87.1 + 26.1 115. + 35.1 143. + 44.2 172. + 53.2 200. + 62.3 228. + 71.3 256. + 80.3 284. + 85.4 300. +REG_LINE: 8 + 24.4 82.3 + 25.5 116. + 26.7 149. + 27.9 182. + 29.1 216. + 30.3 249. + 31.5 283. + 32.1 300. +REG_LINE: 9 + 32.0 85.0 + 25.0 115. + 18.0 146. + 11.1 176. + 4.10 207. + -2.86 237. + -9.83 268. + -16.8 298. + -17.2 300. +REG_LINE: 12 + 38.0 94.7 + 24.6 115. + 11.2 135. + -2.25 155. + -15.7 175. + -29.1 195. + -42.5 215. + -55.9 235. + -69.3 255. + -82.7 275. + -96.1 295. + -99.4 300. +REG_LINE: 10 + 40.9 109. + 24.4 114. + 7.79 118. + -8.78 123. + -25.4 128. + -41.9 133. + -58.5 137. + -75.1 142. + -91.7 147. + -100. 149. +REG_LINE: 2 + 18.7 134. + 17.7 133. +REG_LINE: 2 + 20.4 129. + 19.4 128. +REG_LINE: 2 + 22.1 124. + 21.1 123. +REG_LINE: 2 + 23.8 119. + 22.8 117. +REG_LINE: 2 + 27.2 108. + 28.2 110. +REG_LINE: 2 + 28.8 103. + 29.8 104. +REG_LINE: 2 + 30.5 97.7 + 31.5 99.1 +REG_LINE: 2 + 32.2 92.4 + 33.2 93.8 +REG_LINE: 2 + 35.6 81.9 + 36.6 83.3 +REG_LINE: 2 + 37.3 76.6 + 38.3 78.1 +REG_LINE: 2 + 39.0 71.4 + 40.0 72.8 +REG_LINE: 2 + 40.7 66.1 + 41.7 67.5 +REG_LINE: 2 + 44.0 55.6 + 45.0 57.0 +REG_LINE: 2 + 45.7 50.3 + 46.7 51.8 +REG_LINE: 2 + 47.4 45.1 + 48.4 46.5 +REG_LINE: 2 + 49.1 39.8 + 50.1 41.2 +REG_LINE: 2 + 52.5 29.3 + 53.5 30.7 +REG_LINE: 2 + 54.2 24.0 + 55.2 25.5 +REG_LINE: 2 + 55.9 18.8 + 56.9 20.2 +REG_LINE: 2 + 57.5 13.5 + 58.6 14.9 +REG_LINE: 2 + 60.9 2.99 + 61.9 4.43 +REG_LINE: 2 + 62.6 -2.26 + 63.6 -.831 +REG_LINE: 2 + 64.3 -7.52 + 65.3 -6.09 +REG_LINE: 2 + 66.0 -12.8 + 67.0 -11.3 +REG_LINE: 2 + 69.4 -23.3 + 70.4 -21.9 +REG_LINE: 2 + 71.1 -28.6 + 72.1 -27.1 +REG_LINE: 2 + 72.7 -33.8 + 73.7 -32.4 +REG_LINE: 2 + 74.4 -39.1 + 75.4 -37.6 +REG_LINE: 2 + 77.8 -49.6 + 78.8 -48.2 +REG_LINE: 2 + 79.5 -54.9 + 80.5 -53.4 +REG_LINE: 2 + 81.2 -60.1 + 82.2 -58.7 +REG_LINE: 2 + 82.9 -65.4 + 83.9 -63.9 +REG_LINE: 2 + 86.3 -75.9 + 87.3 -74.5 +REG_LINE: 2 + 87.9 -81.2 + 88.9 -79.7 +REG_LINE: 2 + 89.6 -86.4 + 90.6 -85.0 +REG_LINE: 2 + 91.3 -91.7 + 92.3 -90.2 +REG_LINE: 2 + 94.7 -102. + 95.7 -101. +REG_LINE: 2 + 96.4 -107. + 97.4 -106. +REG_LINE: 2 + 98.1 -113. + 99.1 -111. +REG_LINE: 2 + 99.8 -118. + 101. -117. +REG_LINE: 2 + 103. -128. + 104. -127. +REG_LINE: 2 + 105. -134. + 106. -132. +REG_LINE: 2 + 107. -139. + 108. -138. +REG_LINE: 2 + 108. -144. + 109. -143. +REG_LINE: 2 + 112. -155. + 113. -153. +REG_LINE: 2 + 113. -160. + 114. -159. +REG_LINE: 2 + 115. -165. + 116. -164. +REG_LINE: 2 + 117. -171. + 118. -169. +REG_LINE: 2 + 120. -181. + 121. -180. +REG_LINE: 2 + 122. -186. + 123. -185. +REG_LINE: 2 + 123. -192. + 124. -190. +REG_LINE: 2 + 125. -197. + 126. -195. +REG_LINE: 2 + -80.3 169. + -81.8 170. +REG_LINE: 2 + -82.5 148. + -84.2 148. +REG_LINE: 2 + -83.7 126. + -85.5 126. +REG_LINE: 2 + -83.8 104. + -85.6 104. +REG_LINE: 2 + -80.7 61.1 + -82.3 60.3 +REG_LINE: 2 + -77.6 40.2 + -79.0 39.1 +REG_LINE: 2 + -73.4 19.9 + -74.7 18.7 +REG_LINE: 2 + -68.3 .672 + -69.4 -.674 +REG_LINE: 2 + -55.2 -34.3 + -56.0 -35.9 +REG_LINE: 2 + -47.4 -49.7 + -48.1 -51.3 +REG_LINE: 2 + -38.9 -63.4 + -39.5 -65.1 +REG_LINE: 2 + -29.7 -75.4 + -30.2 -77.1 +REG_LINE: 2 + -9.89 -93.6 + -10.2 -95.3 +REG_LINE: 2 + .619 -99.6 + .416 -101. +REG_LINE: 2 + 11.4 -103. + 11.3 -105. +REG_LINE: 2 + 22.3 -105. + 22.2 -107. +REG_LINE: 2 + 44.1 -102. + 44.2 -104. +REG_LINE: 2 + 54.7 -97.3 + 55.0 -99.1 +REG_LINE: 2 + 65.1 -90.4 + 65.4 -92.2 +REG_LINE: 2 + 75.1 -81.5 + 75.5 -83.2 +REG_LINE: 2 + 93.5 -57.9 + 94.1 -59.5 +REG_LINE: 2 + 102. -43.5 + 102. -45.1 +REG_LINE: 2 + 109. -27.5 + 110. -29.0 +REG_LINE: 2 + 116. -10.1 + 117. -11.5 +REG_LINE: 2 + 126. 28.3 + 128. 27.1 +REG_LINE: 2 + 130. 48.8 + 131. 47.9 +REG_LINE: 2 + 133. 70.0 + 134. 69.3 +REG_LINE: 2 + 134. 91.6 + 136. 91.3 +REG_LINE: 2 + 134. 135. + 136. 136. +REG_LINE: 2 + 133. 157. + 134. 158. +REG_LINE: 2 + 130. 178. + 131. 179. +REG_LINE: 2 + 126. 199. + 128. 200. +REG_LINE: 2 + 116. 237. + 117. 238. +REG_LINE: 2 + 109. 254. + 110. 256. +REG_LINE: 2 + 102. 270. + 102. 272. +REG_LINE: 2 + 93.5 285. + 94.1 286. +REG_LINE: 2 + -38.9 290. + -39.5 292. +REG_LINE: 2 + -47.4 277. + -48.1 278. +REG_LINE: 2 + -55.2 261. + -56.0 263. +REG_LINE: 2 + -68.3 226. + -69.4 228. +REG_LINE: 2 + -73.4 207. + -74.7 208. +REG_LINE: 2 + -77.6 187. + -79.0 188. +REG_LINE: 2 + -80.7 166. + -82.3 167. +REG_LINE: 2 + -83.8 123. + -85.6 123. +REG_LINE: 2 + -83.7 101. + -85.5 100. +REG_LINE: 2 + -82.5 78.9 + -84.2 78.4 +REG_LINE: 2 + -80.3 57.5 + -81.8 56.7 +REG_LINE: 15 + 25.5 113. + 24.9 115. + 24.3 117. + 23.7 119. + 23.1 121. + 22.5 123. + 21.9 125. + 21.2 127. + 20.6 128. + 20.0 130. + 19.4 132. + 18.8 134. + 18.2 136. + 17.6 138. + 17.0 140. +REG_LINE: 15 + 25.5 113. + 26.1 112. + 26.7 110. + 27.3 108. + 27.9 106. + 28.5 104. + 29.1 102. + 29.7 100. + 30.3 98.4 + 30.9 96.5 + 31.5 94.7 + 32.1 92.8 + 32.7 90.9 + 33.3 89.0 + 33.9 87.1 +REG_LINE: 15 + 33.9 87.1 + 34.5 85.3 + 35.1 83.4 + 35.7 81.5 + 36.3 79.6 + 36.9 77.8 + 37.5 75.9 + 38.1 74.0 + 38.7 72.1 + 39.3 70.2 + 39.9 68.4 + 40.5 66.5 + 41.1 64.6 + 41.8 62.7 + 42.4 60.8 +REG_LINE: 15 + 42.4 60.8 + 43.0 59.0 + 43.6 57.1 + 44.2 55.2 + 44.8 53.3 + 45.4 51.5 + 46.0 49.6 + 46.6 47.7 + 47.2 45.8 + 47.8 43.9 + 48.4 42.1 + 49.0 40.2 + 49.6 38.3 + 50.2 36.4 + 50.8 34.5 +REG_LINE: 15 + 50.8 34.5 + 51.4 32.7 + 52.0 30.8 + 52.6 28.9 + 53.2 27.0 + 53.8 25.2 + 54.4 23.3 + 55.0 21.4 + 55.6 19.5 + 56.2 17.6 + 56.8 15.8 + 57.4 13.9 + 58.0 12.0 + 58.6 10.1 + 59.2 8.25 +REG_LINE: 15 + 59.2 8.25 + 59.8 6.38 + 60.4 4.50 + 61.0 2.62 + 61.6 .740 + 62.3 -1.14 + 62.9 -3.02 + 63.5 -4.89 + 64.1 -6.77 + 64.7 -8.65 + 65.3 -10.5 + 65.9 -12.4 + 66.5 -14.3 + 67.1 -16.2 + 67.7 -18.0 +REG_LINE: 15 + 67.7 -18.0 + 68.3 -19.9 + 68.9 -21.8 + 69.5 -23.7 + 70.1 -25.6 + 70.7 -27.4 + 71.3 -29.3 + 71.9 -31.2 + 72.5 -33.1 + 73.1 -34.9 + 73.7 -36.8 + 74.3 -38.7 + 74.9 -40.6 + 75.5 -42.5 + 76.1 -44.3 +REG_LINE: 15 + 76.1 -44.3 + 76.7 -46.2 + 77.3 -48.1 + 77.9 -50.0 + 78.5 -51.9 + 79.1 -53.7 + 79.7 -55.6 + 80.3 -57.5 + 80.9 -59.4 + 81.5 -61.2 + 82.2 -63.1 + 82.8 -65.0 + 83.4 -66.9 + 84.0 -68.8 + 84.6 -70.6 +REG_LINE: 15 + 84.6 -70.6 + 85.2 -72.5 + 85.8 -74.4 + 86.4 -76.3 + 87.0 -78.1 + 87.6 -80.0 + 88.2 -81.9 + 88.8 -83.8 + 89.4 -85.7 + 90.0 -87.5 + 90.6 -89.4 + 91.2 -91.3 + 91.8 -93.2 + 92.4 -95.1 + 93.0 -96.9 +REG_LINE: 15 + 93.0 -96.9 + 93.6 -98.8 + 94.2 -101. + 94.8 -103. + 95.4 -104. + 96.0 -106. + 96.6 -108. + 97.2 -110. + 97.8 -112. + 98.4 -114. + 99.0 -116. + 99.6 -118. + 100. -119. + 101. -121. + 101. -123. +REG_LINE: 15 + 101. -123. + 102. -125. + 103. -127. + 103. -129. + 104. -131. + 104. -133. + 105. -134. + 106. -136. + 106. -138. + 107. -140. + 107. -142. + 108. -144. + 109. -146. + 109. -148. + 110. -150. +REG_LINE: 15 + 110. -150. + 110. -151. + 111. -153. + 112. -155. + 112. -157. + 113. -159. + 114. -161. + 114. -163. + 115. -165. + 115. -166. + 116. -168. + 117. -170. + 117. -172. + 118. -174. + 118. -176. +REG_LINE: 14 + 118. -176. + 119. -178. + 120. -180. + 120. -181. + 121. -183. + 121. -185. + 122. -187. + 123. -189. + 123. -191. + 124. -193. + 124. -195. + 125. -196. + 126. -198. + 126. -200. +REG_LINE: 15 + -82.8 82.6 + -83.3 90.3 + -83.6 98.1 + -83.8 106. + -83.9 114. + -83.8 122. + -83.6 129. + -83.3 137. + -82.8 145. + -82.1 153. + -81.4 160. + -80.5 168. + -79.4 175. + -78.3 183. + -77.0 190. +REG_LINE: 15 + -82.8 82.6 + -82.2 74.9 + -81.4 67.2 + -80.5 59.6 + -79.5 52.0 + -78.3 44.6 + -77.1 37.2 + -75.6 29.9 + -74.1 22.8 + -72.4 15.7 + -70.6 8.81 + -68.7 2.01 + -66.6 -4.64 + -64.4 -11.1 + -62.2 -17.5 +REG_LINE: 15 + -62.2 -17.5 + -59.8 -23.7 + -57.3 -29.7 + -54.7 -35.5 + -51.9 -41.1 + -49.1 -46.5 + -46.2 -51.8 + -43.2 -56.8 + -40.2 -61.6 + -37.0 -66.1 + -33.7 -70.5 + -30.4 -74.6 + -27.0 -78.5 + -23.6 -82.1 + -20.0 -85.5 +REG_LINE: 15 + -20.0 -85.5 + -16.5 -88.6 + -12.8 -91.5 + -9.15 -94.1 + -5.42 -96.4 + -1.66 -98.5 + 2.14 -100. + 5.97 -102. + 9.83 -103. + 13.7 -104. + 17.6 -105. + 21.5 -105. + 25.4 -105. + 29.3 -105. + 33.2 -105. +REG_LINE: 15 + 33.2 -105. + 37.1 -104. + 41.0 -103. + 44.8 -102. + 48.7 -100. + 52.5 -98.5 + 56.2 -96.5 + 60.0 -94.2 + 63.6 -91.6 + 67.3 -88.7 + 70.9 -85.6 + 74.4 -82.2 + 77.8 -78.6 + 81.2 -74.7 + 84.6 -70.6 +REG_LINE: 15 + 84.6 -70.6 + 87.8 -66.3 + 91.0 -61.7 + 94.1 -56.9 + 97.1 -51.9 + 100. -46.7 + 103. -41.3 + 105. -35.7 + 108. -29.9 + 111. -23.9 + 113. -17.7 + 115. -11.4 + 117. -4.87 + 120. 1.78 + 121. 8.56 +REG_LINE: 15 + 121. 8.56 + 123. 15.5 + 125. 22.5 + 127. 29.7 + 128. 37.0 + 129. 44.3 + 130. 51.8 + 131. 59.3 + 132. 66.9 + 133. 74.6 + 134. 82.3 + 134. 90.0 + 135. 97.8 + 135. 106. + 135. 113. +REG_LINE: 15 + 135. 113. + 135. 121. + 135. 129. + 134. 137. + 134. 145. + 133. 152. + 132. 160. + 131. 168. + 130. 175. + 129. 183. + 128. 190. + 127. 197. + 125. 204. + 123. 211. + 121. 218. +REG_LINE: 15 + 121. 218. + 120. 225. + 117. 232. + 115. 238. + 113. 245. + 111. 251. + 108. 257. + 105. 263. + 103. 268. + 100. 274. + 97.1 279. + 94.1 284. + 91.0 289. + 87.8 293. + 84.6 298. +REG_LINE: 2 + 84.6 298. + 82.5 300. +REG_LINE: 12 + -31.6 300. + -33.7 297. + -37.0 293. + -40.2 288. + -43.2 284. + -46.2 279. + -49.1 273. + -51.9 268. + -54.7 262. + -57.3 257. + -59.8 251. + -62.2 244. +REG_LINE: 15 + -62.2 244. + -64.4 238. + -66.6 232. + -68.7 225. + -70.6 218. + -72.4 211. + -74.1 204. + -75.6 197. + -77.1 190. + -78.3 182. + -79.5 175. + -80.5 167. + -81.4 160. + -82.2 152. + -82.8 144. +REG_LINE: 15 + -82.8 144. + -83.3 137. + -83.6 129. + -83.8 121. + -83.9 113. + -83.8 105. + -83.6 97.5 + -83.3 89.8 + -82.8 82.0 + -82.1 74.3 + -81.4 66.7 + -80.5 59.0 + -79.4 51.5 + -78.3 44.1 + -77.0 36.7 +REG_LINE: 15 + -82.8 144. + -83.3 137. + -83.6 129. + -83.8 121. + -83.9 113. + -83.8 105. + -83.6 97.5 + -83.3 89.8 + -82.8 82.0 + -82.1 74.3 + -81.4 66.7 + -80.5 59.0 + -79.4 51.5 + -78.3 44.1 + -77.0 36.7 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '0.0' + 27.8 114. BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '50.0' + 36.3 87.9 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '100.0' + 44.7 61.6 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '150.0' + 53.2 35.3 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '200.0' + 61.6 9.02 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '250.0' + 70.1 -17.3 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '300.0' + 78.5 -43.6 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '350.0' + 86.9 -69.9 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '400.0' + 95.4 -96.2 BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '450.0' + 104. -122. BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '500.0' + 112. -149. BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '550.0' + 121. -175. BC .952 .306 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +Symbol = "p1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 2" # Axis Label + Symbol = "p2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Map2 = # Mapping between nodes 1 and 2 + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + InvB = 1 # Second Mapping used in inverse direction + MapA = # First component Mapping + Begin MathMap # Transformation using mathematical functions + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Fwd1 = "r=sqrt(x*x+y*y)" # Forward function 1 + Fwd2 = "theta=atan2(y,x)" # Forward function 2 + Inv1 = "x=r*cos(theta)" # Inverse function 1 + Inv2 = "y=r*sin(theta)" # Inverse function 2 + SimpFI = 1 # Forward-inverse pairs may simplify + SimpIF = 1 # Inverse-forward pairs may simplify + End MathMap + MapB = # Second component Mapping + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -101.5 # Shift for axis 1 + Sft2 = -201.5 # Shift for axis 2 + End WinMap + End CmpMap + End FrameSet + Begin FrameSet # Set of inter-related coordinate systems +# Title = "FK5 equatorial coordinates; mean equinox J2000.0; gnomonic projection" # Title of coordinate system +# Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain +# Epoch = 1977.77512999212 # Besselian epoch of observation +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# System = "FK5" # Coordinate system type +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Dir1 = 0 # Plot axis 1 in reverse direction +# Bot2 = -1.5707963267949 # Lowest legal axis value +# Top2 = 1.5707963267949 # Highest legal axis value + IsA Frame # Coordinate system description + Nframe = 2 # Number of Frames in FrameSet + Base = 1 # Index of base Frame + Currnt = 2 # Index of current Frame + Lnk2 = 1 # Node 2 is derived from node 1 + Frm1 = # Frame number 1 + Begin Frame # Coordinate system description + Title = "Pixel Coordinates" # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "GRID" # Coordinate system domain +# Lbl1 = "Pixel axis 1" # Label for axis 1 +# Lbl2 = "Pixel axis 2" # Label for axis 2 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Pixel axis 1" # Axis Label + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Pixel axis 2" # Axis Label + End Axis + End Frame + Frm2 = # Frame number 2 + Begin SkyFrame # Description of celestial coordinate system + Ident = " " # Permanent Object identification string + IsA Object # AST Object +# Title = "FK5 equatorial coordinates; mean equinox J2000.0; gnomonic projection" # Title of coordinate system + Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain + Epoch = 1977.77512999212 # Besselian epoch of observation +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 + System = "FK5" # Coordinate system type +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Dir1 = 0 # Plot axis 1 in reverse direction +# Bot2 = -1.5707963267949 # Lowest legal axis value +# Top2 = 1.5707963267949 # Highest legal axis value + Ax1 = # Axis number 1 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + Ax2 = # Axis number 2 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + IsA Frame # Coordinate system description + Proj = "gnomonic" # Description of sky projection + Eqnox = 2000 # Julian epoch of mean equinox + SRefIs = "Ignored" # Not rotated (ref. pos. is ignored) + SRef1 = 0 # Ref. pos. RA 0:00:00.0 + SRef2 = -1.57079633000002 # Ref. pos. Dec -90:00:00 + End SkyFrame + Map2 = # Mapping between nodes 1 and 2 + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -893.6318379289 # Shift for axis 1 + Sft2 = -223.8380193875 # Shift for axis 2 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = -3.25441534352674e-06 # Forward matrix value + M1 = -1.60367292352974e-08 # Forward matrix value + M2 = -1.812057487023e-08 # Forward matrix value + M3 = 3.25725533992408e-06 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WcsMap # FITS-WCS sky projection + Nin = 2 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Type = "TAN" # Gnomonic projection + End WcsMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 0 # Polar longitREG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-3.0' + -80.3 82.7 BC .997 0.724E-01 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-2.5' + -59.8 -16.6 BC .936 .352 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-2.0' + -18.4 -83.6 BC .673 .740 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-1.5' + 32.8 -102. BC -.145 .989 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-0.5' + 119. 9.22 BC -.965 .262 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '0.0' + 132. 113. BC -1.00 0.125E-02 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '0.5' + 119. 218. TC .964 .265 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '1.0' + 82.6 296. TC .787 .617 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '2.5' + -59.8 243. TC -.936 .352 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '3.0' + -80.3 144. TC -.997 0.724E-01 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 1 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: ' A FITS test' + 31.0 313. BC .000 1.00 + + + + + FITS test number 3 + ==================== + + + +AST_SHOW: + +REG_SINK: +SIMPLE = T / file does conform to FITS standard +BITPIX = 16 / number of bits per data pixel +NAXIS = 2 / number of data axes +NAXIS1 = 1787 / length of data axis 1 +NAXIS2 = 447 / length of data axis 2 +EXTEND = T / FITS dataset may contain extensions +COMMENT FITS (Flexible Image Transport System) format defined in Astronomy and +COMMENT Astrophysics Supplement Series v44/p363, v44/p371, v73/p359, v73/p365. +COMMENT Contact the NASA Science Office of Standards and Technology for the +COMMENT FITS Definition document #100 and other FITS information. +PLATENUM= '3665 ' / Plate number +EMULSION= 'IIIaJ ' / Kodak emulsion type +FILTER = 'GG395 ' / Schott glass filter type +PLTSCALE= '67.14 ' / [arcsec/mm] plate scale +FIELDNUM= '1 ' / Sky survey field number +TELESCOP= 'UKST ' / Telescope on which the plate was taken +TELETYPE= 'SCHM ' / Type of telescope +SITELAT = -0.5458410576565 / [radians] latitude of telescope +SITELONG= 2.601766194458 / [radians] longitude of telescope +LST = '00:20 ' / [hh:mm] local sidereal time at start of obs +INSTRUME= 'SuperCOSMOS I' / Measuring machine +DATE-MES= '2000-11-04' / [yyyy-mm-dd] Date of this plate measurement +NHKLINES= 146 / Number of lines from house-keeping file +HKLIN001= 'JOB.JOBNO UKJ001' +HKLIN002= 'JOB.DATE-MES 2000:11:04' +HKLIN003= 'JOB.TIME 12:51:09' +HKLIN004= 'JOB.INSTRUME SuperCOSMOS I' +HKLIN005= 'JOB.ORIGIN Royal Observatory Edinburgh' +HKLIN006= 'JOB.SOFTWARE /home/scosdev/v033' +HKLIN007= 'JOB.OPERATOR ebt' +HKLIN008= 'JOB.USER htm' +HKLIN009= 'JOB.USERREF NONE' +HKLIN010= 'JOB.UORIGIN ROE' +HKLIN011= 'JOB.UCOUNTRY uk' +HKLIN012= 'JOB.COMMENT Digital catalogue of the Sky' +HKLIN013= 'JOB.IAM_FILE iam.srt'/ / ' / +HKLIN014= 'PLATE.TELESCOP UKST' +HKLIN015= 'PLATE.TELTYPE SCHM' +HKLIN016= 'PLATE.PLATE 3665' +HKLIN017= 'PLATE.MATERIAL 3mm glass' +HKLIN018= 'PLATE.EMULSION IIIaJ' +HKLIN019= 'PLATE.FILTER GG395' +HKLIN020= 'PLATE.PSCALE 67.14' +HKLIN021= 'PLATE.FIELD 1' +HKLIN022= 'PLATE.RA_PNT 0' +HKLIN023= 'PLATE.DEC_PNT -90' +HKLIN024= 'PLATE.RADECSYS FK4' +HKLIN025= 'PLATE.EQUINOX 1950' +HKLIN026= 'PLATE.TIMESYS BESSELIAN' +HKLIN027= 'PLATE.EPOCH 1977.78'/ / ' / +HKLIN028= 'PLATE.EXPOSURE 75' +HKLIN029= 'PLATE.UTDATE 771011' +HKLIN030= 'PLATE.LST 0020' +HKLIN031= 'PLATE.MJD 43426.573008796' +HKLIN032= 'PLATE.TELLAT -0.54584105765654' +HKLIN033= 'PLATE.TELLONG 2.6017661944583' +HKLIN034= 'PLATE.TELHT 1145' +HKLIN035= 'PLATE.TEMP 273.155'/ / ' / +HKLIN036= 'PLATE.ATMOSP 1013.25'/ / ' / +HKLIN037= 'PLATE.HUMID 0.5' +HKLIN038= 'PLATE.WAVE 4500' +HKLIN039= 'PLATE.TROPL 0.0065' +HKLIN040= 'CALIBRATION.CALTYPE SPLINE' +HKLIN041= 'CALIBRATION.STEPWEDG KPNO' +HKLIN042= 'CALIBRATION.NSTEPS 8' +HKLIN043= 'MEASUREMENT.ORIENTAT news' +HKLIN044= 'MEASUREMENT.EMULPOS UP' +HKLIN045= 'MEASUREMENT.SCANFILT 14' +HKLIN046= 'MEASUREMENT.SOSP 552' +HKLIN047= 'MEASUREMENT.STEPSIZE 10' +HKLIN048= 'MEASUREMENT.SCANLEN 1152' +HKLIN049= 'MEASUREMENT.A-XMIN 1622000'/ / ' / +HKLIN050= 'MEASUREMENT.A-YMIN 1622000'/ / ' / +HKLIN051= 'MEASUREMENT.A-XMAX 33878000' +HKLIN052= 'MEASUREMENT.A-YMAX 33878000' +HKLIN053= 'MEASUREMENT.X_PNT 17500000' +HKLIN054= 'MEASUREMENT.Y_PNT 18000000' +HKLIN055= 'ANALYSIS.NPARAMS 32' +HKLIN056= 'ANALYSIS.AREACUT 8' +HKLIN057= 'ANALYSIS.AP-PARAM 1.07' +HKLIN058= 'DEBLEND.DB-PARAM 1.05' +HKLIN059= 'DEBLEND.DB-AMIN 16' +HKLIN060= 'DEBLEND.DB-AMAX 100000' +HKLIN061= 'DEBLEND.DB-ACUT 8' +HKLIN062= 'DEBLEND.DB-LEVEL 16' +HKLIN063= 'DEBLEND.SELECT PARENT+CHILD' +HKLIN064= 'SKY.SKYSQUAR 64' +HKLIN065= 'SKY.SKYDEFN MEDIAN' +HKLIN066= 'SKY.SKYFILTR bdkjunk'/ / ' / +HKLIN067= 'SKY.F-THRESH 8' +HKLIN068= 'SKY.F-SCLEN 4' +HKLIN069= 'THRESHOLDING.PCUT 10' +HKLIN070= 'IAMQC.AREAMIN 8' +HKLIN071= 'IAMQC.AREAMAX 77346' +HKLIN072= 'IAMQC.MINMAG -30515' +HKLIN073= 'IAMQC.MAXMAG -17954' +HKLIN074= 'IAMQC.MINELL 0.0004156232' +HKLIN075= 'IAMQC.MAXELL 1' +HKLIN076= 'IAMQC.MODELL 0.14' +HKLIN077= 'IAMQC.MODOR 91' +HKLIN078= 'IAMQC.MIDELL 0.21' +HKLIN079= 'IAMQC.MIDOR 93' +HKLIN080= 'IAMQC.MEANELL 0.2467037' +HKLIN081= 'IAMQC.MEANOR 91.63474' +HKLIN082= 'IAMQC.NUMOBJ 556985' +HKLIN083= 'IAMQC.PARENTS 486656' +HKLIN084= 'IAMQC.RANGING TRUE' +HKLIN085= 'IAMQC.LANE_1 15571' +HKLIN086= 'IAMQC.LANE_2 33207' +HKLIN087= 'IAMQC.LANE_3 51478' +HKLIN088= 'IAMQC.LANE_4 69944' +HKLIN089= 'IAMQC.LANE_5 89236' +HKLIN090= 'IAMQC.LANE_6 108416' +HKLIN091= 'IAMQC.LANE_7 127481' +HKLIN092= 'IAMQC.LANE_8 146699' +HKLIN093= 'IAMQC.LANE_9 166380' +HKLIN094= 'IAMQC.LANE_10 186126' +HKLIN095= 'IAMQC.LANE_11 205946' +HKLIN096= 'IAMQC.LANE_12 225915' +HKLIN097= 'IAMQC.LANE_13 245926' +HKLIN098= 'IAMQC.LANE_14 266574' +HKLIN099= 'IAMQC.LANE_15 287150' +HKLIN100= 'IAMQC.LANE_16 308087' +HKLIN101= 'IAMQC.LANE_17 328830' +HKLIN102= 'IAMQC.LANE_18 350253' +HKLIN103= 'IAMQC.LANE_19 370738' +HKLIN104= 'IAMQC.LANE_20 391722' +HKLIN105= 'IAMQC.LANE_21 412801' +HKLIN106= 'IAMQC.LANE_22 433795' +HKLIN107= 'IAMQC.LANE_23 454383' +HKLIN108= 'IAMQC.LANE_24 474711' +HKLIN109= 'IAMQC.LANE_25 495108' +HKLIN110= 'IAMQC.LANE_26 515755' +HKLIN111= 'IAMQC.LANE_27 536499' +HKLIN112= 'IAMQC.LANE_28 556985' +HKLIN113= 'XYTORADEC.STARCAT /sdata/scos/refcats/tycho2.FIT' +HKLIN114= 'XYTORADEC.BRIGHTLIM 9' +HKLIN115= 'XYTORADEC.C-EQUIN 2000' +HKLIN116= 'XYTORADEC.C-EQTSYS JULIAN' +HKLIN117= 'XYTORADEC.C-EPOCH 2000' +HKLIN118= 'XYTORADEC.C-EPTSYS JULIAN' +HKLIN119= 'XYTORADEC.R-EQUIN 2000' +HKLIN120= 'XYTORADEC.R-TSYS JULIAN' +HKLIN121= 'XYTORADEC.MAXITER 5000' +HKLIN122= 'XYTORADEC.RCRITINI 500000' +HKLIN123= 'XYTORADEC.RCRITABS 50000' +HKLIN124= 'XYTORADEC.RCRITREL 1' +HKLIN125= 'XYTORADEC.RCRITFIN 3' +HKLIN126= 'XYTORADEC.HARDCOPY /scos1/scos/UKJ001/UKJ001.ps' +HKLIN127= 'XYTORADEC.REFSMULT 5' +HKLIN128= 'XYTORADEC.RESDMULT 1000' +HKLIN129= 'XYTORADEC.RACOL RA' +HKLIN130= 'XYTORADEC.DECOL DEC' +HKLIN131= 'XYTORADEC.RAPMCOL PMRA' +HKLIN132= 'XYTORADEC.DECPMCOL PMDE' +HKLIN133= 'XYTORADEC.PLXCOL NONE' +HKLIN134= 'XYTORADEC.RVCOL NONE' +HKLIN135= 'XYTORADEC.MAGCOL VT' +HKLIN136= 'XYTORADEC.STARSC 2374' +HKLIN137= 'XYTORADEC.STARSU 1727' +HKLIN138= 'XYTORADEC.COEFFS_1 17.640343856524' +HKLIN139= 'XYTORADEC.COEFFS_2 -260.44151995641' +HKLIN140= 'XYTORADEC.COEFFS_3 -163.09155572601' +HKLIN141= 'XYTORADEC.COEFFS_4 17.504230442205' +HKLIN142= 'XYTORADEC.COEFFS_5 -163.08676953832' +HKLIN143= 'XYTORADEC.COEFFS_6 260.48817907668' +HKLIN144= 'XYTORADEC.DISTR -0.33333333333333' +HKLIN145= 'XYTORADEC.RA_PNT 0.54924996662137' +HKLIN146= 'XYTORADEC.DEC_PNT -1.5684931501781' +HISTORY = 'SuperCOSMOS image analysis and mapping mode (IAM and MM)' / +HISTORY = 'data written by xydcomp_ss.' / +HISTORY = 'Any questions/comments/suggestions/bug reports should be sent' / +HISTORY = 'to N.Hambly@roe.ac.uk' / +ASTSIGX = 0.37 / [arcsec] std. dev. of astrometric fit in X +ASTSIGY = 0.38 / [arcsec] std. dev. of astrometric fit in Y +PC001001= 1.0 / DEPRECATED - Axis rotation matrix +PC001002= 0.004927623810613 / DEPRECATED - Axis rotation matrix +PC002001= -0.005563056187788 / DEPRECATED - Axis rotation matrix +PC002002= 1.0 / DEPRECATED - Axis rotation matrix +CROTA2 = 0.3005532298491 / DEPRECATED - rotation of axis 2 +DATATYPE= 'INTEGER*2' / Type of data +DATUNITS= 'DENSITY ' / Units: transmission, density or intensity +XPIXELSZ= 9.997114974 / [microns] X pixel size +YPIXELSZ= 10.0 / [microns] Y pixel size +OBJCTRA = ' 0 0 0.000' / Centre Right Ascension (J2000) +OBJCTDEC= '-90 0 0.00' / Centre Declination (J2000) +OBJCTX = 16368.63183793 / [pixels] Centre X on plate +OBJCTY = 14740.83801939 / [pixels] Centre Y on plate + +Objects written: 1 + +Native Encoding: + +COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST +COMMENT AST WCS information in AST format AST +COMMENT AST See http://www.starlink.ac.uk/ast/ AST +COMMENT AST Beginning of AST data for FrameSet object AST +COMMENT AST ................................................................ AST +BEGAST_A= 'FrameSet' / Set of inter-related coordinate systems +NFRAME_A= 2 / Number of Frames in FrameSet +BASE_A = 1 / Index of base Frame +CURRNT_A= 2 / Index of current Frame +LNK2_A = 1 / Node 2 is derived from node 1 +FRM1_A = ' ' / Frame number 1 +BEGAST_B= 'Frame ' / Coordinate system description +TITLE_A = 'Pixel Coordinates' / Title of coordinate system +NAXES_A = 2 / Number of coordinate axes +DOMAIN_A= 'GRID ' / Coordinate system domain +AX1_A = ' ' / Axis number 1 +BEGAST_C= 'Axis ' / Coordinate axis +LABEL_A = 'Pixel axis 1' / Axis Label +ENDAST_A= 'Axis ' / End of object definition +AX2_A = ' ' / Axis number 2 +BEGAST_D= 'Axis ' / Coordinate axis +LABEL_B = 'Pixel axis 2' / Axis Label +ENDAST_B= 'Axis ' / End of object definition +ENDAST_C= 'Frame ' / End of object definition +FRM2_A = ' ' / Frame number 2 +BEGAST_E= 'SkyFrame' / Description of celestial coordinate system +IDENT_A = '" " ' / Permanent Object identification string +ISA_A = 'Object ' / AST Object +NAXES_B = 2 / Number of coordinate axes +EPOCH_A = 1977.77512999212 / Besselian epoch of observation +SYSTEM_A= 'FK5 ' / Coordinate system type +AX1_B = ' ' / Axis number 1 +BEGAST_F= 'SkyAxis ' / Celestial coordinate axis +ENDAST_D= 'SkyAxis ' / End of object definition +AX2_B = ' ' / Axis number 2 +BEGAST_G= 'SkyAxis ' / Celestial coordinate axis +ENDAST_E= 'SkyAxis ' / End of object definition +ISA_B = 'Frame ' / Coordinate system description +PROJ_A = 'gnomonic' / Description of sky projection +EQNOX_A = 2000.0 / Julian epoch of mean equinox +SREFIS_A= 'Ignored ' / Not rotated (ref. pos. is ignored) +SREF1_A = 0.0 / Ref. pos. RA 0:00:00.0 +SREF2_A = -1.57079633 / Ref. pos. Dec -90:00:00 +ENDAST_F= 'SkyFrame' / End of object definition +MAP2_A = ' ' / Mapping between nodes 1 and 2 +BEGAST_H= 'CmpMap ' / Compound Mapping +NIN_A = 2 / Number of input coordinates +ISSIMP_A= 1 / Mapping has been simplified +ISA_C = 'Mapping ' / Mapping between coordinate systems +MAPA_A = ' ' / First component Mapping +BEGAST_I= 'WinMap ' / Map one window on to another +NIN_B = 2 / Number of input coordinates +INVERT_A= 0 / Mapping not inverted +ISA_D = 'Mapping ' / Mapping between coordinate systems +SFT1_A = -893.6318379289 / Shift for axis 1 +SFT2_A = -223.8380193875 / Shift for axis 2 +ENDAST_G= 'WinMap ' / End of object definition +MAPB_A = ' ' / Second component Mapping +BEGAST_J= 'CmpMap ' / Compound Mapping +NIN_C = 2 / Number of input coordinates +ISA_E = 'Mapping ' / Mapping between coordinate systems +MAPA_B = ' ' / First component Mapping +BEGAST_K= 'MatrixMap' / Matrix transformation +NIN_D = 2 / Number of input coordinates +INVERT_B= 0 / Mapping not inverted +ISA_F = 'Mapping ' / Mapping between coordinate systems +M0_A = -3.25441534352674E-6/ Forward matrix value +M1_A = -1.60367292352974E-8/ Forward matrix value +M2_A = -1.812057487023E-8 / Forward matrix value +M3_A = 3.25725533992408E-6 / Forward matrix value +FORM_A = 'Full ' / Matrix storage form +ENDAST_H= 'MatrixMap' / End of object definition +MAPB_B = ' ' / Second component Mapping +BEGAST_L= 'CmpMap ' / Compound Mapping +NIN_E = 2 / Number of input coordinates +ISA_G = 'Mapping ' / Mapping between coordinate systems +INVA_A = 1 / First Mapping used in inverse direction +MAPA_C = ' ' / First component Mapping +BEGAST_M= 'WcsMap ' / FITS-WCS sky projection +NIN_F = 2 / Number of input coordinates +INVERT_C= 1 / Mapping inverted +ISA_H = 'Mapping ' / Mapping between coordinate systems +TYPE_A = 'TAN ' / Gnomonic projection +ENDAST_I= 'WcsMap ' / End of object definition +MAPB_C = ' ' / Second component Mapping +BEGAST_N= 'CmpMap ' / Compound Mapping +NIN_G = 2 / Number of input coordinates +ISA_I = 'Mapping ' / Mapping between coordinate systems +INVA_B = 1 / First Mapping used in inverse direction +MAPA_D = ' ' / First component Mapping +BEGAST_O= 'SphMap ' / Cartesian to Spherical mapping +NIN_H = 3 / Number of input coordinates +NOUT_A = 2 / Number of output coordinates +INVERT_D= 1 / Mapping inverted +ISA_J = 'Mapping ' / Mapping between coordinate systems +UNTRD_A = 1 / All input vectors have unit length +PLRLG_A = 0.0 / Polar longitude (rad.s) +ENDAST_J= 'SphMap ' / End of object definition +MAPB_D = ' ' / Second component Mapping +BEGAST_P= 'CmpMap ' / Compound Mapping +NIN_I = 3 / Number of input coordinates +NOUT_B = 2 / Number of output coordinates +ISA_K = 'Mapping ' / Mapping between coordinate systems +MAPA_E = ' ' / First component Mapping +BEGAST_Q= 'MatrixMap' / Matrix transformation +NIN_J = 3 / Number of input coordinates +INVERT_E= 0 / Mapping not inverted +ISA_L = 'Mapping ' / Mapping between coordinate systems +M0_B = -1.0 / Forward matrix value +M1_B = 1.0 / Forward matrix value +M2_B = -1.0 / Forward matrix value +FORM_B = 'Diagonal' / Matrix storage form +ENDAST_K= 'MatrixMap' / End of object definition +MAPB_E = ' ' / Second component Mapping +BEGAST_R= 'SphMap ' / Cartesian to Spherical mapping +NIN_K = 3 / Number of input coordinates +NOUT_C = 2 / Number of output coordinates +INVERT_F= 0 / Mapping not inverted +ISA_M = 'Mapping ' / Mapping between coordinate systems +UNTRD_B = 1 / All input vectors have unit length +PLRLG_B = 0.0 / Polar longitude (rad.s) +ENDAST_L= 'SphMap ' / End of object definition +ENDAST_M= 'CmpMap ' / End of object definition +ENDAST_N= 'CmpMap ' / End of object definition +ENDAST_O= 'CmpMap ' / End of object definition +ENDAST_P= 'CmpMap ' / End of object definition +ENDAST_Q= 'CmpMap ' / End of object definition +ENDAST_R= 'FrameSet' / End of object definition +COMMENT AST ................................................................ AST +COMMENT AST End of AST data for FrameSet object AST +COMMENT AST ---------------------------------------------------------------- AST + +ATTRIBUTES: + Colour(axis1) : 1 + Font(Stri) : 1 + Nout : 1 + Class : 4 + Tol : 0.100000E-01 + Gap(1) : .523599 + Border : 0 + Invert : 0 + TextLabGap : 0.100000E-01 + Nin : 2 + Current : 3 + Base : 1 + Nobject : 1 + RefCOUNT : 1 + +AST_GRID: +REG_LINE: 2 + 15.5 -136. + 15.4 -137. +REG_LINE: 2 + 18.6 -144. + 18.5 -146. +REG_LINE: 2 + 21.8 -149. + 21.8 -151. +REG_LINE: 2 + 25.1 -150. + 25.1 -154. +REG_LINE: 2 + 28.3 -149. + 28.4 -150. +REG_LINE: 2 + 31.5 -143. + 31.6 -145. +REG_LINE: 2 + 34.6 -135. + 34.7 -136. +REG_LINE: 2 + 37.6 -123. + 37.8 -127. +REG_LINE: 2 + 40.3 -108. + 40.4 -110. +REG_LINE: 2 + 42.7 -91.0 + 42.9 -92.7 +REG_LINE: 2 + 44.9 -71.2 + 45.2 -72.9 +REG_LINE: 2 + 46.7 -49.3 + 47.5 -53.0 +REG_LINE: 2 + 48.1 -25.8 + 48.6 -27.4 +REG_LINE: 2 + 49.2 -.928 + 49.9 -2.51 +REG_LINE: 2 + 49.8 24.8 + 51.0 23.5 +REG_LINE: 2 + 50.0 50.9 + 53.7 51.1 +REG_LINE: 2 + 49.7 77.1 + 50.9 78.4 +REG_LINE: 2 + 49.1 103. + 49.8 104. +REG_LINE: 2 + 48.0 127. + 48.5 129. +REG_LINE: 2 + 46.6 151. + 47.3 155. +REG_LINE: 2 + 44.7 173. + 45.0 174. +REG_LINE: 2 + 42.6 192. + 42.8 194. +REG_LINE: 2 + 40.1 209. + 40.2 211. +REG_LINE: 2 + 37.4 224. + 37.6 228. +REG_LINE: 2 + 34.4 235. + 34.5 237. +REG_LINE: 2 + 31.3 244. + 31.4 245. +REG_LINE: 2 + 28.1 248. + 28.1 250. +REG_LINE: 2 + 24.8 250. + 24.8 254. +REG_LINE: 2 + 21.6 248. + 21.5 250. +REG_LINE: 2 + 18.4 243. + 18.3 245. +REG_LINE: 2 + 15.3 234. + 15.2 236. +REG_LINE: 2 + 12.3 223. + 12.1 226. +REG_LINE: 2 + 9.62 208. + 9.45 210. +REG_LINE: 2 + 7.17 191. + 6.95 192. +REG_LINE: 2 + 5.02 171. + 4.74 173. +REG_LINE: 2 + 3.22 149. + 2.41 153. +REG_LINE: 2 + 1.78 125. + 1.27 127. +REG_LINE: 2 + .747 101. + -0.657E-02 102. +REG_LINE: 2 + .124 74.8 + -1.11 76.1 +REG_LINE: 2 + -0.740E-01 48.7 + -3.82 48.5 +REG_LINE: 2 + .156 22.6 + -1.02 21.3 +REG_LINE: 2 + .811 -3.08 + 0.841E-01 -4.67 +REG_LINE: 2 + 1.88 -27.8 + 1.38 -29.5 +REG_LINE: 2 + 3.34 -51.3 + 2.56 -54.9 +REG_LINE: 2 + 5.17 -73.0 + 4.89 -74.7 +REG_LINE: 2 + 7.34 -92.6 + 7.13 -94.3 +REG_LINE: 2 + 9.81 -110. + 9.65 -111. +REG_LINE: 2 + 12.5 -124. + 12.3 -128. +REG_LINE: 2 + 15.5 -136. + 15.4 -137. +REG_LINE: 2 + 18.6 -144. + 18.5 -146. +REG_LINE: 2 + 21.8 -149. + 21.8 -151. +REG_LINE: 2 + 25.1 -150. + 25.1 -154. +REG_LINE: 2 + 28.3 -149. + 28.4 -150. +REG_LINE: 2 + 31.5 -143. + 31.6 -145. +REG_LINE: 2 + 34.6 -135. + 34.7 -136. +REG_LINE: 2 + 24.9 74.8 + 26.5 75.6 +REG_LINE: 2 + 24.9 99.9 + 26.5 101. +REG_LINE: 2 + 24.9 125. + 26.5 126. +REG_LINE: 2 + 24.9 150. + 28.3 152. +REG_LINE: 2 + 24.9 175. + 26.5 176. +REG_LINE: 2 + 24.9 200. + 26.4 201. +REG_LINE: 2 + 24.8 225. + 26.4 226. +REG_LINE: 2 + 24.8 250. + 28.2 252. +REG_LINE: 2 + 24.8 275. + 26.4 276. +REG_LINE: 15 + 25.1 -150. + 24.1 -150. + 23.2 -150. + 22.3 -149. + 21.3 -148. + 20.4 -147. + 19.5 -146. + 18.6 -144. + 17.7 -142. + 16.8 -140. + 15.9 -137. + 15.1 -134. + 14.2 -131. + 13.4 -128. + 12.5 -124. +REG_LINE: 15 + 25.1 -150. + 26.0 -150. + 26.9 -150. + 27.9 -149. + 28.8 -148. + 29.7 -147. + 30.6 -145. + 31.5 -143. + 32.4 -141. + 33.3 -139. + 34.2 -136. + 35.1 -133. + 35.9 -130. + 36.7 -127. + 37.6 -123. +REG_LINE: 15 + 37.6 -123. + 38.4 -119. + 39.1 -115. + 39.9 -111. + 40.6 -106. + 41.4 -101. + 42.1 -96.2 + 42.7 -91.0 + 43.4 -85.6 + 44.0 -79.9 + 44.6 -74.2 + 45.2 -68.2 + 45.7 -62.1 + 46.2 -55.8 + 46.7 -49.3 +REG_LINE: 15 + 46.7 -49.3 + 47.1 -42.8 + 47.5 -36.1 + 47.9 -29.2 + 48.3 -22.3 + 48.6 -15.3 + 48.9 -8.13 + 49.2 -.928 + 49.4 6.35 + 49.6 13.7 + 49.7 21.1 + 49.8 28.5 + 49.9 36.0 + 50.0 43.4 + 50.0 50.9 +REG_LINE: 15 + 50.0 50.9 + 49.9 58.4 + 49.9 65.9 + 49.8 73.3 + 49.7 80.8 + 49.5 88.1 + 49.3 95.5 + 49.1 103. + 48.8 110. + 48.5 117. + 48.2 124. + 47.8 131. + 47.4 138. + 47.0 144. + 46.6 151. +REG_LINE: 15 + 46.6 151. + 46.1 157. + 45.6 164. + 45.0 170. + 44.4 176. + 43.8 181. + 43.2 187. + 42.6 192. + 41.9 197. + 41.2 202. + 40.5 207. + 39.7 212. + 38.9 216. + 38.2 220. + 37.4 224. +REG_LINE: 15 + 37.4 224. + 36.5 227. + 35.7 231. + 34.8 234. + 34.0 237. + 33.1 239. + 32.2 241. + 31.3 244. + 30.4 245. + 29.5 247. + 28.6 248. + 27.6 249. + 26.7 250. + 25.8 250. + 24.8 250. +REG_LINE: 15 + 24.8 250. + 23.9 250. + 23.0 249. + 22.0 249. + 21.1 248. + 20.2 246. + 19.3 245. + 18.4 243. + 17.5 241. + 16.6 238. + 15.7 236. + 14.8 233. + 14.0 230. + 13.1 226. + 12.3 223. +REG_LINE: 15 + 12.3 223. + 11.5 219. + 10.8 215. + 9.99 210. + 9.25 206. + 8.53 201. + 7.84 196. + 7.17 191. + 6.52 185. + 5.90 180. + 5.31 174. + 4.74 168. + 4.20 162. + 3.70 155. + 3.22 149. +REG_LINE: 15 + 3.22 149. + 2.77 142. + 2.35 136. + 1.96 129. + 1.61 122. + 1.29 115. + 1.00 108. + .747 101. + .526 93.3 + .339 85.9 + .187 78.6 + 0.696E-01 71.1 + -0.132E-01 63.7 + -0.611E-01 56.2 + -0.740E-01 48.7 +REG_LINE: 15 + -0.740E-01 48.7 + -0.519E-01 41.2 + 0.519E-02 33.7 + 0.971E-01 26.3 + .224 18.9 + .385 11.5 + .581 4.18 + .811 -3.08 + 1.07 -10.3 + 1.37 -17.4 + 1.70 -24.4 + 2.06 -31.3 + 2.46 -38.1 + 2.88 -44.7 + 3.34 -51.3 +REG_LINE: 15 + 3.34 -51.3 + 3.83 -57.7 + 4.34 -63.9 + 4.89 -70.0 + 5.46 -75.9 + 6.06 -81.6 + 6.69 -87.2 + 7.34 -92.6 + 8.02 -97.7 + 8.72 -103. + 9.44 -107. + 10.2 -112. + 11.0 -116. + 11.7 -120. + 12.5 -124. +REG_LINE: 15 + 12.5 -124. + 13.4 -128. + 14.2 -131. + 15.1 -134. + 15.9 -137. + 16.8 -140. + 17.7 -142. + 18.6 -144. + 19.5 -146. + 20.4 -147. + 21.3 -148. + 22.3 -149. + 23.2 -150. + 24.1 -150. + 25.1 -150. +REG_LINE: 15 + 25.1 -150. + 26.0 -150. + 26.9 -150. + 27.9 -149. + 28.8 -148. + 29.7 -147. + 30.6 -145. + 31.5 -143. + 32.4 -141. + 33.3 -139. + 34.2 -136. + 35.1 -133. + 35.9 -130. + 36.7 -127. + 37.6 -123. +REG_LINE: 15 + 25.1 -150. + 26.0 -150. + 26.9 -150. + 27.9 -149. + 28.8 -148. + 29.7 -147. + 30.6 -145. + 31.5 -143. + 32.4 -141. + 33.3 -139. + 34.2 -136. + 35.1 -133. + 35.9 -130. + 36.7 -127. + 37.6 -123. +REG_LINE: 15 + 24.9 49.8 + 24.9 57.0 + 24.9 64.1 + 24.9 71.3 + 24.9 78.4 + 24.9 85.6 + 24.9 92.7 + 24.9 99.9 + 24.9 107. + 24.9 114. + 24.9 121. + 24.9 128. + 24.9 136. + 24.9 143. + 24.9 150. +REG_LINE: 15 + 24.9 150. + 24.9 157. + 24.9 164. + 24.9 171. + 24.9 179. + 24.9 186. + 24.9 193. + 24.9 200. + 24.9 207. + 24.8 214. + 24.8 221. + 24.8 229. + 24.8 236. + 24.8 243. + 24.8 250. +REG_LINE: 8 + 24.8 250. + 24.8 257. + 24.8 264. + 24.8 272. + 24.8 279. + 24.8 286. + 24.8 293. + 24.8 300. +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '12' + 24.9 -148. BC -0.654E-01 .998 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '14' + 35.1 -123. BC -.978 .210 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '16' + 44.2 -49.2 BC -.997 0.716E-01 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '18' + 47.5 50.9 BC -1.00 -0.942E-03 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '20' + 44.1 151. TC .997 0.732E-01 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '22' + 34.9 223. TC .977 .213 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '0' + 24.9 248. TC -0.236E-01 1.00 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '2' + 14.8 222. TC -.978 .210 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '4' + 5.71 149. TC -.997 0.716E-01 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '6' + 2.43 48.7 BC 1.00 0.288E-03 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '8' + 5.83 -51.1 BC .997 0.732E-01 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '10' + 15.0 -124. BC .977 .215 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-90:00' + 22.4 49.8 BC -1.00 -0.615E-03 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '59' + 22.4 150. BC -1.00 -0.615E-03 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: '-89:58' + 22.3 250. BC -1.00 -0.615E-03 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 1 +REG_CAP: 2 +REG_SCALES: +REG_QCH: +REG_CAP: 0 +REG_CAP: 0 +REG_TEXT: ' A FITS test' + 30.9 313. BC .000 1.00 +ude (rad.s) + End SphMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = -1 # Forward matrix value + M1 = 1 # Forward matrix value + M2 = -1 # Forward matrix value + Form = "Diagonal" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 0 # Polar longitude (rad.s) + End SphMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End FrameSet diff --git a/ast/ast_tester/rigby.map b/ast/ast_tester/rigby.map new file mode 100644 index 0000000..6482149 --- /dev/null +++ b/ast/ast_tester/rigby.map @@ -0,0 +1,240 @@ + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = 0.1 # Forward matrix value + M1 = 1 # Forward matrix value + Form = "Diagonal" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -0.0500000000000114 # Shift for axis 1 + End WinMap + End CmpMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Sft1 = -3129 # Shift for axis 1 + Sft2 = -8 # Shift for axis 2 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin PermMap # Coordinate permutation + Nin = 2 # Number of input coordinates + Nout = 3 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Out1 = 1 # Output coordinate 1 = input coordinate 1 + Out2 = -1 # Output coordinate 2 = constant no. 1 + Out3 = 2 # Output coordinate 3 = input coordinate 2 + In1 = 1 # Input coordinate 1 = output coordinate 1 + In2 = 3 # Input coordinate 2 = output coordinate 3 + Nconst = 1 # Number of constants + Con1 = 232.84 # Constant number 1 + End PermMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = 0.812968257918776 # Forward matrix value + M1 = 0.582308004080753 # Forward matrix value + M2 = 0 # Forward matrix value + M3 = -0.582308004080753 # Forward matrix value + M4 = 0.812968257918776 # Forward matrix value + M5 = 0 # Forward matrix value + M6 = 0 # Forward matrix value + M7 = 0 # Forward matrix value + M8 = 1 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -1236.82078999603 # Shift for axis 1 + Scl1 = 0.999999999977888 # Scale factor for axis 1 + Sft2 = 586.515648677204 # Shift for axis 2 + Scl2 = 0.999999999985306 # Scale factor for axis 2 + Sft3 = 330420868230.796 # Shift for axis 3 + Scl3 = 551361.368168752 # Scale factor for axis 3 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = -3.28230370472069e-05 # Forward matrix value + M1 = -1.68687502681513e-05 # Forward matrix value + M2 = -1.68687502681513e-05 # Forward matrix value + M3 = 3.28230370472069e-05 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WcsMap # FITS-WCS sky projection + Nin = 2 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Type = "TAN" # Gnomonic projection + End WcsMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 0 # Polar longitude (rad.s) + End SphMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = 0.0160398354926887 # Forward matrix value + M1 = 0.967192049208341 # Forward matrix value + M2 = 0.253539471533602 # Forward matrix value + M3 = -0.0610660311421554 # Forward matrix value + M4 = 0.254046334254542 # Forward matrix value + M5 = -0.96526234770262 # Forward matrix value + M6 = -0.998004841430097 # Forward matrix value + M7 = 0 # Forward matrix value + M8 = 0.0631374412063651 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 4.96925054084174 # Polar longitude (rad.s) + End SphMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + MapB = # Second component Mapping + Begin SlaMap # Conversion between sky coordinate systems + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Nsla = 1 # Number of conversion steps + Sla1 = "EQGAL" # J2000.0 equatorial (FK5) to galactic (IAU 1958) + End SlaMap + End CmpMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 1 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin SpecMap # Conversion between spectral coordinate systems + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Nspec = 2 # Number of conversion steps + Spec1 = "FRTOVL" # Convert frequency to rel. velocity + Spec1a = 330587960100 # Rest frequency (Hz) + Spec2 = "VLTOVR" # Convert relativistic to radio velocity + End SpecMap + MapB = # Second component Mapping + Begin ZoomMap # Zoom about the origin + Nin = 1 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Zoom = 0.001 # Zoom factor + End ZoomMap + End CmpMap + End CmpMap + MapB = # Second component Mapping + Begin PermMap # Coordinate permutation + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + Out1 = 1 # Output coordinate 1 = input coordinate 1 + Out2 = 3 # Output coordinate 2 = input coordinate 3 + In1 = 1 # Input coordinate 1 = output coordinate 1 + In2 = -1 # Input coordinate 2 = constant no. 1 + In3 = 2 # Input coordinate 3 = output coordinate 2 + Nconst = 1 # Number of constants + Con1 = -0.000391559614368643 # Constant number 1 + End PermMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap diff --git a/ast/ast_tester/rigby.simp b/ast/ast_tester/rigby.simp new file mode 100644 index 0000000..fa78112 --- /dev/null +++ b/ast/ast_tester/rigby.simp @@ -0,0 +1,201 @@ + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin PermMap # Coordinate permutation + Nin = 2 # Number of input coordinates + Nout = 3 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Out1 = 1 # Output coordinate 1 = input coordinate 1 + Out2 = -1 # Output coordinate 2 = constant no. 1 + Out3 = 2 # Output coordinate 3 = input coordinate 2 + In1 = 1 # Input coordinate 1 = output coordinate 1 + In2 = 3 # Input coordinate 2 = output coordinate 3 + Nconst = 1 # Number of constants + Con1 = 232.84 # Constant number 1 + End PermMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = 8.1296825791877598 # Forward matrix value + M1 = 0.58230800408075301 # Forward matrix value + M2 = 0 # Forward matrix value + M3 = -5.8230800408075298 # Forward matrix value + M4 = 0.81296825791877603 # Forward matrix value + M5 = 0 # Forward matrix value + M6 = 0 # Forward matrix value + M7 = 0 # Forward matrix value + M8 = 1 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -3780.1919848386815 # Shift for axis 1 + Scl1 = 0.99999999997788802 # Scale factor for axis 1 + Sft2 = 2408.2662394170707 # Shift for axis 2 + Scl2 = 0.99999999998530598 # Scale factor for axis 2 + Sft3 = 330416457339.85065 # Shift for axis 3 + Scl3 = 551361.36816875194 # Scale factor for axis 3 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = -3.2823037047206903e-05 # Forward matrix value + M1 = -1.6868750268151298e-05 # Forward matrix value + M2 = -1.6868750268151298e-05 # Forward matrix value + M3 = 3.2823037047206903e-05 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WcsMap # FITS-WCS sky projection + Nin = 2 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Type = "TAN" # Gnomonic projection + End WcsMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 0 # Polar longitude (rad.s) + End SphMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = 0.016039835492688701 # Forward matrix value + M1 = 0.96719204920834101 # Forward matrix value + M2 = 0.25353947153360201 # Forward matrix value + M3 = -0.061066031142155398 # Forward matrix value + M4 = 0.25404633425454198 # Forward matrix value + M5 = -0.96526234770261998 # Forward matrix value + M6 = -0.99800484143009704 # Forward matrix value + M7 = 0 # Forward matrix value + M8 = 0.063137441206365094 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin SphMap # Cartesian to Spherical mapping + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + PlrLg = 4.96925054084174 # Polar longitude (rad.s) + End SphMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + MapB = # Second component Mapping + Begin SlaMap # Conversion between sky coordinate systems + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Nsla = 1 # Number of conversion steps + Sla1 = "EQGAL" # J2000.0 equatorial (FK5) to galactic (IAU 1958) + End SlaMap + End CmpMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 1 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin SpecMap # Conversion between spectral coordinate systems + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Nspec = 2 # Number of conversion steps + Spec1 = "FRTOVL" # Convert frequency to rel. velocity + Spec1a = 330587960100 # Rest frequency (Hz) + Spec2 = "VLTOVR" # Convert relativistic to radio velocity + End SpecMap + MapB = # Second component Mapping + Begin ZoomMap # Zoom about the origin + Nin = 1 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Zoom = 0.001 # Zoom factor + End ZoomMap + End CmpMap + End CmpMap + MapB = # Second component Mapping + Begin PermMap # Coordinate permutation + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + Out1 = 1 # Output coordinate 1 = input coordinate 1 + Out2 = 3 # Output coordinate 2 = input coordinate 3 + In1 = 1 # Input coordinate 1 = output coordinate 1 + In2 = -1 # Input coordinate 2 = constant no. 1 + In3 = 2 # Input coordinate 3 = output coordinate 2 + Nconst = 1 # Number of constants + Con1 = -0.00039155961436864302 # Constant number 1 + End PermMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap diff --git a/ast/ast_tester/scp.attr b/ast/ast_tester/scp.attr new file mode 100644 index 0000000..54434e8 --- /dev/null +++ b/ast/ast_tester/scp.attr @@ -0,0 +1 @@ +Grid=1,labelling=int diff --git a/ast/ast_tester/scp.box b/ast/ast_tester/scp.box new file mode 100644 index 0000000..76f5ba8 --- /dev/null +++ b/ast/ast_tester/scp.box @@ -0,0 +1 @@ +1.0 1.0 1500.0 1300.0 diff --git a/ast/ast_tester/scp.head b/ast/ast_tester/scp.head new file mode 100644 index 0000000..f35c6f4 --- /dev/null +++ b/ast/ast_tester/scp.head @@ -0,0 +1,204 @@ +SIMPLE = T / file does conform to FITS standard +BITPIX = 16 / number of bits per data pixel +NAXIS = 2 / number of data axes +NAXIS1 = 1787 / length of data axis 1 +NAXIS2 = 447 / length of data axis 2 +EXTEND = T / FITS dataset may contain extensions +COMMENT FITS (Flexible Image Transport System) format defined in Astronomy and +COMMENT Astrophysics Supplement Series v44/p363, v44/p371, v73/p359, v73/p365. +COMMENT Contact the NASA Science Office of Standards and Technology for the +COMMENT FITS Definition document #100 and other FITS information. +PLATENUM= '3665 ' / Plate number +EMULSION= 'IIIaJ ' / Kodak emulsion type +FILTER = 'GG395 ' / Schott glass filter type +PLTSCALE= '67.14 ' / [arcsec/mm] plate scale +FIELDNUM= '1 ' / Sky survey field number +EPOCH = 1.977780E+03 / Epoch of observation +DATE-OBS= '1977-10-11' / [yyyy-mm-dd] UT date of observation +TELESCOP= 'UKST ' / Telescope on which the plate was taken +TELETYPE= 'SCHM ' / Type of telescope +SITELAT = -5.458410576565E-01 / [radians] latitude of telescope +SITELONG= 2.601766194458E+00 / [radians] longitude of telescope +LST = '00:20 ' / [hh:mm] local sidereal time at start of obs +MJD-OBS = 4.342657300880E+04 / Modified Julian Date of observation +INSTRUME= 'SuperCOSMOS I' / Measuring machine +DATE-MES= '2000-11-04' / [yyyy-mm-dd] Date of this plate measurement +RADECSYS= 'FK5 ' / Reference frame for RA/DEC in original file +NHKLINES= 146 / Number of lines from house-keeping file +HKLIN001= 'JOB.JOBNO UKJ001' / +HKLIN002= 'JOB.DATE-MES 2000:11:04' / +HKLIN003= 'JOB.TIME 12:51:09' / +HKLIN004= 'JOB.INSTRUME SuperCOSMOS I' / +HKLIN005= 'JOB.ORIGIN Royal Observatory Edinburgh' / +HKLIN006= 'JOB.SOFTWARE /home/scosdev/v033' / +HKLIN007= 'JOB.OPERATOR ebt' / +HKLIN008= 'JOB.USER htm' / +HKLIN009= 'JOB.USERREF NONE' / +HKLIN010= 'JOB.UORIGIN ROE' / +HKLIN011= 'JOB.UCOUNTRY uk' / +HKLIN012= 'JOB.COMMENT Digital catalogue of the Sky' / +HKLIN013= 'JOB.IAM_FILE iam.srt' / +HKLIN014= 'PLATE.TELESCOP UKST' / +HKLIN015= 'PLATE.TELTYPE SCHM' / +HKLIN016= 'PLATE.PLATE 3665' / +HKLIN017= 'PLATE.MATERIAL 3mm glass' / +HKLIN018= 'PLATE.EMULSION IIIaJ' / +HKLIN019= 'PLATE.FILTER GG395' / +HKLIN020= 'PLATE.PSCALE 67.14' / +HKLIN021= 'PLATE.FIELD 1' / +HKLIN022= 'PLATE.RA_PNT 0' / +HKLIN023= 'PLATE.DEC_PNT -90' / +HKLIN024= 'PLATE.RADECSYS FK4' / +HKLIN025= 'PLATE.EQUINOX 1950' / +HKLIN026= 'PLATE.TIMESYS BESSELIAN' / +HKLIN027= 'PLATE.EPOCH 1977.78' / +HKLIN028= 'PLATE.EXPOSURE 75' / +HKLIN029= 'PLATE.UTDATE 771011' / +HKLIN030= 'PLATE.LST 0020' / +HKLIN031= 'PLATE.MJD 43426.573008796' / +HKLIN032= 'PLATE.TELLAT -0.54584105765654' / +HKLIN033= 'PLATE.TELLONG 2.6017661944583' / +HKLIN034= 'PLATE.TELHT 1145' / +HKLIN035= 'PLATE.TEMP 273.155' / +HKLIN036= 'PLATE.ATMOSP 1013.25' / +HKLIN037= 'PLATE.HUMID 0.5' / +HKLIN038= 'PLATE.WAVE 4500' / +HKLIN039= 'PLATE.TROPL 0.0065' / +HKLIN040= 'CALIBRATION.CALTYPE SPLINE' / +HKLIN041= 'CALIBRATION.STEPWEDG KPNO' / +HKLIN042= 'CALIBRATION.NSTEPS 8' / +HKLIN043= 'MEASUREMENT.ORIENTAT news' / +HKLIN044= 'MEASUREMENT.EMULPOS UP' / +HKLIN045= 'MEASUREMENT.SCANFILT 14' / +HKLIN046= 'MEASUREMENT.SOSP 552' / +HKLIN047= 'MEASUREMENT.STEPSIZE 10' / +HKLIN048= 'MEASUREMENT.SCANLEN 1152' / +HKLIN049= 'MEASUREMENT.A-XMIN 1622000' / +HKLIN050= 'MEASUREMENT.A-YMIN 1622000' / +HKLIN051= 'MEASUREMENT.A-XMAX 33878000' / +HKLIN052= 'MEASUREMENT.A-YMAX 33878000' / +HKLIN053= 'MEASUREMENT.X_PNT 17500000' / +HKLIN054= 'MEASUREMENT.Y_PNT 18000000' / +HKLIN055= 'ANALYSIS.NPARAMS 32' / +HKLIN056= 'ANALYSIS.AREACUT 8' / +HKLIN057= 'ANALYSIS.AP-PARAM 1.07' / +HKLIN058= 'DEBLEND.DB-PARAM 1.05' / +HKLIN059= 'DEBLEND.DB-AMIN 16' / +HKLIN060= 'DEBLEND.DB-AMAX 100000' / +HKLIN061= 'DEBLEND.DB-ACUT 8' / +HKLIN062= 'DEBLEND.DB-LEVEL 16' / +HKLIN063= 'DEBLEND.SELECT PARENT+CHILD' / +HKLIN064= 'SKY.SKYSQUAR 64' / +HKLIN065= 'SKY.SKYDEFN MEDIAN' / +HKLIN066= 'SKY.SKYFILTR bdkjunk' / +HKLIN067= 'SKY.F-THRESH 8' / +HKLIN068= 'SKY.F-SCLEN 4' / +HKLIN069= 'THRESHOLDING.PCUT 10' / +HKLIN070= 'IAMQC.AREAMIN 8' / +HKLIN071= 'IAMQC.AREAMAX 77346' / +HKLIN072= 'IAMQC.MINMAG -30515' / +HKLIN073= 'IAMQC.MAXMAG -17954' / +HKLIN074= 'IAMQC.MINELL 0.0004156232' / +HKLIN075= 'IAMQC.MAXELL 1' / +HKLIN076= 'IAMQC.MODELL 0.14' / +HKLIN077= 'IAMQC.MODOR 91' / +HKLIN078= 'IAMQC.MIDELL 0.21' / +HKLIN079= 'IAMQC.MIDOR 93' / +HKLIN080= 'IAMQC.MEANELL 0.2467037' / +HKLIN081= 'IAMQC.MEANOR 91.63474' / +HKLIN082= 'IAMQC.NUMOBJ 556985' / +HKLIN083= 'IAMQC.PARENTS 486656' / +HKLIN084= 'IAMQC.RANGING TRUE' / +HKLIN085= 'IAMQC.LANE_1 15571' / +HKLIN086= 'IAMQC.LANE_2 33207' / +HKLIN087= 'IAMQC.LANE_3 51478' / +HKLIN088= 'IAMQC.LANE_4 69944' / +HKLIN089= 'IAMQC.LANE_5 89236' / +HKLIN090= 'IAMQC.LANE_6 108416' / +HKLIN091= 'IAMQC.LANE_7 127481' / +HKLIN092= 'IAMQC.LANE_8 146699' / +HKLIN093= 'IAMQC.LANE_9 166380' / +HKLIN094= 'IAMQC.LANE_10 186126' / +HKLIN095= 'IAMQC.LANE_11 205946' / +HKLIN096= 'IAMQC.LANE_12 225915' / +HKLIN097= 'IAMQC.LANE_13 245926' / +HKLIN098= 'IAMQC.LANE_14 266574' / +HKLIN099= 'IAMQC.LANE_15 287150' / +HKLIN100= 'IAMQC.LANE_16 308087' / +HKLIN101= 'IAMQC.LANE_17 328830' / +HKLIN102= 'IAMQC.LANE_18 350253' / +HKLIN103= 'IAMQC.LANE_19 370738' / +HKLIN104= 'IAMQC.LANE_20 391722' / +HKLIN105= 'IAMQC.LANE_21 412801' / +HKLIN106= 'IAMQC.LANE_22 433795' / +HKLIN107= 'IAMQC.LANE_23 454383' / +HKLIN108= 'IAMQC.LANE_24 474711' / +HKLIN109= 'IAMQC.LANE_25 495108' / +HKLIN110= 'IAMQC.LANE_26 515755' / +HKLIN111= 'IAMQC.LANE_27 536499' / +HKLIN112= 'IAMQC.LANE_28 556985' / +HKLIN113= 'XYTORADEC.STARCAT /sdata/scos/refcats/tycho2.FIT' / +HKLIN114= 'XYTORADEC.BRIGHTLIM 9' / +HKLIN115= 'XYTORADEC.C-EQUIN 2000' / +HKLIN116= 'XYTORADEC.C-EQTSYS JULIAN' / +HKLIN117= 'XYTORADEC.C-EPOCH 2000' / +HKLIN118= 'XYTORADEC.C-EPTSYS JULIAN' / +HKLIN119= 'XYTORADEC.R-EQUIN 2000' / +HKLIN120= 'XYTORADEC.R-TSYS JULIAN' / +HKLIN121= 'XYTORADEC.MAXITER 5000' / +HKLIN122= 'XYTORADEC.RCRITINI 500000' / +HKLIN123= 'XYTORADEC.RCRITABS 50000' / +HKLIN124= 'XYTORADEC.RCRITREL 1' / +HKLIN125= 'XYTORADEC.RCRITFIN 3' / +HKLIN126= 'XYTORADEC.HARDCOPY /scos1/scos/UKJ001/UKJ001.ps' / +HKLIN127= 'XYTORADEC.REFSMULT 5' / +HKLIN128= 'XYTORADEC.RESDMULT 1000' / +HKLIN129= 'XYTORADEC.RACOL RA' / +HKLIN130= 'XYTORADEC.DECOL DEC' / +HKLIN131= 'XYTORADEC.RAPMCOL PMRA' / +HKLIN132= 'XYTORADEC.DECPMCOL PMDE' / +HKLIN133= 'XYTORADEC.PLXCOL NONE' / +HKLIN134= 'XYTORADEC.RVCOL NONE' / +HKLIN135= 'XYTORADEC.MAGCOL VT' / +HKLIN136= 'XYTORADEC.STARSC 2374' / +HKLIN137= 'XYTORADEC.STARSU 1727' / +HKLIN138= 'XYTORADEC.COEFFS_1 17.640343856524' / +HKLIN139= 'XYTORADEC.COEFFS_2 -260.44151995641' / +HKLIN140= 'XYTORADEC.COEFFS_3 -163.09155572601' / +HKLIN141= 'XYTORADEC.COEFFS_4 17.504230442205' / +HKLIN142= 'XYTORADEC.COEFFS_5 -163.08676953832' / +HKLIN143= 'XYTORADEC.COEFFS_6 260.48817907668' / +HKLIN144= 'XYTORADEC.DISTR -0.33333333333333' / +HKLIN145= 'XYTORADEC.RA_PNT 0.54924996662137' / +HKLIN146= 'XYTORADEC.DEC_PNT -1.5684931501781' / +HISTORY = 'SuperCOSMOS image analysis and mapping mode (IAM and MM)' / +HISTORY = 'data written by xydcomp_ss.' / +HISTORY = 'Any questions/comments/suggestions/bug reports should be sent' / +HISTORY = 'to N.Hambly@roe.ac.uk' / +ASTSIGX = 3.700000E-01 / [arcsec] std. dev. of astrometric fit in X +ASTSIGY = 3.800000E-01 / [arcsec] std. dev. of astrometric fit in Y +CRVAL1 = 0.000000000000E+00 / Axis 1 reference value +CRPIX1 = 8.936318379289E+02 / Axis 1 pixel value +CTYPE1 = 'RA---TAN' / Quantity represented by axis 1 +CRVAL2 = -9.000000018364E+01 / Axis 2 reference value +CRPIX2 = 2.238380193875E+02 / Axis 2 pixel value +CTYPE2 = 'DEC--TAN' / Quantity represented by axis 2 +CD1_1 = -1.864642639667E-04 / Co-ordinate transformation matrix +CD1_2 = -9.188369023766E-07 / Co-ordinate transformation matrix +CD2_1 = -1.038232462415E-06 / Co-ordinate transformation matrix +CD2_2 = 1.866269837741E-04 / Co-ordinate transformation matrix +PC001001= 9.999878591881E-01 / DEPRECATED - Axis rotation matrix +PC001002= 4.927623810613E-03 / DEPRECATED - Axis rotation matrix +PC002001= -5.563056187788E-03 / DEPRECATED - Axis rotation matrix +PC002002= 9.999845260832E-01 / DEPRECATED - Axis rotation matrix +CROTA2 = 3.005532298491E-01 / DEPRECATED - rotation of axis 2 +EQUINOX = 2.000000E+03 / Julian reference frame equinox +DATATYPE= 'INTEGER*2' / Type of data +DATUNITS= 'DENSITY ' / Units: transmission, density or intensity +XPIXELSZ= 9.997114974000E+00 / [microns] X pixel size +YPIXELSZ= 1.000000000000E+01 / [microns] Y pixel size +OBJCTRA = ' 0 0 0.000' / Centre Right Ascension (J2000) +OBJCTDEC= '-90 0 0.00' / Centre Declination (J2000) +OBJCTX = 1.636863183793E+04 / [pixels] Centre X on plate +OBJCTY = 1.474083801939E+04 / [pixels] Centre Y on plate +END diff --git a/ast/ast_tester/serpens.attr b/ast/ast_tester/serpens.attr new file mode 100644 index 0000000..496403c --- /dev/null +++ b/ast/ast_tester/serpens.attr @@ -0,0 +1 @@ +border=1 diff --git a/ast/ast_tester/serpens.box b/ast/ast_tester/serpens.box new file mode 100644 index 0000000..f9576e8 --- /dev/null +++ b/ast/ast_tester/serpens.box @@ -0,0 +1 @@ +0.5 0.5 150.5 120.5 diff --git a/ast/ast_tester/serpens.head b/ast/ast_tester/serpens.head new file mode 100644 index 0000000..0775604 --- /dev/null +++ b/ast/ast_tester/serpens.head @@ -0,0 +1,160 @@ +NAXIS1 = 150 / length of data axis 1 +NAXIS2 = 120 / length of data axis 2 +DATE-OBS= '2007-04-30T15:13:53.717'/ Date of observation +CRPIX1 = 75.910204 / Reference pixel on axis 1 +CRPIX2 = 60.359184 / Reference pixel on axis 2 +CRVAL1 = 1.220833333 / Value at ref. pixel on axis 1 +CRVAL2 = 277.5004167 / Value at ref. pixel on axis 2 +CTYPE1 = 'DEC--TAN' / Type of co-ordinate on axis 1 +CTYPE2 = 'RA---TAN' / Type of co-ordinate on axis 2 +CD1_1 = -0.001831773954 / Transformation matrix element +CD1_2 = -8.541702226E-4 / Transformation matrix element +CD2_1 = 0.0008541702226 / Transformation matrix element +CD2_2 = -0.001831773954 / Transformation matrix element +RADECSYS= 'FK5 ' / Reference frame for RA/DEC values +EQUINOX = 2000.0 / Epoch of reference equinox +DUT1 = -1.145603703E-6 / [d] UT1-UTC correction + + + + + + + + + + + + + + + + + + + + + + + + + + +EXP_TIME= 41.97277069 / [s] Median MAKECUBE exposure time +EFF_TIME= 11.13561535 / [s] Median MAKECUBE effective integration time +PROVCNT = 1 / Number of unique OBSIDs +OBS00001= 'acsis_98_20070430T151247'/ OBSID from component observation + + +HISTORY History structure created 2007 Apr 30 05:52:50.656 +HISTORY Update mode: NORMAL Current record: 8 + +HISTORY 1: 2007 Apr 30 05:52:53.959 - MAKECUBE (SMURF V0.2.2) +HISTORY User: operator Host: kolea Width: 72 +HISTORY Dataset: /jcmtdata/reduced/acsis/20070430/a20070430_00098_01_cube +HISTORY Parameters: AUTOGRID=TRUE CROTA=115 DETECTORS=! +HISTORY FBL=[4.8435931408225,0.024206080047514] +HISTORY FBR=[4.8456657339925,0.019762137343435] +HISTORY FLBND=[4.8407875332009,0.018441755319268,-426.75185625342] +HISTORY FUBND=[4.8456891772589,0.024229519070352,440.3284772626] +HISTORY FTL=[4.8408109789176,0.022909013956528] +HISTORY FTR=[4.8428837776034,0.018465194476559] GENVAR='tsys' +HISTORY IN=@^/jcmtdata/reduced/acsis/20070430/oractemppV8I2A.lis +HISTORY INWEIGHT=TRUE LBOUND=[-70,-41,-1024] OUT=@a20070430_00098_01_cube +HISTORY OUTCAT=! PIXSIZE=7.2761 MSG_FILTER='NORM' REFLAT='1:13:15' +HISTORY REFLON='18:30:00.1' SPARSE=FALSE SPECBOUNDS='-426.5402 440.1168' +HISTORY TRIM=TRUE WEIGHTS=FALSE SPREAD='nearest' SYSTEM='TRACKING' +HISTORY UBOUND=[69,46,1023] USEDETPOS=TRUE +HISTORY Software: /star/bin/smurf/smurf_mon + +HISTORY 2: 2007 Apr 30 05:52:59.952 - NDFCOPY (KAPPA 1.7-2) +HISTORY User: operator Host: kolea Width: 72 +HISTORY Dataset: /jcmtdata/reduced/acsis/20070430/a20070430_00098_01_em +HISTORY Parameters: IN=@a20070430_00098_01_cube(,,-820:819) LIKE=! +HISTORY OUT=@a20070430_00098_01_em TITLE=! TRIM=FALSE +HISTORY Software: /star/bin/kappa/ndfpack_mon + +HISTORY 3: 2007 Apr 30 05:53:04.009 - MFITTREND (KAPPA 1.7-2) +HISTORY User: operator Host: kolea Width: 72 +HISTORY Dataset: /jcmtdata/reduced/acsis/20070430/a20070430_00098_01_bl +HISTORY Parameters: ARANGES=[-820,-56,47,819] AUTO=TRUE AXIS=@3 CLIP=[2,2,2.5,3] +HISTORY IN=@a20070430_00098_01_em MODIFYIN=FALSE ORDER=0 +HISTORY OUT=@a20070430_00098_01_bl RMSCLIP=! SECTION='-70:69,-41:46,' +HISTORY SUBTRACT=TRUE TITLE=! VARIANCE=TRUE +HISTORY Software: /star/bin/kappa/kappa_mon + +HISTORY 4: 2007 Apr 30 05:53:17.048 - NDFCOPY (KAPPA 1.7-2) +HISTORY User: operator Host: kolea Width: 72 +HISTORY Dataset: /jcmtdata/reduced/acsis/20070430/ga20070430_98 +HISTORY Parameters: IN=@a20070430_00098_01_bl LIKE=! OUT=@ga20070430_98 +HISTORY TITLE='ga20070430_98' TRIM=FALSE +HISTORY Software: /star/bin/kappa/ndfpack_mon + +HISTORY 5: 2007 Apr 30 06:40:02.994 - WCSMOSAIC (KAPPA 1.7-2) +HISTORY User: operator Host: kolea Width: 72 +HISTORY Dataset: /jcmtdata/reduced/acsis/20070430/oractemppLv7wv +HISTORY Parameters: ACC=0.05 GENVAR=FALSE ILEVEL=2 +HISTORY IN=@^/jcmtdata/reduced/acsis/20070430/oractempyopUhZ.lis LBND=! +HISTORY LBOUND=[-70,-43,-820] MAXPIX=1000 METHOD='nearest' +HISTORY OUT=@/jcmtdata/reduced/acsis/20070430/oractemppLv7wv REF=! UBND=! +HISTORY UBOUND=[69,46,819] VARIANCE=TRUE WLIM=1E-10 +HISTORY Software: /star/bin/kappa/kappa_mon + +HISTORY 6: 2007 Apr 30 06:40:05.801 - NDFCOPY (KAPPA 1.7-2) +HISTORY User: operator Host: kolea Width: 72 +HISTORY Dataset: /jcmtdata/reduced/acsis/20070430/ga20070430_98 +HISTORY Parameters: IN=@/jcmtdata/reduced/acsis/20070430/oractemppLv7wv LIKE=! +HISTORY OUT=@ga20070430_98 TITLE=! TRIM=FALSE +HISTORY Software: /star/bin/kappa/ndfpack_mon + +HISTORY 7: 2007 May 10 10:42:40.627 - WCSMOSAIC (KAPPA 1.7-3) +HISTORY User: jbuckle Host: scubadev Width: 72 +HISTORY Dataset: /home/jbuckle/data/serpens_cube +HISTORY Parameters: ACC=0.05 GENVAR=FALSE ILEVEL=2 +HISTORY IN=@ga20070430_98,ga20070502_63_1 LBND=! LBOUND=[-77,-52,-820] +HISTORY MAXPIX=1000 METHOD='nearest' OUT=@serpens_cube REF=! +HISTORY UBOUND=[77,54,819] VARIANCE=TRUE WLIM=1E-10 +HISTORY Software: /star/bin/kappa/wcsmosaic + +HISTORY 8: 2007 May 17 12:04:41.724 - NDFCOPY (KAPPA 1.7-2) +HISTORY User: dsb Host: localhost.localdomain Width: 72 +HISTORY Dataset: /stardev/jaccvs/jcmt/scuba2/soft/smurf/makecube/jane +HISTORY Parameters: IN=@serpens_cube(~150,~120,0) LIKE=! OUT=@jane TITLE=! +HISTORY TRIM=TRUE TRIMWCS=TRUE USEAXIS=! +HISTORY Software: /stardev/cvs/star/bin/kappa/ndfcopy +END +XTENSION= 'IMAGE ' / IMAGE extension +BITPIX = -32 / number of bits per data pixel +NAXIS = 2 / number of data axes +NAXIS1 = 150 / length of data axis 1 +NAXIS2 = 120 / length of data axis 2 +PCOUNT = 0 / required keyword; must = 0 +GCOUNT = 1 / required keyword; must = 1 +LBOUND1 = -74 / Pixel origin along axis 1 +LBOUND2 = -58 / Pixel origin along axis 2 +OBJECT = 'ga20070430_98' / Title of the dataset +LABEL = 'T%s60+%v30+A%^50+%<20+*%+ corrected antenna ...'/ Label of the pri +BUNIT = 'K ' / Units of the primary array +DATE = '2007-05-17T11:05:09'/ file creation date (YYYY-MM-DDThh:mm:ss UT) +ORIGIN = 'Starlink Project, U.K.'/ Origin of this FITS file +BSCALE = 1.0 / True_value = BSCALE * FITS_value + BZERO +BZERO = 0.0 / True_value = BSCALE * FITS_value + BZERO +HDUCLAS1= 'NDF ' / Starlink NDF (hierarchical n-dim format) +HDUCLAS2= 'VARIANCE' / Array component subclass +EXTNAME = 'VARIANCE' / Array component +HDSTYPE = 'NDF ' / HDS data type of the component + +CRPIX1 = 75.910204 / Reference pixel on axis 1 +CRPIX2 = 60.359184 / Reference pixel on axis 2 +CRVAL1 = 1.220833333 / Value at ref. pixel on axis 1 +CRVAL2 = 277.5004167 / Value at ref. pixel on axis 2 +CTYPE1 = 'DEC--TAN' / Type of co-ordinate on axis 1 +CTYPE2 = 'RA---TAN' / Type of co-ordinate on axis 2 +CD1_1 = -0.001831773954 / Transformation matrix element +CD1_2 = -8.541702226E-4 / Transformation matrix element +CD2_1 = 0.0008541702226 / Transformation matrix element +CD2_2 = -0.001831773954 / Transformation matrix element +RADECSYS= 'FK5 ' / Reference frame for RA/DEC values +EQUINOX = 2000.0 / Epoch of reference equinox +DATE-OBS= '2007-04-30T15:13:53.717'/ Date of observation +END diff --git a/ast/ast_tester/simplify.f b/ast/ast_tester/simplify.f new file mode 100644 index 0000000..063ebd1 --- /dev/null +++ b/ast/ast_tester/simplify.f @@ -0,0 +1,123 @@ + PROGRAM SIMPLIFY + +* Usage: +* simplify <in file> <out file> + +* Description: +* Reads a Mapping from "in file" (as an AST dump), and writes out the +* simplified Mapping to "out file". + +* Parameters: +* in file +* A text file containing an AST dump of a Mapping. +* out file +* The output file. Contains an AST dump of the simplified Mapping +* on exit. + + + IMPLICIT NONE + INCLUDE 'AST_PAR' + EXTERNAL SOURCE, SINK + + INTEGER STATUS, OBJECT, IARGC, CHAN, CHR_LEN, OC, SMAP + CHARACTER FILE*80, OFILE*80, LINE*255 + + STATUS = 0 +* +* Check command line arguments have been supplied. +* + IF( IARGC() .LT. 2 ) THEN + WRITE(*,*) 'Usage: simplify <in file> <out file>' + RETURN + END IF + +* +* Open the name of the input text file. +* + CALL GETARG( 1, FILE ) + +* Attempt to read an object from the text file as an AST dump. + OPEN( UNIT=10, FILE=FILE, STATUS='OLD' ) + CHAN = AST_CHANNEL( SOURCE, AST_NULL, ' ', STATUS ) + OBJECT = AST_READ( CHAN, STATUS ) + CALL AST_ANNUL( CHAN, STATUS ) + CLOSE( 10 ) + +* +* Abort if no object was read. +* + IF( OBJECT .EQ. AST__NULL ) THEN + WRITE(*,*) 'simplify: no Mapping could be read from ', + : file( : chr_len( file ) ) + RETURN + +* +* Otherwise write out the simplified Mapping +* + ELSE + CALL GETARG( 2, OFILE ) + CALL DELETEFILE( OFILE ) + + SMAP = AST_SIMPLIFY( OBJECT, STATUS ) + + OPEN( UNIT=10, FILE=OFILE, STATUS='NEW' ) + CHAN = AST_CHANNEL( AST_NULL, SINK, ' ', STATUS ) + IF( AST_WRITE( CHAN, SMAP, STATUS ) .NE. 1 ) THEN + WRITE(*,*) 'simplify: Simplified Mapping read from ', + : file( : chr_len( file ) ),' could not be '// + : 'written out.' + END IF + CALL AST_ANNUL( CHAN, STATUS ) + CALL AST_ANNUL( SMAP, STATUS ) + CLOSE( 10 ) + END IF + + + END + + +* +* Delete a file if it exists. +* + SUBROUTINE DELETEFILE( FILNAM ) + IMPLICIT NONE + + CHARACTER FILNAM*(*) + LOGICAL EXISTS + + INQUIRE ( FILE = FILNAM, + : EXIST = EXISTS ) + + IF( EXISTS ) THEN + OPEN ( UNIT=10, FILE=FILNAM, STATUS='OLD' ) + CLOSE ( 10, STATUS='DELETE' ) + END IF + + END + + +* +* SOURCE FUNCTION FOR AST_CHANNEL. +* + SUBROUTINE SOURCE( STATUS ) + IMPLICIT NONE + INTEGER STATUS + CHARACTER BUFFER*200 + READ( 10, '(A)', END=99 ) BUFFER + CALL AST_PUTLINE( BUFFER, LEN( BUFFER ), STATUS ) + RETURN + 99 CALL AST_PUTLINE( BUFFER, -1, STATUS ) + END + +* +* SINK FUNCTION FOR AST_CHANNEL. +* + SUBROUTINE SINK( STATUS ) + IMPLICIT NONE + INTEGER STATUS, L + CHARACTER BUFFER*200 + + CALL AST_GETLINE( BUFFER, L, STATUS ) + IF( L .GT. 0 ) WRITE( 10, '(A)' ) BUFFER( : L ) + + END diff --git a/ast/ast_tester/sip.fits-wcs b/ast/ast_tester/sip.fits-wcs new file mode 100644 index 0000000..92d29ed --- /dev/null +++ b/ast/ast_tester/sip.fits-wcs @@ -0,0 +1,289 @@ +SIMPLE = T / Fits standard +BITPIX = -32 / FOUR-BYTE SINGLE PRECISION FLOATING POINT +NAXIS = 2 / STANDARD FITS FORMAT +NAXIS1 = 256 / STANDARD FITS FORMAT +NAXIS2 = 256 / STANDARD FITS FORMAT +ORIGIN = 'Spitzer Science Center' / Organization generating this FITS file +CREATOR = 'S16.1.0 ' / SW version used to create this FITS file +TELESCOP= 'Spitzer ' / SPITZER Space Telescope +INSTRUME= 'IRAC ' / SPITZER Space Telescope instrument ID +CHNLNUM = 1 / 1 digit instrument channel number +EXPTYPE = 'sci ' / Exposure Type +REQTYPE = 'AOR ' / Request type (AOR, IER, or SER) +AOT_TYPE= 'IracMap ' / Observation template type +AORLABEL= '05cs-IRAC-2' / AOR Label +FOVID = 67 / Field of View ID +FOVNAME = 'IRAC_Center_of_3.6&5.8umArray' / Field of View Name + + / PROPOSAL INFORMATION + +OBSRVR = 'Ben Sugerman' / Observer Name (Last, First) +OBSRVRID= 14621 / Observer ID of Principal Investigator +PROCYCL = 6 / Proposal Cycle +PROGID = 30494 / Program ID +PROTITLE= 'Supernovae and the Origin of Dust in Galaxies: Follow-Up Observation' +PROGCAT = 30 / Program Category + + / TIME AND EXPOSURE INFORMATION + +DATE_OBS= '2007-06-29T03:15:33.555' / Date & time at DCE start +MJD_OBS = 54280.136 / [days] MJD at DCE start (,JD-2400000.5) +UTCS_OBS= 2.3635893E+8 / [sec] J2000 ephem. time at DCE start +SCLK_OBS= 8.675543E+8 / [sec] SCLK time (since 1/1/1980) at DCE start +SAMPTIME= 0.2 / [sec] Sample integration time +FRAMTIME= 12.0 / [sec] Time spent integrating (whole array) +COMMENT Photons in Well = Flux[photons/sec/pixel] * FRAMTIME +EXPTIME = 10.4 / [sec] Effective integration time per pixel +COMMENT DN per pixel = Flux[photons/sec/pixel] / GAIN * EXPTIME +INTRFDLY= 8.0 / [sec] Inter Frame Delay Time +AINTBEG = 107646.2 / [Secs since IRAC turn-on] Time of integ. start +ATIMEEND= 107658.16 / [Secs since IRAC turn-on] Time of integ. end +AFOWLNUM= 8 / Fowler number +AWAITPER= 44 / [0.2 sec] Wait period +ANUMREPS= 1 / Number of repeat integrations +AREADMOD= 0 / Full (0) or subarray (1) +HDRMODE = F / DCE taken in High Dynamic Range mode +ABARREL = 3 / Barrel shift +APEDSIG = 0 / 0=Normal, 1=Pedestal, 2=Signal + + / TARGET AND POINTING INFORMATION + +OBJECT = 'SN 2005cs' / Target Name +OBJTYPE = 'TargetFixedSingle' / Object Type +CRVAL1 = 202.48232 / [deg] RA at CRPIX1,CRPIX2 (using Pointing Recon +CRVAL2 = 47.175119 / [deg] DEC at CRPIX1,CRPIX2 (using Pointing Reco +RA_HMS = '13h29m55.8s' / [hh:mm:ss.s] CRVAL1 as sexagesimal +DEC_DMS = '+47d10m30s' / [dd:mm:ss] CRVAL2 as sexagesimal +RADESYS = 'ICRS ' / International Celestial Reference System +CD1_1 = 0.00024975688 / Corrected CD matrix element with Pointing Recon +CD1_2 = 0.00023017781 / Corrected CD matrix element with Pointing Recon +CD2_1 = 0.00023042852 / Corrected CD matrix element with Pointing Recon +CD2_2 = -2.4996577E-4 / Corrected CD matrix element with Pointing Reco +CTYPE1 = 'RA---TAN-SIP' / RA---TAN with distortion in pixel space +CTYPE2 = 'DEC--TAN-SIP' / DEC--TAN with distortion in pixel space +CRPIX1 = 128.0 / Reference pixel along axis 1 +CRPIX2 = 128.0 / Reference pixel along axis 2 +MJD-OBS = 51544.499 / Modified Julian Date of observation +DATE-OBS= '2000-01-01T11:58:55.816' / Date of observation +PXSCAL1 = -1.2233412 / [arcsec/pix] Scale for axis 1 at CRPIX1,CRPIX2 +PXSCAL2 = 1.2232836 / [arcsec/pix] Scale for axis 2 at CRPIX1,CRPIX2 +CRDER1 = 4.0250976E-5 / [deg] Uncertainty in CRVAL1 +CRDER2 = 3.4274613E-5 / [deg] Uncertainty in CRVAL2 +UNCRTPA = 0.00037878784 / [deg] Uncertainty in position angle +CSDRADEC= 4.7597178E-7 / [deg] Costandard deviation in RA and Dec +SIGRA = 0.033948714 / [arcsec] RMS dispersion of RA over DCE +SIGDEC = 0.063768266 / [arcsec] RMS dispersion of DEC over DCE +SIGPA = 1.3646427 / [arcsec] RMS dispersion of PA over DCE +PA = 137.35998 / [deg] Position angle of axis 2 (E of N) (was OR +RA_RQST = 202.48212 / [deg] Requested RA at CRPIX1, CRPIX2 +DEC_RQST= 47.175079 / [deg] Requested Dec at CRPIX1, CRPIX2 +PM_RA = 0.0 / [arcsec/yr] Proper Motion in RA (J2000) +PM_DEC = 0.0 / [arcsec/yr] Proper Motion in Dec (J200) +RMS_JIT = 0.007683034 / [arcsec] RMS jitter during DCE +RMS_JITY= 0.0051507034 / [arcsec] RMS jitter during DCE along Y +RMS_JITZ= 0.0057008128 / [arcsec] RMS jitter during DCE along Z +SIG_JTYZ= 0.0023780641 / [arcsec] Costadard deviation of jitter in YZ +PTGDIFF = 0.52510652 / [arcsec] Offset btwn actual and rqsted pntng +PTGDIFFX= 0.46966798 / [pixels] rqsted - actual pntng along axis 1 +PTGDIFFY= -0.2352852 / [pixels] rqsted - actual pntng along axis 2 +RA_REF = 202.47237 / [deg] Commanded RA (J2000) of ref. position +DEC_REF = 47.1745 / [deg] Commanded Dec (J2000) of ref. position +USEDBPHF= T / T if Boresight Pointing History File was used +BPHFNAME= 'SBPHF.0867542400.031.pntg' / Boresight Pointing History Filename +FOVVERSN= 'BodyFrames_FTU_14a.xls' / FOV/BodyFrames file version used +RECONFOV= 'IRAC_Center_of_3.6umArray' / Reconstructed Field of View +RARFND = 202.48232 / [deg] Refined RA +DECRFND = 47.175121 / [deg] Refined DEC +CT2RFND = 137.35905 / [deg] Refined CROT2 +ERARFND = 2.332304E-6 / [deg] Error in RARFND value +EDECRFND= 2.332411E-6 / [deg] Error in DECRFND value +ECT2RFND= 0.00054069905 / [deg] Error in CT2RFND value +NASTROM = 12 / Astrometric sources for absolute refinement +ORIG_RA = 202.48206 / [deg] Original RA from raw BPHF (without pointi +ORIG_DEC= 47.175072 / [deg] Original Dec from raw BPHF (without point +ORIGCD11= 0.00024975633 / [deg/pix] Original CD1_1 element (without point +ORIGCD12= 0.00023017843 / [deg/pix] Original CD1_2 element (without point +ORIGCD21= 0.00023042914 / [deg/pix] Original CD2_1 element (without point +ORIGCD22= -2.499652E-4 / [deg/pix] Original CD2_2 element (without point + + + + / DISTORTION KEYWORDS + +A_ORDER = 3 / polynomial order, axis 1, detector to sky +A_0_2 = 2.9656E-6 / distortion coefficient +A_0_3 = 3.7746E-9 / distortion coefficient +A_1_1 = 2.1886E-5 / distortion coefficient +A_1_2 = -1.6847E-7 / distortion coefficient +A_2_0 = -2.3863E-5 / distortion coefficient +A_2_1 = -8.561E-9 / distortion coefficient +A_3_0 = -1.4172E-7 / distortion coefficient +A_DMAX = 1.394 / [pixel] maximum correction +B_ORDER = 3 / polynomial order, axis 2, detector to sky +B_0_2 = 2.31E-5 / distortion coefficient +B_0_3 = -1.6168E-7 / distortion coefficient +B_1_1 = -2.4386E-5 / distortion coefficient +B_1_2 = -5.7813E-9 / distortion coefficient +B_2_0 = 2.1197E-6 / distortion coefficient +B_2_1 = -1.6583E-7 / distortion coefficient +B_3_0 = -2.0249E-8 / distortion coefficient +B_DMAX = 1.501 / [pixel] maximum correction +AP_ORDER= 3 / polynomial order, axis 1, sky to detector +AP_0_1 = -6.4275E-7 / distortion coefficient +AP_0_2 = -2.9425E-6 / distortion coefficient +AP_0_3 = -3.582E-9 / distortion coefficient +AP_1_0 = -1.4897E-5 / distortion coefficient +AP_1_1 = -2.225E-5 / distortion coefficient +AP_1_2 = 1.7195E-7 / distortion coefficient +AP_2_0 = 2.4146E-5 / distortion coefficient +AP_2_1 = 6.709E-9 / distortion coefficient +AP_3_0 = 1.4492E-7 / distortion coefficient +BP_ORDER= 3 / polynomial order, axis 2, sky to detector +BP_0_1 = -1.6588E-5 / distortion coefficient +BP_0_2 = -2.3424E-5 / distortion coefficient +BP_0_3 = 1.651E-7 / distortion coefficient +BP_1_0 = -2.6783E-6 / distortion coefficient +BP_1_1 = 2.4753E-5 / distortion coefficient +BP_1_2 = 3.8917E-9 / distortion coefficient +BP_2_0 = -2.151E-6 / distortion coefficient +BP_2_1 = 1.7E-7 / distortion coefficient +BP_3_0 = 2.0482E-8 / distortion coefficient + + / PHOTOMETRY + +BUNIT = 'MJy/sr ' / Units of image data +FLUXCONV= 0.1088 / Flux Conv. factor (MJy/sr per DN/sec) +GAIN = 3.3 / e/DN conversion +RONOISE = 9.4 / [Electrons] Readout Noise from Array +ZODY_EST= 0.05291139 / [MJy/sr] Zodiacal Background Estimate +ISM_EST = 0.003677277 / [MJy/sr] Interstellar Medium Estimate +CIB_EST = 0.0 / [MJy/sr] Cosmic Infrared Background Estimate +SKYDRKZB= 0.044533 / [MJy/sr] Zodiacal Background Est of subracted s +SKYDKMED= 0.039081 / [MJy/sr] Median of Subtracted Skydark +SKDKFDLY= 11.554 / [sec] Average Frame Delay Time of Skydark +SKDKIDLY= 11.554 / [sec] Average Immediate Delay Time of Skydark + + / GENERAL MAPPING KEYWORDS + +DITHPOS = 2 / Current dither position + + / IRAC MAPPING KEYWORDS + +READMODE= 'FULL ' / Readout mode +DITHSCAL= 'medium ' / Dither scale (small, medium, large) + + / INSTRUMENT TELEMETRY DATA + +ASHTCON = 2 / Shutter condition (1:closed, 2: open) +AWEASIDE= 0 / WEA side in use (0:B, 1:A) +ACTXSTAT= 0 / Cmded transcal status +ATXSTAT = 0 / transcal status +ACFLSTAT= 0 / Cmded floodcal status +AFLSTAT = 0 / floodcal status +AVRSTUCC= -3.5 / [Volts] Cmded VRSTUC Bias +AVRSTBEG= -3.5114367 / [Volts] VRSTUC Bias at start integration +AVDETC = -2.75 / [Volts] Cmded VDET Bias +AVDETBEG= -2.7585216 / [Volts] VDET Bias at start of integration +AVGG1C = -3.65 / [Volts] Cmded VGG1 Bias +AVGG1BEG= -3.2078801 / [Volts] VGG1 Bias at start of integration +AVDDUCC = -3 / [Volts] Cmded VDDUC Bias +AVDDUBEG= -3 / [Volts] VDDUC Bias at start integration +AVGGCLC = 1 / [Volts] Cmnded VGGCL clock rail voltage +AVGGCBEG= 1 / [Volts] VGGCL clock rail voltage +AHTRIBEG= 204.49722 / [uAmps] Heater current at start of integ +AHTRVBEG= 2.3936886 / [Volts] Heater Voltage at start integ. +AFPAT2B = 15.022535 / [Deg_K] FPA Temp sensor #2 at start integ. +AFPAT2BT= 107644.61 / [Sec] FPA Temp sensor #2 time tag +AFPAT2E = 15.022535 / [Deg_K] FPA temp sensor #2, end integ. +AFPAT2ET= 107644.61 / [Sec] FPA temp sensor #2 time tag +ACTENDT = 20.376773 / [Deg_C] C&T board thermistor +AFPECTE = 18.3055 / [Deg_C] FPE control board thermistor +AFPEATE = 21.814696 / [Deg_C] FPE analog board thermistor +ASHTEMPE= 21.504564 / [Deg_C] Shutter board thermistor +ATCTEMPE= 22.662835 / [Deg_C] Temp. controller board thermistor +ACETEMPE= 20.285331 / [Deg_C] Calib. electronics board thermistor +APDTEMPE= 20.590139 / [Deg_C] PDU board thermistor +ACATMP1E= 1.3181374 / [Deg_K] CA Temp, end integration for temp1 +ACATMP2E= 1.3011689 / [Deg_K] CA Temp, end integration for temp2 +ACATMP3E= 1.3331941 / [Deg_K] CA Temp, end integration for temp3 +ACATMP4E= 1.3299368 / [Deg_K] CA Temp, end integration for temp4 +ACATMP5E= 1.3280274 / [Deg_K] CA Temp, end integration for temp5 +ACATMP6E= 1.32662 / [Deg_K] CA Temp, end integration for temp6 +ACATMP7E= 1.3253879 / [Deg_K] CA Temp, end integration for temp7 +ACATMP8E= 1.3185339 / [Deg_K] CA Temp, end integration for temp8 + + / DATA FLOW KEYWORDS + +ORIGIN0 = 'JPL_FOS ' / Site where RAW FITS file was written +CREATOR0= 'J5.3 ' / SW system that created RAW FITS +DATE = '2007-07-10T04:40:23' / [YYYY-MM-DDThh:mm:ss UTC] file creation date +AORKEY = 18279424 / AOR or EIR key. Astrnmy Obs Req/Instr Eng Req +DS_IDENT= 'ads/sa.spitzer#0018279424' / Data Set Identification for ADS/journals +EXPID = 14 / Exposure ID (0-9999) +DCENUM = 0 / DCE number (0-9999) +TLMGRPS = 1 / expected number of groups +FILE_VER= 1 / Version of the raw file made by SIS +RAWFILE = 'IRAC.1.0018279424.0014.0000.01.mipl.fits' / Raw data file name +CPT_VER = '3.1.11 ' / Channel Param Table FOS versioN +CTD_VER = '3.0.94S ' / Cmded telemetry data version +EXPDFLAG= F / (T/F) expedited DCE +MISS_LCT= 0 / Total Missed Line Cnt in this FITS +MANCPKT = F / T if this FITS is Missing Ancillary Data +MISSDATA= F / T if this FITS is Missing Image Data +CHECKSUM= 0 / MIPL computed checksum +PAONUM = 2463 / PAO Number +CAMPAIGN= 'IRAC009800' / Campaign +DCEID = 80565322 / Data-Collection-Event ID +DCEINSID= 16981930 / DCE Instance ID +DPID = 178643698 / Data Product Instance ID +PIPENUM = 107 / Pipeline Script Number +SOS_VER = 2 / Data-Product Version +PLVID = 4 / Pipeline Version ID +CALID = 6 / CalTrans Version ID + +SDRKEPID= 3230182 / Sky Dark ensemble product ID + +PMSKFBID= 995 / Pixel mask ID +LDRKFBID= 836 / Fall-back lab dark ID +LINCFBID= 357 / Fall-back Linearity correction ID +FLATFBID= 1011 / Fall-back flat ID +FLXCFBID= 1025 / Flux conversion ID +MBLTFBID= 696 / Muxbleed Lookup Table ID +MBCFFBID= 704 / Muxbleed Coefficients ID +LBDRKFLE= 'FUL_12s_12sf8d1r1_ch1_v1.2.0_dark.txt' / Labdark File Used +DDCORR1 = 1.488018 / Darkdrift Correction for Readout Channel 1 +DDCORR2 = -5.919937 / Darkdrift Correction for Readout Channel 2 +DDCORR3 = 2.243147 / Darkdrift Correction for Readout Channel 3 +DDCORR4 = 2.188772 / Darkdrift Correction for Readout Channel 4 +DDBKGND = 68.5909 / arkdrift 'Background' Term + + + + / PROCESSING HISTORY + +HISTORY job.c ver: 1.50 +HISTORY TRANHEAD v. 12.8, ran Mon Jul 9 21:40:04 2007 +HISTORY CALTRANS v. 4.0, ran Mon Jul 9 21:40:08 2007 +HISTORY INSBPOSDOM v. 1.1, ran Mon Jul 9 21:40:08 2007 +HISTORY cvti2r4 v. 1.31 A61025, generated 7/09/07 at 21:40:09 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:11 +HISTORY FFC v. 1.0, ran Mon Jul 9 21:40:12 2007 +HISTORY MUXBLEEDCORR v. 1.600, ran Mon Jul 9 21:40:13 2007 +HISTORY FOWLINEARIZE v. 4.900000, ran Mon Jul 9 21:40:13 2007 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:14 +HISTORY BGMODEL v. 1.0, ran Mon Jul 9 21:40:14 2007 +HISTORY SLREMOVE v. 1.0, ran Mon Jul 9 21:40:14 2007 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:15 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:16 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:16 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:17 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:18 +HISTORY DARKSUBNG v. 1.000, ran Mon Jul 9 21:40:18 2007 +HISTORY DARKDRIFT v. 4.0, ran Mon Jul 9 21:40:19 2007 +HISTORY FLATAP v. 1.500 Mon Jul 9 21:40:20 2007 +HISTORY DNTOFLUX v. 4.1, ran Mon Jul 9 21:40:23 2007 +HISTORY CALTRANS v. 4.0, ran Mon Jul 9 21:47:55 2007 +HISTORY PTNTRAN v. 1.4, ran Mon Jul 9 21:47:56 2007 +HISTORY FPGen v. 1.25, ran Mon Jul 9 21:47:58 2007 +HISTORY PTGADJUST v. 1.0, ran Mon Jul 9 21:51:34 2007 +END diff --git a/ast/ast_tester/sip.head b/ast/ast_tester/sip.head new file mode 100644 index 0000000..0e9e838 --- /dev/null +++ b/ast/ast_tester/sip.head @@ -0,0 +1,288 @@ +SIMPLE = T / Fits standard +BITPIX = -32 / FOUR-BYTE SINGLE PRECISION FLOATING POINT +NAXIS = 2 / STANDARD FITS FORMAT +NAXIS1 = 256 / STANDARD FITS FORMAT +NAXIS2 = 256 / STANDARD FITS FORMAT +ORIGIN = 'Spitzer Science Center' / Organization generating this FITS file +CREATOR = 'S16.1.0 ' / SW version used to create this FITS file +TELESCOP= 'Spitzer ' / SPITZER Space Telescope +INSTRUME= 'IRAC ' / SPITZER Space Telescope instrument ID +CHNLNUM = 1 / 1 digit instrument channel number +EXPTYPE = 'sci ' / Exposure Type +REQTYPE = 'AOR ' / Request type (AOR, IER, or SER) +AOT_TYPE= 'IracMap ' / Observation template type +AORLABEL= '05cs-IRAC-2' / AOR Label +FOVID = 67 / Field of View ID +FOVNAME = 'IRAC_Center_of_3.6&5.8umArray' / Field of View Name + + / PROPOSAL INFORMATION + +OBSRVR = 'Ben Sugerman' / Observer Name (Last, First) +OBSRVRID= 14621 / Observer ID of Principal Investigator +PROCYCL = 6 / Proposal Cycle +PROGID = 30494 / Program ID +PROTITLE= 'Supernovae and the Origin of Dust in Galaxies: Follow-Up Observation' +PROGCAT = 30 / Program Category + + / TIME AND EXPOSURE INFORMATION + +DATE_OBS= '2007-06-29T03:15:33.555' / Date & time at DCE start +MJD_OBS = 54280.135805 / [days] MJD at DCE start (,JD-2400000.5) +UTCS_OBS= 236358933.555 / [sec] J2000 ephem. time at DCE start +SCLK_OBS= 867554299.94 / [sec] SCLK time (since 1/1/1980) at DCE start +SAMPTIME= 0.2 / [sec] Sample integration time +FRAMTIME= 12. / [sec] Time spent integrating (whole array) +COMMENT Photons in Well = Flux[photons/sec/pixel] * FRAMTIME +EXPTIME = 10.4 / [sec] Effective integration time per pixel +COMMENT DN per pixel = Flux[photons/sec/pixel] / GAIN * EXPTIME +INTRFDLY= 8. / [sec] Inter Frame Delay Time +AINTBEG = 107646.2 / [Secs since IRAC turn-on] Time of integ. start +ATIMEEND= 107658.16 / [Secs since IRAC turn-on] Time of integ. end +AFOWLNUM= 8 / Fowler number +AWAITPER= 44 / [0.2 sec] Wait period +ANUMREPS= 1 / Number of repeat integrations +AREADMOD= 0 / Full (0) or subarray (1) +HDRMODE = F / DCE taken in High Dynamic Range mode +ABARREL = 3 / Barrel shift +APEDSIG = 0 / 0=Normal, 1=Pedestal, 2=Signal + + / TARGET AND POINTING INFORMATION + +OBJECT = 'SN 2005cs' / Target Name +OBJTYPE = 'TargetFixedSingle' / Object Type +CRVAL1 = 202.482322805429 / [deg] RA at CRPIX1,CRPIX2 (using Pointing Recon +CRVAL2 = 47.1751189300101 / [deg] DEC at CRPIX1,CRPIX2 (using Pointing Reco +RA_HMS = '13h29m55.8s' / [hh:mm:ss.s] CRVAL1 as sexagesimal +DEC_DMS = '+47d10m30s' / [dd:mm:ss] CRVAL2 as sexagesimal +RADESYS = 'ICRS ' / International Celestial Reference System +EQUINOX = 2000. / Equinox for ICRS celestial coord. system +CD1_1 = 0.000249756880272355 / Corrected CD matrix element with Pointing Recon +CD1_2 = 0.000230177809743655 / Corrected CD matrix element with Pointing Recon +CD2_1 = 0.000230428519265417 / Corrected CD matrix element with Pointing Recon +CD2_2 = -0.000249965770576587 / Corrected CD matrix element with Pointing Reco +CTYPE1 = 'RA---TAN-SIP' / RA---TAN with distortion in pixel space +CTYPE2 = 'DEC--TAN-SIP' / DEC--TAN with distortion in pixel space +CRPIX1 = 128. / Reference pixel along axis 1 +CRPIX2 = 128. / Reference pixel along axis 2 +PXSCAL1 = -1.22334117768332 / [arcsec/pix] Scale for axis 1 at CRPIX1,CRPIX2 +PXSCAL2 = 1.22328355209902 / [arcsec/pix] Scale for axis 2 at CRPIX1,CRPIX2 +CRDER1 = 4.02509762361481E-05 / [deg] Uncertainty in CRVAL1 +CRDER2 = 3.4274613195288E-05 / [deg] Uncertainty in CRVAL2 +UNCRTPA = 0.000378787843382542 / [deg] Uncertainty in position angle +CSDRADEC= 4.75971783897902E-07 / [deg] Costandard deviation in RA and Dec +SIGRA = 0.0339487135007807 / [arcsec] RMS dispersion of RA over DCE +SIGDEC = 0.0637682657426773 / [arcsec] RMS dispersion of DEC over DCE +SIGPA = 1.36464273573987 / [arcsec] RMS dispersion of PA over DCE +PA = 137.359976084299 / [deg] Position angle of axis 2 (E of N) (was OR +RA_RQST = 202.482116615975 / [deg] Requested RA at CRPIX1, CRPIX2 +DEC_RQST= 47.1750785413522 / [deg] Requested Dec at CRPIX1, CRPIX2 +PM_RA = 0. / [arcsec/yr] Proper Motion in RA (J2000) +PM_DEC = 0. / [arcsec/yr] Proper Motion in Dec (J200) +RMS_JIT = 0.00768303401855732 / [arcsec] RMS jitter during DCE +RMS_JITY= 0.00515070337437348 / [arcsec] RMS jitter during DCE along Y +RMS_JITZ= 0.00570081279113133 / [arcsec] RMS jitter during DCE along Z +SIG_JTYZ= 0.00237806410221437 / [arcsec] Costadard deviation of jitter in YZ +PTGDIFF = 0.525106524659797 / [arcsec] Offset btwn actual and rqsted pntng +PTGDIFFX= 0.46966798486043 / [pixels] rqsted - actual pntng along axis 1 +PTGDIFFY= -0.235285197422366 / [pixels] rqsted - actual pntng along axis 2 +RA_REF = 202.472375 / [deg] Commanded RA (J2000) of ref. position +DEC_REF = 47.1745 / [deg] Commanded Dec (J2000) of ref. position +USEDBPHF= T / T if Boresight Pointing History File was used +BPHFNAME= 'SBPHF.0867542400.031.pntg' / Boresight Pointing History Filename +FOVVERSN= 'BodyFrames_FTU_14a.xls' / FOV/BodyFrames file version used +RECONFOV= 'IRAC_Center_of_3.6umArray' / Reconstructed Field of View +RARFND = 202.482315063477 / [deg] Refined RA +DECRFND = 47.175121307373 / [deg] Refined DEC +CT2RFND = 137.359054565430 / [deg] Refined CROT2 +ERARFND = 0.000002332304 / [deg] Error in RARFND value +EDECRFND= 0.000002332411 / [deg] Error in DECRFND value +ECT2RFND= 0.000540699053 / [deg] Error in CT2RFND value +NASTROM = 12 / Astrometric sources for absolute refinement +ORIG_RA = 202.482055664062 / [deg] Original RA from raw BPHF (without pointi +ORIG_DEC= 47.1750717163086 / [deg] Original Dec from raw BPHF (without point +ORIGCD11= 0.0002497563255 / [deg/pix] Original CD1_1 element (without point +ORIGCD12= 0.0002301784261 / [deg/pix] Original CD1_2 element (without point +ORIGCD21= 0.0002304291411 / [deg/pix] Original CD2_1 element (without point +ORIGCD22= -0.0002499652037 / [deg/pix] Original CD2_2 element (without point + + + + / DISTORTION KEYWORDS + +A_ORDER = 3 / polynomial order, axis 1, detector to sky +A_0_2 = 2.9656E-06 / distortion coefficient +A_0_3 = 3.7746E-09 / distortion coefficient +A_1_1 = 2.1886E-05 / distortion coefficient +A_1_2 = -1.6847E-07 / distortion coefficient +A_2_0 = -2.3863E-05 / distortion coefficient +A_2_1 = -8.561E-09 / distortion coefficient +A_3_0 = -1.4172E-07 / distortion coefficient +A_DMAX = 1.394 / [pixel] maximum correction +B_ORDER = 3 / polynomial order, axis 2, detector to sky +B_0_2 = 2.31E-05 / distortion coefficient +B_0_3 = -1.6168E-07 / distortion coefficient +B_1_1 = -2.4386E-05 / distortion coefficient +B_1_2 = -5.7813E-09 / distortion coefficient +B_2_0 = 2.1197E-06 / distortion coefficient +B_2_1 = -1.6583E-07 / distortion coefficient +B_3_0 = -2.0249E-08 / distortion coefficient +B_DMAX = 1.501 / [pixel] maximum correction +AP_ORDER= 3 / polynomial order, axis 1, sky to detector +AP_0_1 = -6.4275E-07 / distortion coefficient +AP_0_2 = -2.9425E-06 / distortion coefficient +AP_0_3 = -3.582E-09 / distortion coefficient +AP_1_0 = -1.4897E-05 / distortion coefficient +AP_1_1 = -2.225E-05 / distortion coefficient +AP_1_2 = 1.7195E-07 / distortion coefficient +AP_2_0 = 2.4146E-05 / distortion coefficient +AP_2_1 = 6.709E-09 / distortion coefficient +AP_3_0 = 1.4492E-07 / distortion coefficient +BP_ORDER= 3 / polynomial order, axis 2, sky to detector +BP_0_1 = -1.6588E-05 / distortion coefficient +BP_0_2 = -2.3424E-05 / distortion coefficient +BP_0_3 = 1.651E-07 / distortion coefficient +BP_1_0 = -2.6783E-06 / distortion coefficient +BP_1_1 = 2.4753E-05 / distortion coefficient +BP_1_2 = 3.8917E-09 / distortion coefficient +BP_2_0 = -2.151E-06 / distortion coefficient +BP_2_1 = 1.7E-07 / distortion coefficient +BP_3_0 = 2.0482E-08 / distortion coefficient + + / PHOTOMETRY + +BUNIT = 'MJy/sr ' / Units of image data +FLUXCONV= 0.1088 / Flux Conv. factor (MJy/sr per DN/sec) +GAIN = 3.3 / e/DN conversion +RONOISE = 9.4 / [Electrons] Readout Noise from Array +ZODY_EST= 0.05291139 / [MJy/sr] Zodiacal Background Estimate +ISM_EST = 0.003677277 / [MJy/sr] Interstellar Medium Estimate +CIB_EST = 0. / [MJy/sr] Cosmic Infrared Background Estimate +SKYDRKZB= 0.044533 / [MJy/sr] Zodiacal Background Est of subracted s +SKYDKMED= 0.039081 / [MJy/sr] Median of Subtracted Skydark +SKDKFDLY= 11.554 / [sec] Average Frame Delay Time of Skydark +SKDKIDLY= 11.554 / [sec] Average Immediate Delay Time of Skydark + + / GENERAL MAPPING KEYWORDS + +DITHPOS = 2 / Current dither position + + / IRAC MAPPING KEYWORDS + +READMODE= 'FULL ' / Readout mode +DITHSCAL= 'medium ' / Dither scale (small, medium, large) + + / INSTRUMENT TELEMETRY DATA + +ASHTCON = 2 / Shutter condition (1:closed, 2: open) +AWEASIDE= 0 / WEA side in use (0:B, 1:A) +ACTXSTAT= 0 / Cmded transcal status +ATXSTAT = 0 / transcal status +ACFLSTAT= 0 / Cmded floodcal status +AFLSTAT = 0 / floodcal status +AVRSTUCC= -3.5 / [Volts] Cmded VRSTUC Bias +AVRSTBEG= -3.5114367 / [Volts] VRSTUC Bias at start integration +AVDETC = -2.75 / [Volts] Cmded VDET Bias +AVDETBEG= -2.7585216 / [Volts] VDET Bias at start of integration +AVGG1C = -3.65 / [Volts] Cmded VGG1 Bias +AVGG1BEG= -3.2078801 / [Volts] VGG1 Bias at start of integration +AVDDUCC = -3 / [Volts] Cmded VDDUC Bias +AVDDUBEG= -3 / [Volts] VDDUC Bias at start integration +AVGGCLC = 1 / [Volts] Cmnded VGGCL clock rail voltage +AVGGCBEG= 1 / [Volts] VGGCL clock rail voltage +AHTRIBEG= 204.49722 / [uAmps] Heater current at start of integ +AHTRVBEG= 2.3936886 / [Volts] Heater Voltage at start integ. +AFPAT2B = 15.022535 / [Deg_K] FPA Temp sensor #2 at start integ. +AFPAT2BT= 107644.61 / [Sec] FPA Temp sensor #2 time tag +AFPAT2E = 15.022535 / [Deg_K] FPA temp sensor #2, end integ. +AFPAT2ET= 107644.61 / [Sec] FPA temp sensor #2 time tag +ACTENDT = 20.376773 / [Deg_C] C&T board thermistor +AFPECTE = 18.3055 / [Deg_C] FPE control board thermistor +AFPEATE = 21.814696 / [Deg_C] FPE analog board thermistor +ASHTEMPE= 21.504564 / [Deg_C] Shutter board thermistor +ATCTEMPE= 22.662835 / [Deg_C] Temp. controller board thermistor +ACETEMPE= 20.285331 / [Deg_C] Calib. electronics board thermistor +APDTEMPE= 20.590139 / [Deg_C] PDU board thermistor +ACATMP1E= 1.3181374 / [Deg_K] CA Temp, end integration for temp1 +ACATMP2E= 1.3011689 / [Deg_K] CA Temp, end integration for temp2 +ACATMP3E= 1.3331941 / [Deg_K] CA Temp, end integration for temp3 +ACATMP4E= 1.3299368 / [Deg_K] CA Temp, end integration for temp4 +ACATMP5E= 1.3280274 / [Deg_K] CA Temp, end integration for temp5 +ACATMP6E= 1.32662 / [Deg_K] CA Temp, end integration for temp6 +ACATMP7E= 1.3253879 / [Deg_K] CA Temp, end integration for temp7 +ACATMP8E= 1.3185339 / [Deg_K] CA Temp, end integration for temp8 + + / DATA FLOW KEYWORDS + +ORIGIN0 = 'JPL_FOS ' / Site where RAW FITS file was written +CREATOR0= 'J5.3 ' / SW system that created RAW FITS +DATE = '2007-07-10T04:40:23' / [YYYY-MM-DDThh:mm:ss UTC] file creation date +AORKEY = 18279424 / AOR or EIR key. Astrnmy Obs Req/Instr Eng Req +DS_IDENT= 'ads/sa.spitzer#0018279424' / Data Set Identification for ADS/journals +EXPID = 14 / Exposure ID (0-9999) +DCENUM = 0 / DCE number (0-9999) +TLMGRPS = 1 / expected number of groups +FILE_VER= 1 / Version of the raw file made by SIS +RAWFILE = 'IRAC.1.0018279424.0014.0000.01.mipl.fits' / Raw data file name +CPT_VER = '3.1.11 ' / Channel Param Table FOS versioN +CTD_VER = '3.0.94S ' / Cmded telemetry data version +EXPDFLAG= F / (T/F) expedited DCE +MISS_LCT= 0 / Total Missed Line Cnt in this FITS +MANCPKT = F / T if this FITS is Missing Ancillary Data +MISSDATA= F / T if this FITS is Missing Image Data +CHECKSUM= 0 / MIPL computed checksum +PAONUM = 2463 / PAO Number +CAMPAIGN= 'IRAC009800' / Campaign +DCEID = 80565322 / Data-Collection-Event ID +DCEINSID= 16981930 / DCE Instance ID +DPID = 178643698 / Data Product Instance ID +PIPENUM = 107 / Pipeline Script Number +SOS_VER = 2 / Data-Product Version +PLVID = 4 / Pipeline Version ID +CALID = 6 / CalTrans Version ID + +SDRKEPID= 3230182 / Sky Dark ensemble product ID + +PMSKFBID= 995 / Pixel mask ID +LDRKFBID= 836 / Fall-back lab dark ID +LINCFBID= 357 / Fall-back Linearity correction ID +FLATFBID= 1011 / Fall-back flat ID +FLXCFBID= 1025 / Flux conversion ID +MBLTFBID= 696 / Muxbleed Lookup Table ID +MBCFFBID= 704 / Muxbleed Coefficients ID +LBDRKFLE= 'FUL_12s_12sf8d1r1_ch1_v1.2.0_dark.txt' / Labdark File Used +DDCORR1 = 1.488018 / Darkdrift Correction for Readout Channel 1 +DDCORR2 = -5.919937 / Darkdrift Correction for Readout Channel 2 +DDCORR3 = 2.243147 / Darkdrift Correction for Readout Channel 3 +DDCORR4 = 2.188772 / Darkdrift Correction for Readout Channel 4 +DDBKGND = 68.5909 / arkdrift 'Background' Term + + + + / PROCESSING HISTORY + +HISTORY job.c ver: 1.50 +HISTORY TRANHEAD v. 12.8, ran Mon Jul 9 21:40:04 2007 +HISTORY CALTRANS v. 4.0, ran Mon Jul 9 21:40:08 2007 +HISTORY INSBPOSDOM v. 1.1, ran Mon Jul 9 21:40:08 2007 +HISTORY cvti2r4 v. 1.31 A61025, generated 7/09/07 at 21:40:09 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:11 +HISTORY FFC v. 1.0, ran Mon Jul 9 21:40:12 2007 +HISTORY MUXBLEEDCORR v. 1.600, ran Mon Jul 9 21:40:13 2007 +HISTORY FOWLINEARIZE v. 4.900000, ran Mon Jul 9 21:40:13 2007 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:14 +HISTORY BGMODEL v. 1.0, ran Mon Jul 9 21:40:14 2007 +HISTORY SLREMOVE v. 1.0, ran Mon Jul 9 21:40:14 2007 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:15 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:16 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:16 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:17 +HISTORY hdrupd8 v. 1.5 A50126, updated 7/09/07 at 21:40:18 +HISTORY DARKSUBNG v. 1.000, ran Mon Jul 9 21:40:18 2007 +HISTORY DARKDRIFT v. 4.0, ran Mon Jul 9 21:40:19 2007 +HISTORY FLATAP v. 1.500 Mon Jul 9 21:40:20 2007 +HISTORY DNTOFLUX v. 4.1, ran Mon Jul 9 21:40:23 2007 +HISTORY CALTRANS v. 4.0, ran Mon Jul 9 21:47:55 2007 +HISTORY PTNTRAN v. 1.4, ran Mon Jul 9 21:47:56 2007 +HISTORY FPGen v. 1.25, ran Mon Jul 9 21:47:58 2007 +HISTORY PTGADJUST v. 1.0, ran Mon Jul 9 21:51:34 2007 +END diff --git a/ast/ast_tester/sparse.ast b/ast/ast_tester/sparse.ast new file mode 100644 index 0000000..c28cb4d --- /dev/null +++ b/ast/ast_tester/sparse.ast @@ -0,0 +1,392 @@ + Begin FrameSet # Set of inter-related coordinate systems +# Title = "3-d compound coordinate system" # Title of coordinate system +# Naxes = 3 # Number of coordinate axes +# Domain = "SKY-DSBSPECTRUM" # Coordinate system domain +# Epoch = 2007.10664386351 # Julian epoch of observation +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# Lbl3 = "Radio velocity (USB)" # Label for axis 3 +# System = "Compound" # Coordinate system type +# Uni1 = "hh:mm:ss.sss" # Units for axis 1 +# Uni2 = "ddd:mm:ss.ss" # Units for axis 2 +# Uni3 = "km/s" # Units for axis 3 +# Dig1 = 9 # Individual precision for axis 1 +# Dig2 = 9 # Individual precision for axis 2 +# Digits = 7 # Default formatting precision +# Fmt1 = "hms.3" # Format specifier for axis 1 +# Fmt2 = "dms.2" # Format specifier for axis 2 +# Dir1 = 0 # Plot axis 1 in reverse direction + IsA Frame # Coordinate system description + Nframe = 5 # Number of Frames in FrameSet +# Base = 1 # Index of base Frame + Currnt = 5 # Index of current Frame + Nnode = 6 # Number of nodes in FrameSet + Nod1 = 3 # Frame 1 is associated with node 3 + Nod2 = 4 # Frame 2 is associated with node 4 + Nod3 = 5 # Frame 3 is associated with node 5 + Nod4 = 6 # Frame 4 is associated with node 6 + Nod5 = 2 # Frame 5 is associated with node 2 + Lnk2 = 1 # Node 2 is derived from node 1 + Lnk3 = 1 # Node 3 is derived from node 1 + Lnk4 = 1 # Node 4 is derived from node 1 + Lnk5 = 1 # Node 5 is derived from node 1 + Lnk6 = 1 # Node 6 is derived from node 1 + Frm1 = # Frame number 1 + Begin Frame # Coordinate system description + Title = "Data grid indices; first pixel at (1,1,1)" # Title of coordinate system + Naxes = 3 # Number of coordinate axes + Domain = "GRID" # Coordinate system domain +# Lbl1 = "Data grid index 1" # Label for axis 1 +# Lbl2 = "Data grid index 2" # Label for axis 2 +# Lbl3 = "Data grid index 3" # Label for axis 3 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 +# Uni3 = "pixel" # Units for axis 3 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Data grid index 1" # Axis Label + Symbol = "g1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Data grid index 2" # Axis Label + Symbol = "g2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax3 = # Axis number 3 + Begin Axis # Coordinate axis + Label = "Data grid index 3" # Axis Label + Symbol = "g3" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm2 = # Frame number 2 + Begin Frame # Coordinate system description + Title = "Pixel coordinates; first pixel at (0.5,0.5,-1024.5)" # Title of coordinate system + Naxes = 3 # Number of coordinate axes + Domain = "PIXEL" # Coordinate system domain +# Lbl1 = "Pixel coordinate 1" # Label for axis 1 +# Lbl2 = "Pixel coordinate 2" # Label for axis 2 +# Lbl3 = "Pixel coordinate 3" # Label for axis 3 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 +# Uni3 = "pixel" # Units for axis 3 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 1" # Axis Label + Symbol = "p1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 2" # Axis Label + Symbol = "p2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax3 = # Axis number 3 + Begin Axis # Coordinate axis + Label = "Pixel coordinate 3" # Axis Label + Symbol = "p3" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm3 = # Frame number 3 + Begin Frame # Coordinate system description + Title = "Axis coordinates; first pixel at (0.5,0.5,-1024.5)" # Title of coordinate system + Naxes = 3 # Number of coordinate axes + Domain = "AXIS" # Coordinate system domain +# Lbl1 = "Axis 1" # Label for axis 1 +# Lbl2 = "Axis 2" # Label for axis 2 +# Lbl3 = "Axis 3" # Label for axis 3 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 +# Uni3 = "pixel" # Units for axis 3 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Axis 1" # Axis Label + Symbol = "a1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Axis 2" # Axis Label + Symbol = "a2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax3 = # Axis number 3 + Begin Axis # Coordinate axis + Label = "Axis 3" # Axis Label + Symbol = "a3" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm4 = # Frame number 4 + Begin Frame # Coordinate system description + Title = "Normalised pixel coordinates; first pixel at (0.03846154,0.5,0.0002441406)" # Title of coordinate system + Naxes = 3 # Number of coordinate axes + Domain = "FRACTION" # Coordinate system domain +# Lbl1 = "Normalised pixel coordinate 1" # Label for axis 1 +# Lbl2 = "Normalised pixel coordinate 2" # Label for axis 2 +# Lbl3 = "Normalised pixel coordinate 3" # Label for axis 3 + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Label = "Normalised pixel coordinate 1" # Axis Label + Symbol = "f1" # Axis symbol + Unit = "" # Axis units + Format = "%5.4f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis # Coordinate axis + Label = "Normalised pixel coordinate 2" # Axis Label + Symbol = "f2" # Axis symbol + Unit = "" # Axis units + Format = "%5.4f" # Format specifier + End Axis + Ax3 = # Axis number 3 + Begin Axis # Coordinate axis + Label = "Normalised pixel coordinate 3" # Axis Label + Symbol = "f3" # Axis symbol + Unit = "" # Axis units + Format = "%5.4f" # Format specifier + End Axis + End Frame + Frm5 = # Frame number 5 + Begin CmpFrame # Compound coordinate system description +# Title = "3-d compound coordinate system" # Title of coordinate system +# Naxes = 3 # Number of coordinate axes +# Domain = "SKY-DSBSPECTRUM" # Coordinate system domain +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# Lbl3 = "Radio velocity (USB)" # Label for axis 3 +# Uni1 = "hh:mm:ss.sss" # Units for axis 1 +# Uni2 = "ddd:mm:ss.ss" # Units for axis 2 +# Uni3 = "km/s" # Units for axis 3 +# Dig1 = 9 # Individual precision for axis 1 +# Dig2 = 9 # Individual precision for axis 2 +# Digits = 7 # Default formatting precision +# Fmt1 = "hms.3" # Format specifier for axis 1 +# Fmt2 = "dms.2" # Format specifier for axis 2 +# Dir1 = 0 # Plot axis 1 in reverse direction + IsA Frame # Coordinate system description + FrameA = # First component Frame + Begin SkyFrame # Description of celestial coordinate system + Naxes = 2 # Number of coordinate axes + Epoch = 2007.10664386351 # Julian epoch of observation + System = "FK5" # Coordinate system type + ObsLat = 0.346026069000145 # Observers geodetic latitude (rads) + ObsLon = -2.71363307300091 # Observers geodetic longitude (rads) + Dut1 = -0.00321845632046122 # UT1-UTC in seconds + Ax1 = # Axis number 1 + Begin SkyAxis # Celestial coordinate axis + Digits = 9 # Default formatting precision + IsA Axis # Coordinate axis + End SkyAxis + Ax2 = # Axis number 2 + Begin SkyAxis # Celestial coordinate axis + Digits = 9 # Default formatting precision + IsA Axis # Coordinate axis + End SkyAxis + IsA Frame # Coordinate system description + SRef1 = 1.2343627630284 # Ref. pos. RA 4:42:53.706 + SRef2 = 0.63032350835257 # Ref. pos. Dec 36:06:53.56 + End SkyFrame + FrameB = # Second component Frame + Begin DSBSpecFrame # Dual sideband spectral axis + Naxes = 1 # Number of coordinate axes + Epoch = 2007.10664386353 # Julian epoch of observation + System = "VRAD" # Coordinate system type + ObsLat = 0.346026069000144 # Observers geodetic latitude (rads) + ObsLon = -2.71363307300091 # Observers geodetic longitude (rads) + Dut1 = -0.00321845632046122 # UT1-UTC in seconds + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + End Axis + IsA Frame # Coordinate system description + SoR = "LSRK" # Standard of rest + RefRA = 1.23436224892048 # Reference RA (rads, FK5 J2000) + RefDec = 0.630323957597852 # Reference Dec (rads, FK5 J2000) + RstFrq = 345795989900 # Rest frequency (Hz) + SrcVel = -21699.2154029027 # Source velocity (m/s) + SrcVRF = "LSRK" # Source velocity rest frame + UFreq = "GHz" # Preferred units for frequency + IsA SpecFrame # Description of spectral coordinate system + DSBCen = 345782054267.698 # Central frequency (Hz topo) + IF = -4999999979.60052 # Intermediate frequency (Hz) + SideBn = "USB" # Represents upper sideband + AlSdBn = 1 # Align sidebands? + End DSBSpecFrame + End CmpFrame + Map2 = # Mapping between nodes 1 and 2 + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + Inv = 0 # Inverse transformation not defined + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + MapA = # First component Mapping + Begin PermMap # Coordinate permutation + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Out1 = 1 # Output coordinate 1 = input coordinate 1 + Out2 = 1 # Output coordinate 2 = input coordinate 1 + In1 = 1 # Input coordinate 1 = output coordinate 1 + In2 = 0 # Input coordinate 2 is "bad" + End PermMap + MapB = # Second component Mapping + Begin WinMap # Map one window on to another + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = 2.86538852378726e-05 # Shift for axis 1 + End WinMap + End CmpMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 3 # Number of input coordinates + Inv = 0 # Inverse transformation not defined + IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + MapA = # First component Mapping + Begin LutMap # Map 1-d coordinates using a lookup table + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + Inv = 0 # Inverse transformation not defined + IsA Mapping # Mapping between coordinate systems + Nlut = 13 # Number of lookup table elements + Start = 1 # Input value at first element +# Incr = 1 # Input value increment between elements + LutInt = 1 # Interpolation method + L1 = 1.23418282732218 # Lookup table elements... + L2 = 1.2343639301616 + L3 = 1.23436339112322 + L4 = 1.2343628519694 + L5 = 1.23436231270009 + L6 = 1.23454235656739 + L7 = 1.23454287673211 + L8 = 1.2345433967854 + L9 = 1.23454391672729 + L10 = 1.23472390339668 + L11 = 1.23472340255133 + L12 = 1.23472290159864 + L13 = 1.23472240053857 + End LutMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + Inv = 0 # Inverse transformation not defined + IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + MapA = # First component Mapping + Begin LutMap # Map 1-d coordinates using a lookup table + Nin = 1 # Number of input coordinates + Inv = 0 # Inverse transformation not defined + IsA Mapping # Mapping between coordinate systems + Nlut = 13 # Number of lookup table elements + Start = 1 # Input value at first element +# Incr = 1 # Input value increment between elements + LutInt = 1 # Interpolation method + L1 = 0.630323242601191 # Lookup table elements... + L2 = 0.630032824768848 + L3 = 0.630178255337191 + L4 = 0.630323685912113 + L5 = 0.630469116487462 + L6 = 0.630469544411238 + L7 = 0.630324113791166 + L8 = 0.630178683171532 + L9 = 0.630033252558487 + L10 = 0.630033664925644 + L11 = 0.630179095578678 + L12 = 0.630324526238311 + L13 = 0.63046995689839 + End LutMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 1 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = 346321451689.665 # Shift for axis 1 + Scl1 = -488226.2403564 # Scale factor for axis 1 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 1 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin SpecMap # Conversion between spectral coordinate systems + Nin = 1 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Nspec = 2 # Number of conversion steps + Spec1 = "FRTOVL" # Convert frequency to rel. velocity + Spec1a = 345795989900 # Rest frequency (Hz) + Spec2 = "VLTOVR" # Convert relativistic to radio velocity + End SpecMap + MapB = # Second component Mapping + Begin ZoomMap # Zoom about the origin + Nin = 1 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Zoom = 0.001 # Zoom factor + End ZoomMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + Map3 = # Mapping between nodes 1 and 3 + Begin UnitMap # Unit (null) Mapping + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + End UnitMap + Map4 = # Mapping between nodes 1 and 4 + Begin WinMap # Map one window on to another + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + Sft1 = -0.5 # Shift for axis 1 + Sft2 = -0.5 # Shift for axis 2 + Sft3 = -1025.5 # Shift for axis 3 + End WinMap + Map5 = # Mapping between nodes 1 and 5 + Begin WinMap # Map one window on to another + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + Sft1 = -0.5 # Shift for axis 1 + Sft2 = -0.5 # Shift for axis 2 + Sft3 = -1025.5 # Shift for axis 3 + End WinMap + Map6 = # Mapping between nodes 1 and 6 + Begin WinMap # Map one window on to another + Nin = 3 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + IsA Mapping # Mapping between coordinate systems + Sft1 = -0.0384615384615385 # Shift for axis 1 + Scl1 = 0.0769230769230769 # Scale factor for axis 1 + Sft2 = -0.5 # Shift for axis 2 + Sft3 = -0.000244140625 # Shift for axis 3 + Scl3 = 0.00048828125 # Scale factor for axis 3 + End WinMap + End FrameSet diff --git a/ast/ast_tester/specflux.ast b/ast/ast_tester/specflux.ast new file mode 100644 index 0000000..0da5fea --- /dev/null +++ b/ast/ast_tester/specflux.ast @@ -0,0 +1,29 @@ + Begin CmpFrame # Compound coordinate system description +# Title = "2-d compound coordinate system" # Title of coordinate system +# Naxes = 2 # Number of coordinate axes +# Domain = "SPECTRUM-" # Coordinate system domain +# Lbl1 = "Wavelength" # Label for axis 1 +# Lbl2 = "Axis 2" # Label for axis 2 +# Uni1 = "um" # Units for axis 1 +# Uni2 = "10%^50+%s50+-26%+W/m%^50+%s50+2%+/Angstrom" # Units for axis 2 + IsA Frame # Coordinate system description + FrameA = # First component Frame + Begin SpecFrame # Description of spectral coordinate system + Naxes = 1 # Number of coordinate axes + System = "WAVE" # Coordinate system type + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Unit = "um" # Axis units + End Axis + IsA Frame # Coordinate system description + UWave = "um" # Preferred units for wavelength + End SpecFrame + FrameB = # Second component Frame + Begin Frame # Coordinate system description + Naxes = 1 # Number of coordinate axes + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Unit = "10%^50+%s50+-26%+W/m%^50+%s50+2%+/Angstrom" # Axis units + End Axis + End Frame + End CmpFrame diff --git a/ast/ast_tester/specflux.attr b/ast/ast_tester/specflux.attr new file mode 100644 index 0000000..e00d209 --- /dev/null +++ b/ast/ast_tester/specflux.attr @@ -0,0 +1 @@ +system=freq,logplot=1,loggap(1)=100 diff --git a/ast/ast_tester/specflux.box b/ast/ast_tester/specflux.box new file mode 100644 index 0000000..7c6f180 --- /dev/null +++ b/ast/ast_tester/specflux.box @@ -0,0 +1,2 @@ +1 3 1.0E-8 9 + diff --git a/ast/ast_tester/specflux.head b/ast/ast_tester/specflux.head new file mode 100644 index 0000000..ac4a035 --- /dev/null +++ b/ast/ast_tester/specflux.head @@ -0,0 +1,28 @@ + +COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST +COMMENT AST Beginning of AST data for CmpFrame object AST +COMMENT AST ................................................................ AST +BEGAST_A= 'CmpFrame' / Compound coordinate system description +FRAMEA_A= ' ' / First component Frame +BEGAST_B= 'SpecFrame' / Description of spectral coordinate system +NAXES_A = 1 / Number of coordinate axes +SYSTEM_A= 'WAVE ' / Coordinate system type +AX1_A = ' ' / Axis number 1 +BEGAST_C= 'Axis ' / Coordinate axis +UNIT_A = 'um ' / Axis units +ENDAST_A= 'Axis ' / End of object definition +ISA_A = 'Frame ' / Coordinate system description +UWAVE_A = 'um ' / Preferred units for wavelength +ENDAST_B= 'SpecFrame' / End of object definition +FRAMEB_A= ' ' / Second component Frame +BEGAST_D= 'Frame ' / Coordinate system description +NAXES_B = 1 / Number of coordinate axes +AX1_B = ' ' / Axis number 1 +BEGAST_E= 'Axis ' / Coordinate axis +UNIT_B = '10%^50+%s50+-26%+W/m%^50+%s50+2%+/Angstrom'/ Axis units +ENDAST_C= 'Axis ' / End of object definition +ENDAST_D= 'Frame ' / End of object definition +ENDAST_E= 'CmpFrame' / End of object definition +COMMENT AST ................................................................ AST +COMMENT AST End of AST data for CmpFrame object AST +COMMENT AST ---------------------------------------------------------------- AST diff --git a/ast/ast_tester/splittest1.ast b/ast/ast_tester/splittest1.ast new file mode 100644 index 0000000..9fb1e2f --- /dev/null +++ b/ast/ast_tester/splittest1.ast @@ -0,0 +1,185 @@ + Begin CmpMap # Compound Mapping + Nin = 4 # Number of input coordinates + Inv = 0 # Inverse transformation not defined + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin UnitMap # Unit (null) Mapping + Nin = 4 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + End UnitMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 4 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + Inv = 0 # Inverse transformation not defined + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 4 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -129 # Shift for axis 1 + Sft2 = -65 # Shift for axis 2 + Sft3 = -0.5 # Shift for axis 3 + Sft4 = -1 # Shift for axis 4 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 4 # Number of input coordinates + Inv = 0 # Inverse transformation not defined + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap # Matrix transformation + Nin = 4 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = 0.996194698 # Forward matrix value + M1 = 0.087155743 # Forward matrix value + M2 = 0 # Forward matrix value + M3 = 0 # Forward matrix value + M4 = -0.087155743 # Forward matrix value + M5 = 0.996194698 # Forward matrix value + M6 = 0 # Forward matrix value + M7 = 0 # Forward matrix value + M8 = 0 # Forward matrix value + M9 = 0 # Forward matrix value + M10 = 1 # Forward matrix value + M11 = 0 # Forward matrix value + M12 = 0 # Forward matrix value + M13 = 0 # Forward matrix value + M14 = 0 # Forward matrix value + M15 = 1 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 4 # Number of input coordinates + Invert = 0 # Mapping not inverted + Inv = 0 # Inverse transformation not defined + IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = 136 # Shift for axis 1 + Sft2 = 76 # Shift for axis 2 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 2 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + Inv = 0 # Inverse transformation not defined + IsA Mapping # Mapping between coordinate systems + Series = 0 # Component Mappings applied in parallel + MapA = # First component Mapping + Begin CmpMap # Compound Mapping + Nin = 1 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap # Map one window on to another + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = 0.5 # Shift for axis 1 + End WinMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 1 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin LutMap # Map 1-d coordinates using a lookup table + Nin = 1 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Nlut = 8 # Number of lookup table elements + Start = 1 # Input value at first element +# Incr = 1 # Input value increment between elements + LutInt = 0 # Interpolation method + L1 = 0.5 # Lookup table elements... + L2 = 1.5 + L3 = 1.5 + L4 = 2.5 + L5 = 2.5 + L6 = 3.5 + L7 = 3.5 + L8 = 4.5 + End LutMap + MapB = # Second component Mapping + Begin LutMap # Map 1-d coordinates using a lookup table + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Nlut = 8 # Number of lookup table elements + Start = 1 # Input value at first element +# Incr = 1 # Input value increment between elements + LutInt = 0 # Interpolation method + L1 = 0.21106114 # Lookup table elements... + L2 = 0.21076437 + L3 = 2e-06 + L4 = 2.2e-06 + L5 = 5e-07 + L6 = 6.5e-07 + L7 = 1.24e-09 + L8 = 2.48e-09 + End LutMap + End CmpMap + End CmpMap + MapB = # Second component Mapping + Begin CmpMap # Compound Mapping + Nin = 1 # Number of input coordinates + IsSimp = 1 # Mapping has been simplified + Inv = 0 # Inverse transformation not defined + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin LutMap # Map 1-d coordinates using a lookup table + Nin = 1 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Nlut = 8 # Number of lookup table elements + Start = 1 # Input value at first element +# Incr = 1 # Input value increment between elements + LutInt = 0 # Interpolation method + L1 = 0 # Lookup table elements... + L2 = 1 + L3 = 1 + L4 = 2 + L5 = 2 + L6 = 3 + L7 = 3 + L8 = 4 + End LutMap + MapB = # Second component Mapping + Begin LutMap # Map 1-d coordinates using a lookup table + Nin = 1 # Number of input coordinates + Invert = 0 # Mapping not inverted + Inv = 0 # Inverse transformation not defined + IsA Mapping # Mapping between coordinate systems + Nlut = 8 # Number of lookup table elements + Start = 1 # Input value at first element +# Incr = 1 # Input value increment between elements + LutInt = 0 # Interpolation method + L1 = 1997.84512 # Lookup table elements... + L2 = 1997.84631 + L3 = 1993.28451 + L4 = 1993.28456 + L5 = 2001.59234 + L6 = 2001.59239 + L7 = 2002.18265 + L8 = 2002.18301 + End LutMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap diff --git a/ast/ast_tester/stcschan-test1-doc3-props.ast b/ast/ast_tester/stcschan-test1-doc3-props.ast new file mode 100644 index 0000000..4ab41aa --- /dev/null +++ b/ast/ast_tester/stcschan-test1-doc3-props.ast @@ -0,0 +1,126 @@ +Begin KeyMap # Map of key/value pairs + MapSz = 16 # Size of hash table + Key1 = "REDSHIFT_PROPS" # Item name + Typ1 = 4 # Item data type (AST Object) + Val1 = # Item value + Begin KeyMap # Map of key/value pairs + MapSz = 16 # Size of hash table + Key1 = "PIXSIZE" # Item name + Typ1 = 3 # Item data type (string) + Val1 = "0.3" # Item value + Key2 = "ID" # Item name + Typ2 = 3 # Item data type (string) + Val2 = "RedshiftInterval" # Item value + Key3 = "REFPOS" # Item name + Typ3 = 3 # Item data type (string) + Val3 = "BARYCENTER" # Item value + Key4 = "HILIMIT" # Item name + Typ4 = 3 # Item data type (string) + Val4 = "2300.0" # Item value + Key5 = "TYPE" # Item name + Typ5 = 3 # Item data type (string) + Val5 = "VELOCITY" # Item value + Key6 = "RESOLUTION" # Item name + Typ6 = 3 # Item data type (string) + Val6 = "0.7" # Item value + Key7 = "DOPPLERDEF" # Item name + Typ7 = 3 # Item data type (string) + Val7 = "OPTICAL" # Item value + Key8 = "REDSHIFT" # Item name + Typ8 = 3 # Item data type (string) + Val8 = "300.0" # Item value + Key9 = "LOLIMIT" # Item name + Typ9 = 3 # Item data type (string) + Val9 = "200.0" # Item value + End KeyMap + Key2 = "SPACE_PROPS" # Item name + Typ2 = 4 # Item data type (AST Object) + Val2 = # Item value + Begin KeyMap # Map of key/value pairs + MapSz = 16 # Size of hash table + Key1 = "SIZE" # Item name + Typ1 = 3 # Item data type (string) + Val1 = "0.000333 0.000278" # Item value + Key2 = "FRAME" # Item name + Typ2 = 3 # Item data type (string) + Val2 = "ICRS" # Item value + Key3 = "PIXSIZE" # Item name + Typ3 = 3 # Item data type (string) + Val3 = "0.000083 0.000083" # Item value + Key4 = "ID" # Item name + Typ4 = 3 # Item data type (string) + Val4 = "Circle" # Item value + Key5 = "REFPOS" # Item name + Typ5 = 3 # Item data type (string) + Val5 = "GEOCENTER" # Item value + Key6 = "CENTRE" # Item name + Typ6 = 3 # Item data type (string) + Val6 = "179.0 -11.5" # Item value + Key7 = "RESOLUTION" # Item name + Typ7 = 3 # Item data type (string) + Val7 = "0.001778" # Item value + Key8 = "POSITION" # Item name + Typ8 = 3 # Item data type (string) + Val8 = "179.0 -11.5" # Item value + Key9 = "RADIUS" # Item name + Typ9 = 3 # Item data type (string) + Val9 = "0.5" # Item value + Key10 = "ERROR" # Item name + Typ10 = 3 # Item data type (string) + Val10 = "0.000889" # Item value + End KeyMap + Key3 = "SPECTRAL_PROPS" # Item name + Typ3 = 4 # Item data type (AST Object) + Val3 = # Item value + Begin KeyMap # Map of key/value pairs + MapSz = 16 # Size of hash table + Key1 = "ID" # Item name + Typ1 = 3 # Item data type (string) + Val1 = "Spectral" # Item value + Key2 = "SPECTRAL" # Item name + Typ2 = 3 # Item data type (string) + Val2 = "1420.4" # Item value + Key3 = "REFPOS" # Item name + Typ3 = 3 # Item data type (string) + Val3 = "BARYCENTER" # Item value + Key4 = "UNIT" # Item name + Typ4 = 3 # Item data type (string) + Val4 = "MHz" # Item value + Key5 = "RESOLUTION" # Item name + Typ5 = 3 # Item data type (string) + Val5 = "10.0" # Item value + End KeyMap + Key4 = "TIME_PROPS" # Item name + Typ4 = 4 # Item data type (AST Object) + Val4 = # Item value + Begin KeyMap # Map of key/value pairs + MapSz = 16 # Size of hash table + Key1 = "PIXSIZE" # Item name + Typ1 = 3 # Item data type (string) + Val1 = "1024.0" # Item value + Key2 = "ID" # Item name + Typ2 = 3 # Item data type (string) + Val2 = "TimeInterval" # Item value + Key3 = "START" # Item name + Typ3 = 3 # Item data type (string) + Val3 = "1996-01-01T00:00:00" # Item value + Key4 = "TIME" # Item name + Typ4 = 3 # Item data type (string) + Val4 = "MJD 50814.0" # Item value + Key5 = "REFPOS" # Item name + Typ5 = 3 # Item data type (string) + Val5 = "GEOCENTER" # Item value + Key6 = "RESOLUTION" # Item name + Typ6 = 3 # Item data type (string) + Val6 = "0.8" # Item value + Key7 = "STOP" # Item name + Typ7 = 3 # Item data type (string) + Val7 = "1996-01-01T00:30:00" # Item value + Key8 = "TIMESCALE" # Item name + Typ8 = 3 # Item data type (string) + Val8 = "TT" # Item value + Key9 = "ERROR" # Item name + Typ9 = 3 # Item data type (string) + Val9 = "1.2" # Item value + End KeyMap +End KeyMap diff --git a/ast/ast_tester/stcschan-test1-doc3.ast b/ast/ast_tester/stcschan-test1-doc3.ast new file mode 100644 index 0000000..0758ca7 --- /dev/null +++ b/ast/ast_tester/stcschan-test1-doc3.ast @@ -0,0 +1,272 @@ + Begin Prism # Region extrusion into higher dimensions +# Title = "5-d compound coordinate system" # Title of coordinate system +# Naxes = 5 # Number of coordinate axes +# Domain = "TIME-SKY-SPECTRUM-REDSHIFT" # Coordinate system domain +# Epoch = 1995.9986310746 # Julian epoch of observation +# Lbl1 = "Modified Julian Date offset from 1996-01-01 " # Label for axis 1 +# Lbl2 = "Right ascension" # Label for axis 2 +# Lbl3 = "Declination" # Label for axis 3 +# Lbl4 = "Frequency" # Label for axis 4 +# Lbl5 = "Optical velocity" # Label for axis 5 +# System = "Compound" # Coordinate system type +# Uni1 = "d" # Units for axis 1 (day) +# Uni2 = "hh:mm:ss.s" # Units for axis 2 +# Uni3 = "ddd:mm:ss" # Units for axis 3 +# Uni4 = "MHz" # Units for axis 4 +# Uni5 = "km/s" # Units for axis 5 +# Dir2 = 0 # Plot axis 2 in reverse direction + IsA Frame # Coordinate system description + Adapt = 1 # Region adapts to coord sys changes + Frm = # Coordinate system + Begin CmpFrame # Compound coordinate system description +# Title = "5-d compound coordinate system" # Title of coordinate system +# Naxes = 5 # Number of coordinate axes +# Domain = "TIME-SKY-SPECTRUM-REDSHIFT" # Coordinate system domain +# Lbl1 = "Modified Julian Date offset from 1996-01-01 " # Label for axis 1 +# Lbl2 = "Right ascension" # Label for axis 2 +# Lbl3 = "Declination" # Label for axis 3 +# Lbl4 = "Frequency" # Label for axis 4 +# Lbl5 = "Optical velocity" # Label for axis 5 +# Uni1 = "d" # Units for axis 1 (day) +# Uni2 = "hh:mm:ss.s" # Units for axis 2 +# Uni3 = "ddd:mm:ss" # Units for axis 3 +# Uni4 = "MHz" # Units for axis 4 +# Uni5 = "km/s" # Units for axis 5 +# Dir2 = 0 # Plot axis 2 in reverse direction + IsA Frame # Coordinate system description + FrameA = # First component Frame + Begin CmpFrame # Compound coordinate system description + FrameA = # First component Frame + Begin CmpFrame # Compound coordinate system description + FrameA = # First component Frame + Begin TimeFrame # Description of time coordinate system + Naxes = 1 # Number of coordinate axes + Epoch = 1995.9986310746 # Julian epoch of observation + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + End Axis + IsA Frame # Coordinate system description + TmScl = "TT" # Time scale + TmOrg = 50083 # Time offset + End TimeFrame + FrameB = # Second component Frame + Begin SkyFrame # Description of celestial coordinate system + Naxes = 2 # Number of coordinate axes + Epoch = 1995.9986310746 # Julian epoch of observation + System = "ICRS" # Coordinate system type + Ax1 = # Axis number 1 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + Ax2 = # Axis number 2 + Begin SkyAxis # Celestial coordinate axis + End SkyAxis + IsA Frame # Coordinate system description + End SkyFrame + End CmpFrame + FrameB = # Second component Frame + Begin SpecFrame # Description of spectral coordinate system + Naxes = 1 # Number of coordinate axes + Epoch = 1995.9986310746 # Julian epoch of observation + System = "FREQ" # Coordinate system type + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Unit = "MHz" # Axis units + End Axis + IsA Frame # Coordinate system description + SoR = "Barycentric" # Standard of rest + UFreq = "MHz" # Preferred units for frequency + End SpecFrame + End CmpFrame + FrameB = # Second component Frame + Begin SpecFrame # Description of spectral coordinate system + Naxes = 1 # Number of coordinate axes + Domain = "REDSHIFT" # Coordinate system domain + Epoch = 1995.9986310746 # Julian epoch of observation + System = "VOPT" # Coordinate system type + Ax1 = # Axis number 1 + Begin Axis # Coordinate axis + Unit = "km/s" # Axis units + End Axis + IsA Frame # Coordinate system description + SoR = "Barycentric" # Standard of rest + UVopt = "km/s" # Preferred units for optical velocity + End SpecFrame + End CmpFrame + RegAxes = 5 # Number of axes spanned by the Region + IsA Region # An area within a coordinate system + RegionA = # First component Region + Begin Prism # Region extrusion into higher dimensions +# Title = "4-d compound coordinate system" # Title of coordinate system +# Naxes = 4 # Number of coordinate axes +# Domain = "TIME-SKY-SPECTRUM" # Coordinate system domain +# Epoch = 1995.9986310746 # Julian epoch of observation +# Lbl1 = "Modified Julian Date offset from 1996-01-01 " # Label for axis 1 +# Lbl2 = "Right ascension" # Label for axis 2 +# Lbl3 = "Declination" # Label for axis 3 +# Lbl4 = "Frequency" # Label for axis 4 +# System = "Compound" # Coordinate system type +# Uni1 = "d" # Units for axis 1 (day) +# Uni2 = "hh:mm:ss.s" # Units for axis 2 +# Uni3 = "ddd:mm:ss" # Units for axis 3 +# Uni4 = "MHz" # Units for axis 4 +# Dir2 = 0 # Plot axis 2 in reverse direction + IsA Frame # Coordinate system description + Adapt = 1 # Region adapts to coord sys changes + RegAxes = 4 # Number of axes spanned by the Region + IsA Region # An area within a coordinate system + RegionA = # First component Region + Begin Prism # Region extrusion into higher dimensions +# Title = "3-d compound coordinate system" # Title of coordinate system +# Naxes = 3 # Number of coordinate axes +# Domain = "TIME-SKY" # Coordinate system domain +# Epoch = 1995.9986310746 # Julian epoch of observation +# Lbl1 = "Modified Julian Date offset from 1996-01-01 " # Label for axis 1 +# Lbl2 = "Right ascension" # Label for axis 2 +# Lbl3 = "Declination" # Label for axis 3 +# System = "Compound" # Coordinate system type +# Uni1 = "d" # Units for axis 1 (day) +# Uni2 = "hh:mm:ss.s" # Units for axis 2 +# Uni3 = "ddd:mm:ss" # Units for axis 3 +# Dir2 = 0 # Plot axis 2 in reverse direction + IsA Frame # Coordinate system description + Adapt = 1 # Region adapts to coord sys changes + RegAxes = 3 # Number of axes spanned by the Region + IsA Region # An area within a coordinate system + RegionA = # First component Region + Begin Box # Axis intervals +# Title = "Modified Julian Date [TT] offset from 1996-01-01 00:00:00" # Title of coordinate system +# Naxes = 1 # Number of coordinate axes +# Domain = "TIME" # Coordinate system domain +# Epoch = 1995.9986310746 # Julian epoch of observation +# Lbl1 = "Modified Julian Date offset from 1996-01-01 " # Label for axis 1 +# System = "MJD" # Coordinate system type +# Uni1 = "d" # Units for axis 1 (day) + IsA Frame # Coordinate system description + Closed = 1 # Boundary is inside + Adapt = 1 # Region adapts to coord sys changes + Points = # Points defining the shape + Begin PointSet # Container for a set of points + Npoint = 2 # Number of points + Ncoord = 1 # Number of coordinates per point + X1 = 0.0104166666678793 # Coordinate values... + X2 = 0.0208333333357587 + End PointSet + Unc = # Region defining positional uncertainties. + Begin Box # Axis intervals +# Title = "Modified Julian Date [TT] offset from 1996-01-01 00:00:00" # Title of coordinate system +# Naxes = 1 # Number of coordinate axes +# Domain = "TIME" # Coordinate system domain +# Epoch = 1995.9986310746 # Julian epoch of observation +# Lbl1 = "Modified Julian Date offset from 1996-01-01 " # Label for axis 1 +# System = "MJD" # Coordinate system type +# Uni1 = "d" # Units for axis 1 (day) + IsA Frame # Coordinate system description + Adapt = 1 # Region adapts to coord sys changes + Points = # Points defining the shape + Begin PointSet # Container for a set of points + Npoint = 2 # Number of points + Ncoord = 1 # Number of coordinates per point + X1 = 0.0104166666678793 # Coordinate values... + X2 = 0.0104305555567682 + End PointSet + IsA Region # An area within a coordinate system + End Box + IsA Region # An area within a coordinate system + End Box + RegionB = # Second component Region + Begin Circle # Circular or spherical region +# Title = "ICRS coordinates" # Title of coordinate system +# Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain +# Epoch = 1995.9986310746 # Julian epoch of observation +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# System = "ICRS" # Coordinate system type +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Dir1 = 0 # Plot axis 1 in reverse direction +# Bot2 = -1.5707963267949 # Lowest legal axis value +# Top2 = 1.5707963267949 # Highest legal axis value + IsA Frame # Coordinate system description + Adapt = 1 # Region adapts to coord sys changes + Points = # Points defining the shape + Begin PointSet # Container for a set of points + Npoint = 2 # Number of points + Ncoord = 2 # Number of coordinates per point + X1 = 3.12413936106985 # Coordinate values... + X2 = -0.200712863979348 + X3 = 3.13304478740064 + X4 = -0.200712708456374 + End PointSet + Unc = # Region defining positional uncertainties. + Begin Box # Axis intervals +# Title = "ICRS coordinates" # Title of coordinate system +# Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain +# Epoch = 1995.9986310746 # Julian epoch of observation +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# System = "ICRS" # Coordinate system type +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Dir1 = 0 # Plot axis 1 in reverse direction +# Bot2 = -1.5707963267949 # Lowest legal axis value +# Top2 = 1.5707963267949 # Highest legal axis value + IsA Frame # Coordinate system description + Adapt = 1 # Region adapts to coord sys changes + Points = # Points defining the shape + Begin PointSet # Container for a set of points + Npoint = 2 # Number of points + Ncoord = 2 # Number of coordinates per point + X1 = 3.12413936106985 # Coordinate values... + X2 = -0.200712863979348 + X3 = 3.12415519494 + X4 = -0.200697348002298 + End PointSet + IsA Region # An area within a coordinate system + End Box + IsA Region # An area within a coordinate system + End Circle + End Prism + RegionB = # Second component Region + Begin PointList # Collection of points +# Title = "Frequency (Barycentric)" # Title of coordinate system +# Naxes = 1 # Number of coordinate axes +# Domain = "SPECTRUM" # Coordinate system domain +# Epoch = 1995.9986310746 # Julian epoch of observation +# Lbl1 = "Frequency" # Label for axis 1 +# System = "FREQ" # Coordinate system type +# Uni1 = "MHz" # Units for axis 1 + IsA Frame # Coordinate system description + Adapt = 1 # Region adapts to coord sys changes + Points = # Points defining the shape + Begin PointSet # Container for a set of points + Npoint = 1 # Number of points + Ncoord = 1 # Number of coordinates per point + X1 = 1420.4 # Coordinate values... + End PointSet + IsA Region # An area within a coordinate system + End PointList + End Prism + RegionB = # Second component Region + Begin Box # Axis intervals +# Title = "Optical velocity (Barycentric), rest frequency = 100000 GHz" # Title of coordinate system +# Naxes = 1 # Number of coordinate axes +# Domain = "REDSHIFT" # Coordinate system domain +# Epoch = 1995.9986310746 # Julian epoch of observation +# Lbl1 = "Optical velocity" # Label for axis 1 +# System = "VOPT" # Coordinate system type +# Uni1 = "km/s" # Units for axis 1 + IsA Frame # Coordinate system description + Closed = 1 # Boundary is inside + Adapt = 1 # Region adapts to coord sys changes + Points = # Points defining the shape + Begin PointSet # Container for a set of points + Npoint = 2 # Number of points + Ncoord = 1 # Number of coordinates per point + X1 = 1250 # Coordinate values... + X2 = 2300 + End PointSet + IsA Region # An area within a coordinate system + End Box + End Prism diff --git a/ast/ast_tester/testchannel.f b/ast/ast_tester/testchannel.f new file mode 100644 index 0000000..ac69b2c --- /dev/null +++ b/ast/ast_tester/testchannel.f @@ -0,0 +1,88 @@ + program testrate + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'AST_ERR' + + integer status, ch, sf, sf2 + character buff*50 + status = sai__ok + + call err_begin( status ) + call ast_begin( status ) + + + call ast_tunec( "hrdel", AST__TUNULLC, buff, status ) + if( buff .ne. '%-%^50+%s70+h%+' .and. status .eq. sai__ok ) then + call stopit( 0, status ) + endif + call ast_tunec( "hrdel", "junk", buff, status ) + call ast_tunec( "hrdel", AST__TUNULLC, buff, status ) + if( buff .ne. 'junk' .and. status .eq. sai__ok ) then + call stopit( -1, status ) + endif + + sf = ast_skyframe( ' ', status ) + ch = ast_channel( AST_NULL, AST_NULL, 'SinkFile=./fred.txt', + : status ) + if( ast_write( ch, sf, status ) .ne. 1 ) then + call stopit( 1, status ) + end if + + call ast_set( ch, 'SourceFile=./fred.txt', status ) + if( status .eq. SAI__OK ) then + sf2 = ast_read( ch, status ) + if( status .eq. AST__RDERR ) then + call err_annul( status ) + else + call stopit( 7, status ) + end if + end if + + call ast_clear( ch, 'SinkFile', status ) + + call ast_set( ch, 'SourceFile=./fred.txt', status ) + sf2 = ast_read( ch, status ) + if( sf2 .eq. AST__NULL ) call stopit( 2, status ) + if( .not. ast_equal( sf, sf2, status ) ) then + call stopit( 3, status ) + end if + + + call ast_set( ch, 'SinkFile=./fred2.txt', status ) + if( ast_write( ch, sf, status ) .ne. 1 ) then + call stopit( 4, status ) + end if + call ast_clear( ch, 'SinkFile', status ) + + call ast_set( ch, 'SourceFile=./fred2.txt', status ) + sf2 = ast_read( ch, status ) + if( sf2 .eq. AST__NULL ) call stopit( 5, status ) + if( .not. ast_equal( sf, sf2, status ) ) then + call stopit( 6, status ) + end if + + + call ast_end( status ) + call err_end( status ) + + + + if( status .eq. sai__ok ) then + write(*,*) 'All Channel tests passed' + else + write(*,*) 'Channel tests failed' + end if + + end + + + subroutine stopit( i, status ) + implicit none + include 'SAE_PAR' + integer i, status + if( status .eq. sai__ok ) then + write( *,* ) 'Error ',i + status = sai__error + end if + end diff --git a/ast/ast_tester/testchebymap.f b/ast/ast_tester/testchebymap.f new file mode 100644 index 0000000..b0a0bba --- /dev/null +++ b/ast/ast_tester/testchebymap.f @@ -0,0 +1,475 @@ + program testchebymap + implicit none + + include 'SAE_PAR' + include 'AST_PAR' + include 'PRM_PAR' + + integer status, lstat, cm, cm2, cm3, i, j, nco + double precision lbnd( 2 ), ubnd( 2 ), dval, lb, ub, xl(2), xu(2) + double precision tlbnd( 2 ), tubnd( 2 ), dlbnd( 2 ), dubnd( 2 ) + + double precision coeffs_1( 4*3 ), xin( 5 ), xout( 5 ), xrec( 5 ), + : yrec( 5 ), coeffs_4(4*4 ), + : work( 5 ), coeffs_2( 2*3 ), coeffs_3( 4*5 ), + : yin(5), yout(5), xi, yi, xv, yv, y, a, x, + : cofs( 100 ) + + +C f(x) = 1.5*T0(x') - 1.0*T2(x') + 2.0*T3(x') - 1.3*T4(x') + data coeffs_1 /1.5D0, 1.0D0, 0.0D0, + : -1.0D0, 1.0D0, 2.0D0, + : 2.0D0, 1.0D0, 3.0D0, + : 1.3D0, 1.0D0, 4.0D0 / + +C f(x) = 1.0*T0(x') - 2.0*T1(x') + data coeffs_2 /1.0D0, 1.0D0, 0.0D0, + : -2.0D0, 1.0D0, 1.0D0 / + + +C fx(x,y) = 1.0*T0(x')*T0(y') - 2.0*T1(x')*T2(y') + T1(y') +C fy(x,y) = 1.5*T0(x')*T0(y') - 2.5*T1(x')*T2(y') + data coeffs_3 /1.0D0, 1.0D0, 0.0D0, 0.0D0, + : -2.0D0, 1.0D0, 1.0D0, 2.0D0, + : 1.0D0, 1.0D0, 0.0D0, 1.0D0, + : 1.5D0, 2.0D0, 0.0D0, 0.0D0, + : -2.5D0, 2.0D0, 1.0D0, 2.0D0/ + +C fx(x,y) = T1(x') + T1(y') +C fy(x,y) = T1(x') - T1(y') +C +C This has the property that the coeffs of the inverse transformation are +C equal to the coeffs of the forward transformation. + data coeffs_4 /1.0D0, 1.0D0, 1.0D0, 0.0D0, + : 1.0D0, 1.0D0, 0.0D0, 1.0D0, + : 1.0D0, 2.0D0, 1.0D0, 0.0D0, + : -1.0D0, 2.0D0, 0.0D0, 1.0D0 / + + + status = sai__ok + call ast_begin( status ) + +C One-dimensional ChebyMaps, order 1: a constant equal to 1.5 + lbnd( 1 ) = -1.0D0 + lbnd( 2 ) = -1.0D0 + ubnd( 1 ) = 1.0D0 + ubnd( 2 ) = 1.0D0 + + cm = ast_chebymap( 1, 1, 1, coeffs_1, 0, 0.0D0, lbnd, ubnd, 1.0D0, + : 1.0D0, ' ', status ) + + xin( 1 ) = -1.0D0 + xin( 2 ) = -0.5D0 + xin( 3 ) = 0.0D0 + xin( 4 ) = 0.5D0 + xin( 5 ) = 1.0D0 + + call ast_tran1( cm, 5, xin, .true., xout, status ) + do i = 1, 5 + if( xout( i ) .ne. 1.5D0 ) call stopit( 0, status ) + end do + +C One-dimensional ChebyMaps, order 3: 2.5 - 2*x*x + cm = ast_chebymap( 1, 1, 2, coeffs_1, 0, 0.0D0, lbnd, ubnd, 1.0D0, + : 1.0D0, ' ', status ) + call ast_tran1( cm, 5, xin, .true., xout, status ) + do i = 1, 5 + if( xout( i ) .ne. 2.5D0 - 2.0D0*xin( i )**2 ) + : call stopit( 1, status ) + end do + +C One-dimensional ChebyMaps, order 4: 2.5 - 6*x - 2*x*x + 8*x*x*x + cm = ast_chebymap( 1, 1, 3, coeffs_1, 0, 0.0D0, lbnd, ubnd, 1.0D0, + : 1.0D0, ' ', status ) + call ast_tran1( cm, 5, xin, .true., xout, status ) + do i = 1, 5 + dval = 2.5D0-6.0D0*xin(i)-2.0D0*xin(i)**2+8.0D0*xin(i)**3 + if( xout( i ) .ne. dval ) call stopit( 2, status ) + end do + +C One-dimensional ChebyMaps, order 5 + cm = ast_chebymap( 1, 1, 4, coeffs_1, 0, 0.0D0, lbnd, ubnd, 1.0D0, + : 1.0D0, ' ', status ) + call ast_tran1( cm, 5, xin, .true., xout, status ) + + do i = 1, 5 + work( 1 ) = 1.0D0 + work( 2 ) = xin( i ) + do j = 3, 5 + work( j ) = 2.0D0 * xin( i ) * work( j - 1 ) + : - work( j - 2 ) + end do + + if( 1.5D0*work(1) - 1.0D0*work(3) + + : 2.0D0*work(4) + 1.3D0*work(5) .ne. + : xout( i ) ) call stopit( 3, status ) + + end do + +C Check the IterInverse attribute is zero. + if( ast_getl( cm, 'IterInverse', status ) ) then + call stopit( 4, status ) + end if + +c The astPolyTran method on a 1-dimensional ChebyMaps, order 2: 1 - 2*x + cm = ast_chebymap( 1, 1, 2, coeffs_2, 0, 0.0D0, lbnd, ubnd, 1.0D0, + : 1.0D0, ' ', status ) + cm2 = ast_polytran( cm, .false., 0.01D0, 0.01D0, 5, lbnd, + : ubnd, status ) + if( cm2 .eq. AST__NULL ) then + call stopit( 5, status ) + else + xin( 1 ) = -1.0D0 + xin( 2 ) = -0.5D0 + xin( 3 ) = 0.0D0 + xin( 4 ) = 0.5D0 + xin( 5 ) = 1.0D0 + call ast_tran1( cm2, 5, xin, .true., xout, status ) + call ast_tran1( cm2, 5, xout, .false., xrec, status ) + do i = 1, 5 + if( abs( xrec(i) - xin(i) ) .gt. 1.0D-3*abs( xin(i) ) ) + : call stopit( 6, status ) + end do + + call ast_chebydomain( cm2, .false., dlbnd, dubnd, status ) + if( dlbnd(1) .ne. -1.0D0 ) + : call stopit( 501, status ) + if( dubnd(1) .ne. 3.0D0 ) + : call stopit( 502, status ) + + call ast_polycoeffs( cm2, .false., 100, cofs, nco, status ) + if( nco .ne. 1 ) + : call stopit( 503, status ) + + if( abs( cofs(1) + 1.0D0 ) .gt. 1.0D-10 ) + : call stopit( 504, status ) + if( abs( cofs(2) - 1.0D0 ) .gt. 1.0D-10 ) + : call stopit( 505, status ) + if( abs( cofs(3) - 1.0D0 ) .gt. 1.0D-10 ) + : call stopit( 506, status ) + + end if + +c The astPolyTran method on a 1-dimensional ChebyMaps, order 5. + lbnd( 1 ) = -100.0D0 + ubnd( 1 ) = 100.0D0 + cm = ast_chebymap( 1, 1, 4, coeffs_1, 0, 0.0D0, lbnd, ubnd, 1.0D0, + : 1.0D0, ' ', status ) + cm2 = ast_polytran( cm, .false., 0.01D0, 0.01D0, 10, -5.0D0, + : 50.0D0, status ) + + if( cm2 .eq. AST__NULL ) then + call stopit( 7, status ) + else + xin(1) = 0.0D0; + xin(2) = 10.0D0; + xin(3) = 20.0D0; + xin(4) = 30.0D0; + xin(5) = 40.0D0; + call ast_tran1( cm2, 5, xin, .true., xout, status ) + call ast_tran1( cm2, 5, xout, .false., xrec, status ) + + do i = 1, 5 + if( abs( xrec( i ) - xin( i ) ) .gt. 0.01D0 ) + : call stopit( 8, status ) + end do + end if + +c ast_equal and ast_copy + cm3 = ast_copy( cm2, status ) + if( .not. ast_equal( cm2, cm3, status ) ) then + call stopit( 9, status ) + end if + +c astDump and astLoadChebyMap + call checkdump( cm2, status ) + + +c Simple 2d ChebyMap. +C fx(x,y) = T1(x') + T1(y') +C fy(x,y) = T1(x') - T1(y') + + lbnd(1) = -1.0D0 + lbnd(2) = -1.0D0 + ubnd(1) = 1.0D0 + ubnd(2) = 1.0D0 + + cm = ast_chebymap( 2, 2, 4, coeffs_4, 0, 0.0D0, lbnd, ubnd, + : 1.0D0, 1.0D0, ' ', status ) + + cm2 = ast_copy( cm, status ) + call ast_invert( cm2, status ) + cm3 = ast_simplify( ast_cmpmap( cm, cm2, .TRUE., ' ', status ), + : status ) + if( .not. ast_isaunitmap( cm3, status ) ) then + call stopit( 1000, status ) + end if + + xin(1) = 0.5D0 + xin(2) = 0.0D0 + xin(3) = -0.5D0 + xin(4) = 0.0D0 + + yin(1) = 0.0D0 + yin(2) = 0.5D0 + yin(3) = 0.0D0 + yin(4) = -0.5D0 + + call ast_tran2( cm, 4, xin, yin, .true., xout, yout, status ) + do i = 1, 4 + xv = xin(i) + yin(i) + yv = xin(i) - yin(i) + + if( abs( xout(i) - xv ) .gt. 1.0D-6*abs(xv) .or. + : abs( yout(i) - yv ) .gt. 1.0D-6*abs(yv) ) then + call stopit( 101, status ) + end if + end do + + cm2 = ast_polytran( cm, .false., 0.01D0, 0.01D0, 10, lbnd, + : ubnd, status ) + + if( cm2 .eq. AST__NULL ) then + call stopit( 102, status ) + else + call ast_tran2( cm2, 4, xout, yout, .false., xrec, yrec, + : status ) + do i = 1, 4 + if( abs( xrec(i) - xin(i) ) .gt. 0.01D0 .or. + : abs( yrec(i) - yin(i) ) .gt. 0.01D0 ) then + call stopit( 103, status ) + end if + end do + end if + + call ast_polycoeffs( cm2, .false., 100, cofs, nco, status ) + if( nco .ne. 4 ) then + call stopit( 104, status ) + else + do i = 1, 16 + if( abs( cofs(i) - coeffs_4(i) ) .gt. 0.01D0 ) then + call stopit( 105, status ) + end if + end do + end if + + call ast_chebydomain( cm2, .false., dlbnd, dubnd, status ) + + if( dlbnd(1) .ne. -2.0D0 ) then + call stopit( 106, status ) + else if( dlbnd(2) .ne. -2.0D0 ) then + call stopit( 107, status ) + else if( dubnd(1) .ne. 2.0D0 ) then + call stopit( 108, status ) + else if( dubnd(2) .ne. 2.0D0 ) then + call stopit( 109, status ) + end if + +* 2-dimensional ChebyMaps: forward transformation + lbnd(1) = 0.0D0 + lbnd(2) = 0.0D0 + ubnd(1) = 10.0D0 + ubnd(2) = 10.0D0 + + cm = ast_chebymap( 2, 2, 5, coeffs_3, 0, 0.0D0, lbnd, ubnd, + : 1.0D0, 1.0D0, ' ', status ) + + xin(1) = 0.0D0 + xin(2) = 2.0D0 + xin(3) = 6.0D0 + xin(4) = 10.0D0 + + yin(1) = 2.0D0 + yin(2) = 5.0D0 + yin(3) = 8.0D0 + yin(4) = 0.0D0 + + call ast_tran2( cm, 4, xin, yin, .true., xout, yout, status ) + do i = 1, 4 + xi = 2.0D0*( xin(i) - lbnd(1) )/( ubnd(1) - lbnd(1) ) - 1.0D0 + yi = 2.0D0*( yin(i) - lbnd(2) )/( ubnd(2) - lbnd(2) ) - 1.0D0 + + xv = 1 - 2*xi*(2*yi**2 - 1) + yi + yv = 1.5 - 2.5*xi*(2*yi**2 - 1) + + if( abs( xout(i) - xv ) .gt. 1.0D-6*abs(xv) .or. + : abs( yout(i) - yv ) .gt. 1.0D-6*abs(yv) ) then + call stopit( 10, status ) + end if + end do + + +* 2-dimensional ChebyMaps: fitted inverse transformation + tlbnd(1) = 4.0D0 + tlbnd(2) = 4.0D0 + tubnd(1) = 6.0D0 + tubnd(2) = 6.0D0 + cm2 = ast_polytran( cm, .false., 0.01D0, 0.01D0, 10, tlbnd, + : tubnd, status ) + + if( cm2 .eq. AST__NULL ) then + call stopit( 11, status ) + else + xin(1) = 4.0D0 + xin(2) = 4.5D0 + xin(3) = 5.0D0 + xin(4) = 5.5D0 + + yin(1) = 6.0D0 + yin(2) = 5.5D0 + yin(3) = 5.0D0 + yin(4) = 4.5D0 + + call ast_tran2( cm2, 4, xin, yin, .true., xout, yout, status ) + call ast_tran2( cm2, 4, xout, yout, .false., xrec, yrec, + : status ) + do i = 1, 4 + if( abs( xrec(i) - xin(i) ) .gt. 0.01D0 .or. + : abs( yrec(i) - yin(i) ) .gt. 0.01D0 ) then + call stopit( 12, status ) + end if + end do + end if + + +* Test recovery of coeffs + call ast_polycoeffs( cm2, .true., 0, 0.0D0, nco, status ) + if( nco .ne. 5 ) then + call stopit( 13, status ) + endif + + call ast_polycoeffs( cm2, .true., 100, cofs, nco, status ) + if( nco .ne. 5 ) then + call stopit( 14, status ) + else + do i = 1, 20 + if( cofs( i ) .ne. coeffs_3( i ) ) then + call stopit( 15, status ) + end if + end do + endif + + call ast_polycoeffs( cm2, .false., 0, 0.0D0, nco, status ) + if( nco .ne. 9 ) then + call stopit( 16, status ) + endif + + call ast_polycoeffs( cm2, .false., 100, cofs, nco, status ) + + if( nco .ne. 9 ) then + call stopit( 17, status ) + else if( abs( cofs( 1 ) - 5.0000000000000018D0 ) .gt. + : 1.0E-6 ) then + call stopit( 18, status ) + else if( abs( cofs( 13 ) - 0.35096188953505458D0 ) .gt. + : 1.0E-6 ) then + call stopit( 19, status ) + else if( cofs( 15 ) .ne. 2.0D0 ) then + call stopit( 20, status ) + end if + +* Test recovery of domain bounding box + call ast_chebydomain( cm, .true., dlbnd, dubnd, status ) + + if( dlbnd(1) .ne. lbnd(1) ) then + call stopit( 21, status ) + else if( dlbnd(2) .ne. lbnd(2) ) then + call stopit( 22, status ) + else if( dubnd(1) .ne. ubnd(1) ) then + call stopit( 23, status ) + else if( dubnd(2) .ne. ubnd(2) ) then + call stopit( 24, status ) + end if + + call ast_chebydomain( cm, .false., dlbnd, dubnd, status ) + + if( dlbnd(1) .ne. -2.0D0 ) then + call stopit( 25, status ) + else if( dlbnd(2) .ne. -1.0D0 ) then + call stopit( 26, status ) + else if( dubnd(1) .ne. 4.0D0 ) then + call stopit( 27, status ) + else if( dubnd(2) .ne. 4.0D0 ) then + call stopit( 28, status ) + end if + + + call ast_chebydomain( cm2, .true., dlbnd, dubnd, status ) + + if( dlbnd(1) .ne. lbnd(1) ) then + call stopit( 29, status ) + else if( dlbnd(2) .ne. lbnd(2) ) then + call stopit( 30, status ) + else if( dubnd(1) .ne. ubnd(1) ) then + call stopit( 31, status ) + else if( dubnd(2) .ne. ubnd(2) ) then + call stopit( 32, status ) + end if + + call ast_chebydomain( cm2, .false., dlbnd, dubnd, status ) + + if( abs( dlbnd(1) - 0.432 ) .gt. 1.0D-6 ) then + call stopit( 33, status ) + else if( abs( dlbnd(2) - 1.000816 ) .gt. 1.0D-6 ) then + call stopit( 34, status ) + else if( abs( dubnd(1) - 1.568D0 ) .gt. 1.0D-6 ) then + call stopit( 35, status ) + else if( abs( dubnd(2) - 1.9991836D0 ) .gt. 1.0D-6 ) then + call stopit( 36, status ) + end if + + + call ast_end( status ) + call ast_activememory( 'testchebymap' ); + call ast_flushmemory( 1 ) + + if( status .eq. sai__ok ) then + write(*,*) 'All ChebyMap tests passed' + else + write(*,*) 'ChebyMap tests failed' + end if + + end + + + subroutine stopit( i, status ) + implicit none + include 'SAE_PAR' + integer i, status + if( status .eq. sai__ok ) then + write( *,* ) 'Error ',i + status = sai__error + end if + end + + + subroutine checkdump( obj, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer obj, status, ch, result + + if( status .ne. sai__ok ) return + + ch = ast_channel( AST_NULL, AST_NULL, ' ', status ) + + call ast_set( ch, 'SinkFile=fred.tmp', status ) + if( ast_write( ch, obj, status ) .ne. 1 ) then + call stopit( -1, status ) + end if + call ast_clear( ch, 'SinkFile', status ) + + call ast_set( ch, 'SourceFile=fred.tmp', status ) + result = ast_read( ch, status ) + if( result .eq. ast__null ) then + call stopit( -2, status ) + end if + call ast_clear( ch, 'SourceFile', status ) + + if( .not. ast_equal( result, obj, status ) ) then + call ast_show( obj, status ) + call ast_show( result, status ) + call stopit( -3, status ) + end if + + end diff --git a/ast/ast_tester/testcmpmap.f b/ast/ast_tester/testcmpmap.f new file mode 100644 index 0000000..bd3cad1 --- /dev/null +++ b/ast/ast_tester/testcmpmap.f @@ -0,0 +1,149 @@ + program testcmpmap + implicit none + + include 'AST_PAR' + include 'SAE_PAR' + + integer m1, m2, m3, m4, m5, status, i, in(7), out(7) + double precision x( 7 ), y(7), y2(7), matrix( 3 ) + + data matrix /-1.0D0, 1.0D0, 2.0D0 / + + status = sai__ok + call err_mark( status ) + call ast_begin( status ) + + + m1 = ast_UnitMap( 1, ' ', status ) + m2 = ast_ZoomMap( 2, 2.0D0, ' ', status ) + m3 = ast_MatrixMap( 3, 3, 1, matrix, ' ', status ) + m4 = ast_CmpMap( ast_CmpMap( m1, m2, .false., ' ', status ), m3, + : .false., ' ', status ) + + + in( 1 ) = 3 + in( 2 ) = 6 + in( 3 ) = 4 + call ast_mapsplit( m4, 3, in, out, m5, status ) + if( m5 .eq. AST__NULL ) then + call stopit( status, 'Error 1' ) + else if( ast_geti( m5, 'Nin', status ) .ne. 3 ) then + call stopit( status, 'Error 2' ) + else if( ast_geti( m5, 'Nout', status ) .ne. 3 ) then + call stopit( status, 'Error 3' ) + end if + + if( out( 1 ) .ne. 3 ) call stopit( status, 'Error 4' ) + if( out( 2 ) .ne. 4 ) call stopit( status, 'Error 5' ) + if( out( 3 ) .ne. 6 ) call stopit( status, 'Error 6' ) + + + call readobj( 'splittest1.ast', m1, status ) + in(1)= 1 + call ast_mapsplit( m1, 1, in, out, m2, status ) + if( m2 .ne. AST__NULL ) call stopit( status, 'Error 7' ) + + in(2)= 4 + in(3)= 2 + call ast_mapsplit( m1, 3, in, out, m2, status ) + if( m2 .eq. AST__NULL ) then + call stopit( status, 'Error 8' ) + else if( ast_geti( m2, 'Nin', status ) .ne. 3 ) then + call stopit( status, 'Error 9' ) + else if( ast_geti( m2, 'Nout', status ) .ne. 3 ) then + call stopit( status, 'Error 10' ) + end if + + + + x(1) = 1.0D0 + x(2) = 2.0D0 + x(3) = 4.0D0 + x(4) = 8.0D0 + call ast_trann( m1, 1,4, 1, x, .true., 4, 1, y, status ) + + x(1) = 1.0D0 + x(2) = 8.0D0 + x(3) = 2.0D0 + call ast_trann( m2, 1, 3, 1, x, .true., 3, 1, y2, status ) + + if( y2( 1 ) .ne. y( 1 ) ) then + call stopit( status, 'Error 11' ) + else if( y2( 2 ) .ne. y( 2 ) ) then + call stopit( status, 'Error 12' ) + else if( y2( 3 ) .ne. y( 4 ) ) then + call stopit( status, 'Error 13' ) + end if + + + + + + + + call ast_end( status ) + call err_rlse( status ) + +c call ast_activememory( 'testcmpmap' ) + call ast_flushmemory( 1 ) + + if( status .eq. sai__ok ) then + write(*,*) 'All cmpmap tests passed' + else + write(*,*) 'cmpmap tests failed' + end if + + end + + + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + end + + + + subroutine readobj( file, iobj, status ) + implicit none + + include 'AST_PAR' + include 'SAE_PAR' + + external chsource + integer iobj, status, ch + character file*(*) + + open( 10, status='old', file=file ) + + ch = ast_channel( chsource, AST_NULL, ' ', status ) + iobj = ast_read( ch, status ) + call ast_annul( ch, status ) + + close( 10 ) + + end + + subroutine chsource( status ) + implicit none + + include 'AST_PAR' + include 'SAE_PAR' + + integer status + character line*200 + + read( 10, '(A)', end=99 ) line + + call ast_putline( line, len( line ), status ) + return + + 99 call ast_putline( line, -1, status ) + + end + diff --git a/ast/ast_tester/testconvert.c b/ast/ast_tester/testconvert.c new file mode 100644 index 0000000..d28c318 --- /dev/null +++ b/ast/ast_tester/testconvert.c @@ -0,0 +1,232 @@ +#define astCLASS testconvert + +#include "ast_err.h" +#include "error.h" +#include "object.h" +#include "skyframe.h" +#include "specframe.h" +#include "cmpframe.h" +#include "frame.h" +#include "unitmap.h" +#include "permmap.h" + +int main(){ + int status_value = 0; + int *status = &status_value; + + AstFrameSet *fs; + + AstSkyFrame *sf = astSkyFrame( " ", status ); + AstSpecFrame *df = astSpecFrame( " ", status ); + AstCmpFrame *cf = astCmpFrame( df, sf, " ", status ); + AstFrame *bf = astFrame( 2, "Domain=SKY", status ); + AstFrame *target, *template; + + + fs = astConvert( bf, sf, " " ); + if( fs ) { + if( !astEqual( astGetFrame( fs, AST__BASE ), bf ) && astOK ) { + astError( AST__INTER, "Error 1\n", status ); + } else if( !astEqual( astGetFrame( fs, AST__CURRENT ), sf ) && astOK ) { + astError( AST__INTER, "Error 2\n", status ); + } else if( !astIsAUnitMap( astGetMapping( fs, AST__BASE, AST__CURRENT ) ) ) { + astError( AST__INTER, "Error 3\n", status ); + } + } else { + astError( AST__INTER, "Error 4\n", status ); + } + + fs = astConvert( sf, bf, " " ); + if( fs ) { + if( !astEqual( astGetFrame( fs, AST__BASE ), sf ) && astOK ) { + astError( AST__INTER, "Error 5\n", status ); + } else if( !astEqual( astGetFrame( fs, AST__CURRENT ), bf ) && astOK ) { + astError( AST__INTER, "Error 6\n", status ); + } else if( !astIsAUnitMap( astGetMapping( fs, AST__BASE, AST__CURRENT ) ) ) { + astError( AST__INTER, "Error 7\n", status ); + } + } else { + astError( AST__INTER, "Error 8\n", status ); + } + + + astSetDomain( bf, "NOTSKY" ); + fs = astConvert( bf, sf, " " ); + if( fs ) { + astShow( fs ); + astError( AST__INTER, "Error 9\n", status ); + } + + fs = astConvert( sf, bf, " " ); + if( fs ) { + astShow( fs ); + astError( AST__INTER, "Error 10\n", status ); + } + + astClearDomain( bf ); + + fs = astConvert( bf, sf, " " ); + if( fs ) { + if( !astEqual( astGetFrame( fs, AST__BASE ), bf ) && astOK ) { + astError( AST__INTER, "Error 11\n", status ); + } else if( !astEqual( astGetFrame( fs, AST__CURRENT ), sf ) && astOK ) { + astError( AST__INTER, "Error 12\n", status ); + } else if( !astIsAUnitMap( astGetMapping( fs, AST__BASE, AST__CURRENT ) ) ) { + astError( AST__INTER, "Error 13\n", status ); + } + } else { + astError( AST__INTER, "Error 14\n", status ); + } + + fs = astConvert( sf, bf, " " ); + if( fs ) { + if( !astEqual( astGetFrame( fs, AST__BASE ), sf ) && astOK ) { + astError( AST__INTER, "Error 15\n", status ); + } else if( !astEqual( astGetFrame( fs, AST__CURRENT ), bf ) && astOK ) { + astError( AST__INTER, "Error 16\n", status ); + } else if( !astIsAUnitMap( astGetMapping( fs, AST__BASE, AST__CURRENT ) ) ) { + astError( AST__INTER, "Error 17\n", status ); + } + } else { + astError( AST__INTER, "Error 18\n", status ); + } + + + fs = astConvert( bf, cf, " " ); + if( fs ) { + if( !astEqual( astGetFrame( fs, AST__BASE ), bf ) && astOK ) { + astError( AST__INTER, "Error 19\n", status ); + } else if( !astEqual( astGetFrame( fs, AST__CURRENT ), cf ) && astOK ) { + astError( AST__INTER, "Error 20\n", status ); + } else if( !astIsAPermMap( astGetMapping( fs, AST__BASE, AST__CURRENT ) ) ) { + astError( AST__INTER, "Error 21\n", status ); + } + } else { + astError( AST__INTER, "Error 22\n", status ); + } + + fs = astConvert( cf, bf, " " ); + if( fs ) { + if( !astEqual( astGetFrame( fs, AST__BASE ), cf ) && astOK ) { + astError( AST__INTER, "Error 23\n", status ); + } else if( !astEqual( astGetFrame( fs, AST__CURRENT ), bf ) && astOK ) { + astError( AST__INTER, "Error 24\n", status ); + } else if( !astIsAPermMap( astGetMapping( fs, AST__BASE, AST__CURRENT ) ) ) { + astError( AST__INTER, "Error 25\n", status ); + } + } else { + astError( AST__INTER, "Error 26\n", status ); + } + + + astSetDomain( bf, "NOTSKY" ); + fs = astConvert( bf, cf, " " ); + if( fs ) { + astShow( fs ); + astError( AST__INTER, "Error 27\n", status ); + } + + fs = astConvert( cf, bf, " " ); + if( fs ) { + astShow( fs ); + astError( AST__INTER, "Error 28\n", status ); + } + + + astSetDomain( bf, "SKY" ); + fs = astConvert( bf, cf, " " ); + if( fs ) { + if( !astEqual( astGetFrame( fs, AST__BASE ), bf ) && astOK ) { + astError( AST__INTER, "Error 29\n", status ); + } else if( !astEqual( astGetFrame( fs, AST__CURRENT ), cf ) && astOK ) { + astError( AST__INTER, "Error 30\n", status ); + } else if( !astIsAPermMap( astGetMapping( fs, AST__BASE, AST__CURRENT ) ) ) { + astError( AST__INTER, "Error 31\n", status ); + } + } else { + astError( AST__INTER, "Error 32\n", status ); + } + + fs = astConvert( cf, bf, " " ); + if( fs ) { + if( !astEqual( astGetFrame( fs, AST__BASE ), cf ) && astOK ) { + astError( AST__INTER, "Error 33\n", status ); + } else if( !astEqual( astGetFrame( fs, AST__CURRENT ), bf ) && astOK ) { + astError( AST__INTER, "Error 34\n", status ); + } else if( !astIsAPermMap( astGetMapping( fs, AST__BASE, AST__CURRENT ) ) ) { + astError( AST__INTER, "Error 35\n", status ); + } + } else { + astError( AST__INTER, "Error 36\n", status ); + } + + + fs = astConvert( sf, cf, " " ); + if( fs ) { + if( !astEqual( astGetFrame( fs, AST__BASE ), sf ) && astOK ) { + astError( AST__INTER, "Error 37\n", status ); + } else if( !astEqual( astGetFrame( fs, AST__CURRENT ), cf ) && astOK ) { + astError( AST__INTER, "Error 38\n", status ); + } else if( !astIsAPermMap( astGetMapping( fs, AST__BASE, AST__CURRENT ) ) ) { + astError( AST__INTER, "Error 39\n", status ); + } + } else { + astError( AST__INTER, "Error 40\n", status ); + } + + fs = astConvert( cf, sf, " " ); + if( fs ) { + if( !astEqual( astGetFrame( fs, AST__BASE ), cf ) && astOK ) { + astError( AST__INTER, "Error 41\n", status ); + } else if( !astEqual( astGetFrame( fs, AST__CURRENT ), sf ) && astOK ) { + astError( AST__INTER, "Error 42\n", status ); + } else if( !astIsAPermMap( astGetMapping( fs, AST__BASE, AST__CURRENT ) ) ) { + astError( AST__INTER, "Error 43\n", status ); + } + } else { + astError( AST__INTER, "Error 44\n", status ); + } + + + fs = astFindFrame( sf, cf, " " ); + if( !fs && astOK ) { + astError( AST__INTER, "Error 45\n", status ); + } + + fs = astFindFrame( cf, sf, " " ); + if( fs && astOK ) { + astError( AST__INTER, "Error 46\n", status ); + } + + astSetMaxAxes( sf, 3 ); + astSetMinAxes( sf, 1 ); + + fs = astFindFrame( cf, sf, " " ); + if( !fs && astOK ) { + astError( AST__INTER, "Error 47\n", status ); + } else { + if( !astEqual( astGetFrame( fs, AST__BASE ), cf ) && astOK ) { + astError( AST__INTER, "Error 48\n", status ); + } else if( !astEqual( astGetFrame( fs, AST__CURRENT ), sf ) && astOK ) { + astError( AST__INTER, "Error 49\n", status ); + } else if( !astIsAPermMap( astGetMapping( fs, AST__BASE, AST__CURRENT ) ) ) { + astError( AST__INTER, "Error 50\n", status ); + } + } + + target = astFrame( 2, "Domain=ARDAPP", status ); + template = (AstFrame *) astSkyFrame( "System=GAPPT", status ); + fs = astFindFrame( target, template, " " ); + if( fs && astOK ) { + astError( AST__INTER, "Error 51\n", status ); + } + + + + + if( astOK ) { + printf(" All astConvert tests passed\n"); + } else { + printf("astConvert tests failed\n"); + } +} diff --git a/ast/ast_tester/testerror.c b/ast/ast_tester/testerror.c new file mode 100644 index 0000000..d668879 --- /dev/null +++ b/ast/ast_tester/testerror.c @@ -0,0 +1,44 @@ +#include "ast.h" + +#define ERRVAL -1234 +static int flag; + +void myPutErr( int status_value, const char *message ); + +int main(){ + double a[2] = {0.0,0.0}; + +/* Initialise the flag that indicates if the error handler has been + called. */ + flag = 0; + +/* Register the error handler. */ + astSetPutErr( myPutErr ); + +/* Generate an error by making a ShiftMap with a negative number of axes. + The error handler will set the flag to a special value. */ + AstShiftMap *map = astShiftMap( -1, a, " " ); + +/* Clear the error status. */ + astClearStatus; + +/* Clear the error reporter so that the default error reporter is used. */ + astSetPutErr( NULL ); + +/* Report an error if the flag was not set to the correct value. */ + if( flag != ERRVAL ) { + astError( AST__INTER, "Error reporting function has not been " + "called." ); + } + + if( astOK ) { + printf(" All Error tests passed\n"); + } else { + printf("Error tests failed\n"); + } + +} + +void myPutErr( int status_value, const char *message ) { + flag = ERRVAL; +} diff --git a/ast/ast_tester/testfitschan.f b/ast/ast_tester/testfitschan.f new file mode 100644 index 0000000..f2816c3 --- /dev/null +++ b/ast/ast_tester/testfitschan.f @@ -0,0 +1,988 @@ + program testfitschan + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + integer status, fs, fc, i, val, iwcfrm, map + character cards(10)*80, card*80 + logical there + double precision xin, yin, xout, yout + + status = sai__ok + + +c call ast_watchmemory( 225192 ) + call ast_begin( status ) + +* Create a FitsChan that will write its contents out to text file +* fred.txt when it is deleted. + fc = ast_fitschan( AST_NULL, AST_NULL, 'SinkFile=./fred.txt', + : status ) + + if( .not. ast_getl( fc, 'SipOK', status ) ) then + call stopit( 776, ' ', status ) + end if + +* Put a FITS-WCS header into it. + cards(1) = 'CRPIX1 = 45' + cards(2) = 'CRPIX2 = 45' + cards(3) = 'CRVAL1 = 45' + cards(4) = 'CRVAL2 = 89.9' + cards(5) = 'MYNAME = ' + cards(6) = 'CDELT1 = -0.01' + cards(7) = 'CDELT2 = 0.01' + cards(8) = 'CTYPE1 = ''RA---TAN''' + cards(9) = 'CTYPE2 = ''DEC--TAN''' + do i = 1, 9 + call ast_putfits( fc, cards(i), .false., status ) + end do + + call ast_seti( fc, 'Card', 2, status ) + if( .not. ast_getfitsi( fc, '.', val, status ) ) then + call stopit( 777, ' ', status ) + else if( val .ne. 45 ) then + call stopit( 778, ' ', status ) + endif + + call ast_seti( fc, 'Card', 5, status ) + if( ast_testfits( fc, '.', there, status ) ) then + call stopit( 779, ' ', status ) + else if( .not. there ) then + call stopit( 780, ' ', status ) + endif + + if( .not. ast_testfits( fc, 'CDELT1', there, status ) ) then + call stopit( 781, ' ', status ) + else if( .not. there ) then + call stopit( 782, ' ', status ) + endif + + if( ast_testfits( fc, 'ABCDEF', there, status ) ) then + call stopit( 783, ' ', status ) + else if( there ) then + call stopit( 784, ' ', status ) + endif + + call ast_seti( fc, 'Card', 10, status ) + if( ast_testfits( fc, '.', there, status ) ) then + call stopit( 785, ' ', status ) + else if( there ) then + call stopit( 786, ' ', status ) + endif + + card = ast_getc( fc, 'CardName', status ) + if( card .ne. ' ' ) call stopit( 787, ' ', status ) + +* Annul the fitschan. Only 1 ref so this should delete it. + call ast_annul( fc, status ) + +* Create another FitsChan and tell it to read headers from fred.txt. + fc = ast_fitschan( AST_NULL, AST_NULL, 'SourceFile=./fred.txt', + : status ) + +* Check it looks like the original header. + if( ast_geti( fc, 'NCard', status ) .ne. 9 ) then + write(*,*) ast_geti( fc, 'NCard', status ) + call stopit( 1000, ' ', status ) + endif + + if( ast_geti( fc, 'Nkey', status ) .ne. 9 ) then + write(*,*) ast_geti( fc, 'Nkey', status ) + call stopit( 999, ' ', status ) + endif + + call ast_clear( fc, 'Card', status ) + i = 0 + do while( ast_findfits( fc, '%f', card, .true., status ) ) + i = i + 1 + if( card .ne. cards( i ) ) then + call stopit( 1001, ' ', status ) + endif + end do + +* Annul the fitschan. + call ast_annul( fc, status ) + +* Put a simple FITS-WCS header into a FitsChan. + cards(1) = 'CRPIX1 = 45' + cards(2) = 'CRPIX2 = 45' + cards(3) = 'CRVAL1 = 45' + cards(4) = 'CRVAL2 = 89.9' + cards(5) = 'CDELT1 = -0.01' + cards(6) = 'CDELT2 = 0.01' + cards(7) = 'CTYPE1 = ''RA---TAN''' + cards(8) = 'CTYPE2 = ''DEC--TAN''' + + fc = ast_fitschan( AST_NULL, AST_NULL, 'Iwc=1', status ) + do i = 1, 8 + call ast_putfits( fc, cards(i), .false., status ) + end do + + + call ast_clear( fc, 'Card', status ) + if( ast_geti( fc, 'CardType', status ) .NE. AST__INT ) then + write(*,*) ast_geti( fc, 'CardType', status ),' should be ', + : AST__STRING + call stopit( 993, ' ', status ) + endif + + +* Indicate that the CTYPE1 card should be retained by ast_read. + if( ast_findfits( fc, 'CTYPE1', card, .FALSE., status ) ) then + call ast_retainfits( fc, status ) + endif + +* Read a FrameSet from the FitsChan. + call ast_clear( fc, 'Card', status ) + fs = ast_read( fc, status ) + if( fs .eq. AST__NULL ) then + call stopit( 1, 'No FrameSet read from FitsChan', status ) + end if + +* Check the CTYPE1 card is still present in the FitsChan. + call ast_clear( fc, 'Card', status ) + if( .not. ast_findfits( fc, 'CTYPE1', card, .FALSE., + : status ) ) then + call stopit( 2, 'CTYPE1 has not been retained', status ) + end if + +* Check the CTYPE2 card is not present in the FitsChan. + call ast_clear( fc, 'Card', status ) + if( ast_findfits( fc, 'CTYPE2', card, .FALSE., status ) ) then + call stopit( 3, 'CTYPE2 has been retained', status ) + end if + +* Check the IWC Frame is present and check the reference point +* transforms to the origin of IWC. + if( ast_geti( fs, 'Nframe', status ) .ne. 3 ) then + call stopit( 301, 'Wrong number of Frames', status ) + endif + if( ast_geti( fs, 'Current', status ) .ne. 2 ) then + call stopit( 302, 'Wrong current Frame', status ) + endif + iwcfrm = ast_getframe( fs, 3, status ) + if( ast_getc( iwcfrm, 'Domain', status ) .ne. 'IWC' ) then + call stopit( 303, 'Wrong Domain in IWC Frame', status ) + endif + + map = ast_getmapping( fs, 1, 3, status ) + xin = 45.0D0 + yin = 45.0D0 + call ast_tran2( map, 1, xin, yin, .true., xout, yout, status ) + if( xout .ne. 0.0D0 .or. yout .ne. 0.0D0 ) then + call stopit( 304, 'Wrong IWC for CRPIX position', status ) + endif + + xin = xin + 1.0D0 + call ast_tran2( map, 1, xin, yin, .true., xout, yout, status ) + if( xout .ne. -0.01D0 .or. yout .ne. 0.0D0 ) then + call stopit( 305, 'Wrong IWC for offset CRPIX position', + : status ) + endif + + map = ast_getmapping( fs, 2, 3, status ) + xin = 45.0D0*AST__DD2R + yin = 89.9D0*AST__DD2R + call ast_tran2( map, 1, xin, yin, .true., xout, yout, status ) + if( abs( xout ) .gt. 1.0D-10 .or. abs( yout ) .gt. 1.0D-10 ) then + call stopit( 306, 'Wrong IWC for CRVAL position', status ) + endif + + +* Do it again, this time with an illegal value for CRPIX2. This will +* cause ast_read to report an error. + cards(1) = 'CRPIX1 = 45' + cards(2) = 'CRPIX2 = ''fred''' + cards(3) = 'CRVAL1 = 45' + cards(4) = 'CRVAL2 = 89.9' + cards(5) = 'CDELT1 = -0.01' + cards(6) = 'CDELT2 = 0.01' + cards(7) = 'CTYPE1 = ''RA---TAN''' + cards(8) = 'CTYPE2 = ''DEC--TAN''' + + fc = ast_fitschan( AST_NULL, AST_NULL, ' ', status ) + do i = 1, 8 + call ast_putfits( fc, cards(i), .false., status ) + end do + +* Set the Clean attribute to true so that used cards are removed from the +* FitsChan even if an error occurrs in astRead. +c call ast_setl( fc, 'Clean', .true., status ) + +* Indicate that the CTYPE1 card should be retained by ast_read. + call ast_clear( fc, 'Card', status ) + if( ast_findfits( fc, 'CTYPE1', card, .FALSE., status ) ) then + call ast_retainfits( fc, status ) + endif + +* Abort if an error has occurred. + if( status .ne. sai__ok ) go to 999 + +* Read a FrameSet from the FitsChan, deferring error reporting. Check an +* error is reported by ast_read. + call ast_clear( fc, 'Card', status ) + + call err_begin( status ) + fs = ast_read( fc, status ) + + if( fs .ne. AST__NULL ) then + call stopit( 4, 'A FrameSet has been read from the FitsChan', + : status ) + + else if( status .eq. sai__ok ) then + call stopit( 5, 'No error has been reported by ast_read', + : status ) + + else + call err_annul( status ) + end if + + call err_end( status ) + +* Check the CTYPE1 card is still present in the FitsChan. + call ast_clear( fc, 'Card', status ) + if( .not. ast_findfits( fc, 'CTYPE1', card, .FALSE., + : status ) ) then + call stopit( 6, 'CTYPE1 has not been retained', status ) + end if + +* Check the CTYPE2 card is also still present in the FitsChan (because +* cards are not removed if an error is reported in ast_read unless the +* Clean attribute is set true). + call ast_clear( fc, 'Card', status ) + if( .not. ast_findfits( fc, 'CTYPE2', card, .FALSE., + : status ) ) then + call stopit( 7, 'CTYPE2 has not been retained', status ) + end if + + + + + +* Do it again, again with an illegal value for CRPIX2, but this time +* setting the Clean attribute true. + cards(1) = 'CRPIX1 = 45' + cards(2) = 'CRPIX2 = ''fred''' + cards(3) = 'CRVAL1 = 45' + cards(4) = 'CRVAL2 = 89.9' + cards(5) = 'CDELT1 = -0.01' + cards(6) = 'CDELT2 = 0.01' + cards(7) = 'CTYPE1 = ''RA---TAN''' + cards(8) = 'CTYPE2 = ''DEC--TAN''' + + fc = ast_fitschan( AST_NULL, AST_NULL, 'Clean=1', status ) + do i = 1, 8 + call ast_putfits( fc, cards(i), .false., status ) + end do + +* Indicate that the CTYPE1 card should be retained by ast_read. + call ast_clear( fc, 'Card', status ) + if( ast_findfits( fc, 'CTYPE1', card, .FALSE., status ) ) then + call ast_retainfits( fc, status ) + endif + +* Abort if an error has occurred. + if( status .ne. sai__ok ) go to 999 + +* Read a FrameSet from the FitsChan, deferring error reporting. Check an +* error is reported by ast_read. + call ast_clear( fc, 'Card', status ) + + call err_begin( status ) + fs = ast_read( fc, status ) + + if( fs .ne. AST__NULL ) then + call stopit( 8, 'A FrameSet has been read from the FitsChan', + : status ) + + else if( status .eq. sai__ok ) then + call stopit( 9, 'No error has been reported by ast_read', + : status ) + + else + call err_annul( status ) + end if + + call err_end( status ) + +* Check the CTYPE1 card is still present in the FitsChan (because of the +* call to ast_retainfits). + call ast_clear( fc, 'Card', status ) + if( .not. ast_findfits( fc, 'CTYPE1', card, .FALSE., + : status ) ) then + call stopit( 10, 'CTYPE1 has not been retained', status ) + end if + +* Check the CTYPE2 card is no longer present in the FitsChan (because +* the Clean attribute is set true). + call ast_clear( fc, 'Card', status ) + if( ast_findfits( fc, 'CTYPE2', card, .FALSE., status ) ) then + call stopit( 11, 'CTYPE2 has been retained', status ) + end if + +* Test -TAB + call checktab( status ) + call checktab2( status ) + +* Read a SIP header and then attempt to write it out. It should fail +* because the SIP header is non-linear. + call ast_emptyfits( fc, status ) + call ast_seti( fc, 'SipOK', 0, status ) + call ast_set( fc, 'SourceFile=sip.head', status ) + call ast_clear( fc, 'Card', status ) + fs = ast_read( fc, status ) + call ast_set( fc, 'Encoding=FITS-WCS', status ) + if( fs .eq. AST__NULL ) then + call stopit( 12, 'Failed to read SIP header', status ) + else if( ast_write( fc, fs, status ) .gt. 0 ) then + call stopit( 13, 'Test on SIP header non-linearity failed', + : status ) + end if + + + + + + + + + 999 continue + + call ast_end( status ) + call ast_activememory( 'testfitschan' ) + call ast_flushmemory( 1 ); + + + if( status .eq. sai__ok ) then + write(*,*) 'All FitsChan tests passed' + else + write(*,*) 'FitsChan tests failed' + end if + + end + + + subroutine stopit( errnum, text, status ) + implicit none + include 'SAE_PAR' + character text*(*) + integer errnum, status + + if( status .eq. sai__ok ) then + status = sai__error + call msg_seti( 'N', errnum ) + call msg_setc( 'T', text ) + call err_rep( ' ', 'Error ^N: ^T', status ) + end if + + end + + + subroutine checktab( status ) + implicit none + + external tabsource + + include 'SAE_PAR' + include 'AST_PAR' + include 'AST_ERR' + include 'PRM_PAR' + include 'CNF_PAR' + integer status, sf, mm, fc, fs,gf, tables, table, size, pntr1, + : nelem, pntr2, i, lm, sm, fs2, map, fc2, ncard, fs3 + character key*20,card*80 + double precision lut( 100 ), shift, x(3), y(3), y2(3) + + common /tabsrc/ tables + + if( status .ne. sai__ok ) return + + call err_begin( status ) + call ast_begin( status ) + + sf = ast_specframe( 'system=freq,unit=MHz', status ) + gf = ast_frame( 1, 'domain=GRID', status ) + mm = ast_mathmap( 1, 1, 1, 'y=1/(x*x)', 1, 'x=1/sqrt(y)', ' ', + : status ) + fs = ast_frameset( gf, ' ', status ) + call ast_addframe( fs, AST__BASE, mm, sf, status ) + + fc = ast_fitschan( ast_null, ast_null, 'Encoding=FITS-WCS', + : status ) + call ast_putfits( fc, 'NAXIS = 1', .false., status ) + call ast_putfits( fc, 'NAXIS1 = 100', .false., status ) + + + if( ast_write( fc, fs, status ) .ne. 0 ) then + call stopit( 1000, ' ', status ) + else if( ast_gettables( fc, status ) .ne. AST__NULL ) then + call stopit( 1001, ' ', status ) + endif + + call ast_setl( fc, 'TabOK', .true., status ) + + if( ast_write( fc, fs, status ) .ne. 1 ) + : call stopit( 1002, ' ', status ) + + tables = ast_gettables( fc, status ) + if( tables .eq. AST__NULL ) then + call stopit( 1003, ' ', status ) + else if( .not. ast_isakeymap( tables, status ) ) then + call stopit( 1004, ' ', status ) + else if( ast_mapsize( tables, status ) .ne. 1 ) then + call stopit( 1005, ' ', status ) + endif + + key = ast_mapkey( tables, 1, status ) + if( key .ne. 'WCS-TAB' ) then + call stopit( 1006, ' ', status ) + endif + + if( .not. ast_mapget0a( tables, 'WCS-TAB', table, + : status ) ) then + call stopit( 1007, ' ', status ) + else if( .not. ast_isafitstable( table, status ) ) then + call stopit( 1004, ' ', status ) + endif + + if( ast_geti( table, 'NColumn', status ) .ne. 2 ) then + call stopit( 1005, ' ', status ) + else if( ast_geti( table, 'NRow', status ) .ne. 1 ) then + call stopit( 1006, ' ', status ) + else if( ast_geti( table, 'ColumnLength(coords1)', status ) .ne. + : 197 ) then + call stopit( 1007, ' ', status ) + else if( ast_geti( table, 'ColumnLength(index1)', status ) .ne. + : 197 ) then + call stopit( 1008, ' ', status ) + end if + + size = ast_columnsize( table, 'COORDS1', status ) + if( size .ne. VAL__NBD*197 ) call stopit( 1009, ' ', status ) + call psx_malloc( size, pntr1, status ) + call ast_getcolumndata( table, 'Coords1', 0.0, AST__BAD, size, + : %val( cnf_pval( pntr1 ) ), nelem, + : status ) + if( nelem .ne. 197 ) call stopit( 1010, ' ', status ) + + size = ast_columnsize( table, 'INDEX1', status ) + if( size .ne. VAL__NBD*197 ) call stopit( 1011, ' ', status ) + call psx_malloc( size, pntr2, status ) + call ast_getcolumndata( table, 'inDex1', 0.0, AST__BAD, size, + : %val( cnf_pval( pntr2 ) ), nelem, + : status ) + if( nelem .ne. 197 ) call stopit( 1012, ' ', status ) + + call checkft( 197, %val( cnf_pval( pntr1 ) ), + : %val( cnf_pval( pntr2 ) ), status ) + + call psx_free( pntr1, status ) + call psx_free( pntr2, status ) + +c -------------------------------------------------------------------- + do i = 1, 100 + lut( i ) = 1.0D0/dble(i*i) + end do + + lm = ast_lutmap( 100, lut, -49.0D0, 1.0D0, ' ', status ) + + call ast_set( sf, 'System=Wave,Unit=m', status ) + call ast_removeframe( fs, AST__CURRENT, status ) + call ast_addframe( fs, AST__BASE, lm, sf, status ) + call ast_set( fs, 'System=freq', status ) + + shift = 50.0D0 + sm = ast_shiftmap( 1, shift, ' ', status ) + call ast_remapframe( fs, AST__BASE, sm, status ) + + call ast_removetables( fc, 'WCS-TAB', status ) + call ast_purgewcs( fc, status ) + + if( ast_write( fc, fs, status ) .ne. 1 ) + : call stopit( 1013, ' ', status ) + tables = ast_gettables( fc, status ) + + if( tables .eq. AST__NULL ) then + call stopit( 1014, ' ', status ) + else if( .not. ast_isakeymap( tables, status ) ) then + call stopit( 1015, ' ', status ) + else if( ast_mapsize( tables, status ) .ne. 1 ) then + call stopit( 1016, ' ', status ) + endif + + key = ast_mapkey( tables, 1, status ) + if( key .ne. 'WCS-TAB' ) then + call stopit( 1017, ' ', status ) + endif + + if( .not. ast_mapget0a( tables, 'WCS-TAB', table, + : status ) ) then + call stopit( 1018, ' ', status ) + else if( .not. ast_isafitstable( table, status ) ) then + call stopit( 1019, ' ', status ) + endif + + if( ast_geti( table, 'NColumn', status ) .ne. 1 ) then + call stopit( 1020, ' ', status ) + else if( ast_geti( table, 'NRow', status ) .ne. 1 ) then + call stopit( 1021, ' ', status ) + else if( ast_geti( table, 'ColumnLength(coords1)', status ) .ne. + : 100 ) then + call stopit( 1022, ' ', status ) + end if + + size = ast_columnsize( table, 'COORDS1', status ) + if( size .ne. VAL__NBD*100 ) call stopit( 1024, ' ', status ) + call psx_malloc( size, pntr1, status ) + call ast_getcolumndata( table, 'Coords1', 0.0, AST__BAD, size, + : %val( cnf_pval( pntr1 ) ), nelem, + : status ) + if( nelem .ne. 100 ) call stopit( 1025, ' ', status ) + + call checkft2( 100, %val( cnf_pval( pntr1 ) ), status ) + + call psx_free( pntr1, status ) + +c -------------------------------------------------------------------- + + call ast_removetables( fc, ' ', status ) + fc2 = ast_copy( fc, status ) + call ast_puttables( fc, tables, status ) + call ast_clear( fc, 'Card', status ) + + fs2 = ast_read( fc, status ) + if( fs2 .eq. ast__null ) call stopit( 1028, ' ', status ) + + if( .not. ast_equal( ast_getframe( fs, ast__current, status ), + : ast_getframe( fs2, ast__current, status ), + : status ) ) then + call stopit( 1029, ' ', status ) + endif + + map = ast_cmpmap( ast_getmapping( fs, ast__base, ast__current, + : status ), + : ast_getmapping( fs2, ast__current, ast__base, + : status ), .TRUE., ' ', status ) + + x(1) = 1.0D0; + x(2) = 50.0D0; + x(3) = 100.0D0; + call ast_tran1( map, 3, x, .true., y, status ) + + if( abs( y(1) - x(1) ) .gt. 1.0D-4 .OR. + : abs( y(2) - x(2) ) .gt. 1.0D-4 .OR. + : abs( y(3) - x(3) ) .gt. 1.0D-4 ) then + call stopit( 1030, ' ', status ) + end if + + +c -------------------------------------------------------------------- + if( .not. ast_getl( fc2, 'TabOK', status ) ) then + call stopit( 1031, ' ', status ) + endif + ncard = ast_geti( fc2, 'Ncard', status ) + + call ast_clear( fc2, 'Card', status ) + fs2 = ast_read( fc2, status ) + if( status .ne. AST__NOTAB ) then + if( status .ne. SAI__OK ) call err_flush( status ) + call stopit( 1032, ' ', status ) + else + call err_annul( status ) + end if + + call ast_setl( fc2, 'TabOK', .false., status ) + call ast_clear( fc2, 'Card', status ) + fs2 = ast_read( fc2, status ) + if( status .ne. AST__BDFTS ) then + if( status .ne. SAI__OK ) call err_flush( status ) + call stopit( 1032, ' ', status ) + else + call err_annul( status ) + end if + call ast_setl( fc2, 'TabOK', .true., status ) + + if( ncard .ne. ast_geti( fc2, 'Ncard', status ) ) then + call stopit( 1034, ' ', status ) + endif + + call ast_tablesource( fc2, tabsource, status ) + call ast_clear( fc2, 'Card', status ) + fs2 = ast_read( fc2, status ) + if( fs2 .eq. ast__null ) call stopit( 1035, ' ', status ) + + if( .not. ast_equal( ast_getframe( fs, ast__current, status ), + : ast_getframe( fs2, ast__current, status ), + : status ) ) then + call stopit( 1036, ' ', status ) + endif + + map = ast_cmpmap( ast_getmapping( fs, ast__base, ast__current, + : status ), + : ast_getmapping( fs2, ast__current, ast__base, + : status ), .TRUE., ' ', status ) + + x(1) = 1.0D0; + x(2) = 50.0D0; + x(3) = 100.0D0; + call ast_tran1( map, 3, x, .true., y, status ) + + if( abs( y(1) - x(1) ) .gt. 1.0D-4 .OR. + : abs( y(2) - x(2) ) .gt. 1.0D-4 .OR. + : abs( y(3) - x(3) ) .gt. 1.0D-4 ) then + call stopit( 1037, ' ', status ) + end if + +c -------------------------------------------------------------------- + call readobj( 'sparse.ast', fs, status ) + + fc = ast_fitschan( ast_null, ast_null, + : 'Encoding=FITS-WCS,TabOK=1', status ) + + call ast_putfits( fc, 'NAXIS = 2', .false., status ) + call ast_putfits( fc, 'NAXIS1 = 2000', .false., status ) + call ast_putfits( fc, 'NAXIS2 = 1', .false., status ) + + if( ast_write( fc, fs, status ) .ne. 1 ) then + call stopit( 1038, ' ', status ) + end if + + call ast_clear( fc, 'Card', status ) + fs2 = ast_read( fc, status ) + + call ast_invert( fs, status ) + call ast_invert( fs2, status ) + fs3 = ast_convert( fs, fs2, 'SKY-DSBSPECTRUM', status ) + if( fs3 .eq. AST__NULL ) then + call stopit( 1039, ' ', status ) + endif + + if( ast_getc( ast_getframe( fs, AST__BASE, status ), 'Domain', + : status ) .ne. 'SKY-DSBSPECTRUM' ) then + call stopit( 1040, ' ', status ) + endif + + if( ast_getc( ast_getframe( fs2, AST__BASE, status ), 'Domain', + : status ) .ne. 'SKY-DSBSPECTRUM' ) then + call stopit( 1041, ' ', status ) + endif + + call ast_invert( fs, status ) + call ast_invert( fs2, status ) + + x( 1 ) = 1.0 + x( 2 ) = 1.0 + x( 3 ) = 1.0 + call ast_trann( fs, 1, 3, 1, x, .true., 3, 1, y, status ) + call ast_trann( fs2, 1, 3, 1, x, .true., 3, 1, y2, status ) + + do i = 1, 3 + if( abs( y(i) - y2(i) ) .gt. 1.0E-8 ) then + call stopit( 1042, ' ', status ) + endif + enddo + + x( 1 ) = 10.0 + x( 2 ) = 1.0 + x( 3 ) = 1000.0 + call ast_trann( fs, 1, 3, 1, x, .true., 3, 1, y, status ) + call ast_trann( fs2, 1, 3, 1, x, .true., 3, 1, y2, status ) + + do i = 1, 3 + if( abs( y(i) - y2(i) ) .gt. 1.0E-8 ) then + call stopit( 1042, ' ', status ) + endif + enddo + + +c -------------------------------------------------------------------- + + sf = ast_frame( 1, 'domain=voltage,unit=V', status ) + gf = ast_frame( 1, 'domain=GRID', status ) + mm = ast_mathmap( 1, 1, 1, 'y=1/(x*x)', 1, 'x=1/sqrt(y)', ' ', + : status ) + fs = ast_frameset( gf, ' ', status ) + call ast_addframe( fs, AST__BASE, mm, sf, status ) + + call ast_emptyfits( fc, status ) + call ast_putfits( fc, 'NAXIS = 1', .false., status ) + call ast_putfits( fc, 'NAXIS1 = 100', .false., status ) + + if( ast_write( fc, fs, status ) .ne. 1 ) + : call stopit( 1043, ' ', status ) + + if( ast_getfitss( fc, 'CTYPE1', card, status ) ) then + if( card .ne. 'VOLT-TAB' ) call stopit( 1059, ' ', status ) + else + call stopit( 1060, ' ', status ) + endif + + tables = ast_gettables( fc, status ) + if( tables .eq. AST__NULL ) then + call stopit( 1044, ' ', status ) + else if( .not. ast_isakeymap( tables, status ) ) then + call stopit( 1045, ' ', status ) + else if( ast_mapsize( tables, status ) .ne. 1 ) then + call stopit( 1046, ' ', status ) + endif + + key = ast_mapkey( tables, 1, status ) + if( key .ne. 'WCS-TAB' ) then + call stopit( 1047, ' ', status ) + endif + + if( .not. ast_mapget0a( tables, 'WCS-TAB', table, + : status ) ) then + call stopit( 1048, ' ', status ) + else if( .not. ast_isafitstable( table, status ) ) then + call stopit( 1049, ' ', status ) + endif + + if( ast_geti( table, 'NColumn', status ) .ne. 2 ) then + call stopit( 1050, ' ', status ) + else if( ast_geti( table, 'NRow', status ) .ne. 1 ) then + call stopit( 1051, ' ', status ) + else if( ast_geti( table, 'ColumnLength(coords1)', status ) .ne. + : 197 ) then + call stopit( 1052, ' ', status ) + else if( ast_geti( table, 'ColumnLength(index1)', status ) .ne. + : 197 ) then + call stopit( 1053, ' ', status ) + end if + + size = ast_columnsize( table, 'COORDS1', status ) + + if( size .ne. VAL__NBD*197 ) call stopit( 1054, ' ', status ) + call psx_malloc( size, pntr1, status ) + call ast_getcolumndata( table, 'Coords1', 0.0, AST__BAD, size, + : %val( cnf_pval( pntr1 ) ), nelem, + : status ) + if( nelem .ne. 197 ) call stopit( 1055, ' ', status ) + + size = ast_columnsize( table, 'INDEX1', status ) + if( size .ne. VAL__NBD*197 ) call stopit( 1056, ' ', status ) + call psx_malloc( size, pntr2, status ) + call ast_getcolumndata( table, 'inDex1', 0.0, AST__BAD, size, + : %val( cnf_pval( pntr2 ) ), nelem, + : status ) + if( nelem .ne. 197 ) call stopit( 1057, ' ', status ) + + call checkft( 197, %val( cnf_pval( pntr1 ) ), + : %val( cnf_pval( pntr2 ) ), status ) + + call psx_free( pntr1, status ) + call psx_free( pntr2, status ) + + + call ast_clear( fc, 'Card', status ) + fs2 = ast_read( fc, status ) + if( fs2 .eq. AST__NULL ) + : call stopit( 1058, ' ', status ) + + call ast_invert( fs, status ) + call ast_invert( fs2, status ) + fs3 = ast_convert( fs2, fs, ' ', status ) + if( fs3 .eq. AST__NULL ) then + call stopit( 1061, ' ', status ) + endif + + if( ast_getc( ast_getframe( fs, AST__BASE, status ), 'Domain', + : status ) .ne. 'VOLTAGE' ) then + call stopit( 1062, ' ', status ) + endif + + if( ast_getc( ast_getframe( fs2, AST__BASE, status ), 'Domain', + : status ) .ne. 'VOLTAGE' ) then + call stopit( 1063, ' ', status ) + endif + + x(1) = 1.0 + x(2) = 10.0 + x(3) = 100.0 + call ast_tran1( fs3, 3, x, .true., y, status ) + if( abs( y(1) - x(1) ) .gt. 1.0D-2 .OR. + : abs( y(2) - x(2) ) .gt. 1.0D-2 .OR. + : abs( y(3) - x(3) ) .gt. 1.0D-2 ) then + call stopit( 1064, ' ', status ) + end if + + + + call ast_end( status ) + call err_end( status ) + + end + + + subroutine checkft( nelem, coords, indx, status ) + implicit none + include 'SAE_PAR' + integer nelem, status + double precision coords( nelem ), indx( nelem ) + + if( status .ne. sai__ok ) return + + if( indx( 1 ) .ne. 1.0D0 ) then + call stopit( 2001, ' ', status ) + + else if( coords( 1 ) .ne. 1.0D0 ) then + call stopit( 2002, ' ', status ) + + else if( indx( nelem ) .ne. 1.0D2 ) then + call stopit( 2003, ' ', status ) + + else if( coords( nelem ) .ne. 1.0D-4 ) then + call stopit( 2004, ' ', status ) + + else if( coords( nelem/2 ) .ne. + : indx( nelem/2 )**(-2) ) then + call stopit( 2005, ' ', status ) + end if + + end + + subroutine checkft2( nelem, coords, status ) + implicit none + include 'SAE_PAR' + integer nelem, status + double precision coords( nelem ) + + if( status .ne. sai__ok ) return + + if( abs( coords( 1 ) - 299.792458 ) .gt. 1.0D-5 ) then + call stopit( 3002, ' ', status ) + + else if( abs( coords( nelem ) - 2997924.58 ) .gt. 1.0D-1 ) then + call stopit( 3004, ' ', status ) + + end if + + end + + subroutine tabsource( fc, extnam, extver, extlevel, status ) + implicit none + include 'AST_PAR' + + integer fc, status, tables, table, extver, extlevel + character extnam*(*) + + common /tabsrc/ tables + + if( extnam .ne. 'WCS-TAB' ) then + call stopit( 1035, ' ', status ) + + else if( .not. ast_mapget0a( tables, extnam, table, + : status ) ) then + call stopit( 1036, ' ', status ) + + else if( .not. ast_isafitstable( table, status ) ) then + call stopit( 1037, ' ', status ) + + else if( extver .ne. 1 ) then + write(*,*) 'EXTVER=',extver + call stopit( 1065, ' ', status ) + + else if( extlevel .ne. 1 ) then + call stopit( 1066, ' ', status ) + + else + call ast_puttables( fc, tables, status ) + + endif + + call ast_annul( table, status ) + + end + + + + subroutine readobj( file, iobj, status ) + implicit none + + include 'AST_PAR' + include 'SAE_PAR' + + external chsource + integer iobj, status, ch + character file*(*) + + open( 10, status='old', file=file ) + + ch = ast_channel( chsource, AST_NULL, ' ', status ) + iobj = ast_read( ch, status ) + call ast_annul( ch, status ) + + close( 10 ) + + end + + subroutine chsource( status ) + implicit none + + include 'AST_PAR' + include 'SAE_PAR' + + integer status + character line*200 + + read( 10, '(A)', end=99 ) line + + call ast_putline( line, len( line ), status ) + return + + 99 call ast_putline( line, -1, status ) + + end + + + + + subroutine checktab2( status ) + implicit none + + include 'SAE_PAR' + include 'AST_PAR' + integer status, sf, mmm, mm, fc, fs, fs2, gf + + if( status .ne. sai__ok ) return + + call err_begin( status ) + call ast_begin( status ) + + sf = ast_skyframe( ' ', status ) + call ast_setd( sf, 'SkyRef(1)', 0.0001D0, status ) + call ast_setd( sf, 'SkyRef(2)', 0.0001D0, status ) + + gf = ast_frame( 2, 'domain=GRID', status ) + + mm = ast_mathmap( 1, 1, 1, 'y=(x+50)**(-2)', 1, 'x=-50+1/sqrt(y)', + : ' ', status ) + mmm = ast_cmpmap( mm, mm, .false., ' ', status ) + + fs = ast_frameset( gf, ' ', status ) + call ast_addframe( fs, AST__BASE, mmm, sf, status ) + + fc = ast_fitschan( ast_null, ast_null, 'Encoding=FITS-WCS,'// + : 'TabOK=1', status ) + call ast_putfits( fc, 'NAXIS = 2', .false., status ) + call ast_putfits( fc, 'NAXIS1 = 100', .false., status ) + call ast_putfits( fc, 'NAXIS2 = 100', .false., status ) + + if( ast_write( fc, fs, status ) .ne. 1 ) then + call stopit( 2000, ' ', status ) + endif + + call ast_clear( fc, 'Card', status ) + fs2 = ast_read( fc, status ) + if( fs2 .eq. AST__NULL ) + : call stopit( 2001, ' ', status ) + + if( abs( ast_getd( fs2, 'SkyRef(1)', status ) - 0.0001 ) .gt. + : 1E-7 ) call stopit( 2001, ' ', status ) + if( abs( ast_getd( fs2, 'SkyRef(2)', status ) - 0.0001 ) .gt. + : 1E-7 ) call stopit( 2001, ' ', status ) + + call ast_end( status ) + call err_end( status ) + + end diff --git a/ast/ast_tester/testfitstable.f b/ast/ast_tester/testfitstable.f new file mode 100644 index 0000000..e85f065 --- /dev/null +++ b/ast/ast_tester/testfitstable.f @@ -0,0 +1,590 @@ + program testfitstable + implicit none + + include 'AST_PAR' + include 'AST_ERR' + include 'SAE_PAR' + include 'CNF_PAR' + + integer status, table, table2, dims( 7 ), header, ival, l, nval, + : icard, colsize, pntr, head, clen, oldnull, null + byte bytes(2,3),bval + logical wasset, hasnull + real rval + character cval*30, text(3)*10, card*70 + character header1(18)*30 + character header2(20)*30 + + data header1 / 'XTENSION= ''BINTABLE''', + : 'BITPIX = 8', + : 'NAXIS = 2', + : 'NAXIS1 = 10', + : 'NAXIS2 = 0', + : 'PCOUNT = 0', + : 'GCOUNT = 1', + : 'TFIELDS = 3', + : 'TFORM1 = ''6B ''', + : 'TTYPE1 = ''BYTECOL ''', + : 'TUNIT1 = ''ADU ''', + : 'TDIM1 = ''(2,3) ''', + : 'TFORM2 = ''1J ''', + : 'TTYPE2 = ''INTCOL ''', + : 'TUNIT2 = ''m ''', + : 'TFORM3 = ''0A ''', + : 'TTYPE3 = ''STRINGCOL''', + : 'TDIM3 = ''(0,3) ''' / + + + data header2 / 'XTENSION= ''BINTABLE''', + : 'BITPIX = 8', + : 'NAXIS = 2', + : 'NAXIS1 = 40', + : 'NAXIS2 = 3', + : 'PCOUNT = 0', + : 'GCOUNT = 1', + : 'TFIELDS = 3', + : 'TFORM1 = ''6B ''', + : 'TTYPE1 = ''BYTECOL ''', + : 'TUNIT1 = ''ADU ''', + : 'TNULL1 = 254', + : 'TDIM1 = ''(2,3) ''', + : 'TFORM2 = ''1J ''', + : 'TTYPE2 = ''INTCOL ''', + : 'TUNIT2 = ''m ''', + : 'TNULL2 = 2147483647', + : 'TFORM3 = ''30A ''', + : 'TTYPE3 = ''STRINGCOL''', + : 'TDIM3 = ''(10,3) ''' / + +c call ast_watchmemory(483) + + status = sai__ok + call err_mark( status ) + call ast_begin( status ) + + table = ast_fitstable( AST__NULL, ' ', status ) + + header = ast_gettableheader( table, status ) + if( ast_geti( header, 'NCard', status ) .ne. 8 ) then + call stopit( status, 'FitsTable error 1' ) + else if( .not. ast_getfitsi( header, 'NAXIS', ival, status )) then + call stopit( status, 'FitsTable error 2' ) + else if( ival .ne. 2 ) then + call stopit( status, 'FitsTable error 3' ) + else if( .not. ast_getfitsi( header, 'NAXIS1', ival, status)) then + call stopit( status, 'FitsTable error 4' ) + else if( ival .ne. 0 ) then + call stopit( status, 'FitsTable error 5' ) + else if( .not. ast_getfitsi( header, 'NAXIS2', ival, status)) then + call stopit( status, 'FitsTable error 6' ) + else if( ival .ne. 0 ) then + call stopit( status, 'FitsTable error 7' ) + endif + call ast_annul( header, status ) + + + call ast_addcolumn( table, 'JUNK', AST__OBJECTTYPE, 0, 0, 'm', + : status ) + if( status .eq. AST__NAXIN ) then + call err_annul( status ) + else if( status .eq. sai__ok ) then + call stopit( status, 'FitsTable error 8' ) + endif + + dims( 1 ) = 2 + dims( 2 ) = 3 + call ast_addcolumn( table, 'BYTECOL', AST__BYTETYPE, 2, dims, + : 'ADU', status ) + + call ast_addcolumn( table, 'INTCOL', AST__INTTYPE, 0, 0, 'm', + : status ) + + dims( 1 ) = 3 + call ast_addcolumn( table, 'STRINGCOL', AST__STRINGTYPE, 1, dims, + : ' ', status ) + + + header = ast_gettableheader( table, status ) + icard = 0 + do while( ast_findfits( header, '%f', card, .true., status ) ) + icard = icard + 1 + if( icard .gt. 18 ) then + call stopit( status, 'FitsTable error 9' ) + else if( card .ne. header1( icard ) ) then + call stopit( status, 'FitsTable error 10' ) + end if + end do + if( icard .ne. 18 ) call stopit( status, 'FitsTable error 11' ) + + + table2 = ast_fitstable( header, ' ', status ) + call ast_annul( header, status ) + + if( ast_geti( table2, 'Ncolumn', status ) .ne. 3 ) then + call stopit( status, 'FitsTable error 11a' ) + end if + + + + if( ast_geti( table2, 'ColumnLength(bytecol)', status ) + : .ne. 6 ) then + call stopit( status, 'FitsTable error 11b' ) + endif + + if( ast_geti( table2, 'ColumnNdim(bytecol)', status ) + : .ne. 2 ) then + call stopit( status, 'FitsTable error 11c' ) + end if + + if( ast_geti( table2, 'ColumnType(bytecol)', status ) + : .ne. AST__BYTETYPE ) then + call stopit( status, 'FitsTable error 11d' ) + end if + + if( ast_getc( table2, 'ColumnUnit(bytecol)', status ) + : .ne. 'ADU' ) then + call stopit( status, 'FitsTable error 11e' ) + end if + + + if( ast_geti( table2, 'ColumnLength(intcol)', status ) + : .ne. 1 ) then + call stopit( status, 'FitsTable error 11f' ) + endif + + if( ast_geti( table2, 'ColumnNdim(intcol)', status ) + : .ne. 0 ) then + call stopit( status, 'FitsTable error 11g' ) + end if + + if( ast_geti( table2, 'ColumnType(intcol)', status ) + : .ne. AST__INTTYPE ) then + call stopit( status, 'FitsTable error 11h' ) + end if + + if( ast_getc( table2, 'ColumnUnit(intcol)', status ) + : .ne. 'm' ) then + call stopit( status, 'FitsTable error 11i' ) + end if + + + if( ast_geti( table2, 'ColumnLength(StringCol)', status ) + : .ne. 3 ) then + call stopit( status, 'FitsTable error 11j' ) + endif + + if( ast_geti( table2, 'ColumnNdim(StringCol)', status ) + : .ne. 1 ) then + call stopit( status, 'FitsTable error 11k' ) + end if + + if( ast_geti( table2, 'ColumnType(StringCol)', status ) + : .ne. AST__STRINGTYPE ) then + call stopit( status, 'FitsTable error 11l' ) + end if + + if( ast_getc( table2, 'ColumnUnit(StringCol)', status ) + : .ne. ' ' ) then + call stopit( status, 'FitsTable error 11m' ) + end if + + + + bytes(1,1) = 0 + bytes(1,2) = 128 + bytes(1,3) = -127 + bytes(2,1) = 1 + bytes(2,2) = 127 + bytes(2,3) = -1 + call ast_mapput1b( table, 'BYTECOL(1)', 6, bytes, ' ', status ) + + bytes(1,1) = 0 + bytes(1,2) = 0 + bytes(1,3) = 0 + bytes(2,1) = 1 + bytes(2,2) = 1 + bytes(2,3) = 1 + call ast_mapput1b( table, 'BYTECOL(2)', 6, bytes, ' ', status ) + + call ast_mapput0i( table, 'INTCOL(2)', 10, ' ', status ) + + call ast_mapput0i( table, 'INTCOL(3)', -10, ' ', status ) + + text( 1 ) = 'hello' + text( 2 ) = ' ' + text( 3 ) = 'goodbye' + call ast_mapput1c( table, 'STRINGCOL(1)', 3, text, ' ', status ) + + text( 1 ) = ' ' + text( 2 ) = ' ' + text( 3 ) = ' ' + call ast_mapput1c( table, 'STRINGCOL(3)', 3, text, ' ', status ) + + if( ast_geti( table, 'Nrow', status ) .ne. 3 ) then + call stopit( status, 'FitsTable error 12' ) + endif + + if( ast_geti( table, 'Ncolumn', status ) .ne. 3 ) then + call stopit( status, 'FitsTable error 13' ) + endif + + head = ast_gettableheader( table, status ) + table2 = ast_fitstable( head, ' ', status ) + call ast_annul( head, status ) + + colsize = ast_columnsize( table, 'stringcol', status ) + if( colsize .ne. 90 ) then + call stopit( status, 'FitsTable error 13a' ) + else + call psx_malloc( colsize, pntr, status ) + call ast_getcolumndata( table, 'StringCol', 0.0, 0.0D0, + : colsize, %val( cnf_pval(pntr)), + : colsize, status ) + if( colsize .ne. 9 ) call stopit( status, + : 'FitsTable error 13b' ) + call checkstrings( table, %val( CNF_PVAL( pntr ) ), status ) + + clen = ast_geti( table, 'ColumnLenC(StringCol)', status ) + if( clen .ne. 10 ) call stopit( status, + : 'FitsTable error 13c' ) + + colsize = 90 + call ast_putcolumndata( table2, 'StringCol', 10, colsize, + : %val( CNF_PVAL( pntr ) ), status ) + call ast_getcolumndata( table2, 'StringCol', 0.0, 0.0D0, + : colsize, %val( cnf_pval(pntr)), + : colsize, status ) + + if( colsize .ne. 9 ) call stopit( status, + : 'FitsTable error 13d' ) + call checkstrings( table2, %val( CNF_PVAL( pntr ) ), status ) + + call psx_free( pntr, status ) + end if + + colsize = ast_columnsize( table, 'bytecol', status ) + if( colsize .ne. 18 ) then + call stopit( status, 'FitsTable error 13e' ) + else + call psx_malloc( colsize, pntr, status ) + call ast_getcolumndata( table, 'BYTECOL', 0.0, 0.0D0, colsize, + : %val( cnf_pval( pntr ) ), colsize, + : status ) + if( colsize .ne. 18 ) call stopit( status, + : 'FitsTable error 13f' ) + + null = ast_columnnull( table, 'BYTECOL', .FALSE., 0, + : wasset, hasnull, status ) + call checkbytes( table, %val( CNF_PVAL( pntr ) ), null, + : status ) + + colsize = 18 + call ast_putcolumndata( table2, 'byteCol', 0, colsize, + : %val( CNF_PVAL( pntr ) ), status ) + oldnull = ast_columnnull( table2, 'BYTECOL', .TRUE., null, + : wasset, hasnull, status ) + call ast_getcolumndata( table2, 'BYTECOL', 0.0, 0.0D0, colsize, + : %val( cnf_pval( pntr ) ), colsize, + : status ) + if( colsize .ne. 18 ) call stopit( status, + : 'FitsTable error 13g' ) + call checkbytes( table2, %val( CNF_PVAL( pntr ) ), null, + : status ) + + call psx_free( pntr, status ) + end if + + colsize = ast_columnsize( table, 'intcol', status ) + if( colsize .ne. 12 ) then + call stopit( status, 'FitsTable error 13h' ) + else + call psx_malloc( colsize, pntr, status ) + call ast_getcolumndata( table, 'INTCOL', 0.0, 0.0D0, colsize, + : %val( cnf_pval( pntr ) ), colsize, + : status ) + if( colsize .ne. 3 ) call stopit( status, + : 'FitsTable error 13i' ) + call checkints( table, %val( CNF_PVAL( pntr ) ), + : ast_columnnull( table, 'INTCOL', .FALSE., 0, + : wasset, hasnull, status ), + : status ) + + colsize = 12 + call ast_putcolumndata( table2, 'INTCol', 0, colsize, + : %val( CNF_PVAL( pntr ) ), status ) + + call ast_getcolumndata( table2, 'INTCOL', 0.0, 0.0D0, colsize, + : %val( cnf_pval( pntr ) ), colsize, + : status ) + if( colsize .ne. 3 ) call stopit( status, + : 'FitsTable error 13j' ) + call checkints( table2, %val( CNF_PVAL( pntr ) ), + : ast_columnnull( table2, 'INTCOL', .FALSE., 0, + : wasset, hasnull, status ), + : status ) + + call psx_free( pntr, status ) + end if + + + call ast_addcolumn( table, 'REALCOL', AST__FLOATTYPE, 0, 0, ' ', + : status ) + call ast_addcolumn( table2, 'REALCOL', AST__FLOATTYPE, 0, 0, ' ', + : status ) + call ast_mapput0r( table, 'REALCOL(1)', -10.0, ' ', status ) + call ast_mapput0r( table, 'REALCOL(3)', 10.0, ' ', status ) + + colsize = ast_columnsize( table, 'realcol', status ) + if( colsize .ne. 12 ) then + call stopit( status, 'FitsTable error 13k' ) + else + call psx_malloc( colsize, pntr, status ) + call ast_getcolumndata( table, 'REALCOL', -1.0, 0.0D0, colsize, + : %val( cnf_pval( pntr ) ), colsize, + : status ) + if( colsize .ne. 3 ) call stopit( status, + : 'FitsTable error 13l' ) + call checkreals( table, %val( CNF_PVAL( pntr ) ), -1.0, + : status ) + + colsize = 12 + call ast_putcolumndata( table2, 'realCol', 0, colsize, + : %val( CNF_PVAL( pntr ) ), status ) + + + call ast_mapremove( table2, 'REALCOL(2)', status ) + call ast_getcolumndata( table2, 'REALCOL', AST__NANR, 0.0D0, + : colsize, + : %val( cnf_pval( pntr ) ), colsize, + : status ) + if( colsize .ne. 3 ) call stopit( status, + : 'FitsTable error 13m' ) + call checkreals( table2, %val( CNF_PVAL( pntr ) ), AST__NANR, + : status ) + + call psx_free( pntr, status ) + end if + + call ast_removecolumn( table, 'REALCOL', status ) + + call ast_mapremove( table, 'BYTECOL(3)', status ) + call ast_mapremove( table, 'INTCOL(3)', status ) + call ast_mapremove( table, 'STRINGCOL(3)', status ) + + if( ast_geti( table, 'Nrow', status ) .ne. 3 ) then + call stopit( status, 'FitsTable error 14' ) + endif + + if( ast_geti( table, 'Ncolumn', status ) .ne. 3 ) then + call stopit( status, 'FitsTable error 15' ) + endif + + + + + header = ast_gettableheader( table, status ) + icard = 0 + do while( ast_findfits( header, '%f', card, .true., status ) ) + icard = icard + 1 + if( icard .gt. 20 ) then + call stopit( status, 'FitsTable error 16' ) + else if( card .ne. header2( icard ) ) then + call stopit( status, 'FitsTable error 17' ) + end if + end do + call ast_annul( header, status ) + if( icard .ne. 20 ) call stopit( status, 'FitsTable error 18' ) + + + + if( ast_columnnull( table, 'BYTECOL', .FALSE., 0, wasset, + : hasnull, status ) .ne. 254 ) then + call stopit( status, 'FitsTable error 19' ) + else if( wasset ) then + call stopit( status, 'FitsTable error 20' ) + else if( .not. hasnull ) then + call stopit( status, 'FitsTable error 21' ) + end if + + + + call ast_purgerows( table, status ) + if( ast_geti( table, 'Nrow', status ) .ne. 2 ) then + call stopit( status, 'FitsTable error 22' ) + endif + + if( ast_geti( table, 'Ncolumn', status ) .ne. 3 ) then + call stopit( status, 'FitsTable error 23' ) + endif + + header = ast_gettableheader( table, status ) + if( ast_getfitsi( header, 'TNULL1', ival, status ) ) then + call stopit( status, 'FitsTable error 24' ) + endif + call ast_annul( header, status ) + + if( ast_columnnull( table, 'BYTECOL', .TRUE., 11, wasset, + : hasnull, status ) .ne. 11 ) then + call stopit( status, 'FitsTable error 25' ) + else if( wasset ) then + call stopit( status, 'FitsTable error 26' ) + else if( hasnull ) then + call stopit( status, 'FitsTable error 27' ) + end if + + if( ast_columnnull( table, 'BYTECOL', .FALSE., 0, wasset, + : hasnull, status ) .ne. 11 ) then + call stopit( status, 'FitsTable error 28' ) + else if( .not. wasset ) then + call stopit( status, 'FitsTable error 29' ) + else if( hasnull ) then + call stopit( status, 'FitsTable error 30' ) + end if + + + table2 = ast_copy( table, status ) + + call ast_end( status ) + call err_rlse( status ) + +c call ast_activememory( 'testfitstable' ) + call ast_flushmemory( 1 ) + + if( status .eq. sai__ok ) then + write(*,*) 'All FitsTable tests passed' + else + write(*,*) 'FitsTable tests failed' + end if + + end + + + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + end + + + + subroutine checkbytes( table, vals, null, status ) + implicit none + include 'SAE_PAR' + integer status, table, null, i + byte vals( * ), ans( 12 ), bnull + + data ans / 0, 1, 128, 127, -127, -1, 0, 1, 0, 1, 0, 1 / + + if( status .ne. sai__ok ) return + + do i = 1, 12 + if( vals( i ) .ne. ans( i ) ) then + write(*,*) 'i,vals,ans: ',i,' ',vals(i),' ',ans(i) + call stopit( status, 'FitsTable error checkbytes 1' ) + end if + end do + + bnull = null + do i = 13, 18 + if( vals( i ) .ne. bnull ) then + call stopit( status, 'FitsTable error checkbytes 2' ) + end if + end do + + end + + subroutine checkints( table, vals, null, status ) + implicit none + include 'SAE_PAR' + integer status, table, null + integer vals( * ) + + if( status .ne. sai__ok ) return + + if( vals( 1 ) .ne. null ) then + call stopit( status, 'FitsTable error checkints 1' ) + end if + + if( vals( 2 ) .ne. 10 ) then + call stopit( status, 'FitsTable error checkints 2' ) + end if + + if( vals( 3 ) .ne. -10 ) then + call stopit( status, 'FitsTable error checkints 3' ) + end if + + end + + subroutine checkreals( table, vals, null, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, table + real vals( * ), null + + if( status .ne. sai__ok ) return + + if( vals( 1 ) .ne. -10.0 ) then + call stopit( status, 'FitsTable error checkreals 1' ) + end if + + if( null .ne. AST__NANR ) then + if( vals( 2 ) .ne. null ) then + call stopit( status, 'FitsTable error checkreals 2a' ) + end if + else + if( .not. isnan( vals( 2 ) ) ) then + call stopit( status, 'FitsTable error checkreals 2b' ) + end if + end if + + if( vals( 3 ) .ne. 10.0 ) then + call stopit( status, 'FitsTable error checkreals 3' ) + end if + + end + + subroutine checkstrings( table, vals, status ) + implicit none + include 'SAE_PAR' + integer status, table, i, start, end, j + character ans( 9 )*10 + character vals*( * ) + + data ans / 'hello', ' ', 'goodbye', '', '', '', ' ', ' ', ' ' / + + if( status .ne. sai__ok ) return + + start = 1 + end = 10 + + do i = 1, 9 + + do j = 1, 11 + if( vals( start + j - 1 : start + j - 1 ) .lt. ' ' ) then + vals( start + j - 1 : start + j - 1 ) = ' ' + endif + end do + + if( vals( start : end ) .ne. ans( i ) ) then + write(*,*) 'start,end,i : ',start,' ',end,' ',i + write(*,*) 'vals: ',vals( start : end ) + write(*,*) 'ans: ',ans( i ) + call stopit( status, 'FitsTable error checkstrings 1' ) + end if + + start = start + 10 + end = end + 10 + + end do + + end + + + + diff --git a/ast/ast_tester/testflux.f b/ast/ast_tester/testflux.f new file mode 100644 index 0000000..f24629f --- /dev/null +++ b/ast/ast_tester/testflux.f @@ -0,0 +1,354 @@ + program testflux + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + double precision xin, xout + integer status, sf, ff, ff2, mp, fs, sf2 + status = sai__ok + + sf = ast_specframe( 'system=freq,unit=GHz', status ) + ff = ast_Fluxframe( 123.0D0, sf, ' ', status ) + + if( ast_GetD( ff, 'specval', status ) .ne. 123.0D0 ) then + call stopit( status, 'Error 1' ) + end if + + if( ast_Test( ff, 'specval', status ) ) then + call stopit( status, 'Error 2' ) + end if + + call ast_setd( ff, 'specval', 333.3D0, status ) + if( ast_GetD( ff, 'specval', status ) .ne. 333.3D0 ) then + call stopit( status, 'Error 3' ) + end if + + if( .not. ast_Test( ff, 'specval', status ) ) then + call stopit( status, 'Error 4' ) + end if + + call ast_clear( ff, 'specval', status ) + + if( ast_GetD( ff, 'specval', status ) .ne. 123.0D0 ) then + call stopit( status, 'Error 5' ) + end if + + if( ast_Test( ff, 'specval', status ) ) then + call stopit( status, 'Error 6' ) + end if + + + call checkDump( ff, 'CheckDump 1', status ) + + + ff2 = ast_Fluxframe( 123.1D0, sf, ' ', status ) + fs = ast_convert( ff, ff2, ' ', status ) + if( fs .eq. ast__null ) then + call stopit( status, 'error 8' ) + else + mp = ast_getmapping( fs, AST__BASE, AST__CURRENT, status ) + if( .not. ast_isaunitmap( mp, status ) ) then + call stopit( status, 'error 9' ) + end if + end if + + + + + + ff = ast_Fluxframe( 123.0D0, sf, 'unit=W/m^2/Hz', status ) + if( ast_GetC( ff, 'System', status ) .ne. 'FLXDN' ) then + write(*,*) ast_GetC( ff, 'System', status ) + call stopit( status, 'error 10' ) + endif + + ff2 = ast_Fluxframe( 123.0D0, sf, 'unit=W/m^2/GHz', status ) + if( ast_GetC( ff2, 'System', status ) .ne. 'FLXDN' ) then + write(*,*) ast_GetC( ff2, 'System', status ) + call stopit( status, 'error 11' ) + endif + + fs = ast_convert( ff2, ff, ' ', status ) + if( fs .eq. ast__null ) then + call stopit( status, 'error 12' ) + else + mp = ast_getmapping( fs, AST__BASE, AST__CURRENT, status ) + if( .not. ast_isazoommap( mp, status ) ) then + call stopit( status, 'error 13' ) + else if( abs( ast_getd( mp, 'Zoom', status ) - 1.0D-9 ) + : .gt. 1.0E-24 ) then + write(*,*) ast_getd( mp, 'Zoom', status ) + call stopit( status, 'error 14' ) + end if + end if + + + ff = ast_Fluxframe( 123.0D0, sf, 'unit=W/m^2/m', status ) + if( ast_GetC( ff, 'System', status ) .ne. 'FLXDNW' ) then + write(*,*) ast_GetC( ff, 'System', status ) + call stopit( status, 'error 15' ) + endif + + sf2 = ast_specframe( 'system=freq,unit=Hz', status ) + ff2 = ast_Fluxframe( 123.0D9, sf2, 'unit=W/m^2/Angstrom', status ) + if( ast_GetC( ff2, 'System', status ) .ne. 'FLXDNW' ) then + write(*,*) ast_GetC( ff2, 'System', status ) + call stopit( status, 'error 16' ) + endif + + fs = ast_convert( ff2, ff, ' ', status ) + if( fs .eq. ast__null ) then + call stopit( status, 'error 17' ) + else + mp = ast_getmapping( fs, AST__BASE, AST__CURRENT, status ) + if( .not. ast_isazoommap( mp, status ) ) then + call stopit( status, 'error 18' ) + else if( ast_getd( mp, 'Zoom', status ) .ne. 1.0D10 ) then + write(*,*) ast_getd( mp, 'Zoom', status ) + call stopit( status, 'error 19' ) + end if + end if + + + + + ff = ast_Fluxframe( 123.0D0, sf, 'unit=W/m^2/m', status ) + if( ast_GetC( ff, 'System', status ) .ne. 'FLXDNW' ) then + write(*,*) ast_GetC( ff, 'System', status ) + call stopit( status, 'error 20' ) + endif + + sf2 = ast_specframe( 'system=wave,unit=nm', status ) + ff2 = ast_Fluxframe( 2437337.06D0, sf2, 'unit=W/m^2/Angstrom', + : status ) + if( ast_GetC( ff2, 'System', status ) .ne. 'FLXDNW' ) then + write(*,*) ast_GetC( ff2, 'System', status ) + call stopit( status, 'error 21' ) + endif + + fs = ast_convert( ff, ff2, ' ', status ) + if( fs .eq. ast__null ) then + call stopit( status, 'error 22' ) + else + mp = ast_getmapping( fs, AST__BASE, AST__CURRENT, status ) + if( .not. ast_isazoommap( mp, status ) ) then + call stopit( status, 'error 23' ) + else if( ast_getd( mp, 'Zoom', status ) .ne. 1.0D-10 ) then + write(*,*) ast_getd( mp, 'Zoom', status ) + call stopit( status, 'error 24' ) + end if + end if + + + sf = ast_specframe( 'system=freq,unit=GHz', status ) + ff = ast_Fluxframe( 123.0D0, sf, 'unit=W/m^2/Hz', status ) + sf2 = ast_specframe( 'system=wave,unit=nm', status ) + ff2 = ast_Fluxframe( 2437337.06D0, sf2, 'unit=W/m^2/m', + : status ) + fs = ast_convert( ff, ff2, ' ', status ) + if( fs .eq. ast__null ) then + call stopit( status, 'error 25' ) + else + xin = 1.0D-13 + call ast_tran1( fs, 1,xin, 1,xout, status ) + if( abs( xout - 5.04649119D0 ) .gt. 1.0D-6 ) then + call stopit( status, 'error 26' ) + end if + end if + + + sf = ast_specframe( 'system=freq,unit=GHz', status ) + ff = ast_Fluxframe( 123.0D0, sf, 'unit=W/m^2/Hz/arcsec**2', + : status ) + if( ast_getc( ff, 'System', status ) .ne. 'SFCBR' ) + : call stopit( status, 'error 27a' ) + + sf2 = ast_specframe( 'system=wave,unit=nm', status ) + ff2 = ast_Fluxframe( 2437337.06D0, sf2, 'unit=W/m^2/m/deg**2', + : status ) + if( ast_getc( ff2, 'System', status ) .ne. 'SFCBRW' ) + : call stopit( status, 'error 27b' ) + + fs = ast_convert( ff, ff2, ' ', status ) + if( fs .eq. ast__null ) then + call stopit( status, 'error 27' ) + else + xin = 1.0D-13 + call ast_tran1( fs, 1,xin, 1,xout, status ) + if( abs( xout - 65402525.8D0 ) .gt. 1.0 ) then + write(*,*) xout - 65402525.8D0 + call stopit( status, 'error 28' ) + end if + end if + + + ff = ast_Fluxframe( 123.0D0, sf, 'unit=W/m^2/Hz/arcsec**2', + : status ) + ff2 = ast_Fluxframe( 2437337.06D0, sf2, 'unit=W/m^2/m', + : status ) + + fs = ast_convert( ff, ff2, ' ', status ) + if( fs .ne. ast__null ) call stopit( status, 'error 29' ) + + + + + + + + + + + + + + + + if( status .eq. sai__ok ) then + write(*,*) 'All FluxFrame tests passed' + else + write(*,*) 'FluxFrame tests failed' + end if + + end + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + + end + + + subroutine checkdump( obj, text, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + character text*(*) + integer obj, status, next, end, ch, result, ll, overlap + external mysource, mysink + character buf*25000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + ch = ast_channel( mysource, mysink, ' ', status ) + + + ll = 110 + next = 1 + if( ast_write( ch, obj, status ) .ne.1 ) then + write(*,*) text + call stopit( status, 'Cannot write supplied object to '// + : 'channel' ) + end if + + next = 1 + result = ast_read( ch, status ) + if( result .eq. ast__null ) then + write(*,*) text + call stopit( status, 'Cannot read object from channel' ) + end if + + + + if( ast_getd( obj, 'specval', status ) .ne. + : ast_getd( result, 'specval', status ) ) then + call ast_Show( obj, status ) + call ast_Show( result, status ) + write(*,*) text + call stopit( status, 'Object has changed' ) + end if + + end + + subroutine sink1( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + logical fsfound, done + common /sink1com/ fsfound, done + + integer status, l + character line*200 + + if( status .ne. sai__ok ) return + call ast_getline( line, l, status ) + + if( index( line( : l ),'Unc =' ) .GT. 0 ) then + done = .true. + + else if( .not. done .and. + : index( line( : l ),'FrameSet' ) .GT. 0 ) then + fsfound= .true. + end if + + end + + subroutine mysource( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, ll + character buf*25000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + if( next .ge. end ) then + call ast_putline( buf, -1, status ) + else + call ast_putline( buf( next : ), ll, status ) + endif + + next = next + ll + + end + + subroutine mysink( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, f, l, ll + character buf*25000 + character line*1000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + line = ' ' + call ast_getline( line, l, status ) + call chr_fandl( line( : l ), f, l ) + buf( next : ) = line( f : l ) + l = l - f + 1 + + if( next + ll - 1 .ge. 25000 ) then + write(*,*) + call stopit( status, 'Buffer overflow in mysink!!' ) + else if( l .gt. ll ) then + write(*,*) + write(*,*) buf( next : next + l) + write(*,*) 'Line length ',l + call stopit( status, 'Line overflow in mysink!!' ) + else + end = next + l + buf( end : next + ll - 1 ) = ' ' + endif + + next = next + ll + + end + + diff --git a/ast/ast_tester/testframeset.f b/ast/ast_tester/testframeset.f new file mode 100644 index 0000000..0c9c52e --- /dev/null +++ b/ast/ast_tester/testframeset.f @@ -0,0 +1,391 @@ + program testframeset + implicit none + + include 'AST_PAR' + include 'AST_ERR' + include 'SAE_PAR' + + integer status, pfrm, ffrm, p2fmap, fs, p2fmap2, result, orig + double precision ina(2), inb(2), outa(2), outb(2), xout, yout + character text*100 + +c call ast_watchmemory(100) + + + status = sai__ok + call err_mark( status ) + call ast_begin( status ) + + + pfrm = ast_frame( 2, "Domain=PIXEL", status ) + ffrm = ast_frame( 2, "Domain=FPLANE", status ) + + ina( 1 ) = 1.0 + ina( 2 ) = 1.0 + inb( 1 ) = 100.0 + inb( 2 ) = 200.0 + + outa( 1 ) = -2.5 + outa( 2 ) = -1.0 + outb( 1 ) = 2.5 + outb( 2 ) = 1.0 + p2fmap = ast_winmap( 2, ina, inb, outa, outb, ' ', status ) + + fs = ast_frameset( pfrm, ' ', status ) + call ast_addframe( fs, AST__CURRENT, p2fmap, ffrm, status ) + + call ast_setc( fs, 'Base', 'Fplane', status ) + if( ast_geti( fs, 'Base', status ) .ne. 2 ) + : call stopit( status, 'Error -3' ) + + call ast_setc( fs, 'Base', 'pixel', status ) + if( ast_geti( fs, 'Base', status ) .ne. 1 ) + : call stopit( status, 'Error -2' ) + + call ast_setc( fs, 'Current', 'PIXEL', status ) + if( ast_geti( fs, 'Current', status ) .ne. 1 ) + : call stopit( status, 'Error -1' ) + + call ast_setc( fs, 'Current', 'fplane', status ) + if( ast_geti( fs, 'Current', status ) .ne. 2 ) + : call stopit( status, 'Error 0' ) + + text = ast_getc( fs, 'AllVariants', status ) + if( text .ne. 'FPLANE' ) call stopit( status, 'Error 1' ) + + text = ast_getc( fs, 'Variant', status ) + if( text .ne. 'FPLANE' ) call stopit( status, 'Error 2' ) + + if( ast_test( fs, 'Variant', status ) ) call stopit( status, + : 'Error 3' ) + + + call ast_addvariant( FS, ast__null, 'FP1', status ) + + text = ast_getc( fs, 'AllVariants', status ) + if( text .ne. 'FP1' ) call stopit( status, 'Error 4' ) + + text = ast_getc( fs, 'Variant', status ) + if( text .ne. 'FP1' ) call stopit( status, 'Error 5' ) + + if( .not. ast_test( fs, 'Variant', status ) ) call stopit( status, + : 'Error 6' ) + + call ast_clear( fs, 'Variant', status ) + + text = ast_getc( fs, 'AllVariants', status ) + if( text .ne. 'FPLANE' ) call stopit( status, 'Error 7' ) + + text = ast_getc( fs, 'Variant', status ) + if( text .ne. 'FPLANE' ) call stopit( status, 'Error 8' ) + + if( ast_test( fs, 'Variant', status ) ) call stopit( status, + : 'Error 9' ) + + call ast_addvariant( FS, ast__null, 'FP1', status ) + + outa( 1 ) = 100.0 + outa( 2 ) = 100.0 + outb( 1 ) = 200.0 + outb( 2 ) = 200.0 + p2fmap2 = ast_winmap( 2, ina, inb, outa, outb, ' ', status ) + + call ast_invert( p2fmap, status ) + call ast_addvariant( fs, ast_simplify( + : ast_cmpmap( p2fmap, p2fmap2, 1, ' ', + : status ), status ), + : 'FP2', status ) + + text = ast_getc( fs, 'AllVariants', status ) + if( text .ne. 'FP1 FP2' ) call stopit( status, 'Error 10' ) + + text = ast_getc( fs, 'Variant', status ) + if( text .ne. 'FP2' ) call stopit( status, 'Error 11' ) + + if( .not. ast_test( fs, 'Variant', status ) ) call stopit( status, + : 'Error 12' ) + call ast_tran2( fs, 1, 50.5D0, 100.5D0, .TRUE., xout, yout, + : status ) + if( abs( xout - 150.0D0 ) .gt. 1.0E-6 .OR. + : abs( yout - 150.0D0 ) .gt. 1.0E-6 ) call stopit( status, + : 'Error 13' ) + + call ast_setc( fs, 'Variant', 'FP1', status ) + call ast_tran2( fs, 1, 50.5D0, 100.5D0, .TRUE., xout, yout, + : status ) + if( abs( xout - 0.0D0 ) .gt. 1.0E-6 .OR. + : abs( yout - 0.0D0 ) .gt. 1.0E-6 ) call stopit( status, + : 'Error 14' ) + + outa( 1 ) = -100.0 + outa( 2 ) = -100.0 + outb( 1 ) = -200.0 + outb( 2 ) = -200.0 + p2fmap2 = ast_winmap( 2, ina, inb, outa, outb, ' ', status ) + + p2fmap = ast_getmapping( fs, AST__CURRENT, AST__BASE, status ) + call ast_addvariant( fs, ast_simplify( + : ast_cmpmap( p2fmap, p2fmap2, 1, ' ', + : status ), status ), + : 'FP3', status ) + + text = ast_getc( fs, 'AllVariants', status ) + if( text .ne. 'FP1 FP2 FP3' ) call stopit( status, 'Error 15' ) + + text = ast_getc( fs, 'Variant', status ) + if( text .ne. 'FP3' ) call stopit( status, 'Error 16' ) + + if( .not. ast_test( fs, 'Variant', status ) ) call stopit( status, + : 'Error 17' ) + call ast_tran2( fs, 1, 50.5D0, 100.5D0, .TRUE., xout, yout, + : status ) + if( abs( xout + 150.0D0 ) .gt. 1.0E-6 .OR. + : abs( yout + 150.0D0 ) .gt. 1.0E-6 ) call stopit( status, + : 'Error 18' ) + + call ast_setc( fs, 'Variant', 'FP2', status ) + call ast_tran2( fs, 1, 50.5D0, 100.5D0, .TRUE., xout, yout, + : status ) + if( abs( xout - 150.0D0 ) .gt. 1.0E-6 .OR. + : abs( yout - 150.0D0 ) .gt. 1.0E-6 ) call stopit( status, + : 'Error 19' ) + + call checkdump( fs, result, status ) + + text = ast_getc( result, 'AllVariants', status ) + if( text .ne. 'FP1 FP2 FP3' ) call stopit( status, 'Error 20' ) + + text = ast_getc( result, 'Variant', status ) + if( text .ne. 'FP2' ) call stopit( status, 'Error 21' ) + + call ast_tran2( result, 1, 50.5D0, 100.5D0, .TRUE., xout, yout, + : status ) + if( abs( xout - 150.0D0 ) .gt. 1.0E-6 .OR. + : abs( yout - 150.0D0 ) .gt. 1.0E-6 ) call stopit( status, + : 'Error 22' ) + + + + orig = ast_geti( fs, 'Current', status ) + call ast_addframe( fs, AST__CURRENT, AST_UNITMAP( 2, '', status ), + : AST_FRAME( 2, "Domain=DSB", status ), status ) + call ast_tran2( fs, 1, 50.5D0, 100.5D0, .TRUE., xout, yout, + : status ) + if( abs( xout - 150.0D0 ) .gt. 1.0E-6 .OR. + : abs( yout - 150.0D0 ) .gt. 1.0E-6 ) call stopit( status, + : 'Error 23' ) + + if( status .eq. sai__ok ) then + call ast_setc( fs, 'Variant', 'FP1', status ) + if( status .eq. ast__attin ) then + call err_annul( status ) + else + call err_flush( status ) + call stopit( status, 'Error 24' ) + end if + end if + + text = ast_getc( fs, 'AllVariants', status ) + if( text .ne. 'DSB' ) call stopit( status, 'Error 25' ) + + text = ast_getc( fs, 'Variant', status ) + if( text .ne. 'DSB' ) call stopit( status, 'Error 26' ) + + if( ast_test( fs, 'Variant', status ) ) call stopit( status, + : 'Error 27' ) + + call ast_mirrorvariants( fs, orig, status ) + + text = ast_getc( fs, 'AllVariants', status ) + if( text .ne. 'FP1 FP2 FP3' ) call stopit( status, 'Error 28' ) + + text = ast_getc( fs, 'Variant', status ) + if( text .ne. 'FP2' ) call stopit( status, 'Error 29' ) + + if( .not. ast_test( fs, 'Variant', status ) ) call stopit( status, + : 'Error 30' ) + + call ast_tran2( fs, 1, 50.5D0, 100.5D0, .TRUE., xout, yout, + : status ) + if( abs( xout - 150.0D0 ) .gt. 1.0E-6 .OR. + : abs( yout - 150.0D0 ) .gt. 1.0E-6 ) call stopit( status, + : 'Error 31' ) + + call ast_set( fs, 'Variant=FP1', status ) + text = ast_getc( fs, 'Variant', status ) + if( text .ne. 'FP1' ) call stopit( status, 'Error 32' ) + + call ast_tran2( fs, 1, 50.5D0, 100.5D0, .TRUE., xout, yout, + : status ) + if( abs( xout - 0.0D0 ) .gt. 1.0E-6 .OR. + : abs( yout - 0.0D0 ) .gt. 1.0E-6 ) call stopit( status, + : 'Error 33' ) + + call checkdump( fs, result, status ) + + text = ast_getc( result, 'AllVariants', status ) + if( text .ne. 'FP1 FP2 FP3' ) call stopit( status, 'Error 34' ) + + text = ast_getc( result, 'Variant', status ) + if( text .ne. 'FP1' ) call stopit( status, 'Error 35' ) + + call ast_tran2( result, 1, 50.5D0, 100.5D0, .TRUE., xout, yout, + : status ) + if( abs( xout - 0.0D0 ) .gt. 1.0E-6 .OR. + : abs( yout - 0.0D0 ) .gt. 1.0E-6 ) call stopit( status, + : 'Error 36' ) + + result = ast_copy( fs, status ) + + text = ast_getc( result, 'AllVariants', status ) + if( text .ne. 'FP1 FP2 FP3' ) call stopit( status, 'Error 37' ) + + text = ast_getc( result, 'Variant', status ) + if( text .ne. 'FP1' ) call stopit( status, 'Error 38' ) + + call ast_tran2( result, 1, 50.5D0, 100.5D0, .TRUE., xout, yout, + : status ) + if( abs( xout - 0.0D0 ) .gt. 1.0E-6 .OR. + : abs( yout - 0.0D0 ) .gt. 1.0E-6 ) call stopit( status, + : 'Error 39' ) + + call ast_clear( fs, 'Variant', status ) + text = ast_getc( fs, 'Variant', status ) + if( text .ne. 'DSB' ) call stopit( status, 'Error 40' ) + + + + + + + call ast_end( status ) + call err_rlse( status ) + + call ast_activememory( 'testframeset' ) + call ast_flushmemory( 1 ); + + if( status .eq. sai__ok ) then + write(*,*) 'All FrameSet tests passed' + else + write(*,*) 'FrameSet tests failed' + end if + + end + + + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + + end + + subroutine checkdump( obj, result, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + character key*30,txt1*50,txt2*50 + integer obj, status, next, end, ch, result, ll, overlap, size, + : i, type,obj1,obj2,l1,l2,nl,nrow,nrowold + external mysource, mysink + character buf*400000 + + common /ss1/ buf + common /ss2/ next, end, ll, nl + + if( status .ne. sai__ok ) return + + ch = ast_channel( mysource, mysink, ' ', status ) + + nl = 0 + ll = 110 + next = 1 + if( ast_write( ch, obj, status ) .ne.1 ) then + call stopit( status, 'Cannot write supplied object to '// + : 'channel' ) + end if + + next = 1 + nl = 0 + result = ast_read( ch, status ) + + if( result .eq. ast__null ) then + call stopit( status, 'Cannot read object from channel' ) + end if + + if( .not. ast_isaframeset( result, status ) ) then + call stopit( status, 'Object read from channel is not a '// + : 'FrameSet') + end if + + end + + subroutine mysource( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, ll, nl + character buf*400000 + + common /ss1/ buf + common /ss2/ next, end, ll,nl + + if( status .ne. sai__ok ) return + + if( next .ge. end ) then + call ast_putline( buf, -1, status ) + else + +c write(*,*) buf( next : next + ll - 1 ) + call ast_putline( buf( next : ), ll, status ) + nl = nl + 1 + endif + + next = next + ll + + end + + subroutine mysink( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, f, l, ll, nl + character buf*400000 + character line*1000 + + common /ss1/ buf + common /ss2/ next, end, ll, nl + + if( status .ne. sai__ok ) return + + line = ' ' + call ast_getline( line, l, status ) + call chr_fandl( line( : l ), f, l ) + buf( next : ) = line( f : l ) + l = l - f + 1 + + if( next + ll - 1 .ge. 400000 ) then + write(*,*) + call stopit( status, 'Buffer overflow in mysink!!' ) + else if( l .gt. ll ) then + write(*,*) + write(*,*) buf( next : next + l) + write(*,*) 'Line length ',l + call stopit( status, 'Line overflow in mysink!!' ) + else + end = next + l + buf( end : next + ll - 1 ) = ' ' + nl = nl + 1 + endif + + next = next + ll + + end + + diff --git a/ast/ast_tester/testkeymap.f b/ast/ast_tester/testkeymap.f new file mode 100644 index 0000000..fcd5d5c --- /dev/null +++ b/ast/ast_tester/testkeymap.f @@ -0,0 +1,1369 @@ + program testkeymap + implicit none + include 'AST_PAR' + include 'AST_ERR' + include 'SAE_PAR' + integer status,map,map2,ival,aval,l,ivec(2),avec(4),nval,i,iat, + : map1, map3, km2 + character cval*20,cvec(3)*10,key*20,cval0*40 + double precision dval, dvec(2) + logical gota, gotc, gotd, goti, gotr, gotw, lval + real rval + integer*2 sval,svec(2) + + status = sai__ok + call err_mark( status ) + call ast_begin( status ) + +c call ast_watchmemory( 29286 ) + + call testcasesens( status ) + call testsorting( status ) + + map = ast_keymap( ' ', status ) + + call ast_MapPut0s( map, 'Freds', 1999, 'com 1', status ) + call ast_MapPut0i( map, 'Fredi', 1999, 'com 1', status ) + call ast_MapPut0d( map, 'Fredd', 1999.9D0, 'com2 ', status ) + call ast_MapPut0r( map, 'Fredr', 1999.9, 'com2 ', status ) + call ast_MapPut0c( map, 'Fredc', 'Hello', ' ', status ) + call ast_MapPut0A( map, 'Freda', ast_skyframe( ' ', status ), + : ' ', status ) + + if( .not. ast_mapdefined( map, 'Freda', status ) ) then + call stopit( status, 'Error -12' ) + end if + + if( ast_maplenc( map, 'Fredi', status ) .ne. 4 ) then + write(*,*) ast_maplenc( map, 'Fredi', status ) + call stopit( status, 'Error -11' ) + end if + + if( ast_maplenc( map, 'Freda', status ) .ne. 0 ) then + write(*,*) ast_maplenc( map, 'Freda', status ) + call stopit( status, 'Error -10' ) + end if + + if( ast_maplenc( map, 'Fredc', status ) .ne. 5 ) then + write(*,*) ast_maplenc( map, 'Fredc', status ) + call stopit( status, 'Error -9' ) + end if + + if( ast_maptype( map, 'freda', status ) .ne. AST__BADTYPE) then + call stopit( status, 'Error -8' ) + end if + + if( ast_maptype( map, 'Freda', status ) .ne. AST__OBJECTTYPE) then + call stopit( status, 'Error -7' ) + end if + + if( ast_maptype( map, 'Fredc', status ) .ne. AST__STRINGTYPE) then + call stopit( status, 'Error -6' ) + end if + + if( ast_maptype( map, 'Fredd', status ) .ne. AST__DOUBLETYPE) then + call stopit( status, 'Error -5' ) + end if + + if( ast_maptype( map, 'Fredr', status ) .ne. AST__FLOATTYPE) then + call stopit( status, 'Error -5b' ) + end if + + if( ast_maptype( map, 'Fredi', status ) .ne. AST__INTTYPE ) then + call stopit( status, 'Error -4' ) + end if + + if( ast_maphaskey( map, 'fredi', status ) ) then + call stopit( status, 'Error -3' ) + end if + + if( .not. ast_maphaskey( map, 'Fredi', status ) ) then + call stopit( status, 'Error -2' ) + end if + + map2 = ast_copy( map, status ) + + + if( ast_mapsize( map2, status ) .ne. 6 ) then + write(*,*) ast_mapsize( map2, status ) + call stopit( status, 'Error 0' ) + end if + + goti = .false. + gotd = .false. + gotr = .false. + gotc = .false. + gota = .false. + gotw = .false. + + do i = 1, ast_mapsize( map2, status ) + key = ast_mapkey( map2, i, status ) + if( .not. goti .and. key .eq. 'Fredi' ) then + goti = .true. + else if( .not. gotd .and. key .eq. 'Fredd' ) then + gotd = .true. + else if( .not. gotw .and. key .eq. 'Freds' ) then + gotw = .true. + else if( .not. gotr .and. key .eq. 'Fredr' ) then + gotr = .true. + else if( .not. gotc .and. key .eq. 'Fredc' ) then + gotc = .true. + else if( .not. gota .and. key .eq. 'Freda' ) then + gota = .true. + else + call stopit( status, 'Error badkey' ) + endif + end do + + if( .not. ( goti .AND. gotd .AND. gotc + : .AND. gota .and. gotr .and. gotw) ) then + call stopit( status, 'Error nokey' ) + endif + + if( ast_maplength( map2, 'Fredi', status ) .ne. 1 ) then + write(*,*) ast_maplength( map2, 'Fredi', status ) + call stopit( status, 'Error -1' ) + end if + + if( .not. ast_mapget0i( map2, 'Fredi', ival, status ) ) then + call stopit( status, 'Error 1' ) + else if( ival .ne. 1999 ) then + write(*,*) ival + call stopit( status, 'Error 2' ) + end if + + if( .not. ast_mapget0s( map2, 'Freds', sval, status ) ) then + call stopit( status, 'Error 1' ) + else if( sval .ne. 1999 ) then + write(*,*) ival + call stopit( status, 'Error 2B' ) + end if + + if( .not. ast_mapget0d( map2, 'Fredd', dval, status ) ) then + call stopit( status, 'Error 3' ) + else if( dval .ne. 1999.9D0 ) then + write(*,*) dval - 1999.9D0 + call stopit( status, 'Error 4' ) + end if + + if( .not. ast_mapget0r( map2, 'Fredr', rval, status ) ) then + call stopit( status, 'Error 3b' ) + else if( rval .ne. 1999.9 ) then + write(*,*) rval - 1999.9 + call stopit( status, 'Error 4b' ) + end if + + if( .not. ast_mapget0c( map2, 'Fredc', cval, l, status ) ) then + call stopit( status, 'Error 5' ) + else if( l .ne. 5 ) then + write(*,*) l + call stopit( status, 'Error 6' ) + else if( cval( :l ) .ne. 'Hello' ) then + write(*,*) cval( :l ) + call stopit( status, 'Error 7' ) + end if + + if( .not. ast_mapgetc( map2, 'Fredc', cval, l, status ) ) then + call stopit( status, 'Error 5b' ) + else if( l .ne. 5 ) then + write(*,*) l + call stopit( status, 'Error 6b' ) + else if( cval( :l ) .ne. 'Hello' ) then + write(*,*) cval( :l ) + call stopit( status, 'Error 7b' ) + end if + + if( .not. ast_mapget0a( map2, 'Freda', aval, status ) ) then + call stopit( status, 'Error 8' ) + else if( .not. ast_IsASkyFrame( aval, STATUS ) ) then + call stopit( status, 'Error 9' ) + end if + + if( .not. ast_mapget0d( map2, 'Fredi', dval, status ) ) then + call stopit( status, 'Error 10' ) + else if( dval .ne. 1999 ) then + write(*,*) dval + call stopit( status, 'Error 11' ) + end if + + if( .not. ast_mapget0r( map2, 'Fredi', rval, status ) ) then + call stopit( status, 'Error 10b' ) + else if( rval .ne. 1999 ) then + call stopit( status, 'Error 11b' ) + end if + + if( .not. ast_mapget0c( map2, 'Fredi', cval, l, status ) ) then + call stopit( status, 'Error 12' ) + else if( l .ne. 4 ) then + write(*,*) l + call stopit( status, 'Error 13a' ) + else if( cval( :l ) .ne. '1999' ) then + write(*,*) cval + call stopit( status, 'Error 13' ) + end if + + if( .not. ast_mapget0i( map2, 'Fredd', ival, status ) ) then + call stopit( status, 'Error 14' ) + else if( ival .ne. 2000.0 ) then + write(*,*) ival + call stopit( status, 'Error 15' ) + end if + + if( .not. ast_mapget0s( map2, 'Fredd', sval, status ) ) then + call stopit( status, 'Error 14b' ) + else if( sval .ne. 2000.0 ) then + write(*,*) sval + call stopit( status, 'Error 15b' ) + end if + + if( .not. ast_mapget0c( map2, 'Fredd', cval, l, status ) ) then + call stopit( status, 'Error 16' ) + else if( l .ne. 6 ) then + write(*,*) l + call stopit( status, 'Error 17a' ) + else if( cval( :l ) .ne. '1999.9' ) then + write(*,*) cval + call stopit( status, 'Error 17' ) + end if + + + ivec(1) = -10 + ivec(2) = -10 + if( .not. ast_mapget1i( map2, 'Fredi', 2, nval, ivec, + : status ) ) then + call stopit( status, 'Error 18' ) + else if( nval .ne. 1 ) then + write(*,*) nval + call stopit( status, 'Error 19' ) + else if( ivec( 1 ) .ne. 1999 ) then + write(*,*) ivec( 1 ) + call stopit( status, 'Error 20' ) + else if( ivec( 2 ) .ne. -10 ) then + write(*,*) ivec( 2 ) + call stopit( status, 'Error 21' ) + end if + + + dvec(1) = -10.0D0 + dvec(2) = -10.0D0 + if( .not. ast_mapget1d( map2, 'Fredd', 2, nval, dvec, + : status ) ) then + call stopit( status, 'Error 22' ) + else if( nval .ne. 1 ) then + write(*,*) nval + call stopit( status, 'Error 23' ) + else if( dvec( 1 ) .ne. 1999.9D0 ) then + write(*,*) dvec( 1 ) + call stopit( status, 'Error 24' ) + else if( dvec( 2 ) .ne. -10.0D0 ) then + write(*,*) dvec( 2 ) + call stopit( status, 'Error 25' ) + end if + + avec(1) = AST__NULL + avec(2) = AST__NULL + if( .not. ast_mapget1a( map2, 'Freda', 2, nval, avec, + : status ) ) then + call stopit( status, 'Error 26' ) + else if( nval .ne. 1 ) then + write(*,*) nval + call stopit( status, 'Error 27' ) + else if( .not. ast_IsASkyFrame( avec( 1 ), STATUS ) ) then + write(*,*) ast_getc( avec( 1 ), 'class', status ) + call stopit( status, 'Error 28' ) + else if( avec( 2 ) .ne. AST__NULL ) then + write(*,*) ast_getc( avec( 2 ), 'class', status ) + call stopit( status, 'Error 29' ) + end if + + + ivec(1)=1999 + ivec(2)=0 + call ast_mapput1i( map, 'Fredi', 2, ivec, 'com 1', STATUS ) + + if( ast_maplength( map, 'Fredi', status ) .ne. 2 ) then + write(*,*) ast_maplength( map, 'Fredi', status ) + call stopit( status, 'Error 29b' ) + + end if + + svec(1)=1999 + svec(2)=0 + call ast_mapput1s( map, 'Freds', 2, svec, 'com 1', STATUS ) + + if( ast_maplength( map, 'Freds', status ) .ne. 2 ) then + write(*,*) ast_maplength( map, 'Freds', status ) + call stopit( status, 'Error 29c' ) + + end if + + dvec(1)=1999.9D0 + dvec(2)=-0.01D0 + call ast_mapput1d( map, 'Fredd', 2, dvec, 'com2', STATUS ) + + cvec(1)='Hello' + cvec(2)=' ' + cvec(3)=' Hello' + call ast_mapput1c( map, 'Fredc', 3, cvec, ' ', STATUS ) + + if( ast_maplenc( map, 'Fredc', status ) .ne. len(cvec(3)) ) then + write(*,*) ast_maplenc( map, 'Fredc', status ) + call stopit( status, 'Error 29c' ) + end if + + avec(1) = ast_skyframe( ' ', status ) + avec(2) = AST__NULL + avec(3) = ast_specframe( ' ', status ) + avec(4) = AST__NULL + call ast_mapput1a( map, 'Freda', 4, avec, ' ', STATUS ) + + map2 = ast_copy( map, status ) + + if( .not. ast_mapget0i( map2, 'Fredi', ival, status ) ) then + call stopit( status, 'Error A1' ) + else if( ival .ne. 1999 ) then + write(*,*) ival + call stopit( status, 'Error A2' ) + end if + + if( .not. ast_mapget0d( map2, 'Fredd', dval, status ) ) then + call stopit( status, 'Error A3' ) + else if( dval .ne. 1999.9D0 ) then + write(*,*) dval - 1999.9D0 + call stopit( status, 'Error A4' ) + end if + + if( .not. ast_mapget0c( map2, 'Fredc', cval, l, status ) ) then + call stopit( status, 'Error A5' ) + else if( l .ne. 10 ) then + write(*,*) l + call stopit( status, 'Error A6' ) + else if( cval( :l ) .ne. 'Hello ' ) then + write(*,*) cval( :l ) + call stopit( status, 'Error A7' ) + end if + + if( .not. ast_mapget0a( map2, 'Freda', aval, status ) ) then + call stopit( status, 'Error A8' ) + else if( .not. ast_IsASkyFrame( aval, STATUS ) ) then + call stopit( status, 'Error A9' ) + end if + + if( .not. ast_mapget0d( map2, 'Fredi', dval, status ) ) then + call stopit( status, 'Error A10' ) + else if( dval .ne. 1999 ) then + write(*,*) dval + call stopit( status, 'Error A11' ) + end if + + if( .not. ast_mapget0c( map2, 'Fredi', cval, l, status ) ) then + call stopit( status, 'Error A12' ) + else if( l .ne. 4 ) then + write(*,*) l + call stopit( status, 'Error A13a' ) + else if( cval( :l ) .ne. '1999' ) then + write(*,*) cval + call stopit( status, 'Error A13' ) + end if + + if( .not. ast_mapget0i( map2, 'Fredd', ival, status ) ) then + call stopit( status, 'Error A14' ) + else if( ival .ne. 2000.0 ) then + write(*,*) ival + call stopit( status, 'Error A15' ) + end if + + if( .not. ast_mapget0c( map2, 'Fredd', cval, l, status ) ) then + call stopit( status, 'Error A16' ) + else if( l .ne. 6 ) then + write(*,*) l + call stopit( status, 'Error A17a' ) + else if( cval( :l ) .ne. '1999.9' ) then + write(*,*) cval + call stopit( status, 'Error A17' ) + end if + + +c Read vector entries as vectors. + if( .not. ast_mapget1i( map2, 'Fredi', 2, nval, ivec, + : status ) ) then + call stopit( status, 'Error B1' ) + else if( nval .ne. 2 ) then + write(*,*) nval + call stopit( status, 'Error B2a' ) + else if( ivec( 1 ) .ne. 1999 ) then + write(*,*) ivec( 1 ) + call stopit( status, 'Error B2b' ) + else if( ivec( 2 ) .ne. 0 ) then + write(*,*) ivec( 2 ) + call stopit( status, 'Error B2c' ) + end if + + if( .not. ast_mapget1d( map2, 'Fredd', 2, nval, dvec, + : status ) ) then + call stopit( status, 'Error B3' ) + else if( nval .ne. 2 ) then + write(*,*) nval + call stopit( status, 'Error B4a' ) + else if( dvec( 1 ) .ne. 1999.9D0 ) then + write(*,*) dvec( 1 ) + call stopit( status, 'Error B4b' ) + else if( dvec( 2 ) .ne. -0.01D0 ) then + write(*,*) dvec( 2 ) + call stopit( status, 'Error B4c' ) + end if + + if( .not. ast_mapget1a( map2, 'Freda', 4, nval, avec, + : status ) ) then + call stopit( status, 'Error B5' ) + else if( nval .ne. 4 ) then + write(*,*) nval + call stopit( status, 'Error B6a' ) + else if( .not. ast_isaskyframe( avec( 1 ), status ) ) then + write(*,*) ast_getc( avec( 1 ), 'class', status ) + call stopit( status, 'Error B6b' ) + else if( avec( 2 ) .NE. AST__NULL ) then + write(*,*) ast_getc( avec( 2 ), 'class', status ) + call stopit( status, 'Error B6c' ) + else if( .not. ast_isaspecframe( avec( 3 ), status ) ) then + write(*,*) ast_getc( avec( 3 ), 'class', status ) + call stopit( status, 'Error B6d' ) + else if( avec( 4 ) .ne. AST__NULL ) then + write(*,*) ast_getc( avec( 4 ), 'class', status ) + call stopit( status, 'Error B6e' ) + end if + + + if( .not. ast_mapget1c( map2, 'Fredc', 3, nval, cvec, + : status ) ) then + call stopit( status, 'Error B7' ) + else if( nval .ne. 3 ) then + write(*,*) nval + call stopit( status, 'Error B8a' ) + else if( cvec( 1 ) .ne. 'Hello ' ) then + write(*,*) cvec( 1 ) + call stopit( status, 'Error B8b' ) + else if( cvec( 2 ) .ne. ' ' ) then + write(*,*) cvec( 2 ) + call stopit( status, 'Error B8c' ) + else if( cvec( 3 ) .ne. ' Hello ' ) then + write(*,*) cvec( 2 ) + call stopit( status, 'Error B8d' ) + end if + +c Read entire vector as a single string. + if( .not. ast_mapgetc( map2, 'Fredc', cval0, l, status ) ) then + call stopit( status, 'Error BB1' ) + else if( l .ne. 34 ) then + call stopit( status, 'Error BB2' ) + else if( cval0 .ne. '(Hello , , Hello )' ) then + call stopit( status, 'Error BB3' ) + end if + +c Read single elements of vector entries as scalars. + if( .not. ast_mapgetelemi( map2, 'Fredi', 1, ivec, + : status ) ) then + call stopit( status, 'Error B1z' ) + else if( ivec( 1 ) .ne. 1999 ) then + write(*,*) ivec( 1 ) + call stopit( status, 'Error B2bz' ) + end if + + if( .not. ast_mapgetelemd( map2, 'Fredd', 2, dvec, + : status ) ) then + call stopit( status, 'Error B3z' ) + else if( dvec( 1 ) .ne. -0.01D0 ) then + write(*,*) dvec( 1 ) + call stopit( status, 'Error B4cz' ) + end if + + if( .not. ast_mapgetelema( map2, 'Freda', 3, avec, + : status ) ) then + call stopit( status, 'Error B5z' ) + else if( .not. ast_isaspecframe( avec( 1 ), status ) ) then + write(*,*) ast_getc( avec( 1 ), 'class', status ) + call stopit( status, 'Error B6dz' ) + end if + + + if( .not. ast_mapgetelemc( map2, 'Fredc', 3, cval0, + : status ) ) then + call stopit( status, 'Error B7z' ) + else if( cval0 .ne. ' Hello ' ) then + write(*,*) cval0 + call stopit( status, 'Error B8dz' ) + end if + + + call ast_mapremove( map2, 'Bert', status ) + call ast_mapremove( map2, 'Fredc', status ) + if( ast_mapget1c( map2, 'Fredc', 3, nval, cvec, status ) ) then + call stopit( status, 'Error C1' ) + endif + + + call checkDump( map2, 'checkDump 1 ', status ) + + call ast_Annul( map, status ) + call ast_Annul( map2, status ) + + + map = ast_keymap( ' ', status ) + + do i = 1, 500 + key = 'Fred' + iat = 4 + call chr_puti( i, key, iat ) + call ast_MapPut0i( map, key, i, ' ', status ) + end do + + if( ast_mapsize( map, status ) .ne. 500 ) then + call stopit( status, 'Error d1 ' ) + end if + + if( ast_maptype( map, 'Fred123', status ) .ne. AST__INTTYPE ) then + call stopit( status, 'Error d2 ' ) + end if + + if( .not. ast_mapget0c( map, 'Fred489', cval, l, status ) ) then + call stopit( status, 'Error d2 ' ) + else if( cval( : l ) .ne. '489' ) then + call stopit( status, 'Error d3 ' ) + end if + + call checkDump( map, 'checkDump 2 ', status ) + + + +c Test putting single elements into vector entries. + map = ast_keymap( ' ', status ) + + ivec(1) = 1 + ivec(2) = 2 + call ast_mapput1i( map, 'Fredi', 2, ivec, 'com 1', STATUS ) + + call ast_mapputelemi( map, 'Fredi', 1, -1, STATUS ) + if( .not. ast_mapgetelemi( map, 'Fredi', 1, ival, + : status ) ) then + call stopit( status, 'Error GETELEM_1' ) + else if( ival .ne. -1 ) then + write(*,*) ival + call stopit( status, 'Error GETELEM_2' ) + end if + + call ast_mapputelemi( map, 'Fredi', 10, -2, STATUS ) + if( .not. ast_mapgetelemi( map, 'Fredi', 3, ival, + : status ) ) then + call stopit( status, 'Error GETELEM_3' ) + else if( ival .ne. -2 ) then + write(*,*) ival + call stopit( status, 'Error GETELEM_4' ) + end if + + call ast_mapputelemi( map, 'Fredi', 0, -3, STATUS ) + if( .not. ast_mapgetelemi( map, 'Fredi', 4, ival, + : status ) ) then + call stopit( status, 'Error GETELEM_5' ) + else if( ival .ne. -3 ) then + write(*,*) ival + call stopit( status, 'Error GETELEM_6' ) + end if + + if( ast_maplength( map, 'Fredi', status ) .ne. 4 ) then + write(*,*) ast_maplength( map, 'Fredi', status ) + call stopit( status, 'Error GETELEM_7' ) + end if + + map2 = ast_keymap( ' ', status ) + call ast_mapputelema( map2, 'A A', 1, map, STATUS ) + if( ast_maplength( map2, 'A A', status ) .ne. 1 ) then + write(*,*) ast_maplength( map, 'Fredi', status ) + call stopit( status, 'Error GETELEM_8' ) + end if + + if( .not. ast_mapgetelema( map2, 'A A', 1, map3, + : status ) ) then + call stopit( status, 'Error GETELEM_9' ) + else if( .not. ast_mapgetelemi( map3, 'Fredi', 4, ival, + : status ) ) then + call stopit( status, 'Error GETELEM_10' ) + else if( ival .ne. -3 ) then + write(*,*) ival + call stopit( status, 'Error GETELEM_11' ) + end if + + if( status .eq. sai__ok ) then + call ast_mapputelema( map2, 'A A', 1, map2, STATUS ) + if( status .eq. ast__kycir ) then + call err_annul( status ) + else + call stopit( status, 'Error GETELEM_12' ) + end if + end if + + call ast_mapput0c( map, ' B', 'Hello', ' ', status ) + + + call ast_setl( map, 'MapLocked', .TRUE., status ) + if( status .eq. sai__ok ) then + call ast_mapput0c( map, ' BZZ', 'Bye Bye', ' ', STATUS ) + if( status .eq. AST__BADKEY ) then + call err_annul( status ) + call ast_clear( map, 'maplocked', status ) + else + call stopit( status, 'Error GETELEM_12B' ) + end if + end if + + call ast_mapput0c( map, ' BZZ', 'Bye Bye', ' ', STATUS ) + km2 = ast_keymap( ' ', status ) + call ast_mapput0a( map, ' BZY', km2, ' ', STATUS ) + call ast_mapput0c( km2, ' BZZ', 'Bye Bye', ' ', STATUS ) + + call ast_setl( map, 'MapLocked', .TRUE., status ) + call ast_mapput0c( map, ' BZZ', 'You Bye', ' ', STATUS ) + call ast_mapput0c( km2, ' BZZ', 'You Bye', ' ', STATUS ) + if( status .eq. sai__ok ) then + call ast_mapput0c( km2, ' BZA', 'No Bye', ' ', STATUS ) + if( status .eq. AST__BADKEY ) then + call err_annul( status ) + call ast_clear( map, 'maplocked', status ) + call ast_mapput0c( km2, ' BZA', 'No Bye', ' ', STATUS ) + else + call stopit( status, 'Error GETELEM_12C' ) + end if + end if + + if( ast_getl( km2, 'KeyError', status ) ) then + call stopit( status, 'Error GETELEM_12D' ) + end if + + call ast_setl( map, 'KeyError', .TRUE., status ) + + if( .not. ast_getl( km2, 'KeyError', status ) ) then + call stopit( status, 'Error GETELEM_12E' ) + end if + + if( status .eq. sai__ok ) then + lval = ast_mapget0c( km2, 'FRED', cval, l, status ) + if( status .eq. AST__MPKER ) then + call err_annul( status ) + call ast_clear( map, 'keyerror', status ) + lval = ast_mapget0c( km2, 'FRED', cval, l, status ) + else + call stopit( status, 'Error GETELEM_12F' ) + end if + endif + + + + + + + + + call ast_mapputelemc( map, ' B ', 3, 'YES YES', STATUS ) + + if( ast_maplength( map, ' B', status ) .ne. 2 ) then + write(*,*) ast_maplength( map, ' B', status ) + call stopit( status, 'Error GETELEM_13' ) + + else if( .not. ast_mapgetelemc( map, ' B ', 2, cval0, + : status ) ) then + call stopit( status, 'Error GETELEM_14' ) + + else if( cval0 .ne. 'YES YES' ) then + write(*,*) cval0 + call stopit( status, 'Error GETELEM_15' ) + end if + + call ast_annul( map, status ) + + +C Test ast_mapcopy + map = ast_keymap( ' ', status ) + map1 = ast_keymap( ' ', status ) + map2 = ast_keymap( ' ', status ) + map3 = ast_keymap( ' ', status ) + + call ast_mapput0i( map1, 'a1', 1, ' ', status ) + call ast_mapput0i( map1, 'a2', 2, ' ', status ) + call ast_mapput0i( map1, 'a3', 3, ' ', status ) + + call ast_mapput0c( map, 'aa1', 'Yes', ' ', status ) + call ast_mapput0i( map, 'aa2', 2, ' ', status ) + call ast_mapput0a( map, 'aa3', map1, ' ', status ) + + call ast_mapput0i( map2, 'b1', 10, ' ', status ) + call ast_mapput0i( map2, 'b2', 20, ' ', status ) + call ast_mapput0i( map2, 'b3', 30, ' ', status ) + + call ast_mapput0c( map3, 'bb1', 'No', ' ', status ) + call ast_mapput0i( map3, 'aa2', 20, ' ', status ) + call ast_mapput0a( map3, 'bb3', map2, ' ', status ) + + call ast_mapcopy( map, map3, status ) + + if( ast_mapsize( map, status ) .ne. 5 ) then + write(*,*) ast_mapsize( map, status ) + call stopit( status, 'Error MAPCOPY_0' ) + end if + + if( .not. ast_mapget0c( map, 'aa1', cval, l, status ) ) then + call stopit( status, 'Error MAPCOPY_1' ) + else if( cval .ne. 'Yes' ) then + write(*,*) cval + call stopit( status, 'Error MAPCOPY_2' ) + end if + + if( .not. ast_mapget0i( map, 'aa2', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_3' ) + else if( ival .ne. 20 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_4' ) + end if + + if( .not. ast_mapget0a( map, 'aa3', aval, status ) ) then + call stopit( status, 'Error MAPCOPY_5' ) + else if( .not. ast_isakeymap( aval, status ) ) then + write(*,*) ast_getc( aval, 'Class' ) + call stopit( status, 'Error MAPCOPY_6' ) + + if( .not. ast_mapget0i( aval, 'a1', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_7' ) + else if( ival .ne. 1 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_8' ) + end if + + if( .not. ast_mapget0i( aval, 'a2', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_9' ) + else if( ival .ne. 20 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_10' ) + end if + + if( .not. ast_mapget0i( aval, 'a3', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_11' ) + else if( ival .ne. 3 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_12' ) + end if + end if + + if( .not. ast_mapget0c( map, 'bb1', cval, l, status ) ) then + call stopit( status, 'Error MAPCOPY_13' ) + else if( cval .ne. 'No' ) then + write(*,*) cval + call stopit( status, 'Error MAPCOPY_14' ) + end if + + if( .not. ast_mapget0a( map, 'bb3', aval, status ) ) then + call stopit( status, 'Error MAPCOPY_15' ) + else if( .not. ast_isakeymap( aval, status ) ) then + write(*,*) ast_getc( aval, 'Class' ) + call stopit( status, 'Error MAPCOPY_16' ) + + if( .not. ast_mapget0i( aval, 'b1', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_17' ) + else if( ival .ne. 10 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_18' ) + end if + + if( .not. ast_mapget0i( aval, 'b2', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_19' ) + else if( ival .ne. 20 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_20' ) + end if + + if( .not. ast_mapget0i( aval, 'b3', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_21' ) + else if( ival .ne. 30 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_22' ) + end if + end if + + + map = ast_keymap( ' ', status ) + map1 = ast_keymap( ' ', status ) + map2 = ast_keymap( ' ', status ) + map3 = ast_keymap( ' ', status ) + + call ast_mapput0i( map1, 'a1', 1, ' ', status ) + call ast_mapput0i( map1, 'a2', 2, ' ', status ) + call ast_mapput0i( map1, 'a3', 3, ' ', status ) + + call ast_mapput0c( map, 'aa1', 'Yes', ' ', status ) + call ast_mapput0i( map, 'aa2', 2, ' ', status ) + call ast_mapput0a( map, 'aa3', map1, ' ', status ) + + call ast_mapput0i( map2, 'b1', 10, ' ', status ) + call ast_mapput0i( map2, 'b2', 20, ' ', status ) + call ast_mapput0i( map2, 'b3', 30, ' ', status ) + + call ast_mapput0i( map3, 'aa1', 0, ' ', status ) + call ast_mapput0i( map3, 'aa2', 20, ' ', status ) + call ast_mapput0a( map3, 'aa3', map2, ' ', status ) + + call ast_mapcopy( map, map3, status ) + + if( ast_mapsize( map, status ) .ne. 3 ) then + write(*,*) ast_mapsize( map, status ) + call stopit( status, 'Error MAPCOPY_23' ) + end if + + if( .not. ast_mapget0i( map, 'aa1', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_24' ) + else if( ival .ne. 0 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_25' ) + end if + + if( .not. ast_mapget0i( map, 'aa2', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_26' ) + else if( ival .ne. 20 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_27' ) + end if + + if( .not. ast_mapget0a( map, 'aa3', aval, status ) ) then + call stopit( status, 'Error MAPCOPY_28' ) + else if( .not. ast_isakeymap( aval, status ) ) then + write(*,*) ast_getc( aval, 'Class' ) + call stopit( status, 'Error MAPCOPY_29' ) + + if( .not. ast_mapget0i( aval, 'a1', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_30' ) + else if( ival .ne. 1 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_31' ) + end if + + if( .not. ast_mapget0i( aval, 'a2', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_32' ) + else if( ival .ne. 20 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_33' ) + end if + + if( .not. ast_mapget0i( aval, 'a3', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_34' ) + else if( ival .ne. 3 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_35' ) + end if + + if( .not. ast_mapget0i( aval, 'b1', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_36' ) + else if( ival .ne. 10 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_37' ) + end if + + if( .not. ast_mapget0i( aval, 'b2', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_38' ) + else if( ival .ne. 20 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_39' ) + end if + + if( .not. ast_mapget0i( aval, 'b3', ival, status ) ) then + call stopit( status, 'Error MAPCOPY_40' ) + else if( ival .ne. 30 ) then + write(*,*) ival + call stopit( status, 'Error MAPCOPY_41' ) + end if + + end if + + + map = ast_keymap( ' ', status ) + map1 = ast_keymap( ' ', status ) + map2 = ast_keymap( ' ', status ) + map3 = ast_keymap( ' ', status ) + + call ast_mapput0i( map1, 'a1', 1, ' ', status ) + call ast_mapput0i( map1, 'a2', 2, ' ', status ) + call ast_mapput0i( map1, 'a3', 3, ' ', status ) + + call ast_mapput0c( map, 'aa1', 'Yes', ' ', status ) + call ast_mapput0i( map, 'aa2', 2, ' ', status ) + call ast_mapput0a( map, 'aa3', map1, ' ', status ) + + call ast_mapput0i( map2, 'b1', 10, ' ', status ) + call ast_mapput0i( map2, 'b2', 20, ' ', status ) + call ast_mapput0i( map2, 'b3', 30, ' ', status ) + + call ast_mapput0i( map3, 'aa1', 0, ' ', status ) + call ast_mapput0i( map3, 'aa2', 20, ' ', status ) + call ast_mapput0a( map3, 'aa3', map2, ' ', status ) + + call ast_setl( map, 'MapLocked', .TRUE., status ) + if( status .eq. SAI__OK ) then + call ast_mapcopy( map, map3, status ) + if( status .eq. AST__BADKEY ) then + call err_annul( status ) + else + call stopit( status, 'Error MAPCOPY_42' ) + end if + end if + + +C Test AST_MAPPUTU and undefined values + map = ast_keymap( ' ', status ) + call ast_mapputu( map, 'GG', 'A comment', status ) + if( ast_mapdefined( map, 'GG', status ) ) then + call stopit( status, 'Error UNDEF_0' ) + else if( ast_mapget0i( map, 'GG', ival, status ) ) then + call stopit( status, 'Error UNDEF_1' ) + else if( ast_mapget0s( map, 'GG', sval, status ) ) then + call stopit( status, 'Error UNDEF_1B' ) + else if( ast_mapget0c( map, 'GG', cval, l, status ) ) then + call stopit( status, 'Error UNDEF_2' ) + else if( ast_mapget0a( map, 'GG', aval, status ) ) then + call stopit( status, 'Error UNDEF_3' ) + else if( ast_mapget1i( map, 'GG', 2, nval, ivec, + : status ) ) then + call stopit( status, 'Error UNDEF_4' ) + else if( ast_mapgetelemc( map, 'gg', 1, cval, status ) ) then + call stopit( status, 'Error UNDEF_5' ) + else if( .not. ast_maphaskey( map, 'GG', status ) ) then + call stopit( status, 'Error UNDEF_6' ) + end if + + if( ast_maptype( map, 'GG', status ) .ne. AST__UNDEFTYPE ) then + write(*,*) ast_maptype( map, 'GG', status ) + call stopit( status, 'Error UNDEF_7' ) + else if( ast_mapsize( map, status ) .ne. 1 ) then + call stopit( status, 'Error UNDEF_8' ) + end if + + call ast_mapput0i( map, 'GG', 0, ' ', status ) + if( .not. ast_mapget0i( map, 'GG', ival, status ) ) then + call stopit( status, 'Error UNDEF_9' ) + else if( ival .ne. 0 ) then + call stopit( status, 'Error UNDEF_10' ) + endif + + call ast_maprename( map, 'GG', 'GGNEW', status ) + if( ast_maphaskey( map, 'GG', status ) ) then + call stopit( status, 'Error RENAME_1' ) + else if( .not. ast_mapget0i( map, 'GGNEW', ival, status ) ) then + call stopit( status, 'Error RENAME_2' ) + else if( ival .ne. 0 ) then + call stopit( status, 'Error RENAME_3' ) + endif + + call ast_maprename( map, 'GGNEW', 'GG', status ) + if( ast_maphaskey( map, 'GGNEW', status ) ) then + call stopit( status, 'Error RENAME_4' ) + else if( .not. ast_mapget0i( map, 'GG', ival, status ) ) then + call stopit( status, 'Error RENAME_5' ) + else if( ival .ne. 0 ) then + call stopit( status, 'Error RENAME_6' ) + endif + + + + + + + call ast_end( status ) + + call ast_activememory( ' ' ) + call ast_flushmemory( 1 ); + + call err_rlse( status ) + + if( status .eq. sai__ok ) then + write(*,*) 'All KeyMap tests passed' + else + write(*,*) 'KeyMap tests failed' + end if + + end + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + + end + + subroutine checkdump( obj, text, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + character text*(*),key*30,txt1*50,txt2*50 + integer obj, status, next, end, ch, result, ll, overlap, size, + : i, type,obj1,obj2,l1,l2,nl + external mysource, mysink + character buf*400000 + + common /ss1/ buf + common /ss2/ next, end, ll, nl + + if( status .ne. sai__ok ) return + + ch = ast_channel( mysource, mysink, ' ', status ) + + + nl = 0 + ll = 110 + next = 1 + if( ast_write( ch, obj, status ) .ne.1 ) then + write(*,*) text + call stopit( status, 'Cannot write supplied object to '// + : 'channel' ) + end if + + next = 1 + nl = 0 + result = ast_read( ch, status ) + + if( result .eq. ast__null ) then + write(*,*) text + call stopit( status, 'Cannot read object from channel' ) + end if + + size = ast_mapsize( result, status ) + if( ast_mapsize( obj, status ) .ne. size ) then + write(*,*) size, ast_mapsize( obj, status ) + call stopit( status, 'checkDump 1' ) + else + do i = 1, size + key = ast_mapkey( result, i, status ) + type = ast_maptype( result, key, status ) + if( ast_maptype( obj, key, status ) .ne. type ) then + write(*,*) type, ast_maptype( obj, key, status ) + call stopit( status, 'checkDump 4' ) + else + + if( type .eq. AST__OBJECTTYPE ) then + + if( .not. ast_mapGet0A( result, key, obj1, + : status ) ) call stopit( status, 'checkDump 5' ) + if( .not. ast_mapGet0A( obj, key, obj2, + : status ) ) call stopit( status, 'checkDump 6' ) + if( ast_GetC( obj1, 'class', status ) .ne. + : ast_GetC( obj2, 'class', status ) ) then + call stopit( status, 'checkDump 7' ) + end if + + else + + if( .not. ast_mapGet0C( result, key, txt1, l1, + : status ) ) call stopit( status, 'checkDump 8' ) + if( .not. ast_mapGet0C( obj, key, txt2, l2, + : status ) ) call stopit( status, 'checkDump 9' ) + if( txt1( : l1 ) .ne. txt2( : l2 ) .or. + : l1 .ne. l2 ) then + call stopit( status, 'checkDump 10' ) + end if + + end if + end if + end do + end if + + end + + subroutine mysource( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, ll, nl + character buf*400000 + + common /ss1/ buf + common /ss2/ next, end, ll,nl + + if( status .ne. sai__ok ) return + + if( next .ge. end ) then + call ast_putline( buf, -1, status ) + else + call ast_putline( buf( next : ), ll, status ) + nl = nl + 1 + endif + + next = next + ll + + end + + subroutine mysink( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, f, l, ll, nl + character buf*400000 + character line*1000 + + common /ss1/ buf + common /ss2/ next, end, ll, nl + + if( status .ne. sai__ok ) return + + line = ' ' + call ast_getline( line, l, status ) + call chr_fandl( line( : l ), f, l ) + buf( next : ) = line( f : l ) + l = l - f + 1 + + if( next + ll - 1 .ge. 400000 ) then + write(*,*) + call stopit( status, 'Buffer overflow in mysink!!' ) + else if( l .gt. ll ) then + write(*,*) + write(*,*) buf( next : next + l) + write(*,*) 'Line length ',l + call stopit( status, 'Line overflow in mysink!!' ) + else + end = next + l + buf( end : next + ll - 1 ) = ' ' + nl = nl + 1 + endif + + next = next + ll + + end + + + + subroutine testsorting( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + integer status, km, i + character keys(5)*15 + character skeys(5)*15 + character key*( AST__SZCHR ) + + + data keys / 'ABC', 'zzzzzzzzzzz', 'this_is_a_key', 'HE-HE', 'A' / + data skeys / 'A', 'ABC', 'HE-HE', 'this_is_a_key', 'zzzzzzzzzzz' / + + + if( status .ne. sai__ok ) return + +C Value Age sorting... + +C First test adding entries into an already sorted KeyMap + + km = ast_keymap( 'Sortby=AgeDown', status ) + + do i = 1, 5 + call ast_mapput0i( km, keys(i), i, ' ', status ) + end do + + do i = 1, 5 + key = ast_mapkey( km, i, status ) + if( key .ne. keys(i) .and. status .eq. SAI__OK ) then + write(*,*) 'Key ',i,' is ',key,' (should be ',keys(i),')' + call stopit( status, 'Error Sort 1' ) + return + end if + end do + +C Now test sorting existing entries in a KeyMap. + call ast_set( km, 'Sortby=AgeUp', status ) + + do i = 1, 5 + key = ast_mapkey( km, i, status ) + if( key .ne. keys(6-i) .and. status .eq. SAI__OK ) then + write(*,*) 'Key ',i,' is ',key,' (should be ',keys(6-i),')' + call stopit( status, 'Error Sort 2' ) + return + end if + end do + + +C Changing the value of an existing entry should change its position in +C the list. + call ast_mapput0i( km, keys(1), 10, ' ', status ) + call ast_set( km, 'Sortby=AgeDown', status ) + + do i = 1, 5 + key = ast_mapkey( km, i, status ) + if( i .eq. 5 ) then + if( key .ne. keys(1) .and. status .eq. SAI__OK ) then + write(*,*) 'Key ',1,' is ',key,' (should be ',keys(1),')' + call stopit( status, 'Error Sort 2b' ) + return + end if + else if( key .ne. keys(i+1) .and. status .eq. SAI__OK ) then + write(*,*) 'Key ',i+1,' is ',key,' (should be ',keys(i+1), + : ')' + call stopit( status, 'Error Sort 2c' ) + return + end if + end do + + call ast_annul( km, status ) + + +C Key Age sorting... + +C First test adding entries into an already sorted KeyMap + + km = ast_keymap( 'Sortby=KeyAgeDown', status ) + + do i = 1, 5 + call ast_mapput0i( km, keys(i), i, ' ', status ) + end do + + do i = 1, 5 + key = ast_mapkey( km, i, status ) + if( key .ne. keys(i) .and. status .eq. SAI__OK ) then + write(*,*) 'Key ',i,' is ',key,' (should be ',keys(i),')' + call stopit( status, 'Error Sort 0' ) + return + end if + end do + +C Now test sorting existing entries in a KeyMap. + call ast_set( km, 'Sortby=KeyAgeUp', status ) + + do i = 1, 5 + key = ast_mapkey( km, i, status ) + if( key .ne. keys(6-i) .and. status .eq. SAI__OK ) then + write(*,*) 'Key ',i,' is ',key,' (should be ',keys(6-i),')' + call stopit( status, 'Error Sort -1' ) + return + end if + end do + + +C Changing the value of an existing entry should not change its position +C in the list. + call ast_mapput0i( km, keys(1), 10, ' ', status ) + call ast_set( km, 'Sortby=KeyAgeDown', status ) + + do i = 1, 5 + key = ast_mapkey( km, i, status ) + if( key .ne. keys(i) .and. status .eq. SAI__OK ) then + write(*,*) 'Key ',i,' is ',key,' (should be ',keys(i),')' + call stopit( status, 'Error Sort -2' ) + return + end if + end do + + call ast_annul( km, status ) + + + +C Key sorting... + +C First test adding entries into an already sorted KeyMap + + km = ast_keymap( 'Sortby=KeyUp', status ) + + do i = 1, 5 + call ast_mapput0i( km, keys(i), i, ' ', status ) + end do + + do i = 1, 5 + key = ast_mapkey( km, i, status ) + if( key .ne. skeys(i) .and. status .eq. SAI__OK ) then + write(*,*) 'Key ',i,' is ',key,' (should be ',skeys(i),')' + call stopit( status, 'Error Sort 3' ) + return + end if + end do + +C Now test sorting existing entries in a KeyMap. + call ast_set( km, 'Sortby=KeyDown', status ) + + do i = 1, 5 + key = ast_mapkey( km, i, status ) + if( key .ne. skeys(6-i) .and. status .eq. SAI__OK ) then + write(*,*) 'Key ',i,' is ',key,' (should be ',skeys(6-i),')' + call stopit( status, 'Error Sort 4' ) + return + end if + end do + + call ast_annul( km, status ) + + + + + end + + + + + subroutine testcasesens( status ) + implicit none + include 'AST_PAR' + include 'AST_ERR' + include 'SAE_PAR' + + integer status, map, l + character sval*( AST__SZCHR ) + + if( status .ne. sai__ok ) return + + map = ast_keymap( 'KeyCase=0', status ) + call ast_mapput0i( map, 'Freds', 1999, 'com 1', status ) + + if( .not. ast_maphaskey( map, 'fReDs', status ) ) then + call stopit( status, 'Error case 1' ) + endif + + if( ast_mapkey( map, 1, status ) .ne. 'FREDS' ) then + call stopit( status, 'Error case 2' ) + endif + + if( .not. ast_mapget0c( map, 'freds', sval, l, status ) ) then + call stopit( status, 'Error case 3' ) + else if( sval .ne. '1999' ) then + call stopit( status, 'Error case 4' ) + else if( l .ne. 4 ) then + call stopit( status, 'Error case 4b' ) + end if + + call ast_setl( map, 'KeyCase', 0, status ); + + if( status .eq. sai__ok ) then + call ast_clear( map, 'KeyCase', status ) + if( status .eq. AST__NOWRT ) then + call err_annul( status ) + else if( status .eq. sai__ok ) then + call stopit( status, 'Error case 5' ) + end if + end if + + if( ast_mapsize( map, status ) .ne. 1 ) then + call stopit( status, 'Error case 6' ) + end if + + call ast_mapremove( map, 'freDs', status ) + + if( ast_mapsize( map, status ) .ne. 0 ) then + call stopit( status, 'Error case 7' ) + end if + + call ast_clear( map, 'KeyCase', status ) + call ast_mapput0i( map, 'Freds', 1999, 'com 1', status ) + if( ast_maphaskey( map, ' fReDs', status ) ) then + call stopit( status, 'Error case 8' ) + endif + + + call ast_annul( map, status ) + + end + + + + diff --git a/ast/ast_tester/testlutmap.f b/ast/ast_tester/testlutmap.f new file mode 100644 index 0000000..e183375 --- /dev/null +++ b/ast/ast_tester/testlutmap.f @@ -0,0 +1,177 @@ + program testlutmap + implicit none + + include 'AST_PAR' + include 'SAE_PAR' + + integer lm, status, i + double precision lut1( 10 ), x( 7 ), y(7) + + status = sai__ok + call err_mark( status ) + call ast_begin( status ) + + + data lut1/ -1D0, 0D0, 1D0, 2D0, 3D0, 4D0, 5D0, 6D0, 7D0, 8D0 / + + + + + lm = ast_lutmap( 10, lut1, -1.0D0, 1.0D0, ' ', status ) + x( 1 ) = -2.0D0 + x( 2 ) = -1.0D0 + x( 3 ) = -0.5D0 + x( 4 ) = 3.0D0 + x( 5 ) = 7.5D0 + x( 6 ) = 8.0D0 + x( 7 ) = 8.5D0 + + call ast_tran1( lm, 7, x, .TRUE., y, status ) + + do i = 1, 7 + if( x( i ) .ne. y( i ) ) then + call stopit( status, "Error 1" ); + end if + end do + + call ast_tran1( lm, 7, y, .FALSE., x, status ) + + do i = 1, 7 + if( x( i ) .ne. y( i ) ) then + call stopit( status, "Error 2" ); + end if + end do + + + + + lut1( 1 ) = lut1( 2 ) + lm = ast_lutmap( 10, lut1, -1.0D0, 1.0D0, ' ', status ) + x( 1 ) = -2.0D0 + x( 2 ) = -1.0D0 + x( 3 ) = -0.5D0 + x( 4 ) = 0.5D0 + x( 5 ) = 3.0D0 + x( 6 ) = 8.0D0 + x( 7 ) = 8.5D0 + + call ast_tran1( lm, 7, x, .TRUE., y, status ) + + do i = 1, 3 + if( y( i ) .ne. 0.0 ) then + call stopit( status, "Error 3" ); + end if + end do + + do i = 4, 7 + if( x( i ) .ne. y( i ) ) then + call stopit( status, "Error 4" ); + end if + end do + + call ast_tran1( lm, 7, y, .FALSE., x, status ) + + do i = 1, 3 + if( x( i ) .ne. AST__BAD ) then + call stopit( status, "Error 5" ); + end if + end do + + do i = 4, 7 + if( x( i ) .ne. y( i ) ) then + call stopit( status, "Error 6" ); + end if + end do + + + lut1( 5 ) = AST__BAD + lm = ast_lutmap( 10, lut1, -1.0D0, 1.0D0, ' ', status ) + x( 1 ) = -2.0D0 + x( 2 ) = -1.0D0 + x( 3 ) = -0.5D0 + x( 4 ) = 0.5D0 + x( 5 ) = 3.0D0 + x( 6 ) = 8.0D0 + x( 7 ) = 8.5D0 + + call ast_tran1( lm, 7, x, .TRUE., y, status ) + + do i = 1, 3 + if( y( i ) .ne. 0.0 ) then + call stopit( status, "Error 7" ); + end if + end do + + if( y( 5 ) .ne. AST__BAD ) then + call stopit( status, "Error 8" ); + end if + y(5) = x( 5 ) + + do i = 4, 7 + if( x( i ) .ne. y( i ) ) then + call stopit( status, "Error 9" ); + end if + end do + + call ast_tran1( lm, 7, y, .FALSE., x, status ) + + do i = 1, 3 + if( x( i ) .ne. AST__BAD ) then + call stopit( status, "Error 10" ); + end if + end do + + if( x( 5 ) .ne. AST__BAD ) then + call stopit( status, "Error 11" ); + end if + x(5) = y( 5 ) + + do i = 4, 7 + if( x( i ) .ne. y( i ) ) then + call stopit( status, "Error 12" ); + end if + end do + + + + + + + + + + + + + + + + + call ast_end( status ) + call err_rlse( status ) + +c call ast_activememory( 'testlutmap' ) + call ast_flushmemory( 1 ) + + if( status .eq. sai__ok ) then + write(*,*) 'All LutMap tests passed' + else + write(*,*) 'LutMap tests failed' + end if + + end + + + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + end + + + diff --git a/ast/ast_tester/testmapping.f b/ast/ast_tester/testmapping.f new file mode 100644 index 0000000..a02dd5b --- /dev/null +++ b/ast/ast_tester/testmapping.f @@ -0,0 +1,85 @@ + program testmapping + implicit none + + include 'AST_PAR' + include 'SAE_PAR' + + integer status, pm + double precision coeff(20), fit(6), lbnd(2), ubnd(2) + + data coeff / 1.0, 1.0, 0.0, 0.0, + : 2.0, 1.0, 1.0, 0.0, + : 1.0, 2.0, 0.0, 0.0, + : 3.0, 2.0, 0.0, 1.0, + : 3.0, 1.0, 0.0, 2.0 / + + + + status = sai__ok + call err_mark( status ) + call ast_begin( status ) + + pm = ast_polymap( 2, 2, 4, coeff, 0, coeff, ' ', status ) + + lbnd( 1 ) = -1.0D0 + lbnd( 2 ) = -1.0D0 + ubnd( 1 ) = 1.0D0 + ubnd( 2 ) = 1.0D0 + if( ast_linearapprox(pm, lbnd, ubnd, 0.001D0, fit, status) ) then + if( fit(1) .ne. 1.0D0 .or. fit(2) .ne. 1.0D0 .or. + : fit(3) .ne. 2.0D0 .or. fit(4) .ne. 0.0D0 .or. + : fit(5) .ne. 0.0D0 .or. fit(6) .ne. 3.0D0 ) then + call stopit( status, 'Error 0' ) + end if + else + call stopit( status, 'Error 1' ) + end if + + coeff( 13 ) = AST__BAD + pm = ast_polymap( 2, 2, 4, coeff, 0, coeff, ' ', status ) + + if( ast_linearapprox(pm, lbnd, ubnd, 0.001D0, fit, status) ) then + if( fit(1) .ne. 1.0D0 .or. fit(2) .ne. AST__BAD .or. + : fit(3) .ne. 2.0D0 .or. fit(4) .ne. 0.0D0 .or. + : fit(5) .ne. AST__BAD .or. fit(6) .ne. AST__BAD ) then + call stopit( status, 'Error 2' ) + end if + else + call stopit( status, 'Error 3' ) + end if + + pm = ast_polymap( 2, 2, 5, coeff, 0, coeff, ' ', status ) + + if( ast_linearapprox(pm, lbnd, ubnd, 0.001D0, fit, status) ) then + write(*,*) fit + call stopit( status, 'Error 4' ) + end if + + + + + call ast_end( status ) + call err_rlse( status ) + + if( status .eq. sai__ok ) then + write(*,*) 'All Mapping tests passed' + else + write(*,*) 'Mapping tests failed' + end if + + end + + + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + end + + + diff --git a/ast/ast_tester/testnormmap.f b/ast/ast_tester/testnormmap.f new file mode 100644 index 0000000..2c57ee6 --- /dev/null +++ b/ast/ast_tester/testnormmap.f @@ -0,0 +1,94 @@ + program testnormmap + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'PRM_PAR' + + integer status, m, m2, m3, f, perm(3) + double precision at(3), bt(3) + + call ast_begin( status ) + + + status = sai__ok + + f = ast_cmpframe( ast_specframe( ' ', status ), + : ast_skyframe( ' ', status ), ' ', status ) + + perm( 1 ) = 3 + perm( 2 ) = 1 + perm( 3 ) = 2 + call ast_permaxes( f, perm, status ) + m = ast_normmap( f, ' ', status ) + + if( ast_geti( m, 'nin', status ) .ne. 3 ) call stopit( 1, status ) + if( ast_geti( m, 'nout', status ) .ne. 3 ) call stopit( 2, status) + + if( .not. ast_getl( m, 'TranForward', status ) ) call stopit( 3, + : status ) + if( .not. ast_getl( m, 'TranInverse', status ) ) call stopit( 4, + : status ) + + + m2 = ast_copy( m, status ) + call ast_invert( m2, status ) + m3 = ast_simplify( ast_cmpmap( m, m2, .true., ' ', status ), + : status ) + if( .not. ast_isaunitmap( m3, status ) ) call stopit( 5, status ) + + + at( 1 ) = 2.0D0 + at( 2 ) = 3.0D4 + at( 3 ) = 1.0D0 + + call ast_trann( m, 1, 3, 1, at, 1, 3, 1, bt, status ) + + if( abs( bt(1)-1.14159265D0) .gt. 1.0D-6 ) then + write(*,*) bt(1)-1.14159265D0 + call stopit(6,status) + end if + if( bt(2) .ne. 3.0D4 ) call stopit(7,status) + if( abs( bt(3)-4.14159265D0) .gt. 1.0D-6 ) call stopit(8,status) + + + + +* Test adjacent identical NormMaps are simplified to a single NormMap. + m2 = ast_cmpmap( ast_cmpmap( m, ast_copy( m, status ), .true., + : ' ', status ), + : ast_cmpmap( m, ast_copy( m, status ), .true., + : ' ', status ), .true., ' ', status ) + m3 = ast_simplify( m2, status ) + if( .not. ast_isanormmap( m3, status ) ) call stopit( 9, status ) + +* Test NormMap that encapsulate a basic Frame are simplified to a UnitMap. + m = ast_normmap( ast_frame(2, ' ', status ), ' ', status ) + m2 = ast_simplify( m, status ) + if( .not. ast_isaunitmap( m2, status ) ) call stopit( 10, status ) + + + + + + call ast_end( status ) + + call ast_flushmemory( 1 ) + + if( status .eq. sai__ok ) then + write(*,*) 'All NormMap tests passed' + else + write(*,*) 'NormMap tests failed' + end if + + end + + + subroutine stopit( i, status ) + implicit none + include 'SAE_PAR' + integer i, status + if( status .eq. sai__ok ) then + write( *,* ) 'Error ',i + status = sai__error + end if + end diff --git a/ast/ast_tester/testobject.c b/ast/ast_tester/testobject.c new file mode 100644 index 0000000..c1c1972 --- /dev/null +++ b/ast/ast_tester/testobject.c @@ -0,0 +1,120 @@ +#include "ast.h" +#include <stdio.h> +#include <string.h> + +int main(){ + const char *routine; + const char *file; + int i; + int line; + char *pickle1; + char *pickle2; + AstSkyFrame *sf = astSkyFrame( " " ); + AstFrame *bf = astFrame( 2, "Domain=SKY" ); + AstFrameSet *fs = astConvert( bf, sf, " " ); + AstKeyMap *km; + void *p; + + if( fs ) { + pickle1 = astToString( fs ); + AstFrameSet *fs2 = astFromString( pickle1 ); + pickle2 = astToString( fs2 ); + if( pickle1 && pickle2 ) { + if( strcmp( pickle1, pickle2 ) && astOK ) { + astError( AST__INTER, "Error 1\n" ); + } + } else if( astOK ) { + astError( AST__INTER, "Error 2\n" ); + } + + + pickle1 = astFree( pickle1 ); + pickle2 = astFree( pickle2 ); + + if( fs2 && !astEqual( fs, fs2 ) && astOK ) { + astError( AST__INTER, "Error 3\n" ); + } + + astCreatedAt( bf, &routine, &file, &line ); + if( ( !routine || strcmp( routine, "main" ) ) && astOK ) { + astError( AST__INTER, "Error 31\n" ); + } + if( ( !file || strcmp( file, "testobject.c" ) ) && astOK ) { + astError( AST__INTER, "Error 32\n" ); + } + if( line != 13 && astOK ) { + astError( AST__INTER, "Error 33 (line is %d)\n", line ); + } + + + km = astActiveObjects( NULL, 0, 0 ); + if( !km && astOK ) { + astError( AST__INTER, "Error 34\n" ); + } else { + int nkey = astMapSize( km ); + if( nkey != 3 && astOK ) { + astError( AST__INTER, "Error 35 (nkey is %d)\n", nkey ); + } + + astSetC( km, "SortBy", "KeyUp" ); + for( i=0; i < 3; i++ ){ + const char *key = astMapKey( km, i ); + if( i == 0 ) { + if( strcmp( key, "Frame" ) && astOK ) { + astError( AST__INTER, "Error 36 (key 0 is '%s')\n", key ); + } else if( astMapLength(km,key) != 1 && astOK ) { + astError( AST__INTER, "Error 361 (%d)\n", astMapLength(km,key) ); + } else if( ( !astMapGetElemP( km, key, 0, &p ) || ( p != bf ) ) && astOK ) { + astError( AST__INTER, "Error 362\n" ); + } else { + astCreatedAt( p, &routine, &file, &line ); + if( ( !routine || strcmp( routine, "main" ) ) && astOK ) { + astError( AST__INTER, "Error 363\n" ); + } + if( ( !file || strcmp( file, "testobject.c" ) ) && astOK ) { + astError( AST__INTER, "Error 364\n" ); + } + if( line != 13 && astOK ) { + astError( AST__INTER, "Error 365 (line is %d)\n", line ); + } + } + } else if( i == 1 ) { + if( strcmp( key, "FrameSet" ) && astOK ) { + astError( AST__INTER, "Error 37 (key 1 is '%s')\n", key ); + } else if( astMapLength(km,key) != 2 && astOK ) { + astError( AST__INTER, "Error 371 (%d)\n", astMapLength(km,key) ); + } else if( ( !astMapGetElemP( km, key, 1, &p ) || ( p != fs2 ) ) && astOK ) { + astError( AST__INTER, "Error 372\n" ); + } else { + astCreatedAt( p, &routine, &file, &line ); + if( ( !routine || strcmp( routine, "main" ) ) && astOK ) { + astError( AST__INTER, "Error 373\n" ); + } + if( ( !file || strcmp( file, "testobject.c" ) ) && astOK ) { + astError( AST__INTER, "Error 374\n" ); + } + if( line != 20 && astOK ) { + astError( AST__INTER, "Error 375 (line is %d)\n", line ); + } + } + } else { + if( strcmp( key, "SkyFrame" ) && astOK ) { + astError( AST__INTER, "Error 38 (key 2 is '%s')\n", key ); + } else if( astMapLength(km,key) != 1 && astOK ) { + astError( AST__INTER, "Error 381 (%d)\n", astMapLength(km,key) ); + } + } + } + } + km = astAnnul( km ); + + } else if( astOK ){ + astError( AST__INTER, "Error 4\n" ); + } + + if( astOK ) { + printf(" All Object tests passed\n"); + } else { + printf("Object tests failed\n"); + } +} diff --git a/ast/ast_tester/testplot3d.f b/ast/ast_tester/testplot3d.f new file mode 100644 index 0000000..66a6858 --- /dev/null +++ b/ast/ast_tester/testplot3d.f @@ -0,0 +1,1357 @@ + program testplot3d + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + integer fset, plot3d, status, pgbeg + real gbox(6), lbnd(3), ubnd(3) + double precision bbox(6) + integer readtest + logical ok, pg3d_autocamera + character device*30 + + status = sai__ok + +c call ast_watchmemory( 130836 ) + call ast_begin( status ) + + lbnd( 1 ) = -1.0 + lbnd( 2 ) = -1.0 + lbnd( 3 ) = -1.0 + ubnd( 1 ) = 1.0 + ubnd( 2 ) = 1.0 + ubnd( 3 ) = 1.0 + + if( iargc() .gt. 0 ) then + call getarg( 1, device ) + else + device = '/XSERVE' + end if + ok = ( pgbeg( 0, device, 1, 1 ) .eq. 1 ) + + if( .not. ok ) write(*,*) 'PGPLOT OPEN FIALED' + + call pgask( .false. ) + + call pgpage + call pgwnad( 0.0, 1.0, 0.0, 1.0 ) + + ok = pg3d_autocamera( lbnd, ubnd ) +c + gbox(1) = lbnd(1) + gbox(2) = lbnd(2) + gbox(3) = lbnd(3) + gbox(4) = ubnd(1) + gbox(5) = ubnd(2) + gbox(6) = ubnd(3) + + bbox(1) = -1.0 + bbox(2) = -1.0 + bbox(3) = -1.0 + bbox(4) = 1.0 + bbox(5) = 1.0 + bbox(6) = 1.0 + + plot3d = ast_plot3d( AST__NULL, gbox, bbox, 'minticklen=0', + : status ) + call checkdump( plot3d, 'CheckDump test 1', status ) + call ast_annul( plot3d, status ) + bbox(1) = 0.5 + bbox(2) = 0.5 + bbox(3) = 0.5 + bbox(4) = 155.5 + bbox(5) = 107.5 + bbox(6) = 1640.5 + plot3d = ast_plot3d( readtest( "plot3d-test1.ast", status ), gbox, + : bbox, ' ' , status ) +c call checkdump( plot3d, 'CheckDump test 2', status ) +c call ast_set( plot3d, "System(1)=galactic,system(3)=freq", +c : status ) +c call ast_grid( plot3d, status ) + call explore( plot3d, status ) + call pgend + call ast_end( status ) + call ast_activememory( 'testplot3d' ) + call ast_flushmemory( 1 ) + + if( status .eq. sai__ok ) then + write(*,*) 'All Plot3D tests passed' + else + write(*,*) 'Plot3D tests failed' + end if + + end + + subroutine checkdump( obj, text, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + character text*(*) + integer obj, status, next, end, ch, result, ll, overlap + external mysource, mysink, mysink2 + character buf*400000,buf2*400000 + common /ss1/ buf + common /ss2/ next, end, ll + common /ss3/ buf2 + if( status .ne. sai__ok ) return + call ast_begin( status ) + ch = ast_channel( mysource, mysink, ' ', status ) + ll = 200 + next = 1 + if( ast_write( ch, obj, status ) .ne.1 ) then + write(*,*) text + call stopit( status, 'Cannot write supplied object to '// + : 'channel' ) + end if + next = 1 + result = ast_read( ch, status ) + if( result .eq. ast__null ) then + write(*,*) text + call stopit( status, 'Cannot read object from channel' ) + end if + + ll = 200 + next = 1 + ch = ast_channel( AST_NULL, mysink2, ' ', status ) + if( ast_write( ch, obj, status ) .ne.1 ) then + write(*,*) text + call stopit( status, 'Cannot write copied object to '// + : 'channel' ) + end if + if( buf .ne. buf2 ) then + call ast_Show( obj, status ) + call ast_Show( result, status ) + write(*,*) text + call stopit( status, 'Object has changed' ) + end if + call ast_end( status ) + end + subroutine mysource( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, ll + character buf*400000 + common /ss1/ buf + common /ss2/ next, end, ll + if( status .ne. sai__ok ) return + if( next .ge. end ) then + call ast_putline( buf, -1, status ) + else + call ast_putline( buf( next : ), ll, status ) + endif + next = next + ll + end + subroutine mysink( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, f, l, ll + character buf*400000 + character line*1000 + common /ss1/ buf + common /ss2/ next, end, ll + if( status .ne. sai__ok ) return + line = ' ' + call ast_getline( line, l, status ) + call chr_fandl( line( : l ), f, l ) + buf( next : ) = line( f : l ) + l = l - f + 1 + if( next + ll - 1 .ge. 400000 ) then + write(*,*) + call stopit( status, 'Buffer overflow in mysink!!' ) + else if( l .gt. ll ) then + write(*,*) + write(*,*) line( f : l ) + write(*,*) 'Line length ',l + call stopit( status, 'Line overflow in mysink!!' ) + else + end = next + l + buf( end : next + ll - 1 ) = ' ' + endif + next = next + ll + end + subroutine mysink2( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, f, l, ll + character buf2*400000 + character line*1000 + common /ss3/ buf2 + common /ss2/ next, end, ll + if( status .ne. sai__ok ) return + line = ' ' + call ast_getline( line, l, status ) + call chr_fandl( line( : l ), f, l ) + buf2( next : ) = line( f : l ) + l = l - f + 1 + if( next + ll - 1 .ge. 400000 ) then + write(*,*) + call stopit( status, 'Buffer overflow in mysink2!!' ) + else if( l .gt. ll ) then + write(*,*) + write(*,*) buf2( next : next + l) + write(*,*) 'Line length ',l + call stopit( status, 'Line overflow in mysink2!!' ) + else + end = next + l + buf2( end : next + ll - 1 ) = ' ' + endif + next = next + ll + end + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + end + + integer function readtest( name, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + character name*(*) + integer status, ch + external mysource3 + readtest = AST__NULL + if( status .ne. sai__ok ) return + open( unit=1, file=name, status='old' ) + ch = ast_channel( mysource3, ast_null, ' ', status ) + readtest = ast_read( ch, status ) + call ast_annul( ch, status ) + close(1) + end + + subroutine mysource3( status ) + integer status + character buffer*200 + read( 1, '(A)', end = 99 ) buffer + call ast_putline( buffer, len( buffer ), status ) + return + 99 call ast_putline( buffer, -1, status ) + + end + + + subroutine explore( plot3d, status ) + implicit none + include 'AST_PAR' + include 'SAE_PAR' + + real common_par + integer common_map + logical use_common + double precision common_x, common_y + common /ss4/ common_par,common_x,common_y,common_map,use_common + + real pi + parameter( pi = 3.1415927 ) + integer diag, plot3d, status, iopt, i, iclose + logical more, draw, ok, pg3d_findnearest, lval, pg3d_seteye, + : pg3d_setup + character settings*40, attr*20, corn(8)*3, text*40,just*4 + real xc(8), yc(8), zc(8) + double precision pos(3),x,y + real up(3), eye(3) + integer type, map + integer readtest + data xc /-1, 1, -1, 1, -1, 1, -1, 1 / + data yc /-1, -1, 1, 1, -1, -1, 1, 1 / + data zc /-1, -1, -1, -1, 1, 1, 1, 1 / + data corn/ 'lll', 'ull', 'lul', 'uul', + : 'llu', 'ulu', 'luu', 'uuu' / + if( status .ne. sai__ok ) return + eye( 1 ) = -3 + eye( 2 ) = 4 + eye( 3 ) = 3 + ok = pg3d_seteye( eye ) + up( 1 ) = 0.0 + up( 2 ) = -0.03 + up( 3 ) = 1.0 + ok = pg3d_setup( up ) + diag = 1 + common_x = AST__BAD + common_y = AST__BAD + common_map = AST__NULL + use_common = .false. + + call drawit( diag, plot3d, status ) + more = .true. + do while( more ) + + write(*,*) ' 0 - exit' + write(*,*) ' 1 - move forward' + write(*,*) ' 2 - move backwards' + write(*,*) ' 3 - rotate right' + write(*,*) ' 4 - rotate left' + write(*,*) ' 5 - rotate up' + write(*,*) ' 6 - rotate down' + write(*,*) ' 7 - rotate right continuous' + write(*,*) ' 8 - set attribute values' + write(*,*) ' 9 - get an attribute value' + write(*,*) ' 10 - clear an attribute value' + write(*,*) ' 11 - test an attribute value' + write(*,*) ' 12 - show the plot3d (big!)' + write(*,*) ' 13 - Draw a border' + write(*,*) ' 14 - Draw a marker' + write(*,*) ' 15 - Draw a text string' + write(*,*) ' 16 - Draw az-el diagram' + write(*,*) ' 17 - Draw grid-box diagram' + write(*,*) ' 18 - Vary parameter continuously' + write(*,*) ' 19 - Next figure' + write(*,*) ' 20 - Set Mapping' + write(*,*) ' 21 - Mark mapped position' + write(*,'(A,$)' ) 'Option: ' + read(*,*) iopt + + draw = .true. + if( iopt .eq. 0 ) then + draw = .false. + more = .false. + else if( iopt .eq. 1 ) then + call pg3d_forward( 0.1 ) + else if( iopt .eq. 2 ) then + call pg3d_forward( -0.1 ) + else if( iopt .eq. 3 ) then + call pg3d_rotateeye( 4, 7.0 ) + else if( iopt .eq. 4 ) then + call pg3d_rotateeye( 3, 7.0 ) + else if( iopt .eq. 5 ) then + call pg3d_rotateeye( 1, 7.0 ) + else if( iopt .eq. 6 ) then + call pg3d_rotateeye( 2, 7.0 ) + else if( iopt .eq. 7 ) then + do i = 0, 360, 7 + call pg3d_rotateeye( 4, 7.0 ) + call pgpage + call drawit( diag, plot3d, status ) + call pause + end do + draw = .false. + else if( iopt .eq. 8 ) then + write( *, '(A,$)' ) 'Attribute settings: ' + read( *, '(A)' ) settings + call ast_set( plot3d, settings, status ) + else if( iopt .eq. 9 ) then + write( *, '(A,$)' ) 'Attribute name to get: ' + read( *, '(A)' ) attr + write(*,*) ast_getc( plot3d, attr, status ) + draw = .false. + else if( iopt .eq. 10 ) then + write( *, '(A,$)' ) 'Attribute name to clear: ' + read( *, '(A)' ) attr + call ast_clear( plot3d, attr, status ) + else if( iopt .eq. 11 ) then + write( *, '(A,$)' ) 'Attribute name to test: ' + read( *, '(A)' ) attr + write(*,*) ast_test( plot3d, attr, status ) + draw = .false. + else if( iopt .eq. 12 ) then + call ast_show( plot3d, status ) + draw = .false. + else if( iopt .eq. 13 ) then + lval = ast_border( plot3d, status ) + draw = .false. + else if( iopt .eq. 14 ) then + write(*,'(A,$)') 'Marker X coord: ' + read(*,*) pos(1) + write(*,'(A,$)') 'Marker Y coord: ' + read(*,*) pos(2) + write(*,'(A,$)') 'Marker Z coord: ' + read(*,*) pos(3) + write(*,'(A,$)') 'Marker type: ' + read(*,*) type + call ast_mark( plot3d, 1, 3, 1, pos, type, status ) + draw = .false. + else if( iopt .eq. 15 ) then + write(*,'(A,$)') 'Text X coord: ' + read(*,*) pos(1) + write(*,'(A,$)') 'Text Y coord: ' + read(*,*) pos(2) + write(*,'(A,$)') 'Text Z coord: ' + read(*,*) pos(3) + write(*,'(A,$)') 'Text: ' + read(*,*) text + write(*,'(A,$)') 'Justification: ' + read(*,*) just + write(*,'(A,$)') 'Up X: ' + read(*,*) up(1) + write(*,'(A,$)') 'Up Y: ' + read(*,*) up(2) + write(*,'(A,$)') 'Up Z: ' + read(*,*) up(3) + call ast_text( plot3d, text, pos, up, just, status ) + draw = .false. + else if( iopt .eq. 16 ) then + diag = 2 + else if( iopt .eq. 17 ) then + diag = 1 + else if( iopt .eq. 18 ) then + use_common = .true. + do i = 0, 90, 1 + common_par = pi*i/180.0; + call pgpage + call drawit( diag, plot3d, status ) + call pause + end do + draw = .false. + use_common = .false. + else if( iopt .eq. 19 ) then + diag = diag + 1 + write(*,*) 'Drawing diag ',diag + + else if( iopt .eq. 20 ) then + write(*,'(A,$)') 'Supply a 2-in, 2-out Mapping (outputs '// + : 'are (long,lat)):' + read(*,*) text + common_map = readtest( text, status ) + draw = .false. + + else if( iopt .eq. 21 ) then + write(*,'(A,$)') 'Value for input 1: ' + read(*,*) common_x + write(*,'(A,$)') 'Value for input 2: ' + read(*,*) common_y + + else + draw = .false. + write(*,*) 'Bad option ',iopt + end if + + if( draw ) then + call pgpage +c ok = pg3d_findnearest( 8, xc, yc, zc, iclose ) +c call ast_setc( plot3d, 'RootCorner', corn( iclose + 1 ), +c : status ) + call drawit( diag, plot3d, status ) + end if + + if( status .ne. sai__ok ) call err_flush( status ) + end do + + end + + subroutine pause + implicit none + integer i + double precision a + a = 1.0D0 + do i = 1, 2000000 + a = tan( a ) + end do + end + + subroutine drawit( diag, plot3d, status ) + implicit none + include 'AST_PAR' + include 'SAE_PAR' + integer NP + parameter ( NP = 50 ) + integer w1, w2 + real rd, pi + parameter( w1 = 6, w2 = 3, rd = 1.5, pi = 3.1415927 ) + + real common_par + integer common_map + logical use_common + double precision common_x, common_y + common /ss4/ common_par,common_x,common_y,common_map,use_common + + double precision dlat, dlon, up, north + integer diag, plot3d, status, i, j, azelmap + real x(NP), y(NP), z(NP), axlen, a1, a2, r(3), u(3), n(3), + : ang, k, cen(3), norm(3), start(3), lon, lat, origin(3), + : theta,phi + if( status .ne. sai__ok ) return + + if( diag .eq. 1 ) then + call ast_grid( plot3d, status ) + + else + axlen = 1.8 + a1 = 0.1 + a2 = a1*0.6 + lon = pi*210.0/180.0 + if( use_common ) then + lat = common_par + else + lat = pi*25.0/180.0 + endif + + do while( lat .gt. pi ) + lat = lat - 2*pi + end do + + do while( lat .lt. -pi ) + lat = lat + 2*pi + end do + + if( lat .gt. pi/2 ) then + lat = pi - lat + lon = lon + pi + + else if( lat .lt. -pi/2 ) then + lat = -pi - lat + lon = lon + pi + end if + + do while( lon .gt. 2*pi ) + lon = lon - 2*pi + end do + + do while( lon .lt. 0 ) + lon = lon + 2*pi + end do + + +c+ Fig1 (part a) + if( diag .eq. 2 ) then + call pgslw( w2 ) + cen(1) = 0.0 + cen(2) = 0.0 + cen(3) = 0.0 + call s2c( lon - pi/2, 0.0, 1.0, norm ) + call s2c( lon, 0.0, rd*0.6, start ) + call pgsci( 10 ) + call pgscr( 10, 0.0, 0.0, 1.0 ) + call arc( cen, norm, start, -lat, -rd*0.1 ) + + u(1)=0 + u(2)=0 + u(3)=1 + call s2c( lon, lat/2.2, rd*0.7, r ) + call g3dtext( 'el', r, 'CL', u, norm ) + + norm(1)=0 + norm(2)=0 + norm(3)=-1 + start(1)=rd*0.6 + start(2)=0 + start(3)=0 + call arc( cen, norm, start, lon, rd*0.1 ) + + call s2c( 110.0/180.0*PI, 0.0, rd*0.7, r ) + call g3dtext( 'az', r, 'TC', r, norm ) + + call pgsci( 1 ) + endif + + origin(1) = 0.0 + origin(2) = 0.0 + origin(3) = 0.0 + call axes( origin, axlen, '(north) u', '(east) v', + : '(zenith) w', w1, w2, 'X', 0.0, 0.0, 0.0 ) + +* Quadrant from (0,0,1) to (-1,0,0) + cen(1) = 0.0 + cen(2) = 0.0 + cen(3) = 0.0 + call s2c( (int(2*lon/pi)-1)*pi/2, 0.0, 1.0, norm ) + start(1) = 0.0 + start(2) = 0.0 + start(3) = rd + call pgslw( w2 ) + call arc( cen, norm, start, pi/2, 0.0 ) + +* Quadrant from (0,0,1) to (0,-1,0) + call s2c( int(2*lon/pi)*pi/2, 0.0, 1.0, norm ) + call arc( cen, norm, start, pi/2, 0.0 ) + +* Quadrant from (-1,0,0) to (0,-1,0) + norm(1) = 0.0 + norm(2) = 0.0 + norm(3) = 1.0 + call s2c( (int(2*lon/pi)+1)*pi/2, 0.0, rd, start ) + call arc( cen, norm, start, pi/2, 0.0 ) + +* Dashed red quadrant at az = lon degs + call s2c( lon-pi/2, 0.0, 1.0, norm ) + start(1) = 0.0 + start(2) = 0.0 + start(3) = rd + call pgsci( 10 ) + call pgscr( 10, 1.0, 0.0, 0.0 ) + call pgsls( 2 ) + call pgslw( 2 ) + call arc( cen, norm, start, pi/2, 0.0 ) + +* Dashed red line of latitude at el = lat degs + cen(1) = 0.0 + cen(2) = 0.0 + cen(3) = sin(lat)*rd + norm(1) = 0.0 + norm(2) = 0.0 + norm(3) = 1.0 + call s2c( (int(2*lon/pi)+1)*pi/2, lat, rd, start ) + call arc( cen, norm, start, pi/2, 0.0 ) + +* Dashed red line from centre to az=lon el=0 + x( 1 ) = 0.0 + y( 1 ) = 0.0 + z( 1 ) = 0.0 + x( 2 ) = cos(lon)*rd + y( 2 ) = sin(lon)*rd + z( 2 ) = 0.0 + call g3dline( 2, x, y, z ) + +* Solid red line from centre to az=210 el=45 + x( 1 ) = 0.0 + y( 1 ) = 0.0 + z( 1 ) = 0.0 + call s2c( lon, lat, rd, origin ) + x( 2 ) = origin(1) + y( 2 ) = origin(2) + z( 2 ) = origin(3) + call pgsls( 1 ) + call g3dline( 2, x, y, z ) + +c+ Fig1 - (part b) + if( diag .eq. 2 ) then + call pgscr( 10, 0.0, 0.6, 0.0 ) + call s2c( lon, lat, rd, origin ) + call axes( origin, 0.2*axlen, 'daz', 'del', ' ', w1, w2, + : 'ZYZ', lon, (pi/2 - lat), pi/2 ) + endif + + +c+ Fig2 + if( diag .eq. 3 ) then + call pgscr( 10, 0.6, 0.6, 0.0 ) + call s2c( lon, lat, rd, origin ) + call axes( origin, 0.4*axlen, 'UP', 'N', ' ', w1, w2, + : 'ZYZ', lon, (pi/2 - lat), lat ) + + + call pgscr( 10, 0.0, 0.0, 1.0 ) + call s2c( lon+0.22, lat, rd, start ) + call s2c( lon, lat, rd, cen ) + call s2c( lon, lat, rd, norm ) + call arc( cen, norm, start, -(lat-0.05), -rd*0.02 ) + + call s2c( lon+0.25, lat*1.1, rd, r ) + norm(1) = 0 + norm(2) = 0 + norm(3) = 0 + u(1) = 0 + u(2) = 0 + u(3) = 1.0 + call g3dtext( 'el', r, 'CR', u, norm ) + + endif + + +c+ Fig3 + if( diag .eq. 4 ) then + call pgscr( 10, 0.0, 0.0, 1.0 ) + call s2c( lon, lat, rd, origin ) + do i = 1, 4 + theta = i*5.0*pi/180.0 + cen(1) = cos(theta)*origin(1) + cen(2) = cos(theta)*origin(2) + cen(3) = cos(theta)*origin(3) + call s2c( lon + theta, lat, rd, start ) + call arc( cen, cen, start, 2*pi, 0.05 ) + end do + + + cen(1)=0 + cen(2)=0 + cen(3)=0 + + call s2c( pi, pi/2-pi/2, rd, start ) + call s2c( pi+pi/2, 0.0, 1.0, norm ) + + call rotvec( 'ZYZ', lon, pi/2-lat, lat, norm ) + call rotvec( 'ZYZ', lon, pi/2-lat, lat, start ) + call arc( cen, norm, start, pi/2, 0.0 ) + + + call pgscr( 10, 0.0, 1.0, 1.0 ) + call s2c( lon, lat, rd, origin ) + call axes( origin, 0.2*axlen, 'y', 'x', ' ', w1, w2, + : 'ZYZ', lon, (pi/2 - lat), lat ) + endif + + +c+ Fig4 + if( diag .eq. 5 ) then + call pgscr( 10, 0.0, 0.0, 1.0 ) + call s2c( lon, lat, rd, origin ) + do i = 1, 4 + theta = i*5.0*pi/180.0 + cen(1) = cos(theta)*origin(1) + cen(2) = cos(theta)*origin(2) + cen(3) = cos(theta)*origin(3) + call s2c( lon + theta, lat, rd, start ) + call arc( cen, cen, start, 2*pi, 0.05 ) + end do + + + cen(1)=0 + cen(2)=0 + cen(3)=0 + + call s2c( pi, pi/2-pi/2, rd, start ) + call s2c( pi+pi/2, 0.0, 1.0, norm ) + + call rotvec( 'ZYZ', lon, pi/2-lat, lat, norm ) + call rotvec( 'ZYZ', lon, pi/2-lat, lat, start ) + call arc( cen, norm, start, pi/2, 0.0 ) + + + call pgscr( 10, 0.0, 1.0, 1.0 ) + call s2c( lon, lat, 0.0, origin ) + call axes( origin, rd, 'b', 'a', 'c', w1, w2, + : 'ZYZ', lon, (pi/2 - lat), pi/2 + lat ) + endif + +c+ Fig5 + if( diag .eq. 6 ) then + call pgscr( 10, 0.0, 1.0, 1.0 ) + call s2c( lon, lat, 0.0, origin ) + call axes( origin, rd, 'b', 'a', 'c', w1, w2, + : 'ZYZ', lon, (pi/2 - lat), pi/2 + lat ) + + + call pgscr( 10, 0.0, 0.0, 1.0 ) + call axes( origin, rd, 'b''', 'a''', 'c''', w1, w2, + : 'ZYZ', lon, (pi/2 - lat), pi/2 ) + + call pgsci( 1 ) + call s2c( lon, lat, 1.0, norm ) + start(1) = 0.0 + start(2) = 0.0 + start(3) = rd*0.5 + call s2c( lon, lat, 0.0, cen ) + call arc( cen, norm, start, -lat, 0.0 ) + + call pgsci( 1 ) + call s2c( 0.5*( lon - pi/2), lat/2+0.2, rd*0.55, r ) + norm(1) = 0 + norm(2) = 0 + norm(3) = 0 + u(1) = 0 + u(2) = 0 + u(3) = 1.0 + call g3dtext( 'el', r, 'CR', u, norm ) + endif + +c+ Fig6 + if( diag .eq. 7 ) then + call s2c( lon, lat, 0.0, origin ) + + call pgscr( 10, 0.0, 0.0, 1.0 ) + call axes( origin, rd, 'b''', 'a''', 'c''', w1, w2, + : 'ZYZ', lon, (pi/2 - lat), pi ) + + call pgscr( 10, 0.0, 1.0, 0.0 ) + call axes( origin, rd, 'b''''', 'a''''', 'c''''', w1, w2, + : 'ZYZ', lon, 0.0, pi ) + + endif + + + + + + if( diag .eq. 8 ) then + call pgscr( 10, 0.0, 1.0, 1.0 ) + call s2c( lon, lat, 0.0, origin ) + call axes( origin, rd, 'a', 'b', 'c', w1, w2, + : 'ZYZ', 0.0, 0.0, 0.0 ) + end if + + if( diag .eq. 9 ) then + call pgscr( 10, 0.0, 1.0, 1.0 ) + call s2c( lon, lat, 0.0, origin ) + call axes( origin, rd, 'a', 'b', 'c', w1, w2, + : 'ZYZ', lon, 0.0, 0.0 ) + end if + + if( diag .eq. 10 ) then + call pgscr( 10, 0.0, 1.0, 1.0 ) + call s2c( lon, lat, 0.0, origin ) + call axes( origin, rd, 'a', 'b', 'c', w1, w2, + : 'ZYZ', lon, pi/2-lat, 0.0 ) + end if + + if( diag .eq. 11 ) then + call pgscr( 10, 0.0, 1.0, 1.0 ) + call s2c( lon, lat, 0.0, origin ) + call axes( origin, rd, 'a', 'b', 'c', w1, w2, + : 'ZYZ', lon, pi/2-lat, lat ) + end if + + + + + + + + + + + +c if( common_map .ne. AST__NULL .and. +c ; common_x .ne. AST__BAD .and. +c : common_y .ne. AST__BAD ) then +c call ast_tran2( common_map, 1, common_x, common_y, .true., +c : dlon, dlat, status ) +c call s2c( real(dlon), real(dlat), rd, cen ) +c call pgsci( 10 ) +c call pgscr( 10, 1.0, 0.0, 1.0 ) +c call g3dmark( cen, 2 ) +c end if + + call pgsci( 1 ) + call pgslw( 4 ) + call pgsls( 1 ) + + end if + + end + + subroutine arc( cen, normal, start, ang, arrow ) + implicit none + real cen(3), normal(3), start(3), ang, arrow, ut(3), ur(3) + integer np + parameter( NP = 50 ) + integer i + real v1(3), v2( 3 ), v1l, v2l, x(NP), y(NP), z(NP), a, ca, sa, + : t1(3), t2(3), n(3) + call copy( normal, n ) + call norm( n ) + call sub( start, cen, v1 ) + call cross( n, v1, t1 ) + call cross( t1, n, v1 ) + call mod( v1, v1l ) + call cross( v1, n, v2 ) + call mod( v2, v2l ) + do i = 1, 3 + v1( i ) = v1(i)/v1l + v2( i ) = v2(i)/v2l + end do + + do i = 1, NP + a = ang*( i - 1 )/( NP - 1 ) + ca = cos(a) + sa = sin(a) + x(i) = v1l*( v1(1)*ca + v2(1)*sa ) + cen(1) + y(i) = v1l*( v1(2)*ca + v2(2)*sa ) + cen(2) + z(i) = v1l*( v1(3)*ca + v2(3)*sa ) + cen(3) + end do + call g3dline( NP, x, y, z ) + if( arrow .ne. 0.0 ) then + ca = cos(ang) + sa = sin(ang) + do i = 1, 3 + ut(i) = sa*v1(i)-ca*v2(i) + ur(i) = ca*v1(i)+sa*v2(i) + end do + x(1) = x(NP) + arrow*( ut(1) - 0.5*ur(1) ) + y(1) = y(NP) + arrow*( ut(2) - 0.5*ur(2) ) + z(1) = z(NP) + arrow*( ut(3) - 0.5*ur(3) ) + x(2) = x(NP) + y(2) = y(NP) + z(2) = z(NP) + x(3) = x(NP) + arrow*( ut(1) + 0.5*ur(1) ) + y(3) = y(NP) + arrow*( ut(2) + 0.5*ur(2) ) + z(3) = z(NP) + arrow*( ut(3) + 0.5*ur(3) ) + call g3dline( 3, x, y, z ) + end if + end + subroutine s2c( lon, lat, r, p ) + implicit none + real lon, lat, r, p(3), k + p( 3 ) = r*sin(lat) + k = r*cos(lat) + p( 1 ) = k*cos(lon) + p( 2 ) = k*sin(lon) + end + + subroutine axes( origin, axlen, tx, ty, tz, w1, w2, order, phi, + : theta, psi ) + implicit none + character order*(*),tx*(*), ty*(*), tz*(*) + real phi, theta, psi + double precision rmat(3,3),va,vb + real axlen, a1, a2, mat(3,3),x(10),y(10),z(10),r(3),u(3),n(3), + : origin(3), sn + integer w1, w2 + a1 = 0.05 + a2 = a1*0.6 + sn = 0.0 + call deuler( order, dble(phi), dble(theta), dble(psi), rmat ) + mat(1,1) = rmat(1,1) + mat(1,2) = rmat(1,2) + mat(1,3) = rmat(1,3) + mat(2,1) = rmat(2,1) + mat(2,2) = rmat(2,2) + mat(2,3) = rmat(2,3) + mat(3,1) = rmat(3,1) + mat(3,2) = rmat(3,2) + mat(3,3) = rmat(3,3) +cc* X axis with arrow and label + if( tx .ne. ' ' ) then + x(1) = axlen + y(1) = 0.0 + z(1) = 0.0 + x(2) = -axlen + y(2) = 0.0 + z(2) = 0.0 + call mxv( mat, 2, x, y, z, origin ) + call pgslw( w1 ) + call g3dline( 2, x, y, z ) + x(1) = axlen - a1 + y(1) = -a2 + z(1) = 0.0 + x(2) = axlen + y(2) = 0.0 + z(2) = 0.0 + x(3) = axlen - a1 + y(3) = a2 + z(3) = 0.0 + call mxv( mat, 3, x, y, z, origin ) + call g3dline( 3, x, y, z ) + r(1) = axlen + a1 + r(2) = 0.0 + r(3) = a2 + u(1) = 0.0 + u(2) = 0.0 + u(3) = 1.0 + n(1) = 0.0 + n(2) = sn + n(3) = 0.0 + + call pgslw( w2 ) + call mxv2( mat, r, .true., origin ) + call g3dtext( tx, r, 'BR', u, n ) + call pgslw( w1 ) + end if +c* Y axis with arrow and label + if( ty .ne. ' ' ) then + x(1) = 0.0 + y(1) = -axlen + z(1) = 0.0 + x(2) = 0.0 + y(2) = axlen + z(2) = 0.0 + call mxv( mat, 2, x, y, z, origin ) + call g3dline( 2, x, y, z ) + x(1) = -a2 + y(1) = axlen - a1 + z(1) = 0.0 + x(2) = 0.0 + y(2) = axlen + z(2) = 0.0 + x(3) = a2 + y(3) = axlen - a1 + z(3) = 0.0 + call mxv( mat, 3, x, y, z, origin ) + call g3dline( 3, x, y, z ) + r(1) = 0.0 + r(2) = axlen + a1 + r(3) = a2 + u(1) = 0.0 + u(2) = 0.0 + u(3) = 1.0 + n(1) = sn + n(2) = 0.0 + n(3) = 0.0 + + call pgslw( w2 ) + call mxv2( mat, r, .true., origin ) + call g3dtext( ty, r, 'BR', u, n ) + call pgslw( w1 ) + end if +c* Z axis with arrow and label + if( tz .ne. ' ' ) then + x(1) = 0.0 + y(1) = 0.0 + z(1) = axlen + x(2) = 0.0 + y(2) = 0.0 + z(2) = 0.0 + call mxv( mat, 2, x, y, z, origin ) + call g3dline( 2, x, y, z ) + x(1) = -a2 + y(1) = 0.0 + z(1) = axlen - a1 + x(2) = 0.0 + y(2) = 0.0 + z(2) = axlen + x(3) = a2 + y(3) = 0.0 + z(3) = axlen - a1 + call mxv( mat, 3, x, y, z, origin ) + call g3dline( 3, x, y, z ) + r(1) = 0.0 + r(2) = 0.0 + r(3) = axlen + a1 + u(1) = 0.0 + u(2) = 0.0 + u(3) = 1.0 + n(1) = 0.0 + n(2) = 0.0 + n(3) = 0.0 + + call pgslw( w2 ) + call mxv2( mat, r, .true., origin ) + call g3dtext( tz, r, 'CR', u, n ) + call pgslw( w1 ) + end if + end + + subroutine mxv( mat, n, x, y, z, origin ) + implicit none + integer n, i + real x(n), y(n), z(n), mat(3,3), va(3),vb(3),origin(3) + do i = 1, n + va(1)= x(i) + va(2)= y(i) + va(3)= z(i) + call sla_mxv( mat, va, vb ) + x(i) = vb(1) + origin(1) + y(i) = vb(2) + origin(2) + z(i) = vb(3) + origin(3) + end do + end + + subroutine mxv2( mat, r, move, origin ) + implicit none + real r(3), mat(3,3), vb(3), origin(3) + logical move + call sla_mxv( mat, r, vb ) + if( move ) then + r(1) = vb(1) + origin(1) + r(2) = vb(2) + origin(2) + r(3) = vb(3) + origin(3) + else + r(1) = vb(1) + r(2) = vb(2) + r(3) = vb(3) + end if + end + + subroutine deuler( order, phi, theta, psi, rmat ) + implicit none + character order*(*) + double precision phi, theta, psi, rmat(3,3), t(3), smat(3,3) + double precision ang, v(3), ux(3), uy(3), uz(3), tmat(3,3), + : axvec(3) + integer n, i, j + n = len( order ) + do i = 1, 3 + ux(i) = 0.0D0 + uy(i) = 0.0D0 + uz(i) = 0.0D0 + do j = 1, 3 + rmat(i,j) = 0.0 + end do + rmat(i,i) = 1.0 + end do + ux(1) = 1.0D0 + uy(2) = 1.0D0 + uz(3) = 1.0D0 + do i = 1, 3 + if( i .le. n ) then + if( i .eq. 1 ) then + ang = phi + else if( i .eq. 2 ) then + ang = theta + else + ang = psi + end if + if( order( i : i ) .eq. 'X' ) then + do j = 1, 3 + axvec(j) = -ux(j)*ang + end do + else if( order( i : i ) .eq. 'Y' ) then + do j = 1, 3 + axvec(j) = -uy(j)*ang + end do + else if( order( i : i ) .eq. 'Z' ) then + do j = 1, 3 + axvec(j) = -uz(j)*ang + end do + else + write(*,*) 'Bad axis label (',order(i:i),') in deuler!!!' + end if + call sla_dav2m( axvec, tmat ) + do j = 1, 3 + smat(1,j) = rmat(1,j) + smat(2,j) = rmat(2,j) + smat(3,j) = rmat(3,j) + end do + call sla_dmxm( tmat, smat, rmat ) + call sla_dmxv( tmat, ux, v ) + ux(1) = v(1) + ux(2) = v(2) + ux(3) = v(3) + call sla_dmxv( tmat, uy, v ) + uy(1) = v(1) + uy(2) = v(2) + uy(3) = v(3) + call sla_dmxv( tmat, uz, v ) + uz(1) = v(1) + uz(2) = v(2) + uz(3) = v(3) + end if + end do + end + + subroutine rotvec( order, phi, theta, psi, v ) + implicit none + character order*(*) + real phi, theta, psi,v(3),vt(3) + double precision rmat(3,3) + real mat(3,3) + call deuler( order, dble(phi), dble(theta), dble(psi), rmat ) + mat(1,1) = rmat(1,1) + mat(1,2) = rmat(1,2) + mat(1,3) = rmat(1,3) + mat(2,1) = rmat(2,1) + mat(2,2) = rmat(2,2) + mat(2,3) = rmat(2,3) + mat(3,1) = rmat(3,1) + mat(3,2) = rmat(3,2) + mat(3,3) = rmat(3,3) + call sla_mxv( mat, v, vt ) + v(1) = vt(1) + v(2) = vt(2) + v(3) = vt(3) + end + + subroutine cross( a, b, c ) + implicit none + real a(3), b(3), c(3) + c(1) = a(2)*b(3) - a(3)*b(2) + c(2) = - a(1)*b(3) + a(3)*b(1) + c(3) = a(1)*b(2) - a(2)*b(1) + end + + subroutine sub( a, b, c ) + implicit none + real a(3), b(3), c(3) + c(1) = a(1) - b(1) + c(2) = a(2) - b(2) + c(3) = a(3) - b(3) + end + + subroutine add( a, b, c ) + implicit none + real a(3), b(3), c(3) + c(1) = a(1) + b(1) + c(2) = a(2) + b(2) + c(3) = a(3) + b(3) + end + + subroutine dot( a, b, c ) + implicit none + real a(3), b(3), c + c = a(1)*b(1) + a(2)*b(2) + a(3)*b(3) + end + + subroutine mod( a, c ) + implicit none + real a(3), c + c = sqrt( a(1)*a(1) + a(2)*a(2) + a(3)*a(3) ) + end + + subroutine copy( a, b ) + implicit none + real a(3), b(3) + b(1) = a(1) + b(2) = a(2) + b(3) = a(3) + end + + subroutine norm( a ) + implicit none + real a(3), b + call mod( a, b ) + if( b .ne. 0.0 ) then + a(1) = a(1)/b + a(2) = a(2)/b + a(3) = a(3)/b + end if + end + + subroutine g3dtext( t, r, j, u, n ) + implicit none + character*(*) t, j + real r(3), u(3), n(3), r2(3),u2(3),n2(3) + integer junk, ast_g3dtext + + call copy( r, r2 ) + call copy( u, u2 ) + call copy( n, n2 ) + r2(2) = -r2(2) + u2(2) = -u2(2) + n2(2) = -n2(2) + + junk = ast_g3dtext( t, r2, j, u2, n2 ) + end + + subroutine g3dline( n, x, y, z ) + implicit none + integer i, n + logical junk, ast_g3dline + real x(n), y(n), z(n) + + do i = 1, n + y(i)=-y(i) + end do + + junk = ast_g3dline( n, x, y, z ) + + do i = 1, n + y(i)=-y(i) + end do + + end + + subroutine g3dmark( pos, type ) + implicit none + real pos(3) + integer type + logical junk, ast_g3dmark + + pos(2) = -pos(2) + junk = ast_g3dmark( 1, pos(1), pos(2), pos(3), type, pos ) + pos(2) = -pos(2) + + end + + + + + + subroutine maketanmap( new, lon, lat, rot, azelmap, status ) + implicit none + + include 'SAE_PAR' + include 'AST_PAR' + + logical new + double precision lon, lat, rot + integer azelmap, status + + double precision mmt( 2 ), mat(9), mat1(9), mat2(3) + integer tanmap, tmap, sphmap, wcsmap, m1, m2, m3, c0, c1, matmap1, + : matmap2 + double precision pi, piby2 + + if( status .ne. sai__ok ) return + + pi = 3.1415927D0 + piby2 = pi/2.0 + + c0 = ast_SphMap( 'UnitRadius=1', status ) + wcsmap = ast_WcsMap( 2, AST__TAN, 1, 2, ' ', status ) + call ast_Invert( wcsmap, status ) + call ast_Invert( c0, status ) + c1 = ast_CmpMap( wcsmap, c0, .true., ' ', status ) + call ast_Invert( c0, status ) + + if( new ) then + mmt( 1 ) = -1.0 + mmt( 2 ) = -1.0 + tmap = ast_MatrixMap( 2, 2, 1, mmt, ' ', status ) + +* Note, sla_deuler groups columns in the returned matrix, but slaDeuler +* groups rows. AST always expects rows to be grouped, so transpose the +* matrices returned by sla_deuler. + call sla_Deuler( 'Z', -rot, 0.0D0, 0.0D0, mat1 ) + call trans( mat1 ) + m1 = ast_MatrixMap( 3, 3, 0, mat1, ' ', status ) + + call sla_Deuler( 'Y', (PIBY2-lat), 0.0D0, 0.0D0, mat1 ) + call trans( mat1 ) + m2 = ast_MatrixMap( 3, 3, 0, mat1, ' ', status ) + + call sla_Deuler( 'Z', (lon-PI), 0.0D0, 0.0D0, mat1 ) + call trans( mat1 ) + m3 = ast_MatrixMap( 3, 3, 0, mat1, ' ', status ) + + matmap1 = ast_CmpMap( m1, ast_CmpMap( m2, m3, .true., ' ', + : status ), + : .TRUE., ' ', status ) + + mat2( 1 ) = 1.0 + mat2( 2 ) = -1.0 + mat2( 3 ) = 1.0 + matmap2 = ast_MatrixMap( 3, 3, 1, mat2, ' ', status ) + + m1 = ast_CmpMap( c1, matmap1, .true., ' ', status ) + m2 = ast_CmpMap( m1, matmap2, .true., ' ', status ) + tanmap = ast_CmpMap( m2, c0, .true., ' ', status ) + azelmap = ast_CmpMap( tmap, tanmap, .true., ' ', status ) + + else + +* Note, sla_deuler groups columns in the returned matrix, but slaDeuler +* groups rows. AST always expects rows to be grouped, so transpose the +* matrices returned by sla_deuler. + call sla_Deuler( 'Z', rot, 0.0D0, 0.0D0, mat1 ) + call trans( mat1 ) + m1 = ast_MatrixMap( 3, 3, 0, mat1, ' ', status ) + + call sla_Deuler( 'Y', -(PIBY2-lat), 0.0D0, 0.0D0, mat1 ) + call trans( mat1 ) + m2 = ast_MatrixMap( 3, 3, 0, mat1, ' ', status ) + + call sla_Deuler( 'Z', -lon, 0.0D0, 0.0D0, mat1 ) + call trans( mat1 ) + m3 = ast_MatrixMap( 3, 3, 0, mat1, ' ', status ) + + + matmap1 = ast_CmpMap( m1, ast_CmpMap( m2, m3, .true., ' ', + : status ), + : .TRUE., ' ', status ) + + m1 = ast_CmpMap( c1, matmap1, .true., ' ', status ) + + + + + + + mmt( 1 ) = -1.0 + mmt( 2 ) = 1.0 + tmap = ast_MatrixMap( 2, 2, 1, mmt, ' ', status ) + m2 = ast_CmpMap( tmap, m1, .true., ' ', status ) + + + + + + + azelmap = ast_CmpMap( m2, c0, .true., ' ', status ) + + end if + + end + + subroutine trans( mat ) + implicit none + double precision t, mat(9) + + t = mat(8) + mat(8) = mat(6) + mat(6) = t + + t = mat(3) + mat(3) = mat(7) + mat(7) = t + + t = mat(2) + mat(2) = mat(4) + mat(4) = t + + end diff --git a/ast/ast_tester/testpolymap.f b/ast/ast_tester/testpolymap.f new file mode 100644 index 0000000..1251894 --- /dev/null +++ b/ast/ast_tester/testpolymap.f @@ -0,0 +1,319 @@ + program testpolymap + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'PRM_PAR' + + integer status, pm, pm2, i, maxord, nco + double precision coeff( 16 ), lbnd( 2 ), ubnd( 2 ), + : xin(3), yin(3), xout(3), yout(3), errlim, + : xin2(3), yin2(3), coeff_1d(6), acc, + : coeff2( 24 ), coeff3( 6*4 ), err, maxacc, + : cofs( 20 ) + + data coeff / 1.0, 1.0, 0.0, 0.0, + : 2.0, 1.0, 1.0, 0.0, + : 1.0, 2.0, 0.0, 0.0, + : 3.0, 2.0, 0.0, 1.0 / + + data coeff2 / 1.0, 1.0, 0.0, 0.0, + : 2.0, 1.0, 1.0, 0.0, + : 1.0, 1.0, 0.0, 1.0, + : 1.0, 2.0, 0.0, 0.0, + : 1.0, 2.0, 1.0, 0.0, + : 2.0, 2.0, 0.0, 1.0 / + +c data coeff3 / -0.1, 1.0, 0.0, 0.0, +c : 0.99, 1.0, 1.0, 0.0, +c : 1.0E-4, 1.0, 1.0, 1.0, +c : -1.0E-9, 1.0, 2.0, 1.0, +c : -0.1, 2.0, 0.0, 0.0, +c : 0.99, 2.0, 0.0, 1.0, +c : 1.0E-4, 2.0, 1.0, 1.0, +c : -1.0E-9, 2.0, 1.0, 2.0 / + + data coeff3 / -0.1, 1.0, 0.0, 0.0, + : 0.99, 1.0, 1.0, 0.0, + : 1.0E-4, 1.0, 1.0, 1.0, + : -0.1, 2.0, 0.0, 0.0, + : 0.99, 2.0, 0.0, 1.0, + : 1.0E-4, 2.0, 1.0, 1.0 / + + + data coeff_1d / 1.0, 1.0, 0.0, + : 2.0, 1.0, 1.0 / + + data lbnd / -10.0D2, -10.0D2 / + data ubnd / 10.0D2, 10.0D2 / + + + + status = sai__ok + call ast_begin( status ) + +c call ast_watchmemory( 131 ) + + acc = 1.0D-7 + errlim = 1000*acc + maxacc = 1.0D-3 + maxord = 10 + + pm = ast_polymap( 2, 2, 4, coeff, 0, coeff, ' ', status ) + + call ast_polycoeffs( pm, .true., 0, 0.0D0, nco, status ) + if( nco .ne. 4 ) then + call stopit( -1, status ) + endif + + call ast_polycoeffs( pm, .false., 0, 0.0D0, nco, status ) + if( nco .ne. 0 ) then + call stopit( -2, status ) + endif + + call ast_polycoeffs( pm, .true., 20, cofs, nco, status ) + if( nco .ne. 4 ) then + call stopit( -3, status ) + else + do i = 1, 16 + if( cofs( i ) .ne. coeff( i ) ) then + call stopit( -4, status ) + end if + end do + endif + + pm2 = ast_polytran( pm, .FALSE., acc, maxacc, maxord, lbnd, + : ubnd, status ) + + xin( 1 ) = 1.0d0 + xin( 2 ) = 100.0d0 + xin( 3 ) = -50.0d0 + yin( 1 ) = 1.0d0 + yin( 2 ) = 100.0d0 + yin( 3 ) = -50.0d0 + + call ast_tran2( pm2, 3, xin, yin, .true., xout, yout, + : status ) + call ast_tran2( pm2, 3, xout, yout, .false., xin2, yin2, + : status ) + + do i = 1, 3 + if( abs( xin( i ) - xin2( i ) ) .gt. errlim ) then + call stopit( 1, status ) + endif + if( abs( yin( i ) - yin2( i ) ) .gt. errlim ) then + call stopit( 2, status ) + endif + end do + + + + call ast_setl( pm2, 'IterInverse', .TRUE., status ) + call ast_tran2( pm2, 3, xout, yout, .false., xin2, yin2, + : status ) + do i = 1, 3 + if( abs( xin( i ) - xin2( i ) ) .gt. errlim ) then + call stopit( 1001, status ) + endif + if( abs( yin( i ) - yin2( i ) ) .gt. errlim ) then + call stopit( 1002, status ) + endif + end do + + + + + + pm = ast_polymap( 1, 1, 2, coeff_1d, 0, coeff_1d, ' ', status ) + pm2 = ast_polytran( pm, .FALSE., acc, maxacc, maxord, lbnd, + : ubnd, status ) + + xin( 1 ) = 1.0d0 + xin( 2 ) = 100.0d0 + xin( 3 ) = -50.0d0 + + call ast_tran1( pm2, 3, xin, .true., xout, status ) + call ast_tran1( pm2, 3, xout, .false., xin2, status ) + + do i = 1, 3 + if( abs( xin( i ) - xin2( i ) ) .gt. errlim ) then + call stopit( 3, status ) + endif + end do + + call ast_setl( pm2, 'IterInverse', .TRUE., status ) + call ast_tran1( pm2, 3, xout, .false., xin2, status ) + + do i = 1, 3 + if( abs( xin( i ) - xin2( i ) ) .gt. errlim ) then + call stopit( 3001, status ) + endif + end do + + + + + pm = ast_polymap( 2, 2, 6, coeff2, 0, coeff2, ' ', status ) + pm2 = ast_polytran( pm, .FALSE., acc, maxacc, maxord, lbnd, + : ubnd, status ) + + xin( 1 ) = 1.0d0 + xin( 2 ) = 100.0d0 + xin( 3 ) = -50.0d0 + yin( 1 ) = 1.0d0 + yin( 2 ) = 100.0d0 + yin( 3 ) = -50.0d0 + + call ast_tran2( pm2, 3, xin, yin, .true., xout, yout, + : status ) + call ast_tran2( pm2, 3, xout, yout, .false., xin2, yin2, + : status ) + + do i = 1, 3 + if( abs( xin( i ) - xin2( i ) ) .gt. errlim ) then + call stopit( 4, status ) + endif + if( abs( yin( i ) - yin2( i ) ) .gt. errlim ) then + call stopit( 5, status ) + endif + end do + + call ast_setl( pm2, 'IterInverse', .TRUE., status ) + call ast_tran2( pm2, 3, xout, yout, .false., xin2, yin2, + : status ) + + do i = 1, 3 + if( abs( xin( i ) - xin2( i ) ) .gt. errlim ) then + call stopit( 4001, status ) + endif + if( abs( yin( i ) - yin2( i ) ) .gt. errlim ) then + call stopit( 5001, status ) + endif + end do + + + + + + + + pm = ast_polymap( 2, 2, 6, coeff3, 0, coeff3, ' ', status ) + pm2 = ast_polytran( pm, .FALSE., acc, maxacc, maxord, lbnd, + : ubnd, status ) + + xin( 1 ) = 1.0d0 + xin( 2 ) = 100.0d0 + xin( 3 ) = -50.0d0 + yin( 1 ) = 1.0d0 + yin( 2 ) = 100.0d0 + yin( 3 ) = -50.0d0 + + call ast_tran2( pm2, 3, xin, yin, .true., xout, yout, + : status ) + call ast_tran2( pm2, 3, xout, yout, .false., xin2, yin2, + : status ) + + do i = 1, 3 + if( abs( xin( i ) - xin2( i ) ) .gt. errlim ) then + write(*,*) i, xin( i ), xin2( i ), errlim + call stopit( 6, status ) + endif + if( abs( yin( i ) - yin2( i ) ) .gt. errlim ) then + call stopit( 7, status ) + endif + end do + + + call ast_setl( pm2, 'IterInverse', .TRUE., status ) + call ast_tran2( pm2, 3, xout, yout, .false., xin2, yin2, + : status ) + + do i = 1, 3 + if( abs( xin( i ) - xin2( i ) ) .gt. errlim ) then + write(*,*) i, xin( i ), xin2( i ), errlim + call stopit( 6001, status ) + endif + if( abs( yin( i ) - yin2( i ) ) .gt. errlim ) then + call stopit( 7001, status ) + endif + end do + + + + if( .not. ast_getl( pm, 'TranForward', status ) ) then + call stopit( 8001, status ) + else if( .not. ast_getl( pm, 'IterInverse', status ) ) then + call stopit( 8002, status ) + else if( .not. ast_getl( pm, 'TranInverse', status ) ) then + call stopit( 8003, status ) + endif + + call ast_setl( pm, 'IterInverse', .FALSE., status ) + + if( .not. ast_getl( pm, 'TranForward', status ) ) then + call stopit( 8004, status ) + else if( ast_getl( pm, 'IterInverse', status ) ) then + call stopit( 8005, status ) + else if( ast_getl( pm, 'TranInverse', status ) ) then + call stopit( 8006, status ) + endif + + call ast_invert( pm, status ) + + if( ast_getl( pm, 'TranForward', status ) ) then + call stopit( 8007, status ) + else if( ast_getl( pm, 'IterInverse', status ) ) then + call stopit( 8008, status ) + else if( .not. ast_getl( pm, 'TranInverse', status ) ) then + call stopit( 8009, status ) + endif + + call ast_setl( pm, 'IterInverse', .TRUE., status ) + + if( .not. ast_getl( pm, 'TranForward', status ) ) then + call stopit( 8010, status ) + else if( .not. ast_getl( pm, 'IterInverse', status ) ) then + call stopit( 8011, status ) + else if( .not. ast_getl( pm, 'TranInverse', status ) ) then + call stopit( 8012, status ) + endif + + call ast_invert( pm, status ) + + if( .not. ast_getl( pm, 'TranForward', status ) ) then + call stopit( 8013, status ) + else if( .not. ast_getl( pm, 'IterInverse', status ) ) then + call stopit( 8014, status ) + else if( .not. ast_getl( pm, 'TranInverse', status ) ) then + call stopit( 8015, status ) + endif + + + + + + + + + + call ast_end( status ) + call ast_activememory( 'testpolymap' ); + call ast_flushmemory( 1 ) + + if( status .eq. sai__ok ) then + write(*,*) 'All PolyMap tests passed' + else + write(*,*) 'PolyMap tests failed' + end if + + end + + + subroutine stopit( i, status ) + implicit none + include 'SAE_PAR' + integer i, status + if( status .eq. sai__ok ) then + write( *,* ) 'Error ',i + status = sai__error + end if + end diff --git a/ast/ast_tester/testrate.f b/ast/ast_tester/testrate.f new file mode 100644 index 0000000..4803294 --- /dev/null +++ b/ast/ast_tester/testrate.f @@ -0,0 +1,344 @@ + program testrate + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'PRM_PAR' + + integer status, m, outp(4), inp(4), c1, c2, c3, c4 + double precision at(4), r, mat(4), b1(2), b2(2), a1(2), + : a2(4) + + status = sai__ok + + at(1) = 10.0D0 + at(2) = 1.2D6 + +* UnitMap + m = ast_unitmap( 2, ' ', status ) + + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 1.0D0 ) call stopit( 1, r, status ) + r = ast_rate( m, at, 2, 1, status ) + if( r .ne. 0.0D0 ) call stopit( 2, r, status ) + + call ast_invert( m, status ) + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 1.0D0 ) call stopit( 202, r, status ) + +* ZoomMap + m = ast_zoommap( 2, 2.0D0, ' ', status ) + + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 2.0D0 ) call stopit( 3, r, status ) + r = ast_rate( m, at, 2, 1, status ) + if( r .ne. 0.0D0 ) call stopit( 4, r, status ) + + call ast_invert( m, status ) + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 0.5D0 ) call stopit( 402, r, status ) + +* MatrixMap + m = ast_matrixmap( 2, 2, 2, mat, ' ', status ) + + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 1.0D0 ) call stopit( 5, r, status ) + r = ast_rate( m, at, 2, 1, status ) + if( r .ne. 0.0D0 ) call stopit( 6, r, status ) + + call ast_invert( m, status ) + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 1.0D0 ) call stopit( 602, r, status ) + r = ast_rate( m, at, 1, 2, status ) + if( r .ne. 0.0D0 ) call stopit( 603, r, status ) + + mat(1)= -2.0D0 + mat(2)= 1.5D0 + m = ast_matrixmap( 2, 2, 1, mat, ' ', status ) + + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. -2.0D0 ) call stopit( 7, r, status ) + r = ast_rate( m, at, 2, 2, status ) + if( r .ne. 1.5D0 ) call stopit( 8, r, status ) + r = ast_rate( m, at, 1, 2, status ) + if( r .ne. 0.0D0 ) call stopit( 9, r, status ) + r = ast_rate( m, at, 2, 1, status ) + if( r .ne. 0.0D0 ) call stopit( 10, r, status ) + + call ast_invert( m, status ) + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. -0.5D0 ) call stopit( 1002, r, status ) + + mat(1)= 1.2D0 + mat(2)= 1.6D0 + mat(3)= -1.6D0 + mat(4)= 2.2D0 + m = ast_matrixmap( 2, 2, 0, mat, ' ', status ) + + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 1.2D0 ) call stopit( 11, r, status ) + r = ast_rate( m, at, 2, 2, status ) + if( r .ne. 2.2D0 ) call stopit( 12, r, status ) + r = ast_rate( m, at, 1, 2, status ) + if( r .ne. 1.6D0 ) call stopit( 13, r, status ) + r = ast_rate( m, at, 2, 1, status ) + if( r .ne. -1.6D0 ) call stopit( 14, r, status ) + + call ast_invert( m, status ) + + r = ast_rate( m, at, 1, 1, status ) + if( abs( r - 0.423076923 ) .gt. 1.0E-6 ) call stopit( 15, r, + : status ) + + r = ast_rate( m, at, 2, 2, status ) + if( abs( r - 0.230769231 ) .gt. 1.0E-6 ) call stopit( 16, r, + : status ) + + r = ast_rate( m, at, 1, 2, status ) + if( abs( r + 0.307692308 ) .gt. 1.0E-6 ) call stopit( 17, r, + : status ) + + r = ast_rate( m, at, 2, 1, status ) + if( abs( r - 0.307692308 ) .gt. 1.0E-6 ) call stopit( 18, r, + : status ) + + +* ShiftMap + mat(1) = -1.2D0 + mat(2) = 1.2D0 + m = ast_shiftmap( 2, mat, ' ', status ) + + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 1.0D0 ) call stopit( 20, r, status ) + r = ast_rate( m, at, 2, 1, status ) + if( r .ne. 0.0D0 ) call stopit( 21, r, status ) + + call ast_invert( m, status ) + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 1.0D0 ) call stopit( 23, r, status ) + + +* WinMap + a1( 1 ) = 0.0D0 + a1( 2 ) = 0.0D0 + a2( 1 ) = 1.0D0 + a2( 2 ) = 1.0D0 + b1( 1 ) = 0.5D0 + b1( 2 ) = 0.5D0 + b2( 1 ) = 2.5D0 + b2( 2 ) = 2.5D0 + m = ast_winmap( 2, a1, a2, b1, b2, ' ', status ) + + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 2.0D0 ) call stopit( 24, r, status ) + r = ast_rate( m, at, 2, 1, status ) + if( r .ne. 0.0D0 ) call stopit( 25, r, status ) + + r = ast_rate( m, at, 2, 2, status ) + if( r .ne. 2.0D0 ) call stopit( 26, r, status ) + r = ast_rate( m, at, 1, 2, status ) + if( r .ne. 0.0D0 ) call stopit( 27, r, status ) + + + call ast_invert( m, status ) + + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 0.5D0 ) call stopit( 29, r, status ) + r = ast_rate( m, at, 2, 1, status ) + if( r .ne. 0.0D0 ) call stopit( 30, r, status ) + + r = ast_rate( m, at, 2, 2, status ) + if( r .ne. 0.5D0 ) call stopit( 31, r, status ) + r = ast_rate( m, at, 1, 2, status ) + if( r .ne. 0.0D0 ) call stopit( 32, r, status ) + + + +* PermMap + outp(1)=2 + outp(2)=1 + inp(1)=1 + inp(2)=2 + m = ast_permmap( 2, inp, 2, outp, 0.0D0, ' ', status ) + + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 0.0D0 ) call stopit( 34, r, status ) + + r = ast_rate( m, at, 2, 1, status ) + if( r .ne. 1.0D0 ) call stopit( 35, r, status ) + + r = ast_rate( m, at, 2, 2, status ) + if( r .ne. 0.0D0 ) call stopit( 37, r, status ) + + r = ast_rate( m, at, 1, 2, status ) + if( r .ne. 1.0D0 ) call stopit( 38, r, status ) + + call ast_invert( m, status ) + + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 1.0D0 ) call stopit( 40, r, status ) + + r = ast_rate( m, at, 2, 1, status ) + if( r .ne. 0.0D0 ) call stopit( 41, r, status ) + + r = ast_rate( m, at, 2, 2, status ) + if( r .ne. 1.0D0 ) call stopit( 43, r, status ) + + r = ast_rate( m, at, 1, 2, status ) + if( r .ne. 0.0D0 ) call stopit( 44, r, status ) + +* TranMap + a1( 1 ) = 0.0D0 + a1( 2 ) = 0.0D0 + a2( 1 ) = 1.0D0 + a2( 2 ) = 1.0D0 + b1( 1 ) = 0.5D0 + b1( 2 ) = 0.5D0 + b2( 1 ) = 2.5D0 + b2( 2 ) = 2.5D0 + c1 = ast_winmap( 2, a1, a2, b1, b2, ' ', status ) + + mat(1)= 1.2D0 + mat(2)= 1.6D0 + mat(3)= -1.6D0 + mat(4)= 2.2D0 + c2 = ast_matrixmap( 2, 2, 0, mat, ' ', status ) + + m = ast_tranmap( c1, c2, ' ', status ) + + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 2.0D0 ) call stopit( 46, r, status ) + r = ast_rate( m, at, 2, 1, status ) + if( r .ne. 0.0D0 ) call stopit( 47, r, status ) + + r = ast_rate( m, at, 2, 2, status ) + if( r .ne. 2.0D0 ) call stopit( 48, r, status ) + r = ast_rate( m, at, 1, 2, status ) + if( r .ne. 0.0D0 ) call stopit( 49, r, status ) + + call ast_invert( m, status ) + + r = ast_rate( m, at, 1, 1, status ) + if( abs( r - 0.423076923 ) .gt. 1.0E-6 ) call stopit( 51, r, + : status ) + r = ast_rate( m, at, 2, 2, status ) + if( abs( r - 0.230769231 ) .gt. 1.0E-6 ) call stopit( 52, r, + : status ) + r = ast_rate( m, at, 1, 2, status ) + if( abs( r + 0.307692308 ) .gt. 1.0E-6 ) call stopit( 53, r, + : status ) + r = ast_rate( m, at, 2, 1, status ) + if( abs( r - 0.307692308 ) .gt. 1.0E-6 ) call stopit( 54, r, + : status ) + + +* CmpMap + mat(1) = -1.0D0 + mat(2) = 1.0D0 + c1 = ast_shiftmap( 2, mat, ' ', status ) + mat(1)= 1.0D0 + mat(2)= 2.0D0 + mat(3)= -2.0D0 + mat(4)= 3.0D0 + c2 = ast_matrixmap( 2, 2, 0, mat, ' ', status ) + c3 = ast_cmpmap( c1, c2, 0, ' ', status ) + + outp(1) = 3 + outp(2) = 4 + outp(3) = 1 + outp(4) = 2 + inp(1) = 3 + inp(2) = 4 + inp(3) = 1 + inp(4) = 2 + c1 = ast_permmap( 4, inp, 4, outp, 0.0D0, ' ', status ) + c2 = ast_ZoomMap( 4, 0.25D0, ' ', status ) + call ast_invert( c2, status ) + + c4 = ast_cmpmap( c1, c2, 1, ' ', status ) + call ast_invert( c4, status ) + + m = ast_cmpmap( c3, c4, 1, ' ', status ) + + call ast_invert( c2, status ) + call ast_invert( c3, status ) + call ast_invert( c4, status ) + + at(1) = 1.0D0 + at(2) = 2.0D0 + at(3) = 3.0D0 + at(4) = 4.0D0 + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 0.0D0 ) call stopit( 55, r, status ) + + r = ast_rate( m, at, 1, 2, status ) + if( r .ne. 0.0D0 ) call stopit( 56, r, status ) + + r = ast_rate( m, at, 1, 3, status ) + if( abs( r - 0.25D0 ) .gt. 1.0D-6 ) call stopit( 57, r, status ) + + r = ast_rate( m, at, 1, 4, status ) + if( r .ne. 0.5D0 ) call stopit( 58, r, status ) + + r = ast_rate( m, at, 3, 1, status ) + if( r .ne. 0.25D0 ) call stopit( 59, r, status ) + + r = ast_rate( m, at, 3, 2, status ) + if( r .ne. 0.0D0 ) call stopit( 60, r, status ) + + r = ast_rate( m, at, 3, 3, status ) + if( r .ne. 0.0D0 ) call stopit( 61, r, status ) + + r = ast_rate( m, at, 3, 4, status ) + if( r .ne. 0.0D0 ) call stopit( 62, r, status ) + + + call ast_invert( m, status ) + + r = ast_rate( m, at, 1, 1, status ) + if( r .ne. 0.0D0 ) call stopit( 63, r, status ) + + r = ast_rate( m, at, 1, 2, status ) + if( r .ne. 0.0D0 ) call stopit( 64, r, status ) + + r = ast_rate( m, at, 1, 3, status ) + if( r .ne. 4.0D0 ) call stopit( 65, r, status ) + + r = ast_rate( m, at, 1, 4, status ) + if( r .ne. 0.0D0 ) call stopit( 66, r, status ) + + r = ast_rate( m, at, 3, 1, status ) + if( abs( r - 12.0D0/7.0D0 ) .gt. 1.0D-6 ) + : call stopit( 67, r, status ) + + r = ast_rate( m, at, 3, 2, status ) + if( abs( r - (-8.0D0/7.0D0) ) .gt. 1.0D-6 ) + : call stopit( 68, r, status ) + + r = ast_rate( m, at, 3, 3, status ) + if( r .ne. 0.0D0 ) call stopit( 69, r, status ) + + r = ast_rate( m, at, 3, 4, status ) + if( r .ne. 0.0D0 ) call stopit( 70, r, status ) + + + + + if( status .eq. sai__ok ) then + write(*,*) 'All AST_RATE tests passed' + else + write(*,*) 'AST_RATE tests failed' + end if + + end + + + subroutine stopit( i, r, status ) + implicit none + include 'SAE_PAR' + integer i, status + double precision r + if( status .eq. sai__ok ) then + write( *,* ) 'Error ',i,': ',r + status = sai__error + end if + end diff --git a/ast/ast_tester/testratemap.f b/ast/ast_tester/testratemap.f new file mode 100644 index 0000000..720a4b9 --- /dev/null +++ b/ast/ast_tester/testratemap.f @@ -0,0 +1,148 @@ + program testratemap + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'PRM_PAR' + + integer status, m, outp(4), inp(4), c1, c2, c3, c4, rm + double precision at(4), r, mat(4), b1(2), b2(2), a1(2), + : a2(4) + + status = sai__ok + + at(1) = 10.0D0 + at(2) = 1.2D6 + + mat(1) = -1.0D0 + mat(2) = 1.0D0 + c1 = ast_shiftmap( 2, mat, ' ', status ) + mat(1)= 1.0D0 + mat(2)= 2.0D0 + mat(3)= -2.0D0 + mat(4)= 3.0D0 + c2 = ast_matrixmap( 2, 2, 0, mat, ' ', status ) + c3 = ast_cmpmap( c1, c2, 0, ' ', status ) + + outp(1) = 3 + outp(2) = 4 + outp(3) = 1 + outp(4) = 2 + inp(1) = 3 + inp(2) = 4 + inp(3) = 1 + inp(4) = 2 + c1 = ast_permmap( 4, inp, 4, outp, 0.0D0, ' ', status ) + c2 = ast_ZoomMap( 4, 0.25D0, ' ', status ) + call ast_invert( c2, status ) + + c4 = ast_cmpmap( c1, c2, 1, ' ', status ) + call ast_invert( c4, status ) + + m = ast_cmpmap( c3, c4, 1, ' ', status ) + + call ast_invert( c2, status ) + call ast_invert( c3, status ) + call ast_invert( c4, status ) + + rm = ast_ratemap( m, 1, 1, ' ', status ) + at(1) = 1.0D0 + at(2) = 2.0D0 + at(3) = 3.0D0 + at(4) = 4.0D0 + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( r .ne. 0.0D0 ) call stopit( 1, r, status ) + + if( .not. ast_getl( rm, 'TranForward', status ) ) call stopit( 2, + : r, status ) + + if( ast_getl( rm, 'TranInverse', status ) ) call stopit( 3, r, + : status ) + + rm = ast_ratemap( m, 1, 2, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( r .ne. 0.0D0 ) call stopit( 4, r, status ) + + rm = ast_ratemap( m, 1, 3, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( abs( r - 0.25D0 ) .gt. 1.0D-6 ) call stopit( 5, r, status ) + + rm = ast_ratemap( m, 1, 4, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( r .ne. 0.5D0 ) call stopit( 6, r, status ) + + rm = ast_ratemap( m, 3, 1, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( r .ne. 0.25D0 ) call stopit( 7, r, status ) + + rm = ast_ratemap( m, 3, 2, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( r .ne. 0.0D0 ) call stopit( 8, r, status ) + + rm = ast_ratemap( m, 3, 3, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( r .ne. 0.0D0 ) call stopit( 9, r, status ) + + rm = ast_ratemap( m, 3, 4, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( r .ne. 0.0D0 ) call stopit( 10, r, status ) + + call ast_invert( m, status ) + + rm = ast_ratemap( m, 1, 1, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( r .ne. 0.0D0 ) call stopit( 11, r, status ) + + rm = ast_ratemap( m, 1, 2, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( r .ne. 0.0D0 ) call stopit( 12, r, status ) + + rm = ast_ratemap( m, 1, 3, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( r .ne. 4.0D0 ) call stopit( 13, r, status ) + + rm = ast_ratemap( m, 1, 4, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( r .ne. 0.0D0 ) call stopit( 14, r, status ) + + rm = ast_ratemap( m, 3, 1, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( abs( r - 12.0D0/7.0D0 ) .gt. 1.0E-6 ) + : call stopit( 15, r, status ) + + rm = ast_ratemap( m, 3, 2, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( abs( r - (-8.0D0/7.0D0) ) .gt. 1.0E-6 ) + : call stopit( 16, r, status ) + + rm = ast_ratemap( m, 3, 3, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( r .ne. 0.0D0 ) call stopit( 17, r, status ) + + rm = ast_ratemap( m, 3, 4, ' ', status ) + call ast_trann( rm, 1, 4, 1, at, 1, 1, 1, r, status ) + if( r .ne. 0.0D0 ) call stopit( 18, r, status ) + + + + + + + if( status .eq. sai__ok ) then + write(*,*) 'All RateMap tests passed' + else + write(*,*) 'RateMap tests failed' + end if + + end + + + subroutine stopit( i, r, status ) + implicit none + include 'SAE_PAR' + integer i, status + double precision r + if( status .eq. sai__ok ) then + write( *,* ) 'Error ',i,': ',r + status = sai__error + end if + end diff --git a/ast/ast_tester/testrebin.f b/ast/ast_tester/testrebin.f new file mode 100644 index 0000000..5ec976f --- /dev/null +++ b/ast/ast_tester/testrebin.f @@ -0,0 +1,4176 @@ + program testrebin + implicit none + include 'SAE_PAR' + external test1, test2, test3, test4, test5, test6, test7, test8, + : test9 + integer status + status = sai__ok + + call ast_begin( status ) + + call tester( test7, status ) + call tester( test8, status ) + call tester( test9, status ) + call tester( test1, status ) + call tester( test2, status ) + call tester( test3, status ) + call tester( test4, status ) + call tester( test5, status ) + call tester( test6, status ) + + call ast_end( status ) + call ast_flushmemory( 1 ) + + + if( status .eq. sai__ok ) then + write(*,*) 'All AST_REBIN tests passed' + else + write(*,*) 'AST_REBIN tests failed' + end if + + end + + + + +* +* Do a given test with a all data types and spread functions. +* + subroutine tester( testfun, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'PRM_PAR' + include 'CNF_PAR' + + integer m, lbnd_in(10), ubnd_in(10), ipin, ipin_var, + : lbnd_out(10), ubnd_out(10), lbnd(10), ubnd(10), ipout, + : ipout_var, status, nin, nout, i, nel_in, nel_out, + : spreads(6), j + character types(3)*15, name*20 + double precision tol, params(20) + external testfun + + data types/ '_DOUBLE', '_REAL', '_INTEGER' / + + data spreads/ AST__SINC, AST__NEAREST, AST__LINEAR, + : AST__SINCSINC, AST__SINCCOS, AST__SINCGAUSS / + + + if( status .ne. sai__ok ) return + +* Get the scalar properties of the test. + call testfun( 0, name, types(1), + : lbnd_in, ubnd_in, ipin, ipin_var, + : lbnd_out, ubnd_out, ipout, ipout_var, + : lbnd, ubnd, m, params, tol, j, status ) + +* Get the number of input and output axes. + nin = ast_geti( m, 'Nin', status ) + nout = ast_geti( m, 'Nout', status ) + +* Get no. of pixels in entire input array. + nel_in = 1 + do i = 1, nin + nel_in = nel_in*( ubnd_in( i ) - lbnd_in( i ) + 1 ) + end do + +* Get no. of pixels in entire output array. + nel_out = 1 + do i = 1, nout + nel_out = nel_out*( ubnd_out( i ) - lbnd_out( i ) + 1 ) + end do + +* Loop round all data types. + do i = 1, 3 + +* Allocate memory for input and output data and variance arrays + call psx_calloc( nel_in, types(i), ipin, status ) + call psx_calloc( nel_in, types(i), ipin_var, status ) + + call psx_calloc( nel_out, types(i), ipout, status ) + call psx_calloc( nel_out, types(i), ipout_var, status ) + +* Loop round all spread functions + do j = 1, 6 + +* Get the scalar properties of the test. This may change the Mapping. + call testfun( 0, name, types(i), + : lbnd_in, ubnd_in, ipin, ipin_var, + : lbnd_out, ubnd_out, ipout, ipout_var, + : lbnd, ubnd, m, params, tol, spreads(j), status ) + +* Fill the input data and variance arrays using the supplied function. + call testfun( 1, name, types(i), + : lbnd_in, ubnd_in, ipin, ipin_var, + : lbnd_out, ubnd_out, ipout, ipout_var, + : lbnd, ubnd, m, params, tol, spreads(j), + : status ) + +* Rebin the input data using the AST function appropriate to the +* supplied data type. + if( types(i) .eq. '_REAL' ) then + call ast_rebinr( m, 0.0D0, nin, lbnd_in, ubnd_in, + : %val( cnf_pval( ipin )), %val( cnf_pval(ipin_var )), + : spreads(j), params, + : AST__USEBAD+AST__USEVAR, tol, 100, VAL__BADR, + : nout, lbnd_out, ubnd_out, + : lbnd, ubnd, %val( cnf_pval( ipout )), + : %val( cnf_pval( ipout_var )), status ) + + else if( types(i) .eq. '_DOUBLE' ) then + call ast_rebind( m, 0.0D0, nin, lbnd_in, ubnd_in, + : %val( cnf_pval( ipin )), %val( cnf_pval(ipin_var )), + : spreads(j), params, + : AST__USEBAD+AST__USEVAR, tol, 100, VAL__BADD, + : nout, lbnd_out, ubnd_out, + : lbnd, ubnd, %val( cnf_pval( ipout ) ), + : %val( cnf_pval( ipout_var )), status ) + + else if( types(i) .eq. '_INTEGER' ) then + call ast_rebini( m, 0.0D0, nin, lbnd_in, ubnd_in, + : %val( cnf_pval( ipin )), %val( cnf_pval(ipin_var )), + : spreads(j), params, + : AST__USEBAD+AST__USEVAR, tol, 100, VAL__BADI, + : nout, lbnd_out, ubnd_out, + : lbnd, ubnd, %val( cnf_pval( ipout )), + : %val( cnf_pval( ipout_var )), status ) + + else if( status .eq. sai__ok ) then + status = SAI__ERROR + call msg_setc( 'T', types(i) ) + call err_rep( ' ', 'Bad data type (^T) supplied to '// + : 'rebin', status ) + end if + +* Call the supplied function to test the results. + call testfun( 2, name, types(i), + : lbnd_in, ubnd_in, ipin, ipin_var, + : lbnd_out, ubnd_out, ipout, ipout_var, + : lbnd, ubnd, m, params, tol, + : spreads(j), status ) + +* Report the data type and spread function if an error occurred, and +* abort. + if( status .ne. sai__ok ) then + call msg_seti( 'sf', j ) + call msg_setc( 'dt', types( i ) ) + call msg_setc( 't', name ) + call err_rep( ' ', '^t failed: Spread function ^sf '// + : 'data type ^dt', status ) + go to 999 + end if + + end do + +* Free resources. + call psx_free( ipout, status ) + call psx_free( ipout_var, status ) + call psx_free( ipin, status ) + call psx_free( ipin_var, status ) + end do + + 999 continue + + end + + LOGICAL FUNCTION EQUALB( A, B ) + IMPLICIT NONE + BYTE A, B + EQUALB = ( A .EQ. B ) + END + + LOGICAL FUNCTION EQUALD( A, B ) + IMPLICIT NONE + INCLUDE 'PRM_PAR' + DOUBLE PRECISION A, B + IF( A .NE. 0.0D0 .AND. B .NE. 0.0D0 ) THEN + EQUALD = ( ABS( A - B ) .LE. 1.0E9*ABS( A + B )*VAL__EPSD ) + ELSE + EQUALD = ( ABS( A + B ) .LE. 1.0D-11 ) + END IF + + END + + LOGICAL FUNCTION MYEQUALD( A, B ) + IMPLICIT NONE + DOUBLE PRECISION A, B + LOGICAL EQUALD + MYEQUALD = EQUALD( A, B ) + END + + LOGICAL FUNCTION EQUALI( A, B ) + IMPLICIT NONE + INTEGER A, B + EQUALI = ( A .EQ. B ) + + END + + LOGICAL FUNCTION EQUALR( A, B ) + IMPLICIT NONE + INCLUDE 'PRM_PAR' + REAL A, B + + IF( A .NE. 0.0 .AND. B .NE. 0.0 ) THEN + EQUALR = ( ABS( A - B ) .LE. 50.0*ABS( A + B )*VAL__EPSR ) + ELSE + EQUALR = ( ABS( A + B ) .LE. 1.0E-11 ) + END IF + + END + + LOGICAL FUNCTION EQUALW( A, B ) + IMPLICIT NONE + INTEGER*2 A, B + EQUALW = ( A .EQ. B ) + END + + + + +* ----------------------------------------------- +* Test 7 +* + + SUBROUTINE TEST7( DO, NAME, TYPE, + : LBND_IN, UBND_IN, IPIN, IPIN_VAR, + : LBND_OUT, UBND_OUT, IPOUT, IPOUT_VAR, + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + + INTEGER M, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), IPIN, IPIN_VAR, IPOUT, IPOUT_VAR, + : STATUS, DO, J + DOUBLE PRECISION TOL, PARAMS(*) + CHARACTER TYPE*(*), NAME*(*) + + IF( STATUS .NE. SAI__OK ) RETURN + + NAME = 'TEST7' + +* Fill the input data and variance arrays if required. + IF( TYPE .EQ. '_REAL' ) THEN + CALL TEST7R( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_DOUBLE' ) THEN + CALL TEST7D( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_INTEGER' ) THEN + CALL TEST7I( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( STATUS .EQ. SAI__OK ) then + STATUS = SAI__ERROR + CALL MSG_SETC( 'T', TYPE ) + CALL ERR_REP( ' ', 'Bad data type (^T) supplied to TEST7', + : STATUS ) + END IF + + END + + + + + SUBROUTINE TEST7D( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, NZ + DOUBLE PRECISION IN(*), IN_VAR(*), OUT(*), OUT_VAR(*), SUM, KT + DOUBLE PRECISION TOL, PARAMS(*), K + LOGICAL EQUALD, MYEQUALD, GOOD + + IF( STATUS .NE. SAI__OK ) RETURN + + K = MIN( 1000.0D0, NUM_DTOD( VAL__MAXD )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = 10 + UBND_IN( 1 ) = 19 + LBND_OUT( 1 ) = 12 + UBND_OUT( 1 ) = 20 + LBND( 1 ) = 11 + UBND( 1 ) = 17 + M = AST_SHIFTMAP( 1, 1.5D0, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.1 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + DO I = LBND_IN(1), UBND_IN(1) + IN( I - LBND_IN(1) + 1 ) = 0 + IN_VAR( I - LBND_IN(1) + 1 ) = K + END DO + IN( 14 - LBND_IN(1) + 1 ) = K + +* Otherwise check output data and variance arrays look right. + ELSE + + SUM = 0 + DO I = LBND_OUT(1), UBND_OUT(1) + IF( OUT( I - LBND_OUT(1) + 1) .NE. VAL__BADD ) THEN + SUM = SUM + OUT( I - LBND_OUT(1) + 1) + END IF + END DO + + KT = K + + + IF( 'D' .EQ. 'R' .OR. 'D' .EQ. 'D' ) THEN + GOOD = EQUALD( SUM, KT ) + ELSE + GOOD = ( ABS( SUM - KT ) .LT. 3 ) + END IF + + IF( .NOT. GOOD ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'K', dble( KT ) ) + CALL MSG_SETD( 'S', dble( SUM ) ) + CALL ERR_REP( ' ', 'TEST7D Data sum is ^S should be ^K', + : STATUS ) + END IF + + IF( SPREAD .EQ. AST__NEAREST ) THEN + NZ = 0 + DO I = LBND_OUT(1), UBND_OUT(1) + IF( OUT( I - LBND_OUT(1) + 1) .NE. 0 .AND. + : OUT( I - LBND_OUT(1) + 1) .NE. VAL__BADD ) THEN + IF( NZ .EQ. 0 ) THEN + NZ = NZ + 1 + IF( OUT( I - LBND_OUT(1) + 1) .NE. KT ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'D1', + : DBLE( OUT( I - LBND_OUT(1) + 1))) + CALL MSG_SETD( 'K', dble( KT ) ) + CALL ERR_REP( ' ', 'TEST7D ^I: ^D1 ^K', + : STATUS ) + END IF + ELSE + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'D1', + : DBLE( OUT( I - LBND_OUT(1) + 1))) + CALL ERR_REP( ' ', 'TEST7D ^I: ^D1', + : STATUS ) + END IF + END IF + END DO + + ELSE + DO I = 0, 3 + IF( .NOT. EQUALD( OUT( 15 - I - LBND_OUT(1) + 1 ), + : OUT( 16 + I - LBND_OUT(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I1', 15 - I ) + CALL MSG_SETI( 'I2', 16 + I ) + CALL MSG_SETD( 'D1', + : DBLE( OUT( 15 - I - LBND_OUT(1) + 1))) + CALL MSG_SETD( 'D2', + : DBLE( OUT( 16 + I - LBND_OUT(1) + 1))) + CALL ERR_REP( ' ', 'TEST7D ^I1 (^D1) != '// + : '^I2 (^D2)', STATUS ) + END IF + END DO + END IF + + END IF + + END + + + SUBROUTINE TEST7I( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, NZ + INTEGER IN(*), IN_VAR(*), OUT(*), OUT_VAR(*), SUM, KT + DOUBLE PRECISION TOL, PARAMS(*), K + LOGICAL EQUALI, MYEQUALD, GOOD + + IF( STATUS .NE. SAI__OK ) RETURN + + K = MIN( 1000.0D0, NUM_ITOD( VAL__MAXI )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = 10 + UBND_IN( 1 ) = 19 + LBND_OUT( 1 ) = 12 + UBND_OUT( 1 ) = 20 + LBND( 1 ) = 11 + UBND( 1 ) = 17 + M = AST_SHIFTMAP( 1, 1.5D0, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.1 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + DO I = LBND_IN(1), UBND_IN(1) + IN( I - LBND_IN(1) + 1 ) = 0 + IN_VAR( I - LBND_IN(1) + 1 ) = K + END DO + IN( 14 - LBND_IN(1) + 1 ) = K + +* Otherwise check output data and variance arrays look right. + ELSE + + SUM = 0 + DO I = LBND_OUT(1), UBND_OUT(1) + IF( OUT( I - LBND_OUT(1) + 1) .NE. VAL__BADI ) THEN + SUM = SUM + OUT( I - LBND_OUT(1) + 1) + END IF + END DO + + KT = K + + + IF( 'I' .EQ. 'R' .OR. 'I' .EQ. 'D' ) THEN + GOOD = EQUALI( SUM, KT ) + ELSE + GOOD = ( ABS( SUM - KT ) .LT. 3 ) + END IF + + IF( .NOT. GOOD ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'K', dble( KT ) ) + CALL MSG_SETD( 'S', dble( SUM ) ) + CALL ERR_REP( ' ', 'TEST7I Data sum is ^S should be ^K', + : STATUS ) + END IF + + IF( SPREAD .EQ. AST__NEAREST ) THEN + NZ = 0 + DO I = LBND_OUT(1), UBND_OUT(1) + IF( OUT( I - LBND_OUT(1) + 1) .NE. 0 .AND. + : OUT( I - LBND_OUT(1) + 1) .NE. VAL__BADI ) THEN + IF( NZ .EQ. 0 ) THEN + NZ = NZ + 1 + IF( OUT( I - LBND_OUT(1) + 1) .NE. KT ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'D1', + : DBLE( OUT( I - LBND_OUT(1) + 1))) + CALL MSG_SETD( 'K', dble( KT ) ) + CALL ERR_REP( ' ', 'TEST7I ^I: ^D1 ^K', + : STATUS ) + END IF + ELSE + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'D1', + : DBLE( OUT( I - LBND_OUT(1) + 1))) + CALL ERR_REP( ' ', 'TEST7I ^I: ^D1', + : STATUS ) + END IF + END IF + END DO + + ELSE + DO I = 0, 3 + IF( .NOT. EQUALI( OUT( 15 - I - LBND_OUT(1) + 1 ), + : OUT( 16 + I - LBND_OUT(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I1', 15 - I ) + CALL MSG_SETI( 'I2', 16 + I ) + CALL MSG_SETD( 'D1', + : DBLE( OUT( 15 - I - LBND_OUT(1) + 1))) + CALL MSG_SETD( 'D2', + : DBLE( OUT( 16 + I - LBND_OUT(1) + 1))) + CALL ERR_REP( ' ', 'TEST7I ^I1 (^D1) != '// + : '^I2 (^D2)', STATUS ) + END IF + END DO + END IF + + END IF + + END + + + SUBROUTINE TEST7R( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, NZ + REAL IN(*), IN_VAR(*), OUT(*), OUT_VAR(*), SUM, KT + DOUBLE PRECISION TOL, PARAMS(*), K + LOGICAL EQUALR, MYEQUALD, GOOD + + IF( STATUS .NE. SAI__OK ) RETURN + + K = MIN( 1000.0D0, NUM_RTOD( VAL__MAXR )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = 10 + UBND_IN( 1 ) = 19 + LBND_OUT( 1 ) = 12 + UBND_OUT( 1 ) = 20 + LBND( 1 ) = 11 + UBND( 1 ) = 17 + M = AST_SHIFTMAP( 1, 1.5D0, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.1 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + DO I = LBND_IN(1), UBND_IN(1) + IN( I - LBND_IN(1) + 1 ) = 0 + IN_VAR( I - LBND_IN(1) + 1 ) = K + END DO + IN( 14 - LBND_IN(1) + 1 ) = K + +* Otherwise check output data and variance arrays look right. + ELSE + + SUM = 0 + DO I = LBND_OUT(1), UBND_OUT(1) + IF( OUT( I - LBND_OUT(1) + 1) .NE. VAL__BADR ) THEN + SUM = SUM + OUT( I - LBND_OUT(1) + 1) + END IF + END DO + + KT = K + + + IF( 'R' .EQ. 'R' .OR. 'R' .EQ. 'D' ) THEN + GOOD = EQUALR( SUM, KT ) + ELSE + GOOD = ( ABS( SUM - KT ) .LT. 3 ) + END IF + + IF( .NOT. GOOD ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'K', dble( KT ) ) + CALL MSG_SETD( 'S', dble( SUM ) ) + CALL ERR_REP( ' ', 'TEST7R Data sum is ^S should be ^K', + : STATUS ) + END IF + + IF( SPREAD .EQ. AST__NEAREST ) THEN + NZ = 0 + DO I = LBND_OUT(1), UBND_OUT(1) + IF( OUT( I - LBND_OUT(1) + 1) .NE. 0 .AND. + : OUT( I - LBND_OUT(1) + 1) .NE. VAL__BADR ) THEN + IF( NZ .EQ. 0 ) THEN + NZ = NZ + 1 + IF( OUT( I - LBND_OUT(1) + 1) .NE. KT ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'D1', + : DBLE( OUT( I - LBND_OUT(1) + 1))) + CALL MSG_SETD( 'K', dble( KT ) ) + CALL ERR_REP( ' ', 'TEST7R ^I: ^D1 ^K', + : STATUS ) + END IF + ELSE + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'D1', + : DBLE( OUT( I - LBND_OUT(1) + 1))) + CALL ERR_REP( ' ', 'TEST7R ^I: ^D1', + : STATUS ) + END IF + END IF + END DO + + ELSE + DO I = 0, 3 + IF( .NOT. EQUALR( OUT( 15 - I - LBND_OUT(1) + 1 ), + : OUT( 16 + I - LBND_OUT(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I1', 15 - I ) + CALL MSG_SETI( 'I2', 16 + I ) + CALL MSG_SETD( 'D1', + : DBLE( OUT( 15 - I - LBND_OUT(1) + 1))) + CALL MSG_SETD( 'D2', + : DBLE( OUT( 16 + I - LBND_OUT(1) + 1))) + CALL ERR_REP( ' ', 'TEST7R ^I1 (^D1) != '// + : '^I2 (^D2)', STATUS ) + END IF + END DO + END IF + + END IF + + END + + + + +* ----------------------------------------------- +* Test 8 +* + + SUBROUTINE TEST8( DO, NAME, TYPE, + : LBND_IN, UBND_IN, IPIN, IPIN_VAR, + : LBND_OUT, UBND_OUT, IPOUT, IPOUT_VAR, + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + + INTEGER M, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), IPIN, IPIN_VAR, IPOUT, IPOUT_VAR, + : STATUS, DO, J + DOUBLE PRECISION TOL, PARAMS(*) + CHARACTER TYPE*(*), NAME*(*) + + IF( STATUS .NE. SAI__OK ) RETURN + + NAME = 'TEST8' + +* Fill the input data and variance arrays if required. + IF( TYPE .EQ. '_REAL' ) THEN + CALL TEST8R( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_DOUBLE' ) THEN + CALL TEST8D( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_INTEGER' ) THEN + CALL TEST8I( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( STATUS .EQ. SAI__OK ) then + STATUS = SAI__ERROR + CALL MSG_SETC( 'T', TYPE ) + CALL ERR_REP( ' ', 'Bad data type (^T) supplied to TEST8', + : STATUS ) + END IF + + END + + + + + SUBROUTINE TEST8D( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K, NZ, + : II, JJ, KK + DOUBLE PRECISION IN(*), IN_VAR(*), OUT(*), OUT_VAR(*), SUM, KT + DOUBLE PRECISION TOL, PARAMS(*), KFAC, SHIFTS(2) + LOGICAL EQUALD, GOOD + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 10000.0D0, NUM_DTOD( VAL__MAXD )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -2 + UBND_IN( 1 ) = 3 + LBND_OUT( 1 ) = -2 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -2 + UBND( 1 ) = 3 + LBND_IN( 2 ) = 0 + UBND_IN( 2 ) = 5 + LBND_OUT( 2 ) = 0 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 0 + UBND( 2 ) = 5 + SHIFTS(1) = 0.5D0 + SHIFTS(2) = -0.5D0 + M = AST_SHIFTMAP( 2, SHIFTS, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = 0 + IN_VAR( K ) = KFAC + K = K + 1 + END DO + END DO + IN( 21 ) = KFAC + +* Otherwise check output data and variance arrays look right. + ELSE + K = 0 + SUM = 0 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + IF( OUT( K ) .NE. VAL__BADD ) THEN + SUM = SUM + OUT( K ) + END IF + END DO + END DO + + KT = KFAC + + IF( 'D' .EQ. 'R' .OR. 'D' .EQ. 'D' ) THEN + GOOD = EQUALD( SUM, KT ) + ELSE + GOOD = ( ABS( SUM - KT ) .LT. 5 ) + END IF + + IF( .NOT. GOOD ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'K', dble( KT ) ) + CALL MSG_SETD( 'S', dble( SUM ) ) + CALL ERR_REP( ' ', 'TEST8D Data sum is ^S should be ^K', + : STATUS ) + GO TO 999 + END IF + + IF( SPREAD .EQ. AST__NEAREST ) THEN + NZ = 0 + K = 0 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + IF( OUT( K ) .NE. 0 .AND. + : OUT( K ) .NE. VAL__BADD ) THEN + IF( NZ .EQ. 0 ) THEN + NZ = NZ + 1 + IF( OUT( K ) .NE. KT ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'K', K ) + CALL MSG_SETD( 'D1', DBLE( OUT( K ))) + CALL MSG_SETD( 'KT', DBLE( KT ) ) + CALL ERR_REP( ' ', 'TEST8D ^K: ^D1 ^KT', + : STATUS ) + GO TO 999 + END IF + ELSE + STATUS = SAI__ERROR + CALL MSG_SETI( 'K', K ) + CALL MSG_SETD( 'D1', DBLE( OUT( K ))) + CALL ERR_REP( ' ', 'TEST8D ^K: ^D1', + : STATUS ) + GO TO 999 + END IF + END IF + END DO + END DO + ELSE + K = 0 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + II = 1 - I + JJ = 5 - J + IF( II .GE. LBND_OUT(1) .AND. + : II .LE. UBND_OUT(1) .AND. + : JJ .GE. LBND_OUT(2) .AND. + : JJ .LE. UBND_OUT(2) ) THEN + KK = 6*JJ + ( II + 3 ) + + IF( .NOT. EQUALD( OUT( KK ), OUT( K ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'KK', KK ) + CALL MSG_SETI( 'K', K ) + CALL MSG_SETD( 'D1', DBLE( OUT(KK) ) ) + CALL MSG_SETD( 'D2', DBLE( OUT(K) ) ) + CALL ERR_REP( ' ', 'TEST8D ^KK (^D1) != '// + : '^K (^D2)', STATUS ) + GO TO 999 + END IF + END IF + END DO + END DO + END IF + + END IF + + 999 CONTINUE + + END + + + + SUBROUTINE TEST8I( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K, NZ, + : II, JJ, KK + INTEGER IN(*), IN_VAR(*), OUT(*), OUT_VAR(*), SUM, KT + DOUBLE PRECISION TOL, PARAMS(*), KFAC, SHIFTS(2) + LOGICAL EQUALI, GOOD + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 10000.0D0, NUM_ITOD( VAL__MAXI )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -2 + UBND_IN( 1 ) = 3 + LBND_OUT( 1 ) = -2 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -2 + UBND( 1 ) = 3 + LBND_IN( 2 ) = 0 + UBND_IN( 2 ) = 5 + LBND_OUT( 2 ) = 0 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 0 + UBND( 2 ) = 5 + SHIFTS(1) = 0.5D0 + SHIFTS(2) = -0.5D0 + M = AST_SHIFTMAP( 2, SHIFTS, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = 0 + IN_VAR( K ) = KFAC + K = K + 1 + END DO + END DO + IN( 21 ) = KFAC + +* Otherwise check output data and variance arrays look right. + ELSE + K = 0 + SUM = 0 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + IF( OUT( K ) .NE. VAL__BADI ) THEN + SUM = SUM + OUT( K ) + END IF + END DO + END DO + + KT = KFAC + + IF( 'I' .EQ. 'R' .OR. 'I' .EQ. 'D' ) THEN + GOOD = EQUALI( SUM, KT ) + ELSE + GOOD = ( ABS( SUM - KT ) .LT. 5 ) + END IF + + IF( .NOT. GOOD ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'K', dble( KT ) ) + CALL MSG_SETD( 'S', dble( SUM ) ) + CALL ERR_REP( ' ', 'TEST8I Data sum is ^S should be ^K', + : STATUS ) + GO TO 999 + END IF + + IF( SPREAD .EQ. AST__NEAREST ) THEN + NZ = 0 + K = 0 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + IF( OUT( K ) .NE. 0 .AND. + : OUT( K ) .NE. VAL__BADI ) THEN + IF( NZ .EQ. 0 ) THEN + NZ = NZ + 1 + IF( OUT( K ) .NE. KT ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'K', K ) + CALL MSG_SETD( 'D1', DBLE( OUT( K ))) + CALL MSG_SETD( 'KT', DBLE( KT ) ) + CALL ERR_REP( ' ', 'TEST8I ^K: ^D1 ^KT', + : STATUS ) + GO TO 999 + END IF + ELSE + STATUS = SAI__ERROR + CALL MSG_SETI( 'K', K ) + CALL MSG_SETD( 'D1', DBLE( OUT( K ))) + CALL ERR_REP( ' ', 'TEST8I ^K: ^D1', + : STATUS ) + GO TO 999 + END IF + END IF + END DO + END DO + ELSE + K = 0 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + II = 1 - I + JJ = 5 - J + IF( II .GE. LBND_OUT(1) .AND. + : II .LE. UBND_OUT(1) .AND. + : JJ .GE. LBND_OUT(2) .AND. + : JJ .LE. UBND_OUT(2) ) THEN + KK = 6*JJ + ( II + 3 ) + + IF( .NOT. EQUALI( OUT( KK ), OUT( K ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'KK', KK ) + CALL MSG_SETI( 'K', K ) + CALL MSG_SETD( 'D1', DBLE( OUT(KK) ) ) + CALL MSG_SETD( 'D2', DBLE( OUT(K) ) ) + CALL ERR_REP( ' ', 'TEST8I ^KK (^D1) != '// + : '^K (^D2)', STATUS ) + GO TO 999 + END IF + END IF + END DO + END DO + END IF + + END IF + + 999 CONTINUE + + END + + + + SUBROUTINE TEST8R( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K, NZ, + : II, JJ, KK + REAL IN(*), IN_VAR(*), OUT(*), OUT_VAR(*), SUM, KT + DOUBLE PRECISION TOL, PARAMS(*), KFAC, SHIFTS(2) + LOGICAL EQUALR, GOOD + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 10000.0D0, NUM_RTOD( VAL__MAXR )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -2 + UBND_IN( 1 ) = 3 + LBND_OUT( 1 ) = -2 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -2 + UBND( 1 ) = 3 + LBND_IN( 2 ) = 0 + UBND_IN( 2 ) = 5 + LBND_OUT( 2 ) = 0 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 0 + UBND( 2 ) = 5 + SHIFTS(1) = 0.5D0 + SHIFTS(2) = -0.5D0 + M = AST_SHIFTMAP( 2, SHIFTS, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = 0 + IN_VAR( K ) = KFAC + K = K + 1 + END DO + END DO + IN( 21 ) = KFAC + +* Otherwise check output data and variance arrays look right. + ELSE + K = 0 + SUM = 0 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + IF( OUT( K ) .NE. VAL__BADR ) THEN + SUM = SUM + OUT( K ) + END IF + END DO + END DO + + KT = KFAC + + IF( 'R' .EQ. 'R' .OR. 'R' .EQ. 'D' ) THEN + GOOD = EQUALR( SUM, KT ) + ELSE + GOOD = ( ABS( SUM - KT ) .LT. 5 ) + END IF + + IF( .NOT. GOOD ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'K', dble( KT ) ) + CALL MSG_SETD( 'S', dble( SUM ) ) + CALL ERR_REP( ' ', 'TEST8R Data sum is ^S should be ^K', + : STATUS ) + GO TO 999 + END IF + + IF( SPREAD .EQ. AST__NEAREST ) THEN + NZ = 0 + K = 0 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + IF( OUT( K ) .NE. 0 .AND. + : OUT( K ) .NE. VAL__BADR ) THEN + IF( NZ .EQ. 0 ) THEN + NZ = NZ + 1 + IF( OUT( K ) .NE. KT ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'K', K ) + CALL MSG_SETD( 'D1', DBLE( OUT( K ))) + CALL MSG_SETD( 'KT', DBLE( KT ) ) + CALL ERR_REP( ' ', 'TEST8R ^K: ^D1 ^KT', + : STATUS ) + GO TO 999 + END IF + ELSE + STATUS = SAI__ERROR + CALL MSG_SETI( 'K', K ) + CALL MSG_SETD( 'D1', DBLE( OUT( K ))) + CALL ERR_REP( ' ', 'TEST8R ^K: ^D1', + : STATUS ) + GO TO 999 + END IF + END IF + END DO + END DO + ELSE + K = 0 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + II = 1 - I + JJ = 5 - J + IF( II .GE. LBND_OUT(1) .AND. + : II .LE. UBND_OUT(1) .AND. + : JJ .GE. LBND_OUT(2) .AND. + : JJ .LE. UBND_OUT(2) ) THEN + KK = 6*JJ + ( II + 3 ) + + IF( .NOT. EQUALR( OUT( KK ), OUT( K ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'KK', KK ) + CALL MSG_SETI( 'K', K ) + CALL MSG_SETD( 'D1', DBLE( OUT(KK) ) ) + CALL MSG_SETD( 'D2', DBLE( OUT(K) ) ) + CALL ERR_REP( ' ', 'TEST8R ^KK (^D1) != '// + : '^K (^D2)', STATUS ) + GO TO 999 + END IF + END IF + END DO + END DO + END IF + + END IF + + 999 CONTINUE + + END + + + + + +* ----------------------------------------------- +* Test 9 +* + + SUBROUTINE TEST9( DO, NAME, TYPE, + : LBND_IN, UBND_IN, IPIN, IPIN_VAR, + : LBND_OUT, UBND_OUT, IPOUT, IPOUT_VAR, + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + + INTEGER M, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), IPIN, IPIN_VAR, IPOUT, IPOUT_VAR, + : STATUS, DO, J + DOUBLE PRECISION TOL, PARAMS(*) + CHARACTER TYPE*(*), NAME*(*) + + IF( STATUS .NE. SAI__OK ) RETURN + + NAME = 'TEST9' + +* Fill the input data and variance arrays if required. + IF( TYPE .EQ. '_REAL' ) THEN + CALL TEST9R( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_DOUBLE' ) THEN + CALL TEST9D( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_INTEGER' ) THEN + CALL TEST9I( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( STATUS .EQ. SAI__OK ) then + STATUS = SAI__ERROR + CALL MSG_SETC( 'T', TYPE ) + CALL ERR_REP( ' ', 'Bad data type (^T) supplied to TEST9', + : STATUS ) + END IF + + END + + + + + SUBROUTINE TEST9D( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K, L, K2 + DOUBLE PRECISION IN(*), IN_VAR(*), OUT(*), OUT_VAR(*), KT, SUM + DOUBLE PRECISION TOL, PARAMS(*), KFAC, SHIFTS(3), G(3), W + LOGICAL EQUALD, GOOD, MYEQUALD + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 10000.0D0, NUM_DTOD( VAL__MAXD )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = 0 + UBND_IN( 1 ) = 6 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 6 + LBND( 1 ) = 0 + UBND( 1 ) = 6 + LBND_IN( 2 ) = 0 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 0 + UBND_OUT( 2 ) = 6 + LBND( 2 ) = 0 + UBND( 2 ) = 6 + LBND_IN( 3 ) = 0 + UBND_IN( 3 ) = 6 + LBND_OUT( 3 ) = 0 + UBND_OUT( 3 ) = 6 + LBND( 3 ) = 0 + UBND( 3 ) = 6 + + IF( SPREAD .EQ. AST__NEAREST ) THEN + SHIFTS(1) = 1.7D0 + SHIFTS(2) = 2.1D0 + SHIFTS(3) = -1.2D0 + ELSE + SHIFTS(1) = 0.5D0 + SHIFTS(2) = 0.0D0 + SHIFTS(3) = -0.5D0 + END IF + + M = AST_SHIFTMAP( 3, SHIFTS, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO L = LBND_IN(3), UBND_IN(3) + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = 0 + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + END DO + IN( 172 ) = KFAC + +* Otherwise check output data and variance arrays look right. + ELSE + K = 0 + SUM = 0 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + IF( OUT( K ) .NE. VAL__BADD ) THEN + SUM = SUM + OUT( K ) + END IF + END DO + END DO + END DO + + KT = KFAC + + IF( 'D' .EQ. 'R' .OR. 'D' .EQ. 'D' ) THEN + GOOD = EQUALD( SUM, KT ) + ELSE + GOOD = ( ABS( SUM - KT ) .LT. 5 ) + END IF + + IF( .NOT. GOOD ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'K', dble( KT ) ) + CALL MSG_SETD( 'S', dble( SUM ) ) + CALL ERR_REP( ' ', 'TEST9D Data sum is ^S should be ^K', + : STATUS ) + GO TO 999 + END IF + + IF( SPREAD .EQ. AST__NEAREST ) THEN + K = 0 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + IF( K .EQ. 139 ) THEN + IF( .NOT. EQUALD( OUT(K), KT ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'K', DBLE( KT ) ) + CALL MSG_SETD( 'O', DBLE( OUT(K) ) ) + CALL ERR_REP( ' ', 'TEST9D El. 139 is '// + : '^O should be ^K', STATUS ) + GO TO 999 + END IF + ELSE + IF( .NOT. EQUALD( OUT(K), 0.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'K', K ) + CALL MSG_SETD( 'O', DBLE( OUT(K) ) ) + CALL ERR_REP( ' ', 'TEST9D El. ^K is '// + : '^O should be zero', STATUS ) + GO TO 999 + END IF + END IF + END DO + END DO + END DO + ELSE + + G(1) = 0.0 + G(2) = 0.0 + G(3) = 0.0 + W = 0.0 + K = 0 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + G(1) = G(1) + DBLE( I*OUT( k ) ) + G(2) = G(2) + DBLE( J*OUT( K ) ) + G(3) = G(3) + DBLE( L*OUT( K ) ) + W = W + DBLE( OUT( K ) ) + END DO + END DO + END DO + + IF( .NOT. MYEQUALD( G(1)/W, 3.5D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'A', G(1)/W ) + CALL ERR_REP( ' ', 'TEST9D Mean X is ^A '// + : ' should be 3.5', STATUS ) + GO TO 999 + ELSE IF( .NOT. MYEQUALD( G(2)/W, 3.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'A', G(2)/W ) + CALL ERR_REP( ' ', 'TEST9D Mean Y is ^A '// + : ' should be 3.0', STATUS ) + GO TO 999 + ELSE IF( .NOT. MYEQUALD( G(3)/W, 2.5D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'A', G(3)/W ) + CALL ERR_REP( ' ', 'TEST9D Mean Z is ^A '// + : ' should be 2.5', STATUS ) + GO TO 999 + END IF + + END IF + END IF + + 999 CONTINUE + + END + + + + SUBROUTINE TEST9I( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K, L, K2 + INTEGER IN(*), IN_VAR(*), OUT(*), OUT_VAR(*), KT, SUM + DOUBLE PRECISION TOL, PARAMS(*), KFAC, SHIFTS(3), G(3), W + LOGICAL EQUALI, GOOD, MYEQUALD + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 10000.0D0, NUM_ITOD( VAL__MAXI )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = 0 + UBND_IN( 1 ) = 6 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 6 + LBND( 1 ) = 0 + UBND( 1 ) = 6 + LBND_IN( 2 ) = 0 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 0 + UBND_OUT( 2 ) = 6 + LBND( 2 ) = 0 + UBND( 2 ) = 6 + LBND_IN( 3 ) = 0 + UBND_IN( 3 ) = 6 + LBND_OUT( 3 ) = 0 + UBND_OUT( 3 ) = 6 + LBND( 3 ) = 0 + UBND( 3 ) = 6 + + IF( SPREAD .EQ. AST__NEAREST ) THEN + SHIFTS(1) = 1.7D0 + SHIFTS(2) = 2.1D0 + SHIFTS(3) = -1.2D0 + ELSE + SHIFTS(1) = 0.5D0 + SHIFTS(2) = 0.0D0 + SHIFTS(3) = -0.5D0 + END IF + + M = AST_SHIFTMAP( 3, SHIFTS, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO L = LBND_IN(3), UBND_IN(3) + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = 0 + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + END DO + IN( 172 ) = KFAC + +* Otherwise check output data and variance arrays look right. + ELSE + K = 0 + SUM = 0 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + IF( OUT( K ) .NE. VAL__BADI ) THEN + SUM = SUM + OUT( K ) + END IF + END DO + END DO + END DO + + KT = KFAC + + IF( 'I' .EQ. 'R' .OR. 'I' .EQ. 'D' ) THEN + GOOD = EQUALI( SUM, KT ) + ELSE + GOOD = ( ABS( SUM - KT ) .LT. 5 ) + END IF + + IF( .NOT. GOOD ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'K', dble( KT ) ) + CALL MSG_SETD( 'S', dble( SUM ) ) + CALL ERR_REP( ' ', 'TEST9I Data sum is ^S should be ^K', + : STATUS ) + GO TO 999 + END IF + + IF( SPREAD .EQ. AST__NEAREST ) THEN + K = 0 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + IF( K .EQ. 139 ) THEN + IF( .NOT. EQUALI( OUT(K), KT ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'K', DBLE( KT ) ) + CALL MSG_SETD( 'O', DBLE( OUT(K) ) ) + CALL ERR_REP( ' ', 'TEST9I El. 139 is '// + : '^O should be ^K', STATUS ) + GO TO 999 + END IF + ELSE + IF( .NOT. EQUALI( OUT(K), 0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'K', K ) + CALL MSG_SETD( 'O', DBLE( OUT(K) ) ) + CALL ERR_REP( ' ', 'TEST9I El. ^K is '// + : '^O should be zero', STATUS ) + GO TO 999 + END IF + END IF + END DO + END DO + END DO + ELSE + + G(1) = 0.0 + G(2) = 0.0 + G(3) = 0.0 + W = 0.0 + K = 0 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + G(1) = G(1) + DBLE( I*OUT( k ) ) + G(2) = G(2) + DBLE( J*OUT( K ) ) + G(3) = G(3) + DBLE( L*OUT( K ) ) + W = W + DBLE( OUT( K ) ) + END DO + END DO + END DO + + IF( .NOT. MYEQUALD( G(1)/W, 3.5D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'A', G(1)/W ) + CALL ERR_REP( ' ', 'TEST9I Mean X is ^A '// + : ' should be 3.5', STATUS ) + GO TO 999 + ELSE IF( .NOT. MYEQUALD( G(2)/W, 3.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'A', G(2)/W ) + CALL ERR_REP( ' ', 'TEST9I Mean Y is ^A '// + : ' should be 3.0', STATUS ) + GO TO 999 + ELSE IF( .NOT. MYEQUALD( G(3)/W, 2.5D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'A', G(3)/W ) + CALL ERR_REP( ' ', 'TEST9I Mean Z is ^A '// + : ' should be 2.5', STATUS ) + GO TO 999 + END IF + + END IF + END IF + + 999 CONTINUE + + END + + + + SUBROUTINE TEST9R( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K, L, K2 + REAL IN(*), IN_VAR(*), OUT(*), OUT_VAR(*), KT, SUM + DOUBLE PRECISION TOL, PARAMS(*), KFAC, SHIFTS(3), G(3), W + LOGICAL EQUALR, GOOD, MYEQUALD + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 10000.0D0, NUM_RTOD( VAL__MAXR )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = 0 + UBND_IN( 1 ) = 6 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 6 + LBND( 1 ) = 0 + UBND( 1 ) = 6 + LBND_IN( 2 ) = 0 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 0 + UBND_OUT( 2 ) = 6 + LBND( 2 ) = 0 + UBND( 2 ) = 6 + LBND_IN( 3 ) = 0 + UBND_IN( 3 ) = 6 + LBND_OUT( 3 ) = 0 + UBND_OUT( 3 ) = 6 + LBND( 3 ) = 0 + UBND( 3 ) = 6 + + IF( SPREAD .EQ. AST__NEAREST ) THEN + SHIFTS(1) = 1.7D0 + SHIFTS(2) = 2.1D0 + SHIFTS(3) = -1.2D0 + ELSE + SHIFTS(1) = 0.5D0 + SHIFTS(2) = 0.0D0 + SHIFTS(3) = -0.5D0 + END IF + + M = AST_SHIFTMAP( 3, SHIFTS, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO L = LBND_IN(3), UBND_IN(3) + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = 0 + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + END DO + IN( 172 ) = KFAC + +* Otherwise check output data and variance arrays look right. + ELSE + K = 0 + SUM = 0 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + IF( OUT( K ) .NE. VAL__BADR ) THEN + SUM = SUM + OUT( K ) + END IF + END DO + END DO + END DO + + KT = KFAC + + IF( 'R' .EQ. 'R' .OR. 'R' .EQ. 'D' ) THEN + GOOD = EQUALR( SUM, KT ) + ELSE + GOOD = ( ABS( SUM - KT ) .LT. 5 ) + END IF + + IF( .NOT. GOOD ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'K', dble( KT ) ) + CALL MSG_SETD( 'S', dble( SUM ) ) + CALL ERR_REP( ' ', 'TEST9R Data sum is ^S should be ^K', + : STATUS ) + GO TO 999 + END IF + + IF( SPREAD .EQ. AST__NEAREST ) THEN + K = 0 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + IF( K .EQ. 139 ) THEN + IF( .NOT. EQUALR( OUT(K), KT ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'K', DBLE( KT ) ) + CALL MSG_SETD( 'O', DBLE( OUT(K) ) ) + CALL ERR_REP( ' ', 'TEST9R El. 139 is '// + : '^O should be ^K', STATUS ) + GO TO 999 + END IF + ELSE + IF( .NOT. EQUALR( OUT(K), 0.0E0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'K', K ) + CALL MSG_SETD( 'O', DBLE( OUT(K) ) ) + CALL ERR_REP( ' ', 'TEST9R El. ^K is '// + : '^O should be zero', STATUS ) + GO TO 999 + END IF + END IF + END DO + END DO + END DO + ELSE + + G(1) = 0.0 + G(2) = 0.0 + G(3) = 0.0 + W = 0.0 + K = 0 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + K = K + 1 + G(1) = G(1) + DBLE( I*OUT( k ) ) + G(2) = G(2) + DBLE( J*OUT( K ) ) + G(3) = G(3) + DBLE( L*OUT( K ) ) + W = W + DBLE( OUT( K ) ) + END DO + END DO + END DO + + IF( .NOT. MYEQUALD( G(1)/W, 3.5D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'A', G(1)/W ) + CALL ERR_REP( ' ', 'TEST9R Mean X is ^A '// + : ' should be 3.5', STATUS ) + GO TO 999 + ELSE IF( .NOT. MYEQUALD( G(2)/W, 3.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'A', G(2)/W ) + CALL ERR_REP( ' ', 'TEST9R Mean Y is ^A '// + : ' should be 3.0', STATUS ) + GO TO 999 + ELSE IF( .NOT. MYEQUALD( G(3)/W, 2.5D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'A', G(3)/W ) + CALL ERR_REP( ' ', 'TEST9R Mean Z is ^A '// + : ' should be 2.5', STATUS ) + GO TO 999 + END IF + + END IF + END IF + + 999 CONTINUE + + END + + + + + +* ----------------------------------------------- +* Test 1 +* + + SUBROUTINE TEST1( DO, NAME, TYPE, + : LBND_IN, UBND_IN, IPIN, IPIN_VAR, + : LBND_OUT, UBND_OUT, IPOUT, IPOUT_VAR, + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + + INTEGER M, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), IPIN, IPIN_VAR, IPOUT, IPOUT_VAR, + : STATUS, DO, J + DOUBLE PRECISION TOL, PARAMS(*) + CHARACTER TYPE*(*), NAME*(*) + + IF( STATUS .NE. SAI__OK ) RETURN + + NAME = 'TEST1' + +* Fill the input data and variance arrays if required. + IF( TYPE .EQ. '_REAL' ) THEN + CALL TEST1R( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_DOUBLE' ) THEN + CALL TEST1D( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_INTEGER' ) THEN + CALL TEST1I( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( STATUS .EQ. SAI__OK ) then + STATUS = SAI__ERROR + CALL MSG_SETC( 'T', TYPE ) + CALL ERR_REP( ' ', 'Bad data type (^T) supplied to TEST1', + : STATUS ) + END IF + + END + + + + + SUBROUTINE TEST1D( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), STATUS, M, I, SPREAD + DOUBLE PRECISION IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + LOGICAL EQUALD, IGNORE + DOUBLE PRECISION TOL, PARAMS(*), K + + IF( STATUS .NE. SAI__OK ) RETURN + + K = MIN( 1000.0D0, NUM_DTOD( VAL__MAXD )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = 10 + UBND_IN( 1 ) = 19 + LBND_OUT( 1 ) = 12 + UBND_OUT( 1 ) = 20 + LBND( 1 ) = 11 + UBND( 1 ) = 17 + M = AST_UNITMAP( 1, ' ', STATUS ) + IF( SPREAD .EQ. AST__GAUSS ) THEN + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + ELSE + PARAMS(1) = 2.0 + PARAMS(2) = 0.5 + END IF + TOL = 0.1 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + DO I = LBND_IN(1), UBND_IN(1) + IN( I - LBND_IN(1) + 1 ) = I*K + IN_VAR( I - LBND_IN(1) + 1 ) = I + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + DO I = LBND_OUT(1), UBND(1) + IGNORE = ( SPREAD .EQ. AST__GAUSS .AND. + : ( I .LE. LBND_OUT(1) + 1 .OR. + : I .GE. UBND(1) - 1 ) ) + IF( IGNORE ) THEN + + ELSE IF( .NOT. EQUALD( OUT( I - LBND_OUT(1) + 1 ), + : IN( I - LBND_IN(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT( I - LBND_OUT(1) + 1 ) ) ) + CALL MSG_SETD( 'B', DBLE( IN( I - LBND_IN(1) + 1 ) ) ) + CALL ERR_REP( ' ', 'TEST1D ^I: data ^V != ^B', STATUS ) + RETURN + ELSE IF( .NOT. EQUALD( OUT_VAR( I - LBND_OUT(1) + 1 ), + : IN_VAR( I - LBND_IN(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT_VAR(I-LBND_OUT(1)+1) ) ) + CALL MSG_SETD( 'B', DBLE( IN_VAR(I-LBND_IN(1)+1) ) ) + CALL ERR_REP( ' ', 'TEST1D ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END DO + DO I = UBND(1) + 1, UBND_OUT(1) + IF( .NOT. EQUALD( OUT( I - LBND_OUT(1) + 1 ), + : 0.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT( I - LBND_OUT(1) + 1))) + CALL ERR_REP( ' ', 'TEST1D ^I: ^V != 0.0', STATUS ) + RETURN + ELSE IF( .NOT. EQUALD( OUT_VAR( I - LBND_OUT(1) + 1 ), + : 0.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT_VAR(I-LBND_OUT(1)+1))) + CALL ERR_REP( ' ', 'TEST1D ^I: variance ^V != 0.0', + : STATUS ) + RETURN + END IF + END DO + + END IF + + END + + + + SUBROUTINE TEST1I( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), STATUS, M, I, SPREAD + INTEGER IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + LOGICAL EQUALI, IGNORE + DOUBLE PRECISION TOL, PARAMS(*), K + + IF( STATUS .NE. SAI__OK ) RETURN + + K = MIN( 1000.0D0, NUM_ITOD( VAL__MAXI )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = 10 + UBND_IN( 1 ) = 19 + LBND_OUT( 1 ) = 12 + UBND_OUT( 1 ) = 20 + LBND( 1 ) = 11 + UBND( 1 ) = 17 + M = AST_UNITMAP( 1, ' ', STATUS ) + IF( SPREAD .EQ. AST__GAUSS ) THEN + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + ELSE + PARAMS(1) = 2.0 + PARAMS(2) = 0.5 + END IF + TOL = 0.1 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + DO I = LBND_IN(1), UBND_IN(1) + IN( I - LBND_IN(1) + 1 ) = I*K + IN_VAR( I - LBND_IN(1) + 1 ) = I + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + DO I = LBND_OUT(1), UBND(1) + IGNORE = ( SPREAD .EQ. AST__GAUSS .AND. + : ( I .LE. LBND_OUT(1) + 1 .OR. + : I .GE. UBND(1) - 1 ) ) + IF( IGNORE ) THEN + + ELSE IF( .NOT. EQUALI( OUT( I - LBND_OUT(1) + 1 ), + : IN( I - LBND_IN(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT( I - LBND_OUT(1) + 1 ) ) ) + CALL MSG_SETD( 'B', DBLE( IN( I - LBND_IN(1) + 1 ) ) ) + CALL ERR_REP( ' ', 'TEST1I ^I: data ^V != ^B', STATUS ) + RETURN + ELSE IF( .NOT. EQUALI( OUT_VAR( I - LBND_OUT(1) + 1 ), + : IN_VAR( I - LBND_IN(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT_VAR(I-LBND_OUT(1)+1) ) ) + CALL MSG_SETD( 'B', DBLE( IN_VAR(I-LBND_IN(1)+1) ) ) + CALL ERR_REP( ' ', 'TEST1I ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END DO + DO I = UBND(1) + 1, UBND_OUT(1) + IF( .NOT. EQUALI( OUT( I - LBND_OUT(1) + 1 ), + : 0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT( I - LBND_OUT(1) + 1))) + CALL ERR_REP( ' ', 'TEST1I ^I: ^V != 0.0', STATUS ) + RETURN + ELSE IF( .NOT. EQUALI( OUT_VAR( I - LBND_OUT(1) + 1 ), + : 0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT_VAR(I-LBND_OUT(1)+1))) + CALL ERR_REP( ' ', 'TEST1I ^I: variance ^V != 0.0', + : STATUS ) + RETURN + END IF + END DO + + END IF + + END + + + + SUBROUTINE TEST1R( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), STATUS, M, I, SPREAD + REAL IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + LOGICAL EQUALR, IGNORE + DOUBLE PRECISION TOL, PARAMS(*), K + + IF( STATUS .NE. SAI__OK ) RETURN + + K = MIN( 1000.0D0, NUM_RTOD( VAL__MAXR )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = 10 + UBND_IN( 1 ) = 19 + LBND_OUT( 1 ) = 12 + UBND_OUT( 1 ) = 20 + LBND( 1 ) = 11 + UBND( 1 ) = 17 + M = AST_UNITMAP( 1, ' ', STATUS ) + IF( SPREAD .EQ. AST__GAUSS ) THEN + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + ELSE + PARAMS(1) = 2.0 + PARAMS(2) = 0.5 + END IF + TOL = 0.1 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + DO I = LBND_IN(1), UBND_IN(1) + IN( I - LBND_IN(1) + 1 ) = I*K + IN_VAR( I - LBND_IN(1) + 1 ) = I + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + DO I = LBND_OUT(1), UBND(1) + IGNORE = ( SPREAD .EQ. AST__GAUSS .AND. + : ( I .LE. LBND_OUT(1) + 1 .OR. + : I .GE. UBND(1) - 1 ) ) + IF( IGNORE ) THEN + + ELSE IF( .NOT. EQUALR( OUT( I - LBND_OUT(1) + 1 ), + : IN( I - LBND_IN(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT( I - LBND_OUT(1) + 1 ) ) ) + CALL MSG_SETD( 'B', DBLE( IN( I - LBND_IN(1) + 1 ) ) ) + CALL ERR_REP( ' ', 'TEST1R ^I: data ^V != ^B', STATUS ) + RETURN + ELSE IF( .NOT. EQUALR( OUT_VAR( I - LBND_OUT(1) + 1 ), + : IN_VAR( I - LBND_IN(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT_VAR(I-LBND_OUT(1)+1) ) ) + CALL MSG_SETD( 'B', DBLE( IN_VAR(I-LBND_IN(1)+1) ) ) + CALL ERR_REP( ' ', 'TEST1R ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END DO + DO I = UBND(1) + 1, UBND_OUT(1) + IF( .NOT. EQUALR( OUT( I - LBND_OUT(1) + 1 ), + : 0.0E0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT( I - LBND_OUT(1) + 1))) + CALL ERR_REP( ' ', 'TEST1R ^I: ^V != 0.0', STATUS ) + RETURN + ELSE IF( .NOT. EQUALR( OUT_VAR( I - LBND_OUT(1) + 1 ), + : 0.0E0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT_VAR(I-LBND_OUT(1)+1))) + CALL ERR_REP( ' ', 'TEST1R ^I: variance ^V != 0.0', + : STATUS ) + RETURN + END IF + END DO + + END IF + + END + + + + + +* ----------------------------------------------- +* Test 2 +* + + SUBROUTINE TEST2( DO, NAME, TYPE, + : LBND_IN, UBND_IN, IPIN, IPIN_VAR, + : LBND_OUT, UBND_OUT, IPOUT, IPOUT_VAR, + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + + INTEGER M, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), IPIN, IPIN_VAR, IPOUT, IPOUT_VAR, + : STATUS, DO, J + DOUBLE PRECISION TOL, PARAMS(*) + CHARACTER TYPE*(*), NAME*(*) + + IF( STATUS .NE. SAI__OK ) RETURN + + NAME = 'TEST2' + +* Fill the input data and variance arrays if required. + IF( TYPE .EQ. '_REAL' ) THEN + CALL TEST2R( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_DOUBLE' ) THEN + CALL TEST2D( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_INTEGER' ) THEN + CALL TEST2I( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( STATUS .EQ. SAI__OK ) then + STATUS = SAI__ERROR + CALL MSG_SETC( 'T', TYPE ) + CALL ERR_REP( ' ', 'Bad data type (^T) supplied to TEST2', + : STATUS ) + END IF + + END + + + + + SUBROUTINE TEST2D( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), STATUS, M, I, J, K, SPREAD + DOUBLE PRECISION IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), KFAC + LOGICAL EQUALD + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 1000.0D0, NUM_DTOD( VAL__MAXD )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -1 + UBND_IN( 1 ) = 2 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -1 + UBND( 1 ) = 1 + LBND_IN( 2 ) = 3 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 2 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 3 + UBND( 2 ) = 6 + M = AST_UNITMAP( 2, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = K*KFAC + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + K = 1 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + IF( K .LE. 4 .OR. MOD( K, 4 ) .EQ. 0 .OR. + : MOD( K, 4 ) .EQ. 3 ) THEN + IF( .NOT. EQUALD( OUT( K ), 0.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + CALL ERR_REP( ' ', 'TEST2D ^I: ^V != 0', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALD( OUT_VAR( K ), 0.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ))) + CALL ERR_REP( ' ', 'TEST2D ^I: variance ^V '// + : '!= 0', STATUS ) + RETURN + END IF + ELSE + IF( .NOT. EQUALD( OUT( K ), IN( K - 3 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( K - 3 ) ) ) + CALL ERR_REP( ' ', 'TEST2D ^I: data ^V != ^B', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALD( OUT( K ), IN( K-3 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR( K - 3 ) ) ) + CALL ERR_REP( ' ', + : 'TEST2D ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END IF + K = K + 1 + END DO + END DO + + END IF + + END + + + + SUBROUTINE TEST2I( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), STATUS, M, I, J, K, SPREAD + INTEGER IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), KFAC + LOGICAL EQUALI + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 1000.0D0, NUM_ITOD( VAL__MAXI )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -1 + UBND_IN( 1 ) = 2 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -1 + UBND( 1 ) = 1 + LBND_IN( 2 ) = 3 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 2 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 3 + UBND( 2 ) = 6 + M = AST_UNITMAP( 2, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = K*KFAC + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + K = 1 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + IF( K .LE. 4 .OR. MOD( K, 4 ) .EQ. 0 .OR. + : MOD( K, 4 ) .EQ. 3 ) THEN + IF( .NOT. EQUALI( OUT( K ), 0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + CALL ERR_REP( ' ', 'TEST2I ^I: ^V != 0', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALI( OUT_VAR( K ), 0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ))) + CALL ERR_REP( ' ', 'TEST2I ^I: variance ^V '// + : '!= 0', STATUS ) + RETURN + END IF + ELSE + IF( .NOT. EQUALI( OUT( K ), IN( K - 3 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( K - 3 ) ) ) + CALL ERR_REP( ' ', 'TEST2I ^I: data ^V != ^B', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALI( OUT( K ), IN( K-3 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR( K - 3 ) ) ) + CALL ERR_REP( ' ', + : 'TEST2I ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END IF + K = K + 1 + END DO + END DO + + END IF + + END + + + + SUBROUTINE TEST2R( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), STATUS, M, I, J, K, SPREAD + REAL IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), KFAC + LOGICAL EQUALR + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 1000.0D0, NUM_RTOD( VAL__MAXR )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -1 + UBND_IN( 1 ) = 2 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -1 + UBND( 1 ) = 1 + LBND_IN( 2 ) = 3 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 2 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 3 + UBND( 2 ) = 6 + M = AST_UNITMAP( 2, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = K*KFAC + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + K = 1 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + IF( K .LE. 4 .OR. MOD( K, 4 ) .EQ. 0 .OR. + : MOD( K, 4 ) .EQ. 3 ) THEN + IF( .NOT. EQUALR( OUT( K ), 0.0E0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + CALL ERR_REP( ' ', 'TEST2R ^I: ^V != 0', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALR( OUT_VAR( K ), 0.0E0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ))) + CALL ERR_REP( ' ', 'TEST2R ^I: variance ^V '// + : '!= 0', STATUS ) + RETURN + END IF + ELSE + IF( .NOT. EQUALR( OUT( K ), IN( K - 3 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( K - 3 ) ) ) + CALL ERR_REP( ' ', 'TEST2R ^I: data ^V != ^B', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALR( OUT( K ), IN( K-3 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR( K - 3 ) ) ) + CALL ERR_REP( ' ', + : 'TEST2R ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END IF + K = K + 1 + END DO + END DO + + END IF + + END + + + + + +* ----------------------------------------------- +* Test 3 +* + + SUBROUTINE TEST3( DO, NAME, TYPE, + : LBND_IN, UBND_IN, IPIN, IPIN_VAR, + : LBND_OUT, UBND_OUT, IPOUT, IPOUT_VAR, + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + + INTEGER M, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), IPIN, IPIN_VAR, IPOUT, IPOUT_VAR, + : STATUS, DO, J + DOUBLE PRECISION TOL, PARAMS(*) + CHARACTER TYPE*(*), NAME*(*) + + IF( STATUS .NE. SAI__OK ) RETURN + + NAME = 'TEST3' + +* Fill the input data and variance arrays if required. + IF( TYPE .EQ. '_REAL' ) THEN + CALL TEST3R( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_DOUBLE' ) THEN + CALL TEST3D( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_INTEGER' ) THEN + CALL TEST3I( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( STATUS .EQ. SAI__OK ) then + STATUS = SAI__ERROR + CALL MSG_SETC( 'T', TYPE ) + CALL ERR_REP( ' ', 'Bad data type (^T) supplied to TEST3', + : STATUS ) + END IF + + END + + + + + SUBROUTINE TEST3D( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K, L, K2 + DOUBLE PRECISION IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), KFAC + LOGICAL EQUALD + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 1000.0D0, NUM_DTOD( VAL__MAXD )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -1 + UBND_IN( 1 ) = 2 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -1 + UBND( 1 ) = 1 + LBND_IN( 2 ) = 3 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 2 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 3 + UBND( 2 ) = 6 + LBND_IN( 3 ) = -1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 0 + UBND_OUT( 3 ) = 2 + LBND( 3 ) = -1 + UBND( 3 ) = 1 + M = AST_UNITMAP( 3, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO L = LBND_IN(3), UBND_IN(3) + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = K*KFAC + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + K = 1 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + + K2 = MOD( K - 1, 16 ) + 1 + IF( K2 .LE. 4 .OR. MOD( K2, 4 ) .EQ. 0 .OR. + : MOD( K2, 4 ) .EQ. 3 .OR. + : L .EQ. 2 ) THEN + IF( .NOT. EQUALD( OUT( K ), 0.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST3D ^I: ^V != 0', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALD( OUT_VAR( K ), + ; 0.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT_VAR( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST3D ^I: variance ^V '// + : '!= 0', STATUS ) + RETURN + END IF + ELSE + IF( .NOT. EQUALD( OUT( K ), IN( K + 13 ))) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( K+13 ) ) ) + CALL ERR_REP( ' ', 'TEST3D ^I: data ^V != ^B', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALD( OUT( K ), IN(K+13) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR( K+13 ) ) ) + CALL ERR_REP( ' ', + : 'TEST3D ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END IF + K = K + 1 + END DO + END DO + END DO + END IF + + END + + + + SUBROUTINE TEST3I( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K, L, K2 + INTEGER IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), KFAC + LOGICAL EQUALI + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 1000.0D0, NUM_ITOD( VAL__MAXI )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -1 + UBND_IN( 1 ) = 2 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -1 + UBND( 1 ) = 1 + LBND_IN( 2 ) = 3 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 2 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 3 + UBND( 2 ) = 6 + LBND_IN( 3 ) = -1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 0 + UBND_OUT( 3 ) = 2 + LBND( 3 ) = -1 + UBND( 3 ) = 1 + M = AST_UNITMAP( 3, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO L = LBND_IN(3), UBND_IN(3) + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = K*KFAC + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + K = 1 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + + K2 = MOD( K - 1, 16 ) + 1 + IF( K2 .LE. 4 .OR. MOD( K2, 4 ) .EQ. 0 .OR. + : MOD( K2, 4 ) .EQ. 3 .OR. + : L .EQ. 2 ) THEN + IF( .NOT. EQUALI( OUT( K ), 0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST3I ^I: ^V != 0', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALI( OUT_VAR( K ), + ; 0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT_VAR( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST3I ^I: variance ^V '// + : '!= 0', STATUS ) + RETURN + END IF + ELSE + IF( .NOT. EQUALI( OUT( K ), IN( K + 13 ))) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( K+13 ) ) ) + CALL ERR_REP( ' ', 'TEST3I ^I: data ^V != ^B', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALI( OUT( K ), IN(K+13) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR( K+13 ) ) ) + CALL ERR_REP( ' ', + : 'TEST3I ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END IF + K = K + 1 + END DO + END DO + END DO + END IF + + END + + + + SUBROUTINE TEST3R( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K, L, K2 + REAL IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), KFAC + LOGICAL EQUALR + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 1000.0D0, NUM_RTOD( VAL__MAXR )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -1 + UBND_IN( 1 ) = 2 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -1 + UBND( 1 ) = 1 + LBND_IN( 2 ) = 3 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 2 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 3 + UBND( 2 ) = 6 + LBND_IN( 3 ) = -1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 0 + UBND_OUT( 3 ) = 2 + LBND( 3 ) = -1 + UBND( 3 ) = 1 + M = AST_UNITMAP( 3, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO L = LBND_IN(3), UBND_IN(3) + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = K*KFAC + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + K = 1 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + + K2 = MOD( K - 1, 16 ) + 1 + IF( K2 .LE. 4 .OR. MOD( K2, 4 ) .EQ. 0 .OR. + : MOD( K2, 4 ) .EQ. 3 .OR. + : L .EQ. 2 ) THEN + IF( .NOT. EQUALR( OUT( K ), 0.0E0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST3R ^I: ^V != 0', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALR( OUT_VAR( K ), + ; 0.0E0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT_VAR( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST3R ^I: variance ^V '// + : '!= 0', STATUS ) + RETURN + END IF + ELSE + IF( .NOT. EQUALR( OUT( K ), IN( K + 13 ))) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( K+13 ) ) ) + CALL ERR_REP( ' ', 'TEST3R ^I: data ^V != ^B', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALR( OUT( K ), IN(K+13) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR( K+13 ) ) ) + CALL ERR_REP( ' ', + : 'TEST3R ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END IF + K = K + 1 + END DO + END DO + END DO + END IF + + END + + + + + +* ----------------------------------------------- +* Test 4 +* + + SUBROUTINE TEST4( DO, NAME, TYPE, + : LBND_IN, UBND_IN, IPIN, IPIN_VAR, + : LBND_OUT, UBND_OUT, IPOUT, IPOUT_VAR, + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + + INTEGER M, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), IPIN, IPIN_VAR, IPOUT, IPOUT_VAR, + : STATUS, DO, J + DOUBLE PRECISION TOL, PARAMS(*) + CHARACTER TYPE*(*), NAME*(*) + + IF( STATUS .NE. SAI__OK ) RETURN + + NAME = 'TEST4' + +* Fill the input data and variance arrays if required. + IF( TYPE .EQ. '_REAL' ) THEN + CALL TEST4R( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_DOUBLE' ) THEN + CALL TEST4D( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_INTEGER' ) THEN + CALL TEST4I( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( STATUS .EQ. SAI__OK ) then + STATUS = SAI__ERROR + CALL MSG_SETC( 'T', TYPE ) + CALL ERR_REP( ' ', 'Bad data type (^T) supplied to TEST4', + : STATUS ) + END IF + + END + + + + + SUBROUTINE TEST4D( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I + DOUBLE PRECISION IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), K + LOGICAL EQUALD + + IF( STATUS .NE. SAI__OK ) RETURN + + K = MIN( 1000.0D0, NUM_DTOD( VAL__MAXD )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = 10 + UBND_IN( 1 ) = 19 + LBND_OUT( 1 ) = 12 + UBND_OUT( 1 ) = 20 + LBND( 1 ) = 11 + UBND( 1 ) = 17 + M = AST_SHIFTMAP( 1, 3.0D0, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.1 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + DO I = LBND_IN(1), UBND_IN(1) + IN( I - LBND_IN(1) + 1 ) = I*K + IN_VAR( I - LBND_IN(1) + 1 ) = I + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + + DO I = LBND_OUT(1), LBND(1) + 2 + IF( .NOT. EQUALD( OUT( I - LBND_OUT(1) + 1 ), + : 0.0D0) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT( I - LBND_OUT(1) + 1 ) ) ) + CALL ERR_REP( ' ', 'TEST4D ^I: ^V != BAD', STATUS ) + RETURN + ELSE IF( .NOT. EQUALD( OUT_VAR( I - LBND_OUT(1) + 1 ), + : 0.0D0) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT_VAR(I-LBND_OUT(1)+1) ) ) + CALL ERR_REP( ' ', 'TEST4D ^I: variance ^V != BAD', + : STATUS ) + RETURN + END IF + END DO + + DO I = LBND(1) + 3, UBND_OUT(1) + IF( .NOT. EQUALD( OUT( I - LBND_OUT(1) + 1 ), + : IN( I - 3 - LBND_IN(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + IF( OUT( I - LBND_OUT(1) + 1 ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( I - LBND_OUT(1) + 1))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( I -3 - LBND_IN(1) + 1 ) ) ) + CALL ERR_REP( ' ', 'TEST4D ^I: data ^V != ^B', STATUS ) + RETURN + ELSE IF( .NOT. EQUALD( OUT_VAR( I - LBND_OUT(1) + 1 ), + : IN_VAR( I - 3 - LBND_IN(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + IF( OUT_VAR(I-LBND_OUT(1)+1) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR(I-LBND_OUT(1)+1))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR(I-3-LBND_IN(1)+1) ) ) + CALL ERR_REP( ' ', 'TEST4D ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END DO + + END IF + + END + + SUBROUTINE TEST4I( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I + INTEGER IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), K + LOGICAL EQUALI + + IF( STATUS .NE. SAI__OK ) RETURN + + K = MIN( 1000.0D0, NUM_ITOD( VAL__MAXI )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = 10 + UBND_IN( 1 ) = 19 + LBND_OUT( 1 ) = 12 + UBND_OUT( 1 ) = 20 + LBND( 1 ) = 11 + UBND( 1 ) = 17 + M = AST_SHIFTMAP( 1, 3.0D0, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.1 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + DO I = LBND_IN(1), UBND_IN(1) + IN( I - LBND_IN(1) + 1 ) = I*K + IN_VAR( I - LBND_IN(1) + 1 ) = I + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + + DO I = LBND_OUT(1), LBND(1) + 2 + IF( .NOT. EQUALI( OUT( I - LBND_OUT(1) + 1 ), + : 0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT( I - LBND_OUT(1) + 1 ) ) ) + CALL ERR_REP( ' ', 'TEST4I ^I: ^V != BAD', STATUS ) + RETURN + ELSE IF( .NOT. EQUALI( OUT_VAR( I - LBND_OUT(1) + 1 ), + : 0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT_VAR(I-LBND_OUT(1)+1) ) ) + CALL ERR_REP( ' ', 'TEST4I ^I: variance ^V != BAD', + : STATUS ) + RETURN + END IF + END DO + + DO I = LBND(1) + 3, UBND_OUT(1) + IF( .NOT. EQUALI( OUT( I - LBND_OUT(1) + 1 ), + : IN( I - 3 - LBND_IN(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + IF( OUT( I - LBND_OUT(1) + 1 ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( I - LBND_OUT(1) + 1))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( I -3 - LBND_IN(1) + 1 ) ) ) + CALL ERR_REP( ' ', 'TEST4I ^I: data ^V != ^B', STATUS ) + RETURN + ELSE IF( .NOT. EQUALI( OUT_VAR( I - LBND_OUT(1) + 1 ), + : IN_VAR( I - 3 - LBND_IN(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + IF( OUT_VAR(I-LBND_OUT(1)+1) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR(I-LBND_OUT(1)+1))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR(I-3-LBND_IN(1)+1) ) ) + CALL ERR_REP( ' ', 'TEST4I ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END DO + + END IF + + END + + SUBROUTINE TEST4R( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I + REAL IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), K + LOGICAL EQUALR + + IF( STATUS .NE. SAI__OK ) RETURN + + K = MIN( 1000.0D0, NUM_RTOD( VAL__MAXR )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = 10 + UBND_IN( 1 ) = 19 + LBND_OUT( 1 ) = 12 + UBND_OUT( 1 ) = 20 + LBND( 1 ) = 11 + UBND( 1 ) = 17 + M = AST_SHIFTMAP( 1, 3.0D0, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.1 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + DO I = LBND_IN(1), UBND_IN(1) + IN( I - LBND_IN(1) + 1 ) = I*K + IN_VAR( I - LBND_IN(1) + 1 ) = I + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + + DO I = LBND_OUT(1), LBND(1) + 2 + IF( .NOT. EQUALR( OUT( I - LBND_OUT(1) + 1 ), + : 0.0E0) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT( I - LBND_OUT(1) + 1 ) ) ) + CALL ERR_REP( ' ', 'TEST4R ^I: ^V != BAD', STATUS ) + RETURN + ELSE IF( .NOT. EQUALR( OUT_VAR( I - LBND_OUT(1) + 1 ), + : 0.0E0) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETD( 'V', DBLE( OUT_VAR(I-LBND_OUT(1)+1) ) ) + CALL ERR_REP( ' ', 'TEST4R ^I: variance ^V != BAD', + : STATUS ) + RETURN + END IF + END DO + + DO I = LBND(1) + 3, UBND_OUT(1) + IF( .NOT. EQUALR( OUT( I - LBND_OUT(1) + 1 ), + : IN( I - 3 - LBND_IN(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + IF( OUT( I - LBND_OUT(1) + 1 ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( I - LBND_OUT(1) + 1))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( I -3 - LBND_IN(1) + 1 ) ) ) + CALL ERR_REP( ' ', 'TEST4R ^I: data ^V != ^B', STATUS ) + RETURN + ELSE IF( .NOT. EQUALR( OUT_VAR( I - LBND_OUT(1) + 1 ), + : IN_VAR( I - 3 - LBND_IN(1) + 1 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + IF( OUT_VAR(I-LBND_OUT(1)+1) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR(I-LBND_OUT(1)+1))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR(I-3-LBND_IN(1)+1) ) ) + CALL ERR_REP( ' ', 'TEST4R ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END DO + + END IF + + END + + + +* ----------------------------------------------- +* Test 5 +* + + SUBROUTINE TEST5( DO, NAME, TYPE, + : LBND_IN, UBND_IN, IPIN, IPIN_VAR, + : LBND_OUT, UBND_OUT, IPOUT, IPOUT_VAR, + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + + INTEGER M, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), IPIN, IPIN_VAR, IPOUT, IPOUT_VAR, + : STATUS, DO, J + DOUBLE PRECISION TOL, PARAMS(*) + CHARACTER TYPE*(*), NAME*(*) + + IF( STATUS .NE. SAI__OK ) RETURN + + NAME = 'TEST5' + +* Fill the input data and variance arrays if required. + IF( TYPE .EQ. '_REAL' ) THEN + CALL TEST5R( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_DOUBLE' ) THEN + CALL TEST5D( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_INTEGER' ) THEN + CALL TEST5I( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( STATUS .EQ. SAI__OK ) then + STATUS = SAI__ERROR + CALL MSG_SETC( 'T', TYPE ) + CALL ERR_REP( ' ', 'Bad data type (^T) supplied to TEST5', + : STATUS ) + END IF + + END + + + + + SUBROUTINE TEST5D( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K + DOUBLE PRECISION IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), KFAC, SHIFTS(2) + LOGICAL EQUALD + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 1000.0D0, NUM_DTOD( VAL__MAXD )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -1 + UBND_IN( 1 ) = 2 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -1 + UBND( 1 ) = 1 + LBND_IN( 2 ) = 3 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 2 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 3 + UBND( 2 ) = 6 + SHIFTS(1) = 3.0D0 + SHIFTS(2) = -1.0D0 + M = AST_SHIFTMAP( 2, SHIFTS, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = K*KFAC + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + K = 1 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + IF( MOD( K - 1, 4 ) .LT. 2 ) THEN + IF( .NOT. EQUALD( OUT( K ), 0.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST5D ^I: ^V != BAD', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALD( OUT_VAR( K ), + : 0.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT_VAR( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST5D ^I: variance ^V '// + : '!= BAD', STATUS ) + RETURN + END IF + ELSE + IF( .NOT. EQUALD( OUT( K ), IN( K - 2 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( K - 2 ) ) ) + CALL ERR_REP( ' ', 'TEST5D ^I: data ^V != ^B', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALD( OUT( K ), IN( K-2 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR( K - 2 ) ) ) + CALL ERR_REP( ' ', + : 'TEST5D ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END IF + K = K + 1 + END DO + END DO + + END IF + + END + + + + SUBROUTINE TEST5I( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K + INTEGER IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), KFAC, SHIFTS(2) + LOGICAL EQUALI + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 1000.0D0, NUM_ITOD( VAL__MAXI )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -1 + UBND_IN( 1 ) = 2 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -1 + UBND( 1 ) = 1 + LBND_IN( 2 ) = 3 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 2 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 3 + UBND( 2 ) = 6 + SHIFTS(1) = 3.0D0 + SHIFTS(2) = -1.0D0 + M = AST_SHIFTMAP( 2, SHIFTS, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = K*KFAC + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + K = 1 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + IF( MOD( K - 1, 4 ) .LT. 2 ) THEN + IF( .NOT. EQUALI( OUT( K ), 0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST5I ^I: ^V != BAD', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALI( OUT_VAR( K ), + : 0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT_VAR( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST5I ^I: variance ^V '// + : '!= BAD', STATUS ) + RETURN + END IF + ELSE + IF( .NOT. EQUALI( OUT( K ), IN( K - 2 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( K - 2 ) ) ) + CALL ERR_REP( ' ', 'TEST5I ^I: data ^V != ^B', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALI( OUT( K ), IN( K-2 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR( K - 2 ) ) ) + CALL ERR_REP( ' ', + : 'TEST5I ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END IF + K = K + 1 + END DO + END DO + + END IF + + END + + + + SUBROUTINE TEST5R( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K + REAL IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), KFAC, SHIFTS(2) + LOGICAL EQUALR + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 1000.0D0, NUM_RTOD( VAL__MAXR )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -1 + UBND_IN( 1 ) = 2 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -1 + UBND( 1 ) = 1 + LBND_IN( 2 ) = 3 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 2 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 3 + UBND( 2 ) = 6 + SHIFTS(1) = 3.0D0 + SHIFTS(2) = -1.0D0 + M = AST_SHIFTMAP( 2, SHIFTS, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = K*KFAC + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + K = 1 + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + IF( MOD( K - 1, 4 ) .LT. 2 ) THEN + IF( .NOT. EQUALR( OUT( K ), 0.0E0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST5R ^I: ^V != BAD', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALR( OUT_VAR( K ), + : 0.0E0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT_VAR( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST5R ^I: variance ^V '// + : '!= BAD', STATUS ) + RETURN + END IF + ELSE + IF( .NOT. EQUALR( OUT( K ), IN( K - 2 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( K - 2 ) ) ) + CALL ERR_REP( ' ', 'TEST5R ^I: data ^V != ^B', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALR( OUT( K ), IN( K-2 ) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR( K - 2 ) ) ) + CALL ERR_REP( ' ', + : 'TEST5R ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END IF + K = K + 1 + END DO + END DO + + END IF + + END + + + + + +* ----------------------------------------------- +* Test 6 +* + + SUBROUTINE TEST6( DO, NAME, TYPE, + : LBND_IN, UBND_IN, IPIN, IPIN_VAR, + : LBND_OUT, UBND_OUT, IPOUT, IPOUT_VAR, + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + + INTEGER M, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : LBND(*), UBND(*), IPIN, IPIN_VAR, IPOUT, IPOUT_VAR, + : STATUS, DO, J + DOUBLE PRECISION TOL, PARAMS(*) + CHARACTER TYPE*(*), NAME*(*) + + IF( STATUS .NE. SAI__OK ) RETURN + + NAME = 'TEST6' + +* Fill the input data and variance arrays if required. + IF( TYPE .EQ. '_REAL' ) THEN + CALL TEST6R( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_DOUBLE' ) THEN + CALL TEST6D( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( TYPE .EQ. '_INTEGER' ) THEN + CALL TEST6I( DO, LBND_IN, UBND_IN, %VAL(CNF_PVAL(IPIN)), + : %VAL(CNF_PVAL(IPIN_VAR)), LBND_OUT, UBND_OUT, + : %VAL(CNF_PVAL(IPOUT)),%VAL(CNF_PVAL(IPOUT_VAR)), + : LBND, UBND, M, PARAMS, TOL, J, STATUS ) + + ELSE IF( STATUS .EQ. SAI__OK ) then + STATUS = SAI__ERROR + CALL MSG_SETC( 'T', TYPE ) + CALL ERR_REP( ' ', 'Bad data type (^T) supplied to TEST6', + : STATUS ) + END IF + + END + + + + + SUBROUTINE TEST6D( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K, L, K2 + DOUBLE PRECISION IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), KFAC, SHIFTS(3) + LOGICAL EQUALD + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 1000.0D0, NUM_DTOD( VAL__MAXD )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -1 + UBND_IN( 1 ) = 2 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -1 + UBND( 1 ) = 1 + LBND_IN( 2 ) = 3 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 2 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 3 + UBND( 2 ) = 6 + LBND_IN( 3 ) = -1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 0 + UBND_OUT( 3 ) = 2 + LBND( 3 ) = -1 + UBND( 3 ) = 1 + SHIFTS(1) = 3.0D0 + SHIFTS(2) = -1.0D0 + SHIFTS(3) = 1.0D0 + M = AST_SHIFTMAP( 3, SHIFTS, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO L = LBND_IN(3), UBND_IN(3) + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = K*KFAC + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + K = 1 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + + K2 = MOD( K - 1, 16 ) + 1 + IF( MOD( K2 - 1, 4 ) .LT. 2 ) THEN + IF( .NOT. EQUALD( OUT( K ), 0.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST6D ^I: ^V != BAD', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALD( OUT_VAR( K ), + : 0.0D0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT_VAR( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST6D ^I: variance ^V '// + : '!= BAD', STATUS ) + RETURN + END IF + ELSE + IF( .NOT. EQUALD( OUT( K ), IN( K - 2 ))) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( K-2 ) ) ) + CALL ERR_REP( ' ', 'TEST6D ^I: data ^V != ^B', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALD( OUT( K ), IN(K-2) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADD ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR( K-2 ) ) ) + CALL ERR_REP( ' ', + : 'TEST6D ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END IF + K = K + 1 + END DO + END DO + END DO + END IF + + END + + + + SUBROUTINE TEST6I( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K, L, K2 + INTEGER IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), KFAC, SHIFTS(3) + LOGICAL EQUALI + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 1000.0D0, NUM_ITOD( VAL__MAXI )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -1 + UBND_IN( 1 ) = 2 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -1 + UBND( 1 ) = 1 + LBND_IN( 2 ) = 3 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 2 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 3 + UBND( 2 ) = 6 + LBND_IN( 3 ) = -1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 0 + UBND_OUT( 3 ) = 2 + LBND( 3 ) = -1 + UBND( 3 ) = 1 + SHIFTS(1) = 3.0D0 + SHIFTS(2) = -1.0D0 + SHIFTS(3) = 1.0D0 + M = AST_SHIFTMAP( 3, SHIFTS, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO L = LBND_IN(3), UBND_IN(3) + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = K*KFAC + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + K = 1 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + + K2 = MOD( K - 1, 16 ) + 1 + IF( MOD( K2 - 1, 4 ) .LT. 2 ) THEN + IF( .NOT. EQUALI( OUT( K ), 0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST6I ^I: ^V != BAD', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALI( OUT_VAR( K ), + : 0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT_VAR( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST6I ^I: variance ^V '// + : '!= BAD', STATUS ) + RETURN + END IF + ELSE + IF( .NOT. EQUALI( OUT( K ), IN( K - 2 ))) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( K-2 ) ) ) + CALL ERR_REP( ' ', 'TEST6I ^I: data ^V != ^B', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALI( OUT( K ), IN(K-2) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADI ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR( K-2 ) ) ) + CALL ERR_REP( ' ', + : 'TEST6I ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END IF + K = K + 1 + END DO + END DO + END DO + END IF + + END + + + + SUBROUTINE TEST6R( DO, LBND_IN, UBND_IN, IN, IN_VAR, LBND_OUT, + : UBND_OUT, OUT, OUT_VAR, LBND, UBND, M, + : PARAMS, TOL, SPREAD, STATUS ) + + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'PRM_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'CNF_PAR' + INCLUDE 'NUM_DEC' + INCLUDE 'NUM_DEF' + + INTEGER DO, LBND_IN(*), UBND_IN(*), LBND_OUT(*), UBND_OUT(*), + : SPREAD, LBND(*), UBND(*), STATUS, M, I, J, K, L, K2 + REAL IN(*), IN_VAR(*), OUT(*), OUT_VAR(*) + DOUBLE PRECISION TOL, PARAMS(*), KFAC, SHIFTS(3) + LOGICAL EQUALR + + IF( STATUS .NE. SAI__OK ) RETURN + + KFAC = MIN( 1000.0D0, NUM_RTOD( VAL__MAXR )/20.0 ) + +* Return the scalar parameters of the test if required. + IF( DO .EQ. 0 ) THEN + LBND_IN( 1 ) = -1 + UBND_IN( 1 ) = 2 + LBND_OUT( 1 ) = 0 + UBND_OUT( 1 ) = 3 + LBND( 1 ) = -1 + UBND( 1 ) = 1 + LBND_IN( 2 ) = 3 + UBND_IN( 2 ) = 6 + LBND_OUT( 2 ) = 2 + UBND_OUT( 2 ) = 5 + LBND( 2 ) = 3 + UBND( 2 ) = 6 + LBND_IN( 3 ) = -1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 0 + UBND_OUT( 3 ) = 2 + LBND( 3 ) = -1 + UBND( 3 ) = 1 + SHIFTS(1) = 3.0D0 + SHIFTS(2) = -1.0D0 + SHIFTS(3) = 1.0D0 + M = AST_SHIFTMAP( 3, SHIFTS, ' ', STATUS ) + PARAMS(1) = 2.0 + PARAMS(2) = 2.0 + TOL = 0.0 + +* Fill the input data and variance arrays if required. + ELSE IF( DO .EQ. 1 ) THEN + K = 1 + DO L = LBND_IN(3), UBND_IN(3) + DO J = LBND_IN(2), UBND_IN(2) + DO I = LBND_IN(1), UBND_IN(1) + IN( K ) = K*KFAC + IN_VAR( K ) = K + K = K + 1 + END DO + END DO + END DO + +* Otherwise check output data and variance arrays look right. + ELSE + K = 1 + DO L = LBND_OUT(3), UBND_OUT(3) + DO J = LBND_OUT(2), UBND_OUT(2) + DO I = LBND_OUT(1), UBND_OUT(1) + + K2 = MOD( K - 1, 16 ) + 1 + IF( MOD( K2 - 1, 4 ) .LT. 2 ) THEN + IF( .NOT. EQUALR( OUT( K ), 0.0E0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST6R ^I: ^V != BAD', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALR( OUT_VAR( K ), + : 0.0E0 ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT_VAR( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ))) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL ERR_REP( ' ', 'TEST6R ^I: variance ^V '// + : '!= BAD', STATUS ) + RETURN + END IF + ELSE + IF( .NOT. EQUALR( OUT( K ), IN( K - 2 ))) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN( K-2 ) ) ) + CALL ERR_REP( ' ', 'TEST6R ^I: data ^V != ^B', + : STATUS ) + RETURN + ELSE IF( .NOT. EQUALR( OUT( K ), IN(K-2) ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', K ) + IF( OUT( K ) .NE. VAL__BADR ) THEN + CALL MSG_SETD( 'V', DBLE( OUT_VAR( K ) ) ) + ELSE + CALL MSG_SETC( 'V', 'BAD' ) + END IF + CALL MSG_SETD( 'B', DBLE( IN_VAR( K-2 ) ) ) + CALL ERR_REP( ' ', + : 'TEST6R ^I: variance ^V != ^B', + : STATUS ) + RETURN + END IF + END IF + K = K + 1 + END DO + END DO + END DO + END IF + + END + + + diff --git a/ast/ast_tester/testrebinseq.f b/ast/ast_tester/testrebinseq.f new file mode 100644 index 0000000..3ab4e43 --- /dev/null +++ b/ast/ast_tester/testrebinseq.f @@ -0,0 +1,1580 @@ + program testrebin + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + integer status + double precision params(2) + character ch + status = sai__ok + + call ast_begin( status ) + + params(1) = 1.5 + params(2) = 1 + + call tests( 1, AST__GAUSS, params, status ) + call tests( 2, AST__GAUSS, params, status ) + call tests( 3, AST__GAUSS, params, status ) + call tests( 1, AST__NEAREST, params, status ) + call tests( 2, AST__NEAREST, params, status ) + call tests( 3, AST__NEAREST, params, status ) + call tests( 1, AST__LINEAR, params, status ) + call tests( 2, AST__LINEAR, params, status ) + call tests( 3, AST__LINEAR, params, status ) + + call ast_end( status ) + call ast_flushmemory( 1 ) + + if( status .eq. sai__ok ) then + write(*,*) 'All AST_REBINSEQ tests passed' + else + write(*,*) 'AST_REBINSEQ tests failed' + end if + + end + + subroutine tests( NDIM, SPREAD, params, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + integer spread, status, ndim + double precision params(2) + + if( status .ne. sai__ok ) return + + call test1( NDIM, SPREAD, params, status ) + call test2( NDIM, SPREAD, params, status ) + call test3( NDIM, SPREAD, params, status ) + call test4( NDIM, SPREAD, params, status ) + call test5( NDIM, SPREAD, params, status ) + call test6( NDIM, SPREAD, params, status ) + call test7( NDIM, SPREAD, params, status ) + call test8( NDIM, SPREAD, params, status ) + call test9( NDIM, SPREAD, params, status ) + call test10( NDIM, SPREAD, params, status ) + call test11( NDIM, SPREAD, params, status ) + call test12( NDIM, SPREAD, params, status ) + + if( status .ne. SAI__OK ) then + call msg_seti( 'N', ndim ) + + if( spread .eq. AST__GAUSS ) then + call msg_setc( 'S', 'AST__GAUSS' ) + else if( spread .eq. AST__NEAREST ) then + call msg_setc( 'S', 'AST__NEAREST' ) + else if( spread .eq. AST__LINEAR ) then + call msg_setc( 'S', 'AST__LINEAR' ) + endif + call err_rep( ' ', 'Spread=^S (^N-dimensional)', status ) + endif + + end + + + + + SUBROUTINE ADDNOISE( N, ARRAY, SIGMA, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'PRM_PAR' + + INTEGER BUFSIZE + PARAMETER ( BUFSIZE = 100 ) + + INTEGER N, STATUS, MM, IAT, NUSED, I + DOUBLE PRECISION ARRAY( N ) + DOUBLE PRECISION SIGMA + DOUBLE PRECISION NOISE( BUFSIZE ) + DOUBLE PRECISION JUNK( BUFSIZE ) + + CHARACTER FWD(1)*80 + CHARACTER INV(1)*80 + + DATA JUNK/ BUFSIZE*0.0D0 / + + IF( STATUS .NE. SAI__OK ) RETURN + + FWD(1) = 'Y=Gauss(0.0,' + IAT = 12 + CALL CHR_PUTD( SIGMA, FWD(1), IAT ) + CALL CHR_APPND( ')', FWD(1), IAT ) + INV(1) = 'X' + + MM = AST_MATHMAP( 1, 1, 1, FWD, 1, INV, ' ', STATUS ) + + NUSED = BUFSIZE + DO I = 1, N + IF( NUSED .EQ. BUFSIZE ) THEN + CALL AST_TRAN1( MM, BUFSIZE, JUNK, .TRUE., NOISE, STATUS ) + NUSED = 0 + END IF + NUSED = NUSED + 1 + ARRAY( I ) = ARRAY( I ) + NOISE( NUSED ) + END DO + + CALL AST_ANNUL( MM, STATUS ) + + END + + + + + + + SUBROUTINE TEST1( NDIM, SPREAD, PARAMS, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'PRM_PAR' + + INTEGER SPREAD, STATUS, NDIM + + INTEGER NX, NY, JHI + PARAMETER( NX = 100 ) + PARAMETER( NY = 200 ) + + + REAL IN( NX, NY ) + REAL OUT( NX, NY ) + DOUBLE PRECISION PARAMS(2), WEIGHTS( NX, NY ) + INTEGER MAP, LBND_IN(3), UBND_IN(3), LBND_OUT(3), UBND_OUT(3), + : FLAGS, I, J + INTEGER*8 NUSED + + IF( STATUS .NE. SAI__OK ) RETURN + CALL AST_BEGIN( STATUS ) + + DO I = 1, NX + DO J = 1, NY + IN( I, J ) = 1.0 + END DO + END DO + + LBND_IN( 1 ) = 0 + LBND_IN( 2 ) = 1 + LBND_IN( 3 ) = 1 + UBND_IN( 1 ) = NX - 1 + UBND_IN( 2 ) = NY + UBND_IN( 3 ) = 1 + + LBND_OUT( 1 ) = 0 + LBND_OUT( 2 ) = 1 + LBND_OUT( 3 ) = 1 + UBND_OUT( 1 ) = NX - 1 + UBND_OUT( 2 ) = NY + UBND_OUT( 3 ) = 1 + + FLAGS = AST__REBININIT + AST__REBINEND + + MAP = AST_UNITMAP( NDIM, ' ', STATUS ) + CALL AST_REBINSEQR( MAP, 0.0D0, NDIM, LBND_IN, UBND_IN, IN, IN, + : spread, PARAMS, FLAGS, 0.01D0, 50, VAL__BADR, + : NDIM, LBND_OUT, UBND_OUT, LBND_IN, UBND_IN, + : out, OUT, WEIGHTS, NUSED, STATUS ) + + IF( NDIM .EQ. 1 ) THEN + JHI = 1 + ELSE + JHI = ny + ENDIF + + DO I = 1, NX + DO J = 1, JHI + IF( ABS( OUT( I, J ) - 1.0 ) .GT. 1.0E-6 .AND. + : STATUS .EQ. SAI__OK ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETI( 'J', J ) + CALL MSG_SETR( 'V', OUT(I,J) ) + CALL ERR_REP( ' ', 'Output pixel (^I,^J) should be '// + : '1.0 but is ^V', status ) + END IF + END DO + END DO + + CALL AST_END( STATUS ) + IF( STATUS .NE. SAI__OK ) THEN + CALL ERR_REP( ' ', 'test1 failed', STATUS ) + END IF + + END + + + + SUBROUTINE TEST2( NDIM, SPREAD, PARAMS, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'PRM_PAR' + + INTEGER SPREAD, STATUS, NDIM + + INTEGER NX, NY, JHI + PARAMETER( NX = 100 ) + PARAMETER( NY = 200 ) + + + DOUBLE PRECISION IN( NX, NY ) + DOUBLE PRECISION OUT( NX, NY ) + DOUBLE PRECISION PARAMS(2), WEIGHTS( NX, NY ) + INTEGER MAP, LBND_IN(3), UBND_IN(3), LBND_OUT(3), UBND_OUT(3), + : FLAGS, I, J + INTEGER*8 NUSED + + IF( STATUS .NE. SAI__OK ) RETURN + CALL AST_BEGIN( STATUS ) + + DO I = 1, NX + DO J = 1, NY + IN( I, J ) = 1.0D0 + END DO + END DO + + LBND_IN( 1 ) = 0 + LBND_IN( 2 ) = 1 + UBND_IN( 1 ) = NX - 1 + UBND_IN( 2 ) = NY + + LBND_OUT( 1 ) = 0 + LBND_OUT( 2 ) = 1 + UBND_OUT( 1 ) = NX - 1 + UBND_OUT( 2 ) = NY + + LBND_IN( 3 ) = 1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 1 + UBND_OUT( 3 ) = 1 + + FLAGS = AST__REBININIT + + MAP = AST_UNITMAP( NDIM, ' ', STATUS ) + + DO I = 1, 3 + IF( I .EQ. 3 ) FLAGS = AST__REBINEND + CALL AST_REBINSEQD( MAP, 0.0D0, ndim, LBND_IN, UBND_IN, IN, IN, + : spread, PARAMS, FLAGS, 0.01D0, 50, VAL__BADD, + : ndim, LBND_OUT, UBND_OUT, LBND_IN, UBND_IN, + : OUT, OUT, WEIGHTS, NUSED, STATUS ) + END DO + + IF( NDIM .EQ. 1 ) THEN + JHI = 1 + ELSE + JHI = ny + ENDIF + + DO I = 1, NX + DO J = 1, JHI + IF( ABS( OUT( I, J ) - 1.0D0 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETI( 'J', J ) + CALL MSG_SETD( 'V', OUT(I,J) ) + CALL ERR_REP( ' ', 'Output pixel (^I,^J) should be '// + : '1.0 but is ^V', status ) + END IF + END DO + END DO + + CALL AST_END( STATUS ) + IF( STATUS .NE. SAI__OK ) THEN + CALL ERR_REP( ' ', 'test2 failed', STATUS ) + END IF + + END + + + + + + SUBROUTINE TEST3( NDIM, SPREAD, PARAMS, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'PRM_PAR' + + INTEGER SPREAD, STATUS, NDIM + + INTEGER NX, NY + PARAMETER( NX = 100 ) + PARAMETER( NY = 200 ) + + INTEGER IN( NX, NY ) + INTEGER OUT( NX, NY ) + DOUBLE PRECISION PARAMS(2), WEIGHTS( NX, NY ) + INTEGER MAP, LBND_IN(3), UBND_IN(3), LBND_OUT(3), UBND_OUT(3), + : FLAGS, I, J, JHI + INTEGER*8 NUSED + + IF( STATUS .NE. SAI__OK ) RETURN + CALL AST_BEGIN( STATUS ) + + DO I = 1, NX + DO J = 1, NY + IN( I, J ) = 1.0D0 + END DO + END DO + + LBND_IN( 1 ) = 0 + LBND_IN( 2 ) = 1 + UBND_IN( 1 ) = NX - 1 + UBND_IN( 2 ) = NY + + LBND_OUT( 1 ) = 0 + LBND_OUT( 2 ) = 1 + UBND_OUT( 1 ) = NX - 1 + UBND_OUT( 2 ) = NY + + LBND_IN( 3 ) = 1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 1 + UBND_OUT( 3 ) = 1 + + FLAGS = AST__REBININIT + AST__NONORM + + MAP = AST_UNITMAP( NDIM, ' ', STATUS ) + + DO I = 1, 3 + CALL AST_REBINSEQI( MAP, 0.0D0, ndim, LBND_IN, UBND_IN, IN, IN, + : spread, PARAMS, FLAGS, 0.01D0, 50, VAL__BADI, + : ndim, LBND_OUT, UBND_OUT, LBND_IN, UBND_IN, + : OUT, OUT, WEIGHTS, NUSED, STATUS ) + FLAGS = AST__NONORM + END DO + + IF( NDIM .EQ. 1 ) THEN + JHI = 1 + ELSE + JHI = ny + ENDIF + + DO I = 1, NX + DO J = 1, JHI + IF( OUT( I, J ) .NE. 3 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETI( 'J', J ) + CALL MSG_SETI( 'V', OUT(I,J) ) + CALL ERR_REP( ' ', 'Output pixel (^I,^J) should be '// + : '3 but is ^V', status ) + END IF + END DO + END DO + + CALL AST_END( STATUS ) + IF( STATUS .NE. SAI__OK ) THEN + CALL ERR_REP( ' ', 'test3 failed', STATUS ) + END IF + + END + + + + + + + SUBROUTINE TEST4( NDIM, SPREAD, PARAMS, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'PRM_PAR' + + INTEGER SPREAD, STATUS, NDIM + + INTEGER NX, NY + PARAMETER( NX = 100 ) + PARAMETER( NY = 200 ) + + REAL IN( NX, NY ) + REAL OUT( NX, NY ) + DOUBLE PRECISION PARAMS(2), WEIGHTS( NX, NY ), INA(3), + : INB(3), OUTA(3), OUTB(3), SUM, ANSWER + INTEGER MAP, LBND_IN(3), UBND_IN(3), LBND_OUT(3), UBND_OUT(3), + : FLAGS, I, J, LBOXG(3), UBOXG(3), JHI + INTEGER*8 NUSED + + IF( STATUS .NE. SAI__OK ) RETURN + CALL AST_BEGIN( STATUS ) + + DO I = 1, NX + DO J = 1, NY + IN( I, J ) = 1.0 + END DO + END DO + + LBND_IN( 1 ) = 0 + LBND_IN( 2 ) = 1 + UBND_IN( 1 ) = NX - 1 + UBND_IN( 2 ) = NY + + LBND_OUT( 1 ) = 0 + LBND_OUT( 2 ) = 1 + UBND_OUT( 1 ) = NX - 1 + UBND_OUT( 2 ) = NY + + LBND_IN( 3 ) = 1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 1 + UBND_OUT( 3 ) = 1 + + FLAGS = AST__REBININIT + AST__REBINEND + AST__CONSERVEFLUX + + INA( 1 ) = LBND_IN( 1 ) + INA( 2 ) = LBND_IN( 2 ) + INA( 3 ) = LBND_IN( 3 ) + INB( 1 ) = UBND_IN( 1 ) + INB( 2 ) = UBND_IN( 2 ) + INB( 3 ) = UBND_IN( 3 ) + 1.0D0 + + OUTA( 1 ) = 0.75*LBND_OUT( 1 ) + 0.25*UBND_OUT( 1 ) + OUTA( 2 ) = 0.75*LBND_OUT( 2 ) + 0.25*UBND_OUT( 2 ) + OUTA( 3 ) = INA( 3 ) + OUTB( 1 ) = 0.25*LBND_OUT( 1 ) + 0.75*UBND_OUT( 1 ) + OUTB( 2 ) = 0.25*LBND_OUT( 2 ) + 0.75*UBND_OUT( 2 ) + OUTB( 3 ) = INB( 3 ) + + MAP = AST_WINMAP( NDIM, INA, INB, OUTA, OUTB, ' ', STATUS ) + CALL AST_REBINSEQR( MAP, 0.0D0, ndim, LBND_IN, UBND_IN, IN, IN, + : spread, PARAMS, FLAGS, 0.01D0, 1000, + : VAL__BADR, + : ndim, LBND_OUT, UBND_OUT, LBND_IN, UBND_IN, + : OUT, OUT, WEIGHTS, NUSED, STATUS ) + + LBOXG( 1 ) = VAL__MAXI + LBOXG( 2 ) = VAL__MAXI + UBOXG( 1 ) = VAL__MINI + UBOXG( 2 ) = VAL__MINI + + SUM = 0.0D0 + + IF( NDIM .EQ. 1 ) THEN + JHI = 1 + ELSE + JHI = ny + ENDIF + + DO I = 1, NX + DO J = 1, JHI + + IF( OUT(I,J) .NE. VAL__BADR ) THEN + SUM = SUM + OUT(I,J) + IF( I .LT. LBOXG(1) ) THEN + LBOXG(1) = I + ELSE IF( I .GT. UBOXG(1) ) THEN + UBOXG(1) = I + ENDIF + IF( J .LT. LBOXG(2) ) THEN + LBOXG(2) = J + ELSE IF( J .GT. UBOXG(2) ) THEN + UBOXG(2) = J + ENDIF + ENDIF + END DO + END DO + + IF( NDIM .EQ. 1 ) THEN + + IF( ( ( SPREAD .EQ. AST__GAUSS ) .AND. ( + : LBOXG( 1 ) .NE. 24 .OR. + : UBOXG( 1 ) .NE. 77 )) .OR. ( + : ( SPREAD .EQ. AST__NEAREST ) .AND. ( + : LBOXG( 1 ) .NE. 26 .OR. + : UBOXG( 1 ) .NE. 75 )) .OR. ( + : ( SPREAD .EQ. AST__LINEAR ) .AND. ( + : LBOXG( 1 ) .NE. 25 .OR. + : UBOXG( 1 ) .NE. 76 ) ) ) THEN + STATUS = SAI__ERROR + CALL ERR_REP( ' ', 'Good pixel bounding box is wrong', + : STATUS ) + write(*,*) LBOXG, UBOXG + END IF + + IF( SPREAD .EQ. AST__NEAREST ) THEN + ANSWER = 100.0 + ELSE IF( SPREAD .EQ. AST__GAUSS ) THEN + ANSWER = 108.0 + ELSE IF( SPREAD .EQ. AST__LINEAR ) THEN + ANSWER = 104.0 + ELSE + ANSWER = -1 + END IF + + else + + IF( ( ( SPREAD .EQ. AST__GAUSS ) .AND. ( + : LBOXG( 1 ) .NE. 24 .OR. + : LBOXG( 2 ) .NE. 49 .OR. + : UBOXG( 1 ) .NE. 77 .OR. + : UBOXG( 2 ) .NE. 152 ) ) .OR. ( + : ( SPREAD .EQ. AST__NEAREST ) .AND. ( + : LBOXG( 1 ) .NE. 26 .OR. + : LBOXG( 2 ) .NE. 51 .OR. + : UBOXG( 1 ) .NE. 75 .OR. + : UBOXG( 2 ) .NE. 150 ) ) .OR. ( + : ( SPREAD .EQ. AST__LINEAR ) .AND. ( + : LBOXG( 1 ) .NE. 25 .OR. + : LBOXG( 2 ) .NE. 50 .OR. + : UBOXG( 1 ) .NE. 76 .OR. + : UBOXG( 2 ) .NE. 151 ) ) ) THEN + STATUS = SAI__ERROR + CALL ERR_REP( ' ', 'Good pixel bounding box is wrong', + : STATUS ) + write(*,*) LBOXG, UBOXG + END IF + + IF( SPREAD .EQ. AST__NEAREST ) THEN + ANSWER = 20000.0 + ELSE IF( SPREAD .EQ. AST__GAUSS ) THEN + ANSWER = 22464.0 + ELSE IF( SPREAD .EQ. AST__LINEAR ) THEN + ANSWER = 21216.0 + ELSE + ANSWER = -1 + END IF + endif + + IF( ABS( SUM - ANSWER ) .GT. 0.01 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', SUM ) + CALL MSG_SETD( 'W', ANSWER ) + CALL ERR_REP( ' ', 'Total output data sum is ^V (should '// + : 'be ^W).', STATUS ) + END IF + + CALL AST_END( STATUS ) + IF( STATUS .NE. SAI__OK ) THEN + CALL ERR_REP( ' ', 'test4 failed', STATUS ) + END IF + + END + + + + SUBROUTINE TEST5( NDIM, SPREAD, PARAMS, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'PRM_PAR' + + INTEGER SPREAD, STATUS, NDIM + + INTEGER NX_IN, NY_IN + PARAMETER( NX_IN = 100 ) + PARAMETER( NY_IN = 200 ) + + INTEGER BORDER_OUT + PARAMETER( BORDER_OUT = 10 ) + + INTEGER NX_OUT, NY_OUT + PARAMETER( NX_OUT = NX_IN + 2*BORDER_OUT ) + PARAMETER( NY_OUT = NY_IN + 2*BORDER_OUT ) + + DOUBLE PRECISION IN( NX_IN, NY_IN ) + DOUBLE PRECISION OUT( NX_OUT, NY_OUT ) + DOUBLE PRECISION PARAMS(2), WEIGHTS( NX_OUT, NY_OUT ), INA(3), + : INB(3), OUTA(3), OUTB(3), SUM, VA, VB + INTEGER MAP, LBND_IN(3), UBND_IN(3), LBND_OUT(3), UBND_OUT(3), + : K, FLAGS, I, J, LBOXG(3), UBOXG(3), JHI + INTEGER*8 NUSED + + IF( STATUS .NE. SAI__OK ) RETURN + CALL AST_BEGIN( STATUS ) + + LBND_IN( 1 ) = 0 + LBND_IN( 2 ) = 1 + UBND_IN( 1 ) = NX_IN - 1 + UBND_IN( 2 ) = NY_IN + + LBND_OUT( 1 ) = LBND_IN( 1 ) - BORDER_OUT + LBND_OUT( 2 ) = LBND_IN( 2 ) - BORDER_OUT + UBND_OUT( 1 ) = UBND_IN( 1 ) + BORDER_OUT + UBND_OUT( 2 ) = UBND_IN( 2 ) + BORDER_OUT + + LBND_IN( 3 ) = 1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 1 + UBND_OUT( 3 ) = 1 + + FLAGS = AST__REBININIT + AST__NONORM + + INA( 1 ) = LBND_IN( 1 ) + INA( 2 ) = LBND_IN( 2 ) + INA( 3 ) = LBND_IN( 3 ) + INB( 1 ) = UBND_IN( 1 ) + INB( 2 ) = UBND_IN( 2 ) + INB( 3 ) = UBND_IN( 3 ) + 1.0D0 + + DO K = 1, 3 + + DO I = 1, NX_IN + DO J = 1, NY_IN + IN( I, J ) = K + END DO + END DO + + VA = (k-1)*0.25 + VB = VA + 0.5 + + OUTA( 1 ) = VB*LBND_IN( 1 ) + VA*UBND_IN( 1 ) + OUTA( 2 ) = VB*LBND_IN( 2 ) + VA*UBND_IN( 2 ) + OUTB( 1 ) = VA*LBND_IN( 1 ) + VB*UBND_IN( 1 ) + OUTB( 2 ) = VA*LBND_IN( 2 ) + VB*UBND_IN( 2 ) + OUTA( 3 ) = INA( 3 ) + OUTB( 3 ) = INB( 3 ) + + MAP = AST_WINMAP( NDIM, INA, INB, OUTA, OUTB, ' ', STATUS ) + CALL AST_REBINSEQD( MAP, 0.0D0, ndim, LBND_IN, UBND_IN, IN, IN, + : spread, PARAMS, FLAGS, 0.01D0, 50, VAL__BADD, + : ndim, LBND_OUT, UBND_OUT, LBND_IN, UBND_IN, + : OUT, OUT, WEIGHTS, NUSED, STATUS ) + + FLAGS = AST__NONORM + END DO + + IF( NDIM .EQ. 1 ) THEN + JHI = 1 + ELSE + JHI = ny_out + ENDIF + + SUM = 0.0D0 + + DO I = 1, NX_OUT + DO J = 1, JHI + IF( OUT(I,J) .NE. VAL__BADR ) THEN + SUM = SUM + OUT(I,J) + ENDIF + END DO + END DO + + IF( NDIM .EQ. 1 ) THEN + IF( ABS( SUM - 600 ) .GT. 1.0E-3 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', SUM ) + CALL ERR_REP( ' ', 'Total output data sum is ^V (should '// + : 'be 600).', STATUS ) + + END IF + + IF( ABS( OUT(20,1) - 2.0 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', OUT(20,1) ) + CALL ERR_REP( ' ', 'Output pixel (20) should be 2, '// + : 'is ^V', STATUS ) + + ELSE IF( ABS( OUT(50,1) - 6.0 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', OUT(50,1) ) + CALL ERR_REP( ' ', 'Output pixel (50) should be 6, '// + : 'is ^V', STATUS ) + + ELSE IF( ABS( OUT(70,1) - 10.0 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', OUT(70,1) ) + CALL ERR_REP( ' ', 'Output pixel (70) should be 10, '// + : 'is ^V', STATUS ) + + ELSE IF( ABS( OUT(100,1) - 6.0 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', OUT(100,1) ) + CALL ERR_REP( ' ', 'Output pixel (100) should be 6, '// + : 'is ^V', STATUS ) + END IF + + ELSE IF( NDIM .EQ. 2 ) THEN + IF( ABS( SUM - 120000 ) .GT. 1.0E-3 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', SUM ) + CALL ERR_REP( ' ', 'Total output data sum is ^V (should '// + : 'be 120000).', STATUS ) + + END IF + + IF( ABS( OUT(40,40) - 4.0 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', OUT(40,40) ) + CALL ERR_REP( ' ', 'Output pixel (40,40) should be 4, '// + : 'is ^V', STATUS ) + + ELSE IF( ABS( OUT(50,90) - 12.0 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', OUT(50,90) ) + CALL ERR_REP( ' ', 'Output pixel (50,90) should be 12, '// + : 'is ^V', STATUS ) + + ELSE IF( ABS( OUT(70,80) - 8.0 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', OUT(70,80) ) + CALL ERR_REP( ' ', 'Output pixel (70,80) should be 8, '// + : 'is ^V', STATUS ) + + ELSE IF( ABS( OUT(70,130) - 20.0 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', OUT(70,130) ) + CALL ERR_REP( ' ', 'Output pixel (70,130) should be 20, '// + : 'is ^V', STATUS ) + + ELSE IF( ABS( OUT(20,130) - 0.0 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', OUT(20,130) ) + CALL ERR_REP( ' ', 'Output pixel (20,130) should be 0, '// + : 'is ^V', STATUS ) + + END IF + END IF + + CALL AST_END( STATUS ) + IF( STATUS .NE. SAI__OK ) THEN + CALL ERR_REP( ' ', 'test5 failed', STATUS ) + END IF + + END + + + + + SUBROUTINE TEST6( NDIM, SPREAD, PARAMS, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'PRM_PAR' + + INTEGER SPREAD, STATUS, NDIM + + INTEGER NK + PARAMETER( NK = 3 ) + + INTEGER NX_IN, NY_IN + PARAMETER( NX_IN = 100 ) + PARAMETER( NY_IN = 200 ) + + INTEGER BORDER_OUT + PARAMETER( BORDER_OUT = 10 ) + + INTEGER NX_OUT, NY_OUT + PARAMETER( NX_OUT = NX_IN + 2*BORDER_OUT ) + PARAMETER( NY_OUT = NY_IN + 2*BORDER_OUT ) + + DOUBLE PRECISION IN( NX_IN, NY_IN ), ANSWER + DOUBLE PRECISION OUT( NX_OUT, NY_OUT ), MNVAL, MXVAL + DOUBLE PRECISION PARAMS(2), WEIGHTS( NX_OUT, NY_OUT ), INA(3), + : INB(3), OUTA(3), OUTB(3), SUM, VA, VB + INTEGER MAP, LBND_IN(3), UBND_IN(3), LBND_OUT(3), UBND_OUT(3), + : K, FLAGS, I, J, LBOXG(3), UBOXG(3), JHI + INTEGER*8 NUSED + + IF( STATUS .NE. SAI__OK ) RETURN + CALL AST_BEGIN( STATUS ) + + LBND_IN( 1 ) = 0 + LBND_IN( 2 ) = 1 + UBND_IN( 1 ) = NX_IN - 1 + UBND_IN( 2 ) = NY_IN + + LBND_OUT( 1 ) = LBND_IN( 1 ) - BORDER_OUT + LBND_OUT( 2 ) = LBND_IN( 2 ) - BORDER_OUT + UBND_OUT( 1 ) = UBND_IN( 1 ) + BORDER_OUT + UBND_OUT( 2 ) = UBND_IN( 2 ) + BORDER_OUT + + LBND_IN( 3 ) = 1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 1 + UBND_OUT( 3 ) = 1 + + INA( 1 ) = LBND_IN( 1 ) + INA( 2 ) = LBND_IN( 2 ) + INA( 3 ) = LBND_IN( 3 ) + INB( 1 ) = UBND_IN( 1 ) + INB( 2 ) = UBND_IN( 2 ) + INB( 3 ) = UBND_IN( 3 ) + 1.0D0 + + DO K = 1, NK + + FLAGS = AST__CONSERVEFLUX + IF( K .EQ. 1 ) FLAGS = FLAGS + AST__REBININIT + IF( K .EQ. NK ) FLAGS = FLAGS + AST__REBINEND + + DO I = 1, NX_IN + DO J = 1, NY_IN + IN( I, J ) = K + END DO + END DO + + VA = (k-1)*0.25 + VB = VA + 0.5 + + OUTA( 1 ) = VB*LBND_IN( 1 ) + VA*UBND_IN( 1 ) + OUTA( 2 ) = VB*LBND_IN( 2 ) + VA*UBND_IN( 2 ) + OUTB( 1 ) = VA*LBND_IN( 1 ) + VB*UBND_IN( 1 ) + OUTB( 2 ) = VA*LBND_IN( 2 ) + VB*UBND_IN( 2 ) + OUTA( 3 ) = INA( 3 ) + OUTB( 3 ) = INB( 3 ) + + MAP = AST_WINMAP( NDIM, INA, INB, OUTA, OUTB, ' ', STATUS ) + CALL AST_REBINSEQD( MAP, 0.0D0, ndim, LBND_IN, UBND_IN, IN, IN, + : spread, PARAMS, FLAGS, 0.01D0, 50, VAL__BADD, + : ndim, LBND_OUT, UBND_OUT, LBND_IN, UBND_IN, + : OUT, OUT, WEIGHTS, NUSED, STATUS ) + + END DO + + IF( NDIM .EQ. 1 ) THEN + JHI = 1 + ELSE + JHI = ny_out + ENDIF + + SUM = 0.0D0 + MXVAL = VAL__MIND + MNVAL = VAL__MAXD + DO I = 1, NX_OUT + DO J = 1, JHI + IF( OUT(I,J) .NE. VAL__BADD ) THEN + SUM = SUM + OUT(I,J) + IF( OUT(I,J) .GT. MXVAL ) MXVAL = OUT(I,J) + IF( OUT(I,J) .lT. MnVAL ) MNVAL = OUT(I,J) + ENDIF + END DO + END DO + + IF( NDIM .eq. 1 ) THEN + IF( SPREAD .EQ. AST__GAUSS ) THEN + ANSWER = 414.0D0 + ELSE IF( SPREAD .EQ. AST__NEAREST ) THEN + ANSWER = 399.4D0 + ELSE IF( SPREAD .EQ. AST__LINEAR ) THEN + ANSWER = 400.0D0 + ELSE + ANSWER = -1.0 + END IF + + IF( ABS( SUM - ANSWER ) .GT. 1.0D-3 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', SUM ) + CALL MSG_SETD( 'W', ANSWER ) + CALL ERR_REP( ' ', 'Total output data sum is ^V (should '// + : 'be ^W).', STATUS ) + + ELSE IF( ABS( MXVAL - 6 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', MXVAL ) + CALL ERR_REP( ' ', 'Max value is ^V (should be 6).', + : STATUS ) + + ELSE IF( ABS( MNVAL - 2 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', MNVAL ) + CALL ERR_REP( ' ', 'Min value is ^V (should be 2).', + : STATUS ) + + END IF + + ELSE IF( NDIM .eq. 2 ) THEN + IF( SPREAD .EQ. AST__GAUSS ) THEN + ANSWER = 109011.729592723D0 + ELSE IF( SPREAD .EQ. AST__NEAREST ) THEN + ANSWER = 100716.666666667D0 + ELSE IF( SPREAD .EQ. AST__LINEAR ) THEN + ANSWER = 102816.0D0 + ELSE + ANSWER = -1.0 + END IF + + IF( ABS( SUM - ANSWER ) .GT. 1.0D-3 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', SUM ) + CALL MSG_SETD( 'W', ANSWER ) + CALL ERR_REP( ' ', 'Total output data sum is ^V (should '// + : 'be ^W).', STATUS ) + + ELSE IF( ABS( MXVAL - 12 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', MXVAL ) + CALL ERR_REP( ' ', 'Max value is ^V (should be 12).', + : STATUS ) + + ELSE IF( ABS( MNVAL - 4 ) .GT. 1.0E-6 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', MNVAL ) + CALL ERR_REP( ' ', 'Min value is ^V (should be 4).', + : STATUS ) + + END IF + END IF + + CALL AST_END( STATUS ) + IF( STATUS .NE. SAI__OK ) THEN + CALL ERR_REP( ' ', 'test6 failed', STATUS ) + END IF + + END + + + SUBROUTINE TEST7( NDIM, SPREAD, PARAMS, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'PRM_PAR' + + INTEGER SPREAD, STATUS, NDIM + + INTEGER NX, NY + PARAMETER( NX = 100 ) + PARAMETER( NY = 200 ) + + + REAL IN( NX, NY ) + REAL OUT( NX, NY ) + DOUBLE PRECISION PARAMS(2), WEIGHTS( NX, NY ) + INTEGER MAP, LBND_IN(3), UBND_IN(3), LBND_OUT(3), UBND_OUT(3), + : JHI, FLAGS, I, J + INTEGER*8 NUSED + + IF( STATUS .NE. SAI__OK ) RETURN + CALL AST_BEGIN( STATUS ) + + DO I = 1, NX + DO J = 1, NY + IN( I, J ) = 1.0 + END DO + END DO + + LBND_IN( 1 ) = 0 + LBND_IN( 2 ) = 1 + UBND_IN( 1 ) = NX - 1 + UBND_IN( 2 ) = NY + + LBND_OUT( 1 ) = 0 + LBND_OUT( 2 ) = 1 + UBND_OUT( 1 ) = NX - 1 + UBND_OUT( 2 ) = NY + + LBND_IN( 3 ) = 1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 1 + UBND_OUT( 3 ) = 1 + + FLAGS = AST__REBININIT + AST__REBINEND + + MAP = AST_ZOOMMAP( NDIM, 0.5D0, ' ', STATUS ) + CALL AST_REBINSEQR( MAP, 0.0D0, ndim, LBND_IN, UBND_IN, IN, IN, + : spread, PARAMS, FLAGS, 0.01D0, 50, VAL__BADR, + : ndim, LBND_OUT, UBND_OUT, LBND_IN, UBND_IN, + : OUT, OUT, WEIGHTS, NUSED, STATUS ) + + IF( NDIM .EQ. 1 ) THEN + JHI = 1 + ELSE + JHI = ny + ENDIF + + DO I = 1, NX + DO J = 1, JHI + IF( ABS( OUT( I, J ) - 1.0 ) .GT. 1.0E-6 .AND. + : OUT( I, J ) .NE. VAL__BADR ) THEN + STATUS = SAI__ERROR + CALL MSG_SETI( 'I', I ) + CALL MSG_SETI( 'J', J ) + CALL MSG_SETR( 'V', OUT(I,J) ) + CALL ERR_REP( ' ', 'Output pixel (^I,^J) should be '// + : '1.0 but is ^V', status ) + END IF + END DO + END DO + + CALL AST_END( STATUS ) + IF( STATUS .NE. SAI__OK ) THEN + CALL ERR_REP( ' ', 'test7 failed', STATUS ) + END IF + + END + + + SUBROUTINE TEST8( NDIM, SPREAD, PARAMS, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'PRM_PAR' + + INTEGER SPREAD, STATUS, NDIM + + INTEGER NX, NY + PARAMETER( NX = 100 ) + PARAMETER( NY = 200 ) + + + REAL IN( NX, NY ) + REAL OUT( NX, NY ) + DOUBLE PRECISION PARAMS(2), WEIGHTS( NX, NY ), SHIFTS(3), SUM + INTEGER MAP, LBND_IN(3), UBND_IN(3), LBND_OUT(3), UBND_OUT(3), + : FLAGS, I, J, JHI + INTEGER*8 NUSED + + IF( STATUS .NE. SAI__OK ) RETURN + CALL AST_BEGIN( STATUS ) + + DO I = 1, NX + DO J = 1, NY + IN( I, J ) = 1.0 + END DO + END DO + + LBND_IN( 1 ) = 0 + LBND_IN( 2 ) = 1 + UBND_IN( 1 ) = NX - 1 + UBND_IN( 2 ) = NY + + LBND_OUT( 1 ) = 0 + LBND_OUT( 2 ) = 1 + UBND_OUT( 1 ) = NX - 1 + UBND_OUT( 2 ) = NY + + LBND_IN( 3 ) = 1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 1 + UBND_OUT( 3 ) = 1 + + FLAGS = AST__REBININIT + AST__REBINEND + AST__NONORM + + SHIFTS(1) = 5.0D0 + SHIFTS(2) = 5.0D0 + + if( ndim .lt. 3 ) then + MAP = AST_CMPMAP( AST_ZOOMMAP( NDIM, 0.5D0, ' ', STATUS ), + : AST_SHIFTMAP( NDIM, SHIFTS, ' ', STATUS ), + : .TRUE., ' ', STATUS ) + else + MAP = AST_CMPMAP( AST_CMPMAP( AST_ZOOMMAP( 2, 0.5D0, ' ', + : STATUS ), + : AST_SHIFTMAP( 2, SHIFTS, ' ', + : STATUS ), + : .TRUE., ' ', STATUS ), + : AST_UNITMAP( 1, ' ', STATUS ), .FALSE., + : ' ', STATUS ) + endif + + CALL AST_REBINSEQR( MAP, 0.0D0, ndim, LBND_IN, UBND_IN, IN, IN, + : spread, PARAMS, FLAGS, 0.01D0, 50, VAL__BADR, + : ndim, LBND_OUT, UBND_OUT, LBND_IN, UBND_IN, + : OUT, OUT, WEIGHTS, NUSED, STATUS ) + + IF( NDIM .EQ. 1 ) THEN + JHI = 1 + ELSE + JHI = ny + ENDIF + + SUM = 0.0D0 + DO I = 1, NX + DO J = 1, JHI + if( out(i,j) .ne. VAL__BADR ) then + SUM = SUM + DBLE(OUT(I,J)) + end if + END DO + END DO + + IF( SUM .NE. SUM ) THEN + STATUS = SAI__ERROR + CALL ERR_REP( ' ', 'Total output data sum is NaN', STATUS ) + + ELSE IF( ABS( SUM - NX*JHI ) .GT. SUM*1.0D-7 ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', SUM ) + CALL MSG_SETD( 'W', DBLE( NX*JHI) ) + CALL ERR_REP( ' ', 'Total output data sum is ^V (should '// + : 'be ^W).', STATUS ) + END IF + + CALL AST_END( STATUS ) + IF( STATUS .NE. SAI__OK ) THEN + CALL ERR_REP( ' ', 'test8 failed', STATUS ) + END IF + + END + + + SUBROUTINE TEST9( NDIM, SPREAD, PARAMS, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'PRM_PAR' + + INTEGER SPREAD, STATUS, NDIM + + INTEGER SIZE + PARAMETER( SIZE = 20000 ) + + INTEGER NX1, NY1 + PARAMETER( NX1 = SIZE ) + PARAMETER( NY1 = 1 ) + + INTEGER NX2, NY2 + PARAMETER( NX2 = SIZE/200 ) + PARAMETER( NY2 = 200 ) + + DOUBLE PRECISION SIGMA + PARAMETER ( SIGMA = 0.1 ) + + REAL*8 IN( size ), VIN( size ) + REAL*8 OUT( size ), VOUT( size ) + DOUBLE PRECISION PARAMS(2), WEIGHTS( size ) + DOUBLE PRECISION REALVAR,MEANVAR,SUM,SUM2,SUM3 + INTEGER MAP, LBND_IN(3), UBND_IN(3), LBND_OUT(3), UBND_OUT(3), + : FLAGS, I, J, NVAL, JHI, JLO, NX, NY, ILO, IHI, k + INTEGER*8 NUSED + + IF( STATUS .NE. SAI__OK ) RETURN + CALL AST_BEGIN( STATUS ) + + DO I = 1, size + IN( I ) = 1.0D0 + VIN( I ) = SIGMA**2 + END DO + + CALL ADDNOISE( size, IN, SIGMA, STATUS ) + + IF( NDIM .EQ. 1 ) THEN + NX = NX1 + Ny = NY1 + ELSE + NX = NX2 + Ny = NY2 + END IF + + LBND_IN( 1 ) = 0 + LBND_IN( 2 ) = 1 + UBND_IN( 1 ) = NX - 1 + UBND_IN( 2 ) = NY + + LBND_OUT( 1 ) = 0 + LBND_OUT( 2 ) = 1 + UBND_OUT( 1 ) = NX - 1 + UBND_OUT( 2 ) = NY + + LBND_IN( 3 ) = 1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 1 + UBND_OUT( 3 ) = 1 + + FLAGS = AST__REBININIT + AST__REBINEND + AST__NONORM + AST__USEVAR + + MAP = AST_ZOOMMAP( NDIM, 0.5D0, ' ', STATUS ) + CALL AST_REBINSEQD( MAP, 0.0D0, ndim, LBND_IN, UBND_IN, IN, VIN, + : spread, PARAMS, FLAGS, 0.01D0, 50, VAL__BADD, + : ndim, LBND_OUT, UBND_OUT, LBND_IN, UBND_IN, + : OUT, VOUT, WEIGHTS, NUSED, STATUS ) + + IF( NDIM .EQ. 1 ) THEN + ILO = 6 + IHI = NINT(0.45*NX1) + JLO = 1 + JHI = 1 + ELSE + ILO = 6 + IHI = 41 + JLO = 8 + JHI = 91 + ENDIF + + SUM = 0.0D0 + SUM2 = 0.0D0 + SUM3 = 0.0D0 + NVAL = 0 + + DO I = ILO, IHI + DO J = JLO, JHI + K = ( J - 1 )*NX + I + IF( OUT(K) .NE. VAL__BADD ) THEN + SUM = SUM + OUT(K) + SUM2 = SUM2 + OUT(K)**2 + SUM3 = SUM3 + VOUT(K) + NVAL = NVAL + 1 + END IF + END DO + END DO + + SUM = SUM/NVAL + REALVAR = SUM2/NVAL - SUM*SUM + MEANVAR = SUM3/NVAL + IF( ABS( REALVAR - MEANVAR ) .GT. + : 0.05*( REALVAR + MEANVAR ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', REALVAR ) + CALL MSG_SETD( 'W', MEANVAR ) + CALL ERR_REP( ' ', 'Real variance is ^V - estimate is ^W.', + : STATUS ) + END IF + + CALL AST_END( STATUS ) + IF( STATUS .NE. SAI__OK ) THEN + CALL ERR_REP( ' ', 'test9 failed', STATUS ) + END IF + + END + + + SUBROUTINE TEST10( NDIM, SPREAD, PARAMS, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'PRM_PAR' + + INTEGER SPREAD, STATUS, NDIM + + INTEGER SIZE + PARAMETER( SIZE = 20000 ) + + INTEGER NX1, NY1 + PARAMETER( NX1 = SIZE ) + PARAMETER( NY1 = 1 ) + + INTEGER NX2, NY2 + PARAMETER( NX2 = SIZE/200 ) + PARAMETER( NY2 = 200 ) + + DOUBLE PRECISION SIGMA + PARAMETER ( SIGMA = 0.1 ) + + REAL*8 IN( size ), VIN( size ) + REAL*8 OUT( size ), VOUT( size ) + DOUBLE PRECISION PARAMS(2), WEIGHTS( size ) + DOUBLE PRECISION REALVAR,MEANVAR,SUM,SUM2,SUM3 + INTEGER MAP, LBND_IN(3), UBND_IN(3), LBND_OUT(3), UBND_OUT(3), + : FLAGS, I, J, NVAL, JHI, JLO, ILO, IHI, NX, NY, K + INTEGER*8 NUSED + + IF( STATUS .NE. SAI__OK ) RETURN + CALL AST_BEGIN( STATUS ) + + DO I = 1, SIZE + IN( I ) = 1.0D0 + VIN( I ) = SIGMA**2 + END DO + + CALL ADDNOISE( SIZE, IN, SIGMA, STATUS ) + + IF( NDIM .EQ. 1 ) THEN + NX = NX1 + Ny = NY1 + ELSE + NX = NX2 + Ny = NY2 + END IF + + LBND_IN( 1 ) = 0 + LBND_IN( 2 ) = 1 + UBND_IN( 1 ) = NX - 1 + UBND_IN( 2 ) = NY + + LBND_OUT( 1 ) = 0 + LBND_OUT( 2 ) = 1 + UBND_OUT( 1 ) = NX - 1 + UBND_OUT( 2 ) = NY + + LBND_IN( 3 ) = 1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 1 + UBND_OUT( 3 ) = 1 + + FLAGS = AST__REBININIT + AST__REBINEND + AST__CONSERVEFLUX + : + AST__USEVAR + + MAP = AST_ZOOMMAP( NDIM, 0.5D0, ' ', STATUS ) + CALL AST_REBINSEQD( MAP, 0.0D0, ndim, LBND_IN, UBND_IN, IN, VIN, + : spread, PARAMS, FLAGS, 0.01D0, 50, VAL__BADD, + : ndim, LBND_OUT, UBND_OUT, LBND_IN, UBND_IN, + : OUT, VOUT, WEIGHTS, NUSED, STATUS ) + + IF( NDIM .EQ. 1 ) THEN + ILO = 6 + IHI = NINT(0.45*NX1) + JLO = 1 + JHI = 1 + ELSE + ILO = 6 + IHI = 41 + JLO = 8 + JHI = 91 + ENDIF + + SUM = 0.0D0 + SUM2 = 0.0D0 + SUM3 = 0.0D0 + NVAL = 0 + + DO I = ILO,IHI + DO J = JLO, JHI + K = ( J - 1 )*NX + I + IF( OUT(K) .NE. VAL__BADD ) THEN + SUM = SUM + OUT(K) + SUM2 = SUM2 + OUT(K)**2 + SUM3 = SUM3 + VOUT(K) + NVAL = NVAL + 1 + END IF + END DO + END DO + + SUM = SUM/NVAL + REALVAR = SUM2/NVAL - SUM*SUM + MEANVAR = SUM3/NVAL + + IF( ABS( REALVAR - MEANVAR ) .GT. + : 0.05*( REALVAR + MEANVAR ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', REALVAR ) + CALL MSG_SETD( 'W', MEANVAR ) + CALL ERR_REP( ' ', 'Real variance is ^V - estimate is ^W.', + : STATUS ) + END IF + + CALL AST_END( STATUS ) + IF( STATUS .NE. SAI__OK ) THEN + CALL ERR_REP( ' ', 'test10 failed', STATUS ) + END IF + + END + + SUBROUTINE TEST11( NDIM, SPREAD, PARAMS, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'PRM_PAR' + + INTEGER SPREAD, STATUS, NDIM + + INTEGER SIZE + PARAMETER( SIZE = 20000 ) + + INTEGER NX1, NY1 + PARAMETER( NX1 = SIZE ) + PARAMETER( NY1 = 1 ) + + INTEGER NX2, NY2 + PARAMETER( NX2 = SIZE/200 ) + PARAMETER( NY2 = 200 ) + + DOUBLE PRECISION SIGMA + PARAMETER ( SIGMA = 0.1 ) + + REAL*8 IN( SIZE ), VIN( SIZE ) + REAL*8 OUT( SIZE ), VOUT( SIZE ) + DOUBLE PRECISION PARAMS(2), WEIGHTS( SIZE, 2 ) + DOUBLE PRECISION REALVAR,MEANVAR,SUM,SUM2,SUM3 + INTEGER MAP, LBND_IN(3), UBND_IN(3), LBND_OUT(3), UBND_OUT(3), + : FLAGS, I, J, NVAL, JLO, JHI, NX, NY, ILO, IHI, K + INTEGER*8 NUSED + + IF( STATUS .NE. SAI__OK ) RETURN + CALL AST_BEGIN( STATUS ) + + DO I = 1, SIZE + IN( I ) = 1.0D0 + VIN( I ) = SIGMA**2 + END DO + + CALL ADDNOISE( SIZE, IN, SIGMA, STATUS ) + + IF( NDIM .EQ. 1 ) THEN + NX = NX1 + Ny = NY1 + ELSE + NX = NX2 + Ny = NY2 + END IF + + LBND_IN( 1 ) = 0 + LBND_IN( 2 ) = 1 + UBND_IN( 1 ) = NX - 1 + UBND_IN( 2 ) = NY + + LBND_OUT( 1 ) = 0 + LBND_OUT( 2 ) = 1 + UBND_OUT( 1 ) = NX - 1 + UBND_OUT( 2 ) = NY + + LBND_IN( 3 ) = 1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 1 + UBND_OUT( 3 ) = 1 + + FLAGS = AST__REBININIT + AST__REBINEND + AST__GENVAR + + MAP = AST_ZOOMMAP( NDIM, 0.5D0, ' ', STATUS ) + CALL AST_REBINSEQD( MAP, 0.0D0, ndim, LBND_IN, UBND_IN, IN, VIN, + : spread, PARAMS, FLAGS, 0.01D0, 50, VAL__BADD, + : ndim, LBND_OUT, UBND_OUT, LBND_IN, UBND_IN, + : OUT, VOUT, WEIGHTS, NUSED, STATUS ) + + IF( NDIM .EQ. 1 ) THEN + ILO = 6 + IHI = NINT(0.45*NX1) + JLO = 1 + JHI = 1 + ELSE + ILO = 6 + IHI = 41 + JLO = 8 + JHI = 91 + ENDIF + + SUM = 0.0D0 + SUM2 = 0.0D0 + SUM3 = 0.0D0 + NVAL = 0 + + DO I = ILO,IHI + DO J = JLO, JHI + K = ( J - 1 )*NX + I + IF( OUT(K) .NE. VAL__BADD ) THEN + SUM = SUM + OUT(K) + SUM2 = SUM2 + OUT(K)**2 + SUM3 = SUM3 + VOUT(K) + NVAL = NVAL + 1 + END IF + END DO + END DO + + SUM = SUM/NVAL + REALVAR = SUM2/NVAL - SUM*SUM + MEANVAR = SUM3/NVAL + IF( ABS( REALVAR - MEANVAR ) .GT. + : 0.05*( REALVAR + MEANVAR ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', REALVAR ) + CALL MSG_SETD( 'W', MEANVAR ) + CALL ERR_REP( ' ', 'Real variance is ^V - estimate is ^W.', + : STATUS ) + END IF + + CALL AST_END( STATUS ) + IF( STATUS .NE. SAI__OK ) THEN + CALL ERR_REP( ' ', 'test11 failed', STATUS ) + END IF + + END + + + SUBROUTINE TEST12( NDIM, SPREAD, PARAMS, STATUS ) + IMPLICIT NONE + INCLUDE 'SAE_PAR' + INCLUDE 'AST_PAR' + INCLUDE 'PRM_PAR' + + INTEGER SPREAD, STATUS, NDIM + + INTEGER SIZE + PARAMETER( SIZE = 20000 ) + + INTEGER NX1, NY1 + PARAMETER( NX1 = SIZE ) + PARAMETER( NY1 = 1 ) + + INTEGER NX2, NY2 + PARAMETER( NX2 = SIZE/200 ) + PARAMETER( NY2 = 200 ) + + DOUBLE PRECISION SIGMA + PARAMETER ( SIGMA = 0.1 ) + + REAL*8 IN( SIZE ), VIN( SIZE ) + REAL*8 OUT( SIZE ), VOUT( SIZE ) + DOUBLE PRECISION PARAMS(2), WEIGHTS( SIZE, 2 ) + DOUBLE PRECISION REALVAR,MEANVAR,SUM,SUM2,SUM3 + INTEGER MAP, LBND_IN(3), UBND_IN(3), LBND_OUT(3), UBND_OUT(3), + : FLAGS, I, J, NVAL,jlo, jhi,NX, NY, ILO, IHI, K + INTEGER*8 NUSED + + IF( STATUS .NE. SAI__OK ) RETURN + CALL AST_BEGIN( STATUS ) + + DO I = 1, SIZE + IN( I ) = 1.0D0 + VIN( I ) = SIGMA**2 + END DO + + CALL ADDNOISE( SIZE, IN, SIGMA, STATUS ) + + IF( NDIM .EQ. 1 ) THEN + NX = NX1 + Ny = NY1 + ELSE + NX = NX2 + Ny = NY2 + END IF + + LBND_IN( 1 ) = 0 + LBND_IN( 2 ) = 1 + UBND_IN( 1 ) = NX - 1 + UBND_IN( 2 ) = NY + + LBND_OUT( 1 ) = 0 + LBND_OUT( 2 ) = 1 + UBND_OUT( 1 ) = NX - 1 + UBND_OUT( 2 ) = NY + + LBND_IN( 3 ) = 1 + UBND_IN( 3 ) = 1 + LBND_OUT( 3 ) = 1 + UBND_OUT( 3 ) = 1 + + FLAGS = AST__REBININIT + AST__REBINEND + AST__GENVAR + + : AST__CONSERVEFLUX + AST__VARWGT + + MAP = AST_ZOOMMAP( NDIM, 0.5D0, ' ', STATUS ) + CALL AST_REBINSEQD( MAP, 0.0D0, ndim, LBND_IN, UBND_IN, IN, VIN, + : spread, PARAMS, FLAGS, 0.01D0, 50, VAL__BADD, + : ndim, LBND_OUT, UBND_OUT, LBND_IN, UBND_IN, + : OUT, VOUT, WEIGHTS, NUSED, STATUS ) + + IF( NDIM .EQ. 1 ) THEN + ILO = 6 + IHI = NINT(0.45*NX1) + JLO = 1 + JHI = 1 + ELSE + ILO = 6 + IHI = 41 + JLO = 8 + JHI = 91 + ENDIF + + SUM = 0.0D0 + SUM2 = 0.0D0 + SUM3 = 0.0D0 + NVAL = 0 + + DO I = ILO,IHI + DO J = JLO, JHI + K = ( J - 1 )*NX + I + IF( OUT(K) .NE. VAL__BADD ) THEN + SUM = SUM + OUT(K) + SUM2 = SUM2 + OUT(K)**2 + SUM3 = SUM3 + VOUT(K) + NVAL = NVAL + 1 + END IF + END DO + END DO + + SUM = SUM/NVAL + REALVAR = SUM2/NVAL - SUM*SUM + MEANVAR = SUM3/NVAL + IF( ABS( REALVAR - MEANVAR ) .GT. + : 0.05*( REALVAR + MEANVAR ) ) THEN + STATUS = SAI__ERROR + CALL MSG_SETD( 'V', REALVAR ) + CALL MSG_SETD( 'W', MEANVAR ) + CALL ERR_REP( ' ', 'Real variance is ^V - estimate is ^W.', + : STATUS ) + END IF + + CALL AST_END( STATUS ) + IF( STATUS .NE. SAI__OK ) THEN + CALL ERR_REP( ' ', 'test12 failed', STATUS ) + END IF + + END + + diff --git a/ast/ast_tester/testregions.f b/ast/ast_tester/testregions.f new file mode 100644 index 0000000..201ab17 --- /dev/null +++ b/ast/ast_tester/testregions.f @@ -0,0 +1,4032 @@ + program testregions + implicit none + include 'SAE_PAR' + integer status + + status = sai__ok + +c call ast_watchmemory( 282905 ) + + call ast_begin( status ) + call checkConvex( status ) + call checkRemoveRegions( status ) + call checkInterval( status ) + call checkEllipse( status ) + call checkPrism( status ) + call checkPolygon( status ) + call checkCircle( status ) + call checkBox( status ) + call checkNullRegion( status ) + call generalChecks( status ) + call checkCmpRegion( status ) + call checkPointList( status ) + + call ast_end( status ) + +c call ast_activememory( 'testregions' ) + + if( status .eq. sai__ok ) then + write(*,*) 'All Region tests passed' + else + write(*,*) 'Region tests failed' + end if + + end + + + subroutine generalChecks( status ) + implicit none + include 'AST_PAR' + include 'PRM_PAR' + include 'SAE_PAR' + + integer status, frm1, frm2, frm3, reg1, reg2, reg3, reg4, reg5 + double precision lbnd(3), ubnd(3), p1(2), p2(2) + + if( status .ne.sai__ok ) return + + call ast_begin( status ) + + + + lbnd(1) = 0.0D0 + lbnd(2) = AST__BAD + ubnd(1) = AST__BAD + ubnd(2) = 0.0D0 + frm1 = ast_frame( 2, ' ', status ) + reg1 = ast_interval( frm1, lbnd, ubnd, AST__NULL, ' ', status ) + + call ast_getregionbounds( reg1, lbnd, ubnd, status ) + if( lbnd(1) .ne. 0.0D0 ) call stopit( status, 'General 1' ) + if( lbnd(2) .gt. 0.99*val__mind ) call stopit( status, + : 'General 2' ) + if( ubnd(1) .lt. 0.99*val__maxd ) call stopit( status, + : 'General 3' ) + if( ubnd(2) .ne. 0.0D0 ) call stopit( status, 'General 4' ) + + + + p1(1) = 0.0D0 + p1(2) = 0.0D0 + p2(1) = 1.0D0 + reg2 = ast_circle( frm1, 1, p1, p2, AST__NULL, ' ', status ) + + call ast_getregionbounds( reg2, lbnd, ubnd, status ) + if( lbnd(1) .ne. -1.0D0 ) call stopit( status, 'General 5' ) + if( lbnd(2) .ne. -1.0D0 ) call stopit( status, 'General 6' ) + if( ubnd(1) .ne. 1.0D0 ) call stopit( status, 'General 7' ) + if( ubnd(2) .ne. 1.0D0 ) call stopit( status, 'General 8' ) + + + + reg3 = ast_cmpregion( reg1, reg2, AST__OR, ' ', status ) + + call ast_getregionbounds( reg3, lbnd, ubnd, status ) + if( lbnd(1) .ne. -1.0D0 ) call stopit( status, 'General 9' ) + if( lbnd(2) .gt. 0.99*val__mind ) call stopit( status, + : 'General 10' ) + if( ubnd(1) .lt. 0.99*val__maxd ) call stopit( status, + : 'General 11' ) + if( ubnd(2) .ne. 1.0D0 ) call stopit( status, 'General 12' ) + + + + lbnd(1) = -1.0D0 + ubnd(1) = 1.0D0 + frm2 = ast_frame( 1, ' ', status ) + reg4 = ast_interval( frm2, lbnd, ubnd, AST__NULL, ' ', status ) + + call ast_getregionbounds( reg4, lbnd, ubnd, status ) + if( lbnd(1) .ne. -1.0D0 ) call stopit( status, 'General 13' ) + if( ubnd(1) .ne. 1.0D0 ) call stopit( status, 'General 14' ) + + + + reg5 = ast_prism( reg3, reg4, ' ', status ) + + call ast_getregionbounds( reg5, lbnd, ubnd, status ) + if( lbnd(1) .ne. -1.0D0 ) call stopit( status, 'General 15' ) + if( lbnd(2) .gt. 0.99*val__mind ) call stopit( status, + : 'General 16' ) + if( ubnd(1) .lt. 0.99*val__maxd ) call stopit( status, + : 'General 17' ) + if( ubnd(2) .ne. 1.0D0 ) call stopit( status, 'General 18' ) + if( lbnd(3) .ne. -1.0D0 ) call stopit( status, 'General 19' ) + if( ubnd(3) .ne. 1.0D0 ) call stopit( status, 'General 20' ) + + + + call ast_negate( reg2, status ) + reg3 = ast_cmpregion( reg1, reg2, AST__OR, ' ', status ) + + call ast_getregionbounds( reg3, lbnd, ubnd, status ) + if( lbnd(1) .gt. 0.99*val__mind ) call stopit( status, + : 'General 21' ) + if( lbnd(2) .gt. 0.99*val__mind ) call stopit( status, + : 'General 22' ) + if( ubnd(1) .lt. 0.99*val__maxd ) call stopit( status, + : 'General 23' ) + if( ubnd(2) .lt. 0.99*val__maxd ) call stopit( status, + : 'General 24' ) + + + reg5 = ast_prism( reg3, reg4, ' ', status ) + + call ast_getregionbounds( reg5, lbnd, ubnd, status ) + if( lbnd(1) .gt. 0.99*val__mind ) call stopit( status, + : 'General 25' ) + if( lbnd(2) .gt. 0.99*val__mind ) call stopit( status, + : 'General 26' ) + if( ubnd(1) .lt. 0.99*val__maxd ) call stopit( status, + : 'General 27' ) + if( ubnd(2) .lt. 0.99*val__maxd ) call stopit( status, + : 'General 28' ) + if( lbnd(3) .ne. -1.0D0 ) call stopit( status, 'General 29' ) + if( ubnd(3) .ne. 1.0D0 ) call stopit( status, 'General 30' ) + + + reg3 = ast_cmpregion( reg1, reg2, AST__AND, ' ', status ) + + call ast_getregionbounds( reg3, lbnd, ubnd, status ) + if( lbnd(1) .ne. 0.0D0 ) call stopit( status, 'General 31' ) + if( lbnd(2) .gt. 0.99*val__mind ) call stopit( status, + : 'General 32' ) + if( ubnd(1) .lt. 0.99*val__maxd ) call stopit( status, + : 'General 33' ) + if( ubnd(2) .ne. 0.0D0 ) call stopit( status, 'General 34' ) + + + + reg5 = ast_prism( reg3, reg4, ' ', status ) + + call ast_getregionbounds( reg5, lbnd, ubnd, status ) + if( lbnd(1) .ne. 0.0D0 ) call stopit( status, 'General 35' ) + if( lbnd(2) .gt. 0.99*val__mind ) call stopit( status, + : 'General 36' ) + if( ubnd(1) .lt. 0.99*val__maxd ) call stopit( status, + : 'General 37' ) + if( ubnd(2) .ne. 0.0D0 ) call stopit( status, 'General 38' ) + if( lbnd(3) .ne. -1.0D0 ) call stopit( status, 'General 39' ) + if( ubnd(3) .ne. 1.0D0 ) call stopit( status, 'General 40' ) + + + call ast_end( status ) + if( status .ne. sai__ok ) write(*,*) 'General tests failed' + + end + + + + + subroutine checkInterval( status ) + implicit none + include 'AST_PAR' + include 'SAE_PAR' + + integer status, frm1, frm2, frm3, unc, int1, int2, int3, int4, + : int5, frm4, map, outperm(6), inperm(6), pm, reg + double precision lbnd(3), ubnd(3), p(5,3), q(5,3),in(4,3),out(4,3) + double precision xin(9), yin(9), xout(9), yout(9) + + logical hasframeset + + if( status .ne.sai__ok ) return + + call ast_begin( status ) + + frm1 = ast_skyframe( ' ', status ) + frm2 = ast_specframe( 'Unit=Angstrom', status ) + frm3 = ast_cmpframe( frm1, frm2, ' ', status ) + + if( ast_getc( frm1, 'InternalUnit(1)', status ) .ne. 'rad' ) + : call stopit( status, 'InternalUnit 1' ) + if( ast_getc( frm1, 'InternalUnit(2)', status ) .ne. 'rad' ) + : call stopit( status, 'InternalUnit 2' ) + if( ast_getc( frm2, 'InternalUnit(1)', status ) .ne. 'Angstrom' ) + : call stopit( status, 'InternalUnit 3' ) + if( ast_getc( frm3, 'InternalUnit(1)', status ) .ne. 'rad' ) + : call stopit( status, 'InternalUnit 4' ) + if( ast_getc( frm3, 'InternalUnit(2)', status ) .ne. 'rad' ) + : call stopit( status, 'InternalUnit 5' ) + if( ast_getc( frm3, 'InternalUnit(3)', status ) .ne. 'Angstrom' ) + : call stopit( status, 'InternalUnit 6' ) + + lbnd( 1 ) = AST__BAD + lbnd( 2 ) = AST__BAD + lbnd( 3 ) = 5000.0 + ubnd( 1 ) = AST__BAD + ubnd( 2 ) = AST__BAD + ubnd( 3 ) = 6000.0 + + int1 = ast_interval( frm3, lbnd, ubnd, AST__NULL, ' ', status ) + call checkdump( int1, 'checkdump int1', status ) + + p(1,1) = 0.0 ! On boundary + p(1,2) = 0.0 + p(1,3) = 5000.0 + p(2,1) = 2.0 ! On boundary + p(2,2) = -1.0 + p(2,3) = 6000.0 + p(3,1) = -2.0 ! Inside + p(3,2) = 1.0 + p(3,3) = 5999.0 + p(4,1) = 2.0 ! Outside + p(4,2) = -2.0 + p(4,3) = 6010.0 + p(5,1) = 1.0 ! Outside + p(5,2) = -1.0 + p(5,3) = 4910.0 + + call ast_trann( int1, 5, 3, 5, p, .true., 3, 5, q, status ) + if( q(1,1) .ne. p(1,1)) call stopit( status, 'Interval 1' ) + if( q(1,2) .ne. p(1,2)) call stopit( status, 'Interval 1b' ) + if( q(1,3) .ne. p(1,3)) call stopit( status, 'Interval 1c' ) + if( q(2,1) .ne. p(2,1)) call stopit( status, 'Interval 2' ) + if( q(2,2) .ne. p(2,2)) call stopit( status, 'Interval 2b' ) + if( q(2,3) .ne. p(2,3)) call stopit( status, 'Interval 2c' ) + if( q(3,1) .ne. p(3,1)) call stopit( status, 'Interval 3' ) + if( q(3,2) .ne. p(3,2)) call stopit( status, 'Interval 3b' ) + if( q(3,3) .ne. p(3,3)) call stopit( status, 'Interval 3c' ) + if( q(4,1) .ne. AST__BAD ) call stopit( status, 'Interval 4' ) + if( q(4,2) .ne. AST__BAD ) call stopit( status, 'Interval 4b' ) + if( q(4,3) .ne. AST__BAD ) call stopit( status, 'Interval 4c' ) + if( q(5,1) .ne. AST__BAD ) call stopit( status, 'Interval 5' ) + if( q(5,2) .ne. AST__BAD ) call stopit( status, 'Interval 5b' ) + if( q(5,3) .ne. AST__BAD ) call stopit( status, 'Interval 5c' ) + + call ast_negate( int1, status ) + call ast_trann( int1, 5, 3, 5, p, .true., 3, 5, q, status ) + if( q(1,1) .ne. p(1,1)) call stopit( status, 'Interval 6' ) + if( q(1,2) .ne. p(1,2)) call stopit( status, 'Interval 6b' ) + if( q(1,3) .ne. p(1,3)) call stopit( status, 'Interval 6c' ) + if( q(2,1) .ne. p(2,1)) call stopit( status, 'Interval 7' ) + if( q(2,2) .ne. p(2,2)) call stopit( status, 'Interval 7b' ) + if( q(2,3) .ne. p(2,3)) call stopit( status, 'Interval 7c' ) + if( q(3,1) .ne. AST__BAD) call stopit( status, 'Interval 8' ) + if( q(3,2) .ne. AST__BAD) call stopit( status, 'Interval 8b' ) + if( q(3,3) .ne. AST__BAD) call stopit( status, 'Interval 8c' ) + if( q(4,1) .ne. p(4,1) ) call stopit( status, 'Interval 9' ) + if( q(4,2) .ne. p(4,2) ) call stopit( status, 'Interval 9b' ) + if( q(4,3) .ne. p(4,3) ) call stopit( status, 'Interval 9c' ) + if( q(5,1) .ne. p(5,1) ) call stopit( status, 'Interval 10' ) + if( q(5,2) .ne. p(5,2) ) call stopit( status, 'Interval 10b' ) + if( q(5,3) .ne. p(5,3) ) call stopit( status, 'Interval 10c' ) + + call ast_set( int1, 'closed=0,negated=0', status ) + call ast_trann( int1, 5, 3, 5, p, .true., 3, 5, q, status ) + if( q(1,1) .ne. AST__BAD ) call stopit( status, 'Interval 11' ) + if( q(1,2) .ne. AST__BAD ) call stopit( status, 'Interval 11b' ) + if( q(1,3) .ne. AST__BAD ) call stopit( status, 'Interval 11c' ) + if( q(2,1) .ne. AST__BAD ) call stopit( status, 'Interval 12' ) + if( q(2,2) .ne. AST__BAD ) call stopit( status, 'Interval 12b' ) + if( q(2,3) .ne. AST__BAD ) call stopit( status, 'Interval 12c' ) + if( q(3,1) .ne. p(3,1)) call stopit( status, 'Interval 13' ) + if( q(3,2) .ne. p(3,2)) call stopit( status, 'Interval 13b' ) + if( q(3,3) .ne. p(3,3)) call stopit( status, 'Interval 13c' ) + if( q(4,1) .ne. AST__BAD ) call stopit( status, 'Interval 14' ) + if( q(4,2) .ne. AST__BAD ) call stopit( status, 'Interval 14b' ) + if( q(4,3) .ne. AST__BAD ) call stopit( status, 'Interval 14c' ) + if( q(5,1) .ne. AST__BAD ) call stopit( status, 'Interval 15' ) + if( q(5,2) .ne. AST__BAD ) call stopit( status, 'Interval 15b' ) + if( q(5,3) .ne. AST__BAD ) call stopit( status, 'Interval 15c' ) + + call ast_negate( int1, status ) + call ast_trann( int1, 5, 3, 5, p, .true., 3, 5, q, status ) + if( q(1,1) .ne. AST__BAD) call stopit( status, 'Interval 16' ) + if( q(1,2) .ne. AST__BAD) call stopit( status, 'Interval 16b' ) + if( q(1,3) .ne. AST__BAD) call stopit( status, 'Interval 16c' ) + if( q(2,1) .ne. AST__BAD) call stopit( status, 'Interval 17' ) + if( q(2,2) .ne. AST__BAD) call stopit( status, 'Interval 17b' ) + if( q(2,3) .ne. AST__BAD) call stopit( status, 'Interval 17c' ) + if( q(3,1) .ne. AST__BAD) call stopit( status, 'Interval 18' ) + if( q(3,2) .ne. AST__BAD) call stopit( status, 'Interval 18b' ) + if( q(3,3) .ne. AST__BAD) call stopit( status, 'Interval 18c' ) + if( q(4,1) .ne. p(4,1) ) call stopit( status, 'Interval 19' ) + if( q(4,2) .ne. p(4,2) ) call stopit( status, 'Interval 19b' ) + if( q(4,3) .ne. p(4,3) ) call stopit( status, 'Interval 19c' ) + if( q(5,1) .ne. p(5,1) ) call stopit( status, 'Interval 11' ) + if( q(5,2) .ne. p(5,2) ) call stopit( status, 'Interval 11b' ) + if( q(5,3) .ne. p(5,3) ) call stopit( status, 'Interval 11c' ) + + + lbnd( 1 ) = AST__BAD + lbnd( 2 ) = AST__BAD + lbnd( 3 ) = 6000.0 + ubnd( 1 ) = AST__BAD + ubnd( 2 ) = AST__BAD + ubnd( 3 ) = 5000.0 + + int2 = ast_interval( frm3, lbnd, ubnd, AST__NULL, ' ', status ) + call checkdump( int2, 'checkdump int2', status ) + + p(1,1) = 0.0 ! On boundary + p(1,2) = 0.0 + p(1,3) = 5000.0 + p(2,1) = 2.0 ! On boundary + p(2,2) = -1.0 + p(2,3) = 6000.0 + p(3,1) = -2.0 ! Outside + p(3,2) = 1.0 + p(3,3) = 5999.0 + p(4,1) = 2.0 ! Inside + p(4,2) = -2.0 + p(4,3) = 6010.0 + p(5,1) = 1.0 ! Inside + p(5,2) = -1.0 + p(5,3) = 4910.0 + + call ast_negate( int2, status ) + call ast_trann( int2, 5, 3, 5, p, .true., 3, 5, q, status ) + if( q(1,1) .ne. p(1,1)) call stopit( status, 'Interval B 1' ) + if( q(1,2) .ne. p(1,2)) call stopit( status, 'Interval B 1b' ) + if( q(1,3) .ne. p(1,3)) call stopit( status, 'Interval B 1c' ) + if( q(2,1) .ne. p(2,1)) call stopit( status, 'Interval B 2' ) + if( q(2,2) .ne. p(2,2)) call stopit( status, 'Interval B 2b' ) + if( q(2,3) .ne. p(2,3)) call stopit( status, 'Interval B 2c' ) + if( q(3,1) .ne. p(3,1)) call stopit( status, 'Interval B 3' ) + if( q(3,2) .ne. p(3,2)) call stopit( status, 'Interval B 3b' ) + if( q(3,3) .ne. p(3,3)) call stopit( status, 'Interval B 3c' ) + if( q(4,1) .ne. AST__BAD ) call stopit( status, 'Interval B 4' ) + if( q(4,2) .ne. AST__BAD ) call stopit( status, 'Interval B 4b' ) + if( q(4,3) .ne. AST__BAD ) call stopit( status, 'Interval B 4c' ) + if( q(5,1) .ne. AST__BAD ) call stopit( status, 'Interval B 5' ) + if( q(5,2) .ne. AST__BAD ) call stopit( status, 'Interval B 5b' ) + if( q(5,3) .ne. AST__BAD ) call stopit( status, 'Interval B 5c' ) + + call ast_negate( int2, status ) + call ast_trann( int2, 5, 3, 5, p, .true., 3, 5, q, status ) + if( q(1,1) .ne. p(1,1)) call stopit( status, 'Interval B 6' ) + if( q(1,2) .ne. p(1,2)) call stopit( status, 'Interval B 6b' ) + if( q(1,3) .ne. p(1,3)) call stopit( status, 'Interval B 6c' ) + if( q(2,1) .ne. p(2,1)) call stopit( status, 'Interval B 7' ) + if( q(2,2) .ne. p(2,2)) call stopit( status, 'Interval B 7b' ) + if( q(2,3) .ne. p(2,3)) call stopit( status, 'Interval B 7c' ) + if( q(3,1) .ne. AST__BAD) call stopit( status, 'Interval B 8' ) + if( q(3,2) .ne. AST__BAD) call stopit( status, 'Interval B 8b' ) + if( q(3,3) .ne. AST__BAD) call stopit( status, 'Interval B 8c' ) + if( q(4,1) .ne. p(4,1) ) call stopit( status, 'Interval B 9' ) + if( q(4,2) .ne. p(4,2) ) call stopit( status, 'Interval B 9b' ) + if( q(4,3) .ne. p(4,3) ) call stopit( status, 'Interval B 9c' ) + if( q(5,1) .ne. p(5,1) ) call stopit( status, 'Interval B 10' ) + if( q(5,2) .ne. p(5,2) ) call stopit( status, 'Interval B 10b' ) + if( q(5,3) .ne. p(5,3) ) call stopit( status, 'Interval B 10c' ) + + call ast_set( int2, 'closed=0,negated=1', status ) + call ast_trann( int2, 5, 3, 5, p, .true., 3, 5, q, status ) + if( q(1,1) .ne. AST__BAD ) call stopit( status, 'Interval B 11' ) + if( q(1,2) .ne. AST__BAD ) call stopit( status, 'Interval B 11b' ) + if( q(1,3) .ne. AST__BAD ) call stopit( status, 'Interval B 11c' ) + if( q(2,1) .ne. AST__BAD ) call stopit( status, 'Interval B 12' ) + if( q(2,2) .ne. AST__BAD ) call stopit( status, 'Interval B 12b' ) + if( q(2,3) .ne. AST__BAD ) call stopit( status, 'Interval B 12c' ) + if( q(3,1) .ne. p(3,1)) call stopit( status, 'Interval B 13' ) + if( q(3,2) .ne. p(3,2)) call stopit( status, 'Interval B 13b' ) + if( q(3,3) .ne. p(3,3)) call stopit( status, 'Interval B 13c' ) + if( q(4,1) .ne. AST__BAD ) call stopit( status, 'Interval B 14' ) + if( q(4,2) .ne. AST__BAD ) call stopit( status, 'Interval B 14b' ) + if( q(4,3) .ne. AST__BAD ) call stopit( status, 'Interval B 14c' ) + if( q(5,1) .ne. AST__BAD ) call stopit( status, 'Interval B 15' ) + if( q(5,2) .ne. AST__BAD ) call stopit( status, 'Interval B 15b' ) + if( q(5,3) .ne. AST__BAD ) call stopit( status, 'Interval B 15c' ) + + call ast_negate( int2, status ) + call ast_trann( int2, 5, 3, 5, p, .true., 3, 5, q, status ) + if( q(1,1) .ne. AST__BAD) call stopit( status, 'Interval B 16' ) + if( q(1,2) .ne. AST__BAD) call stopit( status, 'Interval B 16b' ) + if( q(1,3) .ne. AST__BAD) call stopit( status, 'Interval B 16c' ) + if( q(2,1) .ne. AST__BAD) call stopit( status, 'Interval B 17' ) + if( q(2,2) .ne. AST__BAD) call stopit( status, 'Interval B 17b' ) + if( q(2,3) .ne. AST__BAD) call stopit( status, 'Interval B 17c' ) + if( q(3,1) .ne. AST__BAD) call stopit( status, 'Interval B 18' ) + if( q(3,2) .ne. AST__BAD) call stopit( status, 'Interval B 18b' ) + if( q(3,3) .ne. AST__BAD) call stopit( status, 'Interval B 18c' ) + if( q(4,1) .ne. p(4,1) ) call stopit( status, 'Interval B 19' ) + if( q(4,2) .ne. p(4,2) ) call stopit( status, 'Interval B 19b' ) + if( q(4,3) .ne. p(4,3) ) call stopit( status, 'Interval B 19c' ) + if( q(5,1) .ne. p(5,1) ) call stopit( status, 'Interval B 11' ) + if( q(5,2) .ne. p(5,2) ) call stopit( status, 'Interval B 11b' ) + if( q(5,3) .ne. p(5,3) ) call stopit( status, 'Interval B 11c' ) + + + + + lbnd( 1 ) = AST__BAD + lbnd( 2 ) = AST__BAD + lbnd( 3 ) = 5000.0 + ubnd( 1 ) = 0.5 + ubnd( 2 ) = AST__BAD + ubnd( 3 ) = AST__BAD + + int3 = ast_interval( frm3, lbnd, ubnd, AST__NULL, ' ', status ) + + call checkdump( int3, 'checkdump int3', status ) + + p(1,1) = 0.0 ! On boundary + p(1,2) = 0.0 + p(1,3) = 5000.0 + p(2,1) = 0.5 ! On boundary + p(2,2) = -1.0 + p(2,3) = 6000.0 + p(3,1) = -2.0 ! Inside + p(3,2) = 0.4 + p(3,3) = 5999.0 + p(4,1) = 2.0 ! Outside + p(4,2) = -2.0 + p(4,3) = 6010.0 + p(5,1) = 0.0 ! Outside + p(5,2) = -3.0 + p(5,3) = 4910.0 + + call ast_trann( int3, 5, 3, 5, p, .true., 3, 5, q, status ) + if( q(1,1) .ne. p(1,1)) call stopit( status, 'Interval C 1' ) + if( q(1,2) .ne. p(1,2)) call stopit( status, 'Interval C 1b' ) + if( q(1,3) .ne. p(1,3)) call stopit( status, 'Interval C 1c' ) + if( q(2,1) .ne. p(2,1)) call stopit( status, 'Interval C 2' ) + if( q(2,2) .ne. p(2,2)) call stopit( status, 'Interval C 2b' ) + if( q(2,3) .ne. p(2,3)) call stopit( status, 'Interval C 2c' ) + if( q(3,1) .ne. p(3,1)) call stopit( status, 'Interval C 3' ) + if( q(3,2) .ne. p(3,2)) call stopit( status, 'Interval C 3b' ) + if( q(3,3) .ne. p(3,3)) call stopit( status, 'Interval C 3c' ) + if( q(4,1) .ne. AST__BAD ) call stopit( status, 'Interval C 4' ) + if( q(4,2) .ne. AST__BAD ) call stopit( status, 'Interval C 4b' ) + if( q(4,3) .ne. AST__BAD ) call stopit( status, 'Interval C 4c' ) + if( q(5,1) .ne. AST__BAD ) call stopit( status, 'Interval C 5' ) + if( q(5,2) .ne. AST__BAD ) call stopit( status, 'Interval C 5b' ) + if( q(5,3) .ne. AST__BAD ) call stopit( status, 'Interval C 5c' ) + + call ast_negate( int3, status ) + call ast_trann( int3, 5, 3, 5, p, .true., 3, 5, q, status ) + if( q(1,1) .ne. p(1,1)) call stopit( status, 'Interval C 6' ) + if( q(1,2) .ne. p(1,2)) call stopit( status, 'Interval C 6b' ) + if( q(1,3) .ne. p(1,3)) call stopit( status, 'Interval C 6c' ) + if( q(2,1) .ne. p(2,1)) call stopit( status, 'Interval C 7' ) + if( q(2,2) .ne. p(2,2)) call stopit( status, 'Interval C 7b' ) + if( q(2,3) .ne. p(2,3)) call stopit( status, 'Interval C 7c' ) + if( q(3,1) .ne. AST__BAD) call stopit( status, 'Interval C 8' ) + if( q(3,2) .ne. AST__BAD) call stopit( status, 'Interval C 8b' ) + if( q(3,3) .ne. AST__BAD) call stopit( status, 'Interval C 8c' ) + if( q(4,1) .ne. p(4,1) ) call stopit( status, 'Interval C 9' ) + if( q(4,2) .ne. p(4,2) ) call stopit( status, 'Interval C 9b' ) + if( q(4,3) .ne. p(4,3) ) call stopit( status, 'Interval C 9c' ) + if( q(5,1) .ne. p(5,1) ) call stopit( status, 'Interval C 10' ) + if( q(5,2) .ne. p(5,2) ) call stopit( status, 'Interval C 10b' ) + if( q(5,3) .ne. p(5,3) ) call stopit( status, 'Interval C 10c' ) + + call ast_set( int3, 'closed=0,negated=0', status ) + call ast_trann( int3, 5, 3, 5, p, .true., 3, 5, q, status ) + if( q(1,1) .ne. AST__BAD ) call stopit( status, 'Interval C 11' ) + if( q(1,2) .ne. AST__BAD ) call stopit( status, 'Interval C 11b' ) + if( q(1,3) .ne. AST__BAD ) call stopit( status, 'Interval C 11c' ) + if( q(2,1) .ne. AST__BAD ) call stopit( status, 'Interval C 12' ) + if( q(2,2) .ne. AST__BAD ) call stopit( status, 'Interval C 12b' ) + if( q(2,3) .ne. AST__BAD ) call stopit( status, 'Interval C 12c' ) + if( q(3,1) .ne. p(3,1)) call stopit( status, 'Interval C 13' ) + if( q(3,2) .ne. p(3,2)) call stopit( status, 'Interval C 13b' ) + if( q(3,3) .ne. p(3,3)) call stopit( status, 'Interval C 13c' ) + if( q(4,1) .ne. AST__BAD ) call stopit( status, 'Interval C 14' ) + if( q(4,2) .ne. AST__BAD ) call stopit( status, 'Interval C 14b' ) + if( q(4,3) .ne. AST__BAD ) call stopit( status, 'Interval C 14c' ) + if( q(5,1) .ne. AST__BAD ) call stopit( status, 'Interval C 15' ) + if( q(5,2) .ne. AST__BAD ) call stopit( status, 'Interval C 15b' ) + if( q(5,3) .ne. AST__BAD ) call stopit( status, 'Interval C 15c' ) + + call ast_negate( int3, status ) + call ast_trann( int3, 5, 3, 5, p, .true., 3, 5, q, status ) + if( q(1,1) .ne. AST__BAD) call stopit( status, 'Interval C 16' ) + if( q(1,2) .ne. AST__BAD) call stopit( status, 'Interval C 16b' ) + if( q(1,3) .ne. AST__BAD) call stopit( status, 'Interval C 16c' ) + if( q(2,1) .ne. AST__BAD) call stopit( status, 'Interval C 17' ) + if( q(2,2) .ne. AST__BAD) call stopit( status, 'Interval C 17b' ) + if( q(2,3) .ne. AST__BAD) call stopit( status, 'Interval C 17c' ) + if( q(3,1) .ne. AST__BAD) call stopit( status, 'Interval C 18' ) + if( q(3,2) .ne. AST__BAD) call stopit( status, 'Interval C 18b' ) + if( q(3,3) .ne. AST__BAD) call stopit( status, 'Interval C 18c' ) + if( q(4,1) .ne. p(4,1) ) call stopit( status, 'Interval C 19' ) + if( q(4,2) .ne. p(4,2) ) call stopit( status, 'Interval C 19b' ) + if( q(4,3) .ne. p(4,3) ) call stopit( status, 'Interval C 19c' ) + if( q(5,1) .ne. p(5,1) ) call stopit( status, 'Interval C 11' ) + if( q(5,2) .ne. p(5,2) ) call stopit( status, 'Interval C 11b' ) + if( q(5,3) .ne. p(5,3) ) call stopit( status, 'Interval C 11c' ) + + + + lbnd( 1 ) = AST__BAD + lbnd( 2 ) = 0.0 + lbnd( 3 ) = AST__BAD + ubnd( 1 ) = AST__BAD + ubnd( 2 ) = -1.0 + ubnd( 3 ) = 6000.0 + + call ast_setl( int3, 'Negated', .false., status ) + int4 = ast_interval( frm3, lbnd, ubnd, AST__NULL, ' ', status ) + if( ast_overlap( int3, int4, status ) .ne. 4 ) + : call stopit( status, 'Interval overlap 1' ) + + call ast_negate( int3, status ) + if( ast_overlap( int3, int4, status ) .ne. 4 ) + : call stopit( status, 'Interval overlap 2' ) + + call ast_negate( int4, status ) + if( ast_overlap( int3, int4, status ) .ne. 4 ) + : call stopit( status, 'Interval overlap 3' ) + + call ast_negate( int3, status ) + if( ast_overlap( int3, int4, status ) .ne. 4 ) + : call stopit( status, 'Interval overlap 4' ) + + + lbnd( 1 ) = 0.6 + lbnd( 2 ) = 0.0 + lbnd( 3 ) = AST__BAD + ubnd( 1 ) = AST__BAD + ubnd( 2 ) = -1.0 + ubnd( 3 ) = 6000.0 + + int4 = ast_interval( frm3, lbnd, ubnd, AST__NULL, ' ', status ) + if( ast_overlap( int3, int4, status ) .ne. 1 ) + : call stopit( status, 'Interval overlap 5' ) + + call ast_negate( int3, status ) + if( ast_overlap( int3, int4, status ) .ne. 3 ) + : call stopit( status, 'Interval overlap 6' ) + + call ast_negate( int4, status ) + if( ast_overlap( int3, int4, status ) .ne. 4 ) + : call stopit( status, 'Interval overlap 7' ) + + call ast_negate( int3, status ) + if( ast_overlap( int3, int4, status ) .ne. 2 ) + : call stopit( status, 'Interval overlap 8' ) + + + int4 = ast_copy( int3, status ) + if( ast_overlap( int3, int4, status ) .ne. 5 ) + : call stopit( status, 'Interval overlap 9' ) + + call ast_negate( int4, status ) + if( ast_overlap( int3, int4, status ) .ne. 6 ) + : call stopit( status, 'Interval overlap 10' ) + + + +* Changing the number of axes in the Interval. + + frm1 = ast_frame( 2, 'Domain=A', status ) + + lbnd(1) = 0.0 + lbnd(2) = 0.0 + ubnd(1) = 0.01 + ubnd(2) = 0.01 + unc = ast_box( frm1, 0, lbnd, ubnd, AST__NULL, ' ', status ) + + lbnd(1) = -2.0 + lbnd(2) = 0.5 + ubnd(1) = 0.0 + ubnd(2) = AST__BAD + int1 = ast_interval( frm1, lbnd, ubnd, unc, ' ', status ) + + outperm(1) = 2 + outperm(2) = -1 + outperm(3) = 1 + + inperm(1) = 3 + inperm(2) = 1 + + pm = ast_permmap( 2, inperm, 3, outperm, 0.0D0, ' ', status ) + + frm2 = ast_frame( 3, 'Domain=B', status ) + reg = ast_mapregion( int1, pm, frm2, status ) + + if( .not. ast_isainterval( reg, status ) ) call stopit( status, + : 'Int: perm check 1' ) + if( hasFrameSet( reg, status ) ) call stopit( status, + : 'Int: perm check 2' ) + if( ast_geti( reg, 'naxes', status ) .ne. 3 ) call stopit( status, + : 'Int: perm check 3' ) + + in( 1, 1 ) = 0.0 ! Outside + in( 1, 2 ) = 0.0 + in( 1, 3 ) = -0.5 + in( 2, 1 ) = 20.0 ! Inside + in( 2, 2 ) = 0.0 + in( 2, 3 ) = -0.5 + in( 3, 1 ) = 20.0 ! Outside + in( 3, 2 ) = -10.0 + in( 3, 3 ) = 0.5 + in( 4, 1 ) = 20.0 ! Boundary + in( 4, 2 ) = 0.0 + in( 4, 3 ) = -2.0 + + call ast_trann( reg, 4, 3, 4, in, .true., 3, 4, out, status ) + + if( out( 1, 1 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 1' ) + if( out( 1, 2 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 2' ) + if( out( 1, 3 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 3' ) + + if( out( 2, 1 ) .ne. in( 2,1 )) call stopit( status, 'Int: pc 4' ) + if( out( 2, 2 ) .ne. in( 2,2 )) call stopit( status, 'Int: pc 5' ) + if( out( 2, 3 ) .ne. in( 2,3 )) call stopit( status, 'Int: pc 6' ) + + if( out( 3, 1 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 7' ) + if( out( 3, 2 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 8' ) + if( out( 3, 3 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 9' ) + + if( out( 4, 1 ) .ne. in( 4,1 )) call stopit( status, 'Int: pc 10') + if( out( 4, 2 ) .ne. in( 4,2 )) call stopit( status, 'Int: pc 11') + if( out( 4, 3 ) .ne. in( 4,3 )) call stopit( status, 'Int: pc 12') + + + + outperm(1) = 2 + outperm(2) = -1 + outperm(3) = 1 + + inperm(1) = 3 + inperm(2) = 1 + + pm = ast_permmap( 2, inperm, 3, outperm, 1.5D0, ' ', status ) + + frm2 = ast_frame( 3, 'Domain=B', status ) + reg = ast_mapregion( int1, pm, frm2, status ) + + if( .not. ast_isainterval( reg, status ) ) call stopit( status, + : 'Int: perm check 4' ) + if( hasFrameSet( reg, status ) ) call stopit( status, + : 'Int: perm check 5' ) + if( ast_geti( reg, 'naxes', status ) .ne. 3 ) call stopit( status, + : 'Int: perm check 6' ) + + in( 1, 1 ) = 20.0 ! Outside + in( 1, 2 ) = 0.0 + in( 1, 3 ) = -0.5 + in( 2, 1 ) = 20.0 ! Inside + in( 2, 2 ) = 1.5 + in( 2, 3 ) = -0.5 + in( 3, 1 ) = 20.0 ! Outside + in( 3, 2 ) = 1.6 + in( 3, 3 ) = -0.5 + in( 4, 1 ) = 0.5 ! Boundary + in( 4, 2 ) = 1.5 + in( 4, 3 ) = 0.0 + + call ast_trann( reg, 4, 3, 4, in, .true., 3, 4, out, status ) + + if( out( 1, 1 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 13') + if( out( 1, 2 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 14') + if( out( 1, 3 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 15') + + if( out( 2, 1 ) .ne. in( 2,1 )) call stopit( status, 'Int: pc 16') + if( out( 2, 2 ) .ne. in( 2,2 )) call stopit( status, 'Int: pc 17') + if( out( 2, 3 ) .ne. in( 2,3 )) call stopit( status, 'Int: pc 18') + + if( out( 3, 1 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 19') + if( out( 3, 2 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 20') + if( out( 3, 3 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 21') + + if( out( 4, 1 ) .ne. in( 4,1 )) call stopit( status, 'Int: pc 22') + if( out( 4, 2 ) .ne. in( 4,2 )) call stopit( status, 'Int: pc 23') + if( out( 4, 3 ) .ne. in( 4,3 )) call stopit( status, 'Int: pc 24') + + + + call ast_negate( int1, status ) + call ast_set( int1, 'closed=0', status ) + reg = ast_mapregion( int1, pm, frm2, status ) + call ast_negate( int1, status ) + call ast_set( int1, 'closed=1', status ) + + if( .not. ast_isainterval( reg, status ) ) call stopit( status, + : 'Int: perm check 7' ) + if( hasFrameSet( reg, status ) ) call stopit( status, + : 'Int: perm check 8' ) + if( ast_geti( reg, 'naxes', status ) .ne. 3 ) call stopit( status, + : 'Int: perm check 9' ) + + in( 1, 1 ) = 20.0 ! Inside + in( 1, 2 ) = 0.0 + in( 1, 3 ) = -0.5 + in( 2, 1 ) = 20.0 ! Outside + in( 2, 2 ) = 1.5 + in( 2, 3 ) = -0.5 + in( 3, 1 ) = 20.0 ! Inside + in( 3, 2 ) = 1.6 + in( 3, 3 ) = -0.5 + in( 4, 1 ) = 0.5 ! Outside + in( 4, 2 ) = 1.5 + in( 4, 3 ) = 0.0 + + call ast_trann( reg, 4, 3, 4, in, .true., 3, 4, out, status ) + + if( out( 1, 1 ) .ne. in( 1,1 )) call stopit( status, 'Int: pc 25') + if( out( 1, 2 ) .ne. in( 1,2 )) call stopit( status, 'Int: pc 26') + if( out( 1, 3 ) .ne. in( 1,3 )) call stopit( status, 'Int: pc 27') + + if( out( 2, 1 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 28') + if( out( 2, 2 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 29') + if( out( 2, 3 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 30') + + if( out( 3, 1 ) .ne. in( 3,1 )) call stopit( status, 'Int: pc 31') + if( out( 3, 2 ) .ne. in( 3,2 )) call stopit( status, 'Int: pc 32') + if( out( 3, 3 ) .ne. in( 3,3 )) call stopit( status, 'Int: pc 33') + + if( out( 4, 1 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 34') + if( out( 4, 2 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 35') + if( out( 4, 3 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 36') + + + + + frm1 = ast_frame( 3, 'Domain=A', status ) + + + lbnd(1) = 0.0 + lbnd(2) = 0.0 + lbnd(3) = 0.0 + ubnd(1) = 0.01 + ubnd(2) = 0.01 + ubnd(3) = 0.01 + unc = ast_box( frm1, 0, lbnd, ubnd, AST__NULL, ' ', status ) + + lbnd(1) = 0.5 + lbnd(2) = -1.0 + lbnd(3) = -2.0 + ubnd(1) = AST__BAD + ubnd(2) = AST__BAD + ubnd(3) = 0.0 + + int1 = ast_interval( frm1, lbnd, ubnd, unc, ' ', status ) + + outperm(1) = 1 + outperm(2) = 3 + + inperm(1) = 1 + inperm(2) = -1 + inperm(3) = 2 + + pm = ast_permmap( 3, inperm, 2, outperm, 1.0D0, ' ', status ) + + frm2 = ast_frame( 2, 'Domain=B', status ) + reg = ast_mapregion( int1, pm, frm2, status ) + + if( .not. ast_isainterval( reg, status ) ) call stopit( status, + : 'Int: perm check 10' ) + if( hasFrameSet( reg, status ) ) call stopit( status, + : 'Int: perm check 11' ) + if( ast_geti( reg, 'naxes', status ) .ne. 2 ) call stopit( status, + : 'Int: perm check 12' ) + + xin( 1 ) = 0.4 ! Out + yin( 1 ) = -1.0 + xin( 2 ) = 1.0 ! Out + yin( 2 ) = 0.1 + xin( 3 ) = 1.0 ! Out + yin( 3 ) = -2.1 + xin( 4 ) = 0.5 ! Boundary + yin( 4 ) = -1.0 + xin( 5 ) = 10.0 ! In + yin( 5 ) = -0.1 + xin( 6 ) = 0.55 ! Boundary + yin( 6 ) = -2.0 + + + call ast_tran2( reg, 6, xin, yin, .true., xout, yout, status ) + + if( xout( 1 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 37') + if( yout( 1 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 38') + if( xout( 2 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 39') + if( yout( 2 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 40') + if( xout( 3 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 41') + if( yout( 3 ) .ne. AST__BAD ) call stopit( status, 'Int: pc 42') + if( xout( 4 ) .ne. xin( 4 ) ) call stopit( status, 'Int: pc 43') + if( yout( 4 ) .ne. yin( 4 ) ) call stopit( status, 'Int: pc 44') + if( xout( 5 ) .ne. xin( 5 ) ) call stopit( status, 'Int: pc 45') + if( yout( 5 ) .ne. yin( 5 ) ) call stopit( status, 'Int: pc 46') + if( xout( 6 ) .ne. xin( 6 ) ) call stopit( status, 'Int: pc 47') + if( yout( 6 ) .ne. yin( 6 ) ) call stopit( status, 'Int: pc 48') + + + pm = ast_permmap( 3, inperm, 2, outperm, -2.0D0, ' ', status ) + reg = ast_mapregion( int1, pm, frm2, status ) + + if( .not. ast_isanullregion( reg, status ) ) call stopit( status, + : 'Int: perm check 13' ) + if( hasFrameSet( reg, status ) ) call stopit( status, + : 'Int: perm check 14' ) + if( ast_geti( reg, 'naxes', status ) .ne. 2 ) call stopit( status, + : 'Int: perm check 15' ) + if( ast_getl( reg, 'negated', status ) ) call stopit( status, + : 'Int: perm check 16' ) + + + call ast_negate( int1, status ) + reg = ast_mapregion( int1, pm, frm2, status ) + + if( .not. ast_isanullregion( reg, status ) ) call stopit( status, + : 'Int: perm check 17' ) + if( hasFrameSet( reg, status ) ) call stopit( status, + : 'Int: perm check 18' ) + if( ast_geti( reg, 'naxes', status ) .ne. 2 ) call stopit( status, + : 'Int: perm check 19' ) + if( .NOT.ast_getl( reg, 'negated', status ) ) call stopit( status, + : 'Int: perm check 20' ) + + + + + call ast_end( status ) + if( status .ne. sai__ok ) write(*,*) 'Interval tests failed' + + end + + + subroutine checkPolygon( status ) + implicit none + include 'AST_PAR' + include 'SAE_PAR' + + integer status, frm, unc, pol1, pol2, f2, r2, r3, r4 + double precision pi, p(5,2), q(5,2), p1(2), p2(2) + double precision xin(2), yin(2), xout(2), yout(2), lbnd(5), + : ubnd(5) + logical hasframeset + + + if( status .ne.sai__ok ) return + + call ast_begin( status ) + + pi = acos( -1.0d0 ) + + frm = ast_SkyFrame( ' ', status ) + + p1(1) = 0.0 + p1(2) = 0.5*pi + p2(1) = 0.01 + unc = ast_circle( frm, 1, p1, p2, AST__NULL, ' ', status ) + + p(1,1) = 0.0 + p(1,2) = 0.0 + p(2,1) = 1.0 + p(2,2) = 0.5*pi + p(3,1) = 0.5*pi + p(3,2) = 0.25*pi + p(4,1) = 0.25*pi + p(4,2) = 0.0 + p(5,1) = 0.25*pi + p(5,2) = 0.25*pi + + pol1 = ast_polygon( frm, 5, 5, p, unc, 'closed=0', status ) + + call checkdump( pol1, 'checkdump pol1', status ) + + + p(1,1) = 0.0 ! On boundary + p(1,2) = 0.0 + p(2,1) = 1.0 ! Outside + p(2,2) = 0.5*pi + 0.1 + p(3,1) = 0.5*pi - 0.1 ! Inside + p(3,2) = 0.25*pi + p(4,1) = 0.0 ! On boundary + p(4,2) = 0.1 + p(5,1) = 0.25*pi ! Inside + p(5,2) = 0.25*pi + 0.1 + + call ast_trann( pol1, 5, 2, 5, p, .true., 2, 5, q, status ) + + if( q(1,1) .ne. AST__BAD ) call stopit( status, 'Poly 1' ) + if( q(1,2) .ne. AST__BAD ) call stopit( status, 'Poly 1b' ) + if( q(2,1) .ne. AST__BAD ) call stopit( status, 'Poly 2' ) + if( q(2,2) .ne. AST__BAD ) call stopit( status, 'Poly 2b' ) + if( q(3,1) .ne. p(3,1) ) call stopit( status, 'Poly 3' ) + if( q(3,2) .ne. p(3,2) ) call stopit( status, 'Poly 3b' ) + if( q(4,1) .ne. AST__BAD ) call stopit( status, 'Poly 4' ) + if( q(4,2) .ne. AST__BAD ) call stopit( status, 'Poly 4b' ) + if( q(5,1) .ne. p(5,1) ) call stopit( status, 'Poly 5' ) + if( q(5,2) .ne. p(5,2) ) call stopit( status, 'Poly 5b' ) + + + call ast_setl( pol1, 'closed', .true., status ) + call ast_trann( pol1, 5, 2, 5, p, .true., 2, 5, q, status ) + if( q(1,1) .ne. p(1,1) ) call stopit( status, 'Poly 6' ) + if( q(1,2) .ne. p(1,2) ) call stopit( status, 'Poly 6b' ) + if( q(2,1) .ne. AST__BAD ) call stopit( status, 'Poly 7' ) + if( q(2,2) .ne. AST__BAD ) call stopit( status, 'Poly 7b' ) + if( q(3,1) .ne. p(3,1) ) call stopit( status, 'Poly 8' ) + if( q(3,2) .ne. p(3,2) ) call stopit( status, 'Poly 8b' ) + if( q(4,1) .ne. p(4,1) ) call stopit( status, 'Poly 9' ) + if( q(4,2) .ne. p(4,2) ) call stopit( status, 'Poly 9b' ) + if( q(5,1) .ne. p(5,1) ) call stopit( status, 'Poly 10' ) + if( q(5,2) .ne. p(5,2) ) call stopit( status, 'Poly 10b' ) + + call ast_setl( pol1, 'negated', .true., status ) + call ast_trann( pol1, 5, 2, 5, p, .true., 2, 5, q, status ) + if( q(1,1) .ne. p(1,1) ) call stopit( status, 'Poly 11' ) + if( q(1,2) .ne. p(1,2) ) call stopit( status, 'Poly 11b' ) + if( q(2,1) .ne. p(2,1) ) call stopit( status, 'Poly 12' ) + if( q(2,2) .ne. p(2,2) ) call stopit( status, 'Poly 12b' ) + if( q(3,1) .ne. AST__BAD ) call stopit( status, 'Poly 13' ) + if( q(3,2) .ne. AST__BAD ) call stopit( status, 'Poly 13b' ) + if( q(4,1) .ne. p(4,1) ) call stopit( status, 'Poly 14' ) + if( q(4,2) .ne. p(4,2) ) call stopit( status, 'Poly 14b' ) + if( q(5,1) .ne. AST__BAD ) call stopit( status, 'Poly 15' ) + if( q(5,2) .ne. AST__BAD ) call stopit( status, 'Poly 15b' ) + + call ast_setl( pol1, 'closed', .false., status ) + call ast_trann( pol1, 5, 2, 5, p, .true., 2, 5, q, status ) + if( q(1,1) .ne. AST__BAD ) call stopit( status, 'Poly 16' ) + if( q(1,2) .ne. AST__BAD ) call stopit( status, 'Poly 16b' ) + if( q(2,1) .ne. p(2,1) ) call stopit( status, 'Poly 17' ) + if( q(2,2) .ne. p(2,2) ) call stopit( status, 'Poly 17b' ) + if( q(3,1) .ne. AST__BAD ) call stopit( status, 'Poly 18' ) + if( q(3,2) .ne. AST__BAD ) call stopit( status, 'Poly 18b' ) + if( q(4,1) .ne. AST__BAD ) call stopit( status, 'Poly 19' ) + if( q(4,2) .ne. AST__BAD ) call stopit( status, 'Poly 19b' ) + if( q(5,1) .ne. AST__BAD ) call stopit( status, 'Poly 20' ) + if( q(5,2) .ne. AST__BAD ) call stopit( status, 'Poly 20b' ) + + + if( hasframeset( pol1, status ) ) then + call stopit( status, 'pol1 has FrameSet' ) + end if + + call ast_setc( pol1, 'system', 'fk5', status ) + call checkdump( pol1, 'checkdump pol2', status ) + + if( .not. hasframeset( pol1, status ) ) then + call stopit( status, 'pol1 does not have FrameSet' ) + end if + + call ast_seti( pol1, 'meshsize', 30, status ) + + pol2 = ast_simplify( pol1, status ) + + if( hasframeset( pol2, status ) ) then + call stopit( status, 'pol2 has FrameSet' ) + end if + + + + frm = ast_SkyFrame( ' ', status ) + + p1(1) = 0.0 + p1(2) = 0.5*pi + p2(1) = 0.01 + unc = ast_circle( frm, 1, p1, p2, AST__NULL, ' ', status ) + + p(1,1) = 1.5*pi + p(1,2) = 0.4*pi + p(2,1) = pi + p(2,2) = 0.4*pi + p(3,1) = 0.5*pi + p(3,2) = 0.4*pi + p(4,1) = 0.0 + p(4,2) = 0.4*pi + + pol1 = ast_polygon( frm, 4, 5, p, unc, ' ', status ) + + xin(1) = 0.0 + yin(1) = 0.5*pi + call ast_tran2( pol1, 1, xin, yin, .true., xout, yout, status ) + + if( xout(1) .ne. xin(1) ) call stopit( status, 'Poly 21' ) + if( yout(1) .ne. yin(1) ) call stopit( status, 'Poly 22' ) + + call ast_getregionbounds( pol1, lbnd, ubnd, status ) + if( abs( lbnd(1) ) .gt. 1.0E-10 ) call stopit( status, 'Poly 23' ) + if( abs( lbnd(2) - 1.25663708 ) .gt. 1.0E-6 ) + : call stopit( status, 'Poly 24' ) + if( abs( ubnd(1) - 6.28318531 ) .gt. 1.0E-6 ) + : call stopit( status, 'Poly 25' ) + if( abs( ubnd(2) - 1.57079633 ) .gt. 1.0E-6 ) + : call stopit( status, 'Poly 26' ) + + + f2 = ast_specframe( 'Unit=Angstrom', status ) + lbnd( 1 ) = 5000.0 + ubnd( 1 ) = 6000.0 + r2 = ast_interval( f2, lbnd, ubnd, AST__NULL, ' ', status ) + r3 = ast_prism( pol1, r2, ' ', status ) + r4 = ast_Simplify( r3, status ) + + call ast_getregionbounds( r4, lbnd, ubnd, status ) + if( abs( lbnd(1) ) .gt. 1.0E-10 ) call stopit( status, 'Poly 27' ) + if( abs( lbnd(2) - 1.25663708 ) .gt. 1.0E-6 ) + : call stopit( status, 'Poly 28' ) + if( abs( ubnd(1) - 6.28318531 ) .gt. 1.0E-6 ) + : call stopit( status, 'Poly 29' ) + if( abs( ubnd(2) - 1.57079633 ) .gt. 1.0E-6 ) + : call stopit( status, 'Poly 30' ) + if( abs( lbnd(3) - 5000.0 ) .gt. 1.0E-10 ) + : call stopit( status, 'Poly 31' ) + if( abs( ubnd(3) - 6000.0 ) .gt. 1.0E-6 ) + : call stopit( status, 'Poly 32' ) + + + + + + + + call ast_end( status ) + if( status .ne. sai__ok ) write(*,*) 'Polygon tests failed' + + end + + + + + + subroutine checkBox( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'PRM_PAR' + + integer status, box1, frm1, i, fc, fs, map1, perm(3), frm2, box3, + : box2, frm3, map2, res, j, bfrm, cfrm, reg1, map, + : npoint + double precision p1(3), p2(3), v2, xin(9), yin(9), xout(9), + : yout(9),in(4,3),out(4,3),matrix(9),grid(250,2) + character*(AST__SZCHR) t1, t2, cards(9)*80 + logical hasframeset + + integer lbnd_in(2), ubnd_in(2) + real rin(5,5),image(50,50) + integer outperm(3), inperm(3),pm, reg, unc + + + data cards /'CTYPE1 = ''RA---TAN''', + : 'CTYPE2 = ''DEC--TAN''', + : 'CRPIX1 = 100', + : 'CRPIX2 = 100', + : 'CRVAL1 = 71.619724', + : 'CRVAL2 = 42.971835', + : ' ', + : 'CDELT1 = 0.6', + : 'CDELT2 = 0.6' / + + if( status .ne. sai__ok ) return + + call ast_begin( status ) + + fc = ast_fitschan( ast_null, ast_null, ' ', status ) + do i = 1, 9 + call ast_putfits( fc, cards(i), .false., status ) + end do + call ast_clear( fc, 'card', status ) + fs = ast_read( fc, status ) + + frm1 = ast_getframe( fs, ast__current, status ) + call ast_seti( frm1, 'digits(1)', 12, status ) + + p1( 1 ) = 1.25 + p1( 2 ) = 0.75 + p2( 1 ) = 1.5 + p2( 2 ) = 0.5 + + box1 = ast_box( frm1, 0, p1, p2, AST__NULL, ' ', status ) + call checkdump( box1, 'checkdump box1', status ) + + if( ast_getc( box1, 'system', status ) .ne. 'ICRS' ) + : call stopit( status, 'box1 system is not ICRS' ) + + call ast_setc( box1, 'system', 'galactic', status ) + + perm(1)=2 + perm(2)=1 + call ast_permaxes( box1, perm, status ) + + box3 = ast_copy( box1, status ) + + yin(1) = 2.82175432250852 + xin(1) = -0.0269096590283195 + yin(2) = 2.70798275154741 + xin(2) = 0.2467384819891 + + call ast_tran2( box1, 2, xin, yin, .true., xout, yout, status ) + + if( abs( yout(1)-2.82175422 ) .gt. 1.0E-6 ) + : call stopit( status, 'error 1' ) + if( abs( xout(1)+0.0269096587 ) .gt. 1.0E-7 ) + : call stopit( status, 'error 2' ) + if( yout(2) .ne. AST__BAD ) call stopit( status, 'error 3' ) + if( xout(2) .ne. AST__BAD ) call stopit( status, 'error 4' ) + + + if( .not. ast_getl( box3, 'Adaptive', status ) ) + : call stopit( status, 'error 4a' ) + + call ast_setl( box3, 'Adaptive', .false., status ) + call ast_setc( box3, 'system', 'icrs', status ) + + yin(1) = 2.82175432250852 + xin(1) = -0.0269096590283195 + yin(2) = 2.70798275154741 + xin(2) = 0.2467384819891 + + call ast_tran2( box3, 2, xin, yin, .true., xout, yout, status ) + + if( abs( yout(1)-2.82175422 ) .gt. 1.0E-8 ) + : call stopit( status, 'error 1' ) + if( abs( xout(1)+0.0269096587 ) .gt. 1.0E-8 ) + : call stopit( status, 'error 2' ) + if( yout(2) .ne. AST__BAD ) call stopit( status, 'error 4b' ) + if( xout(2) .ne. AST__BAD ) call stopit( status, 'error 4c' ) + + call ast_clear( box3, 'system', status ) + + yin(1) = 2.82175432250852 + xin(1) = -0.0269096590283195 + yin(2) = 2.70798275154741 + xin(2) = 0.2467384819891 + + call ast_tran2( box3, 2, xin, yin, .true., xout, yout, status ) + + if( abs( yout(1)-2.82175422 ) .gt. 1.0E-8 ) + : call stopit( status, 'error 1' ) + if( abs( xout(1)+0.0269096587 ) .gt. 1.0E-8 ) + : call stopit( status, 'error 2' ) + if( yout(2) .ne. AST__BAD ) call stopit( status, 'error 4d' ) + if( xout(2) .ne. AST__BAD ) call stopit( status, 'error 4e' ) + + box2 = ast_simplify( box1, status ) + + call ast_setc( box1, 'system', 'icrs', status ) + call ast_permaxes( box1, perm, status ) + + t1 = ast_format( frm1, 1, 0.25D0, status ) + call ast_annul( frm1, status ) + t2 = ast_format( box1, 1, 0.25D0, status ) + if( t1 .ne. t2 ) call stopit( status, + : 'ast_format is different for frm1 and box1' ) + + i = ast_unformat( box1, 1, t2, v2, status ) + if( abs( v2 - 0.25 ) .GT. 1.0E-10 ) then + call stopit( status, 'ast_unformat failed for box1' ) + end if + + if( ast_getc( box1, 'System', status ) .ne. 'ICRS' ) then + call stopit( status, 'Box1(b) system is not ICRS' ) + end if + + if( ast_getc( box1, 'Equinox', status ) .ne. '2000.0' ) then + call stopit( status, 'Box1 equinox is not 2000.0' ) + end if + + if( .not. ast_getl( box1, 'Closed', status ) ) then + call stopit( status, 'Box1 closed is not .true.' ) + end if + + xin( 1 ) = 1.25 + yin( 1 ) = 0.75 + xin( 2 ) = 1.0 + yin( 2 ) = 1.0 + xin( 3 ) = 1.0 + yin( 3 ) = 0.5 + xin( 4 ) = 1.5 + yin( 4 ) = 0.5 + xin( 5 ) = 1.5 + yin( 5 ) = 1.0 + xin( 6 ) = 1.0 + yin( 6 ) = 1.2 + xin( 7 ) = 0.8 + yin( 7 ) = 0.5 + xin( 8 ) = 1.5 + yin( 8 ) = 0.45 + xin( 9 ) = 1.501 + yin( 9 ) = 1.0 + + call ast_tran2( BOX1, 9, xin, yin, .true., xout, yout, status ) + + if( xout( 1 ) .ne. 1.25 ) call stopit( status, 'error A1' ) + if( yout( 1 ) .ne. 0.75 ) call stopit( status, 'error A2' ) + if( xout( 2 ) .ne. 1.0 ) call stopit( status, 'error A3' ) + if( yout( 2 ) .ne. 1.0 ) call stopit( status, 'error A4' ) + if( xout( 3 ) .ne. 1.0 ) call stopit( status, 'error A5' ) + if( yout( 3 ) .ne. 0.5 ) call stopit( status, 'error A6' ) + if( xout( 4 ) .ne. 1.5 ) call stopit( status, 'error A7' ) + if( yout( 4 ) .ne. 0.5 ) call stopit( status, 'error A8' ) + if( xout( 5 ) .ne. 1.5 ) call stopit( status, 'error A9' ) + if( yout( 5 ) .ne. 1.0 ) call stopit( status, 'error A10' ) + if( xout( 6 ) .ne. AST__BAD ) call stopit( status, 'error A11' ) + if( yout( 6 ) .ne. AST__BAD ) call stopit( status, 'error A12' ) + if( xout( 7 ) .ne. AST__BAD ) call stopit( status, 'error A13' ) + if( yout( 7 ) .ne. AST__BAD ) call stopit( status, 'error A14' ) + if( xout( 8 ) .ne. AST__BAD ) call stopit( status, 'error A15' ) + if( yout( 8 ) .ne. AST__BAD ) call stopit( status, 'error A16' ) + if( xout( 9 ) .ne. AST__BAD ) call stopit( status, 'error A17' ) + if( yout( 9 ) .ne. AST__BAD ) call stopit( status, 'error A18' ) + + call ast_tran2( box1, 9, xin, yin, .false., xout, yout, status ) + + if( xout( 1 ) .ne. 1.25 ) call stopit( status, 'error B1' ) + if( yout( 1 ) .ne. 0.75 ) call stopit( status, 'error B2' ) + if( xout( 2 ) .ne. 1.0 ) call stopit( status, 'error B3' ) + if( yout( 2 ) .ne. 1.0 ) call stopit( status, 'error B4' ) + if( xout( 3 ) .ne. 1.0 ) call stopit( status, 'error B5' ) + if( yout( 3 ) .ne. 0.5 ) call stopit( status, 'error B6' ) + if( xout( 4 ) .ne. 1.5 ) call stopit( status, 'error B7' ) + if( yout( 4 ) .ne. 0.5 ) call stopit( status, 'error B8' ) + if( xout( 5 ) .ne. 1.5 ) call stopit( status, 'error B9' ) + if( yout( 5 ) .ne. 1.0 ) call stopit( status, 'error B10' ) + if( xout( 6 ) .ne. AST__BAD ) call stopit( status, 'error B11' ) + if( yout( 6 ) .ne. AST__BAD ) call stopit( status, 'error B12' ) + if( xout( 7 ) .ne. AST__BAD ) call stopit( status, 'error B13' ) + if( yout( 7 ) .ne. AST__BAD ) call stopit( status, 'error B14' ) + if( xout( 8 ) .ne. AST__BAD ) call stopit( status, 'error B15' ) + if( yout( 8 ) .ne. AST__BAD ) call stopit( status, 'error B16' ) + if( xout( 9 ) .ne. AST__BAD ) call stopit( status, 'error B17' ) + if( yout( 9 ) .ne. AST__BAD ) call stopit( status, 'error B18' ) + + call ast_negate( box1, status ) + call ast_tran2( box1, 9, xin, yin, .true., xout, yout, status ) + + if( xout( 1 ) .ne. AST__BAD ) call stopit( status, 'error C1' ) + if( yout( 1 ) .ne. AST__BAD ) call stopit( status, 'error C2' ) + if( xout( 2 ) .ne. 1.0 ) call stopit( status, 'error C3' ) + if( yout( 2 ) .ne. 1.0 ) call stopit( status, 'error C4' ) + if( xout( 3 ) .ne. 1.0 ) call stopit( status, 'error C5' ) + if( yout( 3 ) .ne. 0.5 ) call stopit( status, 'error C6' ) + if( xout( 4 ) .ne. 1.5 ) call stopit( status, 'error C7' ) + if( yout( 4 ) .ne. 0.5 ) call stopit( status, 'error C8' ) + if( xout( 5 ) .ne. 1.5 ) call stopit( status, 'error C9' ) + if( yout( 5 ) .ne. 1.0 ) call stopit( status, 'error C10' ) + if( xout( 6 ) .ne. 1.0 ) call stopit( status, 'error C11' ) + if( yout( 6 ) .ne. 1.2 ) call stopit( status, 'error C12' ) + if( xout( 7 ) .ne. 0.8 ) call stopit( status, 'error C13' ) + if( yout( 7 ) .ne. 0.5 ) call stopit( status, 'error C14' ) + if( xout( 8 ) .ne. 1.5 ) call stopit( status, 'error C15' ) + if( yout( 8 ) .ne. 0.45 ) call stopit( status, 'error C16' ) + if( xout( 9 ) .ne. 1.501 ) call stopit( status, 'error C17' ) + if( yout( 9 ) .ne. 1.0 ) call stopit( status, 'error C18' ) + + call ast_setl( box1, 'closed', .false., status ) + call ast_negate( box1, status ) + call ast_tran2( box1, 9, xin, yin, .true., xout, yout, status ) + + if( xout( 1 ) .ne. 1.25 ) call stopit( status, 'error D1' ) + if( yout( 1 ) .ne. 0.75 ) call stopit( status, 'error D2' ) + if( xout( 2 ) .ne. AST__BAD ) call stopit( status, 'error D3' ) + if( yout( 2 ) .ne. AST__BAD ) call stopit( status, 'error D4' ) + if( xout( 3 ) .ne. AST__BAD ) call stopit( status, 'error D5' ) + if( yout( 3 ) .ne. AST__BAD ) call stopit( status, 'error D6' ) + if( xout( 4 ) .ne. AST__BAD ) call stopit( status, 'error D7' ) + if( yout( 4 ) .ne. AST__BAD ) call stopit( status, 'error D8' ) + if( xout( 5 ) .ne. AST__BAD ) call stopit( status, 'error D9' ) + if( yout( 5 ) .ne. AST__BAD ) call stopit( status, 'error D10' ) + if( xout( 6 ) .ne. AST__BAD ) call stopit( status, 'error D11' ) + if( yout( 6 ) .ne. AST__BAD ) call stopit( status, 'error D12' ) + if( xout( 7 ) .ne. AST__BAD ) call stopit( status, 'error D13' ) + if( yout( 7 ) .ne. AST__BAD ) call stopit( status, 'error D14' ) + if( xout( 8 ) .ne. AST__BAD ) call stopit( status, 'error D15' ) + if( yout( 8 ) .ne. AST__BAD ) call stopit( status, 'error D16' ) + if( xout( 9 ) .ne. AST__BAD ) call stopit( status, 'error D17' ) + if( yout( 9 ) .ne. AST__BAD ) call stopit( status, 'error D18' ) + + call ast_setl( box1, 'Negated', .true., status ) + call ast_tran2( box1, 9, xin, yin, .true., xout, yout, status ) + + if( xout( 1 ) .ne. AST__BAD ) call stopit( status, 'error E1' ) + if( yout( 1 ) .ne. AST__BAD ) call stopit( status, 'error E2' ) + if( xout( 2 ) .ne. AST__BAD ) call stopit( status, 'error E3' ) + if( yout( 2 ) .ne. AST__BAD ) call stopit( status, 'error E4' ) + if( xout( 3 ) .ne. AST__BAD ) call stopit( status, 'error E5' ) + if( yout( 3 ) .ne. AST__BAD ) call stopit( status, 'error E6' ) + if( xout( 4 ) .ne. AST__BAD ) call stopit( status, 'error E7' ) + if( yout( 4 ) .ne. AST__BAD ) call stopit( status, 'error E8' ) + if( xout( 5 ) .ne. AST__BAD ) call stopit( status, 'error E9' ) + if( yout( 5 ) .ne. AST__BAD ) call stopit( status, 'error E10' ) + if( xout( 6 ) .ne. 1.0 ) call stopit( status, 'error E11' ) + if( yout( 6 ) .ne. 1.2 ) call stopit( status, 'error E12' ) + if( xout( 7 ) .ne. 0.8 ) call stopit( status, 'error E13' ) + if( yout( 7 ) .ne. 0.5 ) call stopit( status, 'error E14' ) + if( xout( 8 ) .ne. 1.5 ) call stopit( status, 'error E15' ) + if( yout( 8 ) .ne. 0.45 ) call stopit( status, 'error E16' ) + if( xout( 9 ) .ne. 1.501 ) call stopit( status, 'error E17' ) + if( yout( 9 ) .ne. 1.0 ) call stopit( status, 'error E18' ) + + call ast_clear( box1, 'Negated', status ) + call ast_clear( box1, 'Closed', status ) + + call ast_addframe( fs, ast__current, ast_unitmap(2,' ',status), + : box1, status ) + + + + map1 = ast_getmapping( fs, ast__current, ast__current, status ) + + if( .not.ast_isaregion( map1, status ) ) + : call stopit( status, 'map1 is not a Region' ) + + call ast_setl( fs, 'Negated', .true., status ) + if( ast_getl( box1, 'Negated', status ) ) + : call stopit( status, + : 'FrameSet Negated attribute reflected in box1' ) + call ast_clear( fs, 'Negated', status ) + + map1 = ast_getmapping( fs, ast__base, ast__current, status ) + + call ast_tran2( map1, 9, xin, yin, .false., xout, yout, status ) + + if( xout( 1 ) .eq. AST__BAD ) call stopit( status, 'error F1' ) + if( yout( 1 ) .eq. AST__BAD ) call stopit( status, 'error F2' ) + if( xout( 2 ) .eq. AST__BAD ) call stopit( status, 'error F3' ) + if( yout( 2 ) .eq. AST__BAD ) call stopit( status, 'error F4' ) + if( xout( 3 ) .eq. AST__BAD ) call stopit( status, 'error F5' ) + if( yout( 3 ) .eq. AST__BAD ) call stopit( status, 'error F6' ) + if( xout( 4 ) .eq. AST__BAD ) call stopit( status, 'error F7' ) + if( yout( 4 ) .eq. AST__BAD ) call stopit( status, 'error F8' ) + if( xout( 5 ) .eq. AST__BAD ) call stopit( status, 'error F9' ) + if( yout( 5 ) .eq. AST__BAD ) call stopit( status, 'error F10' ) + if( xout( 6 ) .ne. AST__BAD ) call stopit( status, 'error F11' ) + if( yout( 6 ) .ne. AST__BAD ) call stopit( status, 'error F12' ) + if( xout( 7 ) .ne. AST__BAD ) call stopit( status, 'error F13' ) + if( yout( 7 ) .ne. AST__BAD ) call stopit( status, 'error F14' ) + if( xout( 8 ) .ne. AST__BAD ) call stopit( status, 'error F15' ) + if( yout( 8 ) .ne. AST__BAD ) call stopit( status, 'error F16' ) + if( xout( 9 ) .ne. AST__BAD ) call stopit( status, 'error F17' ) + if( yout( 9 ) .ne. AST__BAD ) call stopit( status, 'error F18' ) + + call ast_tran2( map1, 9, xout, yout, .true., xout, yout, status ) + + if( abs( xout( 1 ) - 1.25 ) .gt. 1.0D-7 ) call stopit( status, + : 'error G1' ) + if( abs( yout( 1 ) - 0.75 ) .gt. 1.0D-7 ) call stopit( status, + : 'error G2' ) + if( xout( 6 ) .ne. AST__BAD ) call stopit( status, 'error G11' ) + if( yout( 6 ) .ne. AST__BAD ) call stopit( status, 'error G12' ) + if( xout( 7 ) .ne. AST__BAD ) call stopit( status, 'error G13' ) + if( yout( 7 ) .ne. AST__BAD ) call stopit( status, 'error G14' ) + if( xout( 8 ) .ne. AST__BAD ) call stopit( status, 'error G15' ) + if( yout( 8 ) .ne. AST__BAD ) call stopit( status, 'error G16' ) + if( xout( 9 ) .ne. AST__BAD ) call stopit( status, 'error G17' ) + if( yout( 9 ) .ne. AST__BAD ) call stopit( status, 'error G18' ) + + + + + frm2 = ast_specframe( 'Unit=Angstrom', status ) + p1( 1 ) = 1000.0 + p2( 1 ) = 1100.0 + box2 = ast_box( frm2, 0, p1, p2, AST__NULL, ' ', status ) + frm3 = ast_cmpframe( box1, box2, ' ', status ) + + perm(1)=2 + perm(2)=3 + perm(3)=1 + call ast_permaxes( frm3, perm, status ) + call ast_setc( frm3, 'system(1)', 'galactic', status ) + call ast_setc( frm3, 'system(2)', 'Freq', status ) + + in( 1, 1 ) = -0.0269096590283195 ! In both boxes + in( 1, 2 ) = 2997924.58 + in( 1, 3 ) = 2.82175432250852 + in( 2, 1 ) = 0.2467384819891 ! In spec box, out sky box + in( 2, 2 ) = 2997924.58 + in( 2, 3 ) = 2.70798275154741 + in( 3, 1 ) = -0.0269096590283195 ! Out spec box in sky box + in( 3, 2 ) = 4000000.0 + in( 3, 3 ) = 2.82175432250852 + in( 4, 1 ) = 0.2467384819891 ! Out spec box, out sky box + in( 4, 2 ) = 4000000.0 + in( 4, 3 ) = 2.70798275154741 + call ast_trann( frm3, 4, 3, 4, in, .true., 3, 4, out, status ) + + if( abs( out(1,1)+0.0269096587 ) .gt. 1.0E-8 ) + : call stopit( status, 'error H1' ) + if( abs( out(1,2)-2997924.5 ) .gt. 1.0E-1 ) + : call stopit( status, 'error H2' ) + if( abs( out(1,3)-2.82175422 ) .gt. 1.0E-6 ) + : call stopit( status, 'error H3' ) + + if( out(2,1) .ne. ast__bad ) call stopit( status, 'error H4' ) + if( abs( out(2,2)-2997924.5 ) .gt. 1.0E-1 ) + : call stopit( status, 'error H5' ) + if( out(2,3) .ne. ast__bad ) call stopit( status, 'error H6' ) + + if( abs( out(3,1)+0.0269096587 ) .gt. 1.0E-8 ) + : call stopit( status, 'error H7' ) + if( out(3,2) .ne. ast__bad ) call stopit( status, 'error H8' ) + if( abs( out(3,3)-2.82175422 ) .gt. 1.0E-6 ) + : call stopit( status, 'error H9' ) + + if( out(4,1) .ne. ast__bad ) call stopit( status, 'error H10' ) + if( out(4,2) .ne. ast__bad ) call stopit( status, 'error H11' ) + if( out(4,3) .ne. ast__bad ) call stopit( status, 'error H12' ) + + if( .not. ast_getl( frm3, 'closed(1)', status ) ) + : call stopit( status, 'compound frame region is not closed' ) + + + + +C +C Testing astMapRegion +C + + frm1 = ast_frame( 3, 'Domain=A', status ) + p1(1) = 100 + p1(2) = 200 + p1(3) = 300 + p2(1) = 0 + p2(2) = 400 + p2(3) = 250 + box1 = ast_box( frm1, 0, p1, p2, AST__NULL, ' ', status ) + + frm2 = ast_frame( 3, 'Domain=B', status ) + + matrix(1) = 2.0 + matrix(2) = 0.0 + matrix(3) = 0.0 + matrix(4) = 0.0 + matrix(5) = 4.0 + matrix(6) = 0.0 + matrix(7) = 0.0 + matrix(8) = 0.0 + matrix(9) = 6.0 + + map2 = ast_matrixmap( 3, 3, 0, matrix, ' ', status ) + box2 = ast_mapregion( box1, map2, frm2, status ) + + if( ast_getc( box2, 'Domain', status ) .ne. 'B' ) then + call stopit( status, 'ast_mapregion1: Box2 domain is not B' ) + end if + + if( hasframeset( box2, status ) ) then + call stopit( status, 'ast_mapregion2: Box2 has FrameSet' ) + end if + + matrix(1) = 2.0 + matrix(2) = .1 + matrix(3) = 0.0 + matrix(4) = 0.0 + matrix(5) = 4.0 + matrix(6) = 0.0 + matrix(7) = 0.0 + matrix(8) = 0.0 + matrix(9) = 6.0 + + map2 = ast_matrixmap( 3, 3, 0, matrix, ' ', status ) + + box2 = ast_mapregion( box1, map2, frm2, status ) + + if( ast_getc( box2, 'Domain', status ) .ne. 'B' ) then + call stopit( status, 'ast_mapregion3: Box2 domain is not B' ) + end if + + if( hasframeset( box2, status ) ) then + call stopit( status, 'ast_mapregion4: Box2 has FrameSet' ) + end if + + call checkdump( box2, 'checkdump box2', status ) + + frm1 = ast_frame( 1, 'Domain=A', status ) + p1(1) = 100 + p2(1) = 0 + box1 = ast_box( frm1, 0, p1, p2, AST__NULL, ' ', status ) + + frm2 = ast_frame( 1, 'Domain=B', status ) + + map2 = ast_zoommap( 1, 2.0D0, ' ', status ) + box2 = ast_mapregion( box1, map2, frm2, status ) + + if( ast_getc( box2, 'Domain', status ) .ne. 'B' ) then + call stopit( status, 'ast_mapregion5: Box2 domain is not B' ) + end if + + if( hasframeset( box2, status ) ) then + call stopit( status, 'ast_mapregion6: Box2 has FrameSet (B)' ) + end if + + frm1 = ast_skyframe( ' ', status ) + p1(1) = 0 + p1(2) = 0 + p2(1) = 0.001 + p2(2) = 0.001 + box1 = ast_box( frm1, 0, p1, p2, AST__NULL, ' ', status ) + + frm2 = ast_copy( frm1, status ) + call ast_setd( frm2, 'skyref(1)', 0.0005D0, status ) + call ast_setc( frm2, 'skyrefis', 'origin', status ) + + fs = ast_convert( frm1, frm2, ' ', status ) + + box2 = ast_mapregion( box1, fs, frm2, status ) + + if( hasframeset( box2, status ) ) then + call stopit( status, 'ast_mapregion7: Box2 has FrameSet (C)' ) + end if + + xin( 1 ) = 0.00049 + yin( 1 ) = 0.0009 + xin( 2 ) = 0.00051 + yin( 2 ) = 0.0009 + xin( 3 ) = -0.0016 + yin( 3 ) = 0.0 + xin( 4 ) = -0.0014 + yin( 4 ) = 0.0 + xin( 5 ) = 6.2815853 + yin( 5 ) = 0.0 + xin( 6 ) = 6.2817853 + yin( 6 ) = 0.0 + + call ast_tran2( box2, 6, xin, yin, .true., xout, yout, status ) + + if( abs( xout( 1 ) - xin( 1 ) ) .gt. 1D-10 ) call stopit( status, + : 'error I1' ) + if( abs( yout( 1 ) - yin( 1 ) ) .gt. 1D-10 ) call stopit( status, + : 'error I2' ) + + if( xout(2) .ne. AST__BAD ) call stopit( status, 'error I3' ) + if( yout(2) .ne. AST__BAD ) call stopit( status, 'error I4' ) + if( xout(5) .ne. AST__BAD ) call stopit( status, 'error I5' ) + if( yout(5) .ne. AST__BAD ) call stopit( status, 'error I6' ) + if( xout(3) .ne. AST__BAD ) call stopit( status, 'error I7' ) + if( yout(3) .ne. AST__BAD ) call stopit( status, 'error I8' ) + + if( abs( xout( 4 ) - xin( 4 ) ) .gt. 1D-10 ) call stopit( status, + : 'error I9' ) + if( abs( yout( 4 ) - yin( 4 ) ) .gt. 1D-10 ) call stopit( status, + : 'error I10' ) + if( abs( xout( 6 ) - xin( 6 ) ) .gt. 1D-10 ) call stopit( status, + : 'error I11' ) + if( abs( yout( 6 ) - yin( 6 ) ) .gt. 1D-10 ) call stopit( status, + : 'error I12' ) + + + call ast_setc( box2, 'skyrefis', 'pole', status ) + box2 = ast_Simplify( box2, status ) + + if( hasframeset( box2, status ) ) then + call stopit( status, 'ast_mapregion8: Box2 has '// + : 'FrameSet (B)' ) + end if + +C +C Testing astOverlap +C + + frm1 = ast_frame( 3, 'Domain=A', status ) + p1(1) = 100 + p1(2) = 200 + p1(3) = 300 + p2(1) = 0 + p2(2) = 400 + p2(3) = 250 + box1 = ast_box( frm1, 0, p1, p2, AST__NULL, 'closed=1', status ) + + frm2 = ast_frame( 3, 'Domain=B', status ) + box2 = ast_box( frm2, 0, p1, p2, AST__NULL, 'closed=0', status ) + + if( ast_overlap( box1, box2, status ) .ne. 0 ) then + call stopit( status, 'ast_overlap A: result should be zero' ) + end if + + if( ast_overlap( box1, box1, status ) .ne. 5 ) then + call stopit( status, 'ast_overlap B: result should be 5' ) + end if + + if( ast_overlap( box2, box2, status ) .ne. 5 ) then + call stopit( status, 'ast_overlap C: result should be 5' ) + end if + + call ast_setc( frm2, 'Domain', 'A', status ) + p1(1) = 100 + p1(2) = 200 + p1(3) = 300 + p2(1) = -100 + p2(2) = 600 + p2(3) = 400 + box2 = ast_box( frm2, 0, p1, p2, AST__NULL, ' ', status ) + + if( ast_overlap( box1, box2, status ) .ne. 2 ) then + write(*,*) 'Result is ',ast_overlap( box1, box2, status ) + call stopit( status, 'ast_overlap D: result should be 2' ) + end if + + if( ast_overlap( box2, box1, status ) .ne. 3 ) then + write(*,*) 'Result is ',ast_overlap( box2, box1, status ) + call stopit( status, 'ast_overlap E: result should be 3' ) + end if + + p1(1) = 300 + p1(2) = 200 + p1(3) = 300 + p2(1) = 201 + p2(2) = 400 + p2(3) = 250 + box2 = ast_box( frm2, 0, p1, p2, AST__NULL, ' ', status ) + + if( ast_overlap( box1, box2, status ) .ne. 1 ) then + call stopit( status, 'ast_overlap F: result should be 1' ) + end if + + if( ast_overlap( box2, box1, status ) .ne. 1 ) then + call stopit( status, 'ast_overlap G: result should be 1' ) + end if + + p1(1) = 150 + p1(2) = 200 + p1(3) = 300 + p2(1) = 50 + p2(2) = 400 + p2(3) = 250 + box2 = ast_box( frm2, 0, p1, p2, AST__NULL, ' ', status ) + + if( ast_overlap( box1, box2, status ) .ne. 4 ) then + call stopit( status, 'ast_overlap H: result should be 4' ) + end if + + if( ast_overlap( box2, box1, status ) .ne. 4 ) then + call stopit( status, 'ast_overlap I: result should be 4' ) + end if + + +* Pixel masks + frm1 = ast_frame( 2, 'Domain=A', status ) + p1(1) = 1.0 + p1(2) = 1.0 + p2(1) = 3.1 + p2(2) = 4.1 + box1 = ast_box( frm1, 0, p1, p2, AST__NULL, ' ', status ) + + lbnd_in(1) = 1 + lbnd_in(2) = 1 + ubnd_in(1) = 5 + ubnd_in(2) = 5 + + do i =1, 5 + do j = 1, 5 + rin( j,i)=1.0 + end do + end do + + res = ast_maskr( box1, AST__NULL, .false., 2, lbnd_in, ubnd_in, + : rin, VAL__BADR, status ) + + if( res .ne. 13 ) then + write(*,*) 'Res is ',res + call stopit( status, 'res should be 13' ) + end if + + do i =1, 5 + do j = 1, 5 + if( j .le. 3 .and. i .le. 4 ) then + if( rin(j,i) .NE. 1.0 ) then + write(*,*) 'rin(',j,',',i,') = ',rin(j,i) + call stopit( status, 'Above value should be 1.0' ) + end if + else + if( rin(j,i) .NE. VAL__BADR ) then + write(*,*) 'rin(',j,',',i,') = ',rin(j,i) + call stopit( status, 'Above value should be '// + : 'VAL__BADR' ) + end if + endif + end do + end do + + cards(3) = 'CRPIX1 = 20' + cards(4) = 'CRPIX2 = 20' + cards(5) = 'CRVAL1 = 0.0' + cards(6) = 'CRVAL2 = 0.0' + cards(7) = ' ' + cards(8) = 'CDELT1 = 1.6' + cards(9) = 'CDELT2 = 1.6' + + fc = ast_fitschan( ast_null, ast_null, ' ', status ) + do i = 1, 9 + call ast_putfits( fc, cards(i), .false., status ) + end do + call ast_clear( fc, 'card', status ) + fs = ast_read( fc, status ) + + p1( 1 ) = 0.13089969 ! RA at centre = 0h30m + p1( 2 ) = 0.17453293 ! Dec at centre = 10d + p2( 1 ) = -0.13089971 ! RA at corner = 23h30m + p2( 2 ) = -0.17453293 ! Dec at corner = -10d + + box1 = ast_box( fs, 0, p1, p2, AST__NULL, ' ', status ) + + do i =1, 50 + do j = 1, 50 + image( j,i)=1.0 + end do + end do + + lbnd_in(1) = 1 + lbnd_in(2) = 1 + ubnd_in(1) = 50 + ubnd_in(2) = 50 + + call ast_negate( box1, status ) + call ast_invert( fs, status ) + res = ast_maskr( box1, fs, .false., 2, lbnd_in, ubnd_in, + : image, VAL__BADR, status ) + + if( res .ne. 522 ) then + write(*,*) 'Res is ',res + call stopit( status, 'res should be 522' ) + end if + + if( image(34,42) .ne. VAL__BADR ) then + write(*,*) 'image(34,42) = ',image(34,42) + call stopit( status, 'Above value should be VAL__BADR' ) + end if + + if( image(33,42) .ne. 1.0 ) then + write(*,*) 'image(33,42) = ',image(33,42) + call stopit( status, 'Above value should be 1.0' ) + end if + + if( image(16,14) .ne. VAL__BADR ) then + write(*,*) 'image(16,14) = ',image(16,14) + call stopit( status, 'Above value should be VAL__BADR' ) + end if + + if( image(15,13) .ne. 1.0 ) then + write(*,*) 'image(15,13) = ',image(15,13) + call stopit( status, 'Above value should be 1.0' ) + end if + + +* Changing the number of axes in the Region + + frm1 = ast_frame( 2, 'Domain=A', status ) + + p1(1) = 0.0 + p1(2) = 0.0 + p2(1) = 0.01 + unc = ast_circle( frm1, 1, p1, p2, AST__NULL, ' ', status ) + + p1(1) = -1.0 + p1(2) = 1.0 + p2(1) = -2.0 + p2(2) = 1.5 + box1 = ast_box( frm1, 0, p1, p2, unc, ' ', status ) + + + outperm(1) = 2 + outperm(2) = -1 + outperm(3) = 1 + + inperm(1) = 3 + inperm(2) = 1 + + pm = ast_permmap( 2, inperm, 3, outperm, 0.0D0, ' ', status ) + + frm2 = ast_frame( 3, 'Domain=B', status ) + reg = ast_mapregion( box1, pm, frm2, status ) + + if( .not. ast_isabox( reg, status ) ) call stopit( status, + : 'Box: perm check 1' ) + if( hasFrameSet( reg, status ) ) call stopit( status, + : 'Box: perm check 2' ) + if( ast_geti( reg, 'naxes', status ) .ne. 3 ) call stopit( status, + : 'Box: perm check 3' ) + + in( 1, 1 ) = 0.0 ! Outside + in( 1, 2 ) = 0.0 + in( 1, 3 ) = 0.0 + in( 2, 1 ) = 0.7 ! Inside + in( 2, 2 ) = 0.0 + in( 2, 3 ) = -0.5 + in( 3, 1 ) = 2.0 ! Outside + in( 3, 2 ) = 0.0 + in( 3, 3 ) = -1.0 + in( 4, 1 ) = 1.5 ! Boundary + in( 4, 2 ) = 0.0 + in( 4, 3 ) = 0.0 + + call ast_trann( reg, 4, 3, 4, in, .true., 3, 4, out, status ) + + if( out( 1, 1 ) .ne. AST__BAD ) call stopit( status, 'box: pc 1' ) + if( out( 1, 2 ) .ne. AST__BAD ) call stopit( status, 'box: pc 2' ) + if( out( 1, 3 ) .ne. AST__BAD ) call stopit( status, 'box: pc 3' ) + + if( out( 2, 1 ) .ne. in( 2,1 )) call stopit( status, 'box: pc 4' ) + if( out( 2, 2 ) .ne. in( 2,2 )) call stopit( status, 'box: pc 5' ) + if( out( 2, 3 ) .ne. in( 2,3 )) call stopit( status, 'box: pc 6' ) + + if( out( 3, 1 ) .ne. AST__BAD ) call stopit( status, 'box: pc 7' ) + if( out( 3, 2 ) .ne. AST__BAD ) call stopit( status, 'box: pc 8' ) + if( out( 3, 3 ) .ne. AST__BAD ) call stopit( status, 'box: pc 9' ) + + if( out( 4, 1 ) .ne. in( 4,1 )) call stopit( status, 'box: pc 10') + if( out( 4, 2 ) .ne. in( 4,2 )) call stopit( status, 'box: pc 11') + if( out( 4, 3 ) .ne. in( 4,3 )) call stopit( status, 'box: pc 12') + + + outperm(1) = 2 + outperm(2) = -1 + outperm(3) = 1 + + inperm(1) = 3 + inperm(2) = 1 + + pm = ast_permmap( 2, inperm, 3, outperm, 1.0D0, ' ', status ) + + frm2 = ast_frame( 3, 'Domain=B', status ) + reg = ast_mapregion( box1, pm, frm2, status ) + + if( .not. ast_isabox( reg, status ) ) call stopit( status, + : 'Box: perm check 4' ) + if( hasFrameSet( reg, status ) ) call stopit( status, + : 'Box: perm check 5' ) + if( ast_geti( reg, 'naxes', status ) .ne. 3 ) call stopit( status, + : 'Box: perm check 6' ) + + in( 1, 1 ) = 0.0 ! Outside + in( 1, 2 ) = 0.0 + in( 1, 3 ) = 0.0 + in( 2, 1 ) = 0.7 ! boundary + in( 2, 2 ) = 1.0 + in( 2, 3 ) = -0.5 + in( 3, 1 ) = 0.7 ! outside + in( 3, 2 ) = 1.1 + in( 3, 3 ) = -0.5 + in( 4, 1 ) = 0.7 ! outside + in( 4, 2 ) = 0.9 + in( 4, 3 ) = -0.5 + + call ast_trann( reg, 4, 3, 4, in, .true., 3, 4, out, status ) + + if( out( 1, 1 ) .ne. AST__BAD ) call stopit( status, 'box: pc 11') + if( out( 1, 2 ) .ne. AST__BAD ) call stopit( status, 'box: pc 12') + if( out( 1, 3 ) .ne. AST__BAD ) call stopit( status, 'box: pc 13') + + if( out( 2, 1 ) .ne. in( 2,1 )) call stopit( status, 'box: pc 14') + if( out( 2, 2 ) .ne. in( 2,2 )) call stopit( status, 'box: pc 15') + if( out( 2, 3 ) .ne. in( 2,3 )) call stopit( status, 'box: pc 16') + + if( out( 3, 1 ) .ne. AST__BAD ) call stopit( status, 'box: pc 17') + if( out( 3, 2 ) .ne. AST__BAD ) call stopit( status, 'box: pc 18') + if( out( 3, 3 ) .ne. AST__BAD ) call stopit( status, 'box: pc 19') + + if( out( 4, 1 ) .ne. AST__BAD ) call stopit( status, 'box: pc 17') + if( out( 4, 2 ) .ne. AST__BAD ) call stopit( status, 'box: pc 18') + if( out( 4, 3 ) .ne. AST__BAD ) call stopit( status, 'box: pc 19') + + + + outperm(1) = 1 + + inperm(1) = 1 + inperm(2) = -1 + + pm = ast_permmap( 2, inperm, 1, outperm, 1.4D0, ' ', status ) + + frm2 = ast_frame( 1, 'Domain=B', status ) + reg = ast_mapregion( box1, pm, frm2, status ) + + if( .not. ast_isabox( reg, status ) ) call stopit( status, + : 'Box: perm check 7' ) + if( hasFrameSet( reg, status ) ) call stopit( status, + : 'Box: perm check 8' ) + if( ast_geti( reg, 'naxes', status ) .ne. 1 ) call stopit( status, + : 'Box: perm check 9' ) + + xin( 1 ) = -2.5 ! Outside + xin( 2 ) = -1.9 ! Inside + xin( 3 ) = 0.0 ! boundary + xin( 4 ) = 0.5 ! outside + + call ast_tran1( reg, 4, xin, .true., xout, status ) + + if( xout( 1 ) .ne. AST__BAD ) call stopit( status, 'box: pc 20') + if( xout( 2 ) .ne. xin(2) ) call stopit( status, 'box: pc 21') + if( xout( 3 ) .ne. xin(3) ) call stopit( status, 'box: pc 22') + if( xout( 4 ) .ne. AST__BAD ) call stopit( status, 'box: pc 23') + + + + outperm(1) = 1 + + inperm(1) = 1 + inperm(2) = -1 + + pm = ast_permmap( 2, inperm, 1, outperm, 1.6D0, ' ', status ) + frm2 = ast_frame( 1, 'Domain=B', status ) + reg = ast_mapregion( box1, pm, frm2, status ) + if( .not. ast_isanullregion( reg, status ) ) call stopit( status, + : 'Box: perm check 10' ) + + + if( hasFrameSet( reg, status ) ) call stopit( status, + : 'Box: perm check 11' ) + if( ast_geti( reg, 'naxes', status ) .ne. 1 ) call stopit( status, + : 'Box: perm check 12' ) + + xin( 1 ) = -2.5 + xin( 2 ) = -1.9 + xin( 3 ) = 0.0 + xin( 4 ) = 0.5 + + call ast_tran1( reg, 4, xin, .true., xout, status ) + + if( xout( 1 ) .ne. AST__BAD ) call stopit( status, 'box: pc 24') + if( xout( 2 ) .ne. AST__BAD ) call stopit( status, 'box: pc 25') + if( xout( 3 ) .ne. AST__BAD ) call stopit( status, 'box: pc 26') + if( xout( 4 ) .ne. AST__BAD ) call stopit( status, 'box: pc 27') + + + frm1 = ast_frame( 3, 'Domain=A', status ) + + p1(1) = 0.5 + p1(2) = -1.0 + p1(3) = -2.0 + p2(1) = 30.0 + p2(2) = 5.0 + p2(3) = 0.0 + + box1 = ast_box( frm1, 1, p1, p2, AST__NULL, ' ', status ) + + outperm(1) = 1 + outperm(2) = 3 + + inperm(1) = 1 + inperm(2) = -1 + inperm(3) = 2 + + pm = ast_permmap( 3, inperm, 2, outperm, 1.0D0, ' ', status ) + + frm2 = ast_frame( 2, 'Domain=B', status ) + reg = ast_mapregion( box1, pm, frm2, status ) + + if( .not. ast_isabox( reg, status ) ) call stopit( status, + : 'Box: perm check 13' ) + + if( hasFrameSet( reg, status ) ) call stopit( status, + : 'Box: perm check 14' ) + if( ast_geti( reg, 'naxes', status ) .ne. 2 ) call stopit( status, + : 'Box: perm check 15' ) + + xin( 1 ) = 0.4 ! Out + yin( 1 ) = -1.0 + xin( 2 ) = 1.0 ! Out + yin( 2 ) = 0.1 + xin( 3 ) = 1.0 ! Out + yin( 3 ) = -2.1 + xin( 4 ) = 0.5 ! Boundary + yin( 4 ) = -1.0 + xin( 5 ) = 10.0 ! In + yin( 5 ) = -0.1 + xin( 6 ) = 0.55 ! Boundary + yin( 6 ) = -2.0 + + + call ast_tran2( reg, 6, xin, yin, .true., xout, yout, status ) + + if( xout( 1 ) .ne. AST__BAD ) call stopit( status, 'Box: pc 37') + if( yout( 1 ) .ne. AST__BAD ) call stopit( status, 'Box: pc 38') + if( xout( 2 ) .ne. AST__BAD ) call stopit( status, 'Box: pc 39') + if( yout( 2 ) .ne. AST__BAD ) call stopit( status, 'Box: pc 40') + if( xout( 3 ) .ne. AST__BAD ) call stopit( status, 'Box: pc 41') + if( yout( 3 ) .ne. AST__BAD ) call stopit( status, 'Box: pc 42') + if( xout( 4 ) .ne. xin( 4 ) ) call stopit( status, 'Box: pc 43') + if( yout( 4 ) .ne. yin( 4 ) ) call stopit( status, 'Box: pc 44') + if( xout( 5 ) .ne. xin( 5 ) ) call stopit( status, 'Box: pc 45') + if( yout( 5 ) .ne. yin( 5 ) ) call stopit( status, 'Box: pc 46') + if( xout( 6 ) .ne. xin( 6 ) ) call stopit( status, 'Box: pc 47') + if( yout( 6 ) .ne. yin( 6 ) ) call stopit( status, 'Box: pc 48') + + cards(1) = 'CTYPE1 = ''RA---TAN''' + cards(2) = 'CTYPE2 = ''DEC--TAN''' + cards(3) = 'CRPIX1 = 20' + cards(4) = 'CRPIX2 = 20' + cards(5) = 'CRVAL1 = 0.0' + cards(6) = 'CRVAL2 = 0.0' + cards(7) = 'CROTA1 = 30.0' + cards(8) = 'CDELT1 = -0.00001' + cards(9) = 'CDELT2 = 0.00001' + + fc = ast_fitschan( ast_null, ast_null, ' ', status ) + do i = 1, 9 + call ast_putfits( fc, cards(i), .false., status ) + end do + call ast_clear( fc, 'card', status ) + fs = ast_read( fc, status ) + + bfrm = ast_getFrame( fs, AST__BASE, status ) + + p1(1) = 0.0 + p1(2) = 0.0 + p2(1) = 0.1 + unc = ast_circle( bfrm, 1, p1, p2, AST__NULL, ' ', status ) + + p1( 1 ) = 100.0 ! Pix_X at centre + p1( 2 ) = 150.0 ! Pix_Y at centre + p2( 1 ) = 150.0 ! Pix_X at corner + p2( 2 ) = 170.0 ! Pix_Y at corner + + box1 = ast_box( bfrm, 0, p1, p2, AST__NULL, ' ', status ) + + + call ast_getregionmesh( box1, .false., 250, 2, npoint, grid, + : status ) + + if( npoint .ne. 176 ) then + write(*,*) npoint + call stopit( status, 'Box: Error mesh 3' ) + endif + + if( status .ne. SAI__OK ) go to 991 + + do i = 1, npoint + if( abs( grid(i,1) - 100 ) .gt. 50.0D0 ) then + call stopit( status, 'Box: Error mesh 1' ) + else if( abs( grid(i,2) - 150 ) .gt. 20.0D0 ) then + call stopit( status, 'Box: Error mesh 2' ) + endif + enddo + + call ast_getregionmesh( box1, .true., 250, 2, npoint, grid, + : status ) + if( npoint .ne. 198 ) + : call stopit( status, 'Box: Error mesh 4' ) + + if( status .ne. SAI__OK ) go to 991 + + do i = 1, npoint + if( grid(i,1) .ne. 50.0D0 .and. grid(i,1) .ne. 150.0D0 .and. + : grid(i,2) .ne. 130.0D0 .and. grid(i,2) .ne. 170.0D0 ) then + call stopit( status, 'Box: Error mesh 5' ) + endif + enddo + + cfrm = ast_getFrame( fs, AST__CURRENT, status ) + map = ast_getmapping( fs, AST__BASE, AST__CURRENT, status ) + reg1 = ast_mapregion( box1, map, cfrm, status ) + + if( hasFrameSet( reg1, status ) ) call stopit( status, + : 'Box: poly simp 1' ) + if( .not. ast_isapolygon( reg1, status) ) call stopit( status, + : 'Box: poly simp 2' ) + + 991 continue + + call ast_end( status ) + if( status .ne. sai__ok ) write(*,*) 'Box tests failed' + + end + + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + + end + + + + logical function hasframeset( reg, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer reg, status, ch,nw + + logical fsfound, done + common /sink1com/ fsfound, done + external sink1 + + hasframeset = .false. + if( status .ne. sai__ok ) return + + + fsfound = .false. + done = .false. + ch = ast_channel( AST_NULL, sink1, ' ', STATUS ) + nw = ast_write( ch, reg, status ) + call ast_annul( ch, status ) + + hasframeset = fsfound + + end + + subroutine sink1( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + logical fsfound, done + common /sink1com/ fsfound, done + + integer status, l + character line*200 + + if( status .ne. sai__ok ) return + call ast_getline( line, l, status ) + + if( index( line( : l ),'Unc =' ) .GT. 0 ) then + done = .true. + + else if( .not. done .and. + : index( line( : l ),'FrameSet' ) .GT. 0 ) then + fsfound= .true. + end if + + end + + + + subroutine checkPointList( status ) + implicit none + include 'AST_PAR' + include 'SAE_PAR' + + character fwd(1)*30,inv(1)*30 + integer status, frm, reg, reg2, reg3, reg4, mm, map + integer mdata(-1:15),lbnd,ubnd,nbad,unc + double precision pnts( 3 ), xin(3),xout(3), acc, ina, inb, outa, + : outb + data mdata /17*0/ + + if( status .ne.sai__ok ) return + + call ast_begin( status ) + frm = ast_specframe( ' ', status ) + + pnts(1)=0.0 + pnts(2)=1.0E-5 + unc = ast_box( frm, 0, pnts(1), pnts(2), AST__NULL, ' ', status ) + + pnts(1)=1.0 + pnts(2)=1.1 + reg = ast_pointlist( frm, 2, 1, 3, pnts, unc, ' ', status ) + call checkdump( reg, 'checkdump reg', status ) + + if( ast_overlap( reg, reg, status ) .ne. 5 ) then + call stopit( status, + : 'PointList: self is not identical with self' ) + end if + + reg2 = ast_copy( reg, status ) + call ast_negate( reg2, status ) + call checkdump( reg2, 'checkdump reg2', status ) + + if( ast_overlap( reg, reg2, status ) .ne. 6 ) then + call stopit( status, + : 'PointList: overlap with self-exclusion' ) + end if + + + xin( 1 ) = 1.0 + xin( 2 ) = 1.05 + xin( 3 ) = 1.1 + call ast_tran1( reg, 3, xin, .true., xout, status ) + + if( xout( 1 ) .ne. 1.0 ) then + call stopit( status, 'PointList: Error 1' ) + else if( xout( 2 ) .ne. AST__BAD ) then + call stopit( status, 'PointList: Error 2' ) + else if( xout( 3 ) .ne. 1.1 ) then + call stopit( status, 'PointList: Error 3' ) + end if + + + call ast_tran1( reg2, 3, xin, .true., xout, status ) + if( xout( 1 ) .ne. AST__BAD ) then + call stopit( status, 'PointList: Error 4' ) + else if( xout( 2 ) .ne. 1.05 ) then + call stopit( status, 'PointList: Error 5' ) + else if( xout( 3 ) .ne. AST__BAD ) then + call stopit( status, 'PointList: Error 6' ) + end if + + fwd(1) = 'y=x**2' + inv(1) = 'x=y**0.5' + mm = ast_mathmap( 1, 1, 1, fwd, 1, inv, ' ', status ) + reg3 = ast_mapregion( reg, mm, ast_frame(1,' ', status ), status ) + reg4 = ast_simplify( reg3, status ) + call checkdump( reg4, 'checkdump reg4', status ) + + xin( 1 ) = 1.21 + xin( 2 ) = 1.5 + call ast_tran1( reg4, 2, xin, .true., xout, status ) + if( xout( 1 ) .ne. 1.21 ) then + write(*,*) xout(1), ' (should be 1.21)' + call stopit( status, 'PointList: Error 7' ) + else if( xout( 2 ) .ne. AST__BAD ) then + write(*,*) xout(2), ' (should be bad)' + call stopit( status, 'PointList: Error 8' ) + end if + + + lbnd = -1 + ubnd = 15 + + ina = 1.01 + inb = 1.11 + outa = 2.0 + outb = 7.0 + map = ast_winmap( 1, ina, inb, outa, outb, ' ', status ) + + nbad = ast_maski( reg, map, .true., 1, lbnd, ubnd, mdata, 2, + : status ) + + if( nbad .ne. 2 ) then + write(*,*) 'nbad = ',nbad + call stopit( status, 'Above value should be 2' ) + end if + + if( mdata(1) .ne. 0 ) then + write(*,*) 'mdata(1) = ',mdata(1) + call stopit( status, 'Above value should be 0' ) + end if + + if( mdata(2) .ne. 2 ) then + write(*,*) 'mdata(2) = ',mdata(2) + call stopit( status, 'Above value should be 2' ) + end if + + if( mdata(3) .ne. 0 ) then + write(*,*) 'mdata(3) = ',mdata(3) + call stopit( status, 'Above value should be 0' ) + end if + + if( mdata(6) .ne. 0 ) then + write(*,*) 'mdata(6) = ',mdata(6) + call stopit( status, 'Above value should be 0' ) + end if + + if( mdata(7) .ne. 2 ) then + write(*,*) 'mdata(7) = ',mdata(7) + call stopit( status, 'Above value should be 2' ) + end if + + if( mdata(8) .ne. 0 ) then + write(*,*) 'mdata(8) = ',mdata(8) + call stopit( status, 'Above value should be 0' ) + end if + + + + + call ast_end( status ) + if( status .ne. sai__ok ) write(*,*) 'PointList tests failed' + + end + + + + + + + + + subroutine checkCircle( status ) + implicit none + include 'AST_PAR' + include 'SAE_PAR' + + integer status, cir1, cir2, fc, i, fs, frm1,unc,f1,f2,f3, + : npoint, j + double precision p1(4),p2(4),xin(2),yin(2),xout(2),yout(2), + : p3(3),rad,zin(2),zout(2),pp1(3),pp2(3), + : lbnd(2),ubnd(2), mesh(250,3) + character cards(8)*80, sys*40 + logical hasframeset + + double precision in( 2, 3 ), out( 2, 3 ) + + + data cards /'CTYPE1 = ''RA---TAN''', + : 'CTYPE2 = ''DEC--TAN''', + : 'CRPIX1 = 100', + : 'CRPIX2 = 100', + : 'CRVAL1 = 70.0', + : 'CRVAL2 = 80.0', + : 'CDELT1 = 0.6', + : 'CDELT2 = 0.6' / + + + if( status .ne.sai__ok ) return + call ast_begin( status ) + +* Test 2D circles. + + fc = ast_fitschan( ast_null, ast_null, ' ', status ) + do i = 1, 8 + call ast_putfits( fc, cards(i), .false., status ) + end do + call ast_clear( fc, 'card', status ) + fs = ast_read( fc, status ) + + frm1 = ast_getframe( fs, ast__current, status ) + + p1( 1 ) = 0.0 + p1( 2 ) = 1.0 + p2( 1 ) = 0.01 + + cir1 = ast_circle( frm1, 1, p1, p2, AST__NULL, ' ', status ) + call ast_getregionbounds( cir1, lbnd, ubnd, status ) + + if( abs(lbnd(1)-(-0.01850666061475259)) .gt. 1.0E-6 ) + : call stopit( status, 'Circle: Error AA1' ) + if( abs(lbnd(2)-(0.9900000002235173)) .gt. 1.0E-6 ) + : call stopit( status, 'Circle: Error AA2' ) + if( abs(ubnd(1)-(0.01850666061475276)) .gt. 1.0E-6 ) + : call stopit( status, 'Circle: Error AA3' ) + if( abs(ubnd(2)-(1.009994987166073)) .gt. 1.0E-6 ) + : call stopit( status, 'Circle: Error AA4' ) + + p1( 1 ) = 0.0 + p1( 2 ) = 1.57 + p2( 1 ) = 0.01 + + cir1 = ast_circle( frm1, 1, p1, p2, AST__NULL, ' ', status ) + call ast_getregionbounds( cir1, lbnd, ubnd, status ) + + if( abs(lbnd(1)-(0.0)) .gt. 1.0E-6 ) + : call stopit( status, 'Circle: Error AA5' ) + if( abs(lbnd(2)-(1.560000052675599)) .gt. 1.0E-6 ) + : call stopit( status, 'Circle: Error AA6' ) + if( abs(ubnd(1)-(6.283185307179586)) .gt. 1.0E-6 ) + : call stopit( status, 'Circle: Error AA7' ) + if( abs(ubnd(2)-(1.5707963267948966)) .gt. 1.0E-6 ) + : call stopit( status, 'Circle: Error AA8' ) + + call ast_getregionmesh( cir1, .true., 0, 0, npoint, 0, status ) + if( npoint .ne. 200 ) + : call stopit( status, 'Circle: Error mesh 1' ) + + call ast_getregionmesh( cir1, .true., 250, 3, npoint, mesh, + : status ) + + do i = 1, npoint + p2(1) = mesh(i,1) + p2(2) = mesh(i,2) + if( abs( ast_distance( frm1, p1, p2, status ) - 0.01 ) .gt. + : 1.0E-6 ) call stopit( status, 'Circle: Error mesh 2' ) + enddo + + call ast_getregionmesh( cir1, .false., 250, 3, npoint, mesh, + : status ) + + if( npoint .ne. 201 ) then + write(*,*) npoint + call stopit( status, 'Circle: Error mesh 3' ) + endif + + do i = 1, npoint + p2(1) = mesh(i,1) + p2(2) = mesh(i,2) + if( ast_distance( frm1, p1, p2, status ) .gt. 0.01 ) + : call stopit( status, 'Circle: Error mesh 4' ) + enddo + + p1( 1 ) = 1.2217305 + p1( 2 ) = 1.3962634 + p2( 1 ) = 0.8 + p2( 2 ) = 0.8 + + cir1 = ast_circle( frm1, 0, p1, p2, AST__NULL, ' ', status ) + call checkdump( cir1, 'checkdump cir1', status ) + + rad = ast_distance( cir1, p1, p2, status ) + + call ast_offset( frm1, p1, p2, rad*0.999, p3, status ) + xin(1) = p3(1) + yin(1) = p3(2) + call ast_offset( frm1, p1, p2, rad*1.001, p3, status ) + xin(2) = p3(1) + yin(2) = p3(2) + + call ast_tran2( cir1, 2, xin, yin, .true., xout, yout, status ) + if( xout(1) .ne. xin(1) ) call stopit( status, 'Circle: Error 1' ) + if( yout(1) .ne. yin(1) ) call stopit( status, 'Circle: Error 2' ) + if( xout(2) .ne. AST__BAD ) call stopit( status, + : 'Circle: Error 3' ) + if( yout(2) .ne. AST__BAD ) call stopit( status, + : 'Circle: Error 4' ) + + + xin(1) = 0.0 + yin(1) = 1.5707963 + call ast_tran2( cir1, 1, xin, yin, .true., xout, yout, status ) + if( xout(1) .ne. xin(1) ) call stopit( status, 'Circle: Error 1b') + if( yout(1) .ne. yin(1) ) call stopit( status, 'Circle: Error 2b') + + p2(1)=0.0 + p2(2)=0.0 + call ast_offset( frm1, p1, p2, rad*0.999, p3, status ) + xin(1) = p3(1) + yin(1) = p3(2) + call ast_offset( frm1, p1, p2, rad*1.001, p3, status ) + xin(2) = p3(1) + yin(2) = p3(2) + + call ast_tran2( cir1, 2, xin, yin, .true., xout, yout, status ) + if( xout(1) .ne. xin(1) ) call stopit( status, 'Circle: Error 5' ) + if( yout(1) .ne. yin(1) ) call stopit( status, 'Circle: Error 6' ) + if( xout(2) .ne. AST__BAD ) call stopit( status, + : 'Circle: Error 7' ) + if( yout(2) .ne. AST__BAD ) call stopit( status, + : 'Circle: Error 8' ) + + + call ast_setc( cir1, 'system', 'galactic', status ) + cir1 = ast_simplify( cir1, status ) + if( .not. hasframeset( cir1,status ) ) call stopit( status, + : 'Circle: error 9' ) + + + pp1( 1 ) = 0.0 + pp1( 2 ) = 0.0 + pp2( 1 ) = 1.0D-6 + pp2( 2 ) = 1.0D-6 + unc = ast_box( frm1, 0, pp1, pp2, AST__NULL, ' ', status ) + + p1( 1 ) = 1.2217305 + p1( 2 ) = 1.3962634 + p2( 1 ) = 1.2218 + p2( 2 ) = 1.3963 + cir1 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + + rad = ast_distance( cir1, p1, p2, status ) + + call ast_offset( frm1, p1, p2, rad*0.999, p3, status ) + xin(1) = p3(1) + yin(1) = p3(2) + call ast_offset( frm1, p1, p2, rad*1.001, p3, status ) + xin(2) = p3(1) + yin(2) = p3(2) + + call ast_tran2( cir1, 2, xin, yin, .true., xout, yout, status ) + if( xout(1) .ne. xin(1) ) call stopit( status, 'Circle: Error 1b') + if( yout(1) .ne. yin(1) ) call stopit( status, 'Circle: Error 2b') + if( xout(2) .ne. AST__BAD ) call stopit( status, + : 'Circle: Error 3b' ) + if( yout(2) .ne. AST__BAD ) call stopit( status, + : 'Circle: Error 4b' ) + + p2(1)=0.0 + p2(2)=0.0 + call ast_offset( frm1, p1, p2, rad*0.999, p3, status ) + xin(1) = p3(1) + yin(1) = p3(2) + call ast_offset( frm1, p1, p2, rad*1.001, p3, status ) + xin(2) = p3(1) + yin(2) = p3(2) + + call ast_tran2( cir1, 2, xin, yin, .true., xout, yout, status ) + if( xout(1) .ne. xin(1) ) call stopit( status, 'Circle: Error 5b') + if( yout(1) .ne. yin(1) ) call stopit( status, 'Circle: Error 6b') + if( xout(2) .ne. AST__BAD ) call stopit( status, + : 'Circle: Error 7b' ) + if( yout(2) .ne. AST__BAD ) call stopit( status, + : 'Circle: Error 8b' ) + + cir2 = ast_copy( cir1, status ) + call ast_setc( cir2, 'system', 'galactic', status ) + call checkdump( cir2, 'checkdump cir2', status ) + + cir2 = ast_simplify( cir2, status ) + + if( hasframeset( cir2,status ) ) call stopit( status, + : 'Circle: error 9b' ) + + if( ast_overlap( cir1, cir2, status ) .ne. 5 ) call stopit(status, + : 'Circle: Error 10' ) + if( ast_overlap( cir2, cir1, status ) .ne. 5 ) call stopit(status, + : 'Circle: Error 11' ) + + p1( 1 ) = 1.2217305 + p1( 2 ) = 1.3964 + p2( 1 ) = 1.2218 + p2( 2 ) = 1.3963 + cir2 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + if( ast_overlap( cir1, cir2, status ) .ne. 4 ) call stopit(status, + : 'Circle: Error 12' ) + if( ast_overlap( cir2, cir1, status ) .ne. 4 ) call stopit(status, + : 'Circle: Error 13' ) + + p1( 1 ) = 1.2217305 + p1( 2 ) = 1.3962634 + p2( 1 ) = 1.221731 + p2( 2 ) = 1.396268 + cir2 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + if( ast_overlap( cir1, cir2, status ) .ne. 3 ) call stopit(status, + : 'Circle: Error 14' ) + if( ast_overlap( cir2, cir1, status ) .ne. 2 ) call stopit(status, + : 'Circle: Error 15' ) + + p1( 1 ) = 0.8 + p1( 2 ) = 1.0 + p2( 1 ) = 0.88 + p2( 2 ) = 1.05 + cir2 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + if( ast_overlap( cir1, cir2, status ) .ne. 1 ) call stopit(status, + : 'Circle: Error 16' ) + + + p1( 1 ) = 0.8 + p1( 2 ) = 1.5707963 + p2( 1 ) = 0.1 + cir2 = ast_circle( frm1, 1, p1, p2, unc, ' ', status ) + call ast_getregionbounds( cir2, lbnd, ubnd, status ) + if( lbnd(1) .ne. 0.0D0 ) call stopit( status, + : 'Circle: Error 16a' ) + if( abs( lbnd(2) - 1.47079625 ) .gt. 1.0E-6 ) call stopit( status, + : 'Circle: Error 16b' ) + if( abs( ubnd(1) - 6.28318531 ) .gt. 1.0E-6 ) call stopit( status, + : 'Circle: Error 16c' ) + if( abs( ubnd(2) - 1.57079633 ) .gt. 1.0E-6 ) call stopit( status, + : 'Circle: Error 16d' ) + + + frm1 = ast_frame(2,"domain=aa",status) + + pp1( 1 ) = 0.0 + pp1( 2 ) = 0.0 + pp2( 1 ) = 1.0D-6 + pp2( 2 ) = 1.0D-6 + unc = ast_box( frm1, 0, pp1, pp2, AST__NULL, ' ', status ) + + p1( 1 ) = 1.2217305 + p1( 2 ) = 1.3962634 + p2( 1 ) = 1.2218 + p2( 2 ) = 1.3963 + cir2 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + + if( ast_overlap( cir1, cir2, status ) .ne. 0 ) call stopit(status, + : 'Circle: Error 17' ) + if( ast_overlap( cir2, cir1, status ) .ne. 0 ) call stopit(status, + : 'Circle: Error 18' ) + + + f1 = ast_skyframe( ' ', status ) + f2 = ast_frame( 2, ' ', status ) + f3 = ast_cmpframe( f1, f2, ' ', status ) + + p1( 1 ) = 1.0 + p1( 2 ) = 1.0 + p1( 3 ) = 3.0 + p1( 4 ) = 3.0 + p2( 1 ) = 1.01 + p2( 2 ) = 1.02 + p2( 3 ) = 3.01 + p2( 4 ) = 3.01 + cir2 = ast_circle( f3, 0, p1, p2, AST__NULL, ' ', status ) + if( ast_overlap( cir2, cir2, status ) .ne. 5 ) call stopit(status, + : 'Circle: Error 18b' ) + +* Test 3D spheres + + frm1 = ast_frame( 3, ' ', status ) + + pp1( 1 ) = 0.0 + pp1( 2 ) = 0.0 + pp1( 3 ) = 0.0 + pp2( 1 ) = 1.0E-6 + pp2( 2 ) = 2.0E-6 + pp2( 3 ) = 2.0E-6 + unc = ast_box( frm1, 0, pp1, pp2, AST__NULL, ' ', status ) + + p1( 1 ) = 1.0 + p1( 2 ) = 2.0 + p1( 3 ) = 3.0 + p2( 1 ) = 0.0 + p2( 2 ) = -1.0 + p2( 3 ) = -2.0 + cir1 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + call checkdump( cir1, 'checkdump sph1', status ) + + rad = ast_distance( cir1, p1, p2, status ) + + call ast_offset( frm1, p1, p2, rad*0.999, p3, status ) + in(1,1) = p3(1) + in(1,2) = p3(2) + in(1,3) = p3(3) + call ast_offset( frm1, p1, p2, rad*1.001, p3, status ) + in(2,1) = p3(1) + in(2,2) = p3(2) + in(2,3) = p3(3) + + + call ast_trann( cir1, 2, 3, 2, in, .true., 3, 2, out, status ) + + if( out(1,1) .ne. in(1,1) ) call stopit( status, + : 'Sphere: Error 1' ) + if( out(1,2) .ne. in(1,2) ) call stopit( status, + : 'Sphere: Error 2' ) + if( out(1,3) .ne. in(1,3) ) call stopit( status, + : 'Sphere: Error 2z') + if( out(2,1) .ne. AST__BAD ) call stopit( status, + : 'Sphere: Error 3' ) + if( out(2,2) .ne. AST__BAD ) call stopit( status, + : 'Sphere: Error 4' ) + if( out(2,3) .ne. AST__BAD ) call stopit( status, + : 'Sphere: Error 4z' ) + + p2(1)=0.0 + p2(2)=0.0 + p2(3)=0.0 + call ast_offset( frm1, p1, p2, rad*0.999, p3, status ) + in(1,1) = p3(1) + in(1,2) = p3(2) + in(1,3) = p3(3) + call ast_offset( frm1, p1, p2, rad*1.001, p3, status ) + in(2,1) = p3(1) + in(2,2) = p3(2) + in(2,3) = p3(3) + + call ast_trann( cir1, 2, 3, 2, in, .true., 3, 2, out, status ) + if( out(1,1) .ne. in(1,1) ) call stopit( status, + : 'Sphere: Error 5' ) + if( out(1,2) .ne. in(1,2) ) call stopit( status, + : 'Sphere: Error 6' ) + if( out(1,3) .ne. in(1,3) ) call stopit( status, + : 'Sphere: Error 6z') + if( out(2,1) .ne. AST__BAD ) call stopit( status, + : 'Sphere: Error 7' ) + if( out(2,2) .ne. AST__BAD ) call stopit( status, + : 'Sphere: Error 8' ) + if( out(2,3) .ne. AST__BAD ) call stopit( status, + : 'Sphere: Error 8z' ) + + + if( ast_overlap( cir1, cir1, status ) .ne. 5 ) call stopit(status, + : 'Sphere: Error 10' ) + + + + + p1( 1 ) = 1.0 + p1( 2 ) = 2.0 + p1( 3 ) = 3.0 + p2( 1 ) = 0.5 + p2( 2 ) = 0.0 + p2( 3 ) = -1.0 + cir2 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + call checkdump( cir2, 'checkdump sph2', status ) + + if( ast_overlap( cir2, cir1, status ) .ne. 2 ) call stopit(status, + : 'Sphere: Error 11' ) + + if( ast_overlap( cir1, cir2, status ) .ne. 3 ) call stopit(status, + : 'Sphere: Error 12' ) + + + + p1( 1 ) = 1.0 + p1( 2 ) = 0.0 + p1( 3 ) = 3.0 + p2( 1 ) = 0.0 + p2( 2 ) = -1.0 + p2( 3 ) = -2.0 + cir2 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + if( ast_overlap( cir1, cir2, status ) .ne. 4 ) call stopit(status, + : 'Sphere: Error 13' ) + + p1( 1 ) = 1.0 + p1( 2 ) = 102.0 + p1( 3 ) = 3.0 + p2( 1 ) = 0.0 + p2( 2 ) = 99.0 + p2( 3 ) = -2.0 + cir2 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + if( ast_overlap( cir1, cir2, status ) .ne. 1 ) call stopit(status, + : 'Sphere: Error 14' ) + + + p1( 1 ) = 0.0 + p1( 2 ) = 0.0 + p1( 3 ) = 0.0 + p2( 1 ) = 0.0 + p2( 2 ) = 0.0 + p2( 3 ) = 1.0 + cir1 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + + p1( 1 ) = 2.0000001 + p1( 2 ) = 0.0 + p1( 3 ) = 0.0 + p2( 1 ) = 2.000001 + p2( 2 ) = 1.0 + p2( 3 ) = 0.0 + cir2 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + + if( ast_overlap( cir1, cir2, status ) .ne. 4 ) then + write(*,*) ast_overlap( cir1, cir2, status ),' should be 4 ' + call stopit(status, 'Sphere: Error 15' ) + end if + + p1( 1 ) = 2.000001 + p1( 2 ) = 0.0 + p1( 3 ) = 0.0 + p2( 1 ) = 2.000001 + p2( 2 ) = 1.0 + p2( 3 ) = 0.0 + cir2 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + + if( ast_overlap( cir1, cir2, status ) .ne. 4 ) call stopit(status, + : 'Sphere: Error 16' ) + + cir2 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + + call ast_setl( cir1, 'Closed', .false., status ) + call ast_setl( cir2, 'Closed', .false., status ) + if( ast_overlap( cir1, cir2, status ) .ne. 1 ) call stopit(status, + : 'Sphere: Error 17' ) + call ast_clear( cir1, 'Closed', status ) + call ast_clear( cir2, 'Closed', status ) + + p1( 1 ) = 2.000004 + p1( 2 ) = 0.0 + p1( 3 ) = 0.0 + p2( 1 ) = 2.000004 + p2( 2 ) = 1.0 + p2( 3 ) = 0.0 + cir2 = ast_circle( frm1, 0, p1, p2, unc, ' ', status ) + + if( ast_overlap( cir1, cir2, status ) .ne. 1 ) call stopit(status, + : 'Sphere: Error 18' ) + + call ast_end( status ) + if( status .ne. sai__ok ) write(*,*) 'Circle tests failed' + + end + + + + + + + + subroutine checkEllipse( status ) + implicit none + include 'AST_PAR' + include 'SAE_PAR' + + integer status, ell1, ell2, fc, i, fs, frm1, fs2,mm,ell3,ell4, + : reg, unc, f1, f2, f3, f4, f5, map, perm(2) + double precision p1(2),p2(2),p3(2),p4(2),pp1(2),pp2(2) + double precision q1(2),q2(2),q3(2),q4(2),lbnd(2),ubnd(2) + double precision q1b(2),q2b(2),q3b(2),q4b(2) + double precision p1b(2),p2b(2),p3b(2),p4b(2),matrix(4) + character cards(10)*80 + double precision xin(4),yin(4),xout(4),yout(4),rad + logical hasframeset + + data cards /'NAXIS1 = 300', + : 'NAXIS2 = 300', + : 'CTYPE1 = ''RA---TAN''', + : 'CTYPE2 = ''DEC--TAN''', + : 'CRPIX1 = 100', + : 'CRPIX2 = 100', + : 'CRVAL1 = 0.0', + : 'CRVAL2 = 90.0', + : 'CDELT1 = 0.6', + : 'CDELT2 = 0.6' / + + + if( status .ne.sai__ok ) return + call ast_begin( status ) + + f1 = ast_SkyFrame( 'system=fk4', status ) + f3 = ast_cmpframe( ast_pickaxes( f1, 1, 1, map, status ), + : ast_specframe( 'system=wave,unit=um', status ), + : ' ', status ) + perm(1)=2 + perm(2)=1 + call ast_permaxes( f3, perm, status ) + p1(1) = 0.0 + p1(2) = 0.0 + p2(1) = 0.001 + p2(2) = 0.001 + p3(1) = -0.001 + p3(2) = 0.001 + ell1 = ast_ellipse( f3, 0, p1, p2, p3, AST__NULL, ' ', status ) + + xin(1) = 0.0 + yin(1) = 0.00141421 + xin(2) = 0.0 + yin(2) = 0.00141422 + xin(3) = -0.000999 + yin(3) = 0.0009999 + xin(4) = -0.001001 + yin(4) = 0.001001 + call ast_tran2( ell1, 4, xin, yin, .true., xout, yout, status ) + + if( xout(1) .ne. xin(1) ) call stopit( status, 'Ellipse: Cmp 1') + if( yout(1) .ne. yin(1) ) call stopit( status, 'Ellipse: Cmp 2') + if( xout(2) .ne. AST__BAD ) call stopit( status, + : 'Ellipse: Cmp 3' ) + if( yout(2) .ne. AST__BAD ) call stopit( status, + : 'Ellipse: Cmp 4' ) + if( xout(3) .ne. xin(3) ) call stopit( status, 'Ellipse: Cmp 5') + if( yout(3) .ne. yin(3) ) call stopit( status, 'Ellipse: Cmp 6') + if( xout(4) .ne. AST__BAD ) call stopit( status, + : 'Ellipse: Cmp 7' ) + if( yout(4) .ne. AST__BAD ) call stopit( status, + : 'Ellipse: Cmp 8' ) + + call checkdump( ell1, 'checkdump ell1 cmp', status ) + ell2 = ast_simplify( ell1, status ) + call checkdump( ell2, 'checkdump ell2 cmp', status ) + if( ast_overlap( ell1, ell2, status ) .ne. 5 ) call stopit(status, + : 'ellipse: Error 5 cmp' ) + + fc = ast_fitschan( ast_null, ast_null, ' ', status ) + do i = 1, 10 + call ast_putfits( fc, cards(i), .false., status ) + end do + call ast_clear( fc, 'card', status ) + fs = ast_read( fc, status ) + + frm1 = ast_getframe( fs, ast__current, status ) + + p1( 1 ) = 1.2217305 + p1( 2 ) = 1.570796 + p2( 1 ) = 0.9 + p2( 2 ) = 1.470796 + p3( 1 ) = 2.9217305 + p3( 2 ) = 1.370796 + + ell1 = ast_ellipse( frm1, 0, p1, p2, p3, AST__NULL, ' ', status ) + call checkdump( ell1, 'checkdump ell1', status ) + + + call ast_getregionbounds( ell1, lbnd, ubnd, status ) + if( abs( lbnd(1) ) .gt. 1.0E-10 ) call stopit( status, + : 'Error b1' ) + if( abs( lbnd(2) - 1.19059777 ) .gt. 1.0E-6 ) + : call stopit( status, 'Error b2' ) + if( abs( ubnd(1) - 6.28318531 ) .gt. 1.0E-6 ) + : call stopit( status, 'Error b3' ) + if( abs( ubnd(2) - 1.57079633 ) .gt. 1.0E-6 ) + : call stopit( status, 'Error b4' ) + + rad = ast_distance( ell1, p1, p2, status ) + + call ast_offset( frm1, p1, p2, rad*0.999, p4, status ) + xin(1) = p4(1) + yin(1) = p4(2) + call ast_offset( frm1, p1, p2, rad*1.001, p4, status ) + xin(2) = p4(1) + yin(2) = p4(2) + + call ast_tran2( ell1, 2, xin, yin, .true., xout, yout, status ) + if( xout(1) .ne. xin(1) ) call stopit( status, 'Ellipse: Error 1') + if( yout(1) .ne. yin(1) ) call stopit( status, 'Ellipse: Error 2') + if( xout(2) .ne. AST__BAD ) call stopit( status, + : 'Ellipse: Error 3' ) + if( yout(2) .ne. AST__BAD ) call stopit( status, + : 'Ellipse: Error 4' ) + + + call ast_offset( frm1, p1, p2, -rad*0.999, p4, status ) + xin(1) = p4(1) + yin(1) = p4(2) + call ast_offset( frm1, p1, p2, -rad*1.001, p4, status ) + xin(2) = p4(1) + yin(2) = p4(2) + + call ast_tran2( ell1, 2, xin, yin, .true., xout, yout, status ) + if( xout(1) .ne. xin(1) ) call stopit( status, + : 'Ellipse: Error 1b') + if( yout(1) .ne. yin(1) ) call stopit( status, + : 'Ellipse: Error 2b') + if( xout(2) .ne. AST__BAD ) call stopit( status, + : 'Ellipse: Error 3b' ) + if( yout(2) .ne. AST__BAD ) call stopit( status, + : 'Ellipse: Error 4b' ) + + + rad = ast_distance( ell1, p1, p3, status ) + + call ast_offset( frm1, p1, p3, rad*0.999, p4, status ) + xin(1) = p4(1) + yin(1) = p4(2) + call ast_offset( frm1, p1, p3, rad*1.001, p4, status ) + xin(2) = p4(1) + yin(2) = p4(2) + + call ast_tran2( ell1, 2, xin, yin, .true., xout, yout, status ) + if( xout(1) .ne. xin(1) ) call stopit( status, + : 'Ellipse: Error 1c') + if( yout(1) .ne. yin(1) ) call stopit( status, + : 'Ellipse: Error 2c') + if( xout(2) .ne. AST__BAD ) call stopit( status, + : 'Ellipse: Error 3c' ) + if( yout(2) .ne. AST__BAD ) call stopit( status, + : 'Ellipse: Error 4c' ) + + call ast_offset( frm1, p1, p3, -rad*0.999, p4, status ) + xin(1) = p4(1) + yin(1) = p4(2) + call ast_offset( frm1, p1, p3, -rad*1.001, p4, status ) + xin(2) = p4(1) + yin(2) = p4(2) + + call ast_tran2( ell1, 2, xin, yin, .true., xout, yout, status ) + if( xout(1) .ne. xin(1) ) call stopit( status, + : 'Ellipse: Error 1d') + if( yout(1) .ne. yin(1) ) call stopit( status, + : 'Ellipse: Error 2d') + if( xout(2) .ne. AST__BAD ) call stopit( status, + : 'Ellipse: Error 3d' ) + if( yout(2) .ne. AST__BAD ) call stopit( status, + : 'Ellipse: Error 4d' ) + + + ell2 = ast_copy( ell1, status ) + + if( ast_overlap( ell1, ell2, status ) .ne. 5 ) call stopit(status, + : 'ellipse: Error 5' ) + if( ast_overlap( ell2, ell1, status ) .ne. 5 ) call stopit(status, + : 'ellipse: Error 6' ) + + call ast_set( ell2, 'system=galactic', status ) + if( ast_overlap( ell1, ell2, status ) .ne. 5 ) call stopit(status, + : 'ellipse: Error 7' ) + if( ast_overlap( ell2, ell1, status ) .ne. 5 ) call stopit(status, + : 'ellipse: Error 8' ) + + + + + xin(1) = p1( 1 ) + yin(1) = p1( 2 ) + xin(2) = p2( 1 ) + yin(2) = p2( 2 ) + xin(3) = p3( 1 ) + yin(3) = p3( 2 ) + call ast_tran2( fs, 3, xin, yin, .false., xout, yout, status ) + q1(1) = xout(1) + q1(2) = yout(1) + q2(1) = xout(2) + q2(2) = yout(2) + q3(1) = xout(3) + q3(2) = yout(3) + + frm1 = ast_GetFrame( fs, AST__BASE, status ) + + rad = ast_distance( frm1, q1, q2, status ) + + call ast_offset( frm1, q1, q2, rad*1.95, q1b, status ) + + q2b( 1 ) = q2( 1 ) + ( q1b( 1 ) - q1( 1 ) ) + q2b( 2 ) = q2( 2 ) + ( q1b( 2 ) - q1( 2 ) ) + + q3b( 1 ) = q3( 1 ) + ( q1b( 1 ) - q1( 1 ) ) + q3b( 2 ) = q3( 2 ) + ( q1b( 2 ) - q1( 2 ) ) + + xout(1) = q1b(1) + yout(1) = q1b(2) + xout(2) = q2b(1) + yout(2) = q2b(2) + xout(3) = q3b(1) + yout(3) = q3b(2) + call ast_tran2( fs, 3, xout, yout, .true., xin, yin, status ) + p1b( 1 ) = xin(1) + p1b( 2 ) = yin(1) + p2b( 1 ) = xin(2) + p2b( 2 ) = yin(2) + p3b( 1 ) = xin(3) + p3b( 2 ) = yin(3) + + frm1 = ast_GetFrame( fs, AST__CURRENT, status ) + + pp1( 1 ) = 0.0 + pp1( 2 ) = 0.0 + pp2( 1 ) = 1.0D-7 + pp2( 2 ) = 1.0D-7 + unc = ast_box( frm1, 0, pp1, pp2, AST__NULL, ' ', status ) + ell2 = ast_ellipse( frm1, 0, p1b, p2b, p3b, unc, ' ', status ) + if( ast_overlap( ell2, ell1, status ) .ne. 4 ) call stopit(status, + : 'ellipse: Error 9' ) + if( ast_overlap( ell1, ell2, status ) .ne. 4 ) call stopit(status, + : 'ellipse: Error 10' ) + + + call ast_offset( frm1, q1, q2, rad*2.05, q1b, status ) + + q2b( 1 ) = q2( 1 ) + ( q1b( 1 ) - q1( 1 ) ) + q2b( 2 ) = q2( 2 ) + ( q1b( 2 ) - q1( 2 ) ) + + q3b( 1 ) = q3( 1 ) + ( q1b( 1 ) - q1( 1 ) ) + q3b( 2 ) = q3( 2 ) + ( q1b( 2 ) - q1( 2 ) ) + + xout(1) = q1b(1) + yout(1) = q1b(2) + xout(2) = q2b(1) + yout(2) = q2b(2) + xout(3) = q3b(1) + yout(3) = q3b(2) + call ast_tran2( fs, 3, xout, yout, .true., xin, yin, status ) + p1b( 1 ) = xin(1) + p1b( 2 ) = yin(1) + p2b( 1 ) = xin(2) + p2b( 2 ) = yin(2) + p3b( 1 ) = xin(3) + p3b( 2 ) = yin(3) + + frm1 = ast_GetFrame( fs, AST__CURRENT, status ) + pp1( 1 ) = 0.0 + pp1( 2 ) = 0.0 + pp2( 1 ) = 1.0D-7 + pp2( 2 ) = 1.0D-7 + unc = ast_box( frm1, 0, pp1, pp2, AST__NULL, ' ', status ) + ell2 = ast_ellipse( frm1, 0, p1b, p2b, p3b, unc, ' ', status ) + if( ast_overlap( ell2, ell1, status ) .ne. 1 ) call stopit(status, + : 'ellipse: Error 11' ) + if( ast_overlap( ell1, ell2, status ) .ne. 1 ) call stopit(status, + : 'ellipse: Error 12' ) + + p1b( 1 ) = p1( 1 ) + p1b( 2 ) = p1( 2 ) + p2b( 1 ) = p2( 1 ) + p2b( 2 ) = 0.9*p2( 2 ) + 0.1*p1( 2 ) + p3b( 1 ) = p3( 1 ) + p3b( 2 ) = 0.9*p3( 2 ) + 0.1*p1( 2 ) + + ell2 = ast_ellipse( frm1, 0, p1b, p2b, p3b, unc, ' ', status ) + if( ast_overlap( ell2, ell1, status ) .ne. 2 ) call stopit(status, + : 'ellipse: Error 13' ) + if( ast_overlap( ell1, ell2, status ) .ne. 3 ) call stopit(status, + : 'ellipse: Error 14' ) + + + + + + + frm1 = ast_frame( 2, ' ', status ) + + pp1( 1 ) = 0.0 + pp1( 2 ) = 0.0 + pp2( 1 ) = 1.0D-7 + pp2( 2 ) = 1.0D-7 + unc = ast_box( frm1, 0, pp1, pp2, AST__NULL, ' ', status ) + + p1(1)=0.0 + p1(2)=0.0 + p2(1)=1.0 + p2(2)=0.0 + p3(1)=0.0 + p3(2)=0.5 + ell1 = ast_ellipse( frm1, 0, p1, p2, p3, unc, ' ', status ) + + + matrix(1) = 1.73 + matrix(2) = 0.5003 + matrix(3) = -1.0006 + matrix(4) = 0.866 + mm = ast_matrixmap( 2, 2, 0, matrix, ' ', status ) + + ell2 = ast_mapregion( ell1, mm, frm1, status ) + call checkdump( ell2, 'checkdump ell2', status ) + if( hasframeset( ell2, status ) ) call stopit( status, + : 'Ellipse: error 15' ) + call ast_invert( mm, status ) + ell3 = ast_mapregion( ell2, mm, frm1, status ) + if( hasframeset( ell3,status ) ) call stopit( status, + : 'Ellipse: error 16' ) + if( ast_overlap( ell1, ell3, status ) .ne. 5 ) call stopit(status, + : 'ellipse: Error 17' ) + + + frm1 = ast_frame( 2, ' ', status ) + pp1( 1 ) = 0.0 + pp1( 2 ) = 0.0 + pp2( 1 ) = 1.0D-7 + pp2( 2 ) = 1.0D-7 + unc = ast_box( frm1, 0, pp1, pp2, AST__NULL, ' ', status ) + + p1(1)=0.0 + p1(2)=0.0 + p2(1)=1.0 + p2(2)=0.0 + p3(1)=0.0 + p3(2)=1.0 + ell1 = ast_ellipse( frm1, 0, p1, p2, p3, unc, ' ', status ) + reg = ast_simplify( ell1, status ) + if( .not. ast_IsACircle( reg, status ) ) call stopit(status, + : 'ellipse: Error 18' ) + + ell1 = ast_circle( frm1, 0, p1, p2, AST__NULL, ' ', status ) + if( ast_overlap( reg, ell1, status ) .ne. 5 ) call stopit(status, + : 'Ellipse: Error 19' ) + + + + frm1 = ast_skyframe( ' ', status ) + p1(1)=0.0D0 + p1(2)=0.0D0 + p2(1)=0.01D0 + p2(2)=0.01D0 + p3(1)=0.0D0 + p3(2)=0.0D0 + ell1 = ast_ellipse( frm1, 1, p1, p2, p3, AST__NULL, ' ', status ) + + p1(1)=-0.015D0 + p1(2)=0.0D0 + p2(1)=0.01D0 + p2(2)=0.01D0 + p3(1)=0.0D0 + p3(2)=0.0D0 + ell2 = ast_ellipse( frm1, 1, p1, p2, p3, AST__NULL, ' ', status ) + + if( ast_overlap( ell1, ell2, status ) .ne. 4 ) call stopit(status, + : 'Ellipse: Error 20' ) + + p1(1)=6.2681853D0 + p1(2)=0.0D0 + p2(1)=0.01D0 + p2(2)=0.01D0 + p3(1)=0.0D0 + p3(2)=0.0D0 + ell2 = ast_ellipse( frm1, 1, p1, p2, p3, AST__NULL, ' ', status ) + + if( ast_overlap( ell1, ell2, status ) .ne. 4 ) call stopit(status, + : 'Ellipse: Error 21' ) + + p1(1)=-0.015D0 + p1(2)=0.0D0 + p2(1)=0.01D0 + p2(2)=0.01D0 + p3(1)=0.0D0 + p3(2)=0.0D0 + ell1 = ast_ellipse( frm1, 1, p1, p2, p3, AST__NULL, ' ', status ) + + if( ast_overlap( ell1, ell2, status ) .ne. 5 ) call stopit(status, + : 'Ellipse: Error 22' ) + + + + + call ast_end( status ) + if( status .ne. sai__ok ) write(*,*) 'Ellipse tests failed' + + end + + + subroutine checkNullRegion( status ) + implicit none + include 'AST_PAR' + include 'SAE_PAR' + include 'PRM_PAR' + + integer status, f1, f2, f3, nr, cir, i, j, lbnd_in(2), ubnd_in(2), + : nr2, res + double precision p1(4),p2(4),rin(5,5) + logical hasframeset + + if( status .ne.sai__ok ) return + + call ast_begin( status ) + + f1 = ast_skyframe( ' ', status ) + f2 = ast_frame( 2, ' ', status ) + f3 = ast_cmpframe( f1, f2, ' ', status ) + nr = ast_NullRegion( f3, AST__NULL, ' ', status ) + + call checkdump( nr, 'checkdump NullRegion:nr', status ) + + p1( 1 ) = 1.0 + p1( 2 ) = 1.0 + p1( 3 ) = 3.0 + p1( 4 ) = 3.0 + p2( 1 ) = 1.01 + p2( 2 ) = 1.02 + p2( 3 ) = 3.01 + p2( 4 ) = 3.01 + cir = ast_circle( nr, 0, p1, p2, AST__NULL, ' ', status ) + call checkdump( cir, 'checkdump NullRegion:cir', status ) + + if( ast_overlap( cir, nr, status ) .ne. 1 ) call stopit(status, + : 'NullRegion: Error 1' ) + + if( ast_overlap( nr, cir, status ) .ne. 1 ) call stopit(status, + : 'NullRegion: Error 2' ) + + if( ast_overlap( nr, nr, status ) .ne. 5 ) call stopit(status, + : 'NullRegion: Error 3' ) + + call ast_negate( nr, status ) + + if( ast_overlap( cir, nr, status ) .ne. 2 ) call stopit(status, + : 'NullRegion: Error 4' ) + + if( ast_overlap( nr, cir, status ) .ne. 3 ) call stopit(status, + : 'NullRegion: Error 5' ) + + if( ast_overlap( nr, nr, status ) .ne. 5 ) call stopit(status, + : 'NullRegion: Error 6' ) + + call ast_set( nr, 'system(1)=FK4', status ) + nr2 = ast_simplify( nr, status ) + call ast_set( nr2, 'system(1)=ICRS', status ) + nr = ast_simplify( nr2, status ) + if( hasframeset( nr, status ) ) call stopit( status, + : 'NullRegion: error 7' ) + + lbnd_in(1) = 1 + lbnd_in(2) = 1 + ubnd_in(1) = 5 + ubnd_in(2) = 5 + + do i =1, 5 + do j = 1, 5 + rin( j,i)=1.0 + end do + end do + + nr = ast_NullRegion( f2, AST__NULL, 'negated=1', status ) + res = ast_maskd( nr, AST__NULL, .false., 2, lbnd_in, ubnd_in, + : rin, VAL__BADD, status ) + + if( res .ne. 0 ) then + write(*,*) 'NullRegion:Res is ',res + call stopit( status, 'res should be 0' ) + end if + + do i =1, 5 + do j = 1, 5 + if( rin(j,i) .NE. 1.0 ) then + write(*,*) 'rin(',j,',',i,') = ',rin(j,i) + call stopit( status, 'Above value should be 1.0' ) + end if + end do + end do + + call ast_negate( nr, status ) + res = ast_maskd( nr, AST__NULL, .false., 2, lbnd_in, ubnd_in, + : rin, VAL__BADD, status ) + + if( res .ne. 25 ) then + write(*,*) 'NullRegion:Res is ',res + call stopit( status, 'res should be 25' ) + end if + + do i =1, 5 + do j = 1, 5 + if( rin(j,i) .NE. VAL__BADD ) then + write(*,*) 'rin(',j,',',i,') = ',rin(j,i) + call stopit( status, 'Above value should be BAD' ) + end if + end do + end do + + + + + + call ast_end( status ) + if( status .ne. sai__ok ) write(*,*) 'NullRegion tests failed' + + end + + + + + subroutine checkCmpRegion( status ) + implicit none + include 'AST_PAR' + include 'SAE_PAR' + include 'PRM_PAR' + + integer status, r1, r2, r3, cr, f1, f2, cr2, cr3, frm, map, fs + double precision p1(2),p2(2),xout(4),yout(4),xin(4),yin(4) + logical hasframeset + + if( status .ne.sai__ok ) return + + call ast_begin( status ) + + + f1 = ast_skyframe( 'system=fk5', status ) + p1(1) = 0.0 + p1(2) = 0.0 + p2(1) = 1.0E-4 + p2(2) = 1.0E-4 + r1 = ast_box( f1, 0, p1, p2, AST__NULL, ' ', status ) + + f2 = ast_skyframe( 'system=galactic', status ) + + p1(1) = 1.68166715892457 + p1(2) = -1.050436507472 + p2(1) = 1.68140254777194 + p2(2) = -1.05048840003467 + r2 = ast_circle( f2, 0, p1, p2, AST__NULL, ' ', status ) + + if( ast_overlap( r1, r2, status ) .ne. 4 ) call stopit(status, + : 'CmpRegion: Error 0' ) + + cr = ast_cmpregion( r1, r2, AST__AND, ' ', status ) + cr = ast_Copy( cr, status ) + if( ast_overlap( cr, cr, status ) .ne. 5 ) call stopit(status, + : 'CmpRegion: Error 1' ) + + xin( 1 ) = 0.5E-4! In both r1 and r2 + xin( 2 ) = 1.5E-4! In r2 but not r1 + xin( 3 ) = -0.5E-4! In r1 but not r2 + xin( 4 ) = 1.1E-4! In neither + + yin( 1 ) = 0.5E-4 + yin( 2 ) = 1.5E-4 + yin( 3 ) = -0.5E-4 + yin( 4 ) = -1.1E-4 + + call ast_tran2( cr, 4, xin, yin, .true., xout, yout, status ) + + if( xout(1) .ne. xin(1) ) call stopit( status, + : 'CmpRegion: AND Error 1x') + if( yout(1) .ne. yin(1) ) call stopit( status, + : 'CmpRegion: AND Error 1y') + if( xout(2) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: AND Error 2x') + if( yout(2) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: AND Error 2y') + if( xout(3) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: AND Error 3x') + if( yout(3) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: AND Error 3y') + if( xout(4) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: AND Error 4x') + if( yout(4) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: AND Error 4y') + + cr = ast_cmpregion( r1, r2, AST__OR, ' ', status ) + call ast_tran2( cr, 4, xin, yin, .true., xout, yout, status ) + + if( xout(1) .ne. xin(1) ) call stopit( status, + : 'CmpRegion: OR Error 1x') + if( yout(1) .ne. yin(1) ) call stopit( status, + : 'CmpRegion: OR Error 1y') + if( xout(2) .ne. xin(2) ) call stopit( status, + : 'CmpRegion: OR Error 2x') + if( yout(2) .ne. yin(2) ) call stopit( status, + : 'CmpRegion: OR Error 2y') + if( xout(3) .ne. xin(3) ) call stopit( status, + : 'CmpRegion: OR Error 3x') + if( yout(3) .ne. yin(3) ) call stopit( status, + : 'CmpRegion: OR Error 3y') + if( xout(4) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: OR Error 4x') + if( yout(4) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: OR Error 4y') + + + call ast_negate( r2, status ) + cr = ast_cmpregion( r1, r2, AST__AND, ' ', status ) + call ast_tran2( cr, 4, xin, yin, .true., xout, yout, status ) + + if( xout(1) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDb Error 1x') + if( yout(1) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDb Error 1y') + if( xout(2) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDb Error 2x') + if( yout(2) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDb Error 2y') + if( xout(3) .ne. xin(3) ) call stopit( status, + : 'CmpRegion: ANDb Error 3x') + if( yout(3) .ne. yin(3) ) call stopit( status, + : 'CmpRegion: ANDb Error 3y') + if( xout(4) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDb Error 4x') + if( yout(4) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDb Error 4y') + + call ast_negate( r1, status ) + cr = ast_cmpregion( r1, r2, AST__AND, ' ', status ) + call ast_tran2( cr, 4, xin, yin, .true., xout, yout, status ) + + if( xout(1) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDc Error 1x') + if( yout(1) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDc Error 1y') + if( xout(2) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDc Error 2x') + if( yout(2) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDc Error 2y') + if( xout(3) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDc Error 3x') + if( yout(3) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDc Error 3y') + if( xout(4) .ne. xin(4) ) call stopit( status, + : 'CmpRegion: ANDc Error 4x') + if( yout(4) .ne. yin(4) ) call stopit( status, + : 'CmpRegion: ANDc Error 4y') + + + cr = ast_cmpregion( r1, r2, AST__AND, ' ', status ) + call ast_negate( cr, status ) + call ast_tran2( cr, 4, xin, yin, .true., xout, yout, status ) + + if( xout(1) .ne. xin(1) ) call stopit( status, + : 'CmpRegion: ANDd Error 1x') + if( yout(1) .ne. yin(1) ) call stopit( status, + : 'CmpRegion: ANDd Error 1y') + if( xout(2) .ne. xin(2) ) call stopit( status, + : 'CmpRegion: ANDd Error 2x') + if( yout(2) .ne. yin(2) ) call stopit( status, + : 'CmpRegion: ANDd Error 2y') + if( xout(3) .ne. xin(3) ) call stopit( status, + : 'CmpRegion: ANDd Error 3x') + if( yout(3) .ne. yin(3) ) call stopit( status, + : 'CmpRegion: ANDd Error 3y') + if( xout(4) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDd Error 4x') + if( yout(4) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion: ANDd Error 4y') + + + cr2 = ast_cmpregion( r2, r1, AST__AND, ' ', status ) + + fs = ast_convert( cr, cr2, ' ', status ) + if( fs .eq. AST__NULL ) call stopit( status, + : 'CmpRegion: Error 5') + map = ast_getmapping( fs, AST__BASE, AST__CURRENT, status ) + frm = ast_getframe( fs, AST__CURRENT, status ) + cr3 = ast_mapRegion( cr, map, frm, status ) + if( ast_overlap( cr3, cr2, status ) .ne. 6 ) call stopit(status, + : 'CmpRegion: Error 6' ) + + cr = ast_Copy( cr, status ) + call checkdump( cr, 'checkdump CmpRegion: cr', status ) + + + cr2 = ast_Copy( cr, status ) + call ast_negate( cr2, status ) + + cr3 = ast_cmpregion( cr2, cr, AST__OR, ' ', status ) + cr3 = ast_Simplify( cr3, status ) + if( .not. ast_isanullregion( cr3, status ) ) then + call stopit(status, 'CmpRegion: Error 7' ) + else if( .not. ast_getl( cr3, 'negated', status ) ) then + call stopit(status, 'CmpRegion: Error 8' ) + end if + + cr3 = ast_cmpregion( cr2, cr, AST__AND, ' ', status ) + cr3 = ast_Simplify( cr3, status ) + if( .not. ast_isanullregion( cr3, status ) ) then + call stopit(status, 'CmpRegion: Error 9' ) + else if( ast_getl( cr3, 'negated', status ) ) then + call stopit(status, 'CmpRegion: Error 10' ) + end if + + + + f1 = ast_frame( 2, ' ', status ) + p1(1) = 0.0 + p1(2) = 0.0 + p2(1) = 1.0 + p2(2) = 1.0 + r1 = ast_box( f1, 0, p1, p2, AST__NULL, ' ', status ) + + p1(1) = -1.0 + p1(2) = 0.0 + p2(1) = 0.0 + p2(2) = 0.0 + r2 = ast_circle( f1, 0, p1, p2, AST__NULL, ' ', status ) + + p1(1) = 1.0 + p1(2) = 0.0 + p2(1) = 0.0 + p2(2) = 0.0 + r3 = ast_circle( f1, 0, p1, p2, AST__NULL, ' ', status ) + + cr = ast_cmpregion( r2, r3, AST__OR, ' ', status ) + call checkdump( cr, 'checkdump CmpRegion: cr', status ) + + call ast_negate( cr, status ) + cr2 = ast_cmpregion( cr, r1, AST__AND, ' ', status ) + call checkdump( cr2, 'checkdump CmpRegion: cr2', status ) + + cr2 = ast_simplify( cr2, status ) + + xin( 1 ) = 0.0 + xin( 2 ) = 0.2 + xin( 3 ) = 0.5 + xin( 4 ) = -0.5 + + yin( 1 ) = 0.5 + yin( 2 ) = 1.5 + yin( 3 ) = 0.5 + yin( 4 ) = 0.5 + + call ast_tran2( cr2, 4, xin, yin, .true., xout, yout, status ) + + if( xout(1) .ne. xin(1) ) call stopit( status, + : 'CmpRegion:Error 11') + if( yout(1) .ne. yin(1) ) call stopit( status, + : 'CmpRegion:Error 12') + if( xout(2) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion:Error 13') + if( yout(2) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion:Error 14') + if( xout(3) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion:Error 15') + if( yout(3) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion:Error 16') + if( xout(4) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion:Error 17') + if( yout(4) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion:Error 18') + + + + call ast_negate( cr2, status ) + cr2 = ast_simplify( cr2, status ) + call ast_tran2( cr2, 4, xin, yin, .true., xout, yout, status ) + + if( xout(1) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion:Error 19') + if( yout(1) .ne. AST__BAD ) call stopit( status, + : 'CmpRegion:Error 20') + if( xout(2) .ne. xin(2) ) call stopit( status, + : 'CmpRegion:Error 21') + if( yout(2) .ne. yin(2) ) call stopit( status, + : 'CmpRegion:Error 22') + if( xout(3) .ne. xin(3) ) call stopit( status, + : 'CmpRegion:Error 23') + if( yout(3) .ne. yin(3) ) call stopit( status, + : 'CmpRegion:Error 24') + if( xout(4) .ne. xin(4) ) call stopit( status, + : 'CmpRegion:Error 25') + if( yout(4) .ne. yin(4) ) call stopit( status, + : 'CmpRegion:Error 26') + + + + + + call ast_end( status ) + if( status .ne. sai__ok ) write(*,*) 'CmpRegion tests failed' + + end + + + + + + + +* +* Tests the dump function, the loader, and the astOverlap method. +* + subroutine checkdump( obj, text, status ) + + implicit none + include 'SAE_PAR' + include 'AST_PAR' + character text*(*) + integer obj, status, next, end, ch, result, ll, overlap + external mysource, mysink + character buf*45000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + +* Create a Channel which reads and writes to an internal string buffer. + ch = ast_channel( mysource, mysink, ' ', status ) + +* Write the supplied Region out to this Channel. + ll = 160 + next = 1 + if( ast_write( ch, obj, status ) .ne.1 ) then + write(*,*) text + call stopit( status, 'Cannot write supplied object to '// + : 'channel' ) + end if + +* Read an Object back from this Channel. + next = 1 + result = ast_read( ch, status ) + if( result .eq. ast__null ) then + write(*,*) text + call stopit( status, 'Cannot read object from channel' ) + end if + +* Check that it is a Region and its boundary is identical to the supplied +* Region. + overlap = ast_overlap( obj, result, status ) + if( overlap .ne. 5 ) then + write(*,*) 'obj result Overlap: ', overlap + write(*,*) 'obj self-Overlap: ', ast_overlap( obj, obj, + : status ) + write(*,*) 'result self-Overlap: ', ast_overlap( result, + : result, status ) + call ast_Show( obj, status ) + call ast_Show( result, status ) + write(*,*) text + call stopit( status, 'Object has changed' ) + end if + + end + + subroutine mysource( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, ll + character buf*45000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + if( next .ge. end ) then + call ast_putline( buf, -1, status ) + else + call ast_putline( buf( next : ), ll, status ) + endif + + next = next + ll + + end + + subroutine mysink( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, f, l, ll + character buf*45000 + character line*1000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + line = ' ' + call ast_getline( line, l, status ) + call chr_fandl( line( : l ), f, l ) + buf( next : ) = line( f : l ) + l = l - f + 1 + + if( next + ll - 1 .ge. 45000 ) then + write(*,*) + call stopit( status, 'Buffer overflow in mysink!!' ) + else if( l .gt. ll ) then + write(*,*) + write(*,*) buf( next : next + l) + write(*,*) 'Line length ',l,' greater than ',ll + call stopit( status, 'Line overflow in mysink!!' ) + else + end = next + l + buf( end : next + ll - 1 ) = ' ' + endif + + next = next + ll + + end + + + + + subroutine checkPrism( status ) + implicit none + include 'AST_PAR' + include 'SAE_PAR' + + integer f1, f2, r1, r2, r3, r4, status + double precision lbnd(5),ubnd(5),p1(5),p2(5) + logical hasframeset + + if( status .ne.sai__ok ) return + + call ast_begin( status ) + + f1 = ast_skyframe( 'system=fk5', status ) + p1(1) = 0.0 + p1(2) = 0.0 + p2(1) = 1.0E-4 + p2(2) = 1.0E-4 + r1 = ast_box( f1, 0, p1, p2, AST__NULL, ' ', status ) + + f2 = ast_specframe( 'Unit=Angstrom', status ) + lbnd( 1 ) = 5000.0 + ubnd( 1 ) = 6000.0 + r2 = ast_interval( f2, lbnd, ubnd, AST__NULL, ' ', status ) + r3 = ast_prism( r1, r2, ' ', status ) + + call checkdump( r3, 'checkdump Prism 1', status ) + + if( ast_overlap( r3, r3, status ) .ne. 5 ) call stopit( status, + : 'Prism 1' ) + + r4 = ast_Simplify( r3, status ) + if( .not. ast_isabox( r4, status ) ) call stopit( status, + : 'Prism 1b' ) + if( hasframeset( r4, status ) ) call stopit( status, 'Prism 1c' ) + if( ast_overlap( r3, r4, status ) .ne. 5 ) call stopit( status, + : 'Prism 1d' ) + + + lbnd( 1 ) = 5500.0 + ubnd( 1 ) = 5800.0 + r2 = ast_interval( f2, lbnd, ubnd, AST__NULL, ' ', status ) + r4 = ast_prism( r1, r2, ' ', status ) + + if( ast_overlap( r3, r4, status ) .ne. 3 ) call stopit( status, + : 'Prism 2' ) + if( ast_overlap( r4, r3, status ) .ne. 2 ) then + write(*,*) ast_overlap( r4, r3, status ),' should be 2' + call stopit( status, 'Prism 3' ) + end if + + lbnd( 1 ) = 5500.0 + ubnd( 1 ) = 6500.0 + r2 = ast_interval( f2, lbnd, ubnd, AST__NULL, ' ', status ) + r4 = ast_prism( r1, r2, ' ', status ) + if( ast_overlap( r3, r4, status ) .ne. 4 ) call stopit( status, + : 'Prism 4' ) + if( ast_overlap( r4, r3, status ) .ne. 4 ) call stopit( status, + : 'Prism 5' ) + + lbnd( 1 ) = 6500.0 + ubnd( 1 ) = 7500.0 + r2 = ast_interval( f2, lbnd, ubnd, AST__NULL, ' ', status ) + r4 = ast_prism( r1, r2, ' ', status ) + if( ast_overlap( r3, r4, status ) .ne. 1 ) call stopit( status, + : 'Prism 6' ) + if( ast_overlap( r4, r3, status ) .ne. 1 ) call stopit( status, + : 'Prism 7' ) + + r4 = ast_copy( r3, status ) + call ast_Negate( r4, status ) + if( ast_overlap( r4, r3, status ) .ne. 6 ) call stopit( status, + : 'Prism 8' ) + + + p1(1) = 2.0E-4 + p1(2) = 2.0E-4 + p2(1) = 1.1E-4 + p2(2) = 1.0E-4 + r1 = ast_box( f1, 0, p1, p2, AST__NULL, ' ', status ) + lbnd( 1 ) = 5000.0 + ubnd( 1 ) = 6000.0 + r2 = ast_interval( f2, lbnd, ubnd, AST__NULL, ' ', status ) + r4 = ast_prism( r1, r2, ' ', status ) + if( ast_overlap( r3, r4, status ) .ne. 1 ) call stopit( status, + : 'Prism 9' ) + + p1(1) = 2.0E-4 + p1(2) = 2.0E-4 + p2(1) = 1.0E-4 + p2(2) = 1.0E-4 + r1 = ast_box( f1, 0, p1, p2, AST__NULL, ' ', status ) + r4 = ast_prism( r1, r2, ' ', status ) + if( ast_overlap( r3, r4, status ) .ne. 4 ) call stopit( status, + : 'Prism 10' ) + + call ast_setl( r3, 'Closed', .false., status ) + call ast_setl( r4, 'Closed', .false., status ) + if( ast_overlap( r3, r4, status ) .ne. 1 ) call stopit( status, + : 'Prism 11' ) + + + + f1 = ast_skyframe( 'system=fk5', status ) + p1(1) = 0.0 + p1(2) = 0.0 + p2(1) = 1.0E-4 + p2(2) = 1.0E-4 + r1 = ast_box( f1, 0, p1, p2, AST__NULL, ' ', status ) + + f2 = ast_specframe( 'System=Wavelen,Unit=Angstrom', status ) + lbnd( 1 ) = 5000.0 + ubnd( 1 ) = AST__BAD + r2 = ast_interval( f2, lbnd, ubnd, AST__NULL, ' ', status ) + r3 = ast_prism( r1, r2, ' ', status ) + + lbnd( 1 ) = 6000.0 + ubnd( 1 ) = AST__BAD + r2 = ast_interval( f2, lbnd, ubnd, AST__NULL, ' ', status ) + r4 = ast_prism( r1, r2, ' ', status ) + + call ast_setc( r3, 'system(1)', 'galactic', status ) + + if( ast_overlap( r3, r4, status ) .ne. 3 ) call stopit( status, + : 'Prism 12' ) + + ubnd( 1 ) = 6000.0 + lbnd( 1 ) = AST__BAD + r2 = ast_interval( f2, lbnd, ubnd, AST__NULL, ' ', status ) + r4 = ast_prism( r1, r2, ' ', status ) + + if( ast_overlap( r3, r4, status ) .ne. 4 ) call stopit( status, + : 'Prism 13' ) + + ubnd( 1 ) = 5000.0 + lbnd( 1 ) = AST__BAD + r2 = ast_interval( f2, lbnd, ubnd, AST__NULL, ' ', status ) + r4 = ast_prism( r1, r2, ' ', status ) + call ast_setc( r4, 'system(3)', 'freq', status ) + if( ast_overlap( r3, r4, status ) .ne. 4 ) call stopit( status, + : 'Prism 14' ) + + call ast_setl( r4, 'closed', .false., status ) + if( ast_overlap( r3, r4, status ) .ne. 1 ) call stopit( status, + : 'Prism 15' ) + + + f1 = ast_skyframe( 'system=fk5', status ) + p1(1) = 0.0 + p1(2) = -1.57 + p2(1) = 0.8 + p2(2) = -1.5 + r1 = ast_box( f1, 0, p1, p2, AST__NULL, ' ', status ) + + f2 = ast_specframe( 'Unit=Angstrom', status ) + lbnd( 1 ) = 5000.0 + ubnd( 1 ) = 6000.0 + r2 = ast_interval( f2, lbnd, ubnd, AST__NULL, ' ', status ) + r3 = ast_prism( r1, r2, ' ', status ) + r4 = ast_Simplify( r3, status ) + + call ast_getregionbounds( r4, lbnd, ubnd, status ) + if( abs( lbnd(1) + 0.8D0 ) .gt. 1.0E-6 ) call stopit( status, + : 'Prism 16' ) + if( abs( lbnd(2) + 1.64D0 ) .gt. 1.0E-6 ) + : call stopit( status, 'Prism 17' ) + if( abs( ubnd(1) - 0.8D0 ) .gt. 1.0E-6 ) + : call stopit( status, 'Prism 18' ) + if( abs( ubnd(2) + 1.5 ) .gt. 1.0E-6 ) + : call stopit( status, 'Prism 19' ) + if( abs( lbnd(3) - 5000.0 ) .gt. 1.0E-10 ) + : call stopit( status, 'Prism 20' ) + if( abs( ubnd(3) - 6000.0 ) .gt. 1.0E-6 ) + : call stopit( status, 'Prism 21' ) + + call ast_end( status ) + if( status .ne. sai__ok ) write(*,*) 'Prism tests failed' + + end + + + + subroutine checkRemoveRegions( status ) + implicit none + + include 'SAE_PAR' + include 'AST_PAR' + + integer status, sf1, sf2, reg, fs, map, fs2 + double precision cen(2), ixin(2), iyin(2), gxin(2), gyin(2), + : xout(2), yout(2) + + if( status .ne. sai__ok ) return + + call ast_begin( status ) + + sf1 = ast_skyframe( 'System=ICRS', status ) + cen(1) = 0.0 + cen(2) = 0.0 + reg = ast_circle( sf1, 1, cen, 0.001D0, AST__NULL, ' ', status ) + + ixin(1) = 0.0 + iyin(1) = 0.0 + ixin(2) = 0.01 + iyin(2) = 0.01 + + call ast_tran2( reg, 2, ixin, iyin, .true., xout, yout, status ) + + if( xout(1) .eq. AST__BAD .or. yout(1) .eq. AST__BAD ) then + call stopit( status, 'RemoveRegions test 1 failed' ) + + else if( abs( xout(1) - ixin(1) ) .gt. 1.0E-10 .or. + : abs( yout(1) - iyin(1) ) .gt. 1.0E-10 ) then + call stopit( status, 'RemoveRegions test 2 failed' ) + + else if( xout(2) .ne. AST__BAD .or. yout(2) .ne. AST__BAD ) then + write(*,*) xout(2), ixin(2) + write(*,*) yout(2), iyin(2) + call stopit( status, 'RemoveRegions test 3 failed' ) + end if + + + + + sf2 = ast_skyframe( 'System=Galactic', status ) + fs = ast_convert( sf1, sf2, ' ', status ) + call ast_tran2( fs, 2, ixin, iyin, .true., gxin, gyin, status ) + + fs2 = ast_frameset( sf2, ' ', status ) + call ast_addframe( fs2, AST__BASE, ast_unitmap( 2, ' ', status ), + : sf2, status ) + + + fs = ast_convert( fs2, reg, ' ', status ) + + + map = ast_getmapping( fs, AST__BASE, AST__CURRENT, status ) + call ast_tran2( map, 2, gxin, gyin, .true., xout, yout, status ) + + if( xout(1) .eq. AST__BAD .or. yout(1) .eq. AST__BAD ) then + call stopit( status, 'RemoveRegions test 4 failed' ) + + else if( abs( xout(1) - ixin(1) ) .gt. 1.0E-10 .or. + : abs( yout(1) - iyin(1) ) .gt. 1.0E-10 ) then + call stopit( status, 'RemoveRegions test 5 failed' ) + + else if( xout(2) .ne. AST__BAD .or. yout(2) .ne. AST__BAD ) then + write(*,*) xout(2), ixin(2) + write(*,*) yout(2), iyin(2) + call stopit( status, 'RemoveRegions test 6 failed' ) + end if + + + + fs2 = ast_removeregions( fs, status ) + + map = ast_getmapping( fs2, AST__BASE, AST__CURRENT, status ) + call ast_tran2( map, 2, gxin, gyin, .true., xout, yout, status ) + + if( xout(1) .eq. AST__BAD .or. yout(1) .eq. AST__BAD ) then + call stopit( status, 'RemoveRegions test 7 failed' ) + + else if( abs( xout(1) - ixin(1) ) .gt. 1.0E-10 .or. + : abs( yout(1) - iyin(1) ) .gt. 1.0E-10 ) then + call stopit( status, 'RemoveRegions test 8 failed' ) + + else if( abs( xout(2) - ixin(2) ) .gt. 1.0E-10 .or. + : abs( yout(2) - iyin(2) ) .gt. 1.0E-10 ) then + call stopit( status, 'RemoveRegions test 9 failed' ) + end if + + + + call ast_end( status ) + + end + + + + + + subroutine checkConvex( status ) + implicit none + + include 'SAE_PAR' + include 'AST_PAR' + + integer nx, ny, nel + parameter( nx = 8 ) + parameter( ny = 7 ) + parameter( nel = nx*ny ) + + integer status, poly, lbnd(2), ubnd(2), npoint + real array( nx, ny ) + double precision points( 10, 2 ) + + data array / nel*0.0 / + data lbnd / -10, 3 / + + if( status .ne. sai__ok ) return + + call ast_begin( status ) + + ubnd( 1 ) = lbnd( 1 ) + nx- 1 + ubnd( 2 ) = lbnd( 2 ) + ny- 1 + + array( 6, 1 ) = 1.0 + array( 7, 1 ) = 1.0 + array( 8, 1 ) = 1.0 + array( 7, 2 ) = 1.0 + array( 8, 2 ) = 1.0 + array( 2, 3 ) = 1.0 + array( 8, 3 ) = 1.0 + array( 1, 4 ) = 1.0 + array( 1, 6 ) = 1.0 + array( 2, 6 ) = 1.0 + array( 6, 6 ) = 1.0 + + poly = ast_convexr( 1.0, AST__EQ, array, lbnd, ubnd, .FALSE., + : status ) + + call ast_getregionpoints( poly, 10, 2, npoint, points, status ) + + if( npoint .ne. 7 ) call stopit( status, 'Convex 1' ) + if( points( 1, 1 ) .ne. -3) call stopit( status, 'Convex 2' ) + if( points( 1, 2 ) .ne. 3) call stopit( status, 'Convex 3' ) + if( points( 2, 1 ) .ne. -3) call stopit( status, 'Convex 4' ) + if( points( 2, 2 ) .ne. 5) call stopit( status, 'Convex 5' ) + if( points( 3, 1 ) .ne. -5) call stopit( status, 'Convex 6' ) + if( points( 3, 2 ) .ne. 8) call stopit( status, 'Convex 7' ) + if( points( 4, 1 ) .ne. -10) call stopit( status, 'Convex 8' ) + if( points( 4, 2 ) .ne. 8) call stopit( status, 'Convex 9' ) + if( points( 5, 1 ) .ne. -10) call stopit( status, 'Convex 10' ) + if( points( 5, 2 ) .ne. 6) call stopit( status, 'Convex 11' ) + if( points( 6, 1 ) .ne. -9) call stopit( status, 'Convex 12' ) + if( points( 6, 2 ) .ne. 5) call stopit( status, 'Convex 13' ) + if( points( 7, 1 ) .ne. -5) call stopit( status, 'Convex 14' ) + if( points( 7, 2 ) .ne. 3) call stopit( status, 'Convex 15' ) + + call ast_end( status ) + + end + diff --git a/ast/ast_tester/testskyframe.f b/ast/ast_tester/testskyframe.f new file mode 100644 index 0000000..6359d63 --- /dev/null +++ b/ast/ast_tester/testskyframe.f @@ -0,0 +1,89 @@ + program testskyframe + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + integer status, sf1, sf2, fs + double precision vals(5) + + status = sai__ok + + sf1 = ast_skyframe( 'system=fk5,epoch=2015.0', status ) + sf2 = ast_skyframe( 'system=fk5,epoch=2015.1', status ) + fs = ast_convert( sf1, sf2, 'SKY', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'Error 0' ) + end if + + if( .not. ast_isaunitmap( ast_getmapping( fs, ast__base, + : ast__current, status ), + : status ) ) then + call stopit( status, 'Error 1' ) + end if + + if( ast_getd( sf1, 'SkyTol', status ) .ne. 0.001D0 ) then + call stopit( status, 'Error 2' ) + end if + + call ast_setd( sf2, 'SkyTol', 1.0D-6, status ) + fs = ast_convert( sf1, sf2, 'SKY', status ) + + if( ast_isaunitmap( ast_getmapping( fs, ast__base, + : ast__current, status ), + : status ) ) then + call stopit( status, 'Error 3' ) + end if + + sf2 = ast_skyframe( 'system=fk5,epoch=2016.6', status ) + fs = ast_convert( sf1, sf2, 'SKY', status ) + if( ast_isaunitmap( ast_getmapping( fs, ast__base, + : ast__current, status ), + : status ) ) then + call stopit( status, 'Error 4' ) + end if + + + vals(1) = 6.1D0 + vals(2) = 6.15D0 + vals(3) = 6.2D0 + vals(4) = 6.25D0 + vals(5) = 6.3D0 + call ast_axnorm( sf1, 1, 0, 5, vals, status ) + if( vals(1) .ne. 6.1D0 .or. + : vals(2) .ne. 6.15D0 .or. + : vals(3) .ne. 6.2D0 .or. + : vals(4) .ne. 6.25D0 .or. + : vals(5) .ne. 6.3D0 - 2*AST__DPI ) then + call stopit( status, 'Error 5' ) + end if + + call ast_axnorm( sf1, 1, 1, 5, vals, status ) + if( vals(1) .ne. 6.1D0 - 2*AST__DPI .or. + : vals(2) .ne. 6.15D0 - 2*AST__DPI .or. + : vals(3) .ne. 6.2D0 - 2*AST__DPI .or. + : vals(4) .ne. 6.25D0 - 2*AST__DPI .or. + : vals(5) .ne. 6.3D0 - 2*AST__DPI ) then + call stopit( status, 'Error 6' ) + end if + + if( status .eq. sai__ok ) then + write(*,*) 'All SkyFrame tests passed' + else + write(*,*) 'SkyFrame tests failed' + end if + + end + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + + end + + diff --git a/ast/ast_tester/testspecflux.f b/ast/ast_tester/testspecflux.f new file mode 100644 index 0000000..ba19984 --- /dev/null +++ b/ast/ast_tester/testspecflux.f @@ -0,0 +1,331 @@ + program testspecflux + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + double precision xin, xout,yin, yout + integer status, sff, sff2, sf, ff, ff2, mp, fs, sf2,perm(2),csff + status = sai__ok + + sf = ast_specframe( 'system=freq,unit=GHz', status ) + ff = ast_Fluxframe( 123.0D0, sf, 'Unit=Jy', status ) + sff = ast_specfluxframe( sf, ff, ' ', status ) + + + if( ast_GetC( sff, 'class', status ) .ne. 'SpecFluxFrame' ) then + call stopit( status, 'Error 0' ) + end if + + if( ast_GetD( sff, 'specval', status ) .ne. 123.0D0 ) then + call stopit( status, 'Error 1' ) + end if + + if( ast_Test( sff, 'specval', status ) ) then + call stopit( status, 'Error 2' ) + end if + + call ast_setd( sff, 'specval', 333.3D0, status ) + if( ast_GetD( sff, 'specval', status ) .ne. 333.3D0 ) then + call stopit( status, 'Error 3' ) + end if + + if( .not. ast_Test( sff, 'specval', status ) ) then + call stopit( status, 'Error 4' ) + end if + + call ast_clear( sff, 'specval', status ) + + if( ast_GetD( sff, 'specval', status ) .ne. 123.0D0 ) then + call stopit( status, 'Error 5' ) + end if + + if( ast_Test( sff, 'specval', status ) ) then + call stopit( status, 'Error 6' ) + end if + + + call checkDump( sff, 'CheckDump 1', status ) + + + ff2 = ast_Fluxframe( 123.1D0, sf, 'System=flxdnw', status ) + + if( ast_getc( ff2, 'unit', status ) .ne. 'W/m^2/Angstrom' ) + : call stopit( status, 'Error 6B' ) + if( ast_getc( ff2, 'system', status ) .ne. 'FLXDNW' ) + : call stopit( status, 'error 6C' ) + + sff2 = ast_specfluxframe( sf, ff2, ' ', status ) + if( ast_GetC( sff2, 'class', status ) .ne. 'SpecFluxFrame' ) then + call stopit( status, 'Error 7' ) + end if + + csff = ast_copy( sff,status ) + fs = ast_convert( sff, sff2, ' ', status ) + if( fs .eq. ast__null ) call stopit( status, 'error 8' ) + + yin = 1.0D0 + xin = 2.0D0 + call ast_tran2( fs, 1, xin, yin, .true., xout, yout, status ) + + if( abs(yout - 1.33425638D-26) .gt. 1.0D-32 ) + : call stopit( status, 'error 9' ) + + if( xout .ne. 2.0D0 ) call stopit( status, 'error 10' ) + + perm(1)=2 + perm(2)=1 + call ast_PermAxes( sff2, perm, status ) + + fs = ast_convert( sff, sff2, ' ', status ) + if( fs .eq. ast__null ) call stopit( status, 'error 11' ) + call ast_tran2( fs, 1, xin, yin, .true., xout, yout, status ) + + if( abs(xout - 1.33425638D-26) .gt. 1.0D-32 ) + : call stopit( status, 'error 12' ) + + if( yout .ne. 2.0D0 ) call stopit( status, 'error 13' ) + + perm(1)=2 + perm(2)=1 + call ast_PermAxes( sff, perm, status ) + + fs = ast_convert( sff, sff2, ' ', status ) + if( fs .eq. ast__null ) call stopit( status, 'error 14' ) + + yin = 2.0D0 + xin = 1.0D0 + call ast_tran2( fs, 1, xin, yin, .true., xout, yout, status ) + + if( abs(xout - 1.33425638D-26) .gt. 1.0D-32 ) + : call stopit( status, 'error 15' ) + + if( yout .ne. 2.0D0 ) call stopit( status, 'error 16' ) + + + + ff2 = ast_Fluxframe( AST__BAD, AST__NULL, 'Unit=log(W/m2/nm)', + : status ) + if( ast_getc( ff2, 'system', status ) .ne. 'FLXDNW' ) + : call stopit( status, 'error 17' ) + sff2 = ast_specfluxframe( sf, ff2, ' ', status ) + + fs = ast_convert( csff, sff2, ' ', status ) + if( fs .eq. ast__null ) call stopit( status, 'error 18' ) + + yin = 1.0D0 + xin = 2.0D0 + call ast_tran2( fs, 1, xin, yin, .true., xout, yout, status ) + + if( abs(yout + 24.8747607 ) .gt. 0.000001 ) then + write(*,*) yout + 24.8747607 + call stopit( status, 'error 19' ) + endif + + if( xout .ne. 2.0D0 ) call stopit( status, 'error 20' ) + + + call ast_tran2( fs, 1, xout, yout, .false., xin, yin, status ) + + if( abs( xin - 2.0D0 ) .gt. 1.0D-9 ) call stopit( status, + : 'error 21' ) + if( abs( yin - 1.0D0 ) .gt. 1.0D-9 ) call stopit( status, + : 'error 22' ) + + + + + + ff2 = ast_Fluxframe( AST__BAD, AST__NULL, 'Unit=log(W/m2/nm/sr)', + : status ) + if( ast_getc( ff2, 'system', status ) .ne. 'SFCBRW' ) + : call stopit( status, 'error 23' ) + sff2 = ast_specfluxframe( sf, ff2, ' ', status ) + + sf = ast_specframe( 'system=freq,unit=GHz', status ) + ff = ast_Fluxframe( 123.0D0, sf, 'Unit=Jy/deg**2', status ) + if( ast_getc( ff, 'system', status ) .ne. 'SFCBR' ) + : call stopit( status, 'error 24' ) + sff = ast_specfluxframe( sf, ff, ' ', status ) + + fs = ast_convert( sff, sff2, ' ', status ) + if( fs .eq. ast__null ) call stopit( status, 'error 25' ) + + yin = 1.0D0 + xin = 2.0D0 + call ast_tran2( fs, 1, xin, yin, .true., xout, yout, status ) + + if( abs(yout + 21.3585154D0 ) .gt. 0.000001 ) + : call stopit( status, 'error 26' ) + + if( xout .ne. 2.0D0 ) call stopit( status, 'error 27' ) + + call ast_tran2( fs, 1, xout, yout, .false., xin, yin, status ) + if( abs( xin - 2.0D0 ) .gt. 1.0D-9 ) call stopit( status, + : 'error 28' ) + if( abs( yin - 1.0D0 ) .gt. 1.0D-9 ) call stopit( status, + : 'error 29' ) + + + + + + + + + + + + + + + + + + if( status .eq. sai__ok ) then + write(*,*) 'All SpecFluxFrame tests passed' + else + write(*,*) 'SpecFluxFrame tests failed' + end if + + end + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + + end + + + subroutine checkdump( obj, text, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + character text*(*) + integer obj, status, next, end, ch, result, ll, overlap + external mysource, mysink + character buf*25000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + ch = ast_channel( mysource, mysink, ' ', status ) + + + ll = 110 + next = 1 + if( ast_write( ch, obj, status ) .ne.1 ) then + write(*,*) text + call stopit( status, 'Cannot write supplied object to '// + : 'channel' ) + end if + + next = 1 + result = ast_read( ch, status ) + if( result .eq. ast__null ) then + write(*,*) text + call stopit( status, 'Cannot read object from channel' ) + end if + + + + if( ast_getd( obj, 'specval', status ) .ne. + : ast_getd( result, 'specval', status ) ) then + call ast_Show( obj, status ) + call ast_Show( result, status ) + write(*,*) text + call stopit( status, 'Object has changed' ) + end if + + end + + subroutine sink1( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + logical fsfound, done + common /sink1com/ fsfound, done + + integer status, l + character line*200 + + if( status .ne. sai__ok ) return + call ast_getline( line, l, status ) + + if( index( line( : l ),'Unc =' ) .GT. 0 ) then + done = .true. + + else if( .not. done .and. + : index( line( : l ),'FrameSet' ) .GT. 0 ) then + fsfound= .true. + end if + + end + + subroutine mysource( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, ll + character buf*25000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + if( next .ge. end ) then + call ast_putline( buf, -1, status ) + else + call ast_putline( buf( next : ), ll, status ) + endif + + next = next + ll + + end + + subroutine mysink( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, f, l, ll + character buf*25000 + character line*1000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + line = ' ' + call ast_getline( line, l, status ) + call chr_fandl( line( : l ), f, l ) + buf( next : ) = line( f : l ) + l = l - f + 1 + + if( next + ll - 1 .ge. 25000 ) then + write(*,*) + call stopit( status, 'Buffer overflow in mysink!!' ) + else if( l .gt. ll ) then + write(*,*) + write(*,*) buf( next : next + l) + write(*,*) 'Line length ',l + call stopit( status, 'Line overflow in mysink!!' ) + else + end = next + l + buf( end : next + ll - 1 ) = ' ' + endif + + next = next + ll + + end + + diff --git a/ast/ast_tester/testspecframe.f b/ast/ast_tester/testspecframe.f new file mode 100644 index 0000000..4af2606 --- /dev/null +++ b/ast/ast_tester/testspecframe.f @@ -0,0 +1,251 @@ + program testspecframe + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + double precision rf, x, y + integer status, sf, sf1, sf2, fs + status = sai__ok + + sf = ast_specframe( 'system=freq,unit=Hz', status ) + if( ast_GetD( sf, 'SpecOrigin', status ) .ne. 0.0 ) then + call stopit( status, 'Error 0' ) + end if + + rf = ast_GetD( sf, 'RestFreq', status ) + call ast_SetD( sf, 'SpecOrigin', rf*1.0D9, status ) + if( abs( ast_GetD( sf, 'SpecOrigin', status ) - rf*1.0D9 ) + : .gt. 0.1 ) then + call stopit( status, 'Error 1' ) + end if + + call ast_setc( sf, 'Unit(1)', 'GHz', status ) + if( ast_GetD( sf, 'SpecOrigin', status ) .ne. rf ) then + call stopit( status, 'Error 2' ) + end if + + call checkdump( sf, 'Error 3', status ) + + call ast_setc( sf, 'System', 'vrad', status ) + if( abs( ast_GetD( sf, 'SpecOrigin', status ) ) .gt. 1.0D-8 ) then + write(*,*) ast_GetD( sf, 'SpecOrigin', status ) + call stopit( status, 'Error 4' ) + end if + + call ast_setc( sf, 'System', 'freq', status ) + call ast_setc( sf, 'Unit(1)', 'Hz', status ) + + if( abs( ast_GetD( sf, 'SpecOrigin', status ) - rf*1.0D9 ) + : .gt. 0.1 ) then + write(*,*) ast_GetD( sf, 'SpecOrigin', status ) + call stopit( status, 'Error 5' ) + end if + + call ast_setc( sf, 'StdOfRest', 'LSRD', status ) + if( abs( ast_GetD( sf, 'SpecOrigin', status ) - + : rf*1.00000212890848D9 ) .gt. 10.0 ) then + write(*,*) ast_GetD( sf, 'SpecOrigin', status ) + write(*,*) 'Should be ',rf*1.00000212890848D9 + call stopit( status, 'Error 6' ) + end if + + + sf1 = ast_specframe( 'system=freq,unit=Hz', status ) + call ast_setd( sf1, 'SpecOrigin', 1.0D20, status ) + sf2 = ast_specframe( 'system=freq,unit=Hz', status ) + call ast_setd( sf2, 'SpecOrigin', 1.01D20, status ) + fs = ast_convert( sf1, sf2, "", status ); + + x = 0.03D20 + call ast_tran1( fs, 1, x, .true., y, status ) + if( abs( y - 0.02D20 ) .gt. 0.0 ) then + write(*,*) y, y - 0.02D20 + call stopit( status, 'Error 7' ) + end if + + if( ast_getl( sf1, 'AlignSpecOffset', status ) ) then + call stopit( status, 'Error 8' ) + end if + call ast_setl( sf1, 'AlignSpecOffset', .true., status ) + call ast_setl( sf2, 'AlignSpecOffset', .true., status ) + + fs = ast_convert( sf1, sf2, "", status ); + + x = 0.03D20 + call ast_tran1( fs, 1, x, .true., y, status ) + if( abs( y - x ) .gt. 0.0 ) then + write(*,*) y, y - x + call stopit( status, 'Error 9' ) + end if + + sf = ast_specframe( 'system=freq,unit=Hz', status ) + call ast_setc( sf, 'SourceVRF', 'LSRK', status ) + call ast_setd( sf, 'SourceVel', 1000.0D0, status ) + + call ast_setc( sf, 'SourceVRF', 'BARY', status ) + call ast_setc( sf, 'SourceSys', 'ZOPT', status ) + + if( abs( ast_getd( sf, 'SourceVel', status ) - + : 0.00334028336870307D0 ) .gt. 1.0D-10 ) then + write(*,*) ast_getd( sf, 'SourceVel', status ) + call stopit( status, 'Error 11' ) + end if + + call checkdump( sf, 'Error 10', status ) + call ast_setc( sf, 'SourceVRF', 'LSRK', status ) + call ast_setc( sf, 'SourceSys', 'VREL', status ) + + if( abs( ast_getd( sf, 'SourceVel', status ) - + : 1000.0D0 ) .gt. 1.0D-6 ) then + write(*,*) ast_getd( sf, 'SourceVel', status ) + call stopit( status, 'Error 12' ) + end if + + if( status .eq. sai__ok ) then + write(*,*) 'All SpecFrame tests passed' + else + write(*,*) 'SpecFrame tests failed' + end if + + end + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + + end + + + subroutine checkdump( obj, text, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + character text*(*) + integer obj, status, next, end, ch, result, ll, overlap + external mysource, mysink + character buf*25000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + ch = ast_channel( mysource, mysink, ' ', status ) + + + ll = 110 + next = 1 + if( ast_write( ch, obj, status ) .ne.1 ) then + write(*,*) text + call stopit( status, 'Cannot write supplied object to '// + : 'channel' ) + end if + + next = 1 + result = ast_read( ch, status ) + if( result .eq. ast__null ) then + write(*,*) text + call stopit( status, 'Cannot read object from channel' ) + end if + + + + if( ast_getd( obj, 'specorigin', status ) .ne. + : ast_getd( result, 'specorigin', status ) ) then + call ast_Show( obj, status ) + call ast_Show( result, status ) + write(*,*) text + call stopit( status, 'Object has changed' ) + end if + + end + + subroutine sink1( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + logical fsfound, done + common /sink1com/ fsfound, done + + integer status, l + character line*200 + + if( status .ne. sai__ok ) return + call ast_getline( line, l, status ) + + if( index( line( : l ),'Unc =' ) .GT. 0 ) then + done = .true. + + else if( .not. done .and. + : index( line( : l ),'FrameSet' ) .GT. 0 ) then + fsfound= .true. + end if + + end + + subroutine mysource( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, ll + character buf*25000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + if( next .ge. end ) then + call ast_putline( buf, -1, status ) + else + call ast_putline( buf( next : ), ll, status ) + endif + + next = next + ll + + end + + subroutine mysink( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, f, l, ll + character buf*25000 + character line*1000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + line = ' ' + call ast_getline( line, l, status ) + call chr_fandl( line( : l ), f, l ) + buf( next : ) = line( f : l ) + l = l - f + 1 + + if( next + ll - 1 .ge. 25000 ) then + write(*,*) + call stopit( status, 'Buffer overflow in mysink!!' ) + else if( l .gt. ll ) then + write(*,*) + write(*,*) buf( next : next + l) + write(*,*) 'Line length ',l + call stopit( status, 'Line overflow in mysink!!' ) + else + end = next + l + buf( end : next + ll - 1 ) = ' ' + endif + + next = next + ll + + end + + diff --git a/ast/ast_tester/teststc.f b/ast/ast_tester/teststc.f new file mode 100644 index 0000000..47c3c02 --- /dev/null +++ b/ast/ast_tester/teststc.f @@ -0,0 +1,1858 @@ + program teststc + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'PRM_PAR' + + + + integer status + + status = sai__ok + + +c call ast_SetWatchId( 565300 ) + + call ast_begin( status ) + call Example5( status ) + call Example1( status ) + call Example1b( status ) + call Example4( status ) + call misc( status ) + call Example3( status ) + call Example2( status ) + call ast_end( status ) + +c call ast_listissued( 'teststc' ) + + + if( status .eq. sai__ok ) then + write(*,*) 'All Stc tests passed' + else + write(*,*) 'Stc tests failed' + end if + + end + + + subroutine misc( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'AST_ERR' + + + integer status, obj1, obj2, overlap + double precision x, y, xo, yo + + if( status .ne. sai__ok ) return + + call ast_begin( status ) + + call puteg( 'teststc_eg6', 1, status ) + call xmlread( 1, obj1, ' ', status ) + obj1 = ast_simplify( obj1, status ) + call checkdump( obj1, 'checkdump 1', status ) + + call puteg( 'teststc_eg7', 1, status ) + call xmlread( 1, obj2, ' ', status ) + obj2 = ast_simplify( obj2, status ) + call checkdump( obj2, 'checkdump 2', status ) + + overlap = ast_overlap( obj1, obj2, status ) + if( overlap .ne. 4 .and.status .eq. sai__ok ) then + write(*,*) 'Overlap is ',overlap,' (should be 4)' + call stopit( status, 'Error 1' ) + endif + + call puteg( 'teststc_eg8', 1, status ) + call xmlread( 1, obj2, ' ', status ) + obj2 = ast_simplify( obj2, status ) + call checkdump( obj2, 'checkdump 3', status ) + + overlap = ast_overlap( obj1, obj2, status ) + if( overlap .ne. 3 .and.status .eq. sai__ok ) then + write(*,*) 'Overlap is ',overlap,' (should be 3)' + call stopit( status, 'Error 2' ) + endif + + overlap = ast_overlap( obj2, obj1, status ) + if( overlap .ne. 2 .and.status .eq. sai__ok ) then + write(*,*) 'Overlap is ',overlap,' (should be 2)' + call stopit( status, 'Error 3' ) + endif + + call puteg( 'teststc_eg9', 1, status ) + call xmlread( 1, obj2, ' ', status ) + + overlap = ast_overlap( obj1, obj2, status ) + if( overlap .ne. 1 .and.status .eq. sai__ok ) then + write(*,*) 'Overlap is ',overlap,' (should be 1)' + call stopit( status, 'Error 4' ) + endif + + + call puteg( 'teststc_eg10', 1, status ) + call xmlread( 1, obj2, ' ', status ) + + x = 2.4958208 + y = 0.73303829 + call ast_tran2( obj2, 1, x, y, .true., xo, yo, status ) + if( xo .ne. 2.4958208 .or. yo .ne. 0.73303829 ) then + call stopit( status, 'Error 5' ) + end if + + x = 2.4958208 + y = -0.73303829 + call ast_tran2( obj2, 1, x, y, .true., xo, yo, status ) + if( xo .ne. AST__BAD .or. yo .ne. AST__BAD ) then + call stopit( status, 'Error 6' ) + end if + + + + + call ast_end( status ) + + if( status .ne. sai__ok ) write(*,*) 'teststc: miscellaneous '// + : 'tests failed' + + end + + subroutine Example1( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'AST_ERR' + + integer status, obj2, obj, i, j, unc, km, nval, fs, m, r, f, + : axes(2), map + double precision in(8,4), out(8,4), lbnd(5), ubnd(5) + character cvals(10)*30 + + if( status .ne. sai__ok ) return + + call ast_begin( status ) + +* Put an example of an STCResourceProfile into file 1. + call puteg( 'teststc_eg1', 1, status ) + +* Use a new XmlChan to read an object from file 1,and simplify it. + call xmlread( 1, obj, ' ', status ) + obj = ast_simplify( obj, status ) + +* Write out the object through a Channel and read it back. + call checkdump( obj, 'checkdump 1', status ) + +* Test simplify by negating and simplifying twice. + call ast_negate( obj, status ) + obj = ast_simplify( obj, status ) + call ast_negate( obj, status ) + obj = ast_simplify( obj, status ) + +* Check it is a STCResourceProfile + if( .not. ast_isastcresourceprofile( obj, status ) ) + : call stopit( status, 'Error 1' ) + +* Check it contains an Interval. + if( .not. ast_isainterval( ast_getstcregion( obj, status ), + : status ) ) + : call stopit( status, 'Error 1a' ) + +* Timescale should be tt. Try changing it to TAI. + if( ast_getc( obj, 'timescale', status ) .ne. 'TT' ) + : call stopit( status, 'Error 0a' ) + + if( abs( ast_getd(obj,'TimeOrigin',status)-51382.6666666D0 ) + : .gt. 1.0D-7 ) call stopit( status, 'Error 0b' ) + + call ast_getregionbounds( obj, lbnd, ubnd, status ) + if( lbnd(3) .ne. 0.0 ) call stopit( status, 'Error 0c' ) + + call ast_set( obj, 'timescale=tai', status ) + if( ast_getc( obj, 'timescale', status ) .ne. 'TAI' ) + : call stopit( status, 'Error 0d' ) + + if( abs( ast_getd(obj,'TimeOrigin',status)-51382.6662941667D0 ) + : .gt. 1.0D-7 ) call stopit( status, 'Error 0e' ) + + call ast_getregionbounds( obj, lbnd, ubnd, status ) + if( abs( lbnd(3) ) .gt. 1.0D-6 ) THEN + write(*,*) lbnd(3) + call stopit( status, 'Error 0f' ) + END IF + + + call ast_set( obj, 'timescale=tt', status ) + obj = ast_Simplify( obj, status ) + if( ast_getc( obj, 'timescale', status ) .ne. 'TT' ) + : call stopit( status, 'Error 0g' ) + + if( abs( ast_getd(obj,'TimeOrigin',status)-51382.6666666D0 ) + : .gt. 1.0D-7 ) call stopit( status, 'Error 0h' ) + + call ast_getregionbounds( obj, lbnd, ubnd, status ) + if( abs( lbnd(3) ) .gt. 1.0D-6 ) + : call stopit( status, 'Error 0i' ) + + + +* Other tests + if( ast_getd( obj, 'fillfactor', status ) .ne. 0.02D0 ) + : call stopit( status, 'Error 1b' ) + + if( ast_getc( obj, 'ident', status ) .ne. 'AllSky-CXO' ) + : call stopit( status, 'Error 1c' ) + + if( ast_getc( obj, 'domain(3)', status ) .ne. 'TIME' ) + : call stopit( status, 'Error 2' ) + + if( ast_getc( obj, 'title(3)', status ) .ne. 'Time' ) + : call stopit( status, 'Error 2a' ) + + if( ast_getc( obj, 'label(3)', status ) .ne. + : 'Modified Julian Date offset from 1999-07-23 16:00:00' ) THEN + call stopit( status, 'Error 2b' ) + end if + + if( ast_getc( obj, 'domain(1)', status ) .ne. 'SKY' ) + : call stopit( status, 'Error 3' ) + + if( ast_getc( obj, 'system(1)', status ) .ne. 'ICRS' ) + : call stopit( status, 'Error 3a' ) + + if( ast_getc( obj, 'label(1)', status ) .ne. 'Right ascension' ) + : call stopit( status, 'Error 3b' ) + + if( ast_getc( obj, 'label(2)', status ) .ne. 'Declination' ) + : call stopit( status, 'Error 3c' ) + + if( ast_getc( obj, 'title(2)', status ) .ne. 'Space' ) + : call stopit( status, 'Error 3d' ) + + if( ast_getc( obj, 'domain(2)', status ) .ne. 'SKY' ) + : call stopit( status, 'Error 4' ) + + if( ast_getc( obj, 'domain(4)', status ) .ne. 'SPECTRUM' ) + : call stopit( status, 'Error 5' ) + + if( ast_getc( obj, 'system(4)', status ) .ne. 'ENER' ) + : call stopit( status, 'Error 5a' ) + + if( ast_getc( obj, 'stdofrest', status ) .ne. 'Topocentric' ) + : call stopit( status, 'Error 5b' ) + + if( ast_getc( obj, 'title(4)', status ) .ne. + : 'Energy (Topocentric)' ) call stopit( status, 'Error 5c' ) + + if( ast_getc( obj, 'unit(4)', status ) .ne. 'keV' ) + : call stopit( status, 'Error 5d' ) + + if( ast_geti( obj, 'naxes', status ) .ne. 4 ) + : call stopit( status, 'Error 6' ) + + in(1,1) = 10.0 + in(1,2) = 10.0 + in(1,3) = -0.1 + in(1,4) = 0.11 + + in(2,1) = -10.0 + in(2,2) = 10.0 + in(2,3) = 0.1 + in(2,4) = 0.11 + + in(3,1) = 0.0 ! inside + in(3,2) = 0.0 + in(3,3) = 100.0 + in(3,4) = 0.13 + + in(4,1) = -1.0 + in(4,2) = 1.0 + in(4,3) = -100.0 + in(4,4) = 0.13 + + in(5,1) = 10.0 + in(5,2) = 10.0 + in(5,3) = -1000.0 + in(5,4) = 9.9 + + in(6,1) = -10.0 ! inside + in(6,2) = 10.0 + in(6,3) = 1000.0 + in(6,4) = 9.9 + + in(7,1) = 0.0 + in(7,2) = 0.0 + in(7,3) = 10.0 + in(7,4) = 10.1 + + in(8,1) = -1.0 + in(8,2) = 1.0 + in(8,3) = -10.0 + in(8,4) = 10.1 + + call ast_trann( obj, 8, 4, 8, in, .true., 4, 8, out, status ) + + do i = 1, 8 + if( i .eq. 3 .or. i .eq. 6 ) then + do j = 1, 4 + if( out(i,j) .ne. in(i,j) ) then + if( status .eq. sai__ok ) then + write(*,*) i,j,out(i,j),in(i,j) + call stopit( status, 'Error 7' ) + end if + end if + end do + else + do j = 1, 4 + if( out(i,j) .ne. AST__BAD ) then + if( status .eq. sai__ok ) then + write(*,*) i,j,out(i,j),in(i,j) + call stopit( status, 'Error 8' ) + end if + end if + end do + end if + end do + +* AstroCoords + if( ast_getstcncoord( obj, status ) .ne. 1 ) then + call stopit( status, 'Error 25' ) + end if + km = ast_getstccoord( obj, 1, status ) + + if( ast_mapsize( km, status ) .ne. 4 ) then + call stopit( status, 'Error 25b' ) + endif + + if( .not. ast_mapget0A( km, AST__STCERROR, r, status ) ) then + call stopit( status, 'Error 26' ) + else if( .not.ast_isabox( r, status ) ) then + call stopit( status, 'Error 27' ) + else if( ast_geti( r, 'naxes', status ) .ne. 4 ) then + call stopit( status, 'Error 28' ) + else + fs = ast_convert( obj, r, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'Error 29' ) + else + m = ast_getMapping( fs, AST__BASE, AST__CURRENT, status ) + m = ast_simplify( m, status ) + if( .not. ast_isaunitmap( m, status ) ) then + call stopit( status, 'Error 30' ) + endif + end if + + + call ast_getregionbounds( r, lbnd, ubnd, status ) + + if( abs( lbnd(1)+2.42406841E-06 ) .gt. 0.0001E-6 ) + : call stopit( status, 'Error 31a' ) + if( abs( ubnd(1)-2.42406841E-06 ) .gt. 0.0001E-6 ) + : call stopit( status, 'Error 31b' ) + if( abs( lbnd(2)+2.42406841E-06 ) .gt. 0.0001E-6 ) + : call stopit( status, 'Error 31c' ) + if( abs( ubnd(2)-2.42406841E-06 ) .gt. 0.0001E-6 ) + : call stopit( status, 'Error 31d' ) + if( abs( 0.5*(ubnd(3)+lbnd(3)) ) .gt. 1.0E-10) + : call stopit( status, 'Error 31e' ) + if( abs( 0.5*(ubnd(3)-lbnd(3))-0.578703703718D-09 ) .gt. + : 1.0E-15 ) call stopit( status, 'Error 31e2' ) + if( abs( lbnd(4)-5.01 ) .gt. 0.00001 ) + : call stopit( status, 'Error 31g' ) + if( abs( ubnd(4)-5.11 ) .gt. 0.00001 ) + : call stopit( status, 'Error 31h' ) + + end if + + + if( .not. ast_mapget1C( km, AST__STCNAME, 6, nval, cvals, + : status ) ) then + call stopit( status, 'Error 32' ) + + else if( nval .ne. 4 ) then + call stopit( status, 'Error 33' ) + else + if( cvals(1) .ne. 'Position' ) + : call stopit( status, 'Error 34a' ) + if( cvals(2) .ne. 'Position' ) + : call stopit( status, 'Error 34b' ) + if( cvals(3) .ne. 'Time' ) + : call stopit( status, 'Error 34c' ) + if( cvals(4) .ne. 'Energy' ) + : call stopit( status, 'Error 34d' ) + end if + + if( .not. ast_mapget0A( km, AST__STCRES, r, status ) ) then + call stopit( status, 'Error 35' ) + else if( .not.ast_isabox( r, status ) ) then + call stopit( status, 'Error 36' ) + else if( ast_geti( r, 'naxes', status ) .ne. 4 ) then + call stopit( status, 'Error 37' ) + else + fs = ast_convert( obj, r, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'Error 38' ) + else + m = ast_getMapping( fs, AST__BASE, AST__CURRENT, status ) + m = ast_simplify( m, status ) + if( .not. ast_isaunitmap( m, status ) ) then + call stopit( status, 'Error 39' ) + endif + end if + + call ast_getregionbounds( r, lbnd, ubnd, status ) + + if( abs( lbnd(1)+1.2120342E-06 ) .gt. 0.0001E-6 ) + : call stopit( status, 'Error 40a' ) + if( abs( ubnd(1)-1.2120342E-06 ) .gt. 0.0001E-6 ) + : call stopit( status, 'Error 40b' ) + if( abs( lbnd(2)+1.2120342E-06 ) .gt. 0.0001E-6 ) + : call stopit( status, 'Error 40c' ) + if( abs( ubnd(2)-1.2120342E-06 ) .gt. 0.0001E-6 ) + : call stopit( status, 'Error 40d' ) + + if( abs( 86400.0D0*(ubnd(3)-lbnd(3))-1.6D-5 ) .gt. 1.0E-10 ) + : call stopit( status, 'Error 40e' ) + if( abs( 0.5*(ubnd(3)+lbnd(3)) ) .gt. 1.0E-10 ) + : call stopit( status, 'Error 40f' ) + if( abs( lbnd(4)-5.05 ) .gt. 0.00001 ) + : call stopit( status, 'Error 40g' ) + if( abs( ubnd(4)-5.07 ) .gt. 0.00001 ) + : call stopit( status, 'Error 40h' ) + + end if + + if( .not. ast_mapget0A( km, AST__STCSIZE, r, status ) ) then + call stopit( status, 'Error 41' ) + else if( .not.ast_isabox( r, status ) ) then + call stopit( status, 'Error 42' ) + else if( ast_geti( r, 'naxes', status ) .ne. 4 ) then + call stopit( status, 'Error 43' ) + else + fs = ast_convert( obj, r, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'Error 44' ) + else + m = ast_getMapping( fs, AST__BASE, AST__CURRENT, status ) + m = ast_simplify( m, status ) + if( .not. ast_isaunitmap( m, status ) ) then + call stopit( status, 'Error 45' ) + endif + end if + + call ast_getregionbounds( r, lbnd, ubnd, status ) + + if( abs( lbnd(1)+0.00242406841 ) .gt. 0.01E-6 ) + : call stopit( status, 'Error 46a' ) + if( abs( ubnd(1)-0.00242406841 ) .gt. 0.01E-6 ) + : call stopit( status, 'Error 46b' ) + if( abs( lbnd(2)+0.00242406841 ) .gt. 0.01E-6 ) + : call stopit( status, 'Error 46c' ) + if( abs( ubnd(2)-0.00242406841 ) .gt. 0.01E-6 ) + : call stopit( status, 'Error 46d' ) + if( abs( 86400.0D0*(ubnd(3)-lbnd(3))- 1000.0 ) .gt. 1.0E-10 ) + : call stopit( status, 'Error 46e' ) + if( abs( 0.5*(ubnd(3)+lbnd(3)) ) .gt. 1.0E-10 ) + : call stopit( status, 'Error 46f' ) + if( abs( lbnd(4)-4.06 ) .gt. 0.001 ) + : call stopit( status, 'Error 46g' ) + if( abs( ubnd(4)-6.06 ) .gt. 0.001 ) + : call stopit( status, 'Error 46h' ) + + end if + + + + + + + obj2 = ast_Copy( obj, status ) + + call ast_setl( obj2, 'Adaptive', .false., status ) + call ast_setc( obj2, 'epoch', '2005', status ) + call ast_clear( obj2, 'Adaptive', status ) + + call ast_setc( obj2, 'system(1)', 'galactic', status ) + + if( ast_getstcncoord( obj2, status ) .ne. 1 ) then + call stopit( status, 'Error 25b' ) + end if + km = ast_getstccoord( obj2, 1, status ) + + if( ast_mapsize( km, status ) .ne. 3 ) then + call stopit( status, 'Error 25bb' ) + end if + + if( .not. ast_mapget0A( km, AST__STCERROR, r, status ) ) then + call stopit( status, 'Error 26b' ) + else if( .not.ast_isaprism( r, status ) ) then + call stopit( status, 'Error 27b' ) + else if( ast_geti( r, 'naxes', status ) .ne. 4 ) then + call stopit( status, 'Error 28b' ) + else + fs = ast_convert( obj2, r, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'Error 29b' ) + else + m = ast_getMapping( fs, AST__BASE, AST__CURRENT, status ) + m = ast_simplify( m, status ) + if( .not. ast_isaunitmap( m, status ) ) then + call stopit( status, 'Error 30b' ) + endif + end if + + call ast_getregionbounds( r, lbnd, ubnd, status ) + + if( abs( lbnd(1)-1.68139639 ) .gt. 1.0E-7 ) + : call stopit( status, 'Error 31ab' ) + if( abs( ubnd(1)-1.68140922 ) .gt. 1.0E-7 ) + : call stopit( status, 'Error 31bb' ) + if( abs( lbnd(2)+1.05049161 ) .gt. 1.0E-7 ) + : call stopit( status, 'Error 31cb' ) + if( abs( ubnd(2)+1.05048523 ) .gt. 1.0E-7 ) + : call stopit( status, 'Error 31db' ) + if( abs( 0.5*86400.0D0*(ubnd(3)-lbnd(3))- 5.0D-5) .gt. 1.0E-10) + : call stopit( status, 'Error 31eb' ) + if( abs( 0.5*86400.0D0*(ubnd(3)+lbnd(3))) .gt. 1.0E-10 ) + : call stopit( status, 'Error 31fb' ) + if( abs( lbnd(4)-5.01 ) .gt. 0.000001 ) + : call stopit( status, 'Error 31gb' ) + if( abs( ubnd(4)-5.11 ) .gt. 0.000001 ) + : call stopit( status, 'Error 31hb' ) + + end if + + + if( ast_mapget1C( km, AST__STCNAME, 6, nval, cvals, status )) + : call stopit( status, 'Error 32b' ) + + +* Uncertainty tests + + unc = ast_getunc( obj, .true., status ) + + if( unc .eq. AST__NULL ) call stopit( status, 'Error 9' ) + if( ast_getunc( unc, .false., status ) .ne. AST__NULL ) + : call stopit( status, 'Error 9a' ) + + call ast_getregionbounds( unc, lbnd, ubnd, status ) + + + if( abs( lbnd(1) + 2.42406841E-06 ) .gt. 0.0000001E-06 ) + : call stopit( status, 'Error 10' ) + + if( abs( lbnd(2) + 2.42406841E-06 ) .gt. 0.0000001E-06 ) + : call stopit( status, 'Error 11' ) + +c if( abs( 86400.0D0*lbnd(3) + 4.9662776D-5 ) .gt. 0.1E-10 ) +c : call stopit( status, 'Error 12' ) + if( abs( lbnd(4) - 0.07 ) .gt. 0.0001 ) + : call stopit( status, 'Error 13' ) + if( abs( ubnd(1) - 2.42406841E-06 ) .gt. 0.0000001E-06 ) + : call stopit( status, 'Error 14' ) + if( abs( ubnd(2) - 2.42406841E-06 ) .gt. 0.0000001E-06 ) + : call stopit( status, 'Error 15' ) +c if( abs( 86400.0D0*ubnd(3) - 4.9662776D-5 ) .gt. 0.1E-10 ) +c : call stopit( status, 'Error 16' ) + if( abs( ubnd(4) - 0.17 ) .gt. 0.0001 ) + : call stopit( status, 'Error 17' ) + + +* UseDefs tests. +c if( status .eq. SAI__OK ) then +c obj2 = ast_copy( obj, status ) +c call err_begin( status ) +c call ast_set( obj2, 'System=FK4', status ) +c if( status .ne. AST__NOVAL ) then +c write(*,*) 'status is ',status,': should be ',AST__NOVAL +c if( status .ne. sai__ok ) call err_annul( status ) +c call stopit( status, 'Error 18' ) +c else +c call err_annul( status ) +c end if +c call err_end( status ) +c call ast_annul( obj2, status ) +c end if +c +c if( status .eq. SAI__OK ) then +c obj2 = ast_copy( obj, status ) +c call err_begin( status ) +c call ast_set( obj2, 'System=velo', status ) +c if( status .ne. AST__NOVAL ) then +c write(*,*) 'status is ',status,': should be ',AST__NOVAL +c if( status .ne. sai__ok ) call err_annul( status ) +c call stopit( status, 'Error 19' ) +c else +c call err_annul( status ) +c end if +c call err_end( status ) +c call ast_annul( obj2, status ) +c end if + + call ast_set( obj, 'Unit(4)=J', status ) + + if( status .ne. SAI__OK ) call stopit( status, 'Error 20' ) + +* Tests on reference values + if( ast_test( obj, 'RefRA(4)', status ) ) then + call stopit( status, 'Error 21' ) + end if + + if( ast_test( obj, 'RefDec(4)', status ) ) then + call stopit( status, 'Error 22' ) + end if + +c if( ast_test( obj, 'Epoch(4)', status ) ) then +c call stopit( status, 'Error 22' ) +c end if + +c if( ast_test( obj, 'Epoch(1)', status ) ) then +c call stopit( status, 'Error 23' ) +c end if + +c if( ast_test( obj, 'Epoch(2)', status ) ) then +c call stopit( status, 'Error 24' ) +c end if + + + + + call ast_end( status ) + + if( status .ne. sai__ok ) write(*,*) 'teststc: example 1 '// + : 'tests failed' + + end + + + subroutine Example1b( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'AST_ERR' + + include 'teststc_com' + + integer status, obj, i, l + character value*200 + + if( status .ne. sai__ok ) return + + call ast_begin( status ) + +* Test the Strict attribute. + call puteg( 'teststc_eg1', 1, status ) + + call err_mark + call xmlread( 1, obj, 'Strict=1', status ) + + if( status .ne. ast__badin ) then + if( status .ne. sai__ok ) call err_flush( status ) + call stopit( status, 'Error 1' ) + else + call err_annul( status ) + end if + call err_rlse + +* Test the ast_warnings function. + call xmlread( 1, obj, 'Strict=0', status ) + if( warns .EQ. AST__NULL ) then + call stopit( status, 'Error 2' ) + + else if( ast_mapsize( warns, status ) .ne. 5 ) then + call stopit( status, 'Error 3' ) + + else if( .not. ast_mapget0c( warns, 'Warning_1', value, l, + : status ) ) then + call stopit( status, 'Error 4' ) + + else if( value(:l) .ne. 'astRead(XmlChan): Warning whilst '// + : 'reading a Position2D element: contains more than '// + : 'one <Size> element. AST can only use the first' ) then + call stopit( status, 'Error 5' ) + end if + + + call ast_end( status ) + + if( status .ne. sai__ok ) write(*,*) 'teststc: example 1b '// + : 'tests failed' + + end + + + subroutine Example2( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + integer status, obj, i, j + double precision in(12,5), out(12,5) + + if( status .ne. sai__ok ) return + + call ast_begin( status ) + +* Put an example of a CatalogEntryLocation into file 1. + call puteg( 'teststc_eg2', 1, status ) + +* Use a new XmlChan to read an object from file 1,and simplify it. + call xmlread( 1, obj, ' ', status ) + obj = ast_simplify( obj, status ) + +* Test simplify by negating and simplifying twice. + call ast_negate( obj, status ) + obj = ast_simplify( obj, status ) + call ast_negate( obj, status ) + obj = ast_simplify( obj, status ) + call checkdump( obj, 'checkdump 1', status ) + +* Check it is a StcCatalogEntryLocation + if( .not. ast_isastcCatalogEntryLocation( obj, status ) ) + : call stopit( status, 'Error 1' ) + +* Check it is an Interval. + if( .not. ast_isainterval( ast_getstcregion( obj, status ), + : status ) ) + : call stopit( status, 'Error 1a' ) + +* Check it has no uncertainty + if( ast_getunc( obj, .false., status ) .NE. AST__NULL ) + : call stopit( status, 'Error 1b' ) + +* Other tests + if( ast_geti( obj, 'naxes', status ) .ne. 5 ) + : call stopit( status, 'Error 1ab' ) + + if( ast_getd( obj, 'fillfactor', status ) .ne. 1.0D0 ) + : call stopit( status, 'Error 1b' ) + + if( ast_getc( obj, 'ident', status ) .ne. 'RA6-18hDec20-70deg' ) + : call stopit( status, 'Error 1c' ) + + if( ast_getc( obj, 'domain(3)', status ) .ne. 'TIME' ) + : call stopit( status, 'Error 2' ) + + if( ast_getc( obj, 'title(3)', status ) .ne. + : 'Julian Date [TT] offset from 1968-05-23 12:00:00' ) + : call stopit( status, 'Error 2a' ) + + if( ast_getc( obj, 'label(3)', status ) .ne. + : 'Julian Date offset from 1968-05-23 12:00:00' ) THEN + call stopit( status, 'Error 2b' ) + endif + + if( ast_getc( obj, 'domain(1)', status ) .ne. 'SKY' ) + : call stopit( status, 'Error 3' ) + + if( ast_getc( obj, 'system(1)', status ) .ne. 'FK4' ) + : call stopit( status, 'Error 3a' ) + + if( ast_getc( obj, 'label(1)', status ) .ne. 'Right ascension' ) + : call stopit( status, 'Error 3b' ) + + if( ast_getc( obj, 'label(2)', status ) .ne. 'Declination' ) + : call stopit( status, 'Error 3c' ) + + if( ast_getc( obj, 'title(2)', status ) .ne. 'PosEq' ) + : call stopit( status, 'Error 3d' ) + + if( ast_getd( obj, 'Equinox', status ) .ne. 1950D0 ) + : call stopit( status, 'Error 3d' ) + + if( ast_getc( obj, 'domain(2)', status ) .ne. 'SKY' ) + : call stopit( status, 'Error 4' ) + + if( ast_getc( obj, 'domain(4)', status ) .ne. 'SPECTRUM' ) + : call stopit( status, 'Error 5' ) + + if( ast_getc( obj, 'system(4)', status ) .ne. 'WAVE' ) + : call stopit( status, 'Error 5a' ) + + if( ast_getc( obj, 'stdofrest', status ) .ne. 'Topocentric' ) + : call stopit( status, 'Error 5b' ) + + if( ast_test( obj, 'title(4)', status ) ) + : call stopit( status, 'Error 5c' ) + + if( ast_geti( obj, 'naxes', status ) .ne. 5 ) + : call stopit( status, 'Error 6' ) + + if( ast_getc( obj, 'domain(5)', status ) .ne. 'REDSHIFT' ) + : call stopit( status, 'Error 6a' ) + + if( ast_getc( obj, 'system(5)', status ) .ne. 'VOPT' ) + : call stopit( status, 'Error 6b' ) + + if( ast_getc( obj, 'label(5)', status ) .ne. 'Optical velocity' ) + : call stopit( status, 'Error 6c' ) + + if( ast_getc( obj, 'unit(5)', status ) .ne. 'km/s' ) + : call stopit( status, 'Error 6d' ) + + if( ast_getc( obj, 'unit(4)', status ) .ne. 'Angstrom' ) + : call stopit( status, 'Error 6e' ) + + + in(1,1) = 4.71238 ! inside + in(1,2) = 1.2216 + in(1,3) = 1 + in(1,4) = 6499.9 + in(1,5) = 9999.9 + + in(2,1) = 4.71240 ! outside + in(2,2) = 1.2216 + in(2,3) = 1 + in(2,4) = 6499.9 + in(2,5) = 9999.9 + + in(3,1) = 4.71238 ! outside + in(3,2) = 1.2218 + in(3,3) = 1 + in(3,4) = 6499.9 + in(3,5) = 9999.9 + + in(4,1) = 4.71238 ! outside + in(4,2) = 1.2216 + in(4,3) = -0.6 + in(4,4) = 6499.9 + in(4,5) = 9999.9 + + in(5,1) = 4.71238 ! outside + in(5,2) = 1.2216 + in(5,3) = 1 + in(5,4) = 6500.1 + in(5,5) = 9999.9 + + in(6,1) = 4.71238 ! outside + in(6,2) = 1.2216 + in(6,3) = 1 + in(6,4) = 6499.9 + in(6,5) = 10000.1 + + in(7,1) = 1.5709 ! inside + in(7,2) = 0.3492 + in(7,3) = 999.6 + in(7,4) = 5000.1 + in(7,5) = 5000 + + in(8,1) = 1.5707 ! outside + in(8,2) = 0.3492 + in(8,3) = 999.6 + in(8,4) = 5000.1 + in(8,5) = 5000 + + in(9,1) = 1.5709 ! outside + in(9,2) = 0.3490 + in(9,3) = 999.6 + in(9,4) = 5000.1 + in(9,5) = 5000 + + in(10,1) = 1.5709 ! outside + in(10,2) = 0.3492 + in(10,3) = 1000.4 + in(10,4) = 5000.1 + in(10,5) = 5000 + + in(11,1) = 1.5709 ! outside + in(11,2) = 0.3492 + in(11,3) = 999.6 + in(11,4) = 4999.9 + in(11,5) = 5000 + + in(12,1) = 1.5709 ! inside + in(12,2) = 0.3492 + in(12,3) = 999.6 + in(12,4) = 5000.1 + in(12,5) = 1000 + + call ast_trann( obj, 12, 5, 12, in, .true., 5, 12, out, status ) + + do i = 1, 12 + if( i .eq. 1 .or. i .eq. 7 .or. i .eq. 12 ) then ! inside points + do j = 1, 5 + if( out(i,j) .ne. in(i,j) ) then + if( status .eq. sai__ok ) then + write(*,*) i,j,out(i,j),in(i,j) + call stopit( status, 'Error 7' ) + end if + end if + end do + else ! outside points + do j = 1, 5 + if( out(i,j) .ne. AST__BAD ) then + if( status .eq. sai__ok ) then + write(*,*) i,j,out(i,j),in(i,j) + call stopit( status, 'Error 8' ) + end if + end if + end do + end if + end do + +* Tests on reference values + if( ast_test( obj, 'RefRA(4)', status ) ) then + call stopit( status, 'Error 9' ) + end if + + if( ast_test( obj, 'RefDec(4)', status ) ) then + call stopit( status, 'Error 10' ) + end if + +c if( ast_test( obj, 'Epoch(4)', status ) ) then +c call stopit( status, 'Error 11' ) +c end if + +c if( ast_test( obj, 'Epoch(1)', status ) ) then +c call stopit( status, 'Error 12' ) +c end if + +c if( ast_test( obj, 'Epoch(2)', status ) ) then +c call stopit( status, 'Error 13' ) +c end if + + if( ast_test( obj, 'RestFreq(5)', status ) ) then + call stopit( status, 'Error 14' ) + end if + + + + + + + call ast_end( status ) + + if( status .ne. sai__ok ) write(*,*) 'teststc: example 2 '// + : 'tests failed' + + end + + + + + + + + subroutine Example3( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + integer status, obj, i, j + double precision in(12,5), out(12,5) + + if( status .ne. sai__ok ) return + + call ast_begin( status ) + +* Put an example of a CatalogEntryLocation into file 1. + call puteg( 'teststc_eg3', 1, status ) + +* Use a new XmlChan to read an object from file 1,and simplify it. + call xmlread( 1, obj, ' ', status ) + obj = ast_simplify( obj, status ) + +* Test simplify by negating and simplifying twice. + call ast_negate( obj, status ) + obj = ast_simplify( obj, status ) + call ast_negate( obj, status ) + obj = ast_simplify( obj, status ) + call checkdump( obj, 'checkdump 1', status ) + +* Check it is a StcCatalogEntryLocation + if( .not. ast_isastcCatalogEntryLocation( obj, status ) ) + : call stopit( status, 'Error 1' ) + +* Check it is an Interval. + if( .not. ast_isainterval( ast_getstcregion( obj, status ), + : status ) ) then + write(*,*) ast_GetC( ast_getstcregion( obj, status ), 'Class', + : status ) + call stopit( status, 'Error 1a' ) + end if + +* Check it has no uncertainty + if( ast_getunc( obj, .false., status ) .NE. AST__NULL ) + : call stopit( status, 'Error 1b' ) + +* Check it has 5 axes. + if( ast_geti( obj, 'naxes', status ) .ne. 5 ) + : call stopit( status, 'Error 1ab' ) + +* Check the rest frequency for axis 5 (redshift) is 5000 Angstrom + if( abs( ast_getd( obj, 'restfreq(5)', status ) - 599584.916D0 ) + : .gt. 0.001D0 ) call stopit( status, 'Error A1' ) + +* Check the epoch for allaxes is JD 2440000 + if( abs( ast_getd( obj, 'epoch(1)', status ) - 1968.39212D0 ) .gt. + : 0.00001D0 ) call stopit( status, 'Error B1' ) + if( abs( ast_getd( obj, 'epoch(2)', status ) - 1968.39212D0 ) .gt. + : 0.00001D0 ) call stopit( status, 'Error B2' ) + if( abs( ast_getd( obj, 'epoch(3)', status ) - 1968.39212D0 ) .gt. + : 0.00001D0 ) call stopit( status, 'Error B3' ) + if( abs( ast_getd( obj, 'epoch(4)', status ) - 1968.39212D0 ) .gt. + : 0.00001D0 ) call stopit( status, 'Error B4' ) + if( abs( ast_getd( obj, 'epoch(5)', status ) - 1968.39212D0 ) .gt. + : 0.00001D0 ) call stopit( status, 'Error B5' ) + +* Other tests + if( ast_getd( obj, 'fillfactor', status ) .ne. 1.0D0 ) + : call stopit( status, 'Error 1b' ) + + if( ast_getc( obj, 'ident', status ) .ne. 'RA6-18hDec20-70deg' ) + : call stopit( status, 'Error 1c' ) + + if( ast_getc( obj, 'domain(3)', status ) .ne. 'TIME' ) + : call stopit( status, 'Error 2' ) + + if( ast_getc( obj, 'label(3)', status ) .ne. + : 'Julian Date offset from 1968-05-23 12:00:00' ) THEN + call stopit( status, 'Error 2b' ) + end if + + if( ast_getc( obj, 'domain(1)', status ) .ne. 'SKY' ) + : call stopit( status, 'Error 3' ) + + if( ast_getc( obj, 'system(1)', status ) .ne. 'FK4' ) + : call stopit( status, 'Error 3a' ) + + if( ast_getc( obj, 'label(1)', status ) .ne. 'Right ascension' ) + : call stopit( status, 'Error 3b' ) + + if( ast_getc( obj, 'label(2)', status ) .ne. 'Declination' ) + : call stopit( status, 'Error 3c' ) + + if( ast_getc( obj, 'title(2)', status ) .ne. 'PosEq' ) + : call stopit( status, 'Error 3d' ) + + if( ast_getd( obj, 'Equinox', status ) .ne. 1950D0 ) + : call stopit( status, 'Error 3d' ) + + if( ast_getc( obj, 'domain(2)', status ) .ne. 'SKY' ) + : call stopit( status, 'Error 4' ) + + if( ast_getc( obj, 'domain(4)', status ) .ne. 'SPECTRUM' ) + : call stopit( status, 'Error 5' ) + + if( ast_getc( obj, 'system(4)', status ) .ne. 'WAVE' ) + : call stopit( status, 'Error 5a' ) + + if( ast_getc( obj, 'stdofrest', status ) .ne. 'Topocentric' ) + : call stopit( status, 'Error 5b' ) + + if( ast_test( obj, 'title(4)', status ) ) + : call stopit( status, 'Error 5c' ) + + if( ast_geti( obj, 'naxes', status ) .ne. 5 ) + : call stopit( status, 'Error 6' ) + + if( ast_getc( obj, 'domain(5)', status ) .ne. 'REDSHIFT' ) + : call stopit( status, 'Error 6a' ) + + if( ast_getc( obj, 'system(5)', status ) .ne. 'VOPT' ) + : call stopit( status, 'Error 6b' ) + + if( ast_getc( obj, 'label(5)', status ) .ne. 'Optical velocity' ) + : call stopit( status, 'Error 6c' ) + + if( ast_getc( obj, 'unit(5)', status ) .ne. 'km/s' ) + : call stopit( status, 'Error 6d' ) + + if( ast_getc( obj, 'unit(4)', status ) .ne. 'Angstrom' ) + : call stopit( status, 'Error 6e' ) + + + in(1,1) = 4.71238 ! inside + in(1,2) = 1.2216 + in(1,3) = 0.0D0 + in(1,4) = 5000 + in(1,5) = 9999.9 + + in(2,1) = 4.71240 ! outside + in(2,2) = 1.2216 + in(2,3) = 0.0D0 + in(2,4) = 5000 + in(2,5) = 9999.9 + + in(3,1) = 4.71238 ! outside + in(3,2) = 1.2218 + in(3,3) = 0.0D0 + in(3,4) = 5000 + in(3,5) = 9999.9 + + in(4,1) = 4.71238 ! outside + in(4,2) = 1.2216 + in(4,3) = 0.5D0 + in(4,4) = 5000 + in(4,5) = 9999.9 + + in(5,1) = 4.71238 ! outside + in(5,2) = 1.2216 + in(5,3) = 0.0D0 + in(5,4) = 6500.1 + in(5,5) = 9999.9 + + in(6,1) = 4.71238 ! outside + in(6,2) = 1.2216 + in(6,3) = 0.0D0 + in(6,4) = 5000 + in(6,5) = 10000.1 + + in(7,1) = 1.5709 ! inside + in(7,2) = 0.3492 + in(7,3) = 0.0D0 + in(7,4) = 5000 + in(7,5) = 5000 + + in(8,1) = 1.5707 ! outside + in(8,2) = 0.3492 + in(8,3) = 0.0D0 + in(8,4) = 5000 + in(8,5) = 5000 + + in(9,1) = 1.5709 ! outside + in(9,2) = 0.3490 + in(9,3) = 0.0D0 + in(9,4) = 5000 + in(9,5) = 5000 + + in(10,1) = 1.5709 ! outside + in(10,2) = 0.3492 + in(10,3) = 39999.4D0 + in(10,4) = 5000 + in(10,5) = 5000 + + in(11,1) = 1.5709 ! outside + in(11,2) = 0.3492 + in(11,3) = 0.0D0 + in(11,4) = 4999.9 + in(11,5) = 5000 + + in(12,1) = 1.5709 ! inside + in(12,2) = 0.3492 + in(12,3) = 0.0D0 + in(12,4) = 5000 + in(12,5) = 1000 + + call ast_trann( obj, 12, 5, 12, in, .true., 5, 12, out, status ) + + do i = 1, 12 + if( i .eq. 1 .or. i .eq. 7 .or. i .eq. 12 ) then ! inside points + do j = 1, 5 + if( out(i,j) .ne. in(i,j) ) then + if( status .eq. sai__ok ) then + write(*,*) i,j,out(i,j),in(i,j) + call stopit( status, 'Error 7' ) + end if + end if + end do + else ! outside points + do j = 1, 5 + if( out(i,j) .ne. AST__BAD ) then + if( status .eq. sai__ok ) then + write(*,*) i,j,out(i,j),in(i,j) + call stopit( status, 'Error 8' ) + end if + end if + end do + end if + end do + +* Tests on reference values + if( ast_test( obj, 'RefRA(4)', status ) ) then + call stopit( status, 'Error 9' ) + end if + + if( ast_test( obj, 'RefDec(4)', status ) ) then + call stopit( status, 'Error 10' ) + end if + + if( .not. ast_test( obj, 'Epoch(4)', status ) ) then + call stopit( status, 'Error 11' ) + end if + + if( .not. ast_test( obj, 'Epoch(1)', status ) ) then + call stopit( status, 'Error 12' ) + end if + + if( .not. ast_test( obj, 'Epoch(2)', status ) ) then + call stopit( status, 'Error 13' ) + end if + + if( .not. ast_test( obj, 'RestFreq(5)', status ) ) then + call stopit( status, 'Error 14' ) + end if + + + + + + + call ast_end( status ) + + if( status .ne. sai__ok ) write(*,*) 'teststc: example 3 '// + : 'tests failed' + + end + + + + + + + subroutine Example4( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'AST_ERR' + + integer status, obj2, obj, i, j, unc, frm + double precision in(12,4), out(12,4), lbnd(4), ubnd(4) + + if( status .ne. sai__ok ) return + + call ast_begin( status ) + +* Put an example of an STCSearchLocation into file 1. + call puteg( 'teststc_eg4', 1, status ) + +* Use a new XmlChan to read an object from file 1,and simplify it. + call xmlread( 1, obj, ' ', status ) + obj = ast_simplify( obj, status ) + +* Test simplify by negating and simplifying twice. + call ast_negate( obj, status ) + obj = ast_simplify( obj, status ) + call ast_negate( obj, status ) + obj = ast_simplify( obj, status ) + call checkdump( obj, 'checkdump 1', status ) + + +* Check it is a STCSearchLocation + if( .not. ast_isastcsearchlocation( obj, status ) ) + : call stopit( status, 'Error 1' ) + +* Check it is a Prism. + if( .not. ast_isaprism( ast_getstcregion( obj, status ), + : status ) ) + : call stopit( status, 'Error 1a' ) + +* Check it has no uncertainty + if( ast_getunc( obj, .false., status ) .NE. AST__NULL ) + : call stopit( status, 'Error 1b' ) + +* Other tests + if( ast_geti( obj, 'naxes', status ) .ne. 4 ) + : call stopit( status, 'Error 1ab' ) + + if( ast_getd( obj, 'fillfactor', status ) .ne. 1.0D0 ) + : call stopit( status, 'Error 1b' ) + + if( ast_getc( obj, 'ident', status ) .ne. 'M81' ) + : call stopit( status, 'Error 1c' ) + + if( ast_getc( obj, 'domain(3)', status ) .ne. 'TIME' ) + : call stopit( status, 'Error 2' ) + + if( ast_getc( obj, 'label(3)', status ) .ne. + : 'Modified Julian Date offset from 1900-01-01' ) THEN + call stopit( status, 'Error 2b' ) + end if + + if( ast_getc( obj, 'domain(1)', status ) .ne. 'SKY' ) + : call stopit( status, 'Error 3' ) + + if( ast_getc( obj, 'system(1)', status ) .ne. 'ICRS' ) + : call stopit( status, 'Error 3a' ) + + if( ast_getc( obj, 'label(1)', status ) .ne. 'Right ascension' ) + : call stopit( status, 'Error 3b' ) + + if( ast_getc( obj, 'label(2)', status ) .ne. 'Declination' ) + : call stopit( status, 'Error 3c' ) + + if( ast_getc( obj, 'title(2)', status ) .ne. 'Equatorial' ) + : call stopit( status, 'Error 3d' ) + + if( ast_test( obj, 'Equinox', status ) ) + : call stopit( status, 'Error 3d2' ) + + if( ast_getc( obj, 'domain(2)', status ) .ne. 'SKY' ) + : call stopit( status, 'Error 4' ) + + if( ast_getc( obj, 'domain(4)', status ) .ne. 'SPECTRUM' ) + : call stopit( status, 'Error 5' ) + + if( ast_getc( obj, 'system(4)', status ) .ne. 'WAVE' ) + : call stopit( status, 'Error 5a' ) + + if( ast_getc( obj, 'stdofrest', status ) .ne. 'Barycentric' ) + : call stopit( status, 'Error 5b' ) + + if( ast_getc( obj, 'title(4)', status ) .ne. 'Wavelength' ) + : call stopit( status, 'Error 5c' ) + + if( ast_geti( obj, 'naxes', status ) .ne. 4 ) + : call stopit( status, 'Error 6' ) + + if( ast_getc( obj, 'unit(4)', status ) .ne. 'Angstrom' ) + : call stopit( status, 'Error 6e' ) + + frm = ast_getregionframe( obj, status ) + if( ast_getc( frm, 'Ident', status ) .ne. 'ICRS-TT-BARY' ) + : call stopit( status, 'Error 7' ) + + + +* Tests on reference values + if( ast_test( obj, 'RefRA(4)', status ) ) then + call stopit( status, 'Error 9' ) + end if + + if( ast_test( obj, 'RefDec(4)', status ) ) then + call stopit( status, 'Error 10' ) + end if + +c if( ast_test( obj, 'Epoch(4)', status ) ) then +c call stopit( status, 'Error 11' ) +c end if + +c if( ast_test( obj, 'Epoch(1)', status ) ) then +c call stopit( status, 'Error 12' ) +c end if + +c if( ast_test( obj, 'Epoch(2)', status ) ) then +c call stopit( status, 'Error 13' ) +c end if + + if( ast_test( obj, 'RestFreq(4)', status ) ) then + call stopit( status, 'Error 14' ) + end if + + if( abs( ast_getd( obj, 'Epoch(3)', status ) - 1900.00051056532 ) + : .gt. 0.0001 ) then + call stopit( status, 'Error 12b' ) + end if + + if( abs( ast_getd( obj, 'TimeOrigin', status ) - 15020.0D0 ) + : .gt. 0.0001 ) then + call stopit( status, 'Error 12c' ) + end if + + + + + in(1,1) = 2.51126532207628 ! inside + in(1,2) = 1.22218015796595 + in(1,3) = 0.01 + in(1,4) = 4001 + + in(2,1) = 2.5094191311777 ! outside + in(2,2) = 1.22248014367694 + in(2,3) = 0.01 + in(2,4) = 4001 + + in(3,1) = 2.51126532207628 ! outside + in(3,2) = 1.22218015796595 + in(3,3) = 0.01 + in(3,4) = 3999 + + in(4,1) = 2.51126532207628 ! outside + in(4,2) = 1.22218015796595 + in(4,3) = -0.2 + in(4,4) = 4001 + + in(5,1) = 2.5094191311777 ! outside + in(5,2) = 1.22248014367694 + in(5,3) = -0.2 + in(5,4) = 4001 + + in(6,1) = 2.51126532207628 ! outside + in(6,2) = 1.22218015796595 + in(6,3) = -0.2 + in(6,4) = 3999 + + in(7,1) = 2.51682141503858 ! inside + in(7,2) = 1.18868060989363 + in(7,3) = 0.01 + in(7,4) = 6999 + + in(8,1) = 2.51524001365674 ! outside + in(8,2) = 1.18830732379242 + in(8,3) = 0.01 + in(8,4) = 6999 + + in(9,1) = 2.51682141503858 ! outside + in(9,2) = 1.18868060989363 + in(9,3) = 0.01 + in(9,4) = 7001 + + in(10,1) = 2.51682141503858 ! outside + in(10,2) = 1.18868060989363 + in(10,3) = -0.2 + in(10,4) = 6999 + + in(11,1) = 2.51524001365674 ! outside + in(11,2) = 1.18830732379242 + in(11,3) = -0.2 + in(11,4) = 6999 + + in(12,1) = 2.51682141503858 ! outside + in(12,2) = 1.18868060989363 + in(12,3) = -0.2 + in(12,4) = 7001 + + call ast_trann( obj, 12, 4, 12, in, .true., 4, 12, out, status ) + + do i = 1, 12 + if( i .eq. 1 .or. i .eq. 7 ) then ! inside points + do j = 1, 4 + if( out(i,j) .ne. in(i,j) ) then + if( status .eq. sai__ok ) then + write(*,*) i,j,out(i,j),in(i,j) + call stopit( status, 'Error 13c' ) + end if + end if + end do + else ! outside points + do j = 1, 4 + if( out(i,j) .ne. AST__BAD ) then + if( status .eq. sai__ok ) then + write(*,*) i,j,out(i,j),in(i,j) + call stopit( status, 'Error 14c' ) + end if + end if + end do + end if + end do + + + call ast_end( status ) + + if( status .ne. sai__ok ) write(*,*) 'teststc: example 4 '// + : 'tests failed' + + end + + + + + subroutine Example5( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'AST_ERR' + + integer status, obj2, obj, i, j, unc, frm + double precision in(12,4), out(12,4), lbnd(4), ubnd(4) + + if( status .ne. sai__ok ) return + + call ast_begin( status ) + +* Put an example of an STCSearchLocation into file 1. + call puteg( 'teststc_eg5', 1, status ) + +* Use a new XmlChan to read an object from file 1,and simplify it. + call xmlread( 1, obj, ' ', status ) + call checkdump( obj, 'checkdump 2', status ) + obj = ast_simplify( obj, status ) + +* Test simplify by negating and simplifying twice. + call ast_negate( obj, status ) + obj = ast_simplify( obj, status ) + call ast_negate( obj, status ) + obj = ast_simplify( obj, status ) + call checkdump( obj, 'checkdump 1', status ) + +* Check it is a STCObsDataLocation + if( .not. ast_isastcobsdatalocation( obj, status ) ) + : call stopit( status, 'Error 1' ) + +* Check it contains a Prism. + if( .not. ast_isaprism( ast_getstcregion( obj, status ), + : status ) ) + : call stopit( status, 'Error 1a' ) + +* Other tests + if( ast_getd( obj, 'fillfactor', status ) .ne. 1.0D0 ) + : call stopit( status, 'Error 1b' ) + + if( ast_getc( obj, 'ident', status ) .ne. 'M81' ) + : call stopit( status, 'Error 1c' ) + + if( ast_getc( obj, 'domain(3)', status ) .ne. 'TIME' ) + : call stopit( status, 'Error 2' ) + + if( ast_getc( obj, 'label(3)', status ) .ne. + : 'Modified Julian Date offset from 2004-07-15 08:23:56' ) then + call stopit( status, 'Error 2b' ) + end if + + if( ast_getc( obj, 'domain(1)', status ) .ne. 'SKY' ) + : call stopit( status, 'Error 3' ) + + if( ast_getc( obj, 'system(1)', status ) .ne. 'ICRS' ) + : call stopit( status, 'Error 3a' ) + + if( ast_getc( obj, 'label(1)', status ) .ne. 'Right ascension' ) + : call stopit( status, 'Error 3b' ) + + if( ast_getc( obj, 'label(2)', status ) .ne. 'Declination' ) + : call stopit( status, 'Error 3c' ) + + if( ast_getc( obj, 'title(2)', status ) .ne. 'Equatorial' ) + : call stopit( status, 'Error 3d' ) + + if( ast_getc( obj, 'domain(2)', status ) .ne. 'SKY' ) + : call stopit( status, 'Error 4' ) + + if( ast_getc( obj, 'domain(4)', status ) .ne. 'SPECTRUM' ) + : call stopit( status, 'Error 5' ) + + if( ast_getc( obj, 'system(4)', status ) .ne. 'WAVE' ) + : call stopit( status, 'Error 5a' ) + + if( ast_getc( obj, 'stdofrest', status ) .ne. 'Topocentric' ) + : call stopit( status, 'Error 5b' ) + + if( ast_getc( obj, 'title(4)', status ) .ne. + : 'Wavelength' ) call stopit( status, 'Error 5c' ) + + if( ast_getc( obj, 'unit(4)', status ) .ne. 'Angstrom' ) + : call stopit( status, 'Error 5d' ) + + if( ast_geti( obj, 'naxes', status ) .ne. 4 ) + : call stopit( status, 'Error 6' ) + + call ast_getregionbounds( obj, lbnd, ubnd, status ) + + + + lbnd(1) = 0.5*(lbnd(1) + ubnd(1)) + lbnd(2) = 0.5*(lbnd(2) + ubnd(2)) + lbnd(3) = 0.5*(lbnd(3) + ubnd(3)) + lbnd(4) = 0.5*(lbnd(4) + ubnd(4)) + + if( abs( lbnd(1) - 2.59858948190075 ) .gt. 1E-06 ) + : call stopit( status, 'Error 10' ) + if( abs( lbnd(2) - 1.20541670934471 ) .gt. 1E-06 ) + : call stopit( status, 'Error 11' ) + if( abs( lbnd(3) ) .gt. 1E-5 ) + : call stopit( status, 'Error 12' ) + if( abs( lbnd(4) - 4600 ) .gt. 0.0001 ) + : call stopit( status, 'Error 13' ) + if( abs( ubnd(1) - 2.61080678666471 ) .gt. 1E-06 ) + : call stopit( status, 'Error 14' ) + if( abs( ubnd(2) - 1.2097800324747 ) .gt. 1E-06 ) + : call stopit( status, 'Error 15' ) + if( abs( ubnd(3) - 380.0D0 ) .gt. 1E-5 ) + : call stopit( status, 'Error 16' ) + if( abs( ubnd(4) - 4800 ) .gt. 0.0001 ) + : call stopit( status, 'Error 17' ) + if( ast_getc( obj, 'ObsLon', status ) .ne. 'W111:35:39.84' ) + : call stopit( status, 'Error 18' ) + if( ast_getc( obj, 'ObsLat', status ) .ne. 'N31:57:30.96' ) + : call stopit( status, 'Error 19' ) + + unc = ast_getunc( obj, .true., status ) + if( unc .eq. AST__NULL ) call stopit( status, 'Error 20' ) + + call ast_getregionbounds( unc, lbnd, ubnd, status ) + + lbnd(1) = 0.5*(lbnd(1) + ubnd(1)) + lbnd(2) = 0.5*(lbnd(2) + ubnd(2)) + lbnd(3) = 0.5*(lbnd(3) + ubnd(3)) + lbnd(4) = 0.5*(lbnd(4) + ubnd(4)) + + if( abs( lbnd(1) - 2.59858948190075D0) .gt. 1E-05 ) + : call stopit( status, 'Error 21' ) + if( abs( lbnd(2) - 1.20541670934471D0) .gt. 1E-05 ) + : call stopit( status, 'Error 22' ) + if( abs( lbnd(3) ) .gt. 1.0D-05 ) + : call stopit( status, 'Error 23' ) + if( abs( lbnd(4) - 4600.0D0) .gt. 0.0001 ) + : call stopit( status, 'Error 24' ) + if( abs( ubnd(1) - 2.59859209989462D0) .gt. 1E-05 ) + : call stopit( status, 'Error 25' ) + + if( abs( ubnd(2) - 1.20541932733859D0) .gt. 1E-05 ) + : call stopit( status, 'Error 26' ) + if( abs( ubnd(3) - 0.3803143212621760D-03 ) .gt. 1E-05 ) + : call stopit( status, 'Error 27' ) + if( abs( ubnd(4) - 4600.0002D0) .gt. 0.000001 ) + : call stopit( status, 'Error 28' ) + + if( status .ne. sai__ok ) write(*,*) 'teststc: example 5 '// + : 'tests failed' + + end + + + + + + + + + + + + + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + + end + + + + + +* +* Read an object out of the specified internal file using an XmlChan. +* + subroutine xmlread( ifil, obj, opts, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + include 'teststc_com' + + external xmlSource + integer obj, ifil, status, ch + character opts*(*) + + if( status .ne. sai__ok ) return + + ifile = ifil + iline = 1 + + ch = ast_xmlchan( xmlSource, ast_null, opts, status ) + obj = ast_read( ch, status ) + if( obj .eq. ast__null ) then + call stopit( status, 'checkXmlChan: Failed to read STC '// + : 'object from XmlChan.' ) + end if + + warns = ast_warnings( ch, status ) + call ast_annul( ch, status ) + + end + + + + +* +* Reads line "iline" from internal file "ifile" and returns it to AST using +* the AST_PUTLINE routine. Then increments "iline" ready for next time. +* + subroutine xmlSource( status ) + implicit none + + include 'teststc_com' + + integer status, l, chr_len + + if( iline .le. filelen( ifile ) ) then + l = chr_len( files(ifile,iline) ) + call ast_putline( files(ifile,iline), l, status ) + iline = iline + 1 + else + call ast_putline( ' ', -1, status ) + end if + + end + +* +* Append a line obtained using ast_getline function to the end of the +* internal file indicated by "ifile", and increment the file length. +* + subroutine xmlSink( status ) + implicit none + + include 'teststc_com' + + integer status, l + character line*(linelen) + + call ast_getline( line, l, status ) + if( l .gt. 0 ) then + + if( filelen( ifile ) .ge. mxline ) then + call stopit( status, 'checkXmlChan: Too many lines sent '// + : 'to sink function' ) + + else if( l .gt. linelen ) then + call stopit( status, 'checkXmlChan: Text truncated in '// + : 'sink function' ) + + else + filelen( ifile ) = filelen( ifile ) + 1 + files( ifile, filelen( ifile ) ) = line(:l) + end if + + end if + + end + + + subroutine puteg( flnam, ifl, status ) + implicit none + + include 'SAE_PAR' + include 'AST_PAR' + include 'teststc_com' + + integer status, ifl + character flnam*(*) + + if( status .ne. sai__ok ) return + + open( file=flnam, status='old', unit=10 ) + + iline = 1 + 10 continue + if( iline .gt. mxline ) call stopit( status, + : 'mxline exceeded in puteg' ) + read( 10, '(A)', end=20 ) files( ifl, iline ) + + if( files( ifl, iline )( linelen : linelen ) .ne. ' ' ) then + call stopit( status, 'linelen exceeded in puteg' ) + end if + + iline = iline + 1 + go to 10 + + 20 continue + close( 10 ) + filelen( ifl ) = iline - 1 + + end + + +* +* Tests the dump function, the loader, and the astOverlap method. +* + subroutine checkdump( obj, text, status ) + + implicit none + include 'SAE_PAR' + include 'AST_PAR' + character text*(*) + integer obj, status, next, end, ch, result, ll, overlap + external mysource, mysink + character buf*190000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + +* Create a Channel which reads and writes to an internal string buffer. + ch = ast_channel( mysource, mysink, ' ', status ) + +* Write the supplied Region out to this Channel. + ll = 160 + next = 1 + if( ast_write( ch, obj, status ) .ne.1 ) then + write(*,*) text + call stopit( status, 'Cannot write supplied object to '// + : 'channel' ) + end if + +* Read an Object back from this Channel. + next = 1 + result = ast_read( ch, status ) + if( result .eq. ast__null ) then + write(*,*) text + call stopit( status, 'Cannot read object from channel' ) + end if + +* Check that it is a Region and its boundary is identical to the supplied +* Region. + overlap = ast_overlap( obj, result, status ) + if( overlap .ne. 5 ) then + write(*,*) 'obj result Overlap: ', overlap + write(*,*) 'obj self-Overlap: ', ast_overlap( obj, obj, + : status ) + write(*,*) 'result self-Overlap: ', ast_overlap( result, + : result, status ) + call ast_Show( obj, status ) + call ast_Show( result, status ) + write(*,*) text + call stopit( status, 'Object has changed' ) + end if + +* Return the new Region pointer in place of the old. + obj = result + + end + + subroutine mysource( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, ll + character buf*190000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + if( next .ge. end ) then + call ast_putline( buf, -1, status ) + else + call ast_putline( buf( next : ), ll, status ) + endif + + next = next + ll + + end + + subroutine mysink( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, f, l, ll + character buf*190000 + character line*1000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + line = ' ' + call ast_getline( line, l, status ) + call chr_fandl( line( : l ), f, l ) + buf( next : ) = line( f : l ) + l = l - f + 1 + + if( next + ll - 1 .ge. 190000 ) then + write(*,*) buf + call stopit( status, 'Buffer overflow in mysink!!' ) + else if( l .gt. ll ) then + write(*,*) + write(*,*) buf( next : next + l) + write(*,*) 'Line length ',l,' greater than ',ll + call stopit( status, 'Line overflow in mysink!!' ) + else + end = next + l + buf( end : next + ll - 1 ) = ' ' + endif + + next = next + ll + + end + + diff --git a/ast/ast_tester/teststc_com b/ast/ast_tester/teststc_com new file mode 100644 index 0000000..f9a7fb1 --- /dev/null +++ b/ast/ast_tester/teststc_com @@ -0,0 +1,13 @@ +* +* Common block declaration used by teststc.f for storing internal +* files and associated info. +* + integer mxline + parameter ( mxline = 500 ) + + integer linelen + parameter ( linelen = 3000 ) + + character files( 3, mxline )*(linelen) + integer ifile,iline,filelen( 3 ),warns + common /files/ files, ifile, iline, filelen, warns diff --git a/ast/ast_tester/teststc_eg1 b/ast/ast_tester/teststc_eg1 new file mode 100644 index 0000000..b1044c6 --- /dev/null +++ b/ast/ast_tester/teststc_eg1 @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2005 sp2 U (http://www.altova.com) by Arnold Rots (Smithsonian Observatory) --> +<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by Arnold Rots (Smithsonian Observatory) --> +<!--Sample XML file generated by XMLSPY v2004 rel. 3 U (http://www.xmlspy.com)--> +<STCResourceProfile xmlns="http://www.ivoa.net/xml/STC/stc-v1.20.xsd" xmlns:crd="http://www.ivoa.net/xml/STC/STCcoords/v1.20" xmlns:reg="http://www.ivoa.net/xml/STC/STCregion/v1.20" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ivoa.net/xml/STC/stc-v1.20.xsd stc-v1.20.xsd"> + <AstroCoordSystem ID="ICRS-TT-CXO"> + <TimeFrame> + <Name>Time</Name> + <TimeScale>TT</TimeScale> + <TOPOCENTER/> + </TimeFrame> + <SpaceFrame> + <Name>Space</Name> + <ICRS/> + <TOPOCENTER/> + <SPHERICAL coord_naxes="2"/> + </SpaceFrame> + <SpectralFrame> + <Name>Energy</Name> + <TOPOCENTER/> + </SpectralFrame> + </AstroCoordSystem> + <crd:AstroCoords coord_system_id="ICRS-TT-CXO"> + <crd:Time unit="s"> + <crd:Name>Time</crd:Name> + <crd:Error>0.0001</crd:Error> + <crd:Resolution>0.000016</crd:Resolution> + <crd:Resolution>3.0</crd:Resolution> + <crd:Size>1000</crd:Size> + <crd:Size>170000</crd:Size> + </crd:Time> + <crd:Position2D unit="arcsec"> + <crd:Name>Position</crd:Name> + <crd:Error2> + 1.0 1.0 + </crd:Error2> + <crd:Resolution2> + 0.5 0.5 + </crd:Resolution2> + <crd:Size2> + 1000 1000 + </crd:Size2> + <crd:Size2> + 4000 4000 + </crd:Size2> + </crd:Position2D> + <crd:Spectral unit="keV"> + <crd:Name>Energy</crd:Name> + <crd:Error>0.1</crd:Error> + <crd:Resolution>0.02</crd:Resolution> + <crd:Resolution>2.0</crd:Resolution> + <crd:Size>2</crd:Size> + <crd:Size>10</crd:Size> + </crd:Spectral> + </crd:AstroCoords> + <AstroCoordArea ID="AllSky-CXO" coord_system_id="ICRS-TT-CXO"> + <TimeInterval> + <StartTime> + <crd:TimeScale>TT</crd:TimeScale> + <crd:ISOTime>1999-07-23T16:00:00</crd:ISOTime> + </StartTime> + </TimeInterval> + <Region> + <reg:AllSky fill_factor="0.02"/> + </Region> + <SpectralInterval unit="keV"> + <LoLimit>0.12</LoLimit> + <HiLimit>10.0</HiLimit> + </SpectralInterval> + </AstroCoordArea> +</STCResourceProfile> diff --git a/ast/ast_tester/teststc_eg10 b/ast/ast_tester/teststc_eg10 new file mode 100644 index 0000000..977fa57 --- /dev/null +++ b/ast/ast_tester/teststc_eg10 @@ -0,0 +1,18 @@ +<STCResourceProfile xmlns="http://www.ivoa.net/xml/STC/stc-v1.20.xsd"> + <AstroCoordSystem ID="ICRS-TT-CXO"> + <SpaceFrame> + <Name>Space</Name> + <GALACTIC_II/> + <TOPOCENTER/> + <SPHERICAL coord_naxes="2"/> + </SpaceFrame> + </AstroCoordSystem> + <AstroCoordArea ID="AllSky-CXO" coord_system_id="ICRS-TT-CXO"> + <Region> + <reg:Box unit="deg"> + <reg:Center>143.0 42.0</reg:Center> + <reg:Size>1.0 1.0</reg:Size> + </reg:Box> + </Region> + </AstroCoordArea> +</STCResourceProfile> diff --git a/ast/ast_tester/teststc_eg2 b/ast/ast_tester/teststc_eg2 new file mode 100644 index 0000000..6665676 --- /dev/null +++ b/ast/ast_tester/teststc_eg2 @@ -0,0 +1,114 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2005 sp1 U (http://www.xmlspy.com) by Arnold Rots (Smithsonian Observatory) --> +<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by Arnold Rots (Smithsonian Observatory) --> +<!--Sample XML file generated by XMLSPY v2004 rel. 3 U (http://www.xmlspy.com)--> +<CatalogEntryLocation xmlns="http://www.ivoa.net/xml/STC/stc-v1.20.xsd" xmlns:crd="http://www.ivoa.net/xml/STC/STCcoords/v1.20" xmlns:reg="http://www.ivoa.net/xml/STC/STCregion/v1.20" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ivoa.net/xml/STC/stc-v1.20.xsd stc-v1.20.xsd"> + <AstroCoordSystem ID="B1950-OPTICAL-ET"> + <TimeFrame> + <TimeScale>ET</TimeScale> + <TOPOCENTER/> + </TimeFrame> + <SpaceFrame> + <Name>PosEq</Name> + <FK4> + <Equinox>B1950.0</Equinox> + </FK4> + <TOPOCENTER/> + <SPHERICAL coord_naxes="2"/> + </SpaceFrame> + <SpectralFrame> + <TOPOCENTER/> + </SpectralFrame> + <RedshiftFrame> + <Name>DopplerVelocity</Name> + <DopplerDefinition>OPTICAL</DopplerDefinition> + <BARYCENTER/> + </RedshiftFrame> + + </AstroCoordSystem> + <AstroCoordSystem ID="SGC-OPTICAL-ET"> + <TimeFrame> + <Name>Time</Name> + <TimeScale>ET</TimeScale> + <TOPOCENTER/> + </TimeFrame> + <SpaceFrame> + <Name>SGC</Name> + <SUPER_GALACTIC/> + <BARYCENTER/> + <SPHERICAL coord_naxes="2" /> + </SpaceFrame> + <SpectralFrame> + <Name>Optical</Name> + <TOPOCENTER/> + </SpectralFrame> + <RedshiftFrame> + <Name>DopplerVelocity</Name> + <DopplerDefinition>OPTICAL</DopplerDefinition> + <GALACTIC_CENTER/> + </RedshiftFrame> + </AstroCoordSystem> + <crd:AstroCoords coord_system_id="B1950-OPTICAL-ET"> + <crd:Position2D unit="deg"> + <crd:Name>RA,Dec</crd:Name> + <crd:Value2Ref>Column3</crd:Value2Ref> + <crd:Error2Ref>Column4</crd:Error2Ref> + <crd:Size2Ref>Column5</crd:Size2Ref> + </crd:Position2D> + <crd:Redshift unit="km" vel_time_unit="s"> + <crd:Name>Vrad(barycenter)</crd:Name> + <crd:ValueRef>Column6</crd:ValueRef> + <crd:ErrorRef>Column7</crd:ErrorRef> + </crd:Redshift> + </crd:AstroCoords> + <crd:AstroCoords coord_system_id="SGC-OPTICAL-ET"> + <crd:Position2D unit="deg"> + <crd:Name>SGLong,SGLat</crd:Name> + <crd:Value2Ref>Column8</crd:Value2Ref> + <crd:Error2Ref>Column9</crd:Error2Ref> + <crd:Size2Ref>Column10</crd:Size2Ref> + </crd:Position2D> + <crd:Redshift unit="km" vel_time_unit="s"> + <crd:Name>Vrad(Galcenter)</crd:Name> + <crd:ValueRef>Column11</crd:ValueRef> + <crd:ErrorRef>Column12</crd:ErrorRef> + </crd:Redshift> + </crd:AstroCoords> + <AstroCoordArea coord_system_id="B1950-OPTICAL-ET" ID="RA6-18hDec20-70deg"> + <TimeInterval> + <StartTime> + <crd:TimeScale>ET</crd:TimeScale> + <crd:JDTime>2440000</crd:JDTime> + </StartTime> + <StopTime> + <crd:TimeScale>ET</crd:TimeScale> + <crd:JDTime>2441000</crd:JDTime> + </StopTime> + </TimeInterval> + <Region> + <reg:Polygon unit="deg"> + <reg:Vertex> + <reg:Position>270 20</reg:Position> + </reg:Vertex> + <reg:Vertex> + <reg:Position>90 20</reg:Position> + <reg:SmallCircle/> + </reg:Vertex> + <reg:Vertex> + <reg:Position>90 70</reg:Position> + </reg:Vertex> + <reg:Vertex> + <reg:Position>270 70</reg:Position> + <reg:SmallCircle/> + </reg:Vertex> + </reg:Polygon> + </Region> + <SpectralInterval unit="Angstrom"> + <LoLimit>5000</LoLimit> + <HiLimit>6500</HiLimit> + </SpectralInterval> + <RedshiftInterval unit="km" vel_time_unit="s"> + <HiLimit>10000</HiLimit> + </RedshiftInterval> + </AstroCoordArea> +</CatalogEntryLocation> diff --git a/ast/ast_tester/teststc_eg3 b/ast/ast_tester/teststc_eg3 new file mode 100644 index 0000000..028d484 --- /dev/null +++ b/ast/ast_tester/teststc_eg3 @@ -0,0 +1,113 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2005 sp1 U (http://www.xmlspy.com) by Arnold Rots (Smithsonian Observatory) --> +<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by Arnold Rots (Smithsonian Observatory) --> +<!--Sample XML file generated by XMLSPY v2004 rel. 3 U (http://www.xmlspy.com)--> +<CatalogEntryLocation xmlns="http://www.ivoa.net/xml/STC/stc-v1.20.xsd" xmlns:crd="http://www.ivoa.net/xml/STC/STCcoords/v1.20" xmlns:reg="http://www.ivoa.net/xml/STC/STCregion/v1.20" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ivoa.net/xml/STC/stc-v1.20.xsd stc-v1.20.xsd"> + <AstroCoordSystem ID="B1950-OPTICAL-ET"> + <TimeFrame> + <TimeScale>ET</TimeScale> + <TOPOCENTER/> + </TimeFrame> + <SpaceFrame> + <Name>PosEq</Name> + <FK4> + <Equinox>B1950.0</Equinox> + </FK4> + <TOPOCENTER/> + <SPHERICAL coord_naxes="2"/> + </SpaceFrame> + <SpectralFrame> + <TOPOCENTER/> + </SpectralFrame> + <RedshiftFrame> + <Name>DopplerVelocity</Name> + <DopplerDefinition>OPTICAL</DopplerDefinition> + <BARYCENTER/> + </RedshiftFrame> + </AstroCoordSystem> + <AstroCoordSystem ID="SGC-OPTICAL-ET"> + <TimeFrame> + <Name>Time</Name> + <TimeScale>ET</TimeScale> + <TOPOCENTER/> + </TimeFrame> + <SpaceFrame> + <Name>SGC</Name> + <SUPER_GALACTIC/> + <BARYCENTER/> + <SPHERICAL coord_naxes="2" /> + </SpaceFrame> + <SpectralFrame> + <Name>Optical</Name> + <TOPOCENTER/> + </SpectralFrame> + <RedshiftFrame> + <Name>DopplerVelocity</Name> + <DopplerDefinition>OPTICAL</DopplerDefinition> + <GALACTIC_CENTER/> + </RedshiftFrame> + </AstroCoordSystem> + <crd:AstroCoords coord_system_id="B1950-OPTICAL-ET"> + <crd:Position2D unit="deg"> + <crd:Name>RA,Dec</crd:Name> + <crd:Value2Ref>Column3</crd:Value2Ref> + <crd:Error2Ref>Column4</crd:Error2Ref> + <crd:Size2Ref>Column5</crd:Size2Ref> + </crd:Position2D> + <crd:Redshift unit="km" vel_time_unit="s"> + <crd:Name>Vrad(barycenter)</crd:Name> + <crd:ValueRef>Column6</crd:ValueRef> + <crd:ErrorRef>Column7</crd:ErrorRef> + </crd:Redshift> + </crd:AstroCoords> + <crd:AstroCoords coord_system_id="SGC-OPTICAL-ET"> + <crd:Position2D unit="deg"> + <crd:Name>SGLong,SGLat</crd:Name> + <crd:Value2Ref>Column8</crd:Value2Ref> + <crd:Error2Ref>Column9</crd:Error2Ref> + <crd:Size2Ref>Column10</crd:Size2Ref> + </crd:Position2D> + <crd:Redshift unit="km" vel_time_unit="s"> + <crd:Name>Vrad(Galcenter)</crd:Name> + <crd:ValueRef>Column11</crd:ValueRef> + <crd:ErrorRef>Column12</crd:ErrorRef> + </crd:Redshift> + </crd:AstroCoords> + <AstroCoordArea coord_system_id="B1950-OPTICAL-ET" ID="RA6-18hDec20-70deg"> + <TimeInterval> + <StartTime> + <crd:TimeScale>ET</crd:TimeScale> + <crd:JDTime>2440000</crd:JDTime> + </StartTime> + <StopTime> + <crd:TimeScale>ET</crd:TimeScale> + <crd:JDTime>2440000</crd:JDTime> + </StopTime> + </TimeInterval> + <Region> + <reg:Polygon unit="deg"> + <reg:Vertex> + <reg:Position>270 20</reg:Position> + </reg:Vertex> + <reg:Vertex> + <reg:Position>90 20</reg:Position> + <reg:SmallCircle/> + </reg:Vertex> + <reg:Vertex> + <reg:Position>90 70</reg:Position> + </reg:Vertex> + <reg:Vertex> + <reg:Position>270 70</reg:Position> + <reg:SmallCircle/> + </reg:Vertex> + </reg:Polygon> + </Region> + <SpectralInterval unit="Angstrom"> + <LoLimit>5000</LoLimit> + <HiLimit>5000</HiLimit> + </SpectralInterval> + <RedshiftInterval unit="km" vel_time_unit="s"> + <HiLimit>10000</HiLimit> + </RedshiftInterval> + </AstroCoordArea> +</CatalogEntryLocation> diff --git a/ast/ast_tester/teststc_eg4 b/ast/ast_tester/teststc_eg4 new file mode 100644 index 0000000..5b9d8ab --- /dev/null +++ b/ast/ast_tester/teststc_eg4 @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<SearchLocation xmlns="http://www.ivoa.net/xml/STC/stc-v1.20.xsd" xmlns:crd="http://www.ivoa.net/xml/STC/STCcoords/v1.20" xmlns:reg="http://www.ivoa.net/xml/STC/STCregion/v1.20" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ivoa.net/xml/STC/stc-v1.20.xsd stc-v1.20.xsd"> + <AstroCoordSystem ID="ICRS-TT-BARY"> + <TimeFrame> + <Name>Time</Name> + <TimeScale>TT</TimeScale> + <BARYCENTER/> + </TimeFrame> + <SpaceFrame> + <Name>Equatorial</Name> + <ICRS/> + <TOPOCENTER/> + <SPHERICAL coord_naxes="2"/> + </SpaceFrame> + <SpectralFrame> + <Name>Wavelength</Name> + <BARYCENTER/> + </SpectralFrame> + </AstroCoordSystem> + <crd:AstroCoords coord_system_id="ICRS-TT-BARY"> + <crd:Position2D unit="deg"> + <crd:Name>RA,Dec</crd:Name> + <crd:Resolution2>0.0001 0.0001</crd:Resolution2> + <crd:Resolution2>0.0003 0.0003</crd:Resolution2> + <crd:Size2>0.5 0.5</crd:Size2> + <crd:Size2>0.67 0.67</crd:Size2> + <crd:PixSize2>0.00005 0.00005</crd:PixSize2> + <crd:PixSize2>0.00015 0.00015</crd:PixSize2> + </crd:Position2D> + <crd:Spectral unit="Angstrom"> + <crd:Name>Lambda</crd:Name> + <crd:Resolution>300</crd:Resolution> + <crd:Resolution>600</crd:Resolution> + </crd:Spectral> + </crd:AstroCoords> + <AstroCoordArea ID="M81" coord_system_id="ICRS-TT-BARY"> + <TimeInterval> + <StartTime> + <crd:TimeScale>TT</crd:TimeScale> + <crd:ISOTime>1900-01-01T00:00:00</crd:ISOTime> + </StartTime> + </TimeInterval> + <Region> + <reg:Circle unit="deg"> + <reg:Center>148.9 69.1</reg:Center> + <reg:Radius>2</reg:Radius> + </reg:Circle> + </Region> + <SpectralInterval unit="Angstrom"> + <LoLimit>4000</LoLimit> + <HiLimit>7000</HiLimit> + </SpectralInterval> + </AstroCoordArea> +</SearchLocation> + diff --git a/ast/ast_tester/teststc_eg5 b/ast/ast_tester/teststc_eg5 new file mode 100644 index 0000000..97aad97 --- /dev/null +++ b/ast/ast_tester/teststc_eg5 @@ -0,0 +1,109 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ObsDataLocation xmlns="http://www.ivoa.net/xml/STC/stc-v1.20.xsd" xmlns:crd="http://www.ivoa.net/xml/STC/STCcoords/v1.20" xmlns:reg="http://www.ivoa.net/xml/STC/STCregion/v1.20" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ivoa.net/xml/STC/stc-v1.20.xsd stc-v1.20.xsd"> + <ObservatoryLocation ID="KPNO"> + <AstroCoordSystem ID="ICRS-TT-TOPO"> + <TimeFrame> + <Name>Time</Name> + <TimeScale>TT</TimeScale> + <TOPOCENTER/> + </TimeFrame> + <SpaceFrame> + <Name>GeoLongLatElev</Name> + <GEO_D/> + <TOPOCENTER/> + <SPHERICAL coord_naxes="3"/> + </SpaceFrame> + </AstroCoordSystem> + <crd:AstroCoords coord_system_id="ICRS-TT-TOPO"> + <crd:Position3D unit="deg deg m"> + <crd:Name>LongLatElev</crd:Name> + <crd:Value3>248.4056 31.9586 2158</crd:Value3> + </crd:Position3D> + </crd:AstroCoords> + </ObservatoryLocation> + <ObservationLocation ID="M81"> + <AstroCoordSystem ID="ICRS-TT-WAVELENGTH-TOPO"> + <TimeFrame> + <Name>Time</Name> + <TimeScale>TT</TimeScale> + <TOPOCENTER/> + </TimeFrame> + <SpaceFrame> + <Name>Equatorial</Name> + <ICRS/> + <TOPOCENTER/> + <SPHERICAL coord_naxes="2"/> + </SpaceFrame> + <SpectralFrame> + <Name>Wavelength</Name> + <TOPOCENTER/> + </SpectralFrame> + </AstroCoordSystem> + <crd:AstroCoords coord_system_id="ICRS-TT-WAVELENGTH-TOPO"> + <crd:Time unit="s"> + <crd:Name>Time</crd:Name> + <crd:TimeInstant> + <crd:TimeScale>TT</crd:TimeScale> + <crd:ISOTime>2004-07-15T08:23:56 </crd:ISOTime> + </crd:TimeInstant> + <crd:PixSize>1000</crd:PixSize> + </crd:Time> + <crd:Position2D unit="deg"> + <crd:Name>RA,Dec</crd:Name> + <crd:Value2>148.88821 69.06529</crd:Value2> + <crd:Error2>0.0003 0.0003</crd:Error2> + <crd:Resolution2>0.00025 0.00025 </crd:Resolution2> + <crd:PixSize2>0.0001 0.0001</crd:PixSize2> + </crd:Position2D> + <crd:Spectral unit="Angstrom"> + <crd:Name>Lambda</crd:Name> + <crd:Value>4600</crd:Value> + <crd:Resolution>400</crd:Resolution> + <crd:PixSize>400</crd:PixSize> + </crd:Spectral> + </crd:AstroCoords> + <AstroCoordArea ID="M81Image" coord_system_id="ICRS-TT-WAVELENGTH-TOPO"> + <TimeInterval> + <StartTime> + <crd:TimeScale>TT</crd:TimeScale> + <crd:ISOTime>2004-07-15T08:17:36 </crd:ISOTime> + </StartTime> + <StopTime> + <crd:TimeScale>TT</crd:TimeScale> + <crd:ISOTime>2004-07-15T08:30:16 </crd:ISOTime> + </StopTime> + </TimeInterval> + <PositionInterval unit="deg"> + <Coord2VecInterval> + <LoLimit2Vec>148.18821 68.81529 </LoLimit2Vec> + <HiLimit2Vec>149.58821 69.31529 </HiLimit2Vec> + </Coord2VecInterval> + </PositionInterval> + <SpectralInterval unit="Angstrom"> + <LoLimit>4400</LoLimit> + <HiLimit>4800</HiLimit> + </SpectralInterval> + </AstroCoordArea> + </ObservationLocation> + <PixelSpace> + <PixelCoordSystem ID="M81Pix"> + <PixelCoordFrame> + <Name>X</Name> + </PixelCoordFrame> + <PixelCoordFrame> + <Name>Y</Name> + </PixelCoordFrame> + </PixelCoordSystem> + <PixelCoordArea coord_system_id="M81Pix" ID="M81PixImage"> + <CoordScalarInterval> + <LoLimit>1</LoLimit> + <HiLimit>1024</HiLimit> + </CoordScalarInterval> + <CoordScalarInterval> + <LoLimit>1</LoLimit> + <HiLimit>1024</HiLimit> + </CoordScalarInterval> + </PixelCoordArea> + </PixelSpace> +</ObsDataLocation> + diff --git a/ast/ast_tester/teststc_eg6 b/ast/ast_tester/teststc_eg6 new file mode 100644 index 0000000..7a291f6 --- /dev/null +++ b/ast/ast_tester/teststc_eg6 @@ -0,0 +1,49 @@ +<STCResourceProfile xmlns="http://www.ivoa.net/xml/STC/stc-v1.20.xsd"> + <AstroCoordSystem ID="ICRS-TT-CXO"> + <TimeFrame> + <Name>Time</Name> + <TimeScale>TAI</TimeScale> + <TOPOCENTER/> + </TimeFrame> + <SpaceFrame> + <Name>Space</Name> + <ICRS/> + <TOPOCENTER/> + <SPHERICAL coord_naxes="2"/> + </SpaceFrame> + <SpectralFrame> + <Name>Energy</Name> + <TOPOCENTER/> + </SpectralFrame> + </AstroCoordSystem> + <AstroCoords coord_system_id="ICRS-TT-CXO"> + <Time unit="s"> + <Name>Time</Name> + <Error>0.0001</Error> + </Time> + <Position2D unit="arcsec"> + <Name>Position</Name> + <Error2> + 1.0 1.0 + </Error2> + </Position2D> + <Spectral unit="keV"> + <Name>Energy</Name> + <Error>0.1</Error> + </Spectral> + </AstroCoords> + <AstroCoordArea ID="AllSky-CXO" coord_system_id="ICRS-TT-CXO"> + <TimeInterval> + <StartTime> + <ISOTime>1999-07-23T16:00:00</ISOTime> + </StartTime> + </TimeInterval> + <Region> + <reg:AllSky fill_factor="0.02"/> + </Region> + <SpectralInterval unit="keV"> + <LoLimit>0.12</LoLimit> + <HiLimit>10.0</HiLimit> + </SpectralInterval> + </AstroCoordArea> +</STCResourceProfile> diff --git a/ast/ast_tester/teststc_eg7 b/ast/ast_tester/teststc_eg7 new file mode 100644 index 0000000..0106c85 --- /dev/null +++ b/ast/ast_tester/teststc_eg7 @@ -0,0 +1,52 @@ +<STCResourceProfile xmlns="http://www.ivoa.net/xml/STC/stc-v1.20.xsd"> + <AstroCoordSystem ID="ICRS-TT-CXO"> + <TimeFrame> + <Name>Time</Name> + <TOPOCENTER/> + <TimeScale>TAI</TimeScale> + </TimeFrame> + <SpaceFrame> + <Name>Space</Name> + <ICRS/> + <TOPOCENTER/> + <SPHERICAL coord_naxes="2"/> + </SpaceFrame> + <SpectralFrame> + <Name>Energy</Name> + <TOPOCENTER/> + </SpectralFrame> + </AstroCoordSystem> + <AstroCoords coord_system_id="ICRS-TT-CXO"> + <Time unit="s"> + <Name>Time</Name> + <Error>0.0001</Error> + </Time> + <Position2D unit="arcsec"> + <Name>Position</Name> + <Error2> + 1.0 1.0 + </Error2> + </Position2D> + <Spectral unit="keV"> + <Name>Energy</Name> + <Error>0.1</Error> + </Spectral> + </AstroCoords> + <AstroCoordArea ID="AllSky-CXO" coord_system_id="ICRS-TT-CXO"> + <TimeInterval> + <StartTime> + <ISOTime>1998-07-23T16:00:00</ISOTime> + </StartTime> + </TimeInterval> + <Region> + <reg:Circle unit="deg deg"> + <Center>0.0 90.0</Center> + <Radius>2.0</Radius> + </reg:Circle> + </Region> + <SpectralInterval unit="keV"> + <LoLimit>8.0</LoLimit> + <HiLimit>11.0</HiLimit> + </SpectralInterval> + </AstroCoordArea> +</STCResourceProfile> diff --git a/ast/ast_tester/teststc_eg8 b/ast/ast_tester/teststc_eg8 new file mode 100644 index 0000000..17c6574 --- /dev/null +++ b/ast/ast_tester/teststc_eg8 @@ -0,0 +1,52 @@ +<STCResourceProfile xmlns="http://www.ivoa.net/xml/STC/stc-v1.20.xsd"> + <AstroCoordSystem ID="ICRS-TT-CXO"> + <TimeFrame> + <Name>Time</Name> + <TimeScale>UTC</TimeScale> + <TOPOCENTER/> + </TimeFrame> + <SpaceFrame> + <Name>Space</Name> + <ICRS/> + <TOPOCENTER/> + <SPHERICAL coord_naxes="2"/> + </SpaceFrame> + <SpectralFrame> + <Name>Energy</Name> + <TOPOCENTER/> + </SpectralFrame> + </AstroCoordSystem> + <AstroCoords coord_system_id="ICRS-TT-CXO"> + <Time unit="s"> + <Name>Time</Name> + <Error>0.0001</Error> + </Time> + <Position2D unit="arcsec"> + <Name>Position</Name> + <Error2> + 1.0 1.0 + </Error2> + </Position2D> + <Spectral unit="keV"> + <Name>Energy</Name> + <Error>0.1</Error> + </Spectral> + </AstroCoords> + <AstroCoordArea ID="AllSky-CXO" coord_system_id="ICRS-TT-CXO"> + <TimeInterval> + <StartTime> + <ISOTime>1999-09-23T16:00:00</ISOTime> + </StartTime> + </TimeInterval> + <Region> + <reg:Circle unit="deg deg"> + <Center>0.0 90.0</Center> + <Radius>2.0</Radius> + </reg:Circle> + </Region> + <SpectralInterval unit="keV"> + <LoLimit>8.0</LoLimit> + <HiLimit>9.0</HiLimit> + </SpectralInterval> + </AstroCoordArea> +</STCResourceProfile> diff --git a/ast/ast_tester/teststc_eg9 b/ast/ast_tester/teststc_eg9 new file mode 100644 index 0000000..195adb7 --- /dev/null +++ b/ast/ast_tester/teststc_eg9 @@ -0,0 +1,49 @@ +<STCResourceProfile xmlns="http://www.ivoa.net/xml/STC/stc-v1.20.xsd"> + <AstroCoordSystem ID="ICRS-TT-CXO"> + <TimeFrame> + <Name>Time</Name> + <TimeScale>TCB</TimeScale> + <TOPOCENTER/> + </TimeFrame> + <SpaceFrame> + <Name>Space</Name> + <ICRS/> + <TOPOCENTER/> + <SPHERICAL coord_naxes="2"/> + </SpaceFrame> + <SpectralFrame> + <Name>Energy</Name> + <TOPOCENTER/> + </SpectralFrame> + </AstroCoordSystem> + <AstroCoords coord_system_id="ICRS-TT-CXO"> + <Time unit="s"> + <Name>Time</Name> + <Error>0.0001</Error> + </Time> + <Position2D unit="arcsec"> + <Name>Position</Name> + <Error2> + 1.0 1.0 + </Error2> + </Position2D> + <Spectral unit="keV"> + <Name>Energy</Name> + <Error>0.1</Error> + </Spectral> + </AstroCoords> + <AstroCoordArea ID="AllSky-CXO" coord_system_id="ICRS-TT-CXO"> + <TimeInterval> + <StopTime> + <ISOTime>1999-06-23T16:00:00</ISOTime> + </StopTime> + </TimeInterval> + <Region> + <reg:AllSky fill_factor="0.02"/> + </Region> + <SpectralInterval unit="keV"> + <LoLimit>0.12</LoLimit> + <HiLimit>10.0</HiLimit> + </SpectralInterval> + </AstroCoordArea> +</STCResourceProfile> diff --git a/ast/ast_tester/teststcschan.f b/ast/ast_tester/teststcschan.f new file mode 100755 index 0000000..928b301 --- /dev/null +++ b/ast/ast_tester/teststcschan.f @@ -0,0 +1,654 @@ + program teststcschan + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + integer status + + status = sai__ok + + call ast_begin( status ) + +c call ast_watchmemory( 209814 ); + + call test2( status ) + call test1( status ) + + + + + call ast_end( status ) +c call ast_activememory( ' ' ) +c call ast_flushmemory( 1 ) + + if( status .eq. sai__ok ) then + call msg_out( ' ', ' All StcsChan tests passed', status ) + else + call err_rep( ' ', 'StcsChan tests failed', status ) + end if + + end + + + + + + subroutine test1( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'AST_ERR' + include 'PRM_PAR' + + integer iwrite + character buff(30)*300 + common /bbb/ iwrite, buff + + integer iread, idoc + common /aaa/ iread, idoc + + integer status, ch, obj, km, i, sb, iobj, nobj + external source, sink + + double precision lbnd(4), ubnd(4) + if( status .ne. sai__ok ) return + + call ast_begin( status ) + + ch = ast_stcschan( source, sink, 'ReportLevel=3', status ) + + + idoc = 4 + iread = 0 + obj = ast_read( ch, status ) + + idoc = 1 + iread = 0 + + call err_mark + obj = ast_read( ch, status ) + if( status .eq. AST__BADIN ) then + call err_annul( status ) + call err_rlse + else + call err_rlse + call error( 'Failed to report error about "fred"', status ) + end if + + + idoc = 2 + iread = 0 + obj = ast_read( ch, status ) + + km = ast_warnings( ch, status ) + if( km .eq. AST__NULL ) call error( 'No Warnings keymap', status ) + call asserti( 'Warnings mapsize', ast_mapsize( km, status ), 4, + : status ) + + call asserta( obj, 'Class', 'Prism', status ) + call asserta( obj, 'Naxes', '4', status ) + call asserta( obj, 'Label(1)', 'Modified Julian Date offset '// + : 'from 1900-01-01', status ) + call asserta( obj, 'Label(2)', 'Right ascension', status ) + call asserta( obj, 'Label(3)', 'Declination', status ) + call asserta( obj, 'Label(4)', 'Wavelength', status ) + call asserta( obj, 'Unit(1)', 'd', status ) + call asserta( obj, 'Unit(4)', 'Angstrom', status ) + + call ast_GetRegionBounds( obj, lbnd, ubnd, status ) + call ast_setc( obj, 'Format(1)', 'iso.2', status ) + call assertd( 'Time upper bounds', ubnd(1), VAL__MAXD, status ) + call assertc( 'Time lower bound', + : ast_format( obj, 1, lbnd(1), status ), + : '1900-01-01 00:00:00.00', status ) + call assertd( 'RA lower bound', lbnd(2), 2.50080939227851D0, + : status ) + call assertd( 'RA upper bound', ubnd(2), 2.6967811201606D0, + : status ) + call assertd( 'Dec lower bound', lbnd(3), 1.171115928088195D0, + : status ) + call assertd( 'Dec upper bound', ubnd(3), 1.24091013301998D0, + : status ) + call assertd( 'Wavelength lower bound', lbnd(4), 4000.0D0, + : status ) + call assertd( 'Wavelength upper bound', ubnd(4), 7000.0D0, + : status ) + + + + idoc = 3 + iread = 0 + obj = ast_read( ch, status ) + + call readast( 'stcschan-test1-doc3.ast', sb, status ) + if( .not. ast_equal( obj, sb, status ) ) then + call error( 'Object read from doc3 is not equal to the '// + : 'object read from file stcschan-test1-doc3.ast.', + : status ) + end if + + + call ast_setl( ch, 'StcsCoords', .true., status ) + call ast_setl( ch, 'StcsProps', .true., status ) + + idoc = 3 + iread = 0 + obj = ast_read( ch, status ) + + call asserta( obj, 'Class', 'KeyMap', status ) + call assert( 'Has PROPS entry', AST_MAPHASKEY( obj, 'PROPS', + : status ), status ) + call assert( 'Has COORDS entry', AST_MAPHASKEY( obj, 'COORDS', + : status ), status ) + + if( ast_mapget0a( obj, 'AREA', iobj, status ) ) then + call readast( 'stcschan-test1-doc3.ast', sb, status ) + if( .not. ast_equal( iobj, sb, status ) ) then + call error( 'AREA read from doc3 is not equal to the '// + : 'object read from file stcschan-test1-doc3.ast', + : status ) + end if + else + call error( 'No AREA entry found', status ) + end if + + if( ast_mapget0a( obj, 'PROPS', iobj, status ) ) then + call readast( 'stcschan-test1-doc3-props.ast', sb, status ) + if( .not. ast_equal( iobj, sb, status ) ) then + call error( 'PROPS read from doc3 is not equal to the '// + : 'object read from file stcschan-test1-doc3-props.ast', + : status ) + end if + else + call error( 'No PROPS entry found', status ) + end if + + + + idoc = 5 + iread = 0 + + call ast_setl( ch, 'Indent', .true., status ) + + obj = ast_read( ch, status ) + + iwrite = 0 + nobj = ast_write( ch, obj, status ) + call asserti( 'N obj', nobj, 1, status ) + + call assertc( 'line 1 3', buff(1), + : 'TimeInterval TT geocenter 1996-01-01T00:00:00 '// + : '1996-01-01T00:30:00', status ) + call assertc( 'line 2 3', buff(2), + : ' Time MJD 50814.0 Error 1.2 Resolution 0.8 '// + : 'PixSize 1024.0', status ) + call assertc( 'line 3 3', buff(3), + : 'Union ICRS GEOCENTER ( ', status ) + call assertc( 'line 4 3', buff(4), + : ' Circle 180 10 20 ', status ) + call assertc( 'line 5 3', buff(5), + : ' Circle 190 10 20 ', status ) + call assertc( 'line 6 3', buff(6), + : ' Intersection ( ', status ) + call assertc( 'line 7 3', buff(7), + : ' Circle 120 -10 20 ', status ) + call assertc( 'line 8 3', buff(8), + : ' Difference ( ', status ) + call assertc( 'line 9 3', buff(9), + : ' Circle 130 -10 20 ', status ) + call assertc( 'line 10 3', buff(10), + : ' Circle 115 -10 10 ', status ) + call assertc( 'line 11 3', buff(11), + : ' ) ', status ) + call assertc( 'line 12 3', buff(12), + : ' ) ', status ) + call assertc( 'line 13 3', buff(13), + : ' ) ', status ) + call assertc( 'line 14 3', buff(14), + : ' Position 179.0 -11.5 Error 0.000889 0.000889 '// + : 'Resolution 0.001778', status ) + call assertc( 'line 15 3', buff(15), + : ' Size 0.000333 0.000278 PixSize 0.000083 '// + : '0.000083', status ) + call assertc( 'line 16 3', buff(16), + : 'Spectral BARYCENTER 1420.4 unit MHz Resolution '// + : '10.0 ', status ) + call assertc( 'line 17 3', buff(17), + : 'RedshiftInterval BARYCENTER VELOCITY OPTICAL '// + : '200 2300 Redshift 300', status ) + + call ast_end( status ) + + if( status .ne. sai__ok ) call err_rep( ' ', 'test1 failed.', + : status ) + + end + + + subroutine test2( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'AST_ERR' + include 'PRM_PAR' + + integer iwrite + character buff(30)*300 + common /bbb/ iwrite, buff + + integer iread, idoc + common /aaa/ iread, idoc + + + + external source, sink + + integer status, ch, sf, unc, reg, nobj, obj, chr_len + double precision p1(2), p2(2), p3(3), lbnd(2), ubnd(2) + + if( status .ne. sai__ok ) return + + + call ast_begin( status ) + ch = ast_stcschan( source, sink, 'ReportLevel=3',status ) + call ast_setl( ch, 'Indent', .true., status ) + call ast_seti( ch, 'StcsLength', 60, status ) + + sf = ast_skyframe( ' ', status ); + p1( 1 ) = 0.0 + p1( 2 ) = 1.3 + p2( 1 ) = 0.01 + + unc = ast_circle( sf, 1, p1, p2, AST__NULL, ' ', status ) + + p1( 1 ) = 1.3 + p1( 2 ) = 0.5 + p2( 1 ) = 0.3 + p2( 2 ) = 0.1 + p3( 1 ) = 1.0 + reg = ast_ellipse( sf, 1, p1, p2, p3, unc, ' ', status ) + + iwrite = 0 + nobj = ast_write( ch, reg, status ) + call asserti( 'N obj', nobj, 1, status ) + call asserti( 'iwrite', iwrite, 2, status ) + call assertc( 'line 1', buff(1), 'Ellipse ICRS TOPOCENTER '// + : '74.48451 28.64789 17.18873 5.729578', status ) + call assertc( 'line 2', buff(2), ' 57.29578 Error 0.5729514 '// + : '0.5726735', status ) + + call ast_set( ch, 'StcsCoords=1,StcsProps=1', status ) + + idoc = 3 + iread = 0 + obj = ast_read( ch, status ) + + if( obj .ne. AST__NULL ) then + iwrite = 0 + nobj = ast_write( ch, obj, status ) + call asserti( 'N obj 2', nobj, 1, status ) + + call assertc( 'line 1 2', buff(1), 'TimeInterval TT '// + : 'GEoCENTER 1996-01-01T00:00:00', status ) + + call assertc( 'line 2 2', buff(2), ' 1996-01-01T00:30:00 '// + : 'Time MJD 50814.0 Error 1.2', status ); + + call assertc( 'line 3 2', buff(3), ' Resolution 0.8 '// + : 'PixSize 1024.0', status ) + + call assertc( 'line 4 2', buff(4), 'Circle ICRS GEOCENTER '// + : '179.0 -11.5 0.5 Position 179.0 -11.5', status ) + + call assertc( 'line 5 2', buff(5), ' Error 0.000889 '// + : '0.000889 Resolution 0.001778 Size 0.000333', + : status ) + + call assertc( 'line 6 2', buff(6), ' 0.000278 PixSize '// + : '0.000083 0.000083', status ) + + call assertc( 'line 7 2', buff(7), 'Spectral BARYCENTER '// + : '1420.4 unit MHz Resolution 10.0', status ) + + call assertc( 'line 8 2', buff(8), 'RedshiftInterval '// + : 'BARYCENTER VELOCITY OPTICAL 200 2300 ', + : status ) + + call assertc( 'line 9 2', buff(9), ' Redshift 300 '// + : 'Resolution 0.7 PixSize 0.3', status ) + + else + write(*,*) 'No object read from doc 3' + end if + + + call ast_end( status ) + + if( status .ne. sai__ok ) call err_rep( ' ', 'test2 failed.', + : status ) + + end + + + + + + + + + + + + + + + subroutine source( status ) + implicit none + + integer iread, idoc + common /aaa/ iread, idoc + + logical done + integer status, l, chr_len + character c*80 + + c = ' ' + done = .false. + + if( idoc .eq. 1 ) then + if( iread .eq. 0 ) then + c = 'StartTime 1900-01-01 Circle ICRS 148.9 69.1 2.0 fred' + else if( iread .eq. 1 ) then + c = 'SpectralInterval 4000 7000 unit Angstrom' + else + done = .true. + end if + + else if( idoc .eq. 2 ) then + if( iread .eq. 0 ) then + c = 'StartTime 1900-01-01 Circle ICRS 148.9 69.1 2.0 ' + else if( iread .eq. 1 ) then + c = 'SpeCtralInterval 4000 7000 unit Angstrom' + else + done = .true. + end if + + else if( idoc .eq. 3 ) then + if( iread .eq. 0 ) then + c = 'TimeInterVal TT GEoCENTER' + else if( iread .eq. 1 ) then + c = '1996-01-01T00:00:00 1996-01-01T00:30:00' + else if( iread .eq. 2 ) then + c = 'Time MJD 50814.0 Error 1.2' + else if( iread .eq. 3 ) then + c = 'Resolution 0.8 PixSize 1024.0' + else if( iread .eq. 4 ) then + c = 'Circle ICRS GEOCENTER 179.0 -11.5 0.5' + else if( iread .eq. 5 ) then + c = 'Position 179.0 -11.5 Error 0.000889' + else if( iread .eq. 6 ) then + c = 'Resolution 0.001778 Size 0.000333 0.000278' + else if( iread .eq. 7 ) then + c = 'PixSIZE 0.000083 0.000083' + else if( iread .eq. 8 ) then + c = 'Spectral BARYCENTER 1420.4 unit MHz' + else if( iread .eq. 9 ) then + c = 'Resolution 10.0' + else if( iread .eq. 10 ) then + c = 'RedshiftInterval BARYCENTER VELOCITY OPTICAL' + else if( iread .eq. 11 ) then + c = '200.0 2300.0 Redshift 300.0' + else if( iread .eq. 12 ) then + c = 'Resolution 0.7 PixSize 0.3' + else + done = .true. + end if + + else if( idoc .eq. 4 ) then + if( iread .eq. 0 ) then + c = 'TimeInterval TT GEOCENTER' + else if( iread .eq. 1 ) then + c = '1996-01-01T00:00:00 1996-01-01T00:30:00' + else if( iread .eq. 2 ) then + c = 'Time mjd 50814.0 ERROR 1.2' + else if( iread .eq. 3 ) then + c = 'Resolution 0.8 PixSize 1024.0' + else if( iread .eq. 4 ) then + c = 'Spectral barycenter 1420.4 UNIT MHz' + else if( iread .eq. 5 ) then + c = 'Resolution 10.0' + else + done = .true. + end if + +* Like doc 3 but with a compound spatial region + else if( idoc .eq. 5 ) then + if( iread .eq. 0 ) then + c = 'tIMEiNTERVAL tt geocenter' + else if( iread .eq. 1 ) then + c = '1996-01-01T00:00:00 1996-01-01T00:30:00' + else if( iread .eq. 2 ) then + c = 'Time MJD 50814.0 Error 1.2' + else if( iread .eq. 3 ) then + c = 'Resolution 0.8 PixSize 1024.0' + else if( iread .eq. 4 ) then + c = ' ' + else if( iread .eq. 5 ) then + c = 'Union ICRS GEOCENTER' + else if( iread .eq. 6 ) then + c = ' (Circle 180 10 20' + else if( iread .eq. 7 ) then + c = ' Circle 190 10 20' + else if( iread .eq. 8 ) then + c = ' Intersection (' + else if( iread .eq. 9 ) then + c = ' cIRCLE 120 -10 20 dIFFERENCE ' + else if( iread .eq. 10 ) then + c = ' ( Circle 130 -10 20 ' + else if( iread .eq. 11 ) then + c = ' Circle 115 -10 10 ' + else if( iread .eq. 12 ) then + c = ' )' + else if( iread .eq. 13 ) then + c = ' Not (Circle 118 -8 3)' + else if( iread .eq. 14 ) then + c = ' )' + else if( iread .eq. 15 ) then + c = ' )' + else if( iread .eq. 16 ) then + c = 'Position 179.0 -11.5 Error 0.000889' + else if( iread .eq. 17 ) then + c = 'Resolution 0.001778 Size 0.000333 0.000278' + else if( iread .eq. 18 ) then + c = 'PixSize 0.000083 0.000083' + else if( iread .eq. 19 ) then + c = 'Spectral BARYCENTER 1420.4 unit MHz' + else if( iread .eq. 20 ) then + c = 'rESOLUTION 10.0' + else if( iread .eq. 21 ) then + c = 'rEDSHIFTiNTERVAL barycenter velocity optical' + else if( iread .eq. 22 ) then + c = '200.0 2300.0 rEDSHIFT 300.0' + else if( iread .eq. 23 ) then + c = 'Resolution 0.7 PixSize 0.3' + else + done = .true. + end if + + end if + + l = max( chr_len( c ), 1 ) + if( .not. done ) then + call ast_putline( c, l, status ) + iread = iread + 1 + else + call ast_putline( ' ', -1, status ) + end if + + end + + + + + + + + subroutine sink( status ) + implicit none + + integer iwrite + character buff(30)*300 + common /bbb/ iwrite, buff + + integer status, l + character line*300 + + call ast_getline( line, l, status ) + if( l .gt. 0 ) then + if( iwrite .lt. 0 ) then + write(*,*) line( : l ) + else + iwrite = iwrite + 1 + buff( iwrite ) = ' ' + buff( iwrite ) = line( : l ) + end if + end if + + end + + + subroutine asserta( obj, anam, asb, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer obj, status + character anam*(*), asb*(*), aval*80 + + aval = ast_GetC( obj, anam, status ) + + if( aval .ne. asb ) then + call msg_setc( 'A', anam ) + call msg_setc( 'B', aval ) + call msg_setc( 'C', asb ) + call error( '^A (^B) should be "^C".', status ) + end if + + end + + subroutine assertc( name, val, sb, status ) + implicit none + include 'SAE_PAR' + integer status, i + character name*(*), val*(*), sb*(*) + character blank*500 + + if( val .ne. sb .and. status .eq. sai__ok ) then + call msg_setc( 'A', name ) + call msg_setc( 'B', val ) + call error( '^A (^B) should be:', status ) + + i = 1 + blank = ' ' + do while( val( i : i ) .eq. sb( i : i ) ) + i = i + 1 + end do + blank( i : i ) = '^' + + write(*,*) sb + write(*,*) blank( : i + 2 ) + + end if + + end + + subroutine asserti( name, val, sb, status ) + implicit none + include 'SAE_PAR' + integer status + character name*(*) + integer val, sb + + if( val .ne. sb ) then + call msg_setc( 'A', name ) + call msg_seti( 'B', val ) + call msg_seti( 'C', sb ) + call error( '^A (^B) should be ^C.', status ) + end if + + end + + subroutine assert( name, val, status ) + implicit none + include 'SAE_PAR' + integer status + character name*(*) + logical val + + if( .not. val ) then + call msg_setc( 'A', name ) + call error( '^A is not true.', status ) + end if + + end + + subroutine assertd( name, val, sb, status ) + implicit none + include 'SAE_PAR' + integer status + character name*(*) + double precision val, sb + + if( abs( val - sb ) .gt. 0.5E-8*( val + sb ) ) then + call msg_setc( 'A', name ) + call msg_setd( 'B', val ) + call msg_setd( 'C', sb ) + call error( '^A (^B) should be ^C.', status ) + end if + + end + + subroutine error( text, status ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + + if( status .eq. sai__ok ) then + status = sai__error + call err_rep( ' ', text, status ) + end if + + end + + + subroutine readast( file, obj, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer obj, status, channel + character file*(*) + external rsource + + if( status .ne. sai__ok ) return + + open( 10, file=file, status='old' ) + channel = ast_channel( rsource, ast_null, ' ', status ) + obj = ast_read( channel, status ) + call ast_annul( channel, status ) + close( 10 ) + + end + + + subroutine rsource( status ) + integer status + character buffer*200 + + read( 10, '(a)', end = 99 ) buffer + call ast_putline( buffer, len( buffer ), status ) + return + + 99 call ast_putline( buffer, -1, status ) + end + + diff --git a/ast/ast_tester/testswitchmap.f b/ast/ast_tester/testswitchmap.f new file mode 100644 index 0000000..401447b --- /dev/null +++ b/ast/ast_tester/testswitchmap.f @@ -0,0 +1,794 @@ + program testswitchmap + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + integer status, outperm(2), inperm(2), wm1, wm2, pm1, pm2, rm(2), + : fs, is, swm, i, swm2, cm, cm2, sm, oc, mc, fc, + : box(2), gridframe + double precision x1, x2, l1, l2, in(4,2), out(4,2), at(2), r, + : p1(2),p2(2), rmout(4,2), r1, r2 + character text*10, fwd(1)*40, inv(2)*40, card(10)*80 + + status = sai__ok + + call ast_begin( status ) + +c call ast_watchmemory(22617) + + oc = ast_tune( 'ObjectCaching', 1, status ) + mc = ast_tune( 'MemoryCaching', 1, status ) + + + +* A 2D input grid has 2 rows and 101 columns. Each row contains a spectrum. +* The two spectra cover overlaping regions of wavelength. The spectrum in +* row 1 has "wavelength = (gridx - 1)*10+1000", whilst the spectrum in +* row 2 has "wavelength = (gridx - 1)*11+1600". We use a (Nin=2,Nout=1) +* SwitchMap to describe the Mapping from grid (x,y) to wavelength. This +* SwitchMap contains 2 route Mappings, one for each row of the grid. +* -------------------------------------------------------------------- + +* Produce a 1D Mapping from gridx to wavelength for row 1. + x1 = 1.0 + x2 = 101.0 + l1 = 1000.0 + l2 = 2000.0 + wm1 = ast_winmap( 1, x1, x2, l1, l2, ' ', status ) + +* Since the SwicthMap has 2 inputs, each of the route Mappings must also +* have 2 inputs. Produce a PermMap which passes on its 1st input to its +* (one and only) output. The inverse transformation supplied a value of +* 1.0 for the missing 2nd input (1.0 is the grid Y value for the first +* row). + outperm( 1 ) = 1 + inperm( 1 ) = 1 + inperm( 2 ) = -1 + pm1 = ast_permmap( 2, inperm, 1, outperm, 1.0D0, ' ', status ) + +* Combine the PermMap and WinMap in series to get the total route +* Mapping for the first row. + rm(1) = ast_cmpmap( pm1, wm1, .true., ' ', status ) + +* Likewise, produce the route Mapping for the second row. The grid y +* value for the second row is 2.0, so use this as the constant in the +* PermMap (i.e. the value which the inverse transformation supplies for +* the missing second input). + l1 = 1600.0 + l2 = 2700.0 + wm2 = ast_winmap( 1, x1, x2, l1, l2, ' ', status ) + pm2 = ast_permmap( 2, inperm, 1, outperm, 2.0D0, ' ', status ) + rm(2) = ast_cmpmap( pm2, wm2, .true., ' ', status ) + +* The forward selector Mapping just uses the second input (the grid Y +* value) as the selector value (i.e. gridy=1 selects the first route +* Mapping and gridy=2 selects the second route Mapping). The inverse +* transformation of this Mapping is never used and so does not matter. + outperm( 1 ) = 2 + inperm( 2 ) = 1 + inperm( 1 ) = 0 + fs = ast_permmap( 2, inperm, 1, outperm, 0.0D0, ' ', status ) + +* The inverse selector function needs to decide which route Mapping to +* use for any supplied ("output") wavelength value. We arbitrarily +* decide to to use the first row for wavelengths less than or equal to +* 1800, and the second row for wavelengths larger than 1800 (1800 is the +* mid-point of the overlap between the two spectra). We use a MathMap to +* implement this transformation, which must be the *inverse* +* transformation of the MathMap. The forward transformation of the +* inverse slector Mapping is never used and so is left unspecified in +* the MathMap constructor. + is = ast_mathmap( 1, 1, 1, 'y', 1, 'x=qif(y>1800,2,1)', ' ', + : status ) + +* Now create the SwitchMap. + swm = ast_switchmap( fs, is, 2, rm, ' ', status ) + +* Test the forward transformation of the SwitchMap. To add complication, +* we first invert the SwitchMap and then use ast_trann in the inverse +* direction (the two inversions cancel resulting in the forward +* transformation being used). + call ast_invert( swm, status ) + + in(1,1) = 1.0 + in(1,2) = 1.0 + in(2,1) = 101.0 + in(2,2) = 2.0 + in(3,1) = 1.0 + in(3,2) = 2.0 + in(4,1) = 101.0 + in(4,2) = 1.0 + call ast_trann( swm, 4, 2, 4, in, .false., 1, 4, out, status ) + + do i = 1, 4 + if( out(i,1) .eq. ast__bad ) then + call stopit( i, out(i,1), status ) + end if + end do + + if( abs( out(1,1) - 1000.0 ) .gt. 1.0E-5 ) then + call stopit( 5, out(1,1), status ) + else if( abs( out(2,1) - 2700.0 ) .gt. 1.0E-5 ) then + call stopit( 6, out(2,1), status ) + else if( abs( out(3,1) - 1600.0 ) .gt. 1.0E-5 ) then + call stopit( 7, out(3,1), status ) + else if( abs( out(4,1) - 2000.0 ) .gt. 1.0E-5 ) then + call stopit( 8, out(4,1), status ) + end if + +* Test the inverse transformation of the SwitchMap. + call ast_trann( swm, 4, 1, 4, out, .true., 2, 4, in, status ) + + do i = 1, 4 + if( in(i,1) .eq. ast__bad ) then + call stopit( 7 + 2*i, in(i,1), status ) + else if( in(i,2) .eq. ast__bad ) then + call stopit( 8 + 2*i, in(i,2), status ) + end if + end do + + if( abs( in(1,1) - 1.0 ) .gt. 1.0E-5 ) then + call stopit( 17, in(1,1), status ) + else if( abs( in(1,2) - 1.0 ) .gt. 1.0E-5 ) then + call stopit( 18, in(1,2), status ) + else if( abs( in(2,1) - 101.0 ) .gt. 1.0E-5 ) then + call stopit( 19, in(2,1), status ) + else if( abs( in(2,2) - 2.0 ) .gt. 1.0E-5 ) then + call stopit( 20, in(2,2), status ) + else if( abs( in(3,1) - 61.0 ) .gt. 1.0E-5 ) then + call stopit( 21, in(3,1), status ) + else if( abs( in(3,2) - 1.0 ) .gt. 1.0E-5 ) then + call stopit( 22, in(3,2), status ) + else if( abs( in(4,1) - 37.3636364 ) .gt. 1.0E-5 ) then + call stopit( 23, in(4,1), status ) + else if( abs( in(4,2) - 2.0 ) .gt. 1.0E-5 ) then + call stopit( 24, in(4,2), status ) + end if + +* Check no simplification is done on a single non-inverted SwicthMap. + call ast_setl( swm, 'Invert', .false., status ) + swm2 = ast_simplify( swm, status ) + call compare( swm, swm2, 'ast_equal 1', status ) + +* Check an inverted SwitchMap simplies to an non-inverted switchmap. + call ast_setl( swm, 'Invert', .true., status ) + swm2 = ast_simplify( swm, status ) + if( ast_getl( swm2, 'Invert', status ) ) then + call stopit( 25, 1.0D0, status ) + end if + +* Check two adjacent opposite SwitchMaps cancel. + swm2 = ast_copy( swm, status ) + call ast_invert( swm2, status ) + cm = ast_cmpmap( swm, swm2, .true., ' ', status ) + cm2 = ast_simplify( cm, status ) + if( .not. ast_isaunitmap( cm2, status ) ) then + call stopit( 26, 1.0D0, status ) + end if + + cm = ast_cmpmap( swm2, swm, .true., ' ', status ) + cm2 = ast_simplify( cm, status ) + if( .not. ast_isaunitmap( cm2, status ) ) then + call stopit( 27, 1.0D0, status ) + end if + +* Check that the SwitchMap can be written out to a AstChannel and read +* back again succesfully. + call checkdump( swm, 'Channel test 1', status ) + +* Check the ast_rate function works OK. + call ast_setl( swm, 'Invert', .false., status ) + + at(1) = 20.0 + at(2) = 1.0 + r = ast_rate( swm, at, 1, 1, status ) + if( abs( r - 10.0 ) .gt. 1.0E-6 ) call stopit( 28, r, status ) + + at(1) = 20.0 + at(2) = 2.0 + r = ast_rate( swm, at, 1, 1, status ) + if( abs( r - 11.0 ) .gt. 1.0E-6 ) call stopit( 29, r, status ) + + call ast_setl( swm, 'Invert', .true., status ) + + at(1) = 1700.0 + r = ast_rate( swm, at, 1, 1, status ) + if( abs( r - 1.0/10.0 ) .gt. 1.0E-6 ) call stopit( 30, r, status ) + + at(1) = 1900.0 + r = ast_rate( swm, at, 1, 1, status ) + if( abs( r - 1.0/11.0 ) .gt. 1.0E-6 ) call stopit( 31, r, status ) + + call ast_setl( swm, 'Invert', .false., status ) + + +* A 1D input grid has 1 rows and 202 columns. Each half of the row +* (1:101 and 102:202) contains a spectrum. The two spectra cover +* overlaping regions of wavelength. The spectrum in thw lower half has +* "wavelength = (gridx - 1)*10+1000", whilst the spectrum in the upper +* half has "wavelength = (gridx - 1)*11+1600". We use a (Nin=1,Nout=1) +* SwitchMap to describe the Mapping from grid (x) to wavelength. This +* SwitchMap contains 2 route Mappings, one for each half of the row. +* -------------------------------------------------------------------- + +* Produce a 1D Mapping from gridx to wavelength for the lower half. + x1 = 1.0 + x2 = 101.0 + l1 = 1000.0 + l2 = 2000.0 + rm(1) = ast_winmap( 1, x1, x2, l1, l2, ' ', status ) + +* Likewise, produce a 1D Mapping from gridx to wavelength for the upper half. + x1 = 102.0 + x2 = 202.0 + l1 = 1600.0 + l2 = 2700.0 + rm(2) = ast_winmap( 1, x1, x2, l1, l2, ' ', status ) + +* We can use a single MathMap for both selector Mappings - the forward +* transformation (used as the forward selector) gives 1 for all gridx less +* than 101.5 and 2 for all gridx greater than 101.5. The inverse +* transformation (used as the inverse selector) gives 1 for all +* wavelengths les than 1800 and 2 for all wavelength greater than 1800 +* (1800 is the mid point of the overlap region). + sm = ast_mathmap( 1, 1, 1, 'y=qif(x>101.5,2,1)', + : 1, 'x=qif(y>1800,2,1)', + : ' ', status ) + +* Now create the SwitchMap. + swm = ast_switchmap( sm, sm, 2, rm, ' ', status ) + +* Test the forward transformation of the SwitchMap. To add complication, +* we first invert the SwitchMap and then use ast_trann in the inverse +* direction (the two inversions cancel resulting in the forward +* transformation being used). We alo invert the selector mapping (this +* should have no effect on the SwitchMap). + call ast_invert( swm, status ) + call ast_invert( sm, status ) + + in(1,1) = 1.0 + in(2,1) = 202.0 + in(3,1) = 102.0 + in(4,1) = 101.0 + call ast_trann( swm, 4, 1, 4, in, .false., 1, 4, out, status ) + + do i = 1, 4 + if( out(i,1) .eq. ast__bad ) then + call stopit( 100+i, out(i,1), status ) + end if + end do + + if( abs( out(1,1) - 1000.0 ) .gt. 1.0E-5 ) then + call stopit( 105, out(1,1), status ) + else if( abs( out(2,1) - 2700.0 ) .gt. 1.0E-5 ) then + call stopit( 106, out(2,1), status ) + else if( abs( out(3,1) - 1600.0 ) .gt. 1.0E-5 ) then + call stopit( 107, out(3,1), status ) + else if( abs( out(4,1) - 2000.0 ) .gt. 1.0E-5 ) then + call stopit( 108, out(4,1), status ) + end if + +* Test the inverse transformation of the SwitchMap. + call ast_trann( swm, 4, 1, 4, out, .true., 1, 4, in, status ) + + do i = 1, 4 + if( in(i,1) .eq. ast__bad ) then + call stopit( 107 + 2*i, in(i,1), status ) + end if + end do + + if( abs( in(1,1) - 1.0 ) .gt. 1.0E-5 ) then + call stopit( 117, in(1,1), status ) + else if( abs( in(2,1) - 202.0 ) .gt. 1.0E-5 ) then + call stopit( 119, in(2,1), status ) + else if( abs( in(3,1) - 61.0 ) .gt. 1.0E-5 ) then + call stopit( 121, in(3,1), status ) + else if( abs( in(4,1) - 138.3636364 ) .gt. 1.0E-5 ) then + call stopit( 123, in(4,1), status ) + end if + +* Check no simplification is done on a single non-inverted SwicthMap. + call ast_setl( swm, 'Invert', .false., status ) + swm2 = ast_simplify( swm, status ) + call compare( swm, swm2, 'ast_equal 2', status ) + +* Check an inverted SwitchMap simplies to an non-inverted switchmap. + call ast_setl( swm, 'Invert', .true., status ) + swm2 = ast_simplify( swm, status ) + if( ast_getl( swm2, 'Invert', status ) ) then + call stopit( 125, 1.0D0, status ) + end if + +* Check two adjacent opposite SwitchMaps cancel. + swm2 = ast_copy( swm, status ) + call ast_invert( swm2, status ) + cm = ast_cmpmap( swm, swm2, .true., ' ', status ) + cm2 = ast_simplify( cm, status ) + if( .not. ast_isaunitmap( cm2, status ) ) then + call stopit( 126, 1.0D0, status ) + end if + + cm = ast_cmpmap( swm2, swm, .true., ' ', status ) + cm2 = ast_simplify( cm, status ) + if( .not. ast_isaunitmap( cm2, status ) ) then + call stopit( 127, 1.0D0, status ) + end if + +* Check that the SwitchMap can be written out to a AstChannel and read +* back again succesfully. + call checkdump( swm, 'Channel test 2', status ) + +* Check the ast_rate function works OK. + call ast_setl( swm, 'Invert', .false., status ) + + at(1) = 20.0 + r = ast_rate( swm, at, 1, 1, status ) + if( abs( r - 10.0 ) .gt. 1.0E-6 ) call stopit( 128, r, status ) + + at(1) = 120.0 + r = ast_rate( swm, at, 1, 1, status ) + if( abs( r - 11.0 ) .gt. 1.0E-6 ) call stopit( 129, r, status ) + + call ast_setl( swm, 'Invert', .true., status ) + + at(1) = 1700.0 + r = ast_rate( swm, at, 1, 1, status ) + if( abs( r - 1.0/10.0 ) .gt. 1.0E-6 ) call stopit( 130, r, + : status ) + + at(1) = 1900.0 + r = ast_rate( swm, at, 1, 1, status ) + if( abs( r - 1.0/11.0 ) .gt. 1.0E-6 ) call stopit( 131, r, + : status ) + + call ast_setl( swm, 'Invert', .false., status ) + + +* A 2D input grid has bounds (1:180,1:100). The area (10:80,10:80) +* and the area (100:170,10:80) both contain images of a fixed part of +* the sky (e.g. in different polarisations). The WCS for each sub-region +* is derived from a single FITS-WCS header,with suitably shifted origin. +* -------------------------------------------------------------------- + card(1) = 'CRPIX1 = 45' + card(2) = 'CRPIX2 = 45' + card(3) = 'CRVAL1 = 45' + card(4) = 'CRVAL2 = 89.9' + card(5) = 'CDELT1 = -0.01' + card(6) = 'CDELT2 = 0.01' + card(7) = 'CTYPE1 = ''RA---TAN''' + card(8) = 'CTYPE2 = ''DEC--TAN''' + + fc = ast_fitschan( AST_NULL, AST_NULL, ' ', status ) + do i = 1, 8 + call ast_putfits( fc, card(i), .false., status ) + end do + call ast_clear( fc, 'Card', status ) + fs = ast_read( fc, status ) + rm(1) = ast_getMapping( fs, ast__base, ast__current, status ) + + card(1) = 'CRPIX1 = 135' + call ast_clear( fc, 'Card', status ) + do i = 1, 8 + call ast_putfits( fc, card(i), .true., status ) + end do + call ast_clear( fc, 'Card', status ) + fs = ast_read( fc, status ) + rm(2) = ast_getMapping( fs, ast__base, ast__current, status ) + +* Forward Selector Mapping: A SelectorMap which encapsulates the two Box +* Regions in GRID coords. + gridframe = ast_getframe( fs, AST__BASE, status ) + + p1(1) = 10 + p1(2) = 10 + p2(1) = 80 + p2(2) = 80 + box(1) = ast_box( gridframe, 1, p1, p2, AST__NULL, ' ', status ) + + p1(1) = 100 + p1(2) = 10 + p2(1) = 170 + p2(2) = 80 + box(2) = ast_box( gridframe, 1, p1, p2, AST__NULL, ' ', status ) + + fs = ast_selectormap( 2, box, AST__BAD, ' ', status ) + +* Inverse Selector Mapping: A PermMap which has an inverse transformation +* which gives an input value of 1 for all output values. This means that the +* inverse transformation of the SwitchMap always returns a GRID position in +* the lower (left-hand) of the two images. + inperm(1) = -1 + outperm(1) = 0 + outperm(2) = 0 + is = ast_permmap( 1, inperm, 2, outperm, 1.0D0, ' ', status ) + +* Now create the SwitchMap. + swm = ast_switchmap( fs, is, 2, rm, ' ', status ) + +* Test the forward transformation of the SwitchMap. To add complication, +* we first invert the SwitchMap and then use ast_trann in the inverse +* direction (the two inversions cancel resulting in the forward +* transformation being used). We alo invert the selector mapping (this +* should have no effect on the SwitchMap). + call ast_invert( swm, status ) + call ast_invert( fs, status ) + + in(1,1) = 5.0 + in(1,2) = 5.0 + + in(2,1) = 50.0 + in(2,2) = 50.0 + + in(3,1) = 90.0 + in(3,2) = 50.0 + + in(4,1) = 140.0 + in(4,2) = 50.0 + + call ast_trann( swm, 4, 2, 4, in, .false., 2, 4, out, status ) + +* Transform these same positions using the Mapping for the left hand +* image obtained from the FITS header + call ast_trann( rm(1), 4, 2, 4, in, .true., 2, 4, rmout, status ) + +* Check the SwitchMap results. Points 1 and 3 should be bad because they +* fall outside either image. points 2 and 4 should both be equal to the +* result of transforming point 2 using the FITS-WCS mapping. + + if( out(1,1) .ne. AST__BAD ) then + call stopit( 132, out(1,1), status ) + + else if( out(1,2) .ne. AST__BAD ) then + call stopit( 133, out(1,1), status ) + + else if( out(2,1) .ne. rmout(2,1) ) then + call stopit( 134, out(2,1), status ) + + else if( out(2,2) .ne. rmout(2,2) ) then + call stopit( 135, out(2,2), status ) + + else if( out(3,1) .ne. AST__BAD ) then + call stopit( 136, out(1,1), status ) + + else if( out(3,2) .ne. AST__BAD ) then + call stopit( 137, out(1,1), status ) + + else if( abs( out(4,1) - rmout(2,1) ) .gt. + : 1.0D-6*abs( rmout(2,1) ) ) then + call stopit( 138, out(2,1), status ) + + else if( abs( out(4,2) - rmout(2,2) ) .gt. + : 1.0D-6*abs( rmout(2,2) ) ) then + call stopit( 139, out(2,2), status ) + + end if + + +* Test the inverse transformation of the SwitchMap. + call ast_trann( swm, 4, 2, 4, out, .true., 2, 4, in, status ) + + if( in(1,1) .ne. AST__BAD ) then + call stopit( 140, in(1,1), status ) + + else if( in(1,2) .ne. AST__BAD ) then + call stopit( 141, in(1,1), status ) + + else if( abs( in(2,1) - 50.0 ) .gt. 1.0E-6 ) then + call stopit( 142, in(2,1), status ) + + else if( abs( in(2,2) - 50.0 ) .gt. 1.0E-6 ) then + call stopit( 143, in(2,2), status ) + + else if( in(3,1) .ne. AST__BAD ) then + call stopit( 144, in(1,1), status ) + + else if( in(3,2) .ne. AST__BAD ) then + call stopit( 145, in(1,1), status ) + + else if( abs( in(4,1) - 50.0 ) .gt. 1.0E-6 ) then + call stopit( 146, in(2,1), status ) + + else if( abs( in(4,2) - 50.0 ) .gt. 1.0E-6 ) then + call stopit( 147, in(2,2), status ) + + end if + +* Check no simplification is done on a single non-inverted SwicthMap. + call ast_setl( swm, 'Invert', .false., status ) + swm2 = ast_simplify( swm, status ) + call compare( swm, swm2, 'ast_equal 3', status ) + +* Check an inverted SwitchMap simplies to an non-inverted switchmap. + call ast_setl( swm, 'Invert', .true., status ) + swm2 = ast_simplify( swm, status ) + if( ast_getl( swm2, 'Invert', status ) ) then + call stopit( 148, 1.0D0, status ) + end if + +* Check two adjacent opposite SwitchMaps cancel. + swm2 = ast_copy( swm, status ) + call ast_invert( swm2, status ) + cm = ast_cmpmap( swm, swm2, .true., ' ', status ) + cm2 = ast_simplify( cm, status ) + if( .not. ast_isaunitmap( cm2, status ) ) then + call stopit( 149, 1.0D0, status ) + end if + + cm = ast_cmpmap( swm2, swm, .true., ' ', status ) + cm2 = ast_simplify( cm, status ) + if( .not. ast_isaunitmap( cm2, status ) ) then + call stopit( 150, 1.0D0, status ) + end if + +* Check that the SwitchMap can be written out to a AstChannel and read +* back again succesfully. + call checkdump( swm, 'Channel test 3', status ) + +* Check the ast_rate function works OK. + call ast_setl( swm, 'Invert', .false., status ) + + at(1) = 140.0 + at(2) = 50.0 + r1 = ast_rate( swm, at, 1, 1, status ) + + at(1) = 50.0 + r2 = ast_rate( rm(1), at, 1, 1, status ) + + if( abs( r1 - r2 ) .gt. abs( 1.0E-6*r2 ) ) call stopit( 151, r1, + : status ) + + at(1) = 140.0 + r1 = ast_rate( swm, at, 2, 2, status ) + + at(1) = 50.0 + r2 = ast_rate( rm(1), at, 2, 2, status ) + + if( abs( r1 - r2 ) .gt. abs( 1.0E-6*r2 ) ) call stopit( 152, r1, + : status ) + + at(1) = 140.0 + r1 = ast_rate( swm, at, 1, 2, status ) + + at(1) = 50.0 + r2 = ast_rate( rm(1), at, 1, 2, status ) + + if( abs( r1 - r2 ) .gt. abs( 1.0E-6*r2 ) ) call stopit( 153, r1, + : status ) + + at(1) = 140.0 + r1 = ast_rate( swm, at, 2, 1, status ) + + at(1) = 50.0 + r2 = ast_rate( rm(1), at, 2, 1, status ) + + if( abs( r1 - r2 ) .gt. abs( 1.0E-6*r2 ) ) call stopit( 154, r1, + : status ) + + + + + mc = ast_tune( 'MemoryCaching', mc, status ) + oc = ast_tune( 'ObjectCaching', oc, status ) + call ast_end( status ) + + call ast_activememory( 'testswitchmap' ) + call ast_flushmemory( 1 ) + + if( status .eq. sai__ok ) then + write(*,*) 'All SwitchMap tests passed' + else + write(*,*) 'SwitchMap tests failed' + end if + + end + + + subroutine stopit( i, r, status ) + implicit none + include 'SAE_PAR' + integer i, status + double precision r + if( status .eq. sai__ok ) then + write( *,* ) 'Error ',i,': ',r + status = sai__error + end if + end + + + + subroutine checkdump( obj, text, status ) + + implicit none + include 'SAE_PAR' + include 'AST_PAR' + character text*(*) + integer obj, status, next, end, ch, result, ll, overlap, ibuf, + : len1, len2 + external mysource, mysink + character buf1*45000 + character buf2*45000 + + common /ss1/ buf1 + common /ss3/ buf2 + common /ss2/ next, end, ll, ibuf + + if( status .ne. sai__ok ) return + +* Create a Channel which reads and writes to an internal string buffer. + ch = ast_channel( mysource, mysink, ' ', status ) + +* Write the supplied Object out to this Channel. + ll = 160 + next = 1 + ibuf = 1 + if( ast_write( ch, obj, status ) .ne.1 ) then + write(*,*) text + call stopit( 1000, 1.0D0, status ) + end if + len1 = next + +* Read an Object back from this Channel. + next = 1 + result = ast_read( ch, status ) + if( result .eq. ast__null ) then + write(*,*) text + call stopit( 1001, 1.0D0, status ) + end if + +* Check that it is of the same class as the supplied object. + if( ast_getc( result, 'Class', status ) .ne. + : ast_getc( obj, 'Class', status ) ) then + write(*,*) text + call stopit( 1002, 1.0D0, status ) + end if + +* Compare it to the suuplied object. + call compare( obj, result, text, status ) + + end + + + + + subroutine compare( obj1, obj2, text, status ) + + implicit none + include 'SAE_PAR' + include 'AST_PAR' + character text*(*) + integer obj1, status, next, end, ch, result, ll, overlap, ibuf, + : len1, len2, obj2 + external mysource, mysink + character buf1*45000 + character buf2*45000 + + common /ss1/ buf1 + common /ss3/ buf2 + common /ss2/ next, end, ll, ibuf + + if( status .ne. sai__ok ) return + +* Create a Channel which reads and writes to an internal string buffer. + ch = ast_channel( mysource, mysink, ' ', status ) + +* Write the first supplied Object out to this Channel, using buf1 + ll = 160 + next = 1 + ibuf = 1 + if( ast_write( ch, obj1, status ) .ne.1 ) then + write(*,*) text + call stopit( 2000, 1.0D0, status ) + end if + len1 = next + +* Write the second object out to the second buffer. + ll = 160 + next = 1 + ibuf = 2 + if( ast_write( ch, obj2, status ) .ne.1 ) then + write(*,*) text + call stopit( 2001, 1.0D0, status ) + end if + len2 = next + +* Compare the contents of the two buffers. + if( buf1( : len1 ) .ne. buf2( : len2 ) ) then + write(*,*) text + write(*,*) len1, len2 + call ast_show( obj1, status ) + call ast_show( obj2, status ) + call stopit( 2002, 1.0D0, status ) + + end if + + end + + subroutine mysource( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, ll, ibuf + character buf1*45000 + character buf2*45000 + + common /ss1/ buf1 + common /ss3/ buf2 + common /ss2/ next, end, ll, ibuf + + if( status .ne. sai__ok ) return + + if( next .ge. end ) then + if( ibuf .eq. 1 ) then + call ast_putline( buf1, -1, status ) + else + call ast_putline( buf2, -1, status ) + endif + else + if( ibuf .eq. 1 ) then + call ast_putline( buf1( next : ), ll, status ) + else + call ast_putline( buf2( next : ), ll, status ) + endif + endif + + next = next + ll + + end + + subroutine mysink( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, f, l, ll, ibuf + character line*1000 + character buf1*45000 + character buf2*45000 + + common /ss1/ buf1 + common /ss3/ buf2 + common /ss2/ next, end, ll, ibuf + + if( status .ne. sai__ok ) return + + line = ' ' + call ast_getline( line, l, status ) + call chr_fandl( line( : l ), f, l ) + + if( ibuf .eq. 1 ) then + buf1( next : ) = line( f : l ) + else + buf2( next : ) = line( f : l ) + end if + + l = l - f + 1 + + if( next + ll - 1 .ge. 45000 ) then + write(*,*) 'Buffer overflow in mysink!!' + status = SAI__ERROR + + else if( l .gt. ll ) then + write(*,*) + if( ibuf .eq. 1 ) then + write(*,*) buf1( next : next + l) + else + write(*,*) buf2( next : next + l) + end if + write(*,*) 'Line length ',l,' greater than ',ll + write(*,*) 'Line overflow in mysink!!' + status = SAI__ERROR + else + end = next + l + if( ibuf .eq. 1 ) then + buf1( end : next + ll - 1 ) = ' ' + else + buf2( end : next + ll - 1 ) = ' ' + end if + endif + + next = next + ll + + end + + + + diff --git a/ast/ast_tester/testtable.f b/ast/ast_tester/testtable.f new file mode 100644 index 0000000..907dd66 --- /dev/null +++ b/ast/ast_tester/testtable.f @@ -0,0 +1,537 @@ + program testtable + implicit none + + include 'AST_PAR' + include 'AST_ERR' + include 'SAE_PAR' + + integer status, table, table2, dims( 7 ), ival, l, nval + byte bytes(1,2),bval + real rval + character cval*30, text(2,2)*10 + + +c call ast_watchmemory(483) + + + status = sai__ok + call err_mark( status ) + call ast_begin( status ) + + table = ast_table( ' ', status ) + + call ast_mapput0i( table, 'Fred', 123, 'com 1', status ) + if( status .eq. AST__BADKEY ) then + call err_annul( status ) + else + if( status .ne. sai__ok ) call err_annul( status ) + call stopit( status, 'Table error 1' ) + endif + + call ast_mapput0i( table, 'Fred(2)', 123, 'com 1', status ) + if( status .eq. AST__BADKEY ) then + call err_annul( status ) + else + if( status .ne. sai__ok ) call err_annul( status ) + call stopit( status, 'Table error 2' ) + endif + + dims( 1 ) = 5 + dims( 2 ) = 2 + call ast_addcolumn( table, 'Fred', AST__FLOATTYPE, 2, dims, + : ' ', status ) + + if( ast_geti( table, 'NColumn', status ) .ne. 1 ) then + call stopit( status, 'Table error 2b' ) + endif + + if( ast_columnname( table, 1, status ) .ne. 'FRED' ) then + call stopit( status, 'Table error 2c' ) + endif + + if( ast_geti( table, 'ColumnType(Fred)', status ) .ne. + : AST__FLOATTYPE ) then + call stopit( status, 'Table error 2d' ) + endif + + call ast_columnshape( table, 'Fred', 2, nval, dims, status ) + if( nval .ne. 2 ) then + call stopit( status, 'Table error 2e' ) + else if( dims( 1 ) .ne. 5 ) then + call stopit( status, 'Table error 2f' ) + else if( dims( 2 ) .ne. 2 ) then + call stopit( status, 'Table error 2g' ) + endif + + if( ast_getc( table, 'ColumnUnit(Fred)', status ) .ne. ' ' ) then + call stopit( status, 'Table error 2h' ) + endif + + call ast_mapput0i( table, 'Fred(2)', 123, 'com 1', status ) + if( status .eq. AST__BADTYP ) then + call err_annul( status ) + else if( status .eq. sai__ok ) then + call stopit( status, 'Table error 3' ) + endif + + call ast_mapput0r( table, 'Fred(2)', 123, 'com 1', status ) + if( status .eq. AST__BADTYP ) then + call err_annul( status ) + else if( status .eq. sai__ok ) then + call stopit( status, 'Table error 4' ) + endif + + call ast_addcolumn( table, 'Fred', AST__FLOATTYPE, 0, 0, + : 'pW', status ) + if( status .eq. AST__OLDCOL ) then + call err_annul( status ) + else if( status .eq. sai__ok ) then + call stopit( status, 'Table error 5' ) + endif + + call ast_removecolumn( table, 'Fred', status ) + + if( ast_geti( table, 'NColumn', status ) .ne. 0 ) then + call stopit( status, 'Table error 5b' ) + endif + + call ast_addcolumn( table, 'Fred', AST__FLOATTYPE, 0, 0, + : 'pW', status ) + + call ast_mapput0r( table, 'Fred(1)', -123.0, 'com 1', status ) + call ast_mapput0r( table, 'Fred(2)', 123.0, 'com 2', status ) + + if( ast_mapget0r( table, 'Fred(2)', rval, status ) ) then + if( rval .ne. 123.0 ) call stopit( status, 'Table error 6' ) + else + call stopit( status, 'Table error 7' ) + endif + + if( ast_getc( table, 'ColumnUnit(Fred)', status ) .ne. 'pW' ) then + call stopit( status, 'Table error 7b' ) + endif + + call ast_addcolumn( table, 'Dick', AST__OBJECTTYPE, 0, 0, + : 'W/m**2', status ) + call ast_mapput0a( table, 'Dick(1)', table, 'com 1', status ) + if( status .eq. AST__KYCIR ) then + call err_annul( status ) + else if( status .eq. sai__ok ) then + call stopit( status, 'Table error 8' ) + endif + + if( ast_geti( table, 'NColumn', status ) .ne. 2 ) then + call stopit( status, 'Table error 8b' ) + endif + + if( ast_columnname( table, 1, status ) .ne. 'FRED' ) then + call stopit( status, 'Table error 8c' ) + endif + + if( ast_columnname( table, 2, status ) .ne. 'DICK' ) then + call stopit( status, 'Table error 8d' ) + endif + + call ast_removecolumn( table, 'Dick', status ) + + if( ast_geti( table, 'NRow', status ) .ne. 2 ) then + call stopit( status, 'Table error 9' ) + endif + + if( ast_mapget0r( table, 'Fred(3)', rval, status ) ) then + call stopit( status, 'Table error 10' ) + endif + + if( ast_mapget0i( table, 'Fred(2)', ival, status ) ) then + if( ival .ne. 123 ) call stopit( status, 'Table error 11' ) + else + call stopit( status, 'Table error 12' ) + endif + + if( ast_mapget0c( table, 'Fred(2)', cval, l, status ) ) then + if( cval .ne. '123' ) call stopit( status, 'Table error 13' ) + if( l .ne. 3 ) call stopit( status, 'Table error 14' ) + else + call stopit( status, 'Table error 15' ) + endif + + call ast_removerow( table, 3, status ) + if( ast_geti( table, 'NRow', status ) .ne. 2 ) then + call stopit( status, 'Table error 16' ) + endif + + call ast_removerow( table, 2, status ) + if( ast_geti( table, 'NRow', status ) .ne. 1 ) then + call stopit( status, 'Table error 17' ) + endif + + if( ast_mapget0r( table, 'Fred(2)', rval, status ) ) then + call stopit( status, 'Table error 18' ) + endif + + call ast_addparameter( table, 'COLOUR', status ) + if( .not. ast_hasparameter( table, 'COLOUR', status ) ) then + call stopit( status, 'Table error 18_1' ) + endif + + call ast_mapput0C( table, 'COLOUR', 'Red', ' ', status ) + if( ast_mapget0c( table, 'COLOUR', cval, l, status ) ) then + if( cval .ne. 'Red' ) call stopit( status, 'Table error 18_3' ) + if( l .ne. 3 ) call stopit( status, 'Table error 18_4' ) + else + call stopit( status, 'Table error 18_5' ) + endif + + call ast_removeparameter( table, 'COLOUR', status ) + if( ast_hasparameter( table, 'COLOUR', status ) ) then + call stopit( status, 'Table error 18_2' ) + endif + + call checkDump( table, 'checkDump 1 ', status ) + + table2 = ast_copy( table, status ) + + if( ast_mapget0c( table2, 'Fred(1)', cval, l, status ) ) then + if( cval .ne. '-123' ) call stopit( status, 'Table error 19' ) + if( l .ne. 4 ) call stopit( status, 'Table error 20' ) + else + call stopit( status, 'Table error 21' ) + endif + + dims( 1 ) = 2 + dims( 2 ) = 2 + call ast_addcolumn( table, 'Dick', AST__STRINGTYPE, 2, dims, + : ' ', status ) + + text(1,1) = 'One' + text(2,1) = 'two' + text(1,2) = 'three' + text(2,2) = 'FouR' + + call ast_mapput1c( table, 'Dick(4)', 4, text, 'jjjj', status ) + if( ast_mapget1c( table, 'Dick(4)', 4, nval, text, status ) ) then + + if( text(1,1) .ne. 'One' ) + : call stopit( status, 'Table error 22' ) + if( text(2,1) .ne. 'two' ) + : call stopit( status, 'Table error 23' ) + if( text(1,2) .ne. 'three' ) + : call stopit( status, 'Table error 24' ) + if( text(2,2) .ne. 'FouR' ) + : call stopit( status, 'Table error 25' ) + + if( nval .ne. 4 ) call stopit( status, 'Table error 26' ) + else + call stopit( status, 'Table error 27' ) + endif + + call ast_mapputelemc( table, 'Dick(4)', 3, 'OHOHOHOH', status ) + if( ast_mapgetelemc( table, 'Dick(4)', 3, cval, status ) ) then + if( cval .ne. 'OHOHOHOH' ) + : call stopit( status, 'Table error 28' ) + else + call stopit( status, 'Table error 29' ) + endif + + if( ast_geti( table, 'columnlenc(Dick)', status ) .ne. 10 ) then + call stopit( status, 'Table error 29b' ) + endif + + dims( 1 ) = 1 + dims( 2 ) = 2 + call ast_addcolumn( table, 'HeHe', AST__BYTETYPE, 2, dims, + : ' ', status ) + bytes(1,1) = 127 + bytes(1,2) = 255 + call ast_mapput1b( table, 'HeHe(2)', 2, bytes, 'jjjj', status ) + if( ast_mapget1b( table, 'HeHe(2)', 2, nval, bytes, + : status ) ) then + if( nval .ne. 2 ) call stopit( status, 'Table error 30' ) + if( bytes(1,1) .ne. 127 ) call stopit( status, + : 'Table error 31' ) + if( bytes(1,2) .ne. -1 ) call stopit( status, + : 'Table error 32' ) + else + call stopit( status, 'Table error 33' ) + endif + + call ast_addcolumn( table, 'GoGo', AST__BYTETYPE, 0, 0, + : ' ', status ) + call ast_mapput0b( table, 'GoGo(2)', -10, ' ', status ) + if( ast_mapget0b( table, 'GoGo(2)', bval, status ) ) then + if( bval .ne. -10 ) call stopit( status, 'Table error 33' ) + else + call stopit( status, 'Table error 34' ) + endif + + call checkpurge( status ) + + if( .not. ast_hascolumn( table, 'GoGo', status ) ) then + call stopit( status, 'Table error 35' ) + else if( ast_hascolumn( table, 'dodo', status ) ) then + call stopit( status, 'Table error 36' ) + endif + + call ast_removecolumn( table, 'GoGo', status ) + if( ast_hascolumn( table, 'GoGo', status ) ) then + call stopit( status, 'Table error 37' ) + endif + + + + call ast_end( status ) + call err_rlse( status ) + +c call ast_activememory( 'testtable' ) + call ast_flushmemory( 1 ); + + if( status .eq. sai__ok ) then + write(*,*) 'All Table tests passed' + else + write(*,*) 'Table tests failed' + end if + + end + + + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + + end + + subroutine checkdump( obj, text, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + character text*(*),key*30,txt1*50,txt2*50 + integer obj, status, next, end, ch, result, ll, overlap, size, + : i, type,obj1,obj2,l1,l2,nl,nrow,nrowold + external mysource, mysink + character buf*400000 + + common /ss1/ buf + common /ss2/ next, end, ll, nl + + if( status .ne. sai__ok ) return + + ch = ast_channel( mysource, mysink, ' ', status ) + + + + nl = 0 + ll = 110 + next = 1 + if( ast_write( ch, obj, status ) .ne.1 ) then + write(*,*) text + call stopit( status, 'Cannot write supplied object to '// + : 'channel' ) + end if + + next = 1 + nl = 0 + result = ast_read( ch, status ) + + + + + if( result .eq. ast__null ) then + write(*,*) text + call stopit( status, 'Cannot read object from channel' ) + end if + + if( .not. ast_isatable( result, status ) ) then + call stopit( status, 'Object read from channel is not a table') + end if + + nrowold = ast_geti( obj, 'NRow', status ) + nrow = ast_geti( result, 'NRow', status ) + if( nrow .ne. nrowold ) then + write(*,*) nrow, nrowold + call stopit( status, 'checkDump 0' ) + endif + + size = ast_mapsize( result, status ) + if( ast_mapsize( obj, status ) .ne. size ) then + write(*,*) size, ast_mapsize( obj, status ) + call stopit( status, 'checkDump 1' ) + else + do i = 1, size + key = ast_mapkey( result, i, status ) + type = ast_maptype( result, key, status ) + if( ast_maptype( obj, key, status ) .ne. type ) then + write(*,*) type, ast_maptype( obj, key, status ) + call stopit( status, 'checkDump 4' ) + else + + if( type .eq. AST__OBJECTTYPE ) then + + if( .not. ast_mapGet0A( result, key, obj1, + : status ) ) call stopit( status, 'checkDump 5' ) + if( .not. ast_mapGet0A( obj, key, obj2, + : status ) ) call stopit( status, 'checkDump 6' ) + if( ast_GetC( obj1, 'class', status ) .ne. + : ast_GetC( obj2, 'class', status ) ) then + call stopit( status, 'checkDump 7' ) + end if + + else + + if( .not. ast_mapGet0C( result, key, txt1, l1, + : status ) ) call stopit( status, 'checkDump 8' ) + if( .not. ast_mapGet0C( obj, key, txt2, l2, + : status ) ) call stopit( status, 'checkDump 9' ) + if( txt1( : l1 ) .ne. txt2( : l2 ) .or. + : l1 .ne. l2 ) then + call stopit( status, 'checkDump 10' ) + end if + + end if + end if + end do + end if + + end + + subroutine mysource( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, ll, nl + character buf*400000 + + common /ss1/ buf + common /ss2/ next, end, ll,nl + + if( status .ne. sai__ok ) return + + if( next .ge. end ) then + call ast_putline( buf, -1, status ) + else + +c write(*,*) buf( next : next + ll - 1 ) + call ast_putline( buf( next : ), ll, status ) + nl = nl + 1 + endif + + next = next + ll + + end + + subroutine mysink( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, f, l, ll, nl + character buf*400000 + character line*1000 + + common /ss1/ buf + common /ss2/ next, end, ll, nl + + if( status .ne. sai__ok ) return + + line = ' ' + call ast_getline( line, l, status ) + call chr_fandl( line( : l ), f, l ) + buf( next : ) = line( f : l ) + l = l - f + 1 + + if( next + ll - 1 .ge. 400000 ) then + write(*,*) + call stopit( status, 'Buffer overflow in mysink!!' ) + else if( l .gt. ll ) then + write(*,*) + write(*,*) buf( next : next + l) + write(*,*) 'Line length ',l + call stopit( status, 'Line overflow in mysink!!' ) + else + end = next + l + buf( end : next + ll - 1 ) = ' ' + nl = nl + 1 + endif + + next = next + ll + + end + + + subroutine checkpurge( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, table, ival + + if( status .ne. sai__ok ) return + + table = ast_table( ' ', status ) + + call ast_addcolumn( table, 'Fred', AST__INTTYPE, 0, 0, ' ', + : status ) + call ast_addcolumn( table, 'Tom', AST__INTTYPE, 0, 0, ' ', + : status ) + + call ast_mapput0i( table, 'Fred(2)', 123, ' ', status ) + call ast_mapput0i( table, 'Fred(4)', 456, ' ', status ) + call ast_mapput0i( table, 'Tom(1)', -123, ' ', status ) + call ast_mapput0i( table, 'Tom(2)', -456, ' ', status ) + call ast_mapput0i( table, 'Tom(6)', 0, ' ', status ) + + if( ast_geti( table, 'NRow', status ) .ne. 6 ) then + call stopit( status, 'Table error purge-1' ) + endif + + call ast_mapremove( table, 'Tom(6)', status ) + if( ast_geti( table, 'NRow', status ) .ne. 6 ) then + call stopit( status, 'Table error purge-2' ) + endif + + call ast_purgerows( table, status ) + if( ast_geti( table, 'NRow', status ) .ne. 3 ) then + write(*,*) 'ZZ: ',ast_geti( table, 'NRow', status ) + call stopit( status, 'Table error purge-3' ) + endif + + if( ast_mapget0i( table, 'Tom(1)', ival, status ) ) then + if( ival .ne. -123 ) call stopit( status, + : 'Table error purge-4' ) + else + call stopit( status, 'Table error purge-5' ) + endif + + if( ast_mapget0i( table, 'Tom(2)', ival, status ) ) then + if( ival .ne. -456 ) call stopit( status, + : 'Table error purge-6' ) + else + call stopit( status, 'Table error purge-7' ) + endif + + if( ast_mapget0i( table, 'Fred(1)', ival, status ) ) then + call stopit( status, 'Table error purge-8' ) + endif + + if( ast_mapget0i( table, 'Fred(2)', ival, status ) ) then + if( ival .ne. 123 ) call stopit( status, + : 'Table error purge-9' ) + else + call stopit( status, 'Table error purge-10' ) + endif + + if( ast_mapget0i( table, 'Fred(3)', ival, status ) ) then + if( ival .ne. 456 ) call stopit( status, + : 'Table error purge-11' ) + else + call stopit( status, 'Table error purge-12' ) + endif + + call ast_annul( table, status ) + + end + diff --git a/ast/ast_tester/testtime.f b/ast/ast_tester/testtime.f new file mode 100644 index 0000000..39c4b9a --- /dev/null +++ b/ast/ast_tester/testtime.f @@ -0,0 +1,979 @@ + program testtime + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'AST_ERR' + + character txt*40 + double precision xin, xout, xout2, ct, ctl, origin + integer status, tf, tf1, tf2, fs, n, chr_len, nc + status = sai__ok + + call ast_begin( status ) + +c call ast_SetWatchId( 740050 ) + +c +c Test default attribute values +c + tf = ast_timeframe( ' ', status ) + + if( ast_getc( tf, 'System', status ) .ne. 'MJD' ) then + write(*,*) ast_getc( tf, 'System', status ) + call stopit( status, 'error 1' ) + endif + + if( ast_getd( tf, 'TimeOrigin', status ) .ne. 0.0 ) then + write(*,*) ast_getd( tf, 'TimeOrigin', status ) + call stopit( status, 'error 2' ) + endif + + if( ast_getc( tf, 'ObsLon', status ) .ne. 'E0:00:00.00' ) then + write(*,*) ast_getc( tf, 'ObsLon', status ) + call stopit( status, 'error 3' ) + endif + + if( ast_getc( tf, 'ObsLat', status ) .ne. 'N0:00:00.00' ) then + write(*,*) ast_getc( tf, 'ObsLat', status ) + call stopit( status, 'error 4' ) + endif + + if( ast_getc( tf, 'TimeScale', status ) .ne. 'TAI' ) then + write(*,*) ast_getc( tf, 'TimeScale', status ) + call stopit( status, 'error 5' ) + endif + + if( ast_getc( tf, 'AlignTimeScale', status ) .ne. 'TAI' ) then + write(*,*) ast_getc( tf, 'AlignTimeScale', status ) + call stopit( status, 'error 6' ) + endif + + if( ast_geti( tf, 'naxes', status ) .ne. 1 ) then + write(*,*) ast_getc( tf, 'Naxes', status ) + call stopit( status, 'error 7' ) + endif + + if( ast_getd( tf, 'Epoch', status ) .ne. 2000.0 ) then + write(*,*) ast_getd( tf, 'Epoch', status ) + call stopit( status, 'error 8' ) + endif + + if( ast_getc( tf, 'Label', status ) .ne. + : 'Modified Julian Date' ) then + write(*,*) ast_getc( tf, 'Label', status ) + call stopit( status, 'error 9' ) + endif + + if( ast_getc( tf, 'Symbol', status ) .ne. 'MJD' ) then + write(*,*) ast_getc( tf, 'Symbol', status ) + call stopit( status, 'error 10' ) + endif + + if( ast_getc( tf, 'Title', status ) .ne. + : 'Modified Julian Date' ) then + write(*,*) ast_getc( tf, 'Title', status ) + call stopit( status, 'error 11' ) + endif + + if( ast_getc( tf, 'unit', status ) .ne. 'd' ) then + write(*,*) ast_getc( tf, 'unit', status ) + call stopit( status, 'error 12' ) + endif + + if( ast_getc( tf, ' domain ', status ) .ne. 'TIME' ) then + write(*,*) ast_getc( tf, ' domain ', status ) + call stopit( status, 'error 13' ) + endif + + if( ast_getc( tf, 'alignSystem', status ) .ne. 'MJD' ) then + write(*,*) ast_getc( tf, 'alignSystem', status ) + call stopit( status, 'error 14' ) + endif + +c +c Test dependency of default attribute values on System +c + call ast_setc( tf, 'system', 'jd', status ) + + if( ast_getc( tf, 'System', status ) .ne. 'JD' ) then + write(*,*) ast_getc( tf, 'System', status ) + call stopit( status, 'error 1b' ) + endif + + if( ast_getd( tf, 'TimeOrigin', status ) .ne. 0.0 ) then + write(*,*) ast_getd( tf, 'TimeOrigin', status ) + call stopit( status, 'error 2b' ) + endif + + if( ast_getc( tf, 'ObsLon', status ) .ne. 'E0:00:00.00' ) then + write(*,*) ast_getc( tf, 'ObsLon', status ) + call stopit( status, 'error 3b' ) + endif + + if( ast_getc( tf, 'ObsLat', status ) .ne. 'N0:00:00.00' ) then + write(*,*) ast_getc( tf, 'ObsLat', status ) + call stopit( status, 'error 4b' ) + endif + + if( ast_getc( tf, 'TimeScale', status ) .ne. 'TAI' ) then + write(*,*) ast_getc( tf, 'TimeScale', status ) + call stopit( status, 'error 5b' ) + endif + + if( ast_getc( tf, 'AlignTimeScale', status ) .ne. 'TAI' ) then + write(*,*) ast_getc( tf, 'AlignTimeScale', status ) + call stopit( status, 'error 6b' ) + endif + + if( ast_geti( tf, 'naxes', status ) .ne. 1 ) then + write(*,*) ast_getc( tf, 'Naxes', status ) + call stopit( status, 'error 7b' ) + endif + + if( ast_getd( tf, 'Epoch', status ) .ne. 2000.0 ) then + write(*,*) ast_getd( tf, 'Epoch', status ) + call stopit( status, 'error 8b' ) + endif + + if( ast_getc( tf, 'Label', status ) .ne. + : 'Julian Date' ) then + write(*,*) ast_getc( tf, 'Label', status ) + call stopit( status, 'error 9b' ) + endif + + if( ast_getc( tf, 'Symbol', status ) .ne. 'JD' ) then + write(*,*) ast_getc( tf, 'Symbol', status ) + call stopit( status, 'error 10b' ) + endif + + if( ast_getc( tf, 'Title', status ) .ne. + : 'Julian Date' ) then + write(*,*) ast_getc( tf, 'Title', status ) + call stopit( status, 'error 11b' ) + endif + + if( ast_getc( tf, 'unit', status ) .ne. 'd' ) then + write(*,*) ast_getc( tf, 'unit', status ) + call stopit( status, 'error 12b' ) + endif + + if( ast_getc( tf, ' domain ', status ) .ne. 'TIME' ) then + write(*,*) ast_getc( tf, ' domain ', status ) + call stopit( status, 'error 13b' ) + endif + + if( ast_getc( tf, 'alignSystem', status ) .ne. 'MJD' ) then + write(*,*) ast_getc( tf, 'alignSystem', status ) + call stopit( status, 'error 14b' ) + endif + + + + call ast_setc( tf, 'system', 'jepoch', status ) + + if( ast_getc( tf, 'System', status ) .ne. 'JEPOCH' ) then + write(*,*) ast_getc( tf, 'System', status ) + call stopit( status, 'error 1c' ) + endif + + if( ast_getd( tf, 'TimeOrigin', status ) .ne. 0.0 ) then + write(*,*) ast_getd( tf, 'TimeOrigin', status ) + call stopit( status, 'error 2c' ) + endif + + if( ast_getc( tf, 'ObsLon', status ) .ne. 'E0:00:00.00' ) then + write(*,*) ast_getc( tf, 'ObsLon', status ) + call stopit( status, 'error 3c' ) + endif + + if( ast_getc( tf, 'ObsLat', status ) .ne. 'N0:00:00.00' ) then + write(*,*) ast_getc( tf, 'ObsLat', status ) + call stopit( status, 'error 4c' ) + endif + + if( ast_getc( tf, 'TimeScale', status ) .ne. 'TAI' ) then + write(*,*) ast_getc( tf, 'TimeScale', status ) + call stopit( status, 'error 5c' ) + endif + + if( ast_getc( tf, 'AlignTimeScale', status ) .ne. 'TAI' ) then + write(*,*) ast_getc( tf, 'AlignTimeScale', status ) + call stopit( status, 'error 6c' ) + endif + + if( ast_geti( tf, 'naxes', status ) .ne. 1 ) then + write(*,*) ast_getc( tf, 'Naxes', status ) + call stopit( status, 'error 7c' ) + endif + + if( ast_getd( tf, 'Epoch', status ) .ne. 2000.0 ) then + write(*,*) ast_getd( tf, 'Epoch', status ) + call stopit( status, 'error 8c' ) + endif + + if( ast_getc( tf, 'Label', status ) .ne. + : 'Julian Epoch' ) then + write(*,*) ast_getc( tf, 'Label', status ) + call stopit( status, 'error 9c' ) + endif + + if( ast_getc( tf, 'Symbol', status ) .ne. 'JEP' ) then + write(*,*) ast_getc( tf, 'Symbol', status ) + call stopit( status, 'error 10c' ) + endif + + if( ast_getc( tf, 'Title', status ) .ne. + : 'Julian Epoch' ) then + write(*,*) ast_getc( tf, 'Title', status ) + call stopit( status, 'error 11c' ) + endif + + if( ast_getc( tf, 'unit', status ) .ne. 'yr' ) then + write(*,*) ast_getc( tf, 'unit', status ) + call stopit( status, 'error 12c' ) + endif + + if( ast_getc( tf, ' domain ', status ) .ne. 'TIME' ) then + write(*,*) ast_getc( tf, ' domain ', status ) + call stopit( status, 'error 13c' ) + endif + + if( ast_getc( tf, 'alignSystem', status ) .ne. 'MJD' ) then + write(*,*) ast_getc( tf, 'alignSystem', status ) + call stopit( status, 'error 14c' ) + endif + + + call ast_setc( tf, 'system', 'bepoch', status ) + + if( ast_getc( tf, 'System', status ) .ne. 'BEPOCH' ) then + write(*,*) ast_getc( tf, 'System', status ) + call stopit( status, 'error 1d' ) + endif + + if( ast_getd( tf, 'TimeOrigin', status ) .ne. 0.0 ) then + write(*,*) ast_getd( tf, 'TimeOrigin', status ) + call stopit( status, 'error 2d' ) + endif + + if( ast_getc( tf, 'ObsLon', status ) .ne. 'E0:00:00.00' ) then + write(*,*) ast_getc( tf, 'ObsLon', status ) + call stopit( status, 'error 3d' ) + endif + + if( ast_getc( tf, 'ObsLat', status ) .ne. 'N0:00:00.00' ) then + write(*,*) ast_getc( tf, 'ObsLat', status ) + call stopit( status, 'error 4d' ) + endif + + if( ast_getc( tf, 'TimeScale', status ) .ne. 'TT' ) then + write(*,*) ast_getc( tf, 'TimeScale', status ) + call stopit( status, 'error 5d' ) + endif + + if( ast_getc( tf, 'AlignTimeScale', status ) .ne. 'TAI' ) then + write(*,*) ast_getc( tf, 'AlignTimeScale', status ) + call stopit( status, 'error 6d' ) + endif + + if( ast_geti( tf, 'naxes', status ) .ne. 1 ) then + write(*,*) ast_getc( tf, 'Naxes', status ) + call stopit( status, 'error 7d' ) + endif + + if( ast_getd( tf, 'Epoch', status ) .ne. 2000.0 ) then + write(*,*) ast_getd( tf, 'Epoch', status ) + call stopit( status, 'error 8d' ) + endif + + if( ast_getc( tf, 'Label', status ) .ne. + : 'Besselian Epoch' ) then + write(*,*) ast_getc( tf, 'Label', status ) + call stopit( status, 'error 9d' ) + endif + + if( ast_getc( tf, 'Symbol', status ) .ne. 'BEP' ) then + write(*,*) ast_getc( tf, 'Symbol', status ) + call stopit( status, 'error 10d' ) + endif + + if( ast_getc( tf, 'Title', status ) .ne. + : 'Besselian Epoch' ) then + write(*,*) ast_getc( tf, 'Title', status ) + call stopit( status, 'error 11d' ) + endif + + if( ast_getc( tf, 'unit', status ) .ne. 'yr' ) then + write(*,*) ast_getc( tf, 'unit', status ) + call stopit( status, 'error 12d' ) + endif + + if( ast_getc( tf, ' domain ', status ) .ne. 'TIME' ) then + write(*,*) ast_getc( tf, ' domain ', status ) + call stopit( status, 'error 13d' ) + endif + + if( ast_getc( tf, 'alignSystem', status ) .ne. 'MJD' ) then + write(*,*) ast_getc( tf, 'alignSystem', status ) + call stopit( status, 'error 14d' ) + endif + +c +c Test dump and load +c + call checkDump( tf, 'CheckDump 1', status ) + +c +c Test CurrentTime method. +c + call ast_set( tf, 'system=jepoch,unit=yr,timescale=utc,'// + : 'timeorigin=0', status ) + n = 0 + + write(*,*) ' Testing astCurrentTime: approx 1 second pause '// + : 'following...' + ctl = ast_currenttime( tf, status ) + 1.0D0/(86400.0D0*365.25D0) + do while( ast_currenttime( tf, status ) .lt. ctl ) + n = n + 1 + if( n .gt. 2000000 ) then + call stopit( status, 'error 15' ) + return + end if + end do + write(*,*) ' 1 second pause finished.' + + +c +c Test behaviour of TimeOrigin attribute +c + tf = ast_timeframe( 'timescale=utc', status ) + origin = ast_currenttime( tf, status ) + call ast_setd( tf, 'TimeOrigin', origin, status ) + write(*,*) ' Testing TimeOrigin: approx 1 second pause '// + : 'following...' + n = 0 + do while( ast_currenttime( tf, status ) .lt. + : 1.0D0/(86400.0D0*364.25D0) ) + n = n + 1 + if( n .gt. 2000000 ) then + call stopit( status, 'error 16' ) + return + end if + end do + write(*,*) ' 1 second pause finished.' + + call ast_set( tf, 'unit=s', status ) + if( abs( ast_getd( tf, 'TimeOrigin', status ) - + : origin*86400.0D0 ) .gt. 0.01 ) then + write(*,*) abs( ast_getd( tf, 'TimeOrigin', status ) - + : origin*86400.0D0 ) + call stopit( status, 'error 17' ) + end if + + +c +c Test conversions between basic systems with arbitrary offsets +c + tf1 = ast_timeframe( 'system=mjd,timeorigin=53000', status ) + tf2 = ast_timeframe( 'system=jd,timeorigin=2453000.5', status ) + fs = ast_convert( tf1, tf2, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'error 18' ) + else if( .not. ast_isaunitmap( ast_getMapping( fs, AST__BASE, + : AST__CURRENT, + : status ), status ) ) then + call stopit( status, 'error 19' ) + end if + + + + tf1 = ast_timeframe( 'system=mjd,timescale=UTC,timeorigin=53000', + : status ) + tf2 = ast_timeframe( 'system=bepoch,timeorigin=2004', status ) + fs = ast_convert( tf1, tf2, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'error 20' ) + else + xin = 100.0D0 + call ast_tran1( fs, 1, xin, .true., xout, status ) + if( abs( xout - 0.2600974092354136D0 ) .gt. 1.0D-10 ) then + call stopit( status, 'error 21' ) + end if + call ast_tran1( fs, 1, xout, .false., xin, status ) + if( abs( xin - 100.0D0 ) .gt. 1.0D-6 ) then + call stopit( status, 'error 21b' ) + end if + end if + + + tf1 = ast_timeframe( 'system=bepoch,timeorigin=0', status ) + if( status .eq.sai__OK ) then + call err_mark + call ast_set( tf1, 'TimeScale=TAI', status ) + if( status .eq. AST__ATTIN ) then + call err_annul( status ) + else + call stopit( status, 'error 21b' ); + endif + + call ast_set( tf1, 'Unit=s', status ) + if( status .eq. AST__ATTIN ) then + call err_annul( status ) + else + call stopit( status, 'error 21c' ); + endif + call err_rlse + endif + + tf2 = ast_timeframe( 'system=jepoch,timescale=tai,'// + : 'timeorigin=100.0', status ) + call ast_set( tf2, 'unit=d', status ) + fs = ast_convert( tf1, tf2, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'error 22' ) + else + xin = 100.0D0 + call ast_tran1( fs, 1, xin, .true., xout, status ) + if( abs( xout - 14.35534169996282 ) .gt. 1.0D-6 ) then + call stopit( status, 'error 23' ) + end if + call ast_tran1( fs, 1, xout, .false., xin, status ) + if( abs( xin - 100.0D0 ) .gt. 1.0D-6 ) then + call stopit( status, 'error 23b' ) + end if + end if + +c Besselian epoch offset from B2000 [TT, yr] + call ast_set( tf1, 'timeorigin=2000', status ) + +c Julian date offset from 2450000.5 days [TDB, h] + call ast_set( tf2, 'system=JD,timescale=TDB,unit=h,'// + : 'timeorigin=2450000.5 d', status ) + + fs = ast_convert( tf1, tf2, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'error 24' ) + else + xin = 0.1 + call ast_tran1( fs, 1, xin, .true., xout, status ) + if( abs( xout - 37933.38284478387D0) .gt. 1.0D-5 ) then + call stopit( status, 'error 25' ) + end if + call ast_tran1( fs, 1, xout, .false., xin, status ) + if( abs( xin - 0.1 ) .gt. 1.0D-10 ) then + call stopit( status, 'error 25b' ) + end if + end if + + +c +c Test Formatting and unformatting +c + tf1 = ast_timeframe( 'system=jepoch,timeorigin=2005.0', status ) + + txt = ast_format( tf1, 1, 100.0D0, status ) + if( txt .ne. '100' ) then + write(*,*) ast_format( tf1, 1, 100.0D0, status ) + call stopit( status, 'error 26' ) + end if + nc = ast_unformat( tf1, 1, txt, xout, status ) + if( nc .ne. len( txt ) .or. xout .ne. 100.0D0 ) then + write(*,*) nc, xout + call stopit( status, 'error 26b' ) + end if + + + + call ast_set( tf1, 'format=iso', status ) + txt = ast_format( tf1, 1, 1.0D0, status ) + if( txt .ne. '2006-01-01' ) then + write(*,*) ast_format( tf1, 1, 1.0D0, status ) + call stopit( status, 'error 27' ) + end if + + nc = ast_unformat( tf1, 1, txt, xout, status ) + if( nc .ne. len( txt ) .or. xout .ne. 1.0D0 ) then + write(*,*) nc, xout + call stopit( status, 'error 27b' ) + end if + + + + call ast_set( tf1, 'format=iso.0', status ) + txt = ast_format( tf1, 1, 1.0D0, status ) + if( txt .ne. '2006-01-01 00:00:00' ) then + write(*,*) ast_format( tf1, 1, 1.0D0, status ) + call stopit( status, 'error 28' ) + end if + + nc = ast_unformat( tf1, 1, txt, xout, status ) + if( nc .ne. len( txt ) .or. xout .ne. 1.0D0 ) then + write(*,*) nc, xout + call stopit( status, 'error 28b' ) + end if + + + + call ast_set( tf1, 'unit=s,format=iso.2', status ) + txt = ast_format( tf1, 1, 10.0D0, status ) + if( txt .ne. '2004-12-31 18:00:10.00' ) then + write(*,*) ast_format( tf1, 1, 10.0D0, status ) + call stopit( status, 'error 29' ) + end if + + nc = ast_unformat( tf1, 1, txt, xout, status ) + if( nc .ne. len( txt ) .or. + : abs( xout - 10.0D0 ) .gt. 1.0E-3 ) then + write(*,*) nc, xout + call stopit( status, 'error 29b' ) + end if + + + + txt = ast_format( tf1, 1, 10.12D0, status ) + if( txt .ne. '2004-12-31 18:00:10.12' ) then + write(*,*) ast_format( tf1, 1, 10.12D0, status ) + call stopit( status, 'error 30' ) + end if + + nc = ast_unformat( tf1, 1, txt, xout, status ) + if( nc .ne. len( txt ) .or. + : abs( xout - 10.12D0 ) .gt. 1.0E-3 ) then + write(*,*) nc, xout + call stopit( status, 'error 30b' ) + end if + + + call ast_set( tf1, 'timescale=utc', status ) + xin = ast_currenttime( tf1, status ) + txt = ast_format( tf1, 1, xin, status ) + write(*,*) ' Current system time (UTC): ', + : txt( : chr_len( txt ) ) + nc = ast_unformat( tf1, 1, txt(:20), xout, status ) + if( nc .ne. 20 .or. abs( xout - xin ) .gt. 1.0E-3 ) then + write(*,*) nc, xout + call stopit( status, 'error 30c' ) + end if + + tf1 = ast_timeframe( 'system=jepoch,timeorigin=2005.0', status ) + nc = ast_unformat( tf1, 1, 'J2005.0', xout, status ) + if( nc .ne. 7 .or. xout .ne. 0.0D0 ) then + write(*,*) nc, xout + call stopit( status, 'error 31' ) + end if + + nc = ast_unformat( tf1, 1, 'J2010.0', xout, status ) + if( nc .ne. 7 .or. xout .ne. 5.0D0 ) then + write(*,*) nc, xout + call stopit( status, 'error 32' ) + end if + + nc = ast_unformat( tf1, 1, '2005-jun-1 12:30 lunch time', xout, + : status ) + if( nc .ne. 17 .or. abs( xout - 0.415525896D0 ) .gt. 1.0E-7 ) then + write(*,*) nc, xout + call stopit( status, 'error 33' ) + end if + + call ast_set( tf1, 'timescale=utc', status ) + nc = ast_unformat( tf1, 1, 'B2001.5 lunch time', xout, + : status ) + if( nc .ne. 8 .or. + : abs( xout + 3.50131054408916D0 ) .gt. 1.0E-10 ) then + write(*,*) nc, xout, abs( xout + 3.50131054408916D0 ) + call stopit( status, 'error 34' ) + end if + + + + + + + tf1 = ast_timeframe( 'system=mjd,timescale=tai', status ) + nc = ast_unformat( tf1, 1, "1977-01-01 00:00:00", xin, status ) + + + tf2 = ast_timeframe( 'system=mjd,timescale=tai,format=iso.6', + : status ) + fs = ast_convert( tf1, tf2, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'error 35' ) + else + call ast_tran1( fs, 1, xin, .true., xout, status ) + txt = ast_format( tf2, 1, xout, status ) + if( txt .ne. '1977-01-01 00:00:00.000000' ) then + write(*,*) txt( :chr_len(txt) ) + call stopit( status, 'error 36' ) + end if + end if + + tf2 = ast_timeframe( 'system=mjd,timescale=utc,format=iso.6', + : status ) + fs = ast_convert( tf1, tf2, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'error 37' ) + else + call ast_tran1( fs, 1, xin, .true., xout, status ) + txt = ast_format( tf2, 1, xout, status ) + if( txt .ne. '1976-12-31 23:59:45.000000' ) then + write(*,*) txt( :chr_len(txt) ) + call stopit( status, 'error 38' ) + end if + end if + + tf2 = ast_timeframe( 'system=mjd,timescale=tt,format=iso.6', + : status ) + fs = ast_convert( tf1, tf2, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'error 39' ) + else + call ast_tran1( fs, 1, xin, .true., xout, status ) + txt = ast_format( tf2, 1, xout, status ) + if( txt .ne. '1977-01-01 00:00:32.184000' ) then + write(*,*) txt( :chr_len(txt) ) + call stopit( status, 'error 40' ) + end if + end if + + tf2 = ast_timeframe( 'system=mjd,timescale=tdb,format=iso.6', + : status ) + fs = ast_convert( tf1, tf2, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'error 41' ) + else + call ast_tran1( fs, 1, xin, .true., xout, status ) + txt = ast_format( tf2, 1, xout, status ) + if( txt .ne. '1977-01-01 00:00:32.183935' ) then + write(*,*) txt( :chr_len(txt) ) + call stopit( status, 'error 42' ) + end if + end if + + tf2 = ast_timeframe( 'system=mjd,timescale=tcb,format=iso.6', + : status ) + fs = ast_convert( tf1, tf2, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'error 43' ) + else + call ast_tran1( fs, 1, xin, .true., xout, status ) + txt = ast_format( tf2, 1, xout, status ) + if( txt .ne. '1977-01-01 00:00:32.184000' ) then + write(*,*) txt( :chr_len(txt) ) + call stopit( status, 'error 44' ) + end if + end if + + tf2 = ast_timeframe( 'system=mjd,timescale=tcg,format=iso.6', + : status ) + fs = ast_convert( tf1, tf2, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'error 45' ) + else + call ast_tran1( fs, 1, xin, .true., xout, status ) + txt = ast_format( tf2, 1, xout, status ) + if( txt .ne. '1977-01-01 00:00:32.184000' ) then + write(*,*) txt( :chr_len(txt) ) + call stopit( status, 'error 46' ) + end if + end if + + + + + tf1 = ast_timeframe( 'system=mjd,timescale=gmst,ObsLon=90,'// + : 'ObsLat=0,timeorigin=53000.0', status ) + tf2 = ast_timeframe( 'system=mjd,timescale=lmst,ObsLon=90,'// + : 'ObsLat=0,timeorigin=53000.0', status ) + fs = ast_convert( tf1, tf2, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'error 47' ) + else + xin = 1.0D0 + call ast_tran1( fs, 1, xin, .true., xout, status ) + if( xout .ne. 1.25D0 ) then + write(*,*) xout + call stopit( status, 'error 48' ) + end if + call ast_tran1( fs, 1, xout, .false., xin, status ) + if( xin .ne. 1.0D0 ) then + write(*,*) xin + call stopit( status, 'error 48b' ) + end if + end if + + +* Test use of DUT1 + tf1 = ast_timeframe( 'system=mjd,timescale=tdb,dut1=0.1', status ) + tf2 = ast_timeframe( 'system=mjd,timescale=last,dut1=0.1', + : status ) + fs = ast_convert( tf1, tf2, ' ', status ) + if( fs .eq. AST__NULL ) then + call stopit( status, 'error 49' ) + else + xin = 53991.675D0 + call ast_tran1( fs, 1, xin, .true., xout, status ) + if( abs(xout - 53998.65344633732D0) .gt. 1.0D-8 ) then + write(*,*) xout + call stopit( status, 'error 50' ) + end if + call ast_tran1( fs, 1, xout, .false., xin, status ) + if( abs( xin - 53991.675D0 ) .gt. 1.0D-8 ) then + write(*,*) xin + call stopit( status, 'error 51' ) + end if + end if + + +* Test use of DTAI + tf1 = ast_timeframe( 'system=mjd,timescale=tai', status ) + tf2 = ast_timeframe( 'system=mjd,timescale=utc', status ) + + fs = ast_convert( tf1, tf2, ' ', status ) + + xin = 57844.0D0 + + if (fs .eq. AST__NULL ) then + call stopit( status, 'error 52' ) + else + call ast_tran1( fs, 1, xin, .true., xout, status) + if (abs(((xin - xout) * 86400.0D0) - 37.0D0) .gt. 1.0D-3) then + write(*,*) xout + call stopit( status, 'error 53' ) + endif + call checkdump( fs, 'CheckDump 2', status ) + end if + + call ast_setd( tf2, 'dtai', 40.0D0, status ) + + fs = ast_convert( tf1, tf2, ' ', status ) + + if (fs .eq. AST__NULL ) then + call stopit( status, 'error 54' ) + else + call ast_tran1( fs, 1, xin, .true., xout, status) + if (abs(((xin - xout) * 86400.0D0) - 40.0D0) .gt. 1.0D-3) then + write(*,*) xout + call stopit( status, 'error 55' ) + endif + call checkdump( fs, 'CheckDump 3', status ) + end if + + + + tf1 = ast_timeframe( 'system=mjd,timescale=tt', status ) + tf2 = ast_timeframe( 'system=mjd,timescale=tdb,dtai=37.0', + : status ) + + fs = ast_convert( tf1, tf2, ' ', status ) + + if (fs .eq. AST__NULL ) then + call stopit( status, 'error 56' ) + else + call ast_tran1( fs, 1, xin, .true., xout, status) + call checkdump( fs, 'CheckDump 4', status ) + end if + + call ast_clear( tf2, 'dtai', status ) + + fs = ast_convert( tf1, tf2, ' ', status ) + + if (fs .eq. AST__NULL ) then + call stopit( status, 'error 57' ) + else + call ast_tran1( fs, 1, xin, .true., xout2, status) + if( xout .ne. xout2 ) then + call stopit( status, 'error 58' ) + end if + end if + + + + + + + call ast_end( status ) +c call ast_listissued( 'testtime' ) + + + + if( status .eq. sai__ok ) then + write(*,*) 'All timeFrame tests passed' + else + write(*,*) 'timeFrame tests failed' + end if + + end + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + + end + + + subroutine checkdump( obj, text, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + character text*(*) + integer obj, status, next, end, ch, result, ll, overlap, map, + : map1, map2 + external mysource, mysink + character buf*25000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + ch = ast_channel( mysource, mysink, ' ', status ) + + + ll = 110 + next = 1 + if( ast_write( ch, obj, status ) .ne.1 ) then + write(*,*) text + call stopit( status, 'Cannot write supplied object to '// + : 'channel' ) + end if + + next = 1 + result = ast_read( ch, status ) + if( result .eq. ast__null ) then + write(*,*) text + call stopit( status, 'Cannot read object from channel' ) + end if + + + if( ast_isatimeframe( obj, status ) ) then + if( ast_getd( obj, 'timeorigin', status ) .ne. + : ast_getd( result, 'timeorigin', status ) .or. + : ast_getc( obj, 'timescale', status ) .ne. + : ast_getc( result, 'timescale', status ) .or. + : ast_getc( obj, 'ObsLon', status ) .ne. + : ast_getc( result, 'ObsLon', status ) .or. + : ast_getc( obj, 'ObsLat', status ) .ne. + : ast_getc( result, 'ObsLat', status ) .or. + : ast_getc( obj, 'Dtai', status ) .ne. + : ast_getc( result, 'Dtai', status ) ) then + call ast_Show( obj, status ) + call ast_Show( result, status ) + write(*,*) text + call stopit( status, 'Object has changed' ) + end if + else if( ast_isamapping( obj, status ) ) then + if( ast_isaframeset( obj, status ) ) then + map1 = ast_getmapping( obj, ast__base, ast__current, + : status ) + map2 = ast_getmapping( result, ast__base, ast__current, + : status ) + else + map1 = ast_clone( obj, status ) + map2 = ast_clone( result, status ) + end if + + call ast_invert( map2, status ) + map = ast_simplify( ast_cmpmap( map1, map2, .true., ' ', + : status ), + : status ) + if( .not. ast_isaunitmap( map, status ) ) then + write(*,*) text + call ast_show( map1, status ) + call ast_invert( map2, status ) + call ast_show( map2, status ) + + call stopit( status, 'Mapping has changed' ) + endif + end if + + end + + subroutine sink1( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + logical fsfound, done + common /sink1com/ fsfound, done + + integer status, l + character line*200 + + if( status .ne. sai__ok ) return + call ast_getline( line, l, status ) + + if( index( line( : l ),'Unc =' ) .GT. 0 ) then + done = .true. + + else if( .not. done .and. + : index( line( : l ),'FrameSet' ) .GT. 0 ) then + fsfound= .true. + end if + + end + + subroutine mysource( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, ll + character buf*25000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + if( next .ge. end ) then + call ast_putline( buf, -1, status ) + else + call ast_putline( buf( next : ), ll, status ) + endif + + next = next + ll + + end + + subroutine mysink( status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer status, next, end, f, l, ll + character buf*25000 + character line*1000 + + common /ss1/ buf + common /ss2/ next, end, ll + + if( status .ne. sai__ok ) return + + line = ' ' + call ast_getline( line, l, status ) + call chr_fandl( line( : l ), f, l ) + buf( next : ) = line( f : l ) + l = l - f + 1 + + if( next + ll - 1 .ge. 25000 ) then + write(*,*) + call stopit( status, 'Buffer overflow in mysink!!' ) + else if( l .gt. ll ) then + write(*,*) + write(*,*) buf( next : next + l) + write(*,*) 'Line length ',l + call stopit( status, 'Line overflow in mysink!!' ) + else + end = next + l + buf( end : next + ll - 1 ) = ' ' + endif + + next = next + ll + + end + + diff --git a/ast/ast_tester/testtrangrid.f b/ast/ast_tester/testtrangrid.f new file mode 100644 index 0000000..b867291 --- /dev/null +++ b/ast/ast_tester/testtrangrid.f @@ -0,0 +1,276 @@ + program testtrangrid + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'PRM_PAR' + + integer status, i, m, outp(4), inp(4), c1, c2, c3, c4, fc, fs + double precision at(4), r, mat(4), b1(2), b2(2), a1(2), + : a2(4) + character cards(9)*80 + + status = sai__ok + + at(1) = 10.0D0 + at(2) = 1.2D6 + +* UnitMap + m = ast_unitmap( 2, ' ', status ) + call testmap( m, 1, 0.5D0, status ) + +* ZoomMap + m = ast_zoommap( 2, 2.0D0, ' ', status ) + call testmap( m, 2, 0.5D0, status ) + +* MatrixMap + m = ast_matrixmap( 2, 2, 2, mat, ' ', status ) + call testmap( m, 3, 0.5D0, status ) + +* PermMap + outp(1)=2 + outp(2)=1 + inp(1)=2 + inp(2)=1 + m = ast_permmap( 2, inp, 2, outp, 0.0D0, ' ', status ) + call testmap( m, 4, 0.5D0, status ) + +* TranMap + a1( 1 ) = 0.0D0 + a1( 2 ) = 0.0D0 + a2( 1 ) = 1.0D0 + a2( 2 ) = 1.0D0 + b1( 1 ) = 0.5D0 + b1( 2 ) = 0.5D0 + b2( 1 ) = 2.5D0 + b2( 2 ) = 2.5D0 + c1 = ast_winmap( 2, a1, a2, b1, b2, ' ', status ) + c2 = ast_copy( c1, status ) + + m = ast_tranmap( c1, c2, ' ', status ) + call testmap( m, 5, 0.5D0, status ) + +* 3D CmpMap + mat(1) = -1.0D0 + c1 = ast_shiftmap( 1, mat, ' ', status ) + mat(1)= 1.0D0 + mat(2)= 2.0D0 + mat(3)= -2.0D0 + mat(4)= 3.0D0 + c2 = ast_matrixmap( 2, 2, 0, mat, ' ', status ) + c3 = ast_cmpmap( c1, c2, 0, ' ', status ) + + outp(1) = 3 + outp(2) = 2 + outp(3) = 1 + inp(1) = 3 + inp(2) = 2 + inp(3) = 1 + c1 = ast_permmap( 3, inp, 3, outp, 0.0D0, ' ', status ) + c2 = ast_ZoomMap( 3, 0.25D0, ' ', status ) + call ast_invert( c2, status ) + + c4 = ast_cmpmap( c1, c2, 1, ' ', status ) + call ast_invert( c4, status ) + + m = ast_cmpmap( c3, c4, 1, ' ', status ) + call testmap( m, 6, 0.5D0, status ) + + + +* 1D non-linear Mapping + m = ast_mathmap( 1, 1, 1, 'y=x**3', 1, + : 'x=sign((abs(y)**(1/3)),y)', ' ', status ) + call testmap( m, 7, 0.0001D0, status ) + + + +* A FITS-WCS pixel->sky mapping + cards(1) = 'CTYPE1 = ''RA---TAN''' + cards(2) = 'CTYPE2 = ''DEC--TAN''' + cards(3) = 'CRPIX1 = 20' + cards(4) = 'CRPIX2 = 20' + cards(5) = 'CRVAL1 = 0.0' + cards(6) = 'CRVAL2 = 0.0' + cards(7) = 'CROTA1 = 30.0' + cards(8) = 'CDELT1 = -0.001' + cards(9) = 'CDELT2 = 0.001' + + fc = ast_fitschan( ast_null, ast_null, ' ', status ) + do i = 1, 9 + call ast_putfits( fc, cards(i), .false., status ) + end do + call ast_clear( fc, 'card', status ) + fs = ast_read( fc, status ) + + call testmap( fs, 8, 0.0001D0, status ) + + + + + + + + + + if( status .eq. sai__ok ) then + write(*,*) 'All AST_TRANGRID tests passed' + else + write(*,*) 'AST_TRANGRID tests failed' + end if + + end + + + + + + subroutine testmap( map, itest, tol, status ) + implicit none + include 'SAE_PAR' + + integer status, maxpix, itest, map + double precision tol + + if( status .ne. sai__ok ) return + + maxpix = 100 + call testgridpair( map, tol, maxpix, itest*10, status ) + call testgridpair( map, 0.0D0, maxpix, itest*10+2, status ) + + maxpix = 4 + call testgridpair( map, tol, maxpix, itest*10+4, status ) + call testgridpair( map, 0.0D0, maxpix, itest*10+6, status ) + + end + + + + + subroutine testgridpair( map, tol, maxpix, itest, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + integer status, lbnd( 3 ), ubnd( 3 ), nin, nout, i, outdim, + : maxpix, itest, size, pos(3), j, map, lbndi(3), ubndi(3) + logical fwd + double precision tol, xl(3), xu(3), dlbndi(3), dubndi(3), + : dlbnd(3), dubnd(3) + + data lbnd / -6, 0, 10 / + data ubnd / 15, 30, 40/ + + if( status .ne. sai__ok ) return + + + nin = ast_geti( map, 'nin', status ) + nout = ast_geti( map, 'nout', status ) + + outdim = 1 + do i = 1, nin + outdim = outdim*( ubnd( i ) - lbnd( i ) + 1 ) + dlbnd( i ) = lbnd( i ) + dubnd( i ) = ubnd( i ) + end do + + call testgrid( map, nin, lbnd, ubnd, tol, maxpix, .true., nout, + : outdim, itest, status ) + + outdim = 1 + do i = 1, nout + call ast_mapbox( map, dlbnd, dubnd, .true., i, dlbndi(i), + : dubndi(i), xl, xu, status ) + lbndi( i ) = dlbndi( i ) + ubndi( i ) = dubndi( i ) + outdim = outdim*( ubndi( i ) - lbndi( i ) + 1 ) + end do + + call testgrid( map, nout, lbndi, ubndi, tol, maxpix, .false., nin, + : outdim, itest + 1, status ) + + + end + + + + + + subroutine testgrid( map, nin, lbnd, ubnd, tol, maxpix, fwd, nout, + : outdim, itest, status ) + implicit none + include 'SAE_PAR' + + integer MAXPNT + parameter( MAXPNT = 50000 ) + + integer status, lbnd( 3 ), ubnd( 3 ), nin, nout, i, outdim, + : maxpix, itest, pos(3), j, map + logical fwd + double precision tol, out( MAXPNT, 3 ), in( MAXPNT, 3 ) + + if( status .ne. sai__ok ) return + +* Check arrays are not over full + if( outdim .gt. MAXPNT ) then + status = sai__error + write(*,*) 'Array length exceeded in TESTTRANGRID:TESTGRID' + return + end if + +* Create a regular grid of positions within the input space of the +* Mapping, and transform it to the output space of the Mapping. + call ast_trangrid( map, nin, lbnd, ubnd, tol, maxpix, fwd, + : nout, MAXPNT, out, status ) + +* Convert the transformed output positions back into the input space. + call ast_trann( map, outdim, nout, MAXPNT, out, .not. fwd, nin, + : MAXPNT, in, status ) + +* Check the input space positions are close to a regular grid. + if( status .eq. sai__ok ) then + + do i = 1, nin + pos( i ) = lbnd( i ) + end do + + do j = 1, outdim + + do i = 1, nin + + if( pos( i ) .ne. 0 ) then + if( abs( in( j, i ) - pos( i ) ) .gt. + : 1.0E-6*abs( 0.5*( in( j, i ) + pos( i ) ) ) ) then + status = sai__error + write(*,*) 'Test ',itest,' failed at point ',j, + : ' axis ',i,': ',in( j, i ), + : ' should be ',pos(1) + return + end if + else + if( abs( in( j, i ) ) .gt. 1.0E-5 ) then + status = sai__error + write(*,*) 'Test ',itest,' failed at point ',j, + : ' axis ',i,': ',in( j, i ), + : ' should be ', pos(i) + return + end if + end if + end do + + pos( 1 ) = pos( 1 ) + 1 + if( pos( 1 ) .gt. ubnd( 1 ) ) then + pos( 1 ) = lbnd( 1 ) + if( nin .gt. 1 ) then + pos( 2 ) = pos( 2 ) + 1 + if( pos( 2 ) .gt. ubnd( 2 ) ) then + pos( 2 ) = lbnd( 2 ) + if( nin .gt. 2 ) then + pos( 3 ) = pos( 3 ) + 1 + end if + end if + end if + end if + end do + end if + + end diff --git a/ast/ast_tester/testunitnormmap.f b/ast/ast_tester/testunitnormmap.f new file mode 100644 index 0000000..4437f2c --- /dev/null +++ b/ast/ast_tester/testunitnormmap.f @@ -0,0 +1,324 @@ + program testunitnormmap + implicit none + + include 'AST_PAR' + include 'SAE_PAR' + + integer status, map, cmpmap, smap, invmap, nin, i + logical good, differ + double precision norm, frompos(3), centre(3), topos(4) + + data centre /-1.0D0, 1.0D0, 2.0D0 /, + : frompos /-22.0D0, 3.0D0, 0.5D0/ + + + status = sai__ok + call err_mark( status ) + call ast_begin( status ) + + do nin = 1, 3 + map = ast_unitnormmap( nin, centre, ' ', status ) + + if( .not. ast_isaunitnormmap( map, status ) ) + : call stopit( status, 'Error 1' ) + if( .not. ast_isamapping( map, status ) ) + : call stopit( status, 'Error 2' ) + if( ast_geti( map, 'Nin', status ) .ne. nin ) + : call stopit( status, 'Error 3' ) + if( ast_geti( map, 'Nout', status ) .ne. nin+1 ) + : call stopit( status, 'Error 4' ) + if( ast_getl( map, 'IsLinear', status ) ) + : call stopit( status, 'Error 5' ) + + call checkdump( map, status ) + + call checkroundtrip( map, frompos, good, status ) + if( .not. good ) call stopit( status, 'Error 6' ) + + call checkroundtrip( map, centre, good, status ) + if( .not. good ) call stopit( status, 'Error 6' ) + + invmap = ast_copy( map, status ) + call ast_invert( invmap, status ) + cmpmap = ast_cmpmap( map, invmap, .true., ' ', status ) + smap = ast_simplify( cmpmap, status ) + if( .not. ast_isaunitmap( smap, status ) ) + : call stopit( status, 'Error 7' ) + if( ast_geti( smap, 'Nin', status ) .ne. nin ) + : call stopit( status, 'Error 8' ) + + cmpmap = ast_cmpmap( invmap, map, .true., ' ', status ) + smap = ast_simplify( cmpmap, status ) + if( .not. ast_isaunitmap( smap, status ) ) + : call stopit( status, 'Error 9' ) + if( ast_geti( smap, 'Nin', status ) .ne. nin+1 ) + : call stopit( status, 'Error 10' ) + + + call ast_trann( map, 1, nin, 1, frompos, .true., nin+1, + : 1, topos, status ); + + norm = 0.0D0 + do i = 1, nin + norm = norm + (frompos(i)-centre(i))**2 + end do + norm = sqrt( norm ) + + if( differ( norm, topos(nin+1) ) ) + : call stopit( status, 'Error 11' ) + + do i = 1, nin + if( differ( norm*topos(i), frompos(i)-centre(i) ) ) + : call stopit( status, 'Error 12' ) + end do + + end do + + call testsimplify( status ) + + call ast_end( status ) + call err_rlse( status ) + +c call ast_activememory( 'testunitnormmap' ) + call ast_flushmemory( 1 ) + + if( status .eq. sai__ok ) then + write(*,*) 'All UnitNormMap tests passed' + else + write(*,*) 'UnitNormMap tests failed' + end if + + end + + + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + end + + + + + + subroutine checkdump( obj, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer obj, status, stat, ch, result, nin, i + logical differ + double precision in(3), out1(3), out2(3) + + data in /10.0D0, 5.0D0, -12.0D0 / + + if( status .ne. sai__ok ) return + + ch = ast_channel( AST_NULL, AST_NULL, 'SinkFile=testdmp', status ) + + if( ast_write( ch, obj, status ) .ne.1 ) then + call stopit( status, 'Cannot write supplied object to '// + : 'channel' ) + end if + + call ast_clear( ch, 'SinkFile', status ) + call ast_setc( ch, 'SourceFile', 'testdmp', status ) + result = ast_read( ch, status ) + + if( result .eq. ast__null ) then + call stopit( status, 'Cannot read object from channel' ) + end if + + if( .not. ast_isaunitnormmap( result, status ) ) then + call stopit( status, 'Object read from channel is not a '// + : 'UnitNormMap') + else if( ast_geti( result, 'Nin', status ) .ne. + : ast_geti( obj, 'Nin', status ) ) then + call stopit( status, 'UnitNormMap have different Nin values' ) + + else + nin = ast_geti( result, 'Nin', status ) + call ast_trann( result, 1, nin, 1, in, .TRUE., nin+1, 1, out1, + : status ); + call ast_trann( obj, 1, nin, 1, in, .TRUE., nin+1, 1, out2, + : status ); + + do i = 1, nin + if( differ( out2(i), out1(i) ) ) + : call stopit( status, 'Error - Recovered UnitNormMap '// + : 'differs from suppled UnitNormMap' ) + end do + + end if + + call ast_annul( result, status ) + + open( unit=1234, iostat=stat, file='testdmp', status='old') + if (stat == 0) close(1234, status='delete') + + end + + + + subroutine checkroundtrip( map, pos, good, status ) + + implicit none + + include 'SAE_PAR' + include 'AST_PAR' + + logical good, differ + integer status, map, mapinv, cmp, i, nin, nout + double precision pos(*), rtol, atol, out(7), in(7) + + good = .true. + + if( status .ne. sai__ok ) return + + nin = ast_geti( map, 'Nin', status ) + nout = ast_geti( map, 'Nout', status ) + call ast_trann( map, 1, nin, 1, pos, .TRUE., nout, 1, out, + : status ); + call ast_trann( map, 1, nout, 1, out, .FALSE., nin, 1, in, + : status ); + do i = 1, nin + if( differ( in(i), pos(i) ) ) good = .false. + end do + + mapinv = ast_copy( map, status ) + call ast_invert( mapinv, status ) + cmp = ast_cmpmap( map, mapinv, .TRUE., ' ', status ) + + call ast_trann( cmp, 1, nin, 1, pos, .true., nin, 1, in, + : status ); + do i = 1, nin + if( differ( in(i), pos(i) ) ) good = .false. + end do + + end + + + + subroutine testsimplify( status ) + implicit none + + include 'SAE_PAR' + include 'AST_PAR' + + integer status, unm1, unm1inv, unm2, unm2inv, shiftmap, + : winmap1, winmap2, i, j, k, nin, nout, cmpmap, + : cmpmap_simp + double precision centre1(3) + double precision centre2(3) + double precision shift(3) + double precision zeros(3) + double precision ones(3) + double precision a(3) + double precision testpoints(3,4) + double precision outpoints(3,4) + double precision outpoints_simp(3,4) + + integer map1(7), map2(7) + character class(7)*30 + logical differ + + data centre1 /2.0D0, -1.0D0, 0.0D0/, + : centre2 /-1.0D0, 6.0D0, 4.0D0/, + : shift /3.0D0, 7.0D0, -9.0D0/, + : zeros /0.0D0, 0.0D0, 0.0D0/, + : ones /1.0D0, 1.0D0, 1.0D0/, + : testpoints / 1.0D0, 3.0D0, -5.0D0, 2.0D0, 3.0D0, 99.0D0, + : -6.0D0, -5.0D0, -7.0D0, 30.0D0, 21.0D0, 37.0D0 / + + if( status .ne. sai__ok ) return + + unm1 = ast_unitnormmap( 3, centre1, ' ', status ) + unm1inv = ast_copy( unm1, status ) + call ast_setl( unm1inv, 'Invert', .TRUE., status ) + + unm2 = ast_unitnormmap( 3, centre2, ' ', status ) + unm2inv = ast_copy( unm2, status ) + call ast_setl( unm2inv, 'Invert', .TRUE., status ) + + shiftmap = ast_shiftmap(3, shift, ' ', status ) + + do i = 1, 3 + a(i) = ones(i) + shift(i) + end do + winmap1 = ast_winmap( 3, zeros, shift, ones, a, ' ', status ) + + do i = 1, 3 + a(i) = 2*ones(i) + shift(i) + end do + winmap2 = ast_winmap( 3, zeros, shift, ones, a, ' ', status ) + + map1(1) = unm1 + map2(1) = unm2inv + class(1) = 'WinMap' + + map1(2) = shiftmap + map2(2) = unm2 + class(2) = 'UnitNormMap' + + map1(3) = winmap1 + map2(3) = unm1 + class(3) = 'UnitNormMap' + + map1(4) = winmap2 + map2(4) = unm1 + class(4) = 'CmpMap' + + map1(5) = unm1inv + map2(5) = shiftmap + class(5) = 'UnitNormMap' + + map1(6) = unm1inv + map2(6) = winmap1 + class(6) = 'UnitNormMap' + + map1(7) = unm1inv + map2(7) = winmap2 + class(7) = 'CmpMap' + + do i = 1, 7 + cmpmap = ast_cmpmap( map1(i), map2(i), .true., ' ', status ) + cmpmap_simp = ast_simplify( cmpmap, status ) + + if( ast_getc( cmpmap_simp, 'Class', status ) .ne. class(i) ) + : call stopit( status, 'Simplify error 1' ) + + nin = ast_geti( cmpmap, 'Nin', status ) + if( nin .ne. ast_geti( cmpmap_simp, 'Nin', status ) ) + : call stopit( status, 'Simplify error 2' ) + + nout = ast_geti( cmpmap, 'Nout', status ) + if( nout .ne. ast_geti( cmpmap_simp, 'Nout', status ) ) + : call stopit( status, 'Simplify error 3' ) + + call ast_trann( cmpmap, 3, nin, 3, testpoints, .true., nout, + : 3, outpoints, status ) + call ast_trann( cmpmap_simp, 3, nin, 3, testpoints, .true., + : nout, 3, outpoints_simp, status ) + + do j = 1, nout + do k = 1, 3 + if( differ( outpoints(k,j), outpoints_simp(k,j) ) ) + : call stopit( status, 'Simplify error 4' ) + end do + end do + end do + + end + + + logical function differ( aa, bb ) + implicit none + double precision aa, bb, diff + differ = abs( (aa) - (bb) ) .gt. + : abs( 0.5D0*( (aa) + (bb) ) )*1.0D-14 + + end diff --git a/ast/ast_tester/testxmlchan.f b/ast/ast_tester/testxmlchan.f new file mode 100644 index 0000000..51e58ec --- /dev/null +++ b/ast/ast_tester/testxmlchan.f @@ -0,0 +1,246 @@ + program testxmlchan + implicit none + include 'SAE_PAR' + include 'AST_PAR' + include 'testxmlchan_com' + + integer status, obj, i, ifmt, nfmt + character fmt(2)*30 + logical ok + + data nfmt /2/, + : fmt / 'native', 'quoted' / + + status = sai__ok + + call ast_begin( status ) + +* +* Create an AST object. +* + call makeobject( obj, status ) + +* +* Create a normal Channel and write the object out to file1 +* + call chanwrite( obj, 1, status ) + +* +* Test each XML format in turn. + do ifmt = 1, nfmt + +* +* Create an XmlChan and write the object out to file2 using the current +* format. +* + call xmlwrite( obj, 2, fmt( ifmt ), status ) + +* +* Use a new XmlChan to read an object from file2 +* + call xmlread( 2, obj, status ) + +* +* Write this object out to file 3 using a simple Channel. +* + call chanwrite( obj, 3, status ) + +* +* Report an error if the contents of files 1 and 3 differ. +* + ok = .true. + if( filelen( 1 ) .ne. filelen( 3 ) ) then + write(*,*) 'TestXmlChan: files 1 and 3 have different '// + : 'lengths (',filelen( 1 ),',',filelen( 3 ),').' + ok =.false. + else + do i = 1, filelen( 1 ) + if( files( 1, i ) .ne. files( 3, i ) ) then + write(*,*) 'TestXmlChan: Line ',i,' differs in '// + : 'files 1 and 3:' + write(*,*) files( 1, i ) + write(*,*) files( 3, i ) + ok = .false. + go to 10 + end if + end do + end if + + 10 continue + + if( .not. ok ) then + write(*,*) 'TestXmlChan: Test failed on XmlFormat ''', + : fmt(ifmt),'''.' + go to 20 + end if + + end do + + 20 continue + + call ast_end( status ) + + if( ok ) then + write(*,*) 'All XmlChan tests passed' + else + write(*,*) 'XmlChan tests failed' + end if + + end + +* +* Reads line "iline" from internal file "ifile" and returns it to AST using +* the AST_PULINE routine. Then increments "iline" ready for next time. +* + subroutine source( status ) + implicit none + + include 'testxmlchan_com' + + integer status, l, chr_len + + if( iline .le. filelen( ifile ) ) then + l = chr_len( files(ifile,iline) ) + call ast_putline( files(ifile,iline), l, status ) + iline = iline + 1 + else + call ast_putline( ' ', -1, status ) + end if + + end + +* +* Append a line obtained using ast_getline function to the end of the +* internal file indicated by "ifile", and increment the file length. +* + subroutine sink( status ) + implicit none + + include 'testxmlchan_com' + + integer status, l + character line*(linelen) + + call ast_getline( line, l, status ) + if( l .gt. 0 ) then + + if( filelen( ifile ) .ge. mxline ) then + stop 'TestXmlChan: Too many lines sent to sink function' + + else if( l .gt. linelen ) then + stop 'TestXmlChan: Text truncated in sink function' + + else + filelen( ifile ) = filelen( ifile ) + 1 + files( ifile, filelen( ifile ) ) = line(:l) + end if + + end if + + end + +* +* Create an AST object to be used as the test object. +* + subroutine makeobject( obj, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + integer obj, sf, f, m, status + + obj = ast__null + if( status .ne. sai__ok ) return + + sf = Ast_SkyFrame( ' ', status ) + f = Ast_Frame( 2, ' ', status ) + call ast_setc( f, 'title', 'A new title', status ) + m = ast_UnitMap( 2, ' ', status ) + obj = ast_FrameSet( f, ' ', status ) + call ast_addFrame( obj, 1, m, sf, status ) + + end + +* +* Write the supplied object out to the specified internal file using a +* basic Channel. +* + subroutine chanwrite( obj, ifil, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + include 'testxmlchan_com' + + external sink + integer obj, ifil, status, ch + + if( status .ne. sai__ok ) return + + ifile = ifil + filelen( ifil ) = 0 + + ch = ast_channel( ast_null, sink, ' ', status ) + if( ast_write( ch, obj, status ) .ne. 1 ) then + stop 'TestXmlChan: Failed to write object to Channel.' + end if + call ast_annul( ch, status ) + + end + +* +* Write the supplied object out to the specified internal file using an +* XmlChan. +* + subroutine xmlwrite( obj, ifil, fmt, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + include 'testxmlchan_com' + + external sink + integer obj, ifil, status, ch + character fmt*(*) + + if( status .ne. sai__ok ) return + + ifile = ifil + filelen( ifil ) = 0 + + ch = ast_xmlchan( ast_null, sink, 'indent=1,comment=1', + : status ) + call ast_seti( ch, 'xmllength', linelen, status ) + call ast_setc( ch, 'xmlformat', fmt, status ) + if( ast_write( ch, obj, status ) .ne. 1 ) then + stop 'TestXmlChan: Failed to write object to XmlChan.' + end if + call ast_annul( ch, status ) + + end + +* +* Read an object out of the specified internal file using an XmlChan. +* + subroutine xmlread( ifil, obj, status ) + implicit none + include 'SAE_PAR' + include 'AST_PAR' + + include 'testxmlchan_com' + + external source + integer obj, ifil, status, ch + + if( status .ne. sai__ok ) return + + ifile = ifil + iline = 1 + + ch = ast_xmlchan( source, ast_null, ' ', status ) + obj = ast_read( ch, status ) + if( obj .eq. ast__null ) then + stop 'TestXmlChan: Failed to read object from XmlChan.' + end if + call ast_annul( ch, status ) + + end diff --git a/ast/ast_tester/testxmlchan_com b/ast/ast_tester/testxmlchan_com new file mode 100644 index 0000000..3b7500e --- /dev/null +++ b/ast/ast_tester/testxmlchan_com @@ -0,0 +1,13 @@ +* +* Common block declaration used by testxmlchan.f for storing internal +* files and associated info. +* + integer mxline + parameter ( mxline = 500 ) + + integer linelen + parameter ( linelen = 100 ) + + character files( 3, mxline )*(linelen) + integer ifile,iline,filelen( 3 ) + common /files/ files, ifile, iline, filelen diff --git a/ast/ast_tester/testzoommap.f b/ast/ast_tester/testzoommap.f new file mode 100644 index 0000000..0c2afd7 --- /dev/null +++ b/ast/ast_tester/testzoommap.f @@ -0,0 +1,91 @@ + program testzoommap + implicit none + + include 'AST_PAR' + include 'AST_ERR' + include 'SAE_PAR' + + integer zm, cm, status + + status = sai__ok + call ast_begin( status ) + + zm = ast_zoommap( 1, -1.0D0, ' ', status ) + if( .not. ast_test( zm, 'Zoom', status ) ) then + call stopit( status, "Error 1" ); + else if( ast_getd( zm, 'Zoom', status ) .ne. -1.0D0 ) then + call stopit( status, "Error 2" ); + end if + + call ast_clear( zm, 'Zoom', status ) + if( ast_test( zm, 'Zoom', status ) ) then + call stopit( status, "Error 3" ); + else if( ast_getd( zm, 'Zoom', status ) .ne. 1.0D0 ) then + call stopit( status, "Error 4" ); + end if + + call ast_setd( zm, 'Zoom', 2.5D0, status ) + if( .not. ast_test( zm, 'Zoom', status ) ) then + call stopit( status, "Error 5" ); + else if( ast_getd( zm, 'Zoom', status ) .ne. 2.5D0 ) then + call stopit( status, "Error 6" ); + end if + + cm = ast_cmpmap( zm, ast_unitmap( 1, ' ', status ), .TRUE., + : ' ', status ) + + if( .not. ast_test( zm, 'Zoom', status ) ) then + call stopit( status, "Error 7" ); + else if( ast_getd( zm, 'Zoom', status ) .ne. 2.5D0 ) then + call stopit( status, "Error 8" ); + end if + + call err_mark + + call ast_setd( zm, 'Zoom', 1.5D0, status ) + if( status .eq. ast__immut ) then + call err_annul( status ) + else if( status .eq. sai__ok ) then + call stopit( status, "Error 9" ); + else + call stopit( status, "Error 10" ); + end if + + call ast_clear( zm, 'Zoom', status ) + if( status .eq. ast__immut ) then + call err_annul( status ) + else if( status .eq. sai__ok ) then + call stopit( status, "Error 11" ); + else + call stopit( status, "Error 12" ); + end if + + call err_rlse + + call ast_end( status ) + +c call ast_activememory( 'testzoommap' ) + call ast_flushmemory( 1 ) + + if( status .eq. sai__ok ) then + write(*,*) 'All ZoomMap tests passed' + else + write(*,*) 'ZoomMap tests failed' + end if + + end + + + + subroutine stopit( status, text ) + implicit none + include 'SAE_PAR' + integer status + character text*(*) + if( status .ne. sai__ok ) return + status = sai__error + write(*,*) text + end + + + diff --git a/ast/ast_tester/timeplot.attr b/ast/ast_tester/timeplot.attr new file mode 100644 index 0000000..5b43238 --- /dev/null +++ b/ast/ast_tester/timeplot.attr @@ -0,0 +1 @@ +minticklen=0.02,majticklen=0.05,gap(2)=0.1,NumLabGap=0.05,textlabgap=0.1,size=0.9 diff --git a/ast/ast_tester/timeplot.box b/ast/ast_tester/timeplot.box new file mode 100644 index 0000000..c2351b4 --- /dev/null +++ b/ast/ast_tester/timeplot.box @@ -0,0 +1 @@ +0.046 3.0 1.008 3.3 diff --git a/ast/ast_tester/timeplot.head b/ast/ast_tester/timeplot.head new file mode 100644 index 0000000..95ea8d5 --- /dev/null +++ b/ast/ast_tester/timeplot.head @@ -0,0 +1,34 @@ + +COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST +COMMENT AST Beginning of AST data for CmpFrame object AST +COMMENT AST ................................................................ AST +BEGAST_A= 'CmpFrame' / Compound coordinate system description +DOMAIN_A= 'DATAPLOT' / Coordinate system domain +ACTUNT_A= 1 / Unit strings affects alignment +ISA_A = 'Frame ' / Coordinate system description +FRAMEA_A= ' ' / First component Frame +BEGAST_B= 'TimeFrame' / Description of time coordinate system +TITLE_A = 'KAPPA - Trandat' / Title of coordinate system +NAXES_A = 1 / Number of coordinate axes +AX1_A = ' ' / Axis number 1 +BEGAST_C= 'Axis ' / Coordinate axis +FORMAT_A= 'iso.0 ' / Format specifier +ENDAST_A= 'Axis ' / End of object definition +ISA_B = 'Frame ' / Coordinate system description +TMORG_A = 57128.585856 / Time offset +ENDAST_B= 'TimeFrame' / End of object definition +FRAMEB_A= ' ' / Second component Frame +BEGAST_D= 'Frame ' / Coordinate system description +NAXES_B = 1 / Number of coordinate axes +ACTUNT_B= 1 / Unit strings affects alignment +AX1_B = ' ' / Axis number 1 +BEGAST_E= 'Axis ' / Coordinate axis +LABEL_A = 'Data up-loaded' / Axis Label +SYMBOL_A= 'Data ' / Axis symbol +UNIT_A = 'GB ' / Axis units +ENDAST_C= 'Axis ' / End of object definition +ENDAST_D= 'Frame ' / End of object definition +ENDAST_E= 'CmpFrame' / End of object definition +COMMENT AST ................................................................ AST +COMMENT AST End of AST data for CmpFrame object AST +COMMENT AST ---------------------------------------------------------------- AST diff --git a/ast/ast_tester/timj.ast b/ast/ast_tester/timj.ast new file mode 100644 index 0000000..ed011dd --- /dev/null +++ b/ast/ast_tester/timj.ast @@ -0,0 +1,234 @@ + Begin FrameSet +# Title = "FK5 equatorial coordinates; mean equinox J2000.0; gnomonic projection" # Title of coordinate system +# Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Dir1 = 0 # Plot axis 1 in reverse direction + IsA Frame # Coordinate system description + Nframe = 4 # Number of Frames in FrameSet +# Base = 1 # Index of base Frame + Currnt = 4 # Index of current Frame + Nnode = 5 # Number of nodes in FrameSet + Nod1 = 3 # Frame 1 is associated with node 3 + Nod2 = 4 # Frame 2 is associated with node 4 + Nod3 = 5 # Frame 3 is associated with node 5 + Nod4 = 2 # Frame 4 is associated with node 2 + Lnk2 = 1 # Node 2 is derived from node 1 + Lnk3 = 1 # Node 3 is derived from node 1 + Lnk4 = 1 # Node 4 is derived from node 1 + Lnk5 = 1 # Node 5 is derived from node 1 + Frm1 = # Frame number 1 + Begin Frame + Title = "Data grid indices; first pixel at (1,1)" # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "GRID" # Coordinate system domain +# Lbl1 = "Data grid index 1" # Label for axis 1 +# Lbl2 = "Data grid index 2" # Label for axis 2 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 + Ax1 = # Axis number 1 + Begin Axis + Label = "Data grid index 1" # Axis Label + Symbol = "g1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis + Label = "Data grid index 2" # Axis Label + Symbol = "g2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm2 = # Frame number 2 + Begin Frame + Title = "Pixel coordinates; first pixel at (-128.5,-127.5)" # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "PIXEL" # Coordinate system domain +# Lbl1 = "Pixel coordinate 1" # Label for axis 1 +# Lbl2 = "Pixel coordinate 2" # Label for axis 2 +# Uni1 = "pixel" # Units for axis 1 +# Uni2 = "pixel" # Units for axis 2 + Ax1 = # Axis number 1 + Begin Axis + Label = "Pixel coordinate 1" # Axis Label + Symbol = "p1" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + Ax2 = # Axis number 2 + Begin Axis + Label = "Pixel coordinate 2" # Axis Label + Symbol = "p2" # Axis symbol + Unit = "pixel" # Axis units + Format = "%3.1f" # Format specifier + End Axis + End Frame + Frm3 = # Frame number 3 + Begin Frame + Title = "Axis coordinates; first pixel at (384,-381)" # Title of coordinate system + Naxes = 2 # Number of coordinate axes + Domain = "AXIS" # Coordinate system domain +# Lbl1 = "R.A. offset" # Label for axis 1 +# Lbl2 = "Declination offset" # Label for axis 2 +# Uni1 = "arcsec" # Units for axis 1 +# Uni2 = "arcsec" # Units for axis 2 + Ax1 = # Axis number 1 + Begin Axis + Label = "R.A. offset" # Axis Label + Symbol = "a1" # Axis symbol + Unit = "arcsec" # Axis units + End Axis + Ax2 = # Axis number 2 + Begin Axis + Label = "Declination offset" # Axis Label + Symbol = "a2" # Axis symbol + Unit = "arcsec" # Axis units + End Axis + End Frame + Frm4 = # Frame number 4 + Begin SkyFrame +# Title = "FK5 equatorial coordinates; mean equinox J2000.0; gnomonic projection" # Title of coordinate system + Naxes = 2 # Number of coordinate axes +# Domain = "SKY" # Coordinate system domain +# Lbl1 = "Right ascension" # Label for axis 1 +# Lbl2 = "Declination" # Label for axis 2 +# Uni1 = "hh:mm:ss.s" # Units for axis 1 +# Uni2 = "ddd:mm:ss" # Units for axis 2 +# Dir1 = 0 # Plot axis 1 in reverse direction + Ax1 = # Axis number 1 + Begin SkyAxis + End SkyAxis + Ax2 = # Axis number 2 + Begin SkyAxis + End SkyAxis + IsA Frame # Coordinate system description + System = "FK5" # Celestial coordinate system type + Proj = "gnomonic" # Description of sky projection + Epoch = 2002.3821786502 # Julian epoch of observation + Eqnox = 2000 # Julian epoch of mean equinox + End SkyFrame + Map2 = # Mapping between nodes 1 and 2 + Begin CmpMap + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin WinMap + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + Sft1 = -129 # Shift for axis 1 + Sft2 = -128 # Shift for axis 2 + End WinMap + MapB = # Second component Mapping + Begin CmpMap + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap + Nin = 2 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = -1.45444097695548e-05 # Forward matrix value + M1 = 1.45444097695548e-05 # Forward matrix value + Form = "Diagonal" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin WcsMap + Nin = 2 # Number of input coordinates + Invert = 1 # Mapping inverted + IsA Mapping # Mapping between coordinate systems + Type = "TAN" # Gnomonic projection + End WcsMap + MapB = # Second component Mapping + Begin CmpMap + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + InvA = 1 # First Mapping used in inverse direction + MapA = # First component Mapping + Begin SphMap + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + End SphMap + MapB = # Second component Mapping + Begin CmpMap + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin MatrixMap + Nin = 3 # Number of input coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + M0 = 0.425569982779421 # Forward matrix value + M1 = 0.773738866158297 # Forward matrix value + M2 = 0.469274287334386 # Forward matrix value + M3 = -0.519775230563316 # Forward matrix value + M4 = 0.633504670066506 # Forward matrix value + M5 = -0.573154030516038 # Forward matrix value + M6 = -0.740759002274002 # Forward matrix value + M7 = 0 # Forward matrix value + M8 = 0.671770869084113 # Forward matrix value + Form = "Full" # Matrix storage form + End MatrixMap + MapB = # Second component Mapping + Begin CmpMap + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + IsA Mapping # Mapping between coordinate systems + MapA = # First component Mapping + Begin SphMap + Nin = 3 # Number of input coordinates + Nout = 2 # Number of output coordinates + Invert = 0 # Mapping not inverted + IsA Mapping # Mapping between coordinate systems + UntRd = 1 # All input vectors have unit length + End SphMap + MapB = # Second component Mapping + Begin SlaMap + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Nsla = 1 # Number of conversion steps + Sla1 = "FK45Z" # FK4 to FK5 J2000.0 (no PM or parallax) + Sla1a = 2002.38350704493 # Besselian epoch of FK4 coordinates + End SlaMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + End CmpMap + Map3 = # Mapping between nodes 1 and 3 + Begin UnitMap + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + End UnitMap + Map4 = # Mapping between nodes 1 and 4 + Begin WinMap + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Sft1 = -129.5 # Shift for axis 1 + Sft2 = -128.5 # Shift for axis 2 + End WinMap + Map5 = # Mapping between nodes 1 and 5 + Begin WinMap + Nin = 2 # Number of input coordinates + IsA Mapping # Mapping between coordinate systems + Sft1 = 387 # Shift for axis 1 + Scl1 = -3 # Scale factor for axis 1 + Sft2 = -384 # Shift for axis 2 + Scl2 = 3 # Scale factor for axis 2 + End WinMap + End FrameSet diff --git a/ast/ast_tester/timj.fits-aips b/ast/ast_tester/timj.fits-aips new file mode 100644 index 0000000..4fdd94b --- /dev/null +++ b/ast/ast_tester/timj.fits-aips @@ -0,0 +1,11 @@ +CRPIX1 = 129.0 / Reference pixel on axis 1 +CRPIX2 = 128.0 / Reference pixel on axis 2 +CRVAL1 = 309.75469 / Value at ref. pixel on axis 1 +CRVAL2 = 42.381032 / Value at ref. pixel on axis 2 +CTYPE1 = 'RA---TAN' / Type of co-ordinate on axis 1 +CTYPE2 = 'DEC--TAN' / Type of co-ordinate on axis 2 +CDELT1 = -8.3333273E-4 / Pixel size +CDELT2 = 0.00083333273 / Pixel size +CROTA2 = 0.29013902 / Axis rotation +EPOCH = 2000.0 / Epoch of reference equinox +DATE-OBS= '2002-05-20T14:09:36.786' / Date of observation diff --git a/ast/ast_tester/timj.fits-iraf b/ast/ast_tester/timj.fits-iraf new file mode 100644 index 0000000..88c3d94 --- /dev/null +++ b/ast/ast_tester/timj.fits-iraf @@ -0,0 +1,13 @@ +CRPIX1 = 129.0 / Reference pixel on axis 1 +CRPIX2 = 128.0 / Reference pixel on axis 2 +CRVAL1 = 309.75469 / Value at ref. pixel on axis 1 +CRVAL2 = 42.381032 / Value at ref. pixel on axis 2 +CTYPE1 = 'RA---TAN' / Type of co-ordinate on axis 1 +CTYPE2 = 'DEC--TAN' / Type of co-ordinate on axis 2 +CD1_1 = -8.3332205E-4 / Transformation matrix element +CD1_2 = -4.2198799E-6 / Transformation matrix element +CD2_1 = -4.2198799E-6 / Transformation matrix element +CD2_2 = 0.00083332205 / Transformation matrix element +RADECSYS= 'FK5 ' / Reference frame for RA/DEC values +EQUINOX = 2000.0 / Epoch of reference equinox +DATE-OBS= '2002-05-20T14:09:36.786' / Date of observation diff --git a/ast/ast_tester/timj.fits-pc b/ast/ast_tester/timj.fits-pc new file mode 100644 index 0000000..f3bfc6f --- /dev/null +++ b/ast/ast_tester/timj.fits-pc @@ -0,0 +1,16 @@ +PC001001= 1.0 +PC001002= 0.0050638595 +PC002001= -0.0050638595 +PC002002= 1.0 +CDELT1 = -8.3333273E-4 / Pixel scale on axis 1 +CDELT2 = 0.00083333273 / Pixel scale on axis 2 +CRPIX1 = 129.0 / Reference pixel on axis 1 +CRPIX2 = 128.0 / Reference pixel on axis 2 +CRVAL1 = 309.75469 / Value at ref. pixel on axis 1 +CRVAL2 = 42.381032 / Value at ref. pixel on axis 2 +CTYPE1 = 'RA---TAN' / Type of co-ordinate on axis 1 +CTYPE2 = 'DEC--TAN' / Type of co-ordinate on axis 2 +RADECSYS= 'FK5 ' / Reference frame for RA/DEC values +EQUINOX = 2000.0 / Epoch of reference equinox +MJD-OBS = 52414.59 / Modified Julian Date of observation +DATE-OBS= '2002-05-20T14:09:36.786' / Date of observation diff --git a/ast/ast_tester/timj.fits-wcs b/ast/ast_tester/timj.fits-wcs new file mode 100644 index 0000000..f8b3e8a --- /dev/null +++ b/ast/ast_tester/timj.fits-wcs @@ -0,0 +1,39 @@ +WCSAXES = 2 / Number of WCS axes +CRPIX1 = 129.0 / Reference pixel on axis 1 +CRPIX2 = 128.0 / Reference pixel on axis 2 +CRVAL1 = 309.75469 / Value at ref. pixel on axis 1 +CRVAL2 = 42.381032 / Value at ref. pixel on axis 2 +CTYPE1 = 'RA---TAN' / Type of co-ordinate on axis 1 +CTYPE2 = 'DEC--TAN' / Type of co-ordinate on axis 2 +CD1_1 = -8.3332205E-4 / Transformation matrix element +CD1_2 = -4.2198799E-6 / Transformation matrix element +CD2_1 = -4.2198799E-6 / Transformation matrix element +CD2_2 = 0.00083332205 / Transformation matrix element +MJD-OBS = 52414.59 / Modified Julian Date of observation +DATE-OBS= '2002-05-20T14:09:36.786' / Date of observation +RADESYS = 'FK5 ' / Reference frame for RA/DEC values +EQUINOX = 2000.0 / [yr] Epoch of reference equinox +WCSAXESA= 2 / Number of WCS axes +WCSNAMEA= 'PIXEL ' / Reference name for the coord. frame +CRPIX1A = 1.0 / Reference pixel on axis 1 +CRPIX2A = 1.0 / Reference pixel on axis 2 +CRVAL1A = -128.5 / Value at ref. pixel on axis 1 +CRVAL2A = -127.5 / Value at ref. pixel on axis 2 +CTYPE1A = 'p1 ' / Pixel coordinate 1 +CTYPE2A = 'p2 ' / Pixel coordinate 2 +CD1_1A = 1.0 / Transformation matrix element +CD2_2A = 1.0 / Transformation matrix element +CUNIT1A = 'pixel ' / Units for axis 1 +CUNIT2A = 'pixel ' / Units for axis 2 +WCSAXESB= 2 / Number of WCS axes +WCSNAMEB= 'AXIS ' / Reference name for the coord. frame +CRPIX1B = 1.0 / Reference pixel on axis 1 +CRPIX2B = 1.0 / Reference pixel on axis 2 +CRVAL1B = 384.0 / Value at ref. pixel on axis 1 +CRVAL2B = -381.0 / Value at ref. pixel on axis 2 +CTYPE1B = 'a1 ' / R.A. offset +CTYPE2B = 'a2 ' / Declination offset +CD1_1B = -3.0 / Transformation matrix element +CD2_2B = 3.0 / Transformation matrix element +CUNIT1B = 'arcsec ' / Units for axis 1 +CUNIT2B = 'arcsec ' / Units for axis 2 diff --git a/ast/ast_tester/timj.native b/ast/ast_tester/timj.native new file mode 100644 index 0000000..fb54315 --- /dev/null +++ b/ast/ast_tester/timj.native @@ -0,0 +1,217 @@ + +COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST +COMMENT AST WCS information in AST format AST +COMMENT AST See http://www.starlink.ac.uk/ast/ AST +COMMENT AST Beginning of AST data for FrameSet object AST +COMMENT AST ................................................................ AST +BEGAST_A= 'FrameSet' / Set of inter-related coordinate systems +NFRAME_A= 4 / Number of Frames in FrameSet +CURRNT_A= 4 / Index of current Frame +NNODE_A = 5 / Number of nodes in FrameSet +NOD1_A = 3 / Frame 1 is associated with node 3 +NOD2_A = 4 / Frame 2 is associated with node 4 +NOD3_A = 5 / Frame 3 is associated with node 5 +NOD4_A = 2 / Frame 4 is associated with node 2 +LNK2_A = 1 / Node 2 is derived from node 1 +LNK3_A = 1 / Node 3 is derived from node 1 +LNK4_A = 1 / Node 4 is derived from node 1 +LNK5_A = 1 / Node 5 is derived from node 1 +FRM1_A = ' ' / Frame number 1 +BEGAST_B= 'Frame ' / Coordinate system description +TITLE_A = 'Data grid indices; first pixel at (1&' / Title of coordinate system +CONTINUE ',1) ' +NAXES_A = 2 / Number of coordinate axes +DOMAIN_A= 'GRID ' / Coordinate system domain +AX1_A = ' ' / Axis number 1 +BEGAST_C= 'Axis ' / Coordinate axis +LABEL_A = 'Data grid index 1' / Axis Label +SYMBOL_A= 'g1 ' / Axis symbol +UNIT_A = 'pixel ' / Axis units +FORMAT_A= '%3.1f ' / Format specifier +ENDAST_A= 'Axis ' / End of object definition +AX2_A = ' ' / Axis number 2 +BEGAST_D= 'Axis ' / Coordinate axis +LABEL_B = 'Data grid index 2' / Axis Label +SYMBOL_B= 'g2 ' / Axis symbol +UNIT_B = 'pixel ' / Axis units +FORMAT_B= '%3.1f ' / Format specifier +ENDAST_B= 'Axis ' / End of object definition +ENDAST_C= 'Frame ' / End of object definition +FRM2_A = ' ' / Frame number 2 +BEGAST_E= 'Frame ' / Coordinate system description +TITLE_B = 'Pixel coordinates; first pixel at (-&' / Title of coordinate system +CONTINUE '128.5,-127.5)' +NAXES_B = 2 / Number of coordinate axes +DOMAIN_B= 'PIXEL ' / Coordinate system domain +AX1_B = ' ' / Axis number 1 +BEGAST_F= 'Axis ' / Coordinate axis +LABEL_C = 'Pixel coordinate 1' / Axis Label +SYMBOL_C= 'p1 ' / Axis symbol +UNIT_C = 'pixel ' / Axis units +FORMAT_C= '%3.1f ' / Format specifier +ENDAST_D= 'Axis ' / End of object definition +AX2_B = ' ' / Axis number 2 +BEGAST_G= 'Axis ' / Coordinate axis +LABEL_D = 'Pixel coordinate 2' / Axis Label +SYMBOL_D= 'p2 ' / Axis symbol +UNIT_D = 'pixel ' / Axis units +FORMAT_D= '%3.1f ' / Format specifier +ENDAST_E= 'Axis ' / End of object definition +ENDAST_F= 'Frame ' / End of object definition +FRM3_A = ' ' / Frame number 3 +BEGAST_H= 'Frame ' / Coordinate system description +TITLE_C = 'Axis coordinates; first pixel at (38&' / Title of coordinate system +CONTINUE '4,-381) ' +NAXES_C = 2 / Number of coordinate axes +DOMAIN_C= 'AXIS ' / Coordinate system domain +AX1_C = ' ' / Axis number 1 +BEGAST_I= 'Axis ' / Coordinate axis +LABEL_E = 'R.A. offset' / Axis Label +SYMBOL_E= 'a1 ' / Axis symbol +UNIT_E = 'arcsec ' / Axis units (arc-second) +ENDAST_G= 'Axis ' / End of object definition +AX2_C = ' ' / Axis number 2 +BEGAST_J= 'Axis ' / Coordinate axis +LABEL_F = 'Declination offset' / Axis Label +SYMBOL_F= 'a2 ' / Axis symbol +UNIT_F = 'arcsec ' / Axis units (arc-second) +ENDAST_H= 'Axis ' / End of object definition +ENDAST_I= 'Frame ' / End of object definition +FRM4_A = ' ' / Frame number 4 +BEGAST_K= 'SkyFrame' / Description of celestial coordinate system +NAXES_D = 2 / Number of coordinate axes +EPOCH_A = 2002.3822 / Julian epoch of observation +SYSTEM_A= 'FK5 ' / Coordinate system type +AX1_D = ' ' / Axis number 1 +BEGAST_L= 'SkyAxis ' / Celestial coordinate axis +ENDAST_J= 'SkyAxis ' / End of object definition +AX2_D = ' ' / Axis number 2 +BEGAST_M= 'SkyAxis ' / Celestial coordinate axis +ENDAST_K= 'SkyAxis ' / End of object definition +ISA_A = 'Frame ' / Coordinate system description +PROJ_A = 'gnomonic' / Description of sky projection +EQNOX_A = 2000.0 / Julian epoch of mean equinox +ENDAST_L= 'SkyFrame' / End of object definition +MAP2_A = ' ' / Mapping between nodes 1 and 2 +BEGAST_N= 'CmpMap ' / Compound Mapping +NIN_A = 2 / Number of input coordinates +ISA_B = 'Mapping ' / Mapping between coordinate systems +MAPA_A = ' ' / First component Mapping +BEGAST_O= 'WinMap ' / Map one window on to another +NIN_B = 2 / Number of input coordinates +INVERT_A= 0 / Mapping not inverted +ISA_C = 'Mapping ' / Mapping between coordinate systems +SFT1_A = -129.0 / Shift for axis 1 +SFT2_A = -128.0 / Shift for axis 2 +ENDAST_M= 'WinMap ' / End of object definition +MAPB_A = ' ' / Second component Mapping +BEGAST_P= 'CmpMap ' / Compound Mapping +NIN_C = 2 / Number of input coordinates +ISA_D = 'Mapping ' / Mapping between coordinate systems +MAPA_B = ' ' / First component Mapping +BEGAST_Q= 'MatrixMap' / Matrix transformation +NIN_D = 2 / Number of input coordinates +INVERT_B= 0 / Mapping not inverted +ISA_E = 'Mapping ' / Mapping between coordinate systems +M0_A = -1.454441E-5 / Forward matrix value +M1_A = 1.454441E-5 / Forward matrix value +FORM_A = 'Diagonal' / Matrix storage form +ENDAST_N= 'MatrixMap' / End of object definition +MAPB_B = ' ' / Second component Mapping +BEGAST_R= 'CmpMap ' / Compound Mapping +NIN_E = 2 / Number of input coordinates +ISA_F = 'Mapping ' / Mapping between coordinate systems +INVA_A = 1 / First Mapping used in inverse direction +MAPA_C = ' ' / First component Mapping +BEGAST_S= 'WcsMap ' / FITS-WCS sky projection +NIN_F = 2 / Number of input coordinates +INVERT_C= 1 / Mapping inverted +ISA_G = 'Mapping ' / Mapping between coordinate systems +TYPE_A = 'TAN ' / Gnomonic projection +ENDAST_O= 'WcsMap ' / End of object definition +MAPB_C = ' ' / Second component Mapping +BEGAST_T= 'CmpMap ' / Compound Mapping +NIN_G = 2 / Number of input coordinates +ISA_H = 'Mapping ' / Mapping between coordinate systems +INVA_B = 1 / First Mapping used in inverse direction +MAPA_D = ' ' / First component Mapping +BEGAST_U= 'SphMap ' / Cartesian to Spherical mapping +NIN_H = 3 / Number of input coordinates +NOUT_A = 2 / Number of output coordinates +INVERT_D= 0 / Mapping not inverted +ISA_I = 'Mapping ' / Mapping between coordinate systems +UNTRD_A = 1 / All input vectors have unit length +ENDAST_P= 'SphMap ' / End of object definition +MAPB_D = ' ' / Second component Mapping +BEGAST_V= 'CmpMap ' / Compound Mapping +NIN_I = 3 / Number of input coordinates +NOUT_B = 2 / Number of output coordinates +ISA_J = 'Mapping ' / Mapping between coordinate systems +MAPA_E = ' ' / First component Mapping +BEGAST_W= 'MatrixMap' / Matrix transformation +NIN_J = 3 / Number of input coordinates +INVERT_E= 0 / Mapping not inverted +ISA_K = 'Mapping ' / Mapping between coordinate systems +M0_B = 0.42556998 / Forward matrix value +M1_B = 0.77373887 / Forward matrix value +M2_A = 0.46927429 / Forward matrix value +M3_A = -0.51977523 / Forward matrix value +M4_A = 0.63350467 / Forward matrix value +M5_A = -0.57315403 / Forward matrix value +M6_A = -0.740759 / Forward matrix value +M7_A = 0.0 / Forward matrix value +M8_A = 0.67177087 / Forward matrix value +FORM_B = 'Full ' / Matrix storage form +ENDAST_Q= 'MatrixMap' / End of object definition +MAPB_E = ' ' / Second component Mapping +BEGAST_X= 'CmpMap ' / Compound Mapping +NIN_K = 3 / Number of input coordinates +NOUT_C = 2 / Number of output coordinates +ISA_L = 'Mapping ' / Mapping between coordinate systems +MAPA_F = ' ' / First component Mapping +BEGAST_Y= 'SphMap ' / Cartesian to Spherical mapping +NIN_L = 3 / Number of input coordinates +NOUT_D = 2 / Number of output coordinates +INVERT_F= 0 / Mapping not inverted +ISA_M = 'Mapping ' / Mapping between coordinate systems +UNTRD_B = 1 / All input vectors have unit length +ENDAST_R= 'SphMap ' / End of object definition +MAPB_F = ' ' / Second component Mapping +BEGAST_Z= 'SlaMap ' / Conversion between sky coordinate systems +NIN_M = 2 / Number of input coordinates +ISA_N = 'Mapping ' / Mapping between coordinate systems +NSLA_A = 1 / Number of conversion steps +SLA1_A = 'FK45Z ' / FK4 to FK5 J2000.0 (no PM or parallax) +SLA1A_A = 2002.3835 / Besselian epoch of FK4 coordinates +ENDAST_S= 'SlaMap ' / End of object definition +ENDAST_T= 'CmpMap ' / End of object definition +ENDAST_U= 'CmpMap ' / End of object definition +ENDAST_V= 'CmpMap ' / End of object definition +ENDAST_W= 'CmpMap ' / End of object definition +ENDAST_X= 'CmpMap ' / End of object definition +ENDAST_Y= 'CmpMap ' / End of object definition +MAP3_A = ' ' / Mapping between nodes 1 and 3 +BEGASTA_= 'UnitMap ' / Unit (null) Mapping +NIN_N = 2 / Number of input coordinates +ISA_O = 'Mapping ' / Mapping between coordinate systems +ENDAST_Z= 'UnitMap ' / End of object definition +MAP4_A = ' ' / Mapping between nodes 1 and 4 +BEGASTAA= 'WinMap ' / Map one window on to another +NIN_O = 2 / Number of input coordinates +ISA_P = 'Mapping ' / Mapping between coordinate systems +SFT1_B = -129.5 / Shift for axis 1 +SFT2_B = -128.5 / Shift for axis 2 +ENDASTA_= 'WinMap ' / End of object definition +MAP5_A = ' ' / Mapping between nodes 1 and 5 +BEGASTAB= 'WinMap ' / Map one window on to another +NIN_P = 2 / Number of input coordinates +ISA_Q = 'Mapping ' / Mapping between coordinate systems +SFT1_C = 387.0 / Shift for axis 1 +SCL1_A = -3.0 / Scale factor for axis 1 +SFT2_C = -384.0 / Shift for axis 2 +SCL2_A = 3.0 / Scale factor for axis 2 +ENDASTAA= 'WinMap ' / End of object definition +ENDASTAB= 'FrameSet' / End of object definition +COMMENT AST ................................................................ AST +COMMENT AST End of AST data for FrameSet object AST +COMMENT AST ---------------------------------------------------------------- AST diff --git a/ast/ast_tester/tnx.attr b/ast/ast_tester/tnx.attr new file mode 100644 index 0000000..e5498b5 --- /dev/null +++ b/ast/ast_tester/tnx.attr @@ -0,0 +1 @@ +Grid=1,textlabgap=0.1,border=0 diff --git a/ast/ast_tester/tnx.box b/ast/ast_tester/tnx.box new file mode 100644 index 0000000..f69daff --- /dev/null +++ b/ast/ast_tester/tnx.box @@ -0,0 +1 @@ +0.0 0.0 2048.0 4096.0 diff --git a/ast/ast_tester/tnx.head b/ast/ast_tester/tnx.head new file mode 100644 index 0000000..58c6aa0 --- /dev/null +++ b/ast/ast_tester/tnx.head @@ -0,0 +1,180 @@ +SIMPLE = T / Fits standard +BITPIX = 16 / Bits per pixel +NAXIS = 2 / Number of axes +NAXIS1 = 2048 / Axis length +NAXIS2 = 4096 / Axis length +EXTEND = F / File may contain extensions +ORIGIN = 'NOAO-IRAF FITS Image Kernel July 1999' / FITS file originator +DATE = '2001-11-20T16:52:11' / Date FITS file was generated +IRAF-TLM= '16:52:09 (20/11/2001)' / Time of last modification +OBJECT = 'A576 R ' / Name of the object observed +NEXTEND = 8 / Number of extensions +FILENAME= 'obj214r ' / Original host filename +OBSTYPE = 'object ' / Observation type +EXPTIME = 350.000 / Exposure time (sec) +DARKTIME= 351.888 / Dark time (sec) +PREFLASH= 0.000000 / Preflash time (sec) +RADECSYS= 'FK5 ' / Default coordinate system +RA = '07:21:44.00 ' / RA of observation (hr) +DEC = '55:53:16.99 ' / DEC of observation (deg) +EQUINOX = 1.9998000490000E+03 / Equinox of coordinate system + +TIMESYS = 'UTC approximate' / Time system +DATE-OBS= '1999-10-09' / Date of observation start (UTC approximate) +TIME-OBS= '12:08:33.0' / Time of observation start +MJD-OBS = 51460.50593750 / MJD of observation start +MJDHDR = 51460.50591435 / MJD of header creation +LSTHDR = '05:52:50.00 ' / LST of header creation + +OBSERVAT= 'KPNO ' / Observatory +TELESCOP= 'KPNO 0.9 meter telescope' / Telescope +ZD = 2.8469999000000E+01 / Zenith distance +AIRMASS = 1.1400000000000E+00 / Airmass +TELFOCUS= 4414 / Telescope focus +CORRCTOR= 'KPNO 0.9m Corrector' / Corrector Identification +ADC = 'none ' / ADC Identification + +DETECTOR= 'CCDMosaThin1' / Detector +DETSIZE = '[1:8176,1:8192]' / Detector size for DETSEC +NCCDS = 8 / Number of CCDs +NAMPS = 8 / Number of Amplifiers +PIXSIZE1= 15. / Pixel size for axis 1 (microns) +PIXSIZE2= 15. / Pixel size for axis 2 (microns) +PIXSCAL1= 0.423 / Pixel scale for axis 1 (arcsec/pixel) +PIXSCAL2= 0.423 / Pixel scale for axis 2 (arcsec/pixel) +RAPANGL = 0. / Position angle of RA axis (deg) +DECPANGL= 270. / Position angle of DEC axis (deg) +FILPOS = 4 / Filter position +FILTER = 'R ' / Filter name(s) +SHUTSTAT= 'guide ' / Shutter status +TV1FOC = -5.9600000000000E-01 / North TV Camera focus position +TV2FOC = -1.6230000000000E+00 / South Camera focus position +ENVTEM = 1.7299999000000E+01 / Ambient temperature (C) +DEWAR = 'CCDMosaThin1 Dewar' / Dewar identification +DEWTEM1 = -1.7060000600000E+02 / Dewar temperature (C) +DEWTEM2 = -4.7000000000000E+00 / Fill Neck temperature (C) +CCDTEM = -9.5000000000000E+01 / CCD temperature (C) + +CONTROLR= 'Mosaic Arcon' / Controller identification +CONSWV = '2.000 13Feb96 (add mode and group to hdrs)' / Controller softwar +AMPINTEG= 3000 / (ns) Double Correlated Sample time +READTIME= 13200 / (ns) unbinned pixel read time +ARCONWD = 'Obs Thu Aug 19 10:45:52 1999' / Date waveforms last compiled +ARCONWM = 'OverlapXmit EarlyReset SplitShift ' / Waveform mode switches on +ARCONGI = 1 / Gain selection (index into Gain Table) + +OBSERVER= 'G.Wegner,M.Hudson' / Observer(s) +PROPOSER= '<unknown>' / Proposer(s) +PROPOSAL= '<unknown>' / Proposal title +PROPID = '99B-0020' / Proposal identification +OBSID = 'kp09m.19991009T120833' / Observation ID + +IMAGESWV= 'mosdca (Aug99), CCDMosaThin1V8.tcl (Aug99)' / Image creation software +KWDICT = 'MosaicV1.dic (Sep97)' / Keyword dictionary + +CHECKSUM= '<unknown>' / Header checksum +DATASUM = '<unknown>' / Data checksum +CHECKVER= '<unknown>' / Checksum version +RECNO = 0 / NOAO archive sequence number +IMAGEID = 5 / Image identification + +TELRA = '07:21:44.00 ' / RA of observation (hr) +TELDEC = '55:53:16.99 ' / DEC of observation (deg) +TELEQUIN= 1.9998000490000E+03 / Equinox of coordinate system +TELRADEC= 'FK5 ' / Default coordinate system + +CCDNAME = 'SITe #7061FBR03-02 (NOAO 02)' / CCD name +AMPNAME = 'SITe #7061FBR03-02 (NOAO 02), upper left (Amp321)' / Amplifier name +GAIN = 2.3 / gain for amp 321 (e-/ADU) +RDNOISE = 9.5 / read noise for amp 321 (e-) +SATURATE= 22000 / Maximum good data value (ADU) +CONHWV = 'ACEB003_AMP21' / Controller hardware version +ARCONG = 2.3 / gain expected for amp 321 (e-/ADU) +ARCONRN = 5.1 / read noise expected for amp 321 (e-) +BPM = 'mscdb$noao/CCDMosaThin1/bpm_im5' / Bad pixel mask +CCDSIZE = '[1:2048,1:4096]' / CCD size +CCDSUM = '1 1 ' / CCD pixel summing +CCDSEC = '[1:2048,1:4096]' / CCD section +AMPSEC = '[1:2048,4096:1]' / Amplifier section +DETSEC = '[1:2048,4097:8192]' / Detector section + +ATM1_1 = 1. / CCD to amplifier transformation +ATM2_2 = -1. / CCD to amplifier transformation +ATV1 = 0. / CCD to amplifier transformation +ATV2 = 4097. / CCD to amplifier transformation +LTM1_1 = 1.0 / CCD to image transformation +LTM2_2 = 1.0 / CCD to image transformation +DTM1_1 = 1. / CCD to detector transformation +DTM2_2 = 1. / CCD to detector transformation +DTV1 = 0. / CCD to detector transformation +DTV2 = 4096. / CCD to detector transformation + +WCSASTRM= 'kp09m.19980909T031418 (Tr 37 V Mosaic) by L. Davis 1998-09-09' / WCS +WCSDIM = 2 / WCS dimensionality +CTYPE1 = 'RA---TNX' / Coordinate type +CTYPE2 = 'DEC--TNX' / Coordinate type +CRVAL1 = 110.52095558563 / Coordinate reference value +CRVAL2 = 55.842849490386 / Coordinate reference value +CRPIX1 = 4189.77390083542 / Coordinate reference pixel +CRPIX2 = -30.0894072403876 / Coordinate reference pixel +CD1_1 = -7.5733524638274E-7 / Coordinate matrix +CD2_1 = -1.1748235187739E-4 / Coordinate matrix +CD1_2 = 1.17677003379415E-4 / Coordinate matrix +CD2_2 = -1.2623022560872E-6 / Coordinate matrix +WAT0_001= 'system=image' / Coordinate system +WAT1_001= 'wtype=tnx axtype=ra lngcor = "3. 4. 4. 2. 0.005280549145776419 0.488' +WAT1_002= '7181432338267 0.2464122630921897 0.4920677651238937 -0.23529018838' +WAT1_003= '0298 0.004720134828570101 -0.001121960789613695 -0.01414958280730338' +WAT1_004= ' 0.01246754057675834 1.048124909467771E-4 0.007168575568475281 -0.02' +WAT1_005= '778217836490202 -0.01675668830707639 0.02500648596542957 "' +WAT2_001= 'wtype=tnx axtype=dec latcor = "3. 4. 4. 2. 0.005280549145776419 0.48' +WAT2_002= '87181432338267 0.2464122630921897 0.4920677651238937 0.1531926820' +WAT2_003= '595278 -0.002539369349529043 6.454692689700324E-4 4.863689582871599E-' +WAT2_004= '4 0.003549715563706861 -0.002061136945766966 -0.01644646641299351 0.' +WAT2_005= '009061645978984397 0.005570842598401512 -0.02240395721775152 "' +XTALKCOR= '03-Oct-2000 21:33:16 No crosstalk correction' +TRIM = 'Oct 3 21:34 Trim is [1:2048,1:4096]' +FIXPIX = 'Oct 3 21:35 Pixel mask is mscdb$noao/CCDMosaThin1/bpm_im5' +OVERSCAN= 'Oct 3 21:34 Overscan is [2063:2112,1:4096], mean 993.5216' +ZEROCOR = 'Oct 3 21:35 Zero is Zeromed[im5]' +FLATCOR = 'Oct 3 21:35 Flat is FlatR.fits[im5], scale 5081.475' +CCDMEAN = 255.7904 +CCDMEANT= 655076137 +CCDPROC = 'Oct 3 21:35 CCD processing done' +CHIPNUM = 5 +FZEROPT = 22.040344 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +END diff --git a/ast/ast_tester/tsc.attr b/ast/ast_tester/tsc.attr new file mode 100644 index 0000000..496403c --- /dev/null +++ b/ast/ast_tester/tsc.attr @@ -0,0 +1 @@ +border=1 diff --git a/ast/ast_tester/tsc.box b/ast/ast_tester/tsc.box new file mode 100644 index 0000000..45cc65e --- /dev/null +++ b/ast/ast_tester/tsc.box @@ -0,0 +1 @@ +1 1 1600 1600 diff --git a/ast/ast_tester/tsc.head b/ast/ast_tester/tsc.head new file mode 100644 index 0000000..e41aefb --- /dev/null +++ b/ast/ast_tester/tsc.head @@ -0,0 +1,116 @@ +SIMPLE = T +BITPIX = -32 / IEEE (big-endian) 32-bit floating point data +NAXIS = 2 +NAXIS1 = 1600 +NAXIS2 = 1600 +BUNIT = 'JY/BEAM ' +CTYPE1 = 'RA---TSC' +CRPIX1 = 1000 +CDELT1 = -3.666666666667E-01 +CRVAL1 = 0.000000000000E+00 +CTYPE2 = 'DEC--TSC' +CRPIX2 = 800 +CDELT2 = 3.666666666667E-01 +CRVAL2 = -9.000000000000E+01 +LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole +LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole +EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates +BMAJ = 2.399999936422E-01 / Beam major axis in degrees +BMIN = 2.399999936422E-01 / Beam minor axis in degrees +BPA = 0.000000000000E+00 / Beam position angle in degrees +RESTFREQ= 1.420405750000E+09 / Line rest frequency, Hz +HISTORY Parkes Multibeam continuum map +HISTORY Formed on Mon 2004/02/09 02:23:02 GMT by "pksgridzilla" which was +HISTORY compiled on Feb 9 2004 12:08:02 (local time) within +HISTORY AIPS++ version 19.405.00 dated . +HISTORY Polarization mode: A and B aggregated +HISTORY Gridding parameters: +HISTORY Method: WGTMED +HISTORY Clip fraction: 0.000 +HISTORY Tsys weighting: applied +HISTORY Beam weight order: 1 +HISTORY Beam FWHM: 14.4 arcmin +HISTORY Beam normalization: applied +HISTORY Smoothing kernel type: TOP-HAT +HISTORY Kernel FWHM: 12.0 arcmin +HISTORY Cutoff radius: 6.0 arcmin +HISTORY Beam RSS cutoff: 0.0 +HISTORY Input data sets: +HISTORY 97-10-09_0356_193558-66_206a.sdfits +HISTORY 97-10-12_0142_182123-66_193a.sdfits +HISTORY 97-10-12_0151_182707-66_194a.sdfits +HISTORY 97-10-12_0200_183252-66_195a.sdfits +HISTORY 97-11-07_0510_183836-66_196a.sdfits +HISTORY 97-11-07_0519_184420-66_197a.sdfits +HISTORY 97-11-07_0528_185004-66_198a.sdfits +HISTORY 97-11-07_0537_185548-66_199a.sdfits +HISTORY 97-11-07_0546_190132-66_200a.sdfits +HISTORY 97-11-07_0556_190717-66_201a.sdfits +HISTORY 97-11-07_0645_191301-66_202a.sdfits +HISTORY 97-11-07_0654_191845-66_203a.sdfits +HISTORY 97-11-07_0703_192429-66_204a.sdfits +HISTORY 97-11-07_0712_193013-66_205a.sdfits +HISTORY 97-11-07_0724_194142-66_207a.sdfits +HISTORY 97-11-18_0256_193815-66_206c.sdfits +HISTORY 97-11-18_0306_194359-66_207c.sdfits +HISTORY 97-11-19_0447_182341-66_193c.sdfits +HISTORY 97-11-19_0456_182925-66_194c.sdfits +HISTORY 97-11-19_0507_190350-66_200c.sdfits +HISTORY 97-11-19_0516_190934-66_201c.sdfits +HISTORY 97-11-19_0525_191519-66_202c.sdfits +HISTORY 97-11-19_0534_192103-66_203c.sdfits +HISTORY 97-11-19_0544_192647-66_204c.sdfits +HISTORY 97-11-19_0553_193231-66_205c.sdfits +HISTORY 97-11-19_0602_183509-66_195c.sdfits +HISTORY 97-11-19_0612_184053-66_196c.sdfits +HISTORY 97-11-19_0622_184638-66_197c.sdfits +HISTORY 97-11-19_0631_185222-66_198c.sdfits +HISTORY 97-11-19_0640_185806-66_199c.sdfits +HISTORY 98-03-24_2107_193706-66_206b.sdfits +HISTORY 98-03-24_2116_194251-66_207b.sdfits +HISTORY 98-03-25_2020_190826-66_201b.sdfits +HISTORY 98-03-25_2029_191410-66_202b.sdfits +HISTORY 98-03-25_2038_191954-66_203b.sdfits +HISTORY 98-03-25_2047_192538-66_204b.sdfits +HISTORY 98-03-25_2056_193122-66_205b.sdfits +HISTORY 98-03-26_2048_190459-66_200d.sdfits +HISTORY 98-03-27_2034_191627-66_202d.sdfits +HISTORY 98-03-27_2043_192212-66_203d.sdfits +HISTORY 98-03-27_2052_192756-66_204d.sdfits +HISTORY 98-03-27_2102_193340-66_205d.sdfits +HISTORY 98-03-27_2111_193924-66_206d.sdfits +HISTORY 98-03-27_2120_194508-66_207d.sdfits +HISTORY 98-03-27_2130_191043-66_201d.sdfits +HISTORY 98-05-10_2123_182232-66_193b.sdfits +HISTORY 98-05-10_2133_182816-66_194b.sdfits +HISTORY 98-05-10_2142_183400-66_195b.sdfits +HISTORY 98-05-10_2151_183945-66_196b.sdfits +HISTORY 98-05-10_2200_184529-66_197b.sdfits +HISTORY 98-05-10_2209_185113-66_198b.sdfits +HISTORY 98-05-10_2219_185657-66_199b.sdfits +HISTORY 98-05-10_2228_190241-66_200b.sdfits +HISTORY 98-05-13_2132_182450-66_193d.sdfits +HISTORY 98-05-13_2151_183034-66_194d.sdfits +HISTORY 98-05-13_2200_183618-66_195d.sdfits +HISTORY 98-05-13_2210_184202-66_196d.sdfits +HISTORY 98-05-13_2219_184746-66_197d.sdfits +HISTORY 98-05-13_2228_185331-66_198d.sdfits +HISTORY 98-05-13_2237_185915-66_199d.sdfits +HISTORY 98-05-25_1711_182559-66_193e.sdfits +HISTORY 98-05-25_1720_183143-66_194e.sdfits +HISTORY 98-05-25_1729_183727-66_195e.sdfits +HISTORY 98-05-25_1738_184311-66_196e.sdfits +HISTORY 98-05-25_1747_184855-66_197e.sdfits +HISTORY 98-05-25_1756_185439-66_198e.sdfits +HISTORY 98-05-25_1806_190024-66_199e.sdfits +HISTORY 98-05-25_1815_190608-66_200e.sdfits +HISTORY 98-05-25_1824_191152-66_201e.sdfits +HISTORY 98-05-25_1833_191736-66_202e.sdfits +HISTORY 98-05-25_1842_192320-66_203e.sdfits +HISTORY 98-05-25_1851_192905-66_204e.sdfits +HISTORY 98-05-25_1901_193449-66_205e.sdfits +HISTORY 98-05-25_1910_194033-66_206e.sdfits +HISTORY 98-05-25_1919_194617-66_207e.sdfits +HISTORY Original FITS filename "1904-66_TSC.continuum.fits". +HISTORY Noise level of continuum map: 61 mJy (RMS) +END diff --git a/ast/ast_tester/wcsconverter.f b/ast/ast_tester/wcsconverter.f new file mode 100644 index 0000000..9af2e30 --- /dev/null +++ b/ast/ast_tester/wcsconverter.f @@ -0,0 +1,222 @@ + PROGRAM WCSCONVERTER + +* Usage: +* WCSCONVERTER <in file> <encoding> <out file> <attrs> + +* Description: +* Reads a FrameSet from "in file" (as a FITS header if possible, +* otherwise as an AST dump of a FrameSet), and writes out the +* FrameSet to "out file" using the specified encoding. + +* Parameters: +* in file +* A text file containing fits headers or an AST dump of a FrameSet. +* encoding +* The name of a FITS encoding (e.g. "FITS-WCS", "NATIVE", etc), or +* "AST". +* out file +* The output file. Contains an AST dump of the FrameSet if +* "encoding" is "AST", or a set of FITS header cards otherwise. +* attrs +* A list of attribute settings to apply to the FitsChan before +* reading the input headers. + + + IMPLICIT NONE + INCLUDE 'AST_PAR' + EXTERNAL SOURCE, SINK + + INTEGER STATUS, FC, OBJECT, IARGC, CHAN, CHR_LEN, OC + CHARACTER FILE*80, OFILE*80, LINE*255, ENCODING*50 + CHARACTER ATTRS*200 + LOGICAL CDM + + STATUS = 0 +* +* Check command line arguments have been supplied. +* + IF( IARGC() .LT. 3 ) THEN + WRITE(*,*) 'Usage: wcsconverter <in file> <encoding> '// + : '<out file> <attrs>' + RETURN + END IF + +* +* Use object caching to minimise allocation of new memory +* + OC = AST_TUNE( 'ObjectCaching', 1, STATUS ) + IF( OC .NE. 0 ) THEN + WRITE(*,'(A,I6)') 'Default ObjectCaching VALUE is ',OC + END IF + + IF( AST_TUNE( 'ObjectCaching', AST__TUNULL, STATUS ) .NE. 1 ) THEN + WRITE(*,'(A,I6)') 'Set ObjectCaching VALUE is ',OC + END IF + +* +* Create a FitsChan to store the FITS headers. +* + FC = AST_FITSCHAN( AST_NULL, AST_NULL, ' ', STATUS ) + +* +* Apply any attribute settings to the FitsChan. +* + IF( IARGC() .EQ. 4 ) THEN + CALL GETARG( 4, ATTRS ) + CALL AST_SET( FC, ATTRS, STATUS ) + ELSE + ATTRS = ' ' + END IF + +* +* Open the input text file. +* + CALL GETARG( 1, FILE ) + OPEN( UNIT=10, FILE=FILE, STATUS='OLD' ) + +* +* Read each line out of the text file and store it in the FitsChan. +* + CALL ERR_MARK + DO WHILE( .TRUE. ) + READ( 10, '(A)', END = 10 ) LINE + CALL AST_PUTFITS( FC, LINE, 0, STATUS ) + END DO + + 10 CLOSE( 10 ) + +* +* Set the value of CDMatrix, unless it has already been set. +* + IF( .NOT. AST_TEST( FC, 'CDMATRIX', STATUS ) ) THEN + CDM = AST_GETL( FC, 'CDMATRIX', STATUS ) + CALL AST_SETL( FC, 'CDMATRIX', CDM, status ) + END IF + +* +* Attempt to read an Object form the FitsChan. +* + CALL AST_CLEAR( FC, 'CARD', STATUS ) + OBJECT = AST_READ( FC, STATUS ) + + IF( STATUS .NE. 0 ) CALL ERR_ANNUL( STATUS ) + CALL ERR_RLSE + +* If no object was read, attempt to read an object from the text file as +* an AST dump. + IF( OBJECT .EQ. AST__NULL ) THEN + CALL AST_ANNUL( FC, STATUS ) + OPEN( UNIT=10, FILE=FILE, STATUS='OLD' ) + CHAN = AST_CHANNEL( SOURCE, AST_NULL, ' ', STATUS ) + OBJECT = AST_READ( CHAN, STATUS ) + CALL AST_ANNUL( CHAN, STATUS ) + CLOSE( 10 ) + END IF + +* +* Abort if no object was read. +* + IF( OBJECT .EQ. AST__NULL ) THEN + WRITE(*,*) 'wcsconverter: no WCS could be read from ', + : file( : chr_len( file ) ) + RETURN + + +* +* Otherwise write out the object using the specified encoding. +* + ELSE + CALL GETARG( 3, OFILE ) + CALL DELETEFILE( OFILE ) + + CALL GETARG( 2, ENCODING ) + IF( ENCODING .EQ. 'AST' .OR. ENCODING .EQ. 'ast' ) THEN + OPEN( UNIT=10, FILE=OFILE, STATUS='NEW' ) + CHAN = AST_CHANNEL( AST_NULL, SINK, ' ', STATUS ) + IF( AST_WRITE( CHAN, OBJECT, STATUS ) .NE. 1 ) THEN + WRITE(*,*) 'wcsconverter: WCS read from ', + : file( : chr_len( file ) ),' could not be '// + : 'converted to ', + : encoding( : chr_len(encoding ) ),' format.' + END IF + CALL AST_ANNUL( CHAN, STATUS ) + CLOSE( 10 ) + + ELSE + OPEN( UNIT=10, FILE=OFILE, STATUS='NEW' ) + IF( FC .EQ. AST__NULL ) THEN + FC = AST_FITSCHAN( AST_NULL, AST_NULL, ATTRS, STATUS ) + END IF + CALL AST_SETC( FC, 'ENCODING', ENCODING, STATUS ) + CALL AST_CLEAR( FC, 'CARD', STATUS ) + + IF( AST_WRITE( FC, OBJECT, STATUS ) .NE. 1 ) THEN + WRITE(*,*) 'wcsconverter: WCS read from ', + : file( : chr_len( file ) ),' could not be '// + : 'converted to ', + : encoding( : chr_len(encoding ) ),' format.' + ELSE + CALL AST_CLEAR( FC, 'CARD', STATUS ) + DO WHILE( AST_FINDFITS( FC, '%f', LINE, .TRUE., + : STATUS ) ) + WRITE(10,'(A)') LINE( : 80 ) + END DO + END IF + CLOSE( 10 ) + + CALL AST_ANNUL( FC, STATUS ) + + + END IF + CALL AST_ANNUL( OBJECT, STATUS ) + END IF + + + END + + +* +* Delete a file if it exists. +* + SUBROUTINE DELETEFILE( FILNAM ) + IMPLICIT NONE + + CHARACTER FILNAM*(*) + LOGICAL EXISTS + + INQUIRE ( FILE = FILNAM, + : EXIST = EXISTS ) + + IF( EXISTS ) THEN + OPEN ( UNIT=10, FILE=FILNAM, STATUS='OLD' ) + CLOSE ( 10, STATUS='DELETE' ) + END IF + + END + + +* +* SOURCE FUNCTION FOR AST_CHANNEL. +* + SUBROUTINE SOURCE( STATUS ) + IMPLICIT NONE + INTEGER STATUS + CHARACTER BUFFER*200 + READ( 10, '(A)', END=99 ) BUFFER + CALL AST_PUTLINE( BUFFER, LEN( BUFFER ), STATUS ) + RETURN + 99 CALL AST_PUTLINE( BUFFER, -1, STATUS ) + END + +* +* SINK FUNCTION FOR AST_CHANNEL. +* + SUBROUTINE SINK( STATUS ) + IMPLICIT NONE + INTEGER STATUS, L + CHARACTER BUFFER*200 + + CALL AST_GETLINE( BUFFER, L, STATUS ) + IF( L .GT. 0 ) WRITE( 10, '(A)' ) BUFFER( : L ) + + END diff --git a/ast/ast_tester/zpn.attr b/ast/ast_tester/zpn.attr new file mode 100644 index 0000000..d74badf --- /dev/null +++ b/ast/ast_tester/zpn.attr @@ -0,0 +1 @@ +tol=0.0001 diff --git a/ast/ast_tester/zpn.box b/ast/ast_tester/zpn.box new file mode 100644 index 0000000..ee14a3a --- /dev/null +++ b/ast/ast_tester/zpn.box @@ -0,0 +1 @@ +1 1 200.0 200.0 diff --git a/ast/ast_tester/zpn.head b/ast/ast_tester/zpn.head new file mode 100644 index 0000000..a5e90af --- /dev/null +++ b/ast/ast_tester/zpn.head @@ -0,0 +1,136 @@ +SIMPLE = T +BITPIX = -32 / IEEE (big-endian) 32-bit floating point data +NAXIS = 2 +NAXIS1 = 200 +NAXIS2 = 200 +BUNIT = 'JY/BEAM ' +CTYPE1 = 'RA---ZPN' +CRPIX1 = 100 +CDELT1 = -6.666666666667E-02 +CRVAL1 = 0.000000000000E+00 +CTYPE2 = 'DEC--ZPN' +CRPIX2 = 100 +CDELT2 = 6.666666666667E-02 +CRVAL2 = -9.000000000000E+01 +LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole +LATPOLE = -9.000000000000E+01 / Native latitude of celestial pole +PV2_0 = 10.000000000000E-02 / Projection parameter 0 +PV2_1 = 9.750000000000E-01 / Projection parameter 1 +COMMENT PV2_2 = -8.070000000000E-01 / Projection parameter 2 +COMMENT PV2_3 = 3.370000000000E-01 / Projection parameter 3 +COMMENT PV2_4 = -6.500000000000E-02 / Projection parameter 4 +COMMENT PV2_5 = 1.000000000000E-02 / Projection parameter 5 +COMMENT PV2_6 = 3.000000000000E-03 / Projection parameter 6 +COMMENT PV2_7 = -1.000000000000E-03 / Projection parameter 7 +COMMENT PV2_8 = 0.000000000000E+00 / Projection parameter 8 +COMMENT PV2_9 = 0.000000000000E+00 / Projection parameter 9 +COMMENT PV2_10 = 0.000000000000E+00 / Projection parameter 10 +COMMENT PV2_11 = 0.000000000000E+00 / Projection parameter 11 +COMMENT PV2_12 = 0.000000000000E+00 / Projection parameter 12 +COMMENT PV2_13 = 0.000000000000E+00 / Projection parameter 13 +COMMENT PV2_14 = 0.000000000000E+00 / Projection parameter 14 +COMMENT PV2_15 = 0.000000000000E+00 / Projection parameter 15 +COMMENT PV2_16 = 0.000000000000E+00 / Projection parameter 16 +COMMENT PV2_17 = 0.000000000000E+00 / Projection parameter 17 +COMMENT PV2_18 = 0.000000000000E+00 / Projection parameter 18 +COMMENT PV2_19 = 0.000000000000E+00 / Projection parameter 19 +EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates +BMAJ = 2.399999936422E-01 / Beam major axis in degrees +BMIN = 2.399999936422E-01 / Beam minor axis in degrees +BPA = 0.000000000000E+00 / Beam position angle in degrees +RESTFREQ= 1.420405750000E+09 / Line rest frequency, Hz +HISTORY Parkes Multibeam continuum map +HISTORY Formed on Mon 2004/02/09 01:38:20 GMT by "pksgridzilla" which was +HISTORY compiled on Feb 9 2004 12:08:02 (local time) within +HISTORY AIPS++ version 19.405.00 dated . +HISTORY Polarization mode: A and B aggregated +HISTORY Gridding parameters: +HISTORY Method: WGTMED +HISTORY Clip fraction: 0.000 +HISTORY Tsys weighting: applied +HISTORY Beam weight order: 1 +HISTORY Beam FWHM: 14.4 arcmin +HISTORY Beam normalization: applied +HISTORY Smoothing kernel type: TOP-HAT +HISTORY Kernel FWHM: 12.0 arcmin +HISTORY Cutoff radius: 6.0 arcmin +HISTORY Beam RSS cutoff: 0.0 +HISTORY Input data sets: +HISTORY 97-10-09_0356_193558-66_206a.sdfits +HISTORY 97-10-12_0142_182123-66_193a.sdfits +HISTORY 97-10-12_0151_182707-66_194a.sdfits +HISTORY 97-10-12_0200_183252-66_195a.sdfits +HISTORY 97-11-07_0510_183836-66_196a.sdfits +HISTORY 97-11-07_0519_184420-66_197a.sdfits +HISTORY 97-11-07_0528_185004-66_198a.sdfits +HISTORY 97-11-07_0537_185548-66_199a.sdfits +HISTORY 97-11-07_0546_190132-66_200a.sdfits +HISTORY 97-11-07_0556_190717-66_201a.sdfits +HISTORY 97-11-07_0645_191301-66_202a.sdfits +HISTORY 97-11-07_0654_191845-66_203a.sdfits +HISTORY 97-11-07_0703_192429-66_204a.sdfits +HISTORY 97-11-07_0712_193013-66_205a.sdfits +HISTORY 97-11-07_0724_194142-66_207a.sdfits +HISTORY 97-11-18_0256_193815-66_206c.sdfits +HISTORY 97-11-18_0306_194359-66_207c.sdfits +HISTORY 97-11-19_0447_182341-66_193c.sdfits +HISTORY 97-11-19_0456_182925-66_194c.sdfits +HISTORY 97-11-19_0507_190350-66_200c.sdfits +HISTORY 97-11-19_0516_190934-66_201c.sdfits +HISTORY 97-11-19_0525_191519-66_202c.sdfits +HISTORY 97-11-19_0534_192103-66_203c.sdfits +HISTORY 97-11-19_0544_192647-66_204c.sdfits +HISTORY 97-11-19_0553_193231-66_205c.sdfits +HISTORY 97-11-19_0602_183509-66_195c.sdfits +HISTORY 97-11-19_0612_184053-66_196c.sdfits +HISTORY 97-11-19_0622_184638-66_197c.sdfits +HISTORY 97-11-19_0631_185222-66_198c.sdfits +HISTORY 97-11-19_0640_185806-66_199c.sdfits +HISTORY 98-03-24_2107_193706-66_206b.sdfits +HISTORY 98-03-24_2116_194251-66_207b.sdfits +HISTORY 98-03-25_2020_190826-66_201b.sdfits +HISTORY 98-03-25_2029_191410-66_202b.sdfits +HISTORY 98-03-25_2038_191954-66_203b.sdfits +HISTORY 98-03-25_2047_192538-66_204b.sdfits +HISTORY 98-03-25_2056_193122-66_205b.sdfits +HISTORY 98-03-26_2048_190459-66_200d.sdfits +HISTORY 98-03-27_2034_191627-66_202d.sdfits +HISTORY 98-03-27_2043_192212-66_203d.sdfits +HISTORY 98-03-27_2052_192756-66_204d.sdfits +HISTORY 98-03-27_2102_193340-66_205d.sdfits +HISTORY 98-03-27_2111_193924-66_206d.sdfits +HISTORY 98-03-27_2120_194508-66_207d.sdfits +HISTORY 98-03-27_2130_191043-66_201d.sdfits +HISTORY 98-05-10_2123_182232-66_193b.sdfits +HISTORY 98-05-10_2133_182816-66_194b.sdfits +HISTORY 98-05-10_2142_183400-66_195b.sdfits +HISTORY 98-05-10_2151_183945-66_196b.sdfits +HISTORY 98-05-10_2200_184529-66_197b.sdfits +HISTORY 98-05-10_2209_185113-66_198b.sdfits +HISTORY 98-05-10_2219_185657-66_199b.sdfits +HISTORY 98-05-10_2228_190241-66_200b.sdfits +HISTORY 98-05-13_2132_182450-66_193d.sdfits +HISTORY 98-05-13_2151_183034-66_194d.sdfits +HISTORY 98-05-13_2200_183618-66_195d.sdfits +HISTORY 98-05-13_2210_184202-66_196d.sdfits +HISTORY 98-05-13_2219_184746-66_197d.sdfits +HISTORY 98-05-13_2228_185331-66_198d.sdfits +HISTORY 98-05-13_2237_185915-66_199d.sdfits +HISTORY 98-05-25_1711_182559-66_193e.sdfits +HISTORY 98-05-25_1720_183143-66_194e.sdfits +HISTORY 98-05-25_1729_183727-66_195e.sdfits +HISTORY 98-05-25_1738_184311-66_196e.sdfits +HISTORY 98-05-25_1747_184855-66_197e.sdfits +HISTORY 98-05-25_1756_185439-66_198e.sdfits +HISTORY 98-05-25_1806_190024-66_199e.sdfits +HISTORY 98-05-25_1815_190608-66_200e.sdfits +HISTORY 98-05-25_1824_191152-66_201e.sdfits +HISTORY 98-05-25_1833_191736-66_202e.sdfits +HISTORY 98-05-25_1842_192320-66_203e.sdfits +HISTORY 98-05-25_1851_192905-66_204e.sdfits +HISTORY 98-05-25_1901_193449-66_205e.sdfits +HISTORY 98-05-25_1910_194033-66_206e.sdfits +HISTORY 98-05-25_1919_194617-66_207e.sdfits +HISTORY Original FITS filename "1904-66_ZPN.continuum.fits". +HISTORY Noise level of continuum map: 61 mJy (RMS) +END diff --git a/ast/ast_tester/zpx.attr b/ast/ast_tester/zpx.attr new file mode 100644 index 0000000..f073d5c --- /dev/null +++ b/ast/ast_tester/zpx.attr @@ -0,0 +1 @@ +Grid=1,style(grid1)=2,size(textlab2)=2 diff --git a/ast/ast_tester/zpx.head b/ast/ast_tester/zpx.head new file mode 100644 index 0000000..a69353a --- /dev/null +++ b/ast/ast_tester/zpx.head @@ -0,0 +1,153 @@ +SIMPLE = T / Fits standard +BITPIX = 16 / Bits per pixel +NAXIS = 2 / Number of axes +NAXIS1 = 2048 / Axis length +NAXIS2 = 4100 / Axis length +BSCALE = 1.145669E0 / REAL = TAPE*BSCALE + BZERO +BZERO = 3.793600E4 / +EXTEND = F / File may contain extensions +IRAF-TLM= '14:31:18 (18/05/1999)' / Time of last modification +OBJECT = 'VIRGO311' / +ORIGIN = 'KPNO-IRAF' / +DATE = '19/05/99' / +IRAFNAME= 'iraf3432b' / NAME OF IRAF IMAGE FILE +IRAF-MAX= 7.546810E4 / DATA MAX +IRAF-MIN= 4.038996E2 / DATA MIN +IRAF-BPX= 64 / DATA BITS/PIXEL +IRAFTYPE= 'DOUBLE ' / PIXEL TYPE +ORIGIN = 'NOAO-IRAF FITS Image Kernel Aug 1 1997' / FITS file originator +DATE = '18/05/99' / Date FITS file was generated +RUN = 158500 / Run number +SYSVER = 's7-1 ' / Version of observing system +OBSERVAT= 'LAPALMA ' / Name of observatory (IRAF style) +OBSTYPE = 'TARGET ' / Type of observation, eg. ARC +IMAGETYP= 'TARGET ' / Type of observation, eg. ARC +CTYPE1 = 'RA---ZPX' / Type of coordinate on axis 1 +CTYPE2 = 'DEC--ZPX' / Type of coordinate on axis 2 +CRPIX1 = -319.077517318151 / Reference pixel on axis 1 +CRPIX2 = 3035.64982635572 / Reference pixel on axis 2 +CRVAL1 = 187.8708 / Value at ref. pixel on axis 1 +CRVAL2 = 12.40001 / Value at ref. pixel on axis 2 +CD1_1 = -1.5845078730445E-6 / Transformation matrix +CD1_2 = -9.2521190078722E-5 / Transformation matrix +CD2_1 = -9.2538856101295E-5 / Transformation matrix +CD2_2 = 1.63254208024377E-6 / Transformation matrix +LATITUDE= 28.762000 / Telescope latitude (degrees), +28:45:43.2 +LONGITUD= 17.877639 / Telescope longitude (degrees), +17:52:39.5 +HEIGHT = 2348 / [m] Height above sea level. +SLATEL = 'LPO2.5 ' / Telescope name known to SLALIB +TELESCOP= 'INT ' / 2.5m Isaac Newton Telescope +TELSTAT = 'GUIDING ' / Telescope status: TRACKING or GUIDING normally. +RA = ' 12:31:28.998' / RA (187.8708261822271200 degrees) +DEC = '+12:24:00.04' / DEC ( 12.4000109941873690 degrees) +EQUINOX = '2000. ' / Equinox of coordinates +RADECSYS= 'FK5 ' / mean place new (after the 1976 IAU) system +XAPNOM = 0.0000000000 / nominal aperture in x (0.00 arcsec) +YAPNOM = 0.0000000000 / nominal aperture in y (0.00 arcsec) +XAPOFF = 0.0000000000 / total aperture offset in x (0.00 arcsec) +YAPOFF = 0.0000000000 / total aperture offset in y (0.00 arcsec) +MJD-OBS = 51277.9941545 / Modified Julian Date of midtime of observation +JD = 2451278.4941545 / Julian Date of midtime of observation +STSTART = ' 11:44:54.8' / Local sidereal time at start of observation +ST = ' 11:44:54.8' / Local sidereal time at start of observation +AZIMUTH = 148.155505 / Mean azimuth of observation (degrees) +ZD = 18.907242 / Mean zenith-distance of observation (degrees) +FSTATION= 'PRIME ' / Focal station of observation +PLATESCA= 6.856013 / [d/m] Platescale ( 24.68arcsec/mm) +TELFOCUS= 0.045998 / Telescope focus (metres) +ROTTRACK= T / Rotator always tracks sky on equatorial mount +ROTSKYPA= 179.899970 / Turntable position angle (degrees) +PARANGLE= 331.834373 / Parallactic angle at observation midpoint +VIGNETTE= F / Can we see out? +DOMEAZ = 147.089879 / Mean dome azimuth during observation +AIRMASS = 1.056698 / Effective mean airmass +TEMPTUBE= 9.005279 / Truss Temperature (degrees Celsius) +CAT-NAME= 'VIRGO311' / Target input-catalogue name +CAT-RA = ' 12:31:29.000' / Target Right Ascension +CAT-DEC = '+12:24:00.00' / Target Declination +CAT-EQUI= 'J2000.00' / Equinox of target coordinates +CAT-EPOC= 2000.00 / Target epoch of proper motions +PM-RA = 0.000000 / Target proper-motion RA (sec time/year) +PM-DEC = 0.000000 / Target proper-motion (sec arc/year) +PARALLAX= 0.000000 / Target Parallax (arcsec) +RADVEL = 0.000000 / Target radial velocity (km/s) +RATRACK = 0.000000 / Differential-tracking rate RA (arcsec/sec) +DECTRACK= 0.000000 / Differential-tracking rate Dec (arcsec/sec) +INSTRUME= 'WFC ' / INT wide-field camera is in use. +WFFPOS = 1 / Position-number of deployed filter +WFFBAND = 'B ' / Waveband of filter +WFFPSYS = 'Kitt Peak ' / Photometric system of filter +WFFID = '210 ' / Unique identifier of filter +SECPPIX = 0.333 / Arcseconds per pixel +UTSTART = '23:45:20.1 ' / UTC of start of observation +ELAPSED = 749.340 / Length of observation including pauses +DARKTIME= 749.340 / Length of observation including pauses +EXPOSED = 749.340 / Length of observation excluding pauses +EXPTIME = 749.340 / Length of observation excluding pauses +DATE-OBS= '1999-04-09 ' / UTC date start of observation +DETECTOR= 'MOS1 ' / Name of the detector +PREFLASH= 0.000 / Length of Preflash in seconds +BUNIT = 'ADU ' / Unit of the array of image data +GAIN = 2.900 / Electrons per ADU +READNOIS= 12.000 / Readout noise in electrons per pix +CCDSPEED= 'TURBO ' / Readout speed of the CCD +CCDNCHIP= 1 / Number of CCDs in this head +CCDCHIP = 1 / Head number of this CCD +CCDTYPE = 'EEV42 ' / Type of CCD used in this detector +CCDXSIZE= 2148 / X Size in pixels of digitised frame +CCDYSIZE= 4128 / Y Size in pixels of digitised frame +CCDXIMSI= 2048 / X Size of useful imaging area +CCDYIMSI= 4100 / Y Size of useful imaging area +CCDXIMST= 50 / X Start pixel of useful imaging area +CCDYIMST= 0 / Y Start pixel of useful imaging area +CCDWMODE= F / True is windows are enabled +CCDWXO1 = 0 / Offset of window 1 in X +CCDWYO1 = 0 / Offset of window 1 in Y +CCDWXS1 = 0 / Size of window 1 in X +CCDWYS1 = 0 / Size of window 1 in Y +CCDWXO2 = 0 / Offset of window 2 in X +CCDWYO2 = 0 / Offset of window 2 in Y +CCDWXS2 = 0 / Size of window 2 in X +CCDWYS2 = 0 / Size of window 2 in Y +CCDWXO3 = 0 / Offset of window 3 in X +CCDWYO3 = 0 / Offset of window 3 in Y +CCDWXS3 = 0 / Size of window 3 in X +CCDWYS3 = 0 / Size of window 3 in Y +CCDWXO4 = 0 / Offset of window 4 in X +CCDWYO4 = 0 / Offset of window 4 in Y +CCDWXS4 = 0 / Size of window 4 in X +CCDWYS4 = 0 / Size of window 4 in Y +CCDXPIXE= 1.350000e-05 / Size in meters of the pixels, in X +CCDYPIXE= 1.350000e-05 / Size in meters of the pixels, in Y +CCDXBIN = 1 / Binning factor, in X +CCDYBIN = 1 / Binning factor, in Y +CCDSTEMP= 153 / Required temperature of CCD, in Kevlin +CCDATEMP= 154 / Actual temperature of CCD, in Kevlin +CHIPNAME= 'A5506-4 ' / Name of CCD chip +DASCHAN = 1 / DAS channel +WINSEC1 = '[0:0,0:0] ' / Readout window 1 +WINSEC2 = '[0:0,0:0] ' / Readout window 2 +WINSEC3 = '[0:0,0:0] ' / Readout window 3 +WINSEC4 = '[0:0,0:0] ' / Readout window 4 +HISTORY This is the end of the header written by the ING observing-system. +WAT0_001= 'system=image' +WAT1_001= 'wtype=zpx axtype=ra projp1=6.0 projp2=100.0 projp3=2059.8' +WAT2_001= 'wtype=zpx axtype=dec projp1=1.0 projp3=-1000.8' +WFCWCS = 'Done ' +IMDTOI = 'Done ' +WCSDIM = 2 +LTM1_1 = 1. +LTM2_2 = 1. +TRIM = 'May 18 13:12 Trim data section is [51:2098,1:4100]' +BP-FLAG = 'May 18 13:12 Bad pixel file is /home/jrl/wfcred/stds/A5506-4.bad' +BT-FLAG = 'May 18 13:12 Overscan section is [1:50,1:4128] with mean=1501.636' +BI-FLAG = 'May 18 13:12 Zero level correction image is /data/cass03a/was/mframe' +FF-FLAG = 'May 18 13:12 Flat field image is /data/cass03c/was/mframes/B_9269342' +ILLUMCOR= 'May 18 13:12 Illumination image is tmpill.pl with scale=0.9314932' +CCDSEC = '[51:2098,1:4100]' +LTV1 = -50. +CCDPROC = 'May 18 13:12 CCD processing done' +XIRMS = 0.3418021 +ETARMS = 0.2019652 +WFCREDVR= 'v0.1 ' +END |