Skip to content

Commit 27279cc

Browse files
TestSubjectorgiordano
authored andcommitted
Add - Tics Function (#8)
* Add - Tics Function * TODO.md: remove 'tics' from list. * docs/src/ref.md: add "tics" entry to the manual. * src/utils.jl: Add tics entry to "utils". * src/tics.jl: Contains tics function. * test/util-tests.jl: Include tests Note - The test and examples values are random dummy values, as I couldn't find any proper example sets to use. * Small fix for readibility * src/tics.jl: Re-added spacing in the function info section for readibility, which had somehow gotten lost in transition. * Improvements, fixes and increasing test coverage * src/tics.jl: Removed float for numeric literals Fixed indentation, added promt pasting * test/utils-tests.jl: In brief, brute forced for test coverage * Use T() to convert numeric literals to type T * src/tics.jl: Implemented T(number) for accuracy and type stabiltiy * test/utils-tests.jl: Edited tests to accommodate changes in tics.jl
1 parent ae3fdf7 commit 27279cc

File tree

5 files changed

+152
-1
lines changed

5 files changed

+152
-1
lines changed

TODO.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,6 @@ Missing in AstroLib.jl
418418
* `ticlabels`
419419
* `tic_one`
420420
* `ticpos`
421-
* `tics`
422421
* `t_nstar`
423422
* `tnx_eval`
424423
* `tpv_eval`

docs/src/ref.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ julia> AstroLib.planets["saturn"].mass
152152
[`sixty()`](@ref),
153153
[`sphdist()`](@ref),
154154
[`ten()`](@ref),
155+
[`tics()`](@ref).
155156
[`trueanom()`](@ref),
156157
[`vactoair()`](@ref)
157158

src/tics.jl

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
function _tics{T<:AbstractFloat}(radec_min::T, radec_max::T, numx::T, ticsize::T, ra::Bool)
2+
3+
numtics = numx/ticsize
4+
if ra
5+
mul = T(4)
6+
else
7+
mul = T(60)
8+
end
9+
mins = abs(radec_min - radec_max)*mul
10+
rapix = (numx - 1)/mins
11+
incr = mins/numtics
12+
13+
if incr >= 120
14+
incr = T(480)
15+
elseif incr >= 60
16+
incr = T(120)
17+
elseif incr >= 30
18+
incr = T(60)
19+
elseif incr >= 15
20+
incr = T(30)
21+
elseif incr >= 10
22+
incr = T(15)
23+
elseif incr >= 5
24+
incr = T(10)
25+
elseif incr >= 2
26+
incr = T(5)
27+
elseif incr >= 1
28+
incr = T(2)
29+
elseif incr >= 1//2
30+
incr = T(1)
31+
elseif incr >= 1//4
32+
incr = T(1//2)
33+
elseif incr >= 10//60
34+
incr = T(1//4)
35+
elseif incr >= 5//60
36+
incr = T(10//60)
37+
elseif incr >= 2//60
38+
incr = T(5//60)
39+
elseif incr >= 1//60
40+
incr = T(2//60)
41+
elseif incr >= 5//600
42+
incr = T(1//60)
43+
elseif incr >= 2//600
44+
incr = T(5//600)
45+
elseif incr >= 1//600
46+
incr = T(2//600)
47+
elseif incr >= 5//6000
48+
incr = T(1//600)
49+
elseif incr >= 2//6000
50+
incr = T(5//6000)
51+
elseif incr >= 1//6000
52+
incr = T(2//6000)
53+
else incr >= 0
54+
incr = T(1//6000)
55+
end
56+
57+
ticsize = rapix * incr
58+
59+
if ra && incr == 480
60+
incr = T(240)
61+
end
62+
if radec_min > radec_max
63+
incr = -incr
64+
end
65+
return ticsize, incr
66+
end
67+
68+
"""
69+
tics(radec_min, radec_max, numx, ticsize[, ra=true]) -> ticsize, incr
70+
71+
### Purpose ###
72+
73+
Compute a nice increment between tic marks for astronomical images.
74+
75+
### Explanation ###
76+
77+
For use in labelling a displayed image with right ascension or declination
78+
axes. An approximate distance between tic marks is input, and a new value
79+
is computed such that the distance between tic marks is in simple increments
80+
of the tic label values.
81+
82+
### Arguements ###
83+
84+
* `radec_min` : minimum axis value (degrees).
85+
* `radec_min` : maximum axis value (degrees).
86+
* `numx` : number of pixels in x direction.
87+
* `ticsize` : distance between tic marks (pixels).
88+
* `ra` (optional boolean keyword): if true, incremental value would
89+
be in minutes of time. Default is false.
90+
91+
### Output ###
92+
93+
A 2-tuple `(ticsize, incr)`:
94+
* `ticsize` : distance between tic marks (pixels).
95+
* `incr` : incremental value for tic labels. The format is dependent
96+
on the optional keyword. If true (i.e for right ascension), it's in minutes
97+
of time, else it's in minutes of arc (for declination).
98+
99+
### Example ###
100+
101+
``` julia
102+
julia> tics(55, 60, 100.0, 1/2)
103+
(0.66, 2)
104+
105+
julia> tics(30, 60, 12, 2, true)
106+
(2.75, 30)
107+
```
108+
109+
### Notes ###
110+
111+
Code of this function is based on IDL Astronomy User's Library.
112+
"""
113+
tics(radec_min::Real, radec_max::Real, numx::Real,
114+
ticsize::Real, ra::Bool=false) =
115+
_tics(promote(float(radec_min), float(radec_max), float(numx),
116+
float(ticsize))..., ra)

src/utils.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,9 @@ export sunpos
148148
include("ten.jl")
149149
export ten
150150

151+
include("tics.jl")
152+
export tics
153+
151154
include("trueanom.jl")
152155
export trueanom
153156

test/utils-tests.jl

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,38 @@ end
544544
[-0.37388888888888894, -1.0, -3.0]
545545
@test ten.([12.0, -0.0], [24, 30]) == ten.([" 12::24", " -0:30: "]) == [12.4, -0.5]
546546

547+
#Test tics
548+
@test tics(30, 90, 30, 1) == (3.8666666666666667, 480)
549+
@test tics(30, 90, 3, 3, true) == (4.0, 240)
550+
@test tics(30, 70, 3, 1, true) == (0.75, 60)
551+
@test tics.([30,50],[70,60], [6,12], [3,0.5], [true, false]) ==
552+
[(3.75,120), (0.55,30)]
553+
@test tics(45, 55, 30, 0.5) == (0.725, 15)
554+
@test tics(45, 60, 10, 0.1) == (0.1, 10)
555+
@test tics(55, 60, 100.0, 1/2) == (0.66, 2)
556+
@test tics(25, 30, 50, 2, true) == (2.45, 1)
557+
@test tics(20, 80, 600, 0.03) == (0.04159722222222222, 0.25)
558+
@test tics(25, 75, 500, 0.02) == (0.02772222222222222, 0.16666666666666666)
559+
@test tics(10, 12, 25, 0.01) == (0.016666666666666666, 0.08333333333333333)
560+
@test tics(20, 80, 6000, 0.03) == (0.055546296296296295, 0.03333333333333333)
561+
@test tics(30, 60, 200, 0.02, true) == (0.02763888888888889, 0.016666666666666666)
562+
@test tics(60, 70, 125, 0.001) == (0.0017222222222222222, 0.008333333333333333)
563+
@test tics(10, 12, 25, 0.01, true) == (0.01, 0.0033333333333333335)
564+
@test tics(130, 180, 1000, 0.0004) == (0.000555, 0.0016666666666666668)
565+
@test tics(60, 70, 5500//2, 0.003) == (0.003818055555555556, 0.0008333333333333334)
566+
@test tics(30, 150, 4000, 0.002, true) == (0.0027770833333333337, 0.0003333333333333333)
567+
@test tics(9.5, 14.5, 5000, 0.002) == (0.002777222222222222, 0.00016666666666666666)
568+
@test tics(90, 45, 1000, 10) == (11.1, -30)
569+
let
570+
local ticsize, incr
571+
ticsize, incr = tics(30, 70, 50, 0.1)
572+
@test ticsize 0.10208333333333333
573+
@test incr 5
574+
ticsize, incr = tics(pi/3, pi/2, 60.0, 7.5, true)
575+
@test ticsize 14.085212463632736
576+
@test incr 0.5
577+
end
578+
547579
# Test kepler_solver
548580
@test trueanom(8pi/3, 0.7) 2.6657104039293764
549581
@test trueanom.([pi/4, pi/6, 8pi/3], 0) [pi/4, pi/6, 2pi/3]

0 commit comments

Comments
 (0)