From 9ac7d449cd9eb52425e734ce46276489aa0080e0 Mon Sep 17 00:00:00 2001 From: bgeels <bgeels@usgs.gov> Date: Tue, 2 Apr 2024 07:22:24 -0600 Subject: [PATCH] Revert "Overhaul geomagio/Metadata.py" This reverts commit 9e1fc95748709cd408aee06be52c4e2a535784d1. --- geomagio/Metadata.py | 1670 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 1350 insertions(+), 320 deletions(-) diff --git a/geomagio/Metadata.py b/geomagio/Metadata.py index a4ad6e64..ebdb7b8c 100644 --- a/geomagio/Metadata.py +++ b/geomagio/Metadata.py @@ -1,333 +1,1363 @@ -from obspy import UTCDateTime - -from geomagio.metadata import Metadata, MetadataFactory, MetadataCategory - - -class InstrumentCalibrations: - """ - A class used to get calibrations from instrument metadata. - - ... - - Attributes - ---------- - metadata_list : list - a list of metadata objects to be processed - previous_calibration : dict - a dictionary to store the previous calibration values for each axis and key - station : str - the station code, checked for consistency across all metadata objects - location : str - the location code, checked for consistency across all metadata objects - network : str - the network code, checked for consistency across all metadata objects - - Methods - ------- - get_calibrations(): - Main method to gather applicable calibrations from the metadata list. - create_overlap_interval(current_metadata): - Creates an overlap interval from the current metadata. - update_overlap_interval(overlap_interval, current_metadata): - Updates the overlap interval with the current metadata. - update_overlap_interval_with_same_starttime(i, sorted_metadata_list, overlap_interval): - Updates the overlap interval with metadata that have the same starttime. - set_endtime(i, sorted_metadata_list, overlap_interval, current_metadata): - Sets the endtime for the overlap interval. - convert_to_calibration(overlap_metadata): - Converts overlapping metadata information to an applicable calibration. - get_channels(overlap_metadata): - Gets the channels for the applicable calibration. - """ - - def __init__(self, metadata_list): - """ - Constructs necessary attributes for the InstrumentCalibrations object and verify consistency of metadata_list. - - Parameters - ---------- - metadata_list : list - a list of metadata objects to be processed - """ - self.metadata_list = metadata_list - self.previous_calibration = { - f"{axis}_{key}": None - for axis in ["u", "v", "w"] - for key in ["constant", "bin", "offset"] - } - self.previous_calibration.update( - {"resistance": None, "temperature_scale": None, "type": None} - ) - - # Check for consistency in "station", "location", and "network" codes - stations = {metadata.station for metadata in metadata_list} - locations = {metadata.location for metadata in metadata_list} - networks = {metadata.network for metadata in metadata_list} - - if len(stations) > 1 or len(locations) > 1 or len(networks) > 1: - raise ValueError( - "Inconsistent 'station', 'location', or 'network' codes in metadata_list" - ) - else: - self.station = stations.pop() - self.location = locations.pop() - self.network = networks.pop() - - def get_calibrations(self): - """ - Main method to compile applicable calibrations from the metadata list. - - Parameters - ---------- - query_starttime : UTCDateTime - the query starttime - - Returns - ------- - list - a list of dictionaries, each representing an applicable calibration - """ - sorted_metadata_list = sorted( - self.metadata_list, - key=lambda x: x.starttime if x.starttime is not None else UTCDateTime(0), - ) - i = 0 - calibrations = [] - while i < len(sorted_metadata_list): - current_metadata = sorted_metadata_list[i] - overlap_interval = self.create_overlap_interval(current_metadata) - i = self.update_overlap_interval_with_same_starttime( - i, sorted_metadata_list, overlap_interval - ) - self.set_endtime( - i, sorted_metadata_list, overlap_interval, current_metadata - ) - calibration = self.convert_to_calibration(overlap_interval) - # if ( - # calibration["end_time"] >= query_starttime - # or calibration["end_time"] == None - # ): - calibrations.append(calibration) - i += 1 - return calibrations - - def create_overlap_interval(self, current_metadata): - """ - Creates an overlap interval from the current metadata. +"""Simulate metadata service until it is implemented. +""" - Parameters - ---------- - current_metadata : Metadata - the current metadata object - - Returns - ------- - dict - a dictionary representing an overlap interval - """ - overlap_interval = {"starttime": current_metadata.starttime} - self.update_overlap_interval(overlap_interval, current_metadata) - return overlap_interval - - def update_overlap_interval(self, overlap_interval, current_metadata): - """ - Updates the overlap interval with the current metadata. - - Parameters - ---------- - overlap_interval : dict - the overlap interval to be updated - current_metadata : Metadata - the current metadata object - """ - for axis in ["u", "v", "w"]: - for key in ["constant", "bin", "offset"]: - current_key = f"{axis}_{key}" - if current_key in current_metadata.metadata: - overlap_interval[current_key] = current_metadata.metadata[ - current_key - ] - self.previous_calibration[current_key] = current_metadata.metadata[ - current_key - ] - elif current_key in self.previous_calibration: - overlap_interval[current_key] = self.previous_calibration[ - current_key - ] - for key in ["resistance", "temperature_scale", "type"]: - if key in current_metadata.metadata: - overlap_interval[key] = current_metadata.metadata[key] - self.previous_calibration[key] = current_metadata.metadata[key] - elif key in self.previous_calibration: - overlap_interval[key] = self.previous_calibration[key] - - def update_overlap_interval_with_same_starttime( - self, i, sorted_metadata_list, overlap_interval - ): - """ - Updates the overlap interval with metadata that have the same starttime. - - Parameters - ---------- - i : int - the current index in the sorted metadata list - sorted_metadata_list : list - the sorted list of metadata objects - overlap_interval : dict - the overlap interval to be updated - - Returns - ------- - int - the updated index in the sorted metadata list - """ - while ( - i + 1 < len(sorted_metadata_list) - and sorted_metadata_list[i + 1].starttime - == sorted_metadata_list[i].starttime - ): - i += 1 - next_metadata = sorted_metadata_list[i] - self.update_overlap_interval(overlap_interval, next_metadata) - return i - - def set_endtime(self, i, sorted_metadata_list, overlap_interval, current_metadata): - """ - Sets the endtime for the overlap interval. - - Parameters - ---------- - i : int - the current index in the sorted metadata list - sorted_metadata_list : list - the sorted list of metadata objects - overlap_interval : dict - the overlap interval to be updated - current_metadata : Metadata - the current metadata object - """ - if ( - i + 1 < len(sorted_metadata_list) - and sorted_metadata_list[i + 1].starttime != current_metadata.starttime - ): - overlap_interval["endtime"] = sorted_metadata_list[i + 1].starttime - else: - overlap_interval["endtime"] = current_metadata.endtime - - def convert_to_calibration(self, overlap_metadata): - """ - Converts an overlap_metadata object to an applicable calibration. - - Parameters - ---------- - overlap_metadata : dict - the metadata overlap data to be converted - - Returns - ------- - dict - a dictionary representing an applicable calibration - """ - calibration = { - "network": self.network, - "station": self.station, - "location": self.location, - "start_time": overlap_metadata["starttime"], - "end_time": overlap_metadata["endtime"], - "instrument": { - "type": overlap_metadata["type"], - "channels": self.get_channels(overlap_metadata), - }, - } - return calibration - - def get_channels(self, overlap_metadata): - """ - Gets the channels for the applicable calibration. - - Parameters - ---------- - overlap_metadata : dict - the metadata overlap data from which to get the channels - - Returns - ------- - dict - a dictionary representing the channels for the applicable calibration - """ - channels = {} - for axis in ["U", "V", "W"]: - if ( - f"{axis.lower()}_bin" in overlap_metadata - and overlap_metadata[f"{axis.lower()}_bin"] is not None - ): - channels[axis] = [ - { - "channel": f"{axis}_Volt", - "offset": ( - overlap_metadata[f"{axis.lower()}_offset"] - if overlap_metadata[f"{axis.lower()}_offset"] is not None - else 0 - ), - "scale": overlap_metadata[f"{axis.lower()}_constant"], - }, - { - "channel": f"{axis}_Bin", - "offset": 0, - "scale": overlap_metadata[f"{axis.lower()}_bin"], - }, - ] - elif ( - "resistance" in overlap_metadata - and overlap_metadata["resistance"] is not None - ): - channels[axis] = [ - { - "channel": f"{axis}_Volt", - "offset": ( - overlap_metadata[f"{axis.lower()}_offset"] - if overlap_metadata[f"{axis.lower()}_offset"] is not None - else 0 - ), - "scale": overlap_metadata[f"{axis.lower()}_constant"] - / overlap_metadata["resistance"], - } - ] - return channels +from obspy import UTCDateTime -def get_instrument( - observatory, start_time=None, end_time=None, calibrations=None, metadata_url=None -): +def get_instrument(observatory, start_time=None, end_time=None, metadata=None): """Get instrument metadata Args: observatory: observatory code start_time: start time to match, or None to match any. end_time: end time to match, or None to match any. - calibrations: use custom list, defaults to pulling and converting metadata + metadata: use custom list, defaults to _INSTRUMENT_METADATA Returns: - list of applicable instrument calibrations + list of matching metadata """ - - if not calibrations: - factory = MetadataFactory( - url=metadata_url or "https://staging-geomag.cr.usgs.gov/ws/secure/metadata", - ) - query = Metadata( - category=MetadataCategory.INSTRUMENT, - starttime=start_time, - endtime=end_time, - station=observatory, - ) - metadata = factory.get_metadata(query=query) - instrumentCalibrations = InstrumentCalibrations(metadata) - calibrations = instrumentCalibrations.get_calibrations() - + metadata = metadata or _INSTRUMENT_METADATA return [ - c - for c in calibrations - if c["station"] == observatory - and (end_time is None or c["start_time"] is None or c["start_time"] < end_time) - and (start_time is None or c["end_time"] is None or c["end_time"] > start_time) + m + for m in metadata + if m["station"] == observatory + and (end_time is None or m["start_time"] is None or m["start_time"] < end_time) + and (start_time is None or m["end_time"] is None or m["end_time"] > start_time) ] + + +""" +To make this list easier to maintain: + - List NT network stations first, then other networks in alphabetical order + - Within networks, alphabetize by station, then start_time. + - When updating a metadata object, copy/paste the current one to the end of the list and update the endtime appropriately. + - Then update the existing object with the new information. +""" +_INSTRUMENT_METADATA = [ + { + "network": "NT", + "station": "BDT", + "start_time": None, + "end_time": UTCDateTime("2023-09-22T00:00:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 20613, "scale": 966.7624}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 944.1253}], + "W": [{"channel": "W_Volt", "offset": 47450, "scale": 975.5875}], + }, + "electronics": { + "serial": "E574", + # these scale values are calculated manually. + "x-scale": 966.7624, # nT/V + "y-scale": 944.1253, # nT/V + "z-scale": 975.5875, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0449", + # these constants combine with instrument setting for offset + "x-constant": 37027, # nT/mA + "y-constant": 36160, # nT/mA + "z-constant": 37365, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "BDT", + "start_time": UTCDateTime("2023-09-22T00:00:00.000Z"), + "end_time": UTCDateTime("2024-03-07T00:00:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 20729.5, "scale": 966.7624}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 944.1253}], + "W": [{"channel": "W_Volt", "offset": 47042.5, "scale": 975.5875}], + }, + "electronics": { + "serial": "E574", + # these scale values are calculated manually. + "x-scale": 966.7624, # nT/V + "y-scale": 944.1253, # nT/V + "z-scale": 975.5875, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0449", + # these constants combine with instrument setting for offset + "x-constant": 37027, # nT/mA + "y-constant": 36160, # nT/mA + "z-constant": 37365, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "BDT", + "start_time": UTCDateTime("2024-03-07T00:00:00.000Z"), + "end_time": None, + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 20724.67, "scale": 966.7624}], + "V": [{"channel": "V_Volt", "offset": -13.59, "scale": 944.1253}], + "W": [{"channel": "W_Volt", "offset": 47048.96, "scale": 975.5875}], + }, + "electronics": { + "serial": "E574", + # these scale values are calculated manually. + "x-scale": 966.7624, # nT/V + "y-scale": 944.1253, # nT/V + "z-scale": 975.5875, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0449", + # these constants combine with instrument setting for offset + "x-constant": 37027, # nT/mA + "y-constant": 36160, # nT/mA + "z-constant": 37365, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "BOU", + "start_time": None, + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "BXX", + "start_time": None, + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "BRT", + "start_time": None, + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 506}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 505.6}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 506}, + ], + }, + }, + }, + { + "network": "NT", + "station": "BRW", + "start_time": UTCDateTime("2023-10-24T22:45:00.000Z"), + "end_time": None, + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 9214, "scale": 5797.3}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 5777.6}], + "W": [{"channel": "W_Volt", "offset": 37172, "scale": 5895.6}], + }, + "electronics": { + "serial": "????", + # these scale values are calculated manually. + "x-scale": 5797.3, # nT/V + "y-scale": 5777.6, # nT/V + "z-scale": 5895.6, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "????", + # these constants combine with instrument setting for offset + "x-constant": None, # nT/mA + "y-constant": None, # nT/mA + "z-constant": None, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "BSL", + "start_time": None, + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "CMO", + "start_time": UTCDateTime("2023-10-27T16:20:00.000Z"), + "end_time": None, + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 12620, "scale": 967.7}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 969.7}], + "W": [{"channel": "W_Volt", "offset": 54907, "scale": 973.4}], + }, + "electronics": { + "serial": "E0568", + # these scale values are used to convert voltage + "x-scale": 967.7, # nT/V + "y-scale": 969.7, # nT/V + "z-scale": 973.4, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0443", + # these constants combine with instrument setting for offset + "x-constant": 37062, # nT/mA + "y-constant": 37141, # nT/mA + "z-constant": 37281, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "CMT", + "start_time": UTCDateTime("2023-10-26T21:00:00.000Z"), + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 99.4}, + {"channel": "U_Bin", "offset": 0, "scale": 502.5}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 101.5}, + {"channel": "V_Bin", "offset": 0, "scale": 512.5}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100.98}, + {"channel": "W_Bin", "offset": 0, "scale": 509.15}, + ], + }, + }, + }, + { + "network": "NT", + "station": "DED", + "start_time": None, + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 508.20}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 508.40}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 508.03}, + ], + }, + }, + }, + { + "network": "NT", + "station": "FDT", + "start_time": None, + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "FRD", + "start_time": None, + "end_time": UTCDateTime("2023-08-23T00:00:00.000Z"), + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "FRD", + "start_time": UTCDateTime("2023-08-23T00:00:00.000Z"), + "end_time": UTCDateTime("2023-08-30T00:00:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 21639, "scale": 978.4}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 971.0}], + "W": [{"channel": "W_Volt", "offset": 45573, "scale": 966.7}], + }, + "electronics": { + "serial": "E570", + # these scale values are used to convert voltage + "x-scale": 978.4, # nT/V + "y-scale": 971.0, # nT/V + "z-scale": 966.7, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0445", + # these constants combine with instrument setting for offset + "x-constant": 37474, # nT/mA + "y-constant": 37191, # nT/mA + "z-constant": 37025, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "FRD", + "start_time": UTCDateTime("2023-08-30T00:00:00.000Z"), + "end_time": None, + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 21639, "scale": 978.4}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 971.0}], + "W": [{"channel": "W_Volt", "offset": 45573, "scale": 966.7}], + }, + "electronics": { + "serial": "E570", + # these scale values are used to convert voltage + "x-scale": 978.4, # nT/V + "y-scale": 971.0, # nT/V + "z-scale": 966.7, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0445", + # these constants combine with instrument setting for offset + "x-constant": 37474, # nT/mA + "y-constant": 37191, # nT/mA + "z-constant": 37025, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "FRN", + "start_time": None, + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 98.48}, + {"channel": "U_Bin", "offset": 0, "scale": 497.50}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100.60}, + {"channel": "V_Bin", "offset": 0, "scale": 506}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 99}, + {"channel": "W_Bin", "offset": 0, "scale": 501}, + ], + }, + }, + }, + { + "network": "NT", + "station": "GUA", + "start_time": None, + "end_time": UTCDateTime("2024-02-26T03:00:00.000Z"), + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "GUA", + "start_time": UTCDateTime("2024-02-26T03:00:00.000Z"), + "end_time": UTCDateTime("2024-03-07T00:00:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 35975, "scale": 314.28}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 310.48}], + "W": [{"channel": "W_Volt", "offset": 7750, "scale": 317.5}], + }, + "electronics": { + "serial": "E0542", + # these scale values are used to convert voltage + "x-scale": 314.28, # V/nT + "y-scale": 310.48, # V/nT + "z-scale": 317.5, # V/nT + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0420", + # these constants combine with instrument setting for offset + "x-constant": 37085, # nT/mA + "y-constant": 36637, # nT/mA + "z-constant": 37465, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "GUA", + "start_time": UTCDateTime("2024-03-07T00:00:00.000Z"), + "end_time": None, + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 35976, "scale": 314.28}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 310.48}], + "W": [{"channel": "W_Volt", "offset": 7745, "scale": 317.5}], + }, + "electronics": { + "serial": "E0542", + # these scale values are used to convert voltage + "x-scale": 314.28, # V/nT + "y-scale": 310.48, # V/nT + "z-scale": 317.5, # V/nT + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0420", + # these constants combine with instrument setting for offset + "x-constant": 37085, # nT/mA + "y-constant": 36637, # nT/mA + "z-constant": 37465, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "GUT", + "start_time": None, + "end_time": UTCDateTime("2023-09-22T00:00:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 35989, "scale": 314.28}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 310.48}], + "W": [{"channel": "W_Volt", "offset": 7654, "scale": 317.5}], + }, + "electronics": { + "serial": "E0542", + # these scale values are used to convert voltage + "x-scale": 314.28, # V/nT + "y-scale": 310.48, # V/nT + "z-scale": 317.5, # V/nT + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0420", + # these constants combine with instrument setting for offset + "x-constant": 37085, # nT/mA + "y-constant": 36637, # nT/mA + "z-constant": 37465, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "GUT", + "start_time": UTCDateTime("2023-09-22T00:00:00.000Z"), + "end_time": UTCDateTime("2024-02-26T03:00:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 35975, "scale": 314.28}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 310.48}], + "W": [{"channel": "W_Volt", "offset": 7750, "scale": 317.5}], + }, + "electronics": { + "serial": "E0542", + # these scale values are used to convert voltage + "x-scale": 314.28, # V/nT + "y-scale": 310.48, # V/nT + "z-scale": 317.5, # V/nT + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0420", + # these constants combine with instrument setting for offset + "x-constant": 37085, # nT/mA + "y-constant": 36637, # nT/mA + "z-constant": 37465, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "GUT", + "start_time": UTCDateTime("2024-02-26T03:00:00.000Z"), + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "HON", + "start_time": None, + "end_time": UTCDateTime("2024-02-20T20:30:00.000Z"), + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "HON", + "start_time": UTCDateTime("2024-02-20T20:30:00.000Z"), + "end_time": UTCDateTime("2024-03-07T00:00:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 27126, "scale": 315.4}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 315.0}], + "W": [{"channel": "W_Volt", "offset": 21107.5, "scale": 311.7}], + }, + # this info should get updated when available + "electronics": { + "serial": "E558", + # these scale values are used to convert voltage + # these are calculated using Ohm's law, given scaling resistor value, and given nT/mA values. + "x-scale": 315.4, # nT/V + "y-scale": 315.0, # nT/V + "z-scale": 311.7, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0428", + # these constants combine with instrument setting for offset + "x-constant": 37220, # nT/mA + "y-constant": 37175, # nT/mA + "z-constant": 36775, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "HON", + "start_time": UTCDateTime("2024-03-07T00:00:00.000Z"), + "end_time": None, + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 27126, "scale": 315.4}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 315.0}], + "W": [{"channel": "W_Volt", "offset": 21207.5, "scale": 311.7}], + }, + # this info should get updated when available + "electronics": { + "serial": "E558", + # these scale values are used to convert voltage + # these are calculated using Ohm's law, given scaling resistor value, and given nT/mA values. + "x-scale": 315.4, # nT/V + "y-scale": 315.0, # nT/V + "z-scale": 311.7, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0428", + # these constants combine with instrument setting for offset + "x-constant": 37220, # nT/mA + "y-constant": 37175, # nT/mA + "z-constant": 36775, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "HOT", + "start_time": None, + "end_time": UTCDateTime("2022-07-14T16:07:30.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 0, "scale": 971.8}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 970.6}], + "W": [{"channel": "W_Volt", "offset": 0, "scale": 960.2}], + }, + # this info should get updated when available + "electronics": { + "serial": "E558", + # these scale values are used to convert voltage + # these are calculated using Ohm's law, given scaling resistor value, and given nT/mA values. + "x-scale": 971.8, # nT/V + "y-scale": 970.6, # nT/V + "z-scale": 960.2, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0428", + # these constants combine with instrument setting for offset + "x-constant": 37220, # nT/mA + "y-constant": 37175, # nT/mA + "z-constant": 36775, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "HOT", + "start_time": UTCDateTime("2022-07-14T16:07:30.000Z"), + "end_time": UTCDateTime("2023-09-22T00:00:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 27123, "scale": 315.4}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 315.0}], + "W": [{"channel": "W_Volt", "offset": 21158, "scale": 311.7}], + }, + # this info should get updated when available + "electronics": { + "serial": "E558", + # these scale values are used to convert voltage + # these are calculated using Ohm's law, given scaling resistor value, and given nT/mA values. + "x-scale": 315.4, # nT/V + "y-scale": 315.0, # nT/V + "z-scale": 311.7, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0428", + # these constants combine with instrument setting for offset + "x-constant": 37220, # nT/mA + "y-constant": 37175, # nT/mA + "z-constant": 36775, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "HOT", + "start_time": UTCDateTime("2023-09-22T00:00:00.000Z"), + "end_time": UTCDateTime("2024-02-20T20:30:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 27126, "scale": 315.4}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 315.0}], + "W": [{"channel": "W_Volt", "offset": 21107.5, "scale": 311.7}], + }, + # this info should get updated when available + "electronics": { + "serial": "E558", + # these scale values are used to convert voltage + # these are calculated using Ohm's law, given scaling resistor value, and given nT/mA values. + "x-scale": 315.4, # nT/V + "y-scale": 315.0, # nT/V + "z-scale": 311.7, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0428", + # these constants combine with instrument setting for offset + "x-constant": 37220, # nT/mA + "y-constant": 37175, # nT/mA + "z-constant": 36775, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "HOT", + "start_time": UTCDateTime("2024-02-20T20:30:00.000Z"), + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "NEW", + "start_time": None, + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "LLO", + "start_time": None, + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "SHU", + "start_time": None, + "end_time": UTCDateTime("2023-06-28T00:00:00.000Z"), + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 505}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 505}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 505}, + ], + }, + }, + }, + { + "network": "NT", + "station": "SHU", + "start_time": UTCDateTime("2023-06-28T00:00:00.000Z"), + "end_time": UTCDateTime("2023-09-07T00:00:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 19710, "scale": 944.935}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 964.909}], + "W": [{"channel": "W_Volt", "offset": 48068, "scale": 966.893}], + }, + # this info should get updated when available + "electronics": { + "serial": "E566", + # these scale values are used to convert voltage + # these are calculated using Ohm's law, given scaling resistor value (38.3 kohm), and given nT/mA values. + "x-scale": 944.935, # nT/V + "y-scale": 964.909, # nT/V + "z-scale": 966.893, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0441", + # these constants combine with instrument setting for offset + "x-constant": 36191, # nT/mA + "y-constant": 36956, # nT/mA + "z-constant": 37032, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "SHU", + "start_time": UTCDateTime("2023-09-07T00:00:00.000Z"), + "end_time": None, + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 19710, "scale": 975.1}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 969.4}], + "W": [{"channel": "W_Volt", "offset": 48068, "scale": 978.5}], + }, + # this info should get updated when available + "electronics": { + "serial": "E0598", + # these scale values are used to convert voltage + "x-scale": 975.1, # nT/V + "y-scale": 969.4, # nT/V + "z-scale": 978.5, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0460", + "x-constant": 37348, # nT/mA + "y-constant": 37127, # nT/mA + "z-constant": 37477, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "SIT", + "start_time": None, + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "SJG", + "start_time": None, + "end_time": UTCDateTime("2023-08-18T19:02:34.000Z"), + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "SJG", + "start_time": UTCDateTime("2023-08-18T19:02:34.000Z"), + "end_time": UTCDateTime("2023-08-30T00:00:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 27047, "scale": 313.2034}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 312.2797}], + "W": [{"channel": "W_Volt", "offset": 24288, "scale": 311.9576}], + }, + "electronics": { + "serial": "E0543", + # these scale values are calculated manually + "x-scale": 313.2034, # nT/V + "y-scale": 312.2797, # nT/V + "z-scale": 311.9576, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0419", + # these constants combine with instrument setting for offset + "x-constant": 36958, # nT/mA + "y-constant": 36849, # nT/mA + "z-constant": 36811, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "SJG", + "start_time": UTCDateTime("2023-08-30T00:00:00.000Z"), + "end_time": None, + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 26947.5, "scale": 313.2034}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 312.2797}], + "W": [{"channel": "W_Volt", "offset": 24690, "scale": 311.9576}], + }, + "electronics": { + "serial": "E0543", + # these scale values are calculated manually + "x-scale": 313.2034, # nT/V + "y-scale": 312.2797, # nT/V + "z-scale": 311.9576, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0419", + # these constants combine with instrument setting for offset + "x-constant": 36958, # nT/mA + "y-constant": 36849, # nT/mA + "z-constant": 36811, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "SJT", + "start_time": None, + "end_time": UTCDateTime("2023-08-18T19:02:34.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 27047, "scale": 313.2034}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 312.2797}], + "W": [{"channel": "W_Volt", "offset": 24288, "scale": 311.9576}], + }, + # this info should get updated when available + "electronics": { + "serial": "E0543", + # these scale values are calculated manually + "x-scale": 313.2034, # nT/V + "y-scale": 312.2797, # nT/V + "z-scale": 311.9576, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0419", + # these constants combine with instrument setting for offset + "x-constant": 36958, # nT/mA + "y-constant": 36849, # nT/mA + "z-constant": 36811, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "SJT", + "start_time": UTCDateTime("2023-08-18T19:02:34.000Z"), + "end_time": None, + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "TUC", + "start_time": None, + "end_time": UTCDateTime("2023-03-29T00:00:00.000Z"), + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 500}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 500}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 500}, + ], + }, + }, + }, + { + "network": "NT", + "station": "TUC", + "start_time": UTCDateTime("2023-03-29T00:00:00.000Z"), + "end_time": UTCDateTime("2023-08-30T00:00:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 24024, "scale": 978.355}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 965.901}], + "W": [{"channel": "W_Volt", "offset": 40040, "scale": 954.543}], + }, + # this info should get updated when available + "electronics": { + "serial": "E571", + # these scale values are calculated manually + "x-scale": 978.355, # nT/V + "y-scale": 965.901, # nT/V + "z-scale": 954.543, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0446", + # these constants combine with instrument setting for offset + "x-constant": 37471, # nT/mA + "y-constant": 36994, # nT/mA + "z-constant": 36559, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "TUC", + "start_time": UTCDateTime("2023-08-30T00:00:00.000Z"), + "end_time": None, + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 24016.5, "scale": 978.355}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 965.901}], + "W": [{"channel": "W_Volt", "offset": 39953.5, "scale": 954.543}], + }, + # this info should get updated when available + "electronics": { + "serial": "E571", + # these scale values are calculated manually + "x-scale": 978.355, # nT/V + "y-scale": 965.901, # nT/V + "z-scale": 954.543, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0446", + # these constants combine with instrument setting for offset + "x-constant": 37471, # nT/mA + "y-constant": 36994, # nT/mA + "z-constant": 36559, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "BRW", + "start_time": None, + "end_time": UTCDateTime("2023-10-23T20:00:00.000Z"), + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 100}, + {"channel": "U_Bin", "offset": 0, "scale": 506}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 100}, + {"channel": "V_Bin", "offset": 0, "scale": 505.6}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100}, + {"channel": "W_Bin", "offset": 0, "scale": 506}, + ], + }, + }, + }, + { + "network": "NT", + "station": "BRW", + "start_time": UTCDateTime("2023-10-23T19:00:00.000Z"), + "end_time": UTCDateTime("2023-10-24T22:45:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 9217, "scale": 5797.3}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 5777.6}], + "W": [{"channel": "W_Volt", "offset": 56442, "scale": 5895.6}], + }, + "electronics": { + "serial": "????", + # these scale values are calculated manually. + "x-scale": 5797.3, # nT/V + "y-scale": 5777.6, # nT/V + "z-scale": 5895.6, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "????", + # these constants combine with instrument setting for offset + "x-constant": None, # nT/mA + "y-constant": None, # nT/mA + "z-constant": None, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "CMO", + "start_time": None, + "end_time": UTCDateTime("2023-10-26T21:00:00.000Z"), + "instrument": { + "type": "Narod", + "channels": { + "U": [ + {"channel": "U_Volt", "offset": 0, "scale": 99.4}, + {"channel": "U_Bin", "offset": 0, "scale": 502.5}, + ], + "V": [ + {"channel": "V_Volt", "offset": 0, "scale": 101.5}, + {"channel": "V_Bin", "offset": 0, "scale": 512.5}, + ], + "W": [ + {"channel": "W_Volt", "offset": 0, "scale": 100.98}, + {"channel": "W_Bin", "offset": 0, "scale": 509.15}, + ], + }, + }, + }, + { + "network": "NT", + "station": "CMT", + "start_time": None, + "end_time": UTCDateTime("2023-10-26T21:00:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 0, "scale": 967.7}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 969.7}], + "W": [{"channel": "W_Volt", "offset": 0, "scale": 973.4}], + }, + "electronics": { + "serial": "E0568", + # these scale values are used to convert voltage + "x-scale": 967.7, # nT/V + "y-scale": 969.7, # nT/V + "z-scale": 973.4, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0443", + # these constants combine with instrument setting for offset + "x-constant": 37062, # nT/mA + "y-constant": 37141, # nT/mA + "z-constant": 37281, # nT/mA + }, + }, + }, + { + "network": "NT", + "station": "CMO", + "start_time": UTCDateTime("2023-10-26T21:00:00.000Z"), + "end_time": UTCDateTime("2023-10-27T16:20:00.000Z"), + "instrument": { + "type": "FGE", + "channels": { + # each channel maps to a list of components to calculate nT + # TODO: calculate these lists based on "FGE" type + "U": [{"channel": "U_Volt", "offset": 0, "scale": 967.7}], + "V": [{"channel": "V_Volt", "offset": 0, "scale": 969.7}], + "W": [{"channel": "W_Volt", "offset": 0, "scale": 973.4}], + }, + "electronics": { + "serial": "E0568", + # these scale values are used to convert voltage + "x-scale": 967.7, # nT/V + "y-scale": 969.7, # nT/V + "z-scale": 973.4, # nT/V + "temperature-scale": 0.01, # V/K + }, + "sensor": { + "serial": "S0443", + # these constants combine with instrument setting for offset + "x-constant": 37062, # nT/mA + "y-constant": 37141, # nT/mA + "z-constant": 37281, # nT/mA + }, + }, + }, +] -- GitLab