Skip to content

Commit 21e146c

Browse files
Edward Molterbsipocz
authored andcommitted
allowed option to pass observatory coordinates
1 parent d96fa2e commit 21e146c

File tree

2 files changed

+46
-17
lines changed

2 files changed

+46
-17
lines changed

astroquery/solarsystem/pds/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ class Conf(_config.ConfigNamespace):
6363
'rings':'Styx, Nix, Kerberos, Hydra',
6464
}
6565
}
66+
67+
neptune_arcmodels = {1:'#1 (820.1194 deg/day)',
68+
2:'#2 (820.1118 deg/day)',
69+
3:'#3 (820.1121 deg/day)'}
6670

6771

6872

astroquery/solarsystem/pds/core.py

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,20 @@ def __str__(self):
6969
# --- pretty stuff above this line, get it working below this line ---
7070

7171
def ephemeris_async(self,
72+
observer_coords = None,
73+
neptune_arcmodel = 3,
7274
get_query_payload=False,
7375
get_raw_response=False,
7476
cache=True):
7577
'''
7678
send query to server
7779
7880
note this interacts with utils.async_to_sync to be called as ephemeris()
81+
82+
Parameters
83+
----------
84+
self :
85+
observer_coords : three-element list/array/tuple of format (lat (deg), lon (deg east), altitude (m))
7986
8087
Returns
8188
-------
@@ -95,14 +102,28 @@ def ephemeris_async(self,
95102
URL = conf.pds_server
96103
#URL = 'https://pds-rings.seti.org/cgi-bin/tools/viewer3_xxx.pl?'
97104

98-
# check for required information
105+
# check inputs and set defaults for optional inputs
99106
if self.planet is None:
100107
raise ValueError("'planet' parameter not set. Query aborted.")
101108
if self.obs_time is None:
102109
self.obs_time = Time.now().jd
110+
if observer_coords is None:
111+
viewpoint = 'observatory'
112+
latitude, longitude, altitude = '', '', ''
113+
else:
114+
viewpoint = 'latlon'
115+
try:
116+
latitude, longitude, altitude = [float(j) for j in observer_coords]
117+
assert -90. <= latitude <= 90.
118+
assert -360. <= longitude <= 360.
119+
except:
120+
raise ValueError(f"Illegal observatory coordinates {observer_coords}. must be of format [lat(deg), lon(deg east), alt(m)]")
121+
if neptune_arcmodel not in [1,2,3]:
122+
raise ValueError(f"Illegal Neptune arc model {neptune_arcmodel}. must be one of 1, 2, or 3 (see https://pds-rings.seti.org/tools/viewer3_nep.shtml for details)")
103123

104-
'''
105-
https://pds-rings.seti.org/cgi-bin/tools/viewer3_xxx.pl?abbrev=jup&ephem=000+JUP365+%2B+DE440&time=2021-10-07+07%3A25&fov=10&fov_unit=Jupiter+radii&center=body&center_body=Jupiter&center_ansa=Main+Ring&center_ew=east&center_ra=&center_ra_type=hours&center_dec=&center_star=&viewpoint=observatory&observatory=Earth%27s+center&latitude=&longitude=&lon_dir=east&altitude=&moons=516+All+inner+moons+%28J1-J5%2CJ14-J16%29&rings=Main+%26+Gossamer&torus_inc=6.8&torus_rad=422000&extra_ra=&extra_ra_type=hours&extra_dec=&extra_name=&title=&labels=Small+%286+points%29&moonpts=0&blank=No&meridians=Yes&output=HTML
124+
125+
'''
126+
https://pds-rings.seti.org/cgi-bin/tools/viewer3_xxx.pl?abbrev=nep&ephem=000+NEP081+%2B+NEP095+%2B+DE440&time=2020-01-01+00%3A00&fov=10&fov_unit=Neptune+radii&center=body&center_body=Neptune&center_ansa=Adams+Ring&center_ew=east&center_ra=&center_ra_type=hours&center_dec=&center_star=&observatory=Earth%27s+center&viewpoint=latlon&latitude=19.827&longitude=-155.472&lon_dir=east&altitude=4216&moons=814+All+inner+moons+%28N1-N8%2CN14%29&rings=Galle%2C+LeVerrier%2C+Arago%2C+Adams&arcmodel=%233+%28820.1121+deg%2Fday%29&extra_ra=&extra_ra_type=hours&extra_dec=&extra_name=&title=&labels=Small+%286+points%29&moonpts=0&blank=No&arcpts=4&meridians=Yes&output=HTML
106127
'''
107128

108129
# configure request_payload for ephemeris query
@@ -112,7 +133,7 @@ def ephemeris_async(self,
112133
('abbrev', self.planet[:3]),
113134
('ephem', conf.planet_defaults[self.planet]['ephem']), # change hardcoding for other planets
114135
('time', self.obs_time),
115-
('fov', 10), #for now do not care about the diagram. next few hardcoded
136+
('fov', 10), #next few are figure options, can be hardcoded and ignored
116137
('fov_unit', self.planet.capitalize()+' radii'),
117138
('center', 'body'),
118139
('center_body', self.planet.capitalize()),
@@ -122,16 +143,16 @@ def ephemeris_async(self,
122143
('center_ra_type', 'hours'),
123144
('center_dec', ''),
124145
('center_star', ''),
125-
('viewpoint', 'observatory'), # de-hardcode later!
126-
('observatory', "Earth's center"), # de-hardcode later!
127-
('latitude',''), # de-hardcode later!
128-
('longitude',''), # de-hardcode later!
129-
('lon_dir',''), # de-hardcode later!
130-
('altitude',''), # de-hardcode later!
131-
('moons',conf.planet_defaults[self.planet]['moons']), # change hardcoding for other planets
132-
('rings',conf.planet_defaults[self.planet]['rings']), # check if this works for other planets
133-
('arcmodel','#3 (820.1121 deg/day)'), # check if this works for other planets
134-
('extra_ra',''), # diagram stuff. next few can be hardcoded
146+
('viewpoint', viewpoint),
147+
('observatory', "Earth's center"), # has no effect if viewpoint != observatory so can hardcode. no plans to implement calling observatories by name since ring node only names like 8 observatories
148+
('latitude',latitude),
149+
('longitude',longitude),
150+
('lon_dir','east'),
151+
('altitude',altitude),
152+
('moons',conf.planet_defaults[self.planet]['moons']),
153+
('rings',conf.planet_defaults[self.planet]['rings']),
154+
('arcmodel',conf.neptune_arcmodels[neptune_arcmodel]),
155+
('extra_ra',''), # figure options below this line, can all be hardcoded and ignored
135156
('extra_ra_type','hours'),
136157
('extra_dec',''),
137158
('extra_name',''),
@@ -269,7 +290,7 @@ def _parse_ringnode(self, src):
269290
names = ('ring', 'pericenter', 'ascending node')
270291
)
271292

272-
# Saturn F-ring data - NEEDS TESTING
293+
# Saturn F-ring data
273294
elif group.startswith('F Ring'):
274295
lines = group.split('\n')
275296
for line in lines:
@@ -280,7 +301,7 @@ def _parse_ringnode(self, src):
280301
ascn = float(l[1].strip(', \n'))
281302
ringtable = table.Table([['F'], [peri], [ascn]], names=('ring', 'pericenter', 'ascending node'))
282303

283-
# Neptune ring arcs data - NEEDS TESTING
304+
# Neptune ring arcs data
284305
elif group.startswith('Courage'):
285306
lines = group.split('\n')
286307
for i in range(len(lines)):
@@ -334,7 +355,11 @@ def _parse_result(self, response, verbose = None):
334355

335356
# single basic query
336357
neptune = RingNodeClass('Neptune', '2019-10-28 00:00')
337-
systemtable, bodytable, ringtable = neptune.ephemeris()
358+
systemtable, bodytable, ringtable = neptune.ephemeris(neptune_arcmodel = 2, observer_coords = (10.0, -120.355, 1000))
359+
print(systemtable)
360+
print(bodytable)
361+
print(ringtable)
362+
338363

339364
'''
340365
# basic query for all six targets

0 commit comments

Comments
 (0)