from spectral_definitions import mm class SpectralParams: def __init__(self, mo, fo, q, stress_drop=0, source_size=0): self.mo = mo self.fo = fo self.q = q self.mw = mm(mo) self.stress_drop = stress_drop self.source_size = source_size def __str__(self): return (f"SpectralAnalysis parameters: M0={self.mo:.2e}, F0={self.fo:.2f}, " f"Q={self.q:.2f}, Mw={self.mw:.2f}, " f"stress drop = {self.stress_drop:.2e}, source size = {self.source_size:.0f}") class EventSpectralParams(SpectralParams): def __init__(self, mo, fo, q, stress_drop, source_size, mo_e, fo_e, q_e, source_size_e, stress_drop_e): super().__init__(mo, fo, q, stress_drop, source_size) self.mo_e = mo_e self.fo_e = fo_e self.q_e = q_e self.mw = mm(mo) self.source_size_e = source_size_e self.stress_drop_e = stress_drop_e self.mo_1, self.mo_2 = self.calculate_uncertainties(self.mo, self.mo_e) self.fo_1, self.fo_2 = self.calculate_uncertainties(self.fo, self.fo_e) self.q_1, self.q_2 = self.calculate_uncertainties(self.q, self.q_e) self.mw_1, self.mw_2 = self.calculate_uncertainties_mw(self.mo, self.mo_e) self.source_size_1, self.source_size_2 = self.calculate_uncertainties(self.source_size, self.source_size_e) self.stress_drop_1, self.stress_drop_2 = self.calculate_uncertainties(self.stress_drop, self.stress_drop_e) def __str__(self): return f"SpectralAnalysis parameters: " \ f"Seismic moment: {self.mo:.2e} <{self.mo_1:.2e}, {self.mo_2:.2e}> " \ f"Corner frequency: {self.fo:.2f} <{self.fo_1:.2f}, {self.fo_2:.2f}> " \ f"Q factor: {self.q:.2f} <{self.q_1:.2f}, {self.q_2:.2f}> " \ f"Mw: {self.mw:.2f} <{self.mw_1:.2f}, {self.mw_2:.2f}> " \ f"Stress drop: {self.stress_drop:.0f} <{self.stress_drop_1:.0f}, {self.stress_drop_2:.0f}> " \ f"Source size: {self.source_size:.0f} <{self.source_size_1:.0f}, {self.source_size_2:.0f}> " @staticmethod def calculate_uncertainties(x, x_e): if x_e == -999: unc1 = 0 unc2 = 0 else: unc1 = x / x_e unc2 = x * x_e return unc1, unc2 @staticmethod def calculate_uncertainties_mw(mo, mo_e): if mo_e == -999: unc1 = 0 unc2 = 0 else: unc1 = mm(mo / mo_e) unc2 = mm(mo * mo_e) return unc1, unc2