From 99a999c7400d16e2c8c7e74e03da24a7d4443b25 Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Tue, 19 May 2020 17:44:22 -0600 Subject: [PATCH 01/10] Create Diagnostics object in Reading, fix return values --- geomagio/residual/Calculation.py | 37 ++++++++++++++++++++++++-------- geomagio/residual/Diagnostics.py | 28 ++++++++++++++++++++++++ geomagio/residual/Reading.py | 2 ++ 3 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 geomagio/residual/Diagnostics.py diff --git a/geomagio/residual/Calculation.py b/geomagio/residual/Calculation.py index 0d1cec215..a4f6e3e2b 100644 --- a/geomagio/residual/Calculation.py +++ b/geomagio/residual/Calculation.py @@ -11,6 +11,7 @@ from .MeasurementType import ( MARK_TYPES, ) from .Measurement import AverageMeasurement, Measurement, average_measurement +from .Diagnostics import Diagnostics from .Reading import Reading @@ -40,7 +41,7 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading: mean=mean, reference=adjust_reference and reference or None, ) - absoluteD = calculate_D_absolute( + absoluteD, average_mark, meridian, azimuth, mark_azimuth = calculate_D_absolute( azimuth=reading.azimuth, h_baseline=absoluteH.baseline, measurements=reading.measurements, @@ -55,12 +56,23 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading: inclination=inclination, measurements=scale_measurements, ) + diagnostics = Diagnostics( + meridian=meridian, + mean_mark=average_mark, + magnetic_azimuth=azimuth, + mark_azimuth=mark_azimuth, + declination=absoluteD.absolute, + inclination=inclination, + h_component=absoluteH.absolute, + z_component=absoluteZ.absolute, + ) # create new reading object calculated = Reading( absolutes=[absoluteD, absoluteH, absoluteZ], scale_value=scale_value, + diagnostics=diagnostics, # copy other attributes - **reading.dict(exclude={"absolutes", "scale_value"}), + **reading.dict(exclude={"absolutes", "scale_value", "diagnostics"}), ) return calculated @@ -111,6 +123,7 @@ def calculate_D_absolute( for m in declination_measurements ] ) + mark_azimuth = azimuth shift = 0 if azimuth > 180: shift = -180 @@ -119,13 +132,19 @@ def calculate_D_absolute( d_b = (meridian - average_mark) + azimuth + shift # calculate absolute d_abs = d_b + np.degrees(np.arctan(reference.e / (reference.h + h_baseline))) - return Absolute( - element="D", - absolute=d_abs, - baseline=d_b, - shift=shift, - starttime=mean.time, - endtime=mean.endtime, + return ( + Absolute( + element="D", + absolute=d_abs, + baseline=d_b, + shift=shift, + starttime=mean.time, + endtime=mean.endtime, + ), + average_mark, + meridian, + azimuth, + mark_azimuth, ) diff --git a/geomagio/residual/Diagnostics.py b/geomagio/residual/Diagnostics.py new file mode 100644 index 000000000..793f763ed --- /dev/null +++ b/geomagio/residual/Diagnostics.py @@ -0,0 +1,28 @@ +from typing import Optional + +from pydantic import BaseModel + + +class Diagnostics(BaseModel): + """Computed diagnostics during calculation. + + Attributes + ---------- + meridian: claculated from declination measurements + mean_mark: average mark angles from measurements + magnetic_azimuh: after adjustment + mark_azimuth: from metadata + declination: from declination measurements + inclination: from inclination measurements + h_component: H baseline from calculations + z_component: Z baseline from calculations + """ + + meridian: float = None + mean_mark: float = None + magnetic_azimuth: float = None + mark_azimuth: float = None + declination: float = None + inclination: float = None + h_component: float = None + z_component: float = None diff --git a/geomagio/residual/Reading.py b/geomagio/residual/Reading.py index c91fcd6cc..06c8efb97 100644 --- a/geomagio/residual/Reading.py +++ b/geomagio/residual/Reading.py @@ -9,6 +9,7 @@ from .. import TimeseriesUtility from ..TimeseriesFactory import TimeseriesFactory from .Absolute import Absolute from .Measurement import Measurement, average_measurement +from .Diagnostics import Diagnostics from .MeasurementType import MeasurementType @@ -33,6 +34,7 @@ class Reading(BaseModel): metadata: Dict = {} pier_correction: float = 0 scale_value: float = None + diagnostics: Diagnostics = None def __getitem__(self, measurement_type: MeasurementType): """Provide access to measurements by type. -- GitLab From 86040c1524ed691d039b3679632e5e440a82a669 Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Wed, 20 May 2020 14:15:35 -0600 Subject: [PATCH 02/10] Set magnetic_azimuth to shifted azimuth --- geomagio/residual/Calculation.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/geomagio/residual/Calculation.py b/geomagio/residual/Calculation.py index a4f6e3e2b..b94df88d8 100644 --- a/geomagio/residual/Calculation.py +++ b/geomagio/residual/Calculation.py @@ -41,7 +41,7 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading: mean=mean, reference=adjust_reference and reference or None, ) - absoluteD, average_mark, meridian, azimuth, mark_azimuth = calculate_D_absolute( + absoluteD, average_mark, meridian, azimuth, magnetic_azimuth = calculate_D_absolute( azimuth=reading.azimuth, h_baseline=absoluteH.baseline, measurements=reading.measurements, @@ -59,8 +59,8 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading: diagnostics = Diagnostics( meridian=meridian, mean_mark=average_mark, - magnetic_azimuth=azimuth, - mark_azimuth=mark_azimuth, + magnetic_azimuth=magnetic_azimuth, + mark_azimuth=azimuth, declination=absoluteD.absolute, inclination=inclination, h_component=absoluteH.absolute, @@ -132,6 +132,11 @@ def calculate_D_absolute( d_b = (meridian - average_mark) + azimuth + shift # calculate absolute d_abs = d_b + np.degrees(np.arctan(reference.e / (reference.h + h_baseline))) + + # for diagnostics + if average_mark > 180: + average_mark -= 90 + return ( Absolute( element="D", @@ -143,8 +148,8 @@ def calculate_D_absolute( ), average_mark, meridian, - azimuth, mark_azimuth, + azimuth, ) -- GitLab From 5951d57063657e9f257ea97373b61128a2844e49 Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Wed, 20 May 2020 14:49:38 -0600 Subject: [PATCH 03/10] Change magnetic meridian calculation --- geomagio/residual/Calculation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geomagio/residual/Calculation.py b/geomagio/residual/Calculation.py index b94df88d8..97f7ea9fa 100644 --- a/geomagio/residual/Calculation.py +++ b/geomagio/residual/Calculation.py @@ -149,7 +149,7 @@ def calculate_D_absolute( average_mark, meridian, mark_azimuth, - azimuth, + (average_mark - meridian), ) -- GitLab From a67d4efe97e83696254779b768812bd87421aeab Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Wed, 27 May 2020 12:11:14 -0600 Subject: [PATCH 04/10] Calculate south facing meridian --- geomagio/residual/Calculation.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/geomagio/residual/Calculation.py b/geomagio/residual/Calculation.py index 97f7ea9fa..e5a770bf9 100644 --- a/geomagio/residual/Calculation.py +++ b/geomagio/residual/Calculation.py @@ -123,6 +123,22 @@ def calculate_D_absolute( for m in declination_measurements ] ) + # calculate south-facing meridian for diagnostics + south_meridian = np.average( + [ + m.angle + + np.degrees( + m.measurement_type.meridian + * (np.arcsin(m.residual / np.sqrt((m.h + h_baseline) ** 2 + m.e ** 2))) + ) + - np.degrees(np.arctan(m.e / (m.h + h_baseline))) + for m in [ + average_measurement(measurements, [t]) + for t in [mt.SOUTH_UP, mt.SOUTH_DOWN] + ] + ] + ) + mark_azimuth = azimuth shift = 0 if azimuth > 180: @@ -147,9 +163,9 @@ def calculate_D_absolute( endtime=mean.endtime, ), average_mark, - meridian, + south_meridian, mark_azimuth, - (average_mark - meridian), + (meridian - average_mark), ) -- GitLab From 46ab4a8cd50e44bbb6c27fcefea15cb575045e57 Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Wed, 27 May 2020 12:47:28 -0600 Subject: [PATCH 05/10] Perform meridian check --- geomagio/residual/Calculation.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/geomagio/residual/Calculation.py b/geomagio/residual/Calculation.py index e5a770bf9..d615f69e1 100644 --- a/geomagio/residual/Calculation.py +++ b/geomagio/residual/Calculation.py @@ -152,6 +152,8 @@ def calculate_D_absolute( # for diagnostics if average_mark > 180: average_mark -= 90 + if meridian > 180: + meridian -= 90 return ( Absolute( @@ -165,7 +167,7 @@ def calculate_D_absolute( average_mark, south_meridian, mark_azimuth, - (meridian - average_mark), + (average_mark - meridian), ) -- GitLab From 01728d70ba5f4a3169fbe201dc8253a4ce75c297 Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Wed, 3 Jun 2020 13:03:39 -0600 Subject: [PATCH 06/10] Fix merididan calculation, populate diagnostics from Spreadsheets --- geomagio/residual/Calculation.py | 42 ++++--------------- geomagio/residual/Diagnostics.py | 5 --- .../residual/SpreadsheetAbsolutesFactory.py | 22 ++++++++++ 3 files changed, 30 insertions(+), 39 deletions(-) diff --git a/geomagio/residual/Calculation.py b/geomagio/residual/Calculation.py index d615f69e1..1ec21a885 100644 --- a/geomagio/residual/Calculation.py +++ b/geomagio/residual/Calculation.py @@ -41,7 +41,7 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading: mean=mean, reference=adjust_reference and reference or None, ) - absoluteD, average_mark, meridian, azimuth, magnetic_azimuth = calculate_D_absolute( + absoluteD, diagnostics = calculate_D_absolute( azimuth=reading.azimuth, h_baseline=absoluteH.baseline, measurements=reading.measurements, @@ -56,16 +56,6 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading: inclination=inclination, measurements=scale_measurements, ) - diagnostics = Diagnostics( - meridian=meridian, - mean_mark=average_mark, - magnetic_azimuth=magnetic_azimuth, - mark_azimuth=azimuth, - declination=absoluteD.absolute, - inclination=inclination, - h_component=absoluteH.absolute, - z_component=absoluteZ.absolute, - ) # create new reading object calculated = Reading( absolutes=[absoluteD, absoluteH, absoluteZ], @@ -82,7 +72,7 @@ def calculate_D_absolute( azimuth: float, h_baseline: float, reference: Measurement, -) -> Absolute: +) -> Tuple[Absolute, Diagnostics]: """Calculate D absolute. Parameters @@ -123,23 +113,6 @@ def calculate_D_absolute( for m in declination_measurements ] ) - # calculate south-facing meridian for diagnostics - south_meridian = np.average( - [ - m.angle - + np.degrees( - m.measurement_type.meridian - * (np.arcsin(m.residual / np.sqrt((m.h + h_baseline) ** 2 + m.e ** 2))) - ) - - np.degrees(np.arctan(m.e / (m.h + h_baseline))) - for m in [ - average_measurement(measurements, [t]) - for t in [mt.SOUTH_UP, mt.SOUTH_DOWN] - ] - ] - ) - - mark_azimuth = azimuth shift = 0 if azimuth > 180: shift = -180 @@ -148,8 +121,8 @@ def calculate_D_absolute( d_b = (meridian - average_mark) + azimuth + shift # calculate absolute d_abs = d_b + np.degrees(np.arctan(reference.e / (reference.h + h_baseline))) - # for diagnostics + magnetic_azimuth = average_mark - mean.angle if average_mark > 180: average_mark -= 90 if meridian > 180: @@ -164,10 +137,11 @@ def calculate_D_absolute( starttime=mean.time, endtime=mean.endtime, ), - average_mark, - south_meridian, - mark_azimuth, - (average_mark - meridian), + Diagnostics( + meridian=mean.angle, + mean_mark=average_mark, + magnetic_azimuth=magnetic_azimuth, + ), ) diff --git a/geomagio/residual/Diagnostics.py b/geomagio/residual/Diagnostics.py index 793f763ed..8e5f2c940 100644 --- a/geomagio/residual/Diagnostics.py +++ b/geomagio/residual/Diagnostics.py @@ -21,8 +21,3 @@ class Diagnostics(BaseModel): meridian: float = None mean_mark: float = None magnetic_azimuth: float = None - mark_azimuth: float = None - declination: float = None - inclination: float = None - h_component: float = None - z_component: float = None diff --git a/geomagio/residual/SpreadsheetAbsolutesFactory.py b/geomagio/residual/SpreadsheetAbsolutesFactory.py index db8283787..024e27839 100644 --- a/geomagio/residual/SpreadsheetAbsolutesFactory.py +++ b/geomagio/residual/SpreadsheetAbsolutesFactory.py @@ -9,6 +9,8 @@ from .Absolute import Absolute from .Measurement import Measurement from .MeasurementType import MeasurementType as mt from .Reading import Reading +from .Diagnostics import Diagnostics +from .Calculation import DECLINATION_TYPES, MARK_TYPES, average_measurement from . import Angle @@ -299,6 +301,7 @@ class SpreadsheetAbsolutesFactory(object): metadata=metadata, pier_correction=metadata["pier_correction"], scale_value=numpy.degrees(metadata["scale_value"]), + diagnostics=self._parse_diagnostics(measurements), ) def _parse_absolutes( @@ -402,6 +405,25 @@ class SpreadsheetAbsolutesFactory(object): "precision": measurement_sheet["H8"].value, } + def _parse_diagnostics(self, measurements: List[Measurement],) -> Diagnostics: + """ + Gather diagnostics from list of measurements + """ + mean_mark = average_measurement(measurements, MARK_TYPES).angle + + meridian = average_measurement(measurements, DECLINATION_TYPES).angle + + magnetic_azimuth = mean_mark - meridian + + if meridian > 180: + magnetic_azimuth = mean_mark - (meridian - 90) + if mean_mark > 180: + mean_mark -= 90 + + return Diagnostics( + meridian=meridian, mean_mark=mean_mark, magnetic_azimuth=magnetic_azimuth, + ) + def convert_precision(angle, precision="DMS"): """ -- GitLab From 10c0764d35b0179c234b4e95719b49d5cd69eb23 Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Thu, 4 Jun 2020 09:35:21 -0600 Subject: [PATCH 07/10] Fix comments, imports, and spacing. Add diagnostics to testing --- Calculation_test.py | 27 +++++++++++++++++++ geomagio/residual/Diagnostics.py | 7 +---- .../residual/SpreadsheetAbsolutesFactory.py | 5 ++-- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/Calculation_test.py b/Calculation_test.py index b62c7a303..013e2949d 100644 --- a/Calculation_test.py +++ b/Calculation_test.py @@ -43,3 +43,30 @@ for filename in os.listdir("etc/residual"): err_msg="Baselines not within 4 decimals", verbose=True, ) + # gather original and resulting diagnostics + o_diagnostics = original.diagnostics + r_diagnostics = original.diagnostics + # test mean mark values + assert_almost_equal( + o_diagnostics.mean_mark, + r_diagnostics.mean_mark, + decimal=2, + err_msg="Baselines not within 4 decimals", + verbose=True, + ) + # test magnetic azimuth values + assert_almost_equal( + o_diagnostics.magnetic_azimuth, + r_diagnostics.magnetic_azimuth, + decimal=2, + err_msg="Baselines not within 4 decimals", + verbose=True, + ) + # test meridian values + assert_almost_equal( + o_diagnostics.meridian, + r_diagnostics.meridian, + decimal=2, + err_msg="Baselines not within 4 decimals", + verbose=True, + ) diff --git a/geomagio/residual/Diagnostics.py b/geomagio/residual/Diagnostics.py index 8e5f2c940..32d773c1f 100644 --- a/geomagio/residual/Diagnostics.py +++ b/geomagio/residual/Diagnostics.py @@ -8,14 +8,9 @@ class Diagnostics(BaseModel): Attributes ---------- - meridian: claculated from declination measurements + meridian: calculated from declination measurements mean_mark: average mark angles from measurements magnetic_azimuh: after adjustment - mark_azimuth: from metadata - declination: from declination measurements - inclination: from inclination measurements - h_component: H baseline from calculations - z_component: Z baseline from calculations """ meridian: float = None diff --git a/geomagio/residual/SpreadsheetAbsolutesFactory.py b/geomagio/residual/SpreadsheetAbsolutesFactory.py index 024e27839..63abcb20b 100644 --- a/geomagio/residual/SpreadsheetAbsolutesFactory.py +++ b/geomagio/residual/SpreadsheetAbsolutesFactory.py @@ -6,11 +6,11 @@ from obspy.core import UTCDateTime import openpyxl from .Absolute import Absolute +from .Calculation import DECLINATION_TYPES, MARK_TYPES, average_measurement +from .Diagnostics import Diagnostics from .Measurement import Measurement from .MeasurementType import MeasurementType as mt from .Reading import Reading -from .Diagnostics import Diagnostics -from .Calculation import DECLINATION_TYPES, MARK_TYPES, average_measurement from . import Angle @@ -414,7 +414,6 @@ class SpreadsheetAbsolutesFactory(object): meridian = average_measurement(measurements, DECLINATION_TYPES).angle magnetic_azimuth = mean_mark - meridian - if meridian > 180: magnetic_azimuth = mean_mark - (meridian - 90) if mean_mark > 180: -- GitLab From 0409f4ba61d83d3a366afbb7b021c2a8bef83a25 Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Thu, 4 Jun 2020 11:54:50 -0600 Subject: [PATCH 08/10] Change diagnostic contents, test, and Calculation --- Calculation_test.py | 27 --------------- geomagio/residual/Calculation.py | 33 +++++++++---------- geomagio/residual/Diagnostics.py | 13 ++++---- .../residual/SpreadsheetAbsolutesFactory.py | 25 +++++++------- 4 files changed, 35 insertions(+), 63 deletions(-) diff --git a/Calculation_test.py b/Calculation_test.py index 013e2949d..b62c7a303 100644 --- a/Calculation_test.py +++ b/Calculation_test.py @@ -43,30 +43,3 @@ for filename in os.listdir("etc/residual"): err_msg="Baselines not within 4 decimals", verbose=True, ) - # gather original and resulting diagnostics - o_diagnostics = original.diagnostics - r_diagnostics = original.diagnostics - # test mean mark values - assert_almost_equal( - o_diagnostics.mean_mark, - r_diagnostics.mean_mark, - decimal=2, - err_msg="Baselines not within 4 decimals", - verbose=True, - ) - # test magnetic azimuth values - assert_almost_equal( - o_diagnostics.magnetic_azimuth, - r_diagnostics.magnetic_azimuth, - decimal=2, - err_msg="Baselines not within 4 decimals", - verbose=True, - ) - # test meridian values - assert_almost_equal( - o_diagnostics.meridian, - r_diagnostics.meridian, - decimal=2, - err_msg="Baselines not within 4 decimals", - verbose=True, - ) diff --git a/geomagio/residual/Calculation.py b/geomagio/residual/Calculation.py index 1ec21a885..6d58c0540 100644 --- a/geomagio/residual/Calculation.py +++ b/geomagio/residual/Calculation.py @@ -30,7 +30,7 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading: # reference measurement, used to adjust absolutes reference = reading[mt.WEST_DOWN][0] # calculate inclination - inclination, f, mean = calculate_I( + inclination, f, i_mean = calculate_I( hemisphere=reading.hemisphere, measurements=reading.measurements ) corrected_f = f + reading.pier_correction @@ -38,15 +38,21 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading: absoluteH, absoluteZ = calculate_HZ_absolutes( corrected_f=corrected_f, inclination=inclination, - mean=mean, + mean=i_mean, reference=adjust_reference and reference or None, ) - absoluteD, diagnostics = calculate_D_absolute( + absoluteD, d_mean, m_mean = calculate_D_absolute( azimuth=reading.azimuth, h_baseline=absoluteH.baseline, measurements=reading.measurements, reference=adjust_reference and reference or None, ) + # populate diagnostics object with averaged measurements + diagnostics = Diagnostics( + inclination_measurement=i_mean, + declination_measurement=d_mean, + mark_measurement=m_mean, + ) # calculate scale scale_value = None scale_measurements = reading[mt.NORTH_DOWN_SCALE] @@ -89,14 +95,14 @@ def calculate_D_absolute( mean = average_measurement(measurements, DECLINATION_TYPES) reference = reference or mean # average mark - average_mark = average_measurement(measurements, MARK_TYPES).angle + average_mark = average_measurement(measurements, MARK_TYPES) # adjust based on which is larger mark_up = average_measurement(measurements, [mt.FIRST_MARK_UP]).angle mark_down = average_measurement(measurements, [mt.FIRST_MARK_DOWN]).angle if mark_up < mark_down: - average_mark += 90 + average_mark.angle += 90 else: - average_mark -= 90 + average_mark.angle -= 90 # declination measurements declination_measurements = [ average_measurement(measurements, [t]) for t in DECLINATION_TYPES @@ -118,15 +124,9 @@ def calculate_D_absolute( shift = -180 # add subtract average mark angle from average meridian angle and add # azimuth to get the declination baseline - d_b = (meridian - average_mark) + azimuth + shift + d_b = (meridian - average_mark.angle) + azimuth + shift # calculate absolute d_abs = d_b + np.degrees(np.arctan(reference.e / (reference.h + h_baseline))) - # for diagnostics - magnetic_azimuth = average_mark - mean.angle - if average_mark > 180: - average_mark -= 90 - if meridian > 180: - meridian -= 90 return ( Absolute( @@ -137,11 +137,8 @@ def calculate_D_absolute( starttime=mean.time, endtime=mean.endtime, ), - Diagnostics( - meridian=mean.angle, - mean_mark=average_mark, - magnetic_azimuth=magnetic_azimuth, - ), + mean, + average_mark, ) diff --git a/geomagio/residual/Diagnostics.py b/geomagio/residual/Diagnostics.py index 32d773c1f..7cd1bde86 100644 --- a/geomagio/residual/Diagnostics.py +++ b/geomagio/residual/Diagnostics.py @@ -1,5 +1,6 @@ from typing import Optional +from .Measurement import Measurement from pydantic import BaseModel @@ -8,11 +9,11 @@ class Diagnostics(BaseModel): Attributes ---------- - meridian: calculated from declination measurements - mean_mark: average mark angles from measurements - magnetic_azimuh: after adjustment + inclination_measurement: Average of inclination measurements + declination_measurement: Average of declination measurements + mark_measurement: Average of mark measurements """ - meridian: float = None - mean_mark: float = None - magnetic_azimuth: float = None + inclination_measurement: Measurement + declination_measurement: Measurement + mark_measurement: Measurement diff --git a/geomagio/residual/SpreadsheetAbsolutesFactory.py b/geomagio/residual/SpreadsheetAbsolutesFactory.py index 63abcb20b..84d3aefaf 100644 --- a/geomagio/residual/SpreadsheetAbsolutesFactory.py +++ b/geomagio/residual/SpreadsheetAbsolutesFactory.py @@ -6,7 +6,12 @@ from obspy.core import UTCDateTime import openpyxl from .Absolute import Absolute -from .Calculation import DECLINATION_TYPES, MARK_TYPES, average_measurement +from .Calculation import ( + DECLINATION_TYPES, + MARK_TYPES, + INCLINATION_TYPES, + average_measurement, +) from .Diagnostics import Diagnostics from .Measurement import Measurement from .MeasurementType import MeasurementType as mt @@ -409,18 +414,14 @@ class SpreadsheetAbsolutesFactory(object): """ Gather diagnostics from list of measurements """ - mean_mark = average_measurement(measurements, MARK_TYPES).angle - - meridian = average_measurement(measurements, DECLINATION_TYPES).angle - - magnetic_azimuth = mean_mark - meridian - if meridian > 180: - magnetic_azimuth = mean_mark - (meridian - 90) - if mean_mark > 180: - mean_mark -= 90 - return Diagnostics( - meridian=meridian, mean_mark=mean_mark, magnetic_azimuth=magnetic_azimuth, + inclination_measurement=average_measurement( + measurements, INCLINATION_TYPES + ), + declination_measurement=average_measurement( + measurements, DECLINATION_TYPES + ), + mark_measurement=average_measurement(measurements, MARK_TYPES), ) -- GitLab From e81d64f9af238cbe4212fb08c55b11be35c73474 Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Thu, 4 Jun 2020 14:16:28 -0600 Subject: [PATCH 09/10] Update daignostics for calculation and spreadsheets --- geomagio/residual/Calculation.py | 11 +++-------- geomagio/residual/Diagnostics.py | 10 ++++------ geomagio/residual/SpreadsheetAbsolutesFactory.py | 14 +++----------- 3 files changed, 10 insertions(+), 25 deletions(-) diff --git a/geomagio/residual/Calculation.py b/geomagio/residual/Calculation.py index 6d58c0540..b4564260a 100644 --- a/geomagio/residual/Calculation.py +++ b/geomagio/residual/Calculation.py @@ -41,18 +41,14 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading: mean=i_mean, reference=adjust_reference and reference or None, ) - absoluteD, d_mean, m_mean = calculate_D_absolute( + absoluteD, meridian = calculate_D_absolute( azimuth=reading.azimuth, h_baseline=absoluteH.baseline, measurements=reading.measurements, reference=adjust_reference and reference or None, ) # populate diagnostics object with averaged measurements - diagnostics = Diagnostics( - inclination_measurement=i_mean, - declination_measurement=d_mean, - mark_measurement=m_mean, - ) + diagnostics = Diagnostics(inclination=inclination, meridian=meridian,) # calculate scale scale_value = None scale_measurements = reading[mt.NORTH_DOWN_SCALE] @@ -137,8 +133,7 @@ def calculate_D_absolute( starttime=mean.time, endtime=mean.endtime, ), - mean, - average_mark, + meridian, ) diff --git a/geomagio/residual/Diagnostics.py b/geomagio/residual/Diagnostics.py index 7cd1bde86..fd9dac1c9 100644 --- a/geomagio/residual/Diagnostics.py +++ b/geomagio/residual/Diagnostics.py @@ -9,11 +9,9 @@ class Diagnostics(BaseModel): Attributes ---------- - inclination_measurement: Average of inclination measurements - declination_measurement: Average of declination measurements - mark_measurement: Average of mark measurements + inclination: Average of inclination measurements + meridian: Calculated meridian value """ - inclination_measurement: Measurement - declination_measurement: Measurement - mark_measurement: Measurement + inclination: float + meridian: float diff --git a/geomagio/residual/SpreadsheetAbsolutesFactory.py b/geomagio/residual/SpreadsheetAbsolutesFactory.py index 84d3aefaf..ea0f300a2 100644 --- a/geomagio/residual/SpreadsheetAbsolutesFactory.py +++ b/geomagio/residual/SpreadsheetAbsolutesFactory.py @@ -306,7 +306,7 @@ class SpreadsheetAbsolutesFactory(object): metadata=metadata, pier_correction=metadata["pier_correction"], scale_value=numpy.degrees(metadata["scale_value"]), - diagnostics=self._parse_diagnostics(measurements), + diagnostics=self._parse_diagnostics(calculation_sheet), ) def _parse_absolutes( @@ -410,19 +410,11 @@ class SpreadsheetAbsolutesFactory(object): "precision": measurement_sheet["H8"].value, } - def _parse_diagnostics(self, measurements: List[Measurement],) -> Diagnostics: + def _parse_diagnostics(self, sheet: openpyxl.worksheet,) -> Diagnostics: """ Gather diagnostics from list of measurements """ - return Diagnostics( - inclination_measurement=average_measurement( - measurements, INCLINATION_TYPES - ), - declination_measurement=average_measurement( - measurements, DECLINATION_TYPES - ), - mark_measurement=average_measurement(measurements, MARK_TYPES), - ) + return Diagnostics(inclination=sheet["H40"].value, meridian=sheet["E36"].value,) def convert_precision(angle, precision="DMS"): -- GitLab From 197c7d138e5f461514398ef66890e4800a1b11b3 Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Tue, 22 Sep 2020 16:11:16 -0600 Subject: [PATCH 10/10] Black reformat --- geomagio/residual/Calculation.py | 5 ++++- geomagio/residual/SpreadsheetAbsolutesFactory.py | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/geomagio/residual/Calculation.py b/geomagio/residual/Calculation.py index b4564260a..ddc108a4d 100644 --- a/geomagio/residual/Calculation.py +++ b/geomagio/residual/Calculation.py @@ -48,7 +48,10 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading: reference=adjust_reference and reference or None, ) # populate diagnostics object with averaged measurements - diagnostics = Diagnostics(inclination=inclination, meridian=meridian,) + diagnostics = Diagnostics( + inclination=inclination, + meridian=meridian, + ) # calculate scale scale_value = None scale_measurements = reading[mt.NORTH_DOWN_SCALE] diff --git a/geomagio/residual/SpreadsheetAbsolutesFactory.py b/geomagio/residual/SpreadsheetAbsolutesFactory.py index ea0f300a2..1f50f794f 100644 --- a/geomagio/residual/SpreadsheetAbsolutesFactory.py +++ b/geomagio/residual/SpreadsheetAbsolutesFactory.py @@ -410,11 +410,17 @@ class SpreadsheetAbsolutesFactory(object): "precision": measurement_sheet["H8"].value, } - def _parse_diagnostics(self, sheet: openpyxl.worksheet,) -> Diagnostics: + def _parse_diagnostics( + self, + sheet: openpyxl.worksheet, + ) -> Diagnostics: """ Gather diagnostics from list of measurements """ - return Diagnostics(inclination=sheet["H40"].value, meridian=sheet["E36"].value,) + return Diagnostics( + inclination=sheet["H40"].value, + meridian=sheet["E36"].value, + ) def convert_precision(angle, precision="DMS"): -- GitLab