Commit 6ceaf0e0 authored by Yan Zhaojun's avatar Yan Zhaojun
Browse files

Replace shao.py

parent 22b7ef20
Loading
Loading
Loading
Loading
Loading
+88 −42
Original line number Diff line number Diff line
from ctypes import *


def onOrbitObsPosition(path, input_ra_list, input_dec_list, input_pmra_list, input_pmdec_list, input_rv_list, \
                       input_parallax_list, input_nstars, input_x, input_y, input_z, input_vx, input_vy, \
# def checkInputList(input_list, n):
#    if isinstance(type(input_list), list):
#        # if type(input_list) != type([1, 2, 3]):
#        raise TypeError("Input type is not list!", input_list)
#    for i in input_list:
#        if isinstance(type(i), float):      # type(i) != type(1.1):
#            if isinstance(type(i), int):    # type(i) != type(1):
#                raise TypeError(
#                    "Input list's element is not float or int!", input_list)
#    if len(input_list) != n:
#        raise RuntimeError(
#            "Length of input list is not equal to stars' number!", input_list)


def onOrbitObsPosition(path, input_ra_list, input_dec_list, input_pmra_list, input_pmdec_list, input_rv_list,
                       input_parallax_list, input_nstars, input_x, input_y, input_z, input_vx, input_vy,
                       input_vz, input_epoch, input_date_str, input_time_str):
    # Check input parameters
    if isinstance(type(input_nstars), type(1)):  # type(input_nstars) != type(1):
        raise TypeError("Parameter 7 is not int!", input_nstars)

#    checkInputList(input_ra_list, input_nstars)
#    checkInputList(input_dec_list, input_nstars)
#    checkInputList(input_pmra_list, input_nstars)
#    checkInputList(input_pmdec_list, input_nstars)
#    checkInputList(input_rv_list, input_nstars)
#    checkInputList(input_parallax_list, input_nstars)
#
#    if isinstance(type(input_x), type(1.1)):   # type(input_x) != type(1.1):
#        raise TypeError("Parameter 8 is not double!", input_x)
#    if isinstance(type(input_y), type(1.1)):   # type(input_y) != type(1.1):
#        raise TypeError("Parameter 9 is not double!", input_y)
#    if isinstance(type(input_z), type(1.1)):   # type(input_z) != type(1.1):
#        raise TypeError("Parameter 10 is not double!", input_z)
#    if isinstance(type(input_vx), type(1.1)):  # type(input_vx) != type(1.1):
#        raise TypeError("Parameter 11 is not double!", input_vx)
#    if isinstance(type(input_vy), type(1.1)):  # type(input_vy) != type(1.1):
#        raise TypeError("Parameter 12 is not double!", input_vy)
#    if isinstance(type(input_vz), type(1.1)):  # type(input_vz) != type(1.1):
#        raise TypeError("Parameter 13 is not double!", input_vz)

    # Convert km -> m
    input_x = input_x*1000.0
@@ -14,7 +50,8 @@ def onOrbitObsPosition(path, input_ra_list, input_dec_list, input_pmra_list, inp
    input_vy = input_vy*1000.0
    input_vz = input_vz*1000.0

    if type(input_date_str) != type("2025-03-05"):
    if isinstance(type(input_date_str), type("2025-03-05")):
        # type(input_date_str) != type("2025-03-05"):
        raise TypeError("Parameter 15 is not string!", input_date_str)
    else:
        input_date_str = input_date_str.strip()
@@ -23,18 +60,23 @@ def onOrbitObsPosition(path, input_ra_list, input_dec_list, input_pmra_list, inp
        else:
            tmp = input_date_str.split("-")
            if len(tmp) != 3:
                raise TypeError("Parameter 15 format error (2)!", input_date_str)
                raise TypeError(
                    "Parameter 15 format error (2)!", input_date_str)
            input_year = int(tmp[0])
            input_month = int(tmp[1])
            input_day = int(tmp[2])
            if not (input_year >= 1900 and input_year <= 2100):
                raise TypeError("Parameter 15 year range error [1900 ~ 2100]!", input_year)
                raise TypeError(
                    "Parameter 15 year range error [1900 ~ 2100]!", input_year)
            if not (input_month >= 1 and input_month <= 12):
                raise TypeError("Parameter 15 month range error [1 ~ 12]!", input_month)
                raise TypeError(
                    "Parameter 15 month range error [1 ~ 12]!", input_month)
            if not (input_day >= 1 and input_day <= 31):
                raise TypeError("Parameter 15 day range error [1 ~ 31]!", input_day)
                raise TypeError(
                    "Parameter 15 day range error [1 ~ 31]!", input_day)

    if type(input_time_str) != type("20:15:15.15"):
    if isinstance(type(input_time_str), type("20:15:15.15")):
        # type(input_time_str) != type("20:15:15.15"):
        raise TypeError("Parameter 16 is not string!", input_time_str)
    else:
        input_time_str = input_time_str.strip()
@@ -43,16 +85,20 @@ def onOrbitObsPosition(path, input_ra_list, input_dec_list, input_pmra_list, inp
        else:
            tmp = input_time_str.split(":")
            if len(tmp) != 3:
                raise TypeError("Parameter 16 format error (2)!", input_time_str)
                raise TypeError(
                    "Parameter 16 format error (2)!", input_time_str)
            input_hour = int(tmp[0])
            input_minute = int(tmp[1])
            input_second = float(tmp[2])
            if not (input_hour >= 0 and input_hour <= 23):
                raise TypeError("Parameter 16 hour range error [0 ~ 23]!", input_hour)
                raise TypeError(
                    "Parameter 16 hour range error [0 ~ 23]!", input_hour)
            if not (input_minute >= 0 and input_minute <= 59):
                raise TypeError("Parameter 16 minute range error [0 ~ 59]!", input_minute)
                raise TypeError(
                    "Parameter 16 minute range error [0 ~ 59]!", input_minute)
            if not (input_second >= 0 and input_second < 60.0):
                raise TypeError("Parameter 16 second range error [0 ~ 60)!", input_second)
                raise TypeError(
                    "Parameter 16 second range error [0 ~ 60)!", input_second)
    # Inital dynamic lib

    import os
@@ -64,10 +110,10 @@ def onOrbitObsPosition(path, input_ra_list, input_dec_list, input_pmra_list, inp
    shao.onOrbitObs.restype = c_int

    d3 = c_double * 3
    shao.onOrbitObs.argtypes = [c_double, c_double, c_double, c_double, c_double, c_double, \
                                c_int, c_int, c_int, c_int, c_int, c_double, \
                                c_double, POINTER(d3), POINTER(d3), \
                                c_int, c_int, c_int, c_int, c_int, c_double, \
    shao.onOrbitObs.argtypes = [c_double, c_double, c_double, c_double, c_double, c_double,
                                c_int, c_int, c_int, c_int, c_int, c_double,
                                c_double, POINTER(d3), POINTER(d3),
                                c_int, c_int, c_int, c_int, c_int, c_double,
                                POINTER(c_double), POINTER(c_double)]
    output_ra_list = list()
    output_dec_list = list()
@@ -89,10 +135,10 @@ def onOrbitObsPosition(path, input_ra_list, input_dec_list, input_pmra_list, inp
        DAT = c_double(37.0)
        output_ra = c_double(0.0)
        output_dec = c_double(0.0)
        rs = shao.onOrbitObs(input_ra, input_dec, input_parallax, input_pmra, input_pmdec, input_rv,  \
                             input_year_c, input_month_c, input_day_c, input_hour_c, input_minute_c, input_second_c, \
                             DAT, byref(p3), byref(v3), \
                             input_year_c, input_month_c, input_day_c, input_hour_c, input_minute_c, input_second_c, \
        rs = shao.onOrbitObs(input_ra, input_dec, input_parallax, input_pmra, input_pmdec, input_rv,
                             input_year_c, input_month_c, input_day_c, input_hour_c, input_minute_c, input_second_c,
                             DAT, byref(p3), byref(v3),
                             input_year_c, input_month_c, input_day_c, input_hour_c, input_minute_c, input_second_c,
                             byref(output_ra), byref(output_dec))
        if rs != 0:
            raise RuntimeError("Calculate error!")