1
1
# Licensed under a 3-clause BSD style license - see LICENSE.rst
2
2
from __future__ import print_function
3
3
4
- from collections import OrderedDict
5
4
import warnings
6
5
from io import BytesIO
7
6
@@ -29,6 +28,12 @@ class MiriadeClass(BaseQuery):
29
28
_query_uri = None # uri used in query
30
29
_get_raw_response = False
31
30
31
+ TYPES = ('Asteroid' , 'Comet' , 'Dwarf Planet' , 'Planet' , 'Satellite' )
32
+ TSCALE = ('UTC' , 'TT' )
33
+ THEORY = ('INPOP' , 'DE405' , 'DE406' )
34
+ RPLANE = {'equator' : 1 , 'ecliptic' : 2 }
35
+ OSCELEM = ('astorb' , 'mpcorb' , 'mpcorb/nea' )
36
+
32
37
@property
33
38
def uri (self ):
34
39
"""
@@ -38,7 +43,7 @@ def uri(self):
38
43
39
44
def get_ephemerides_async (self , targetname , objtype = 'asteroid' ,
40
45
epoch = None , epoch_step = '1d' , epoch_nsteps = 1 ,
41
- location = 500 , coordtype = 1 ,
46
+ location = ' 500' , coordtype = 1 ,
42
47
timescale = 'UTC' ,
43
48
planetary_theory = 'INPOP' ,
44
49
ephtype = 1 ,
@@ -238,28 +243,72 @@ def get_ephemerides_async(self, targetname, objtype='asteroid',
238
243
URL = conf .ephemcc_server
239
244
TIMEOUT = conf .timeout
240
245
246
+ request_payload = dict ()
247
+
248
+ # check for required information
249
+ if targetname is None :
250
+ raise ValueError ("'targetname' parameter not set. Query aborted." )
251
+ else :
252
+ request_payload ['-name' ] = targetname
253
+
254
+ if objtype .title () in self .TYPES :
255
+ request_payload ['-type' ] = objtype
256
+ elif objtype is not None :
257
+ raise ValueError ("Invalid objtype specified. Allowed types "
258
+ "are {0}" .format (str (self .TYPES )))
259
+
260
+ if epoch_nsteps >= 1 and epoch_nsteps <= 5000 :
261
+ request_payload ['-nbd' ] = epoch_nsteps
262
+ else :
263
+ raise ValueError ("Invalid nbd specified. 1 <= epoch_nsteps <= 5000" )
264
+
265
+ if (epoch_step [- 1 ] in ('d' , 'h' , 'm' , 's' ) and
266
+ epoch_step [:- 1 ].replace ('.' , '' , 1 ).isdigit ()):
267
+ request_payload ['-step' ] = epoch_step
268
+ else :
269
+ raise ValueError ("Invalid epoch_step specified. Step (float) "
270
+ "followed by one of (d)ays or (h)ours or "
271
+ "(m)inutes or (s)econds" )
272
+
273
+ if timescale in self .TSCALE :
274
+ request_payload ['-tscale' ] = timescale
275
+ else :
276
+ raise ValueError ("Invalid timescale specified. Allowed types "
277
+ "are {0}" .format (str (self .TSCALE )))
278
+
279
+ if planetary_theory in self .THEORY :
280
+ request_payload ['-theory' ] = planetary_theory
281
+ else :
282
+ raise ValueError ("Invalid planetary_theory specified. Allowed "
283
+ "types are {0}" .format (str (self .THEORY )))
284
+
285
+ if ephtype in range (1 , 5 ):
286
+ request_payload ['-teph' ] = ephtype
287
+ else :
288
+ raise ValueError ("Invalid ephtype specified. 1 <= teph <= 4" )
289
+
290
+ if coordtype in range (1 , 7 ):
291
+ request_payload ['-tcoor' ] = coordtype
292
+ else :
293
+ raise ValueError ("Invalid coordtype specified. 1 <= tcoor <= 6" )
294
+
295
+ if refplane in self .RPLANE :
296
+ request_payload ['-rplane' ] = self .RPLANE [refplane ]
297
+ else :
298
+ raise ValueError ("Invalid refplane specified. Allowed "
299
+ "values are equator and ecliptic." )
300
+
241
301
if isinstance (epoch , (int , float )):
242
302
epoch = Time (epoch , format = 'jd' )
243
303
elif isinstance (epoch , str ):
244
304
epoch = Time (epoch , format = 'iso' )
245
305
elif epoch is None :
246
306
epoch = Time .now ()
247
307
248
- request_payload = OrderedDict ([
249
- ('-name' , targetname ),
250
- ('-type' , objtype [0 ].upper ()+ objtype [1 :]),
251
- ('-ep' , str (epoch .jd )),
252
- ('-step' , epoch_step ),
253
- ('-nbd' , epoch_nsteps ),
254
- ('-observer' , location ),
255
- ('-output' , '--jul' ),
256
- ('-tscale' , timescale ),
257
- ('-theory' , planetary_theory ),
258
- ('-teph' , ephtype ),
259
- ('-tcoor' , coordtype ),
260
- ('-rplane' , {'equator' : 1 , 'ecliptic' : 2 }[refplane ]),
261
- ('-oscelem' , elements ),
262
- ('-mime' , 'votable' )])
308
+ request_payload ['-ep' ] = str (epoch .jd )
309
+ request_payload ['-observer' ] = location
310
+ request_payload ['-output' ] = "--jul"
311
+ request_payload ['-mime' ] = "votable"
263
312
264
313
if radial_velocity :
265
314
request_payload ['-output' ] += ',--rv'
0 commit comments