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 Experimentexperiment = Experiment()
experimentExperiment 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 Surveysurvey = 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 Stationstation = 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 Runrun = 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, AuxiliaryElectric 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
}
}