es_sfgtools.data_models.sv3_models module
Author: Franklyn Dunbar Email: franklyn.dunbar@earthscope.org
this file contains data models for parsing sonardyne sv3 data
- class es_sfgtools.data_models.sv3_models.NovatelAHRSData(*, acx: Decimal, acy: Decimal, acz: Decimal, h: Annotated[Decimal, Ge(ge=0), Le(le=360)], h_mag: Annotated[Decimal | None, Ge(ge=Decimal('0')), Le(le=Decimal('360'))], p: Annotated[Decimal, Ge(ge=-90), Le(le=90)], r: Annotated[Decimal, Ge(ge=-180), Le(le=180)], time: TimeData)
Bases:
BaseModel- acx: Decimal
- acy: Decimal
- acz: Decimal
- h: Decimal
- h_mag: Decimal | None
- model_computed_fields = {}
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields = {'acx': FieldInfo(annotation=Decimal, required=True, description='Acceleration X axis in m/s^2'), 'acy': FieldInfo(annotation=Decimal, required=True, description='Acceleration Y axis in m/s^2'), 'acz': FieldInfo(annotation=Decimal, required=True, description='Acceleration Z axis in m/s^2'), 'h': FieldInfo(annotation=Decimal, required=True, description='Heading in degrees', metadata=[Ge(ge=Decimal('0')), Le(le=Decimal('360'))]), 'h_mag': FieldInfo(annotation=Union[Decimal, NoneType], required=True, description='Magnetic heading in degrees', metadata=[Ge(ge=Decimal('0')), Le(le=Decimal('360'))]), 'p': FieldInfo(annotation=Decimal, required=True, description='Pitch in degrees', metadata=[Ge(ge=Decimal('-90')), Le(le=Decimal('90'))]), 'r': FieldInfo(annotation=Decimal, required=True, description='Roll in degrees', metadata=[Ge(ge=Decimal('-180')), Le(le=Decimal('180'))]), 'time': FieldInfo(annotation=TimeData, required=True, description='Time data associated with the log')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- p: Decimal
- r: Decimal
- class es_sfgtools.data_models.sv3_models.NovatelGNSSData(*, hae: Annotated[Decimal, Ge(ge=-1000), Le(le=1000)], latitude: Annotated[Decimal, Ge(ge=-90), Le(le=90)], longitude: Annotated[Decimal, Ge(ge=-180), Le(le=180)], q: SV3GPSQuality, sdx: Annotated[Decimal | None, Ge(ge=0)], sdy: Annotated[Decimal | None, Ge(ge=0)], sdz: Annotated[Decimal | None, Ge(ge=0)], separation: Decimal | None, time: TimeData)
Bases:
BaseModel- hae: Decimal
- latitude: Decimal
- longitude: Decimal
- model_computed_fields = {}
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields = {'hae': FieldInfo(annotation=Decimal, required=True, description='Height above ellipsoid in meters', metadata=[Ge(ge=-1000), Le(le=1000)]), 'latitude': FieldInfo(annotation=Decimal, required=True, description='Latitude in degrees', metadata=[Ge(ge=-90), Le(le=90)]), 'longitude': FieldInfo(annotation=Decimal, required=True, description='Longitude in degrees', metadata=[Ge(ge=-180), Le(le=180)]), 'q': FieldInfo(annotation=SV3GPSQuality, required=True, description='Quality indicator'), 'sdx': FieldInfo(annotation=Union[Decimal, NoneType], required=True, description='Standard deviation in east direction in meters', metadata=[Ge(ge=0)]), 'sdy': FieldInfo(annotation=Union[Decimal, NoneType], required=True, description='Standard deviation in north direction in meters', metadata=[Ge(ge=0)]), 'sdz': FieldInfo(annotation=Union[Decimal, NoneType], required=True, description='Standard deviation in up direction in meters', metadata=[Ge(ge=0)]), 'separation': FieldInfo(annotation=Union[Decimal, NoneType], required=True, description='Separation'), 'time': FieldInfo(annotation=TimeData, required=True, description='Time data associated with the log')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- sdx: Decimal | None
- sdy: Decimal | None
- sdz: Decimal | None
- separation: Decimal | None
- class es_sfgtools.data_models.sv3_models.NovatelHeadingData(*, gpst: Annotated[Decimal, Ge(ge=0)], h: Annotated[Decimal, Ge(ge=0), Le(le=360)], p: Annotated[Decimal, Ge(ge=-90), Le(le=90)], position_type: NovatelPositionType, receiver_status: str, sdh: Annotated[Decimal | None, Ge(ge=0)], sdp: Annotated[Decimal | None, Ge(ge=0)], solution_type: NovatelSolutionStatus, sv_used: Annotated[int, Ge(ge=0)], sv_visable: Annotated[int, Ge(ge=0)], time: TimeData)
Bases:
BaseModel- gpst: Decimal
- h: Decimal
- model_computed_fields = {}
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields = {'gpst': FieldInfo(annotation=Decimal, required=True, description='GPS time in seconds since GNSS start time', metadata=[Ge(ge=0)]), 'h': FieldInfo(annotation=Decimal, required=True, description='GNSS Computed Heading in degrees', metadata=[Ge(ge=0), Le(le=360)]), 'p': FieldInfo(annotation=Decimal, required=True, description='GNSS Computed Pitch in degrees', metadata=[Ge(ge=-90), Le(le=90)]), 'position_type': FieldInfo(annotation=NovatelPositionType, required=True, description='Type of position data'), 'receiver_status': FieldInfo(annotation=str, required=True, description='Status of the receiver'), 'sdh': FieldInfo(annotation=Union[Decimal, NoneType], required=True, description='Standard deviation of heading in degrees', metadata=[Ge(ge=0)]), 'sdp': FieldInfo(annotation=Union[Decimal, NoneType], required=True, description='Standard deviation of pitch in degrees', metadata=[Ge(ge=0)]), 'solution_type': FieldInfo(annotation=NovatelSolutionStatus, required=True, description='Solution type of the heading data'), 'sv_used': FieldInfo(annotation=int, required=True, description='Number of satellites used in the solution', metadata=[Ge(ge=0)]), 'sv_visible': FieldInfo(annotation=int, required=True, alias='sv_visable', alias_priority=2, description='Number of satellites visible', metadata=[Ge(ge=0)]), 'time': FieldInfo(annotation=TimeData, required=True, description='Time data associated with the log')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- p: Decimal
- position_type: NovatelPositionType
- receiver_status: str
- sdh: Decimal | None
- sdp: Decimal | None
- solution_type: NovatelSolutionStatus
- sv_used: int
- sv_visible: int
- class es_sfgtools.data_models.sv3_models.NovatelINSData(*, gpst: Annotated[Decimal, Ge(ge=0)], h: Annotated[Decimal, Ge(ge=0), Le(le=360)], p: Annotated[Decimal, Ge(ge=-90), Le(le=90)], r: Annotated[Decimal, Ge(ge=-180), Le(le=180)], receiver_status: str, solution_type: NovatelSolutionStatus, time: TimeData, vx: Decimal, vy: Decimal, vz: Decimal)
Bases:
BaseModel- gpst: Decimal
- h: Decimal
- model_computed_fields = {}
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields = {'gpst': FieldInfo(annotation=Decimal, required=True, description='GPS time in seconds since GNSS start time', metadata=[Ge(ge=0)]), 'h': FieldInfo(annotation=Decimal, required=True, description='SPAN INS Computed Heading in degrees', metadata=[Ge(ge=0), Le(le=360)]), 'p': FieldInfo(annotation=Decimal, required=True, description='SPAN INS Computed Pitch in degrees', metadata=[Ge(ge=-90), Le(le=90)]), 'r': FieldInfo(annotation=Decimal, required=True, description='SPAN INS Computed Roll in degrees', metadata=[Ge(ge=-180), Le(le=180)]), 'receiver_status': FieldInfo(annotation=str, required=True, description='Status of the receiver'), 'solution_type': FieldInfo(annotation=NovatelSolutionStatus, required=True, description='Solution type of the INS data'), 'time': FieldInfo(annotation=TimeData, required=True, description='Time data associated with the log'), 'velx': FieldInfo(annotation=Decimal, required=True, alias='vx', alias_priority=2, description='SPAN INS measured acceleration X axis in m/s^2'), 'vely': FieldInfo(annotation=Decimal, required=True, alias='vy', alias_priority=2, description='SPAN INS measured acceleration Y axis in m/s^2'), 'velz': FieldInfo(annotation=Decimal, required=True, alias='vz', alias_priority=2, description='SPAN INS measured acceleration Z axis in m/s^2')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- p: Decimal
- r: Decimal
- receiver_status: str
- solution_type: NovatelSolutionStatus
- velx: Decimal
- vely: Decimal
- velz: Decimal
- class es_sfgtools.data_models.sv3_models.NovatelInterrogationEvent(*, event: str = 'interrogation', event_id: Annotated[int, Ge(ge=0)], observations: NovatelObservations, sequence: Annotated[int, Ge(ge=0)], time: TimeData, type: str)
Bases:
BaseModel- event: str
- event_id: int
- model_computed_fields = {}
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields = {'event': FieldInfo(annotation=str, required=False, default='interrogation'), 'event_id': FieldInfo(annotation=int, required=True, description='ID of the tracking cycle being used', metadata=[Ge(ge=0)]), 'observations': FieldInfo(annotation=NovatelObservations, required=True, description='Observations associated with the interrogation'), 'sequence': FieldInfo(annotation=int, required=True, description='Sequence ID of the tracking cycle', metadata=[Ge(ge=0)]), 'time': FieldInfo(annotation=TimeData, required=True, description='Time data associated with the interrogation'), 'type': FieldInfo(annotation=str, required=True, description='Interrogation type')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- observations: NovatelObservations
- sequence: int
- type: str
- class es_sfgtools.data_models.sv3_models.NovatelObservations(*, AHRS: NovatelAHRSData | None, GNSS: NovatelGNSSData | None, NOV_HEADING: NovatelHeadingData | None, NOV_INS: NovatelINSData | None, NOV_RANGE: NovatelRangeData | None)
Bases:
BaseModel- AHRS: NovatelAHRSData | None
- GNSS: NovatelGNSSData | None
- NOV_HEADING: NovatelHeadingData | None
- NOV_INS: NovatelINSData | None
- NOV_RANGE: NovatelRangeData | None
- model_computed_fields = {}
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields = {'AHRS': FieldInfo(annotation=Union[NovatelAHRSData, NoneType], required=True, description='AHRS data'), 'GNSS': FieldInfo(annotation=Union[NovatelGNSSData, NoneType], required=True, description='GNSS data'), 'NOV_HEADING': FieldInfo(annotation=Union[NovatelHeadingData, NoneType], required=True, description='Novatel heading data'), 'NOV_INS': FieldInfo(annotation=Union[NovatelINSData, NoneType], required=True, description='Novatel INS data'), 'NOV_RANGE': FieldInfo(annotation=Union[NovatelRangeData, NoneType], required=True, description='Novatel range data')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class es_sfgtools.data_models.sv3_models.NovatelPositionType(value)
Bases:
Enum- DOPPLER_VELOCITY = 8
- FIXEDHEIGHT = 2
- FIXEDPOS = 1
- FLOAT_L1 = 32
- INS_PPP = 74
- INS_PPP_BASIC = 80
- INS_PPP_BASIC_CONVERGING = 79
- INS_PPP_CONVERGING = 73
- INS_PSRDIFF = 54
- INS_PSRSP = 53
- INS_RTKFIXED = 56
- INS_RTKFLOAT = 55
- INS_SBAS = 52
- L1_INT = 48
- NARROW_FLOAT = 34
- NARROW_INT = 50
- NONE = 0
- OPERATIONAL = 70
- OUT_OF_BOUNDS = 72
- PPP = 69
- PPP_BASIC = 78
- PPP_BASIC_CONVERGING = 77
- PPP_CONVERGING = 68
- PROPAGATED = 19
- PSRDIFF = 17
- RTK_DIRECT_INS = 51
- SINGLE = 16
- WAAS = 18
- WARNING = 71
- WIDE_INT = 49
- class es_sfgtools.data_models.sv3_models.NovatelRangeData(*, raw: str, time: TimeData)
Bases:
BaseModel- model_computed_fields = {}
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields = {'raw': FieldInfo(annotation=str, required=True, description='Raw range data as a string'), 'time': FieldInfo(annotation=TimeData, required=True, description='Time data associated with the range data')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- raw: str
- class es_sfgtools.data_models.sv3_models.NovatelRangeDiagnosticData(*, dbv: Decimal, snr: Decimal, xc: Decimal)
Bases:
BaseModel- classmethod convert_from_list(value: List[int | float])
- dbv: Decimal
- model_computed_fields = {}
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields = {'dbv': FieldInfo(annotation=Decimal, required=True, description='Decibel voltage in volts'), 'snr': FieldInfo(annotation=Decimal, required=True, description='Signal-to-noise ratio in dB'), 'xc': FieldInfo(annotation=Decimal, required=True, description='Cross-correlation % - Signal quality')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- snr: Decimal
- xc: Decimal
- class es_sfgtools.data_models.sv3_models.NovatelRangeEvent(*, event: str = 'range', event_id: Annotated[int, Ge(ge=0)], observations: NovatelObservations, range: NovatelRangeReplyData, sequence: Annotated[int, Ge(ge=0)], time: TimeData, uid: Annotated[str | None, MaxLen(max_length=50)])
Bases:
BaseModel- event: str
- event_id: int
- model_computed_fields = {}
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields = {'event': FieldInfo(annotation=str, required=False, default='range'), 'event_id': FieldInfo(annotation=int, required=True, description='ID of the tracking cycle being used', metadata=[Ge(ge=0)]), 'observations': FieldInfo(annotation=NovatelObservations, required=True, description='Observations associated with the range event'), 'range': FieldInfo(annotation=NovatelRangeReplyData, required=True, description='Range reply data'), 'sequence': FieldInfo(annotation=int, required=True, description='Sequence ID of the tracking cycle', metadata=[Ge(ge=0)]), 'time': FieldInfo(annotation=TimeData, required=True, description='Time data associated with the range event'), 'uid': FieldInfo(annotation=Union[str, NoneType], required=True, description='Unique identifier for the range event', metadata=[MaxLen(max_length=50)])}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- observations: NovatelObservations
- range: NovatelRangeReplyData
- sequence: int
- uid: str | None
- class es_sfgtools.data_models.sv3_models.NovatelRangeReplyData(*, cn: Annotated[str, MaxLen(max_length=20)], diag: NovatelRangeDiagnosticData, range: Decimal, tat: Annotated[Decimal, Ge(ge=0)])
Bases:
BaseModel- cn: str
- classmethod convert_tat(value: Decimal)
- model_computed_fields = {}
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields = {'cn': FieldInfo(annotation=str, required=True, description='transponder ID', metadata=[MaxLen(max_length=20)]), 'diag': FieldInfo(annotation=NovatelRangeDiagnosticData, required=True, description='Range diagnostic data'), 'range': FieldInfo(annotation=Decimal, required=True, description='Two way travel time in seconds, including beacons turn around time'), 'tat': FieldInfo(annotation=Decimal, required=True, description='Beacon turn around time in seconds', metadata=[Ge(ge=0)])}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- range: Decimal
- tat: Decimal
- class es_sfgtools.data_models.sv3_models.NovatelSolutionStatus(value)
Bases:
Enum- COLD_START = 6
- COV_TRACE = 4
- INSUFFICIENT_OBS = 1
- INTEGRITY_WARNING = 13
- INVALID_FIX = 19
- INVALID_RATE = 22
- NO_CONVERGENCE = 2
- PENDING = 18
- RESIDUALS = 9
- SINGULARITY = 3
- SOL_COMPUTED = 0
- TEST_DIST = 5
- UNAUTHORIZED = 20
- VARIANCE = 8
- V_H_LIMIT = 7
- class es_sfgtools.data_models.sv3_models.SV3GPSQuality(value)
Bases:
Enum- DEAD_RECKONING = 6
- FIX_NOT_AVAILABLE = 0
- FLOAT_RTK = 5
- MANUAL_INPUT_MODE = 7
- PSEUDO_RANGE_DIFFERENTIAL = 2
- REAL_TIME_KINEMATIC = 4
- SIMULATION_MODE = 8
- SINGLE_POINT = 1
- WAAS_SBAS = 9
- class es_sfgtools.data_models.sv3_models.TimeData(*, common: Annotated[Decimal, Ge(ge=315964800.0)], instrument: Annotated[Decimal, Ge(ge=0)], start_count: Annotated[int, Ge(ge=0)], status: str)
Bases:
BaseModel- common: Decimal
- instrument: Decimal
- model_computed_fields = {}
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields = {'common': FieldInfo(annotation=Decimal, required=True, description='TZ unaware UNIX time', metadata=[Ge(ge=315964800.0)]), 'instrument': FieldInfo(annotation=Decimal, required=True, description='Instrument time in seconds', metadata=[Ge(ge=0)]), 'start_count': FieldInfo(annotation=int, required=True, description='Start count for the time', metadata=[Ge(ge=0)]), 'status': FieldInfo(annotation=str, required=True, description='Status of the time data')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- start_count: int
- status: str