aboutsummaryrefslogtreecommitdiff
path: root/noao/astutil/galactic.x
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /noao/astutil/galactic.x
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'noao/astutil/galactic.x')
-rw-r--r--noao/astutil/galactic.x165
1 files changed, 165 insertions, 0 deletions
diff --git a/noao/astutil/galactic.x b/noao/astutil/galactic.x
new file mode 100644
index 00000000..e6b2f758
--- /dev/null
+++ b/noao/astutil/galactic.x
@@ -0,0 +1,165 @@
+include <fset.h>
+
+# T_GALACTIC -- convert between equatorial and galactic coordinates.
+
+procedure t_galactic ()
+
+char fname[SZ_FNAME]
+int filelist, prt_coords, in_coords
+bool streq(), clgetb()
+int clpopni(), clgfil(), btoi(), clgwrd()
+
+begin
+ # Input can come from the standard input, a file, or a list of files.
+ # The following procedure makes both cases look like a list of files.
+
+ filelist = clpopni ("input")
+
+ # Get output option
+
+ in_coords = clgwrd ("in_coords", fname, SZ_FNAME,
+ "|equatorial|galactic|")
+ prt_coords = btoi (clgetb ("print_coords"))
+
+ # Process each coordinate list. If reading from the standard input,
+ # set up the standard output to flush after every output line, so that
+ # converted coords come back immediately when working interactively.
+
+ while (clgfil (filelist, fname, SZ_FNAME) != EOF) {
+ if (streq (fname, "STDIN"))
+ call fseti (STDOUT, F_FLUSHNL, YES)
+ else
+ call fseti (STDOUT, F_FLUSHNL, NO)
+ switch (in_coords) {
+ case 1:
+ call in_equatorial (STDOUT, fname, prt_coords)
+ case 2:
+ call in_galactic (STDOUT, fname, prt_coords)
+ }
+ }
+
+ call clpcls (filelist)
+end
+
+
+# IN_EQUITORIAL -- convert a list of equatorial coordinates read from the
+# named file to galactic coordinates, writing the results on the output file.
+
+procedure in_equatorial (out, listfile, prt_coords)
+
+int out # output stream
+char listfile[SZ_FNAME] # input file
+int prt_coords # print coordinates in output file?
+
+int in
+double ra, dec, year, lii, bii
+int fscan(), nscan(), open()
+errchk open, fscan, printf
+
+begin
+ in = open (listfile, READ_ONLY, TEXT_FILE)
+
+ # Read successive RA,DEC coordinate pairs from the standard input,
+ # converting and printing the result on the standard output.
+
+ while (fscan (in) != EOF) {
+ call gargd (ra)
+ call gargd (dec)
+ call gargd (year)
+
+ # If there is something wrong with the input coords, print warning
+ # and skip the conversion. If year is not given with entry
+ # assume 1950.0.
+
+ switch (nscan()) {
+ case 2:
+ year = 1950.0
+ case 3:
+ default:
+ call eprintf ("Bad entry in coordinate list\n")
+ next
+ }
+
+ # Call routine to perform conversion and write lII, bII to
+ # the standard output.
+
+ call ast_galactic (ra, dec, year, lii, bii)
+
+ if (prt_coords == YES ) {
+ call fprintf (out, "%13.2h %12.1h %8.2f")
+ call pargd (ra)
+ call pargd (dec)
+ call pargd (year)
+ }
+
+ call fprintf (out, "%13.4f %9.4f" )
+ call pargd (lii)
+ call pargd (bii)
+
+ call fprintf (out, "\n")
+ }
+
+ call close (in)
+end
+
+
+# IN_GALACTIC -- convert a list of galactic coordinates read from the
+# named file to equatorial coordinates, writing the results on the output
+# file.
+
+procedure in_galactic (out, listfile, prt_coords)
+
+int out # output stream
+char listfile[SZ_FNAME] # input file
+int prt_coords # print coordinates in output file?
+
+int in
+double ra, dec, year, lii, bii
+int fscan(), nscan(), open()
+errchk open, fscan, printf
+
+begin
+ in = open (listfile, READ_ONLY, TEXT_FILE)
+
+ # Read successive RA,DEC coordinate pairs from the standard input,
+ # converting and printing the result on the standard output.
+
+ while (fscan (in) != EOF) {
+ call gargd (lii)
+ call gargd (bii)
+ call gargd (year)
+
+ # If there is something wrong with the input coords, print warning
+ # and skip the conversion. If year is not given with entry
+ # assume 1950.0.
+
+ switch (nscan()) {
+ case 2:
+ year = 1950.0
+ case 3:
+ default:
+ call eprintf ("Bad entry in coordinate list\n")
+ next
+ }
+
+ # Call routine to perform conversion and write lII, bII to
+ # the standard output.
+
+ call ast_galtoeq (lii, bii, ra, dec, year)
+
+ if (prt_coords == YES ) {
+ call fprintf (out, "%13.4f %9.4f" )
+ call pargd (lii)
+ call pargd (bii)
+ }
+
+ call fprintf (out, "%13.2h %12.1h %8.2f")
+ call pargd (ra)
+ call pargd (dec)
+ call pargd (year)
+
+ call fprintf (out, "\n")
+ }
+
+ call close (in)
+end