From e86b971f8285e108fe6f4fac050ec6f4ca80b2cd Mon Sep 17 00:00:00 2001 From: Julien Thurin Date: Mon, 23 Feb 2026 12:53:11 +0100 Subject: [PATCH 1/4] Restoring removed polarities function which was somehow removed. @SeismoFelix pointed out that this function has been removed from the main branch. This is a re-introduction with a very minimal change, to replace the .format() with a f string. --- mtuq/util/__init__.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/mtuq/util/__init__.py b/mtuq/util/__init__.py index d283f9c0..d04df2d6 100644 --- a/mtuq/util/__init__.py +++ b/mtuq/util/__init__.py @@ -352,6 +352,27 @@ def dataarray_idxmax(da, warnings=True): da = da[0] return da.coords +def sort_polarities(dict_polarity, data, polarities): + """ + Assigns polarity values from dict_polarity to polarities array based on station names in data (Obspy streams). + + Args: + dict_polarity (dict): Dictionary mapping station names to polarity values. + data (list): List of Obspy streams. + polarities (numpy.ndarray): NumPy array to store polarity values. + + Returns: + numpy.ndarray: Updated polarities array. + """ + + for i, stream in enumerate(data): + station_name = stream[0].stats.station + if station_name in dict_polarity: + polarities[i] = dict_polarity[station_name] + else: + warn(f'Station {station_name} not found in the dictionary') + + return polarities def defaults(kwargs, defaults): for key in defaults: From 309bb849ea80d67cdf0ead469efa8037b9260f04 Mon Sep 17 00:00:00 2001 From: Julien Thurin Date: Mon, 23 Feb 2026 14:12:05 +0100 Subject: [PATCH 2/4] Changed the function so that it is closer to the current Waveform + Pol examplel. --- mtuq/util/__init__.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/mtuq/util/__init__.py b/mtuq/util/__init__.py index d04df2d6..16f33394 100644 --- a/mtuq/util/__init__.py +++ b/mtuq/util/__init__.py @@ -352,26 +352,28 @@ def dataarray_idxmax(da, warnings=True): da = da[0] return da.coords -def sort_polarities(dict_polarity, data, polarities): +def polarities_array_from_dict(dict_polarity, stations): """ - Assigns polarity values from dict_polarity to polarities array based on station names in data (Obspy streams). + Based on: + polarities = np.zeros(len(stations)) + for _i, station in enumerate(stations): + polarities[_i] = polarities_dict[station.station] Args: dict_polarity (dict): Dictionary mapping station names to polarity values. - data (list): List of Obspy streams. - polarities (numpy.ndarray): NumPy array to store polarity values. + stations (list): List of station objects. Returns: - numpy.ndarray: Updated polarities array. + numpy.ndarray: NumPy array containing polarity values corresponding to the stations. """ - for i, stream in enumerate(data): - station_name = stream[0].stats.station + polarities = np.zeros(len(stations)) + for i, station in enumerate(stations): + station_name = station.station if station_name in dict_polarity: polarities[i] = dict_polarity[station_name] else: - warn(f'Station {station_name} not found in the dictionary') - + print(f'Station {station_name} not found in the dictionary') return polarities def defaults(kwargs, defaults): From cb5379351109178e39e3951681d119637d639753 Mon Sep 17 00:00:00 2001 From: Julien Thurin Date: Mon, 23 Feb 2026 14:47:56 +0100 Subject: [PATCH 3/4] Changed waveform + polarity examples and modified associated code_generator. --- examples/Waveforms+Polarities.py | 6 ++---- setup/code_generator.py | 6 +++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/examples/Waveforms+Polarities.py b/examples/Waveforms+Polarities.py index d059e694..c1cd242a 100755 --- a/examples/Waveforms+Polarities.py +++ b/examples/Waveforms+Polarities.py @@ -10,7 +10,7 @@ from mtuq.grid_search import grid_search from mtuq.misfit import WaveformMisfit, PolarityMisfit from mtuq.process_data import ProcessData -from mtuq.util import fullpath, merge_dicts, save_json +from mtuq.util import fullpath, merge_dicts, save_json, polarities_array_from_dict from mtuq.util.cap import parse_station_codes, Trapezoid @@ -218,9 +218,7 @@ if comm.rank==0: print('Evaluating polarity misfit...\n') - polarities = np.zeros(len(stations)) - for _i, station in enumerate(stations): - polarities[_i] = polarities_dict[station.station] + polarities = polarities_array_from_dict(polarities_dict, stations) results_polarity = grid_search( polarities, greens_bw, polarity_misfit, origin, grid) diff --git a/setup/code_generator.py b/setup/code_generator.py index dd404203..fd3a5260 100755 --- a/setup/code_generator.py +++ b/setup/code_generator.py @@ -1573,9 +1573,7 @@ if comm.rank==0: print('Evaluating polarity misfit...\\n') - polarities = np.zeros(len(stations)) - for _i, station in enumerate(stations): - polarities[_i] = polarities_dict[station.station] + polarities = polarities_array_from_dict(polarities_dict, stations) results_polarity = grid_search( polarities, greens_bw, polarity_misfit, origin, grid) @@ -1991,6 +1989,8 @@ def isclose(a, b, atol=1.e6, rtol=1.e-6): 'plot_beachball, plot_polarities', 'from mtuq.misfit import Misfit', 'from mtuq.misfit import WaveformMisfit, PolarityMisfit', + 'from mtuq.util import fullpath, merge_dicts, save_json', + 'from mtuq.util import fullpath, merge_dicts, save_json, polarities_array_from_dict', )) file.write(Docstring_WaveformsPolarities) file.write(Paths_Syngine) From 186dd01b28f0e016eca64c5b7c325d7f6c378bf9 Mon Sep 17 00:00:00 2001 From: Julien Thurin Date: Tue, 24 Feb 2026 14:40:29 +0100 Subject: [PATCH 4/4] Changed location and name of the polarity generation function. --- examples/Waveforms+Polarities.py | 8 ++++---- mtuq/misfit/__init__.py | 2 +- mtuq/misfit/polarity.py | 20 ++++++++++++++++++++ mtuq/util/__init__.py | 24 ------------------------ setup/code_generator.py | 8 +++----- 5 files changed, 28 insertions(+), 34 deletions(-) mode change 100755 => 100644 examples/Waveforms+Polarities.py diff --git a/examples/Waveforms+Polarities.py b/examples/Waveforms+Polarities.py old mode 100755 new mode 100644 index c1cd242a..455e65f2 --- a/examples/Waveforms+Polarities.py +++ b/examples/Waveforms+Polarities.py @@ -8,9 +8,9 @@ from mtuq.graphics import plot_data_greens2, plot_beachball, plot_polarities, plot_misfit_lune from mtuq.grid import FullMomentTensorGridSemiregular from mtuq.grid_search import grid_search -from mtuq.misfit import WaveformMisfit, PolarityMisfit +from mtuq.misfit import WaveformMisfit, PolarityMisfit, polarities_from_dict from mtuq.process_data import ProcessData -from mtuq.util import fullpath, merge_dicts, save_json, polarities_array_from_dict +from mtuq.util import fullpath, merge_dicts, save_json from mtuq.util.cap import parse_station_codes, Trapezoid @@ -108,7 +108,7 @@ "NSKI": +1, "PERI": +1, "SOLD": 0, - "TUPA": 1, + "TUPA": +1, } @@ -218,7 +218,7 @@ if comm.rank==0: print('Evaluating polarity misfit...\n') - polarities = polarities_array_from_dict(polarities_dict, stations) + polarities = polarities_from_dict(polarities_dict, stations) results_polarity = grid_search( polarities, greens_bw, polarity_misfit, origin, grid) diff --git a/mtuq/misfit/__init__.py b/mtuq/misfit/__init__.py index 087642d6..8819b9c1 100644 --- a/mtuq/misfit/__init__.py +++ b/mtuq/misfit/__init__.py @@ -1,7 +1,7 @@ from mtuq.misfit.waveform import WaveformMisfit -from mtuq.misfit.polarity import PolarityMisfit +from mtuq.misfit.polarity import PolarityMisfit, polarities_from_dict # # for backward compatibility diff --git a/mtuq/misfit/polarity.py b/mtuq/misfit/polarity.py index 5b3d7830..3fa9bd62 100644 --- a/mtuq/misfit/polarity.py +++ b/mtuq/misfit/polarity.py @@ -362,6 +362,26 @@ def _model_type(greens): return model_type +def polarities_from_dict(dict_polarity, stations): + """ + Converts a dictionary of polarities to a NumPy array based on the provided stations. + + Args: + dict_polarity (dict): Dictionary mapping station names to polarity values. + stations (list): List of station objects. + + Returns: + numpy.ndarray: NumPy array containing polarity values corresponding to the stations. + """ + + polarities = np.zeros(len(stations)) + for i, station in enumerate(stations): + station_name = station.station + if station_name in dict_polarity: + polarities[i] = dict_polarity[station_name] + else: + print(f'Station {station_name} not found in the dictionary') + return polarities def _check(greens, method): return diff --git a/mtuq/util/__init__.py b/mtuq/util/__init__.py index 16f33394..ca3fa005 100644 --- a/mtuq/util/__init__.py +++ b/mtuq/util/__init__.py @@ -352,30 +352,6 @@ def dataarray_idxmax(da, warnings=True): da = da[0] return da.coords -def polarities_array_from_dict(dict_polarity, stations): - """ - Based on: - polarities = np.zeros(len(stations)) - for _i, station in enumerate(stations): - polarities[_i] = polarities_dict[station.station] - - Args: - dict_polarity (dict): Dictionary mapping station names to polarity values. - stations (list): List of station objects. - - Returns: - numpy.ndarray: NumPy array containing polarity values corresponding to the stations. - """ - - polarities = np.zeros(len(stations)) - for i, station in enumerate(stations): - station_name = station.station - if station_name in dict_polarity: - polarities[i] = dict_polarity[station_name] - else: - print(f'Station {station_name} not found in the dictionary') - return polarities - def defaults(kwargs, defaults): for key in defaults: if key not in kwargs: diff --git a/setup/code_generator.py b/setup/code_generator.py index fd3a5260..f5a2695a 100755 --- a/setup/code_generator.py +++ b/setup/code_generator.py @@ -513,7 +513,7 @@ "NSKI": +1, "PERI": +1, "SOLD": 0, - "TUPA": 1, + "TUPA": +1, } @@ -1573,7 +1573,7 @@ if comm.rank==0: print('Evaluating polarity misfit...\\n') - polarities = polarities_array_from_dict(polarities_dict, stations) + polarities = polarities_from_dict(polarities_dict, stations) results_polarity = grid_search( polarities, greens_bw, polarity_misfit, origin, grid) @@ -1988,9 +1988,7 @@ def isclose(a, b, atol=1.e6, rtol=1.e-6): 'plot_beachball', 'plot_beachball, plot_polarities', 'from mtuq.misfit import Misfit', - 'from mtuq.misfit import WaveformMisfit, PolarityMisfit', - 'from mtuq.util import fullpath, merge_dicts, save_json', - 'from mtuq.util import fullpath, merge_dicts, save_json, polarities_array_from_dict', + 'from mtuq.misfit import WaveformMisfit, PolarityMisfit, polarities_from_dict', )) file.write(Docstring_WaveformsPolarities) file.write(Paths_Syngine)