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)
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)
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)
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)
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)
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)