diff --git a/geomagio/residual/Absolute.py b/geomagio/residual/Absolute.py index 1339ad5f6b8f8c29acaab411ca5320d63a442a71..ebdf59dab740d2ca9dd13dc840383672d35727e8 100644 --- a/geomagio/residual/Absolute.py +++ b/geomagio/residual/Absolute.py @@ -4,6 +4,9 @@ from obspy import UTCDateTime from pydantic import BaseModel from ..pydantic_utcdatetime import CustomUTCDateTimeType +AbsoluteShiftDefault = 0 +AbsoluteValidDefault = True + class Absolute(BaseModel): """Computed absolute and baseline measurement. @@ -27,8 +30,8 @@ class Absolute(BaseModel): starttime: Optional[CustomUTCDateTimeType] = None endtime: Optional[CustomUTCDateTimeType] = None - shift: float = 0 - valid: bool = True + shift: float = AbsoluteShiftDefault + valid: bool = AbsoluteValidDefault def is_valid(self) -> bool: return ( diff --git a/geomagio/residual/Calculation.py b/geomagio/residual/Calculation.py index 6c415f0b6ceaecd663d6fd552cf2c6977de9b552..d74225c3f8bd18047044da655e48fdcb86ccca4b 100644 --- a/geomagio/residual/Calculation.py +++ b/geomagio/residual/Calculation.py @@ -2,7 +2,7 @@ from typing import List, Literal, Tuple import numpy as np -from .Absolute import Absolute +from .Absolute import Absolute, AbsoluteShiftDefault, AbsoluteValidDefault from .MeasurementType import ( MeasurementType as mt, DECLINATION_TYPES, @@ -59,7 +59,7 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading: h_baseline=absoluteH.baseline, measurements=reading.measurements, reference=reference, - shift=reading.absolutes[0].shift if reading.absolutes else 0, + shift=reading.absolutes[0].shift if reading.absolutes else AbsoluteShiftDefault, ) d_computed = calculate_D_computed( @@ -130,10 +130,22 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading: ) # just persist Absolute.valid if passed to calculate - if reading.absolutes: - absoluteD.valid = reading.absolutes[0].valid - absoluteH.valid = reading.absolutes[1].valid - absoluteZ.valid = reading.absolutes[2].valid + if hasattr(reading.absolutes, "__iter__") and len(reading.absolutes) == 3: + absoluteD.valid = ( + reading.absolutes[0].valid + if hasattr(reading.absolutes[0], "valid") + else AbsoluteValidDefault + ) + absoluteH.valid = ( + reading.absolutes[1].valid + if hasattr(reading.absolutes[1], "valid") + else AbsoluteValidDefault + ) + absoluteZ.valid = ( + reading.absolutes[2].valid + if hasattr(reading.absolutes[2], "valid") + else AbsoluteValidDefault + ) # create new reading object calculated = Reading( @@ -152,7 +164,7 @@ def calculate_D_absolute( azimuth: float, h_baseline: float, reference: Measurement, - shift: float = 0, + shift: float = AbsoluteShiftDefault, ) -> Tuple[Absolute, Diagnostics]: """Calculate D absolute.