Package Core¶
Module z¶
- class mtpy.core.z.ResPhase(z_array=None, z_err_array=None, freq=None, **kwargs)[source]¶
resistivity and phase container
- Attributes
- phase
- phase_det
- phase_det_err
- phase_err
- phase_err_xx
- phase_err_xy
- phase_err_yx
- phase_err_yy
- phase_xx
- phase_xy
- phase_yx
- phase_yy
- res_det
- res_det_err
- res_err_xx
- res_err_xy
- res_err_yx
- res_err_yy
- res_xx
- res_xy
- res_yx
- res_yy
- resistivity
- resistivity_err
Methods
compute_resistivity_phase
([z_array, ...])compute resistivity and phase from z and z_err
set_res_phase
(res_array, phase_array, freq)Set values for resistivity (res - in Ohm m) and phase (phase - in degrees), including error propagation.
- compute_resistivity_phase(z_array=None, z_err_array=None, freq=None)[source]¶
compute resistivity and phase from z and z_err
- set_res_phase(res_array, phase_array, freq, res_err_array=None, phase_err_array=None)[source]¶
Set values for resistivity (res - in Ohm m) and phase (phase - in degrees), including error propagation.
- Parameters
res_array (np.ndarray(num_freq, 2, 2)) – resistivity array in Ohm-m
phase_array (np.ndarray(num_freq, 2, 2)) – phase array in degrees
freq (np.ndarray(num_freq)) – frequency array in Hz
res_err_array (np.ndarray(num_freq, 2, 2)) – resistivity error array in Ohm-m
phase_err_array (np.ndarray(num_freq, 2, 2)) – phase error array in degrees
- class mtpy.core.z.Tipper(tipper_array=None, tipper_err_array=None, freq=None)[source]¶
Tipper class –> generates a Tipper-object.
Errors are given as standard deviations (sqrt(VAR))
- Parameters
tipper_array (np.ndarray((nf, 1, 2), dtype='complex')) – tipper array in the shape of [Tx, Ty] default is None
tipper_err_array (np.ndarray((nf, 1, 2))) – array of estimated tipper errors in the shape of [Tx, Ty]. Must be the same shape as tipper_array. default is None
freq (np.ndarray(nf)) – array of frequencies corresponding to the tipper elements. Must be same length as tipper_array. default is None
Attributes
Description
freq
array of frequencies corresponding to elements of z
rotation_angle
angle of which data is rotated by
tipper
tipper array
tipper_err
tipper error array
Methods
Description
mag_direction
computes magnitude and direction of real and imaginary induction arrows.
amp_phase
computes amplitude and phase of Tx and Ty.
rotate
rotates the data by the given angle
- Attributes
- amplitude
- amplitude_err
- angle_err
- angle_imag
- angle_real
- freq
- mag_err
- mag_imag
- mag_real
- phase
- phase_err
- tipper
- tipper_err
Methods
Sets attributes:
computes the magnitude and direction of the real and imaginary induction vectors.
rotate
(alpha)Rotate Tipper array.
set_amp_phase
(r_array, phi_array)Set values for amplitude(r) and argument (phi - in degrees).
set_mag_direction
(mag_real, ang_real, ...)computes the tipper from the magnitude and direction of the real and imaginary components.
- compute_amp_phase()[source]¶
- Sets attributes:
amplitude
phase
amplitude_err
phase_err
values for resistivity are in in Ohm m and phase in degrees.
- compute_mag_direction()[source]¶
computes the magnitude and direction of the real and imaginary induction vectors.
- rotate(alpha)[source]¶
Rotate Tipper array.
Rotation angle must be given in degrees. All angles are referenced to geographic North=0, positive in clockwise direction. (Mathematically negative!)
In non-rotated state, ‘X’ refs to North and ‘Y’ to East direction.
- Updates the attributes:
tipper
tipper_err
rotation_angle
- class mtpy.core.z.Z(z_array=None, z_err_array=None, freq=None)[source]¶
Z class - generates an impedance tensor (Z) object.
Z is a complex array of the form (n_freq, 2, 2), with indices in the following order:
Zxx: (0,0)
Zxy: (0,1)
Zyx: (1,0)
Zyy: (1,1)
All errors are given as standard deviations (sqrt(VAR))
- Parameters
z_array (numpy.ndarray(n_freq, 2, 2)) – array containing complex impedance values
z_err_array (numpy.ndarray(n_freq, 2, 2)) – array containing error values (standard deviation) of impedance tensor elements
freq (np.ndarray(n_freq)) – array of frequency values corresponding to impedance tensor elements.
Attributes
Description
freq
array of frequencies corresponding to elements of z
rotation_angle
angle of which data is rotated by
z
impedance tensor
z_err
estimated errors of impedance tensor
resistivity
apparent resisitivity estimated from z in Ohm-m
resistivity_err
apparent resisitivity error
phase
impedance phase (deg)
phase_err
error in impedance phase
Methods
Description
det
calculates determinant of z with errors
invariants
calculates the invariants of z
inverse
calculates the inverse of z
remove_distortion
removes distortion given a distortion matrix
remove_ss
removes static shift by assumin Z = S * Z_0
norm
calculates the norm of Z
only1d
zeros diagonal components and computes the absolute valued mean of the off-diagonal components.
only2d
zeros diagonal components
res_phase
computes resistivity and phase
rotate
rotates z positive clockwise, angle assumes North is 0.
set_res_phase
recalculates z and z_err, needs attribute freq
skew
calculates the invariant skew (off diagonal trace)
trace
calculates the trace of z
- Example
>>> import mtpy.core.z as mtz >>> import numpy as np >>> z_test = np.array([[0+0j, 1+1j], [-1-1j, 0+0j]]) >>> z_object = mtz.Z(z_array=z_test, freq=[1]) >>> z_object.rotate(45) >>> z_object.resistivity
- Attributes
det
Return the determinant of Z
det_err
Return the determinant of Z error
freq
Frequencies for each impedance tensor element
invariants
Return a dictionary of Z-invariants.
inverse
Return the inverse of Z.
norm
Return the 2-/Frobenius-norm of Z
norm_err
Return the 2-/Frobenius-norm of Z error
only_1d
Return Z in 1D form.
only_2d
Return Z in 2D form.
- phase
- phase_det
- phase_det_err
- phase_err
- phase_err_xx
- phase_err_xy
- phase_err_yx
- phase_err_yy
- phase_xx
- phase_xy
- phase_yx
- phase_yy
- res_det
- res_det_err
- res_err_xx
- res_err_xy
- res_err_yx
- res_err_yy
- res_xx
- res_xy
- res_yx
- res_yy
- resistivity
- resistivity_err
skew
Returns the skew of Z as defined by Z[0, 1] + Z[1, 0]
skew_err
Returns the skew error of Z as defined by Z_err[0, 1] + Z_err[1, 0]
trace
Return the trace of Z
trace_err
Return the trace of Z
z
Impedance tensor
- z_err
Methods
compute_resistivity_phase
([z_array, ...])compute resistivity and phase from z and z_err
remove_distortion
(distortion_tensor[, ...])Remove distortion D form an observed impedance tensor Z to obtain the uperturbed "correct" Z0: Z = D * Z0
remove_ss
([reduce_res_factor_x, ...])Remove the static shift by providing the respective correction factors for the resistivity in the x and y components.
rotate
(alpha)Rotate Z array by angle alpha.
set_res_phase
(res_array, phase_array, freq)Set values for resistivity (res - in Ohm m) and phase (phase - in degrees), including error propagation.
- property det¶
Return the determinant of Z
- Returns
det_Z
- Return type
np.ndarray(nfreq)
- property det_err¶
Return the determinant of Z error
- Returns
det_Z_err
- Return type
np.ndarray(nfreq)
- property freq¶
Frequencies for each impedance tensor element
Units are Hz.
- property invariants¶
Return a dictionary of Z-invariants.
- property inverse¶
Return the inverse of Z.
(no error propagtaion included yet)
- property norm¶
Return the 2-/Frobenius-norm of Z
- Returns
norm
- Return type
np.ndarray(nfreq)
- property norm_err¶
Return the 2-/Frobenius-norm of Z error
- Returns
norm_err
- Return type
np.ndarray(nfreq)
- property only_1d¶
Return Z in 1D form.
If Z is not 1D per se, the diagonal elements are set to zero, the off-diagonal elements keep their signs, but their absolute is set to the mean of the original Z off-diagonal absolutes.
- property only_2d¶
Return Z in 2D form.
If Z is not 2D per se, the diagonal elements are set to zero.
- remove_distortion(distortion_tensor, distortion_err_tensor=None)[source]¶
Remove distortion D form an observed impedance tensor Z to obtain the uperturbed “correct” Z0: Z = D * Z0
Propagation of errors/uncertainties included
- Parameters
distortion_tensor (np.ndarray(2, 2, dtype=real)) – real distortion tensor as a 2x2
distortion_err_tensor – default is None
- Return type
np.ndarray(2, 2, dtype=’real’)
- returns
impedance tensor with distorion removed
- Return type
np.ndarray(num_freq, 2, 2, dtype=’complex’)
- returns
impedance tensor error after distortion is removed
- Return type
np.ndarray(num_freq, 2, 2, dtype=’complex’)
- Example
>>> import mtpy.core.z as mtz >>> distortion = np.array([[1.2, .5],[.35, 2.1]]) >>> d, new_z, new_z_err = z_obj.remove_distortion(distortion)
- remove_ss(reduce_res_factor_x=1.0, reduce_res_factor_y=1.0)[source]¶
Remove the static shift by providing the respective correction factors for the resistivity in the x and y components. (Factors can be determined by using the “Analysis” module for the impedance tensor)
Assume the original observed tensor Z is built by a static shift S and an unperturbated “correct” Z0 :
Z = S * Z0
- therefore the correct Z will be :
Z0 = S^(-1) * Z
- Parameters
reduce_res_factor_x (float or iterable list or array) – static shift factor to be applied to x components (ie z[:, 0, :]). This is assumed to be in resistivity scale
reduce_res_factor_y (float or iterable list or array) – static shift factor to be applied to y components (ie z[:, 1, :]). This is assumed to be in resistivity scale
- Returns
static shift matrix,
- Return type
np.ndarray ((2, 2))
- Returns
corrected Z
- Return type
Note
The factors are in resistivity scale, so the entries of the matrix “S” need to be given by their square-roots!
- rotate(alpha)[source]¶
Rotate Z array by angle alpha.
Rotation angle must be given in degrees. All angles are referenced to geographic North, positive in clockwise direction. (Mathematically negative!)
In non-rotated state, X refs to North and Y to East direction.
- Updates the attributes
z
z_err
zrot
resistivity
phase
resistivity_err
phase_err
- property skew¶
Returns the skew of Z as defined by Z[0, 1] + Z[1, 0]
Note
This is not the MT skew, but simply the linear algebra skew
- Returns
skew
- Return type
np.ndarray(nfreq, 2, 2)
- property skew_err¶
Returns the skew error of Z as defined by Z_err[0, 1] + Z_err[1, 0]
Note
This is not the MT skew, but simply the linear algebra skew
- Returns
skew_err
- Return type
np.ndarray(nfreq, 2, 2)
- property trace¶
Return the trace of Z
- Returns
Trace(z)
- Return type
np.ndarray(nfreq, 2, 2)
- property trace_err¶
Return the trace of Z
- Returns
Trace(z)
- Return type
np.ndarray(nfreq, 2, 2)
- property z¶
Impedance tensor
np.ndarray(nfreq, 2, 2)
- mtpy.core.z.correct4sensor_orientation(Z_prime, Bx=0, By=90, Ex=0, Ey=90, Z_prime_error=None)[source]¶
Correct a Z-array for wrong orientation of the sensors.
- Assume, E’ is measured by sensors orientated with the angles
E’x: a E’y: b
- Assume, B’ is measured by sensors orientated with the angles
B’x: c B’y: d
- With those data, one obtained the impedance tensor Z’:
E’ = Z’ * B’
- Now we define change-of-basis matrices T,U so that
E = T * E’ B = U * B’
=> T contains the expression of the E’-basis in terms of E (the standard basis) and U contains the expression of the B’-basis in terms of B (the standard basis) The respective expressions for E’x-basis vector and E’y-basis vector are the columns of T. The respective expressions for B’x-basis vector and B’y-basis vector are the columns of U.
We obtain the impedance tensor in default coordinates as:
- E’ = Z’ * B’ => T^(-1) * E = Z’ * U^(-1) * B
=> E = T * Z’ * U^(-1) * B => Z = T * Z’ * U^(-1)
- Parameters
Z_prime – impedance tensor to be adjusted
Bx (float (angle in degrees)) – orientation of Bx relative to geographic north (0) default is 0
By –
Ex (float (angle in degrees)) – orientation of Ex relative to geographic north (0) default is 0
Ey (float (angle in degrees)) – orientation of Ey relative to geographic north (0) default is 90
Z_prime_error (np.ndarray(Z_prime.shape)) – impedance tensor error (std) default is None
- Dtype Z_prime
np.ndarray(num_freq, 2, 2, dtype=’complex’)
- Returns
adjusted impedance tensor
- Return type
np.ndarray(Z_prime.shape, dtype=’complex’)
- Returns
impedance tensor standard deviation in default orientation
- Return type
np.ndarray(Z_prime.shape, dtype=’real’)
Module TS¶
- class mtpy.core.ts.MTTS(**kwargs)[source]¶
MT time series object that will read/write data in different formats including hdf5, txt, miniseed.
The foundations are based on Pandas Python package.
The data are store in the variable ts, which is a pandas dataframe with the data in the column ‘data’. This way the data can be indexed as a numpy array:
>>> MTTS.ts['data'][0:256]
or
>>> MTTS.ts.data[0:256]
Also, the data can be indexed by time (note needs to be exact time):
>>> MTTS.ts['2017-05-04 12:32:00.0078125':'2017-05-05 12:35:00]
Input ts as a numpy.ndarray or Pandas DataFrame
Metadata
Description
azimuth
clockwise angle from coordinate system N (deg)
calibration_fn
file name for calibration data
component
component name [ ‘ex’ | ‘ey’ | ‘hx’ | ‘hy’ | ‘hz’]
coordinate_system
[ geographic | geomagnetic ]
datum
datum of geographic location ex. WGS84
declination
geomagnetic declination (deg)
dipole_length
length of dipole (m)
data_logger
data logger type
instrument_id
ID number of instrument for calibration
lat
latitude of station in decimal degrees
lon
longitude of station in decimal degrees
n_samples
number of samples in time series
sampling_rate
sampling rate in samples/second
start_time_epoch_sec
start time in epoch seconds
start_time_utc
start time in UTC
station
station name
units
units of time series
Note
Currently only supports hdf5 and text files
Method
Description
read_hdf5
read an hdf5 file
write_hdf5
write an hdf5 file
write_ascii_file
write an ascii file
read_ascii_file
read an ascii file
- Example
>>> import mtpy.core.ts as ts >>> import numpy as np >>> MTTS = ts.MTTS() >>> MTTS.ts = np.random.randn(1024) >>> MTTS.station = 'test' >>> MTTS.lon = 30.00 >>> MTTS.lat = -122.00 >>> MTTS.component = 'HX' >>> MTTS.units = 'counts' >>> MTTS.write_hdf5(r"/home/test.h5")
- Attributes
elev
elevation in elevation units
lat
Latitude in decimal degrees
lon
Longitude in decimal degrees
n_samples
number of samples
sampling_rate
sampling rate in samples/second
start_time_epoch_sec
start time in epoch seconds
start_time_utc
start time in UTC given in time format
stop_time_epoch_sec
End time in epoch seconds
stop_time_utc
End time in UTC
- ts
Methods
apply_addaptive_notch_filter
([notches, ...])apply notch filter to the data that finds the peak around each frequency.
decimate
([dec_factor])decimate the data by using scipy.signal.decimate
low_pass_filter
([low_pass_freq, cutoff_freq])low pass the data
plot_spectra
([spectra_type])Plot spectra using the spectral type
read_ascii
(fn_ascii)Read an ascii format file with metadata
read_ascii_header
(fn_ascii)Read an ascii metadata
read_hdf5
(fn_hdf5[, compression_level, ...])Read an hdf5 file with metadata using Pandas.
write_ascii_file
(fn_ascii[, chunk_size])Write an ascii format file with metadata
write_hdf5
(fn_hdf5[, compression_level, ...])Write an hdf5 file with metadata using pandas to write the file.
- apply_addaptive_notch_filter(notches=None, notch_radius=0.5, freq_rad=0.5, rp=0.1)[source]¶
apply notch filter to the data that finds the peak around each frequency.
see mtpy.processing.filter.adaptive_notch_filter
- Parameters
notch_dict (dictionary) – dictionary of filter parameters. if an empty dictionary is input the filter looks for 60 Hz and harmonics to filter out.
- decimate(dec_factor=1)[source]¶
decimate the data by using scipy.signal.decimate
- Parameters
dec_factor (int) – decimation factor
refills ts.data with decimated data and replaces sampling_rate
- property elev¶
elevation in elevation units
- property lat¶
Latitude in decimal degrees
- property lon¶
Longitude in decimal degrees
- low_pass_filter(low_pass_freq=15, cutoff_freq=55)[source]¶
low pass the data
- Parameters
low_pass_freq (float) – low pass corner in Hz
cutoff_freq (float) – cut off frequency in Hz
filters ts.data
- property n_samples¶
number of samples
- plot_spectra(spectra_type='welch', **kwargs)[source]¶
Plot spectra using the spectral type
Note
Only spectral type supported is welch
- Parameters
spectra_type – [ ‘welch’ ]
- Example
>>> ts_obj = mtts.MTTS() >>> ts_obj.read_hdf5(r"/home/MT/mt01.h5") >>> ts_obj.plot_spectra()
- read_ascii(fn_ascii)[source]¶
Read an ascii format file with metadata
- Parameters
fn_ascii (string) – full path to ascii file
- Example
>>> ts_obj.read_ascii(r"/home/ts/mt01.EX")
- read_ascii_header(fn_ascii)[source]¶
Read an ascii metadata
- Parameters
fn_ascii (string) – full path to ascii file
- Example
>>> ts_obj.read_ascii_header(r"/home/ts/mt01.EX")
- read_hdf5(fn_hdf5, compression_level=0, compression_lib='blosc')[source]¶
Read an hdf5 file with metadata using Pandas.
- Parameters
fn_hdf5 (string) – full path to hdf5 file, has .h5 extension
compression_level (int) – compression level of file [ 0-9 ]
compression_lib (string) – compression library default is blosc
- Returns
fn_hdf5
See also
Pandas.HDf5Store
- property sampling_rate¶
sampling rate in samples/second
- property start_time_epoch_sec¶
start time in epoch seconds
- property start_time_utc¶
start time in UTC given in time format
- property stop_time_epoch_sec¶
End time in epoch seconds
- property stop_time_utc¶
End time in UTC
- write_ascii_file(fn_ascii, chunk_size=4096)[source]¶
Write an ascii format file with metadata
- Parameters
fn_ascii (string) – full path to ascii file
chunk_size (int) – read in file by chunks for efficiency
- Example
>>> ts_obj.write_ascii_file(r"/home/ts/mt01.EX")
- write_hdf5(fn_hdf5, compression_level=0, compression_lib='blosc')[source]¶
Write an hdf5 file with metadata using pandas to write the file.
- Parameters
fn_hdf5 (string) – full path to hdf5 file, has .h5 extension
compression_level (int) – compression level of file [ 0-9 ]
compression_lib (string) – compression library default is blosc
- Returns
fn_hdf5
See also
Pandas.HDf5Store
- class mtpy.core.ts.Spectra(**kwargs)[source]¶
compute spectra of time series
Methods
compute_spectra
(data, spectra_type, **kwargs)compute spectra according to input type
welch_method
(data[, plot])Compute the spectra using the Welch method, which is an average spectra of the data.
Module MT¶
- class mtpy.core.mt.Citation(**kwargs)[source]¶
Information for a citation.
Holds the following information:
Attributes
Type
Explanation
author
string
Author names
title
string
Title of article, or publication
journal
string
Name of journal
doi
string
DOI number (doi:10.110/sf454)
year
int
year published
More attributes can be added by inputing a key word dictionary
>>> Citation(**{'volume':56, 'pages':'234--214'})
- class mtpy.core.mt.Copyright(**kwargs)[source]¶
Information of copyright, mainly about how someone else can use these data. Be sure to read over the conditions_of_use.
Holds the following information:
Attributes
Type
Explanation
citation
Citation
citation of published work using these data
conditions_of_use
string
conditions of use of these data
release_status
string
release status [ open | public | proprietary]
More attributes can be added by inputing a key word dictionary
>>> Copyright(**{'owner':'University of MT', 'contact':'Cagniard'})
- class mtpy.core.mt.DataQuality(**kwargs)[source]¶
Information on data quality.
Holds the following information:
Attributes
Type
Explanation
comments
string
comments on data quality
good_from_period
float
minimum period data are good
good_to_period
float
maximum period data are good
rating
int
[1-5]; 1 = poor, 5 = excellent
warrning_comments
string
any comments on warnings in the data
warnings_flag
int
[0-#of warnings]
More attributes can be added by inputing a key word dictionary
>>>DataQuality(**{‘time_series_comments’:’Periodic Noise’})
- class mtpy.core.mt.FieldNotes(**kwargs)[source]¶
Field note information.
Holds the following information:
Attributes
Type
Explanation
data_quality
DataQuality
notes on data quality
electrode
Instrument
type of electrode used
data_logger
Instrument
type of data logger
magnetometer
Instrument
type of magnetotmeter
More attributes can be added by inputing a key word dictionary
>>> FieldNotes(**{'electrode_ex':'Ag-AgCl 213', 'magnetometer_hx':'102'})
- class mtpy.core.mt.Instrument(**kwargs)[source]¶
Information on an instrument that was used.
Holds the following information:
Attributes
Type
Explanation
id
string
serial number or id number of data logger
manufacturer
string
company whom makes the instrument
type
string
Broadband, long period, something else
More attributes can be added by inputing a key word dictionary
>>> Instrument(**{'ports':'5', 'gps':'time_stamped'})
- class mtpy.core.mt.Location(**kwargs)[source]¶
location details
- Attributes
- easting
- elevation
- latitude
- longitude
- northing
Methods
project location coordinates into meters given the reference ellipsoid, for now that is constrained to WGS84
project location coordinates into meters given the reference ellipsoid, for now that is constrained to WGS84
- class mtpy.core.mt.MT(fn=None, **kwargs)[source]¶
Basic MT container to hold all information necessary for a MT station including the following parameters.
Site –> information on site details (lat, lon, name, etc)
FieldNotes –> information on instruments, setup, etc.
Copyright –> information on how the data can be used and citations
Provenance –> where the data come from and how they are stored
Processing –> how the data were processed.
The most used attributes are made available from MT, namely the following.
Attribute
Description
station
station name
lat
station latitude in decimal degrees
lon
station longitude in decimal degrees
elev
station elevation in meters
Z
mtpy.core.z.Z object for impedance tensor
Tipper
mtpy.core.z.Tipper object for tipper
pt
mtpy.analysis.pt.PhaseTensor for phase tensor
east
station location in UTM coordinates assuming WGS-84
north
station location in UTM coordinates assuming WGS-84
utm_zone
zone of UTM coordinates assuming WGS-84
rotation_angle
rotation angle of the data
fn
absolute path to the data file
Other information is contained with in the different class attributes. For instance survey name is in MT.Site.survey
Note
The best way to see what all the information is and where it is contained would be to write out a configuration file
>>> import mtpy.core.mt as mt >>> mt_obj = mt.MT() >>> mt_obj.write_cfg_file(r"/home/mt/generic.cfg")
Currently EDI, XML, and j file are supported to read in information, and can write out EDI and XML formats. Will be extending to j and Egberts Z format.
Methods
Description
read_mt_file
read in a MT file [ EDI | XML | j ]
write_mt_file
write a MT file [ EDI | XML ]
read_cfg_file
read a configuration file
write_cfg_file
write a configuration file
remove_distortion
remove distortion following Bibby et al. [2005]
remove_static_shift
Shifts apparent resistivity curves up or down
interpolate
interpolates Z and T onto specified frequency array.
Examples
- Read from an .edi File
>>> import mtpy.core.mt as mt >>> mt_obj = mt.MT(r"/home/edi_files/s01.edi")
- Remove Distortion
>>> import mtpy.core.mt as mt >>> mt1 = mt.MT(fn=r"/home/mt/edi_files/mt01.edi") >>> D, new_z = mt1.remove_distortion() >>> mt1.write_mt_file(new_fn=r"/home/mt/edi_files/mt01_dr.edi", >>> new_Z=new_z)
- Remove Static Shift
>>> new_z_obj = mt_obj.remove_static_shift(ss_x=.78, ss_y=1.1) >>> # write a new edi file >>> mt_obj.write_mt_file(new_fn=r"/home/edi_files/s01_ss.edi", >>> new_Z=new_z) >>> wrote file to: /home/edi_files/s01_ss.edi
- Interpolate
>>> new_freq = np.logspace(-3, 3, num=24) >>> new_z_obj, new_tipper_obj = mt_obj.interpolate(new_freq) >>> mt_obj.write_mt_file(new_Z=new_z_obj, new_Tipper=new_tipper_obj) >>> wrote file to: /home/edi_files/s01_RW.edi
- Attributes
Tipper
mtpy.core.z.Tipper object to hold tipper information
Z
mtpy.core.z.Z object to hole impedance tensor
east
easting (m)
elev
Elevation
fn
reference to original data file
lat
Latitude
lon
Longitude
north
northing (m)
pt
mtpy.analysis.pt.PhaseTensor object to hold phase tensor
rotation_angle
rotation angle in degrees from north
station
station name
utm_zone
utm zone
Methods
interpolate
(new_freq_array[, interp_type, ...])Interpolate the impedance tensor onto different frequencies
plot_mt_response
(**kwargs)Returns a mtpy.imaging.plotresponse.PlotResponse object
read_cfg_file
(cfg_fn)Read in a configuration file and populate attributes accordingly.
read_mt_file
(fn[, file_type])Read an MT response file.
remove_distortion
([num_freq])remove distortion following Bibby et al. [2005].
remove_static_shift
([ss_x, ss_y])Remove static shift from the apparent resistivity
write_cfg_file
(cfg_fn)Write a configuration file for the MT sections
write_mt_file
([save_dir, fn_basename, ...])Write an mt file, the supported file types are EDI and XML.
- property Tipper¶
mtpy.core.z.Tipper object to hold tipper information
- property Z¶
mtpy.core.z.Z object to hole impedance tensor
- property east¶
easting (m)
- property elev¶
Elevation
- property fn¶
reference to original data file
- interpolate(new_freq_array, interp_type='slinear', bounds_error=True, period_buffer=None)[source]¶
Interpolate the impedance tensor onto different frequencies
- Parameters
new_freq_array (np.ndarray) – a 1-d array of frequencies to interpolate on to. Must be with in the bounds of the existing frequency range, anything outside and an error will occur.
period_buffer – maximum ratio of a data period and the closest interpolation period. Any points outside this ratio will be excluded from the interpolated impedance array.
- Returns
a new impedance object with the corresponding frequencies and components.
- Return type
- Returns
a new tipper object with the corresponding frequencies and components.
- Return type
- Interpolate
>>> import mtpy.core.mt as mt >>> edi_fn = r"/home/edi_files/mt_01.edi" >>> mt_obj = mt.MT(edi_fn) >>> # create a new frequency range to interpolate onto >>> new_freq = np.logspace(-3, 3, 24) >>> new_z_object, new_tipper_obj = mt_obj.interpolate(new_freq) >>> mt_obj.write_mt_file(new_fn=r"/home/edi_files/mt_01_interp.edi", >>> ... new_Z_obj=new_z_object, >>> ... new_Tipper_obj=new_tipper_object)
- property lat¶
Latitude
- property lon¶
Longitude
- property north¶
northing (m)
- plot_mt_response(**kwargs)[source]¶
Returns a mtpy.imaging.plotresponse.PlotResponse object
- Plot Response
>>> mt_obj = mt.MT(edi_file) >>> pr = mt.plot_mt_response() >>> # if you need more info on plot_mt_response >>> help(pr)
- property pt¶
mtpy.analysis.pt.PhaseTensor object to hold phase tensor
- read_cfg_file(cfg_fn)[source]¶
Read in a configuration file and populate attributes accordingly.
- The configuration file should be in the form:
- Site.Location.latitude = 46.5Site.Location.longitude = 122.7Site.Location.datum = ‘WGS84’Processing.Software.name = BIRRPProcessing.Software.version = 5.2.1Provenance.Creator.name = L. CagniardProvenance.Submitter.name = I. Larionov
- Parameters
cfg_fn (string) – full path to configuration file
Note
The best way to make a configuration file would be to save a configuration file first from MT, then filling in the fields.
- Make configuration file
>>> import mtpy.core.mt as mt >>> mt_obj = mt.MT() >>> mt_obj.write_cfg_file(r"/mt/generic_config.cfg")
- Read in configuration file
>>> import mtpy.core.mt as mt >>> mt_obj = mt.MT() >>> mt_obj.read_cfg_file(r"/home/mt/survey_config.cfg")
- read_mt_file(fn, file_type=None)[source]¶
Read an MT response file.
Note
Currently only .edi, .xml, and .j files are supported
- Parameters
fn (string) – full path to input file
file_type (string) – [‘edi’ | ‘j’ | ‘xml’ | … ] if None, automatically detects file type by the extension.
- Example
>>> import mtpy.core.mt as mt >>> mt_obj = mt.MT() >>> mt_obj.read_mt_file(r"/home/mt/mt01.xml")
- remove_distortion(num_freq=None)[source]¶
remove distortion following Bibby et al. [2005].
- Parameters
num_freq (int) – number of frequencies to look for distortion from the highest frequency
- Returns
Distortion matrix
- Return type
np.ndarray(2, 2, dtype=real)
- Returns
Z with distortion removed
- Return type
- Remove distortion and write new .edi file
>>> import mtpy.core.mt as mt >>> mt1 = mt.MT(fn=r"/home/mt/edi_files/mt01.edi") >>> D, new_z = mt1.remove_distortion() >>> mt1.write_mt_file(new_fn=r"/home/mt/edi_files/mt01_dr.edi", >>> new_Z=new_z)
- remove_static_shift(ss_x=1.0, ss_y=1.0)[source]¶
Remove static shift from the apparent resistivity
Assume the original observed tensor Z is built by a static shift S and an unperturbated “correct” Z0 :
Z = S * Z0
- therefore the correct Z will be :
Z0 = S^(-1) * Z
- Parameters
ss_x (float) – correction factor for x component
ss_y (float) – correction factor for y component
- Returns
new Z object with static shift removed
- Return type
Note
The factors are in resistivity scale, so the entries of the matrix “S” need to be given by their square-roots!
- Remove Static Shift
>>> import mtpy.core.mt as mt >>> mt_obj = mt.MT(r"/home/mt/mt01.edi") >>> new_z_obj = mt.remove_static_shift(ss_x=.5, ss_y=1.2) >>> mt_obj.write_mt_file(new_fn=r"/home/mt/mt01_ss.edi", >>> ... new_Z_obj=new_z_obj)
- property rotation_angle¶
rotation angle in degrees from north
- property station¶
station name
- property utm_zone¶
utm zone
- write_cfg_file(cfg_fn)[source]¶
Write a configuration file for the MT sections
- Parameters
cfg_fn (string) – full path to configuration file to write to
- Return cfg_fn
full path to configuration file
- Rtype cfg_fn
string
- Write configuration file
>>> import mtpy.core.mt as mt >>> mt_obj = mt.MT() >>> mt_obj.read_mt_file(r"/home/mt/edi_files/mt01.edi") >>> mt_obj.write_cfg_file(r"/home/mt/survey_config.cfg")
- write_mt_file(save_dir=None, fn_basename=None, file_type='edi', new_Z_obj=None, new_Tipper_obj=None, longitude_format='LON', latlon_format='dms')[source]¶
Write an mt file, the supported file types are EDI and XML.
- Parameters
save_dir (string) – full path save directory
fn_basename (string) – name of file with or without extension
file_type (string) – [ ‘edi’ | ‘xml’ ]
new_Z_obj (mtpy.core.z.Z) – new Z object
new_Tipper_obj (mtpy.core.z.Tipper) – new Tipper object
longitude_format (string) – whether to write longitude as LON or LONG. options are ‘LON’ or ‘LONG’, default ‘LON’
latlon_format (string) – format of latitude and longitude in output edi, degrees minutes seconds (‘dms’) or decimal degrees (‘dd’)
- Returns
full path to file
- Return type
string
- Example
>>> mt_obj.write_mt_file(file_type='xml')
- class mtpy.core.mt.Person(**kwargs)[source]¶
Information for a person
Holds the following information:
Attributes
Type
Explanation
email
string
email of person
name
string
name of person
organization
string
name of person’s organization
organization_url
string
organizations web address
More attributes can be added by inputing a key word dictionary
>>> Person(**{'phone':'650-888-6666'})
- class mtpy.core.mt.Processing(**kwargs)[source]¶
Information for a processing
Holds the following information:
Attributes
Type
Explanation
email
string
email of person
name
string
name of person
organization
string
name of person’s organization
organization_url
string
organizations web address
More attributes can be added by inputing a key word dictionary
>>> Person(**{'phone':'888-867-5309'})
- class mtpy.core.mt.Provenance(**kwargs)[source]¶
Information of the file history, how it was made
Holds the following information:
Attributes
Type
Explanation
creation_time
string
creation time of file YYYY-MM-DD,hh:mm:ss
creating_application
string
name of program creating the file
creator
Person
person whom created the file
submitter
Person
person whom is submitting file for archiving
More attributes can be added by inputing a key word dictionary
>>> Provenance(**{'archive':'IRIS', 'reprocessed_by':'grad_student'})
- class mtpy.core.mt.Site(**kwargs)[source]¶
Information on the site, including location, id, etc.
Holds the following information:
Attributes
Type
Explanation
aqcuired_by
string
name of company or person whom aqcuired the data.
id
string
station name
Location
object Location
Holds location information, lat, lon, elev datum, easting, northing see Location class
start_date
string
YYYY-MM-DD start date of measurement
end_date
string
YYYY-MM-DD end date of measurement
year_collected
string
year data collected
survey
string
survey name
project
string
project name
run_list
string
list of measurment runs ex. [mt01a, mt01b]
More attributes can be added by inputing a key word dictionary
>>> Site(**{'state':'Nevada', 'Operator':'MTExperts'})
- Attributes
- end_date
- start_date
- year_collected
Module EDI¶
- class mtpy.core.edi.DataSection(edi_fn=None, edi_lines=None)[source]¶
DataSection contains the small metadata block that describes which channel is which. A typical block looks like:
>=MTSECT ex=1004.001 ey=1005.001 hx=1001.001 hy=1002.001 hz=1003.001 nfreq=14 sectid=par28ew nchan=None maxblks=None
- Parameters
edi_fn (string) – full path to .edi file to read in.
- 1
Changes these values to change what is written to edi file
Methods
read in the data of the file, will detect if reading spectra or impedance.
read_data_sect
([data_sect_list])read data section
write_data_sect
([data_sect_list, over_dict])write a data section
- class mtpy.core.edi.DefineMeasurement(edi_fn=None, edi_lines=None)[source]¶
DefineMeasurement class holds information about the measurement. This includes how each channel was setup. The main block contains information on the reference location for the station. This is a bit of an archaic part and was meant for a multiple station .edi file. This section is also important if you did any forward modeling with Winglink cause it only gives the station location in this section. The other parts are how each channel was collected. An example define measurement section looks like:
>=DEFINEMEAS MAXCHAN=7 MAXRUN=999 MAXMEAS=9999 UNITS=M REFTYPE=CART REFLAT=-30:12:49.4693 REFLONG=139:47:50.87 REFELEV=0 >HMEAS ID=1001.001 CHTYPE=HX X=0.0 Y=0.0 Z=0.0 AZM=0.0 >HMEAS ID=1002.001 CHTYPE=HY X=0.0 Y=0.0 Z=0.0 AZM=90.0 >HMEAS ID=1003.001 CHTYPE=HZ X=0.0 Y=0.0 Z=0.0 AZM=0.0 >EMEAS ID=1004.001 CHTYPE=EX X=0.0 Y=0.0 Z=0.0 X2=0.0 Y2=0.0 >EMEAS ID=1005.001 CHTYPE=EY X=0.0 Y=0.0 Z=0.0 X2=0.0 Y2=0.0 >HMEAS ID=1006.001 CHTYPE=HX X=0.0 Y=0.0 Z=0.0 AZM=0.0 >HMEAS ID=1007.001 CHTYPE=HY X=0.0 Y=0.0 Z=0.0 AZM=90.0
- Parameters
edi_fn (string) – full path to .edi file to read in.
- 1
Each channel with have its own define measurement and depending on whether it is an E or H channel the metadata will be different. the #### correspond to the channel number.
- 2
Internally everything is converted to decimal degrees. Output is written as HH:MM:SS.ss so Winglink can read them in.
- 3
If you want to change what metadata is written into the .edi file change the items in _header_keys. Default attributes are:
maxchan
maxrun
maxmeas
reflat
reflon
refelev
reftype
units
Methods
get a dictionary for the xmeas parts
get measurement list including measurement setup
read_define_measurement
([measurement_list])read the define measurment section of the edi file
write_define_measurement
([measurement_list, ...])write the define measurement block as a list of strings
- class mtpy.core.edi.EMeasurement(**kwargs)[source]¶
EMeasurement contains metadata for an electric field measurement
Attributes
Description
id
Channel number
chtype
[ EX | EY ]
x
x (m) north from reference point (station) of one electrode of the dipole
y
y (m) east from reference point (station) of one electrode of the dipole
x2
x (m) north from reference point (station) of the other electrode of the dipole
y2
y (m) north from reference point (station) of the other electrode of the dipole
acqchan
name of the channel acquired usually same as chtype
- Fill Metadata
>>> import mtpy.core.edi as mtedi >>> e_dict = {'id': '1', 'chtype':'ex', 'x':0, 'y':0, 'x2':50, 'y2':50} >>> e_dict['acqchn'] = 'ex' >>> emeas = mtedi.EMeasurement(**e_dict)
- class mtpy.core.edi.Edi(edi_fn=None)[source]¶
This class is for .edi files, mainly reading and writing. Has been tested on Winglink and Phoenix output .edi’s, which are meant to follow the archaic EDI format put forward by SEG. Can read impedance, Tipper and/or spectra data.
The Edi class contains a class for each major section of the .edi file.
Frequency and components are ordered from highest to lowest frequency.
- Parameters
edi_fn (string) – full path to .edi file to be read in. default is None. If an .edi file is input, it is automatically read in and attributes of Edi are filled
Methods
Description
read_edi_file
Reads in an edi file and populates the associated classes and attributes.
write_edi_file
Writes an .edi file following the EDI format given the apporpriate attributes are filled. Writes out in impedance and Tipper format.
_read_data
Reads in the impedance and Tipper blocks, if the .edi file is in ‘spectra’ format, read_data converts the data to impedance and Tipper.
_read_mt
Reads impedance and tipper data from the appropriate blocks of the .edi file.
_read_spectra
Reads in spectra data and converts it to impedance and Tipper data.
Attributes
Description
default
Data_sect
DataSection class, contains basic information on the data collected and in whether the data is in impedance or spectra.
Define_measurement
DefineMeasurement class, contains information on how the data was collected.
edi_fn
full path to edi file read in
None
Header
Header class, contains metadata on where, when, and who collected the data
Info
Information class, contains information on how the data was processed and how the transfer functions where estimated.
Tipper
mtpy.core.z.Tipper class, contains the tipper data
Z
mtpy.core.z.Z class, contains the impedance data
_block_len
number of data in one line.
6
_data_header_str
header string for each of the data section
‘>!****{0}****!’
_num_format
string format of data.
‘ 15.6e’
_t_labels
labels for tipper blocks
_z_labels
labels for impedance blocks
- Change Latitude
>>> import mtpy.core.edi as mtedi >>> edi_obj = mtedi.Edi(edi_fn=r"/home/mt/mt01.edi") >>> # change the latitude >>> edi_obj.header.lat = 45.7869 >>> new_edi_fn = edi_obj.write_edi_file()
- Attributes
Methods
read_edi_file
([edi_fn])Read in an edi file and fill attributes of each section's classes. Including: * Header * Info * Define_measurement * Data_sect * Z * Tipper.
write_edi_file
([new_edi_fn, ...])Write a new edi file from either an existing .edi file or from data input by the user into the attributes of Edi.
- property elev¶
Elevation in elevation units
- property lat¶
latitude in decimal degrees
- property lon¶
longitude in decimal degrees
- read_edi_file(edi_fn=None)[source]¶
Read in an edi file and fill attributes of each section’s classes. Including:
Header
Info
Define_measurement
Data_sect
Z
Tipper
Note
Automatically detects if data is in spectra format. All data read in is converted to impedance and Tipper.
- Parameters
edi_fn (string) – full path to .edi file to be read in default is None
- Example
>>> import mtpy.core.Edi as mtedi >>> edi_obj = mtedi.Edi() >>> edi_obj.read_edi_file(edi_fn=r"/home/mt/mt01.edi")
- property station¶
station name
- write_edi_file(new_edi_fn=None, longitude_format='LON', latlon_format='dms')[source]¶
Write a new edi file from either an existing .edi file or from data input by the user into the attributes of Edi.
- Parameters
new_edi_fn (string) – full path to new edi file. default is None, which will write to the same file as the input .edi with as: r”/home/mt/mt01_1.edi”
longitude_format (string) – whether to write longitude as LON or LONG. options are ‘LON’ or ‘LONG’, default ‘LON’
latlon_format (string) – format of latitude and longitude in output edi, degrees minutes seconds (‘dms’) or decimal degrees (‘dd’)
- Returns
full path to new edi file
- Return type
string
- Example
>>> import mtpy.core.edi as mtedi >>> edi_obj = mtedi.Edi(edi_fn=r"/home/mt/mt01/edi") >>> edi_obj.Header.dataid = 'mt01_rr' >>> n_edi_fn = edi_obj.write_edi_file()
- class mtpy.core.edi.HMeasurement(**kwargs)[source]¶
HMeasurement contains metadata for a magnetic field measurement
Attributes
Description
id
Channel number
chtype
[ HX | HY | HZ | RHX | RHY ]
x
x (m) north from reference point (station)
y
y (m) east from reference point (station)
azm
angle of sensor relative to north = 0
acqchan
name of the channel acquired usually same as chtype
- Fill Metadata
>>> import mtpy.core.edi as mtedi >>> h_dict = {'id': '1', 'chtype':'hx', 'x':0, 'y':0, 'azm':0} >>> h_dict['acqchn'] = 'hx' >>> hmeas = mtedi.HMeasurement(**h_dict)
- class mtpy.core.edi.Header(edi_fn=None, **kwargs)[source]¶
Header class contains all the information in the header section of the .edi file. A typical header block looks like:
>HEAD ACQBY=None ACQDATE=None DATAID=par28ew ELEV=0.000 EMPTY=1e+32 FILEBY=WG3DForward FILEDATE=2016/04/11 19:37:37 UTC LAT=-30:12:49 LOC=None LON=139:47:50 PROGDATE=2002-04-22 PROGVERS=WINGLINK EDI 1.0.22 COORDINATE SYSTEM = GEOGRAPHIC NORTH DECLINATION = 10.0
- Parameters
edi_fn (string) – full path to .edi file to be read in. default is None. If an .edi file is input attributes of Header are filled.
Many of the attributes are needed in the .edi file. They are marked with a yes for ‘In .edi’
- 1
Internally everything is converted to decimal degrees. Output is written as HH:MM:SS.ss so Winglink can read them in.
- 2
If you want to change what metadata is written into the .edi file change the items in _header_keys. Default attributes are:
acqby
acqdate
coordinate_system
dataid
declination
elev
fileby
lat
loc
lon
filedate
empty
progdate
progvers
Methods
Description
get_header_list
get header lines from edi file
read_header
read in header information from header_lines
write_header
write header lines, returns a list of lines to write
- Read Header
>>> import mtpy.core.edi as mtedi >>> header_obj = mtedi.Header(edi_fn=r"/home/mt/mt01.edi")
Methods
Get the header information from the .edi file in the form of a list, where each item is a line in the header section.
read_header
([header_list])read a header information from either edi file or a list of lines containing header information.
write_header
([header_list, ...])Write header information to a list of lines.
- get_header_list()[source]¶
Get the header information from the .edi file in the form of a list, where each item is a line in the header section.
- read_header(header_list=None)[source]¶
read a header information from either edi file or a list of lines containing header information.
- Parameters
header_list (list) – should be read from an .edi file or input as [‘key_01=value_01’, ‘key_02=value_02’]
- Input header_list
>>> h_list = ['lat=36.7898', 'lon=120.73532', 'elev=120.0', ... >>> 'dataid=mt01'] >>> import mtpy.core.edi as mtedi >>> header = mtedi.Header() >>> header.read_header(h_list)
- write_header(header_list=None, longitude_format='LON', latlon_format='dms')[source]¶
Write header information to a list of lines.
- param header_list
should be read from an .edi file or input as [‘key_01=value_01’, ‘key_02=value_02’]
- type header_list
list
- param longitude_format
whether to write longitude as LON or LONG. options are ‘LON’ or ‘LONG’, default ‘LON’
- type longitude_format
string
- param latlon_format
format of latitude and longitude in output edi, degrees minutes seconds (‘dms’) or decimal degrees (‘dd’)
- type latlon_format
string
- returns header_lines
list of lines containing header information will be of the form:
['>HEAD
- ‘,
‘ key_01=value_01
- ‘]
if None is input then reads from input .edi file or uses attribute information to write metadata.
- class mtpy.core.edi.Information(edi_fn=None, edi_lines=None)[source]¶
Contain, read, and write info section of .edi file
not much to really do here, but just keep it in the same format that it is read in as, except if it is in phoenix format then split the two paragraphs up so they are sequential.
Methods
get a list of lines from the info section
read_info
([info_list])read information section of the .edi file
write_info
([info_list])write out information
Module EDI_Collection¶
Description: To compute and encapsulate the properties of a set of EDI files
Author: fei.zhang@ga.gov.au
CreateDate: 2017-04-20
- class mtpy.core.edi_collection.EdiCollection(edilist=None, mt_objs=None, outdir=None, ptol=0.05)[source]¶
A super class to encapsulate the properties pertinent to a set of EDI files
- Parameters
edilist – a list of edifiles with full path, for read-only
outdir – computed result to be stored in outdir
ptol – period tolerance considered as equal, default 0.05 means 5 percent
The ptol parameter controls what freqs/periods are grouped together: 10 percent may result more double counting of freq/period data than 5 pct. (eg: MT_Datasets/WPJ_EDI)
Methods
calculate_aver_impedance
(dest_dir[, ...])calculate the average impedance tensor Z (related to apparent resistivity) of all edi (MT-stations) for each period.
create_measurement_csv
(dest_dir[, ...])create csv file from the data of EDI files: IMPEDANCE, APPARENT RESISTIVITIES AND PHASES see also utils/shapefiles_creator.py
create_mt_station_gdf
([outshpfile])create station location geopandas dataframe, and output to shape file
create_penetration_depth_csv
(dest_dir[, ...])create penetration depth csv file for each frequency corresponding to the given input 1.0/period_list.
create_phase_tensor_csv
(dest_dir[, ...])create phase tensor ellipse and tipper properties.
create_phase_tensor_csv_with_image
(dest_dir)Using PlotPhaseTensorMaps class to generate csv file of phase tensor attributes, etc.
display MT stations which are in stored in geopandas dataframe in a base map.
display/overlay the MT properties on a background geo-referenced map image
export_edi_files
(dest_dir[, period_list, ...])export edi files. :param dest_dir: output directory :param period_list: list of periods; default=None, in which data for all available frequencies are output :param interpolate: Boolean to indicate whether to interpolate data onto given period_list; otherwise a period_list is obtained from get_periods_by_stats() :param file_name: output file name :param period_buffer: buffer so that interpolation doesn't stretch too far over periods. Provide a float or integer factor, greater than which interpolation will not stretch. e.g. 1.5 means only interpolate to a maximum of 1.5 times each side of each frequency value.
get_bounding_box
([epsgcode])compute bounding box
get the min and max distance between all possible pairs of stations.
get_period_occurance
(aper)For a given aperiod, compute its occurance frequencies among the stations/edi :param aper: a float value of the period :return:
get_periods_by_stats
([percentage])check the presence of each period in all edi files, keep a list of periods which are at least percentage present :return: a list of periods which are present in at least percentage edi files
get_phase_tensor_tippers
(period[, interpolate])For a given MT period (s) value, compute the phase tensor and tippers etc.
A simple method to find what UTM zones these (edi files) MT stations belong to are they in a single UTM zone, which corresponds to a unique EPSG code? or do they belong to multiple UTM zones?
get the min max statistics of the distances between stations.
plot_stations
([savefile, showfig])Visualise the geopandas df of MT stations
select_periods
([show, period_list, percentage])Use edi_collection to analyse the whole set of EDI files
show_obj
([dest_dir])test call object's methods and show it's properties
- calculate_aver_impedance(dest_dir, component='det', rotation_angle=0, interpolate=True)[source]¶
calculate the average impedance tensor Z (related to apparent resistivity) of all edi (MT-stations) for each period. algorithm: - 1 make sure the stations all have the same period range, if not, interpolate onto common periods - 2 rotate to strike if necessary - 3 calculate: the determinant of the impedance tensor, or the geometric mean, if necessary - 4 get the median resistivity for each period - 5 get the median resistivity overall by taking the median of the above
- Parameters
component – =det – default, returns average for determinant of impedance tensor =geom_mean – returns average geometric mean of the off diagonals sqrt(ZxyXZyx) =separate returns a 2x2 array containing average for each component of the impedance tensor.
rotation_angle – angle to rotate the data by before calculating mean.
- Returns
A_dictionary=: Period->Median_Resist_On_Stations, OVER_ALL-> Median_Resist
- create_measurement_csv(dest_dir, period_list=None, interpolate=True)[source]¶
create csv file from the data of EDI files: IMPEDANCE, APPARENT RESISTIVITIES AND PHASES see also utils/shapefiles_creator.py
- Parameters
dest_dir – output directory
period_list – list of periods; default=None, in which data for all available frequencies are output
interpolate – Boolean to indicate whether to interpolate data onto given period_list
- Returns
csvfname
- create_mt_station_gdf(outshpfile=None)[source]¶
create station location geopandas dataframe, and output to shape file
- Parameters
outshpfile – output file
- Returns
gdf
- create_penetration_depth_csv(dest_dir, period_list=None, interpolate=False, file_name='penetration_depth.csv')[source]¶
create penetration depth csv file for each frequency corresponding to the given input 1.0/period_list. of course subject to a tolerance. Note that frequencies values are usually provided in MT EDI files.
- Parameters
dest_dir – output directory
period_list – list of periods; default=None all available periods will be output
interpolate – Boolean to indicate whether to interpolate data onto given period_list
file_name – output files basename
- Returns
pt_dict
- create_phase_tensor_csv(dest_dir, period_list=None, interpolate=True, file_name='phase_tensor.csv')[source]¶
create phase tensor ellipse and tipper properties. Implementation based on mtpy.utils.shapefiles_creator.ShapeFilesCreator.create_csv_files
- Parameters
dest_dir – output directory
period_list – list of periods; default=None, in which data for all available frequencies are output
interpolate – Boolean to indicate whether to interpolate data onto given period_list
file_name – output file name
- Returns
pt_dict
- create_phase_tensor_csv_with_image(dest_dir)[source]¶
Using PlotPhaseTensorMaps class to generate csv file of phase tensor attributes, etc. Only for comparison. This method is more expensive because it will create plot object first.
- Returns
- display_on_basemap()[source]¶
display MT stations which are in stored in geopandas dataframe in a base map.
- Returns
plot object
- display_on_image()[source]¶
display/overlay the MT properties on a background geo-referenced map image
- Returns
plot object
- export_edi_files(dest_dir, period_list=None, interpolate=True, period_buffer=None, longitude_format='LON')[source]¶
export edi files. :param dest_dir: output directory :param period_list: list of periods; default=None, in which data for all available
frequencies are output
- Parameters
interpolate – Boolean to indicate whether to interpolate data onto given period_list; otherwise a period_list is obtained from get_periods_by_stats()
file_name – output file name
period_buffer – buffer so that interpolation doesn’t stretch too far over periods. Provide a float or integer factor, greater than which interpolation will not stretch. e.g. 1.5 means only interpolate to a maximum of 1.5 times each side of each frequency value
- Returns
- get_bounding_box(epsgcode=None)[source]¶
compute bounding box
- Returns
bounding box in given proj coord system
- get_min_max_distance()[source]¶
get the min and max distance between all possible pairs of stations.
- Returns
min_dist, max_dist
- get_period_occurance(aper)[source]¶
For a given aperiod, compute its occurance frequencies among the stations/edi :param aper: a float value of the period :return:
- get_periods_by_stats(percentage=10.0)[source]¶
check the presence of each period in all edi files, keep a list of periods which are at least percentage present :return: a list of periods which are present in at least percentage edi files
- get_phase_tensor_tippers(period, interpolate=True)[source]¶
For a given MT period (s) value, compute the phase tensor and tippers etc.
- Parameters
period – MT_period (s)
interpolate – Boolean to indicate whether to interpolate on to the given period
- Returns
dictionary pt_dict_list
- pt_dict keys [‘station’, ‘freq’, ‘lon’, ‘lat’, ‘phi_min’, ‘phi_max’, ‘azimuth’, ‘skew’, ‘n_skew’, ‘elliptic’,
‘tip_mag_re’, ‘tip_mag_im’, ‘tip_ang_re’, ‘tip_ang_im’]
- get_station_utmzones_stats()[source]¶
A simple method to find what UTM zones these (edi files) MT stations belong to are they in a single UTM zone, which corresponds to a unique EPSG code? or do they belong to multiple UTM zones?
- Returns
a_dict like {UTMZone:Number_of_MT_sites}
- get_stations_distances_stats()[source]¶
get the min max statistics of the distances between stations. useful for determining the ellipses tipper sizes etc
- Returns
dict={}
- plot_stations(savefile=None, showfig=True)[source]¶
Visualise the geopandas df of MT stations
- Parameters
savefile –
showfig –
- Returns
Module XML¶
Note
This module is written to align with the tools written by Anna Kelbert <akelbert@usgs.gov>
- class mtpy.core.mt_xml.MT_XML(**kwargs)[source]¶
Class to read and write MT information from XML format. This tries to follow the format put forward by Anna Kelbert for archiving MT response data.
A configuration file can be read in that might make it easier to write multiple files for the same survey.
See also
mtpy.core.mt_xml.XML_Config
Attributes
Description
Z
object of type mtpy.core.z.Z
Tipper
object of type mtpy.core.z.Tipper
Note
All other attributes are of the same name and of type XML_element, where attributes are name, value and attr. Attr contains any tag information. This is left this way so that mtpy.core.mt.MT can read in the information. Use mtpy.core.mt.MT for conversion between data formats.
Methods
Description
read_cfg_file
Read a configuration file in the format of XML_Config
read_xml_file
Read an xml file
write_xml_file
Write an xml file
- Example
:: >>> import mtpy.core.mt_xml as mtxml >>> x = mtxml.read_xml_file(r”/home/mt_data/mt01.xml”) >>> x.read_cfg_file(r”/home/mt_data/survey_xml.cfg”) >>> x.write_xml_file(r”/home/mt_data/xml/mt01.xml”)
- Attributes
Methods
read_cfg_file
([cfg_fn])Read in a cfg file making all key = value pairs attribures of XML_Config.
read_xml_file
(xml_fn)read in an xml file and set attributes appropriately.
write_cfg_file
([cfg_fn])Write out configuration file in the style of: parent.attribute = value
write_xml_file
(xml_fn[, cfg_fn])write xml from edi
- property Tipper¶
get Tipper information
- property Z¶
get z information
- class mtpy.core.mt_xml.XML_Config(**kwargs)[source]¶
Class to deal with configuration files for xml.
Includes all the important information for the station and how data was processed.
Key Information includes:
Name
Purpose
ProductID
Station name
ExternalUrl
External URL to link to data
Notes
Any important information on station, data collection.
TimeSeriesArchived
Information on Archiving time series including URL.
Image
A location to an image of the station or the MT response.
- ProductID –> station name
ExternalUrl –> external url to link to data
Notes –> any
Methods
read_cfg_file
([cfg_fn])Read in a cfg file making all key = value pairs attribures of XML_Config.
write_cfg_file
([cfg_fn])Write out configuration file in the style of: parent.attribute = value
- read_cfg_file(cfg_fn=None)[source]¶
Read in a cfg file making all key = value pairs attribures of XML_Config. Being sure all new attributes are XML_element objects.
- The assumed structure of the xml.cfg file is similar to:
``# XML Configuration File MTpy
Attachement.Description = Original file use to produce XML Attachment.Filename = None
Copyright.Citation.Authors = None Copyright.Citation.DOI = None Copyright.Citation.Journal = None Copyright.Citation.Title = None Copyright.Citation.Volume = None Copyright.Citation.Year = None
PeriodRange(max=0)(min=0) = None``
where the heirarchy of information is separated by a . and if the information has attribures they are in the name with (key=value) syntax.
- class mtpy.core.mt_xml.XML_element(name, attr, value, **kwargs)[source]¶
- Basically an ET element. The key components are
‘name’ –> name of the element
‘attr’ –> attribute information of the element
‘value’ –> value of the element
Used the property function here to be sure that these 3 cannot be set through the common k.value = 10, just in case there are similar names in the xml file. This seemed to be the safest to avoid those cases.
- Attributes
- attr
- name
- value
Module JFile¶
- class mtpy.core.jfile.JFile(j_fn=None)[source]¶
be able to read and write a j-file
Methods
read_header
([j_lines])Parsing the header lines of a j-file to extract processing information.
read_j_file
([j_fn])read_j_file will read in a *.j file output by BIRRP (better than reading lots of *.<k>r<l>.rf files)
read_metadata
([j_lines, j_fn])read in the metadata of the station, or information of station logistics like: lat, lon, elevation
- read_header(j_lines=None)[source]¶
Parsing the header lines of a j-file to extract processing information.
Input: - j-file as list of lines (output of readlines())
Output: - Dictionary with all parameters found
- read_j_file(j_fn=None)[source]¶
read_j_file will read in a *.j file output by BIRRP (better than reading lots of *.<k>r<l>.rf files)
Input: j-filename
Output: 4-tuple - periods : N-array - Z_array : 2-tuple - values and errors - tipper_array : 2-tuple - values and errors - processing_dict : parsed processing parameters from j-file header