Introduction to MT Metadata¶
MT metadata was developed by the Working Group for Magnetotelluric Data Handling and Software over the coarse of 2 years. The settled upon standard is hierarchical as show below.
Experiment --> Survey --> Station --> Run --> Channel
Level | Description |
---|---|
Experiment | The highest level, ironically currently does not have any metadata directly associated with it. |
Survey | A single MT survey, usually confined by time or location |
Station | A single MT sounding collectin in a single geographic point |
Run | A continuous block of time series data collected at a station |
Channel | A single channel collected in a run |
mt_metadata
provides classes for each of these levels in mt_metadata.timeseries
, where each class inherits Base
. Each of these levels, except Experiment
, has certain metadata associate with it, below those are shown.
Experiment¶
Currently Experiment
is a convenience class for containing a group of Survey
objects. In the future Experiment
will have metadata. The benefit of Experiment
is that it can easily be converted to an all inclusive JSON, XML or translated to a StationXML file, where the resulting file contains all the metadata for the experiment.
from mt_metadata.timeseries import Experiment
experiment = Experiment()
experiment
Experiment Contents
--------------------
Methods¶
Besides the methods provided by Base
Experiment
provides some convenient methods
Method | Description |
---|---|
survey_names | list of survey names contained in the experiment |
surveys | list of Survey objects |
Survey¶
Again, a survey is a group of MT stations collected in a specific geographic region or collected during a specific time period. Below are all the metadata that a Survey
object can contain. Note that most of the metadata are built with smaller metadata objects, for example acquired_by
is a mt_metadata.timeseries.Person
object and can contain any of the attributes a Person
can have.
One key component of Survey
is that filters are stored at this level to remove redunant metadata at the channel level. Filters are covered in the next examples.
from mt_metadata.timeseries import Survey
survey = Survey()
print(survey.to_json(required=False))
{
"survey": {
"acquired_by.author": null,
"acquired_by.comments": null,
"citation_dataset.authors": null,
"citation_dataset.doi": null,
"citation_dataset.journal": null,
"citation_dataset.pages": null,
"citation_dataset.title": null,
"citation_dataset.volume": null,
"citation_dataset.year": "1980-01-01T00:00:00+00:00",
"citation_journal.authors": null,
"citation_journal.doi": null,
"citation_journal.journal": null,
"citation_journal.pages": null,
"citation_journal.title": null,
"citation_journal.volume": null,
"citation_journal.year": "1980-01-01T00:00:00+00:00",
"comments": null,
"country": null,
"datum": "WGS84",
"fdsn.alternate_code": null,
"fdsn.alternate_network_code": null,
"fdsn.channel_code": null,
"fdsn.id": null,
"fdsn.network": null,
"fdsn.new_epoch": null,
"geographic_name": null,
"id": null,
"name": null,
"northwest_corner.latitude": 0.0,
"northwest_corner.longitude": 0.0,
"project": null,
"project_lead.author": null,
"project_lead.email": null,
"project_lead.organization": null,
"release_license": "CC-0",
"southeast_corner.latitude": 0.0,
"southeast_corner.longitude": 0.0,
"summary": null,
"time_period.end_date": "1980-01-01",
"time_period.start_date": "1980-01-01"
}
}
survey.filters
{}
Station¶
Station is a MT sounding at a single geologic point.
from mt_metadata.timeseries import Station
station = Station()
print(station.to_json(required=False))
{
"station": {
"acquired_by.comments": null,
"acquired_by.name": null,
"channel_layout": null,
"channels_recorded": [],
"comments": null,
"data_type": "BBMT",
"fdsn.alternate_code": null,
"fdsn.alternate_network_code": null,
"fdsn.channel_code": null,
"fdsn.id": null,
"fdsn.network": null,
"fdsn.new_epoch": null,
"geographic_name": null,
"id": null,
"location.datum": null,
"location.declination.comments": null,
"location.declination.epoch": null,
"location.declination.model": "WMM",
"location.declination.value": 0.0,
"location.elevation": 0.0,
"location.latitude": 0.0,
"location.longitude": 0.0,
"location.x": null,
"location.x2": null,
"location.y": null,
"location.y2": null,
"location.z": null,
"location.z2": null,
"orientation.angle_to_geographic_north": null,
"orientation.method": null,
"orientation.reference_frame": "geographic",
"orientation.value": null,
"provenance.comments": null,
"provenance.creation_time": "1980-01-01T00:00:00+00:00",
"provenance.log": null,
"provenance.software.author": "none",
"provenance.software.last_updated": "1980-01-01T00:00:00+00:00",
"provenance.software.name": null,
"provenance.software.version": null,
"provenance.submitter.author": null,
"provenance.submitter.email": null,
"provenance.submitter.organization": null,
"run_list": [],
"time_period.end": "1980-01-01T00:00:00+00:00",
"time_period.start": "1980-01-01T00:00:00+00:00"
}
}
Run¶
Run is a continuous block of data collected at a station at a single sample rate.
from mt_metadata.timeseries import Run
run = Run()
print(run.to_json(required=False))
{
"run": {
"acquired_by.author": null,
"acquired_by.comments": null,
"channels_recorded_auxiliary": [],
"channels_recorded_electric": [],
"channels_recorded_magnetic": [],
"comments": null,
"data_logger.firmware.author": null,
"data_logger.firmware.last_updated": "1980-01-01T00:00:00+00:00",
"data_logger.firmware.name": null,
"data_logger.firmware.version": null,
"data_logger.id": null,
"data_logger.manufacturer": null,
"data_logger.model": null,
"data_logger.name": null,
"data_logger.power_source.comments": null,
"data_logger.power_source.id": null,
"data_logger.power_source.type": null,
"data_logger.power_source.voltage.end": null,
"data_logger.power_source.voltage.start": null,
"data_logger.timing_system.comments": null,
"data_logger.timing_system.drift": 0.0,
"data_logger.timing_system.type": "GPS",
"data_logger.timing_system.uncertainty": 0.0,
"data_logger.type": null,
"data_type": "BBMT",
"fdsn.alternate_code": null,
"fdsn.alternate_network_code": null,
"fdsn.channel_code": null,
"fdsn.id": null,
"fdsn.network": null,
"fdsn.new_epoch": null,
"id": null,
"metadata_by.author": null,
"metadata_by.comments": null,
"provenance.comments": null,
"provenance.log": null,
"sample_rate": 0.0,
"time_period.end": "1980-01-01T00:00:00+00:00",
"time_period.start": "1980-01-01T00:00:00+00:00"
}
}
Channel¶
Channel is a 1D timeseries collected in a run. There are 3 types of channels Electric
, Magnetic
, and Auxiliary
from mt_metadata.timeseries import Electric, Magnetic, Auxiliary
Electric Channel¶
Electric channels measure the potential difference between a positive and negative electrode.
electric_channel = Electric()
print(electric_channel.to_json(required=False))
{
"electric": {
"ac.end": null,
"ac.start": null,
"channel_id": null,
"channel_number": 0,
"comments": null,
"component": null,
"contact_resistance.end": null,
"contact_resistance.start": null,
"data_quality.comments": null,
"data_quality.flag": null,
"data_quality.good_from_period": null,
"data_quality.good_to_period": null,
"data_quality.rating.author": null,
"data_quality.rating.method": null,
"data_quality.rating.value": 0,
"data_quality.warnings": null,
"dc.end": null,
"dc.start": null,
"dipole_length": null,
"filter.applied": [
false
],
"filter.comments": null,
"filter.name": [],
"measurement_azimuth": 0.0,
"measurement_tilt": 0.0,
"negative.datum": null,
"negative.elevation": 0.0,
"negative.id": null,
"negative.latitude": 0.0,
"negative.longitude": 0.0,
"negative.manufacturer": null,
"negative.model": null,
"negative.name": null,
"negative.type": null,
"negative.x": null,
"negative.x2": null,
"negative.y": null,
"negative.y2": null,
"negative.z": null,
"negative.z2": null,
"positive.datum": null,
"positive.elevation": 0.0,
"positive.id": null,
"positive.latitude": 0.0,
"positive.longitude": 0.0,
"positive.manufacturer": null,
"positive.model": null,
"positive.name": null,
"positive.type": null,
"positive.x": null,
"positive.x2": null,
"positive.y": null,
"positive.y2": null,
"positive.z": null,
"positive.z2": null,
"sample_rate": 0.0,
"time_period.end": "1980-01-01T00:00:00+00:00",
"time_period.start": "1980-01-01T00:00:00+00:00",
"translated_azimuth": null,
"translated_tilt": null,
"type": "electric",
"units": null
}
}
Magnetic Channel¶
A magnetic channel measures a single component of the magnetic field.
magnetic_channel = Magnetic()
print(magnetic_channel.to_json(required=False))
{
"magnetic": {
"channel_id": null,
"channel_number": 0,
"comments": null,
"component": null,
"data_quality.comments": null,
"data_quality.flag": null,
"data_quality.good_from_period": null,
"data_quality.good_to_period": null,
"data_quality.rating.author": null,
"data_quality.rating.method": null,
"data_quality.rating.value": 0,
"data_quality.warnings": null,
"fdsn.alternate_code": null,
"fdsn.alternate_network_code": null,
"fdsn.channel_code": null,
"fdsn.id": null,
"fdsn.network": null,
"fdsn.new_epoch": null,
"filter.applied": [
false
],
"filter.comments": null,
"filter.name": [],
"h_field_max.end": null,
"h_field_max.start": null,
"h_field_min.end": null,
"h_field_min.start": null,
"location.elevation": 0.0,
"location.latitude": 0.0,
"location.longitude": 0.0,
"location.x": null,
"location.y": null,
"location.z": null,
"measurement_azimuth": 0.0,
"measurement_tilt": 0.0,
"sample_rate": 0.0,
"sensor.id": null,
"sensor.manufacturer": null,
"sensor.model": null,
"sensor.name": null,
"sensor.type": null,
"time_period.end": "1980-01-01T00:00:00+00:00",
"time_period.start": "1980-01-01T00:00:00+00:00",
"translated_azimuth": null,
"translated_tilt": null,
"type": "magnetic",
"units": null
}
}
Auxiliary Channel¶
An auxiliary channel is anything that is not a magnetic or electric channel.
auxiliary_channel = Auxiliary()
print(auxiliary_channel.to_json(required=False))
{
"auxiliary": {
"channel_id": null,
"channel_number": 0,
"comments": null,
"component": null,
"data_quality.comments": null,
"data_quality.flag": null,
"data_quality.good_from_period": null,
"data_quality.good_to_period": null,
"data_quality.rating.author": null,
"data_quality.rating.method": null,
"data_quality.rating.value": 0,
"data_quality.warnings": null,
"fdsn.alternate_code": null,
"fdsn.alternate_network_code": null,
"fdsn.channel_code": null,
"fdsn.id": null,
"fdsn.network": null,
"fdsn.new_epoch": null,
"filter.applied": [
false
],
"filter.comments": null,
"filter.name": [],
"location.elevation": 0.0,
"location.latitude": 0.0,
"location.longitude": 0.0,
"measurement_azimuth": 0.0,
"measurement_tilt": 0.0,
"sample_rate": 0.0,
"sensor.id": null,
"sensor.manufacturer": null,
"sensor.model": null,
"sensor.name": null,
"sensor.type": null,
"time_period.end": "1980-01-01T00:00:00+00:00",
"time_period.start": "1980-01-01T00:00:00+00:00",
"translated_azimuth": null,
"translated_tilt": null,
"type": null,
"units": null
}
}