AstroAngles.jl

Build Status PkgEval Coverage License

Lightweight string parsing and representation of angles.

Installation

To install use Pkg. From the REPL, press ] to enter Pkg-mode

pkg> add AstroAngles

If you want to use the most up-to-date version of the code, check it out from main

pkg> add AstroAngles#main

Usage

Angle Parsing Utilities

String representations of angles in both "degree:arcmin:arcsec" and "hour:min:sec" format can be parsed using a variety of delimiters, which can be mixed together (e.g. can use ° after degrees but : after the arcminutes). The directions "S" and "W" are considered negative and "-1:0:0S" is 1 degree North, for example.

dms formats

"[+-]xx:xx:xx.x[NESW]"
"[+-]xx xx xx.x[NESW]"
"[+-]xxdxxmxx.xs[NESW]"
"[+-]xx°xx'xx.x\"[NESW]"
"[+-]xx°xx′xx.x″[NESW]" # \prime, \pprime

hms formats

"[+-]xx:xx:xx.x[NESW]"
"[+-]xx xx xx.x[NESW]"
"[+-]xxhxxmxx.xs[NESW]"
"[+-]xxhxx'xx.x\"[NESW]"
"[+-]xx°xx′xx.x″[NESW]"

the simplest way to convert is to use the @dms_str and @hms_str macros, which allows you to choose the output angle type

julia> dms"12:17:25.3"
0.21450726764795752

julia> dms"12:17:25.3"rad # default
0.21450726764795752

julia> dms"12:17:25.3"deg
12.29036111111111

julia> dms"12:17:25.3"ha
0.8193574074074074

here is a showcase of the variety of ways to parse inputs

julia> dms"10.2345d"deg
10.2345

julia> dms"1:2:30.43"deg
1.041786111111111

julia> hms"1 2 0"ha
1.0333333333333334

julia> dms"1°2′3″"deg
1.0341666666666667

julia> dms"1°2′3″N"deg
1.0341666666666667

julia> dms"1d2m3.4s"deg
1.0342777777777779

julia> dms"1d2m3.4sS"deg
-1.0342777777777779

julia> hms"-1h2m3s"ha
-1.0341666666666667

julia> hms"-1h2m3sW"ha
1.0341666666666667

for more control on the output, you can use the parse_dms and parse_hms methods, which returns a tuple of the parsed dms or hms values

parse_dms # string -> (deg, arcmin, arcsec)
parse_hms # string -> (hours, mins, secs)
julia> parse_dms("12:17:25.3")
(12.0, 17.0, 25.3)

julia> parse_hms("-4:4:6")
(-4.0, 4.0, 6.0)

Angle Conversion Utilities

The following methods are added for converting to and from hour angles

deg2ha # degrees -> hour angles
rad2ha # radians -> hour angles
ha2deg # hour angles -> degrees
ha2rad # hour angles -> radians

The following methods convert from angles as a single number to tuples consistent with sexagesimal

deg2dms # degrees -> (deg, arcmin, arcsec)
rad2dms # radians -> (deg, arcmin, arcsec)
ha2dms  # hour angles -> (deg, arcmin, arcsec)

deg2hms # degrees -> (hours, mins, secs)
rad2hms # radians -> (hours, mins, secs)
ha2hms  # hour angles -> (hours, mins, secs)

and the inverse

dms2deg # (deg, arcmin, arcsec) -> degrees
dms2rad # (deg, arcmin, arcsec) -> radians
dms2ha  # (deg, arcmin, arcsec) -> hour angles

hms2deg # (hours, mins, secs) -> degrees
hms2rad # (hours, mins, secs) -> radians
hms2ha  # (hours, mins, secs) -> hour angles

the above functions can take a string as input and will automatically parse it (using parse_dms or parse_hms, respectively) before converting.

Formatting angles

Lastly, we have some simple methods for formatting angles into strings, although for more fine-tuned control we recommend using Printf or a package like Formatting.jl. format_angle takes parts (like from deg2dms or rad2hms) and a delimiter (or collection of 3 delimiters for each value).

julia> format_angle(deg2dms(45.0))
"45:0:0.0"

julia> format_angle(deg2hms(-65.0); delim=["h", "m", "s"])
"-4h19m59.999999999998934s"

Example: reading coordinates from a table

Here's an example of reading sky coordinates from a CSV formatted target list and converting them to degrees-

julia> using AstroAngles, CSV, DataFrames

julia> table = CSV.File("target_list.csv") |> DataFrame;

julia> [table.ra table.dec]
203×2 Matrix{String}:
 "00 05 01.42"  "40 03 35.82"
 "00 05 07.52"  "73 13 11.34"
 "00 36 01.40"  "-11 12 13.00"
[...]

julia> ra_d = @. hms2deg(table.ra)
203-element Vector{Float64}:
   1.2559166666666666
   1.2813333333333332
   9.005833333333333
[...]

julia> dec_d = @. dms2deg(table.dec)
203-element Vector{Float64}:
  40.05995
  73.21981666666667
 -11.203611111111112
[...]

Contributing/Support

To contribute, feel free to open a pull request. If you run into problems, please open an issue. To discuss ideas, usage, or to plan contributions, open a new discussion.

License

This code is MIT licensed. For more information, see LICENSE.