示例#1
0
def get_density(drag_model: int, time: float, lla: List[float]) -> List[float]:
    """Calculate atmospheric neutral density.

    Parameters
    ----------
    drag_model : Atmospheric drag model; a constant from DragModel.
    time : Offset in TT from J2000 epoch [s]. Give a list for bulk calculations.
    lla : WGS-84 latitude, longitude, altitude. Give a list of lists for bulk calculations.

    Returns
    -------
    Atmospheric neutral density [kg/m^3] at the specified coordinates.
    """

    if (isinstance(time, float) or isinstance(time, str)):
        time, lla = [time], [lla]
    if (isinstance(time[0], float)):
        resp = _utilities_stub.getDensity(
            TransformFrameInput(time=time,
                                pva=[DoubleArray(array=x) for x in lla],
                                dest_frame=str(drag_model)))
    else:
        resp = _utilities_stub.getDensity(
            TransformFrameInput(UTC_time=time,
                                pva=[DoubleArray(array=x) for x in lla],
                                dest_frame=str(drag_model)))
    return (resp.array)
示例#2
0
def transform_frame(src_frame: int, time: float, pva: List[float], dest_frame: int)->List[float]:
    """Transform a state vector from one frame to another.

    Parameters
    ----------
    src_frame : Source reference frame; a constant from Frame.
    time : Offset in TT from J2000 epoch [s]. Give a list for bulk transforms.
    pva : State vector to transform, can be pos or pos+vel or pos+vel+acc. Provide a 
          list of lists for bulk frame transforms.
    dest_frame : Destination reference frame; a constant from Frame.

    Returns
    -------
    State vector transformed to the destination frame.
    """

    if (isinstance(time, float) or isinstance(time, str)):
        single = True
        time, pva = [time], [pva]
    else:
        single = False

    if (isinstance(time[0], float)):
        resp = _conversion_stub.transformFrame(TransformFrameInput(
            src_frame=src_frame, time=time, pva=[DoubleArray(array=x) for x in pva], dest_frame=dest_frame))
    else:
        resp = _conversion_stub.transformFrame(TransformFrameInput(
            src_frame=src_frame, UTC_time=time, pva=[DoubleArray(array=x) for x in pva], dest_frame=dest_frame))
    return(resp.array[0].array if (single) else resp.array)
示例#3
0
def pv_to_elem(frame: int, time: float, pv: List[float])->List[float]:
    """Convert Cartesian state vector to osculating orbital elements.

    Parameters
    ----------
    frame : Inertial reference frame; a constant from Frame.
    time : Offset in TT from J2000 epoch [s]. Give a list for bulk conversions.
    pv : Inertial Cartesian state vector. Provide a list of lists for bulk conversions.

    Returns
    -------
    SMA, eccentricity, inclination, RAAN, perigee argument, mean anomaly, true anomaly, eccentric anomaly
    """

    if (isinstance(time, float) or isinstance(time, str)):
        single = True
        time, pv = [time], [pv]
    else:
        single = False

    if (isinstance(time[0], float)):
        resp = _conversion_stub.convertPvToElem(TransformFrameInput(
            src_frame=frame, time=time, pva=[DoubleArray(array=x) for x in pv]))
    else:
        resp = _conversion_stub.convertPvToElem(TransformFrameInput(
            src_frame=frame, UTC_time=time, pva=[DoubleArray(array=x) for x in pv]))
    return(resp.array[0].array if (single) else resp.array)
示例#4
0
def elem_to_pv(frame: int, time: float, sma: float, ecc: float, inc: float,
               raan: float, argp: float, anom: float, anom_type: int)->List[float]:
    """Convert osculating orbital elements to Cartesian state vector.

    Parameters
    ----------
    frame : Inertial reference frame; a constant from Frame.
    time : Offset in TT from J2000 epoch [s]. Give a list for bulk conversions.
    sma : Semi-major axis [m]. Give a list for bulk conversions.
    ecc : Eccentricity. Give a list for bulk conversions.
    inc : Inclination [rad]. Give a list for bulk conversions.
    raan : RA of ascending node [rad]. Give a list for bulk conversions.
    argp : Argument of perigee [rad]. Give a list for bulk conversions.
    anom : Anomaly angle [rad]. Give a list for bulk conversions.
    anom_type : Anomaly angle type; a constant from PositionAngle. Give a list for bulk conversions.

    Returns
    -------
    Cartesian state vector.
    """

    if (isinstance(time, float) or isinstance(time, str)):
        single = True
        time, sma, ecc, inc, raan, argp, anom, anom_type = (
            [time], [sma], [ecc], [inc], [raan], [argp], [anom], [anom_type])
    else:
        single = False

    if (isinstance(time[0], float)):
        resp = _conversion_stub.convertElemToPv(TransformFrameInput(src_frame=frame, time=time, pva=[
            DoubleArray(array=[a,e,i,W,w,n,t]) for a,e,i,W,w,n,t in zip(sma, ecc, inc, raan, argp, anom, anom_type)]))
    else:
        resp = _conversion_stub.convertElemToPv(TransformFrameInput(src_frame=frame, UTC_time=time, pva=[
            DoubleArray(array=[a,e,i,W,w,n,t]) for a,e,i,W,w,n,t in zip(sma, ecc, inc, raan, argp, anom, anom_type)]))
    return(resp.array[0].array if (single) else resp.array)
示例#5
0
def pos_to_lla(frame: int, time: float, pos: List[float])->List[float]:
    """Convert an inertial position to WGS-84 lat/lon/alt.

    Parameters
    ----------
    frame : Inertial reference frame; a constant from Frame.
    time : Offset in TT from J2000 epoch [s]. Give a list for bulk conversions.
    pos : Inertial position vector. Provide a list of lists for bulk conversions.

    Returns
    -------
    WGS-84 latitude [rad], longitude [rad], altitude [m].
    """

    if (isinstance(time, float) or isinstance(time, str)):
        single = True
        time, pos = [time], [pos]
    else:
        single = False

    if (isinstance(time[0], float)):
        resp = _conversion_stub.convertPosToLLA(TransformFrameInput(
            src_frame=frame, time=time, pva=[DoubleArray(array=x) for x in pos]))
    else:
        resp = _conversion_stub.convertPosToLLA(TransformFrameInput(
            src_frame=frame, UTC_time=time, pva=[DoubleArray(array=x) for x in pos]))
    return(resp.array[0].array if (single) else resp.array)
示例#6
0
def lla_to_pos(time: float, lla: List[float]) -> List[float]:
    """Convert WGS-84 lat/lon/alt to Cartesian position.

    Parameters
    ----------
    time : Offset in TT from J2000 epoch [s]. Give a list for bulk conversions.
    lla : WGS-84 latitude, longitude, altitude. Provide a list of lists for bulk conversions.

    Returns
    -------
    ITRF geocentric Cartesian position [m].
    """

    if (isinstance(time, float) or isinstance(time, str)):
        single, time, lla = True, [time], [lla]
    else:
        single = False

    if (isinstance(time[0], float)):
        resp = _conversion_stub.convertLLAToPos(
            TransformFrameInput(time=time,
                                pva=[DoubleArray(array=x) for x in lla]))
    else:
        resp = _conversion_stub.convertLLAToPos(
            TransformFrameInput(UTC_time=time,
                                pva=[DoubleArray(array=x) for x in lla]))
    return (resp.array[0].array if (single) else resp.array)