2.7.6.3. pycsamt.airborne.afmag.base#

AFMAG-family metadata built on the common airborne model.

Both generations’ SystemSpec/ReferenceStation classes inherit CoreObject, matching every sibling technology’s metadata (ZTEMSystemSpec, MobileMTSystemSpec, …): they are mutable-until-validated descriptive containers, not frozen registry value objects, so PyCSAMTObject alone would be the wrong base (see pycsamt.airborne.registry for where that choice is the right one). Range/positivity/fixed-channel normalization is delegated to pycsamt.airborne.validation rather than reimplemented here field by field.

Classes

AFMAGReferenceStation([station_id, site, ...])

Fixed magnetic reference station for tensor AFMAG/AirMt processing.

AirMtSystemSpec([...])

Published characteristics of the tensor AFMAG/AirMt generation.

OriginalAFMAGSystemSpec([...])

Descriptive characteristics of the historical comparator AFMAG.

class pycsamt.airborne.afmag.base.OriginalAFMAGSystemSpec(historical_frequency_band_hz=(1.0, 20000.0), typical_frequencies_hz=(150.0, 510.0), coil_count=2, coil_tilt_deg=45.0, coil_separation_deg=45.0, digital_recording=False, attrs=<factory>)[source]

Bases: CoreObject

Descriptive characteristics of the historical comparator AFMAG.

These values describe the original airborne implementation and are not parser constraints. Historical systems reported a comparator deflection proportional to the polarization-plane tilt rather than a digital tensor; see AFMAGValidationError and build_original_afmag_emtf() for how that scalar response is built.

Parameters:
  • historical_frequency_band_hz ((float, float), optional) – Published historical operating band in Hz, (low, high) with 0 < low < high.

  • typical_frequencies_hz (tuple of float, optional) – Typical discrete operating frequencies in Hz historically used by comparator instruments (non-empty, finite, positive).

  • coil_count (int, default 2) – Fixed at 2: the original comparator design used two crossed coils.

  • coil_tilt_deg (float, optional) – Published nominal coil tilt angle in degrees.

  • coil_separation_deg (float, optional) – Published nominal angular separation between the two coils in degrees.

  • digital_recording (bool, default False) – Whether the archival record was digitized (True) or is a purely analogue comparator deflection (False).

  • attrs (dict, optional) – Free-form extension metadata.

Raises:

ValueError – If historical_frequency_band_hz is not finite and correctly ordered, if typical_frequencies_hz is empty or not all finite/positive, if coil_count is not 2, or if coil_tilt_deg/coil_separation_deg is not finite/positive.

historical_frequency_band_hz: tuple[float, float] = (1.0, 20000.0)
typical_frequencies_hz: tuple[float, ...] = (150.0, 510.0)
coil_count: int = 2
coil_tilt_deg: float = 45.0
coil_separation_deg: float = 45.0
digital_recording: bool = False
attrs: dict[str, Any]
validate()[source]

Normalize and range-check every descriptive field in place.

Return type:

None

to_instrument_meta(*, serial=None, software_version='')[source]

Return reusable instrument metadata for historical AFMAG.

Only a magnetic_sensor is populated – electric_sensor stays None, since original comparator AFMAG has no electric channel.

Parameters:
  • serial (str | None)

  • software_version (str)

Return type:

InstrumentMeta

class pycsamt.airborne.afmag.base.AirMtSystemSpec(practical_frequency_range_hz=(20.0, 800.0), typical_frequency_count=(5, 6), time_series_sampling_rate_hz=2000.0, input_channels=('Hx', 'Hy'), output_channels=('Hx', 'Hy', 'Hz'), reference_channels=('Hx', 'Hy', 'Hz'), attrs=<factory>)[source]

Bases: CoreObject

Published characteristics of the tensor AFMAG/AirMt generation.

Parameters:
  • practical_frequency_range_hz ((float, float), optional) – Published practical frequency band in Hz, (low, high) with 0 < low < high. See practical_frequency_mask().

  • typical_frequency_count ((int, int), optional) – Typical minimum/maximum count of processed frequency windows, (low, high) with 0 < low <= high.

  • time_series_sampling_rate_hz (float, optional) – Published raw time-series sampling rate in Hz.

  • input_channels ((str, str), default ("Hx", "Hy")) – Fixed transfer-function input channels; must equal ("Hx", "Hy").

  • output_channels ((str, str, str), default ("Hx", "Hy", "Hz")) – Fixed airborne transfer-function output channels; must equal ("Hx", "Hy", "Hz").

  • reference_channels ((str, str, str), default ("Hx", "Hy", "Hz")) – Fixed channels measured at the fixed ground reference station; must equal ("Hx", "Hy", "Hz").

  • attrs (dict, optional) – Free-form extension metadata.

Raises:

ValueError – If practical_frequency_range_hz is not finite and correctly ordered, if typical_frequency_count is not a valid 0 < low <= high pair, if time_series_sampling_rate_hz is not finite/positive, or if input_channels/output_channels/ reference_channels differs from its fixed value.

practical_frequency_range_hz: tuple[float, float] = (20.0, 800.0)
typical_frequency_count: tuple[int, int] = (5, 6)
time_series_sampling_rate_hz: float = 2000.0
input_channels: tuple[str, ...] = ('Hx', 'Hy')
output_channels: tuple[str, ...] = ('Hx', 'Hy', 'Hz')
reference_channels: tuple[str, ...] = ('Hx', 'Hy', 'Hz')
attrs: dict[str, Any]
validate()[source]

Normalize and range-check every descriptive field in place.

Return type:

None

practical_frequency_mask(frequency)[source]

Return a diagnostic mask for the descriptive frequency band.

Parameters:

frequency (Any)

Return type:

ndarray

to_instrument_meta(*, serial=None, software_version='')[source]

Return reusable instrument metadata for tensor AFMAG/AirMt.

Only a magnetic_sensor is populated – electric_sensor stays None, since AirMt’s interstation transfer function has no electric channel.

Parameters:
  • serial (str | None)

  • software_version (str)

Return type:

InstrumentMeta

class pycsamt.airborne.afmag.base.AFMAGReferenceStation(station_id=None, site=None, measured_channels=('Hx', 'Hy', 'Hz'), transfer_input_channels=('Hx', 'Hy'), attrs=<factory>)[source]

Bases: CoreObject

Fixed magnetic reference station for tensor AFMAG/AirMt processing.

Passed to build_airmt_emtf() to populate processing’s remote-reference metadata; see _processing_for_reference().

Parameters:
  • station_id (str, optional) – Explicit reference-station identifier. Falls back to site.preferred_name through preferred_id when omitted; see normalize_optional_identifier().

  • site (SiteMeta, optional) – Reference-station location/identity metadata.

  • measured_channels ((str, str, str), default ("Hx", "Hy", "Hz")) – Fixed channels physically measured at the reference station; must equal ("Hx", "Hy", "Hz").

  • transfer_input_channels ((str, str), default ("Hx", "Hy")) – Fixed subset of measured_channels used as the AirMt transfer function’s input; must equal ("Hx", "Hy").

  • attrs (dict, optional) – Free-form extension metadata.

Raises:
  • TypeError – If site is supplied and is not a SiteMeta.

  • ValueError – If measured_channels differs from ("Hx", "Hy", "Hz") or transfer_input_channels differs from ("Hx", "Hy").

station_id: str | None = None
site: SiteMeta | None = None
measured_channels: tuple[str, ...] = ('Hx', 'Hy', 'Hz')
transfer_input_channels: tuple[str, ...] = ('Hx', 'Hy')
attrs: dict[str, Any]
validate()[source]

Normalize the identifier/channels and type-check site.

Return type:

None

property preferred_id: str | None[source]

Return explicit station ID, then the SiteMeta preferred name.