es_sfgtools.modeling.garpos_tools.schemas module

class es_sfgtools.modeling.garpos_tools.schemas.GPATDOffset(*, forward: float, rightward: float, downward: float)

Bases: BaseModel

downward: float
forward: float
get_offset() List[float]
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'downward': FieldInfo(annotation=float, required=True), 'forward': FieldInfo(annotation=float, required=True), 'rightward': FieldInfo(annotation=float, required=True)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

rightward: float
class es_sfgtools.modeling.garpos_tools.schemas.GPPositionENU(*, east: float | None = 0, north: float | None = 0, up: float | None = 0, east_sigma: float | None = 0, north_sigma: float | None = 0, up_sigma: float | None = 0, cov_nu: float | None = 0, cov_ue: float | None = 0, cov_en: float | None = 0)

Bases: BaseModel

cov_en: float | None
cov_nu: float | None
cov_ue: float | None
east: float | None
east_sigma: float | None
get_covariance() ndarray
get_position() List[float]
get_std_dev() List[float]
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'cov_en': FieldInfo(annotation=Union[float, NoneType], required=False, default=0), 'cov_nu': FieldInfo(annotation=Union[float, NoneType], required=False, default=0), 'cov_ue': FieldInfo(annotation=Union[float, NoneType], required=False, default=0), 'east': FieldInfo(annotation=Union[float, NoneType], required=False, default=0), 'east_sigma': FieldInfo(annotation=Union[float, NoneType], required=False, default=0), 'north': FieldInfo(annotation=Union[float, NoneType], required=False, default=0), 'north_sigma': FieldInfo(annotation=Union[float, NoneType], required=False, default=0), 'up': FieldInfo(annotation=Union[float, NoneType], required=False, default=0), 'up_sigma': FieldInfo(annotation=Union[float, NoneType], required=False, default=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.

north: float | None
north_sigma: float | None
up: float | None
up_sigma: float | None
class es_sfgtools.modeling.garpos_tools.schemas.GPPositionLLH(*, latitude: float, longitude: float, height: float | None = 0)

Bases: BaseModel

height: float | None
latitude: float
longitude: float
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'height': FieldInfo(annotation=Union[float, NoneType], required=False, default=0), 'latitude': FieldInfo(annotation=float, required=True), 'longitude': FieldInfo(annotation=float, required=True)}

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.modeling.garpos_tools.schemas.GPTransponder(*, position_llh: GPPositionLLH | None = None, position_enu: GPPositionENU | None = None, tat_offset: float | None = None, name: str | None = None, id: str | None = None, delta_center_position: GPPositionENU | None = None)

Bases: BaseModel

class Config

Bases: object

populate_by_name = True
delta_center_position: GPPositionENU | None
id: str | None
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'populate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'delta_center_position': FieldInfo(annotation=Union[GPPositionENU, NoneType], required=False, default=None), 'id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, alias=AliasChoices(choices=['id', 'address']), alias_priority=2), 'name': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'position_enu': FieldInfo(annotation=Union[GPPositionENU, NoneType], required=False, default=None), 'position_llh': FieldInfo(annotation=Union[GPPositionLLH, NoneType], required=False, default=None), 'tat_offset': FieldInfo(annotation=Union[float, NoneType], required=False, default=None)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

name: str | None
position_enu: GPPositionENU | None
position_llh: GPPositionLLH | None
tat_offset: float | None
class es_sfgtools.modeling.garpos_tools.schemas.GarposFixed(*, lib_directory: str = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/es-sfgtools/conda/document-update/lib/python3.11/site-packages/garpos/garpos_v102/f90lib'), lib_raytrace: str = 'lib_raytrace.so', inversion_params: ~es_sfgtools.modeling.garpos_tools.schemas.InversionParams = InversionParams(spline_degree=3, log_lambda=[0], log_gradlambda=-1, mu_t=[0.0], mu_mt=[0.5], knotint0=5, knotint1=0, knotint2=0, rejectcriteria=2, inversiontype=<InversionType.positions: 0>, positionalOffset=[0.0, 0.0, 0.0], traveltimescale=0.0001, maxloop=50, convcriteria=0.005, deltap=1e-06, deltab=1e-06, delta_center_position=GPPositionENU(east=0, north=0, up=0, east_sigma=1.0, north_sigma=1.0, up_sigma=1.0, cov_nu=0, cov_ue=0, cov_en=0)))

Bases: BaseModel

classmethod from_datafile(path: Path) GarposFixed
inversion_params: InversionParams
lib_directory: str
lib_raytrace: str
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'inversion_params': FieldInfo(annotation=InversionParams, required=False, default=InversionParams(spline_degree=3, log_lambda=[0], log_gradlambda=-1, mu_t=[0.0], mu_mt=[0.5], knotint0=5, knotint1=0, knotint2=0, rejectcriteria=2, inversiontype=<InversionType.positions: 0>, positionalOffset=[0.0, 0.0, 0.0], traveltimescale=0.0001, maxloop=50, convcriteria=0.005, deltap=1e-06, deltab=1e-06, delta_center_position=GPPositionENU(east=0, north=0, up=0, east_sigma=1.0, north_sigma=1.0, up_sigma=1.0, cov_nu=0, cov_ue=0, cov_en=0))), 'lib_directory': FieldInfo(annotation=str, required=False, default=PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/es-sfgtools/conda/document-update/lib/python3.11/site-packages/garpos/garpos_v102/f90lib')), 'lib_raytrace': FieldInfo(annotation=str, required=False, default='lib_raytrace.so')}

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.modeling.garpos_tools.schemas.GarposInput(*, site_name: str, campaign_id: str, survey_id: str, site_center_llh: GPPositionLLH, array_center_enu: GPPositionENU, transponders: List[GPTransponder], sound_speed_data: Path | str | None, atd_offset: GPATDOffset, start_date: datetime, end_date: datetime, shot_data: Path | str | None, delta_center_position: GPPositionENU = GPPositionENU(east=0, north=0, up=0, east_sigma=0, north_sigma=0, up_sigma=0, cov_nu=0, cov_ue=0, cov_en=0), ref_frame: str = 'ITRF', n_shot: int)

Bases: BaseModel

array_center_enu: GPPositionENU
atd_offset: GPATDOffset
campaign_id: str
delta_center_position: GPPositionENU
dt_to_str(value)
end_date: datetime
classmethod from_datafile(path: Path, survey_id: str = None) GarposInput
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'array_center_enu': FieldInfo(annotation=GPPositionENU, required=True), 'atd_offset': FieldInfo(annotation=GPATDOffset, required=True), 'campaign_id': FieldInfo(annotation=str, required=True), 'delta_center_position': FieldInfo(annotation=GPPositionENU, required=False, default=GPPositionENU(east=0, north=0, up=0, east_sigma=0, north_sigma=0, up_sigma=0, cov_nu=0, cov_ue=0, cov_en=0)), 'end_date': FieldInfo(annotation=datetime, required=True), 'n_shot': FieldInfo(annotation=int, required=True), 'ref_frame': FieldInfo(annotation=str, required=False, default='ITRF'), 'shot_data': FieldInfo(annotation=Union[Path, str, NoneType], required=True), 'site_center_llh': FieldInfo(annotation=GPPositionLLH, required=True), 'site_name': FieldInfo(annotation=str, required=True), 'sound_speed_data': FieldInfo(annotation=Union[Path, str, NoneType], required=True), 'start_date': FieldInfo(annotation=datetime, required=True), 'survey_id': FieldInfo(annotation=str, required=True), 'transponders': FieldInfo(annotation=List[GPTransponder], required=True)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

n_shot: int
path_to_str(value)
ref_frame: str
shot_data: Path | str | None
site_center_llh: GPPositionLLH
site_name: str
sound_speed_data: Path | str | None
start_date: datetime
survey_id: str
to_datafile(path: Path) None

Write a GarposInput to a datafile

Parameters:
  • garpos_input (GarposInput) – The GarposInput object

  • path (Path) – The path to the datafile

Returns:

None

transponders: List[GPTransponder]
class es_sfgtools.modeling.garpos_tools.schemas.GarposObservationOutput(*args, **kwargs)

Bases: DataFrameModel

class Config

Bases: object

add_missing_columns = True
coerce = True
name = 'GarposObservationOutput'
LogResidual: Series[float] = 'LogResidual'
MT: Series[str] = 'MT'
RT: Series[float] = 'RT'
ResiRange: Series[float] = 'ResiRange'
ResiTT: Series[float] = 'ResiTT'
ST: Series[float] = 'ST'
TT: Series[float] = 'TT'
TakeOff: Series[float] = 'TakeOff'
dV: Series[float] = 'dV'
dVO: Series[float] = 'dVO'
flag: Series[bool] = 'flag'
gamma: Series[float] = 'gamma'
gradV1e: Series[float] = 'gradV1e'
gradV1n: Series[float] = 'gradV1n'
gradV2e: Series[float] = 'gradV2e'
gradV2n: Series[float] = 'gradV2n'
head1: Series[float] = 'head1'
class es_sfgtools.modeling.garpos_tools.schemas.InversionLoop(*, iteration: int, rms_tt: float, used_shot_percentage: float, reject: int, max_dx: float, hgt: float, inv_type: InversionType)

Bases: BaseModel

hgt: float
inv_type: InversionType
iteration: int
max_dx: float
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'hgt': FieldInfo(annotation=float, required=True), 'inv_type': FieldInfo(annotation=InversionType, required=True), 'iteration': FieldInfo(annotation=int, required=True), 'max_dx': FieldInfo(annotation=float, required=True), 'reject': FieldInfo(annotation=int, required=True), 'rms_tt': FieldInfo(annotation=float, required=True), 'used_shot_percentage': FieldInfo(annotation=float, required=True)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

reject: int
rms_tt: float
used_shot_percentage: float
class es_sfgtools.modeling.garpos_tools.schemas.InversionParams(*, spline_degree: int = 3, log_lambda: List[float] = [0], log_gradlambda: float = -1, mu_t: List[float] = [0.0], mu_mt: List[float] = [0.5], knotint0: int = 5, knotint1: int = 0, knotint2: int = 0, rejectcriteria: float = 2, inversiontype: InversionType = InversionType.positions, positionalOffset: List[float] | None = [0.0, 0.0, 0.0], traveltimescale: float = 0.0001, maxloop: int = 50, convcriteria: float = 0.005, deltap: float = 1e-06, deltab: float = 1e-06, delta_center_position: GPPositionENU = GPPositionENU(east=0, north=0, up=0, east_sigma=1.0, north_sigma=1.0, up_sigma=1.0, cov_nu=0, cov_ue=0, cov_en=0))

Bases: BaseModel

class Config

Bases: object

coerce = True
convcriteria: float
delta_center_position: GPPositionENU
deltab: float
deltap: float
inversiontype: InversionType
knotint0: int
knotint1: int
knotint2: int
log_gradlambda: float
log_lambda: List[float]
maxloop: int
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'coerce': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'convcriteria': FieldInfo(annotation=float, required=False, default=0.005, description='Convergence criteria for model parameters'), 'delta_center_position': FieldInfo(annotation=GPPositionENU, required=False, default=GPPositionENU(east=0, north=0, up=0, east_sigma=1.0, north_sigma=1.0, up_sigma=1.0, cov_nu=0, cov_ue=0, cov_en=0), description='Delta center position'), 'deltab': FieldInfo(annotation=float, required=False, default=1e-06, description='Infinitesimal values to make Jacobian matrix'), 'deltap': FieldInfo(annotation=float, required=False, default=1e-06, description='Infinitesimal values to make Jacobian matrix'), 'inversiontype': FieldInfo(annotation=InversionType, required=False, default=<InversionType.positions: 0>, description='Inversion type'), 'knotint0': FieldInfo(annotation=int, required=False, default=5, description="Typical Knot interval (in min.) for gamma's component (a0, a1, a2)"), 'knotint1': FieldInfo(annotation=int, required=False, default=0, description="Typical Knot interval (in min.) for gamma's component (a0, a1, a2)"), 'knotint2': FieldInfo(annotation=int, required=False, default=0, description="Typical Knot interval (in min.) for gamma's component (a0, a1, a2)"), 'log_gradlambda': FieldInfo(annotation=float, required=False, default=-1, description='Smoothness paramter for spatial gradient'), 'log_lambda': FieldInfo(annotation=List[float], required=False, default=[0], description='Smoothness parameter for backgroun perturbation'), 'maxloop': FieldInfo(annotation=int, required=False, default=50, description='Maximum loop for iteration'), 'mu_mt': FieldInfo(annotation=List[float], required=False, default=[0.5], description='Data correlation coefficient b/w the different transponders'), 'mu_t': FieldInfo(annotation=List[float], required=False, default=[0.0], description='Correlation length of data for transmit time [minute]'), 'positionalOffset': FieldInfo(annotation=Union[List[float], NoneType], required=False, default=[0.0, 0.0, 0.0], description='Positional offset for the inversion'), 'rejectcriteria': FieldInfo(annotation=float, required=False, default=2, description='Criteria for the rejection of data (+/- rsig * Sigma)'), 'spline_degree': FieldInfo(annotation=int, required=False, default=3), 'traveltimescale': FieldInfo(annotation=float, required=False, default=0.0001, description='Typical measurement error for travel time (= 1.e-4 sec is recommended in 10 kHz carrier)')}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

mu_mt: List[float]
mu_t: List[float]
positionalOffset: List[float] | None
rejectcriteria: float
show_params() None
spline_degree: int
traveltimescale: float
classmethod validate(values)
class es_sfgtools.modeling.garpos_tools.schemas.InversionResults(*, ABIC: float, misfit: float, inv_type: InversionType, lambda_0_squared: float, grad_lambda_squared: float, mu_t: float, mu_mt: float, delta_center_position: List[float], loop_data: List[InversionLoop])

Bases: BaseModel

ABIC: float
delta_center_position: List[float]
classmethod from_dat_file(file_path: str) InversionResults

Parse the inversion results from a .dat file

Parameters:

file_path (str) – Path to the .dat file

Returns:

Inversion results

Return type:

InversionResults (obj)

grad_lambda_squared: float
inv_type: InversionType
lambda_0_squared: float
loop_data: List[InversionLoop]
misfit: float
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'ABIC': FieldInfo(annotation=float, required=True), 'delta_center_position': FieldInfo(annotation=List[float], required=True), 'grad_lambda_squared': FieldInfo(annotation=float, required=True), 'inv_type': FieldInfo(annotation=InversionType, required=True), 'lambda_0_squared': FieldInfo(annotation=float, required=True), 'loop_data': FieldInfo(annotation=List[InversionLoop], required=True), 'misfit': FieldInfo(annotation=float, required=True), 'mu_mt': FieldInfo(annotation=float, required=True), 'mu_t': FieldInfo(annotation=float, required=True)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

mu_mt: float
mu_t: float
class es_sfgtools.modeling.garpos_tools.schemas.InversionType(value)

Bases: Enum

both = 2
gammas = 1
positions = 0
class es_sfgtools.modeling.garpos_tools.schemas.ObservationData(*args, **kwargs)

Bases: DataFrameModel

Observation data file schema

Example data:

,SET,LN,MT,TT,ResiTT,TakeOff,gamma,flag,ST,ant_e0,ant_n0,ant_u0,head0,pitch0,roll0,RT,ant_e1,ant_n1,ant_u1,head1,pitch1,roll1 0,S01,L01,M11,2.289306,0.0,0.0,0.0,False,30072.395125,-27.85291,1473.14423,14.73469,176.47,0.59,-1.39,30075.74594,-26.70998,1462.01803,14.32703,177.07,-0.5,-1.1 1,S01,L01,M13,3.12669,0.0,0.0,0.0,False,30092.395725,-22.08296,1412.88729,14.59827,188.24,0.41,-2.13,30096.58392,-22.3514,1401.77938,14.65401,190.61,-0.1,-2.14 2,S01,L01,M14,2.702555,0.0,0.0,0.0,False,30093.48579,-22.25377,1409.87685,14.67772,188.93,0.15,-1.7,30097.24985,-22.38458,1399.96509,14.55534,190.82,-0.39,-2.21 3,S01,L01,M14,2.68107,0.0,0.0,0.0,False,30102.396135,-23.25514,1387.38992,14.75355,192.39,0.1,-1.79,30106.13871,-23.96613,1378.4627,14.58135,192.92,0.21,-1.7 4,S01,L01,M11,2.218846,0.0,0.0,0.0,False,30103.4862,-23.57701,1384.73242,14.65861,192.62,-0.14,-1.5,30106.766555,-24.0478,1377.09283,14.68464,193.04,0.59,-1.81

class Config

Bases: object

add_missing_columns = True
coerce = True
name = 'ObservationData'
LN: Series[str] = 'LN'
MT: Series[str] = 'MT'
RT: Series[float] = 'RT'
ResiTT: Series[float] | None = 'ResiTT'
SET: Series[str] = 'SET'
ST: Series[float] = 'ST'
TT: Series[float] = 'TT'
TakeOff: Series[float] | None = 'TakeOff'
ant_e0: Series[float] = 'ant_e0'
ant_e1: Series[float] = 'ant_e1'
ant_n0: Series[float] = 'ant_n0'
ant_n1: Series[float] = 'ant_n1'
ant_u0: Series[float] = 'ant_u0'
ant_u1: Series[float] = 'ant_u1'
flag: Series[bool] = 'flag'
gamma: Series[float] = 'gamma'
head0: Series[float] = 'head0'
head1: Series[float] = 'head1'
latitude: Series[float] | None = 'lat'
longitude: Series[float] | None = 'lon'
pitch0: Series[float] = 'pitch0'
pitch1: Series[float] = 'pitch1'
roll0: Series[float] = 'roll0'
roll1: Series[float] = 'roll1'