From a69c295bd823401f2069f5a4b21504a98264d951 Mon Sep 17 00:00:00 2001 From: au650680 Date: Tue, 21 Oct 2025 15:11:47 +0200 Subject: [PATCH 1/2] Added clustering and mode tracking Clustering and mode tracking is added with example code for both and a shared module for both. Other small changes have been made. Splitting function blocks into smaller functions. Other small changes. Bug fix and small change to plot_cluster Fixed an error in create_cluster, that resulted in doublicate model orders for a cluster. Allowed for scatter point size to be adjusted. Removed debug info from some files, added missing type info for function arguments and returns, updated to YaFEM 1.0.0, changed some function descriptions, added timestamp to clustering data Model update module and other changes Add model update module. Added reconnect function for MQTT client. Added timestamp outputs to some functions. Added models folder to store YAFEM models and model parameters. Added function to publish clustering results. Small change to the mode tracking algorithm. Added function to check mode shapes. Moved convert_list function to util.py, since it is used in multiple other functions. Added function to view the spectral density. Changes to readability. Added example functions Changed the typing of some arguments in some functions dict to Dict, list to List, tuple to Tuple --- src/data/accel/hbk/aligner.py | 1 - src/data/comm/mqtt.py | 11 + src/examples/README.md | 19 +- src/examples/aligning_readings.py | 2 +- src/examples/example.py | 40 +- src/examples/run_mode_clustering.py | 13 +- src/examples/run_mode_tracking.py | 5 +- src/examples/run_model_update.py | 74 +- src/examples/run_sysid.py | 10 +- src/functions/calculate_mac.py | 4 +- src/functions/plot_clusters.py | 8 +- src/functions/plot_model_update.py | 95 +++ src/functions/plot_sysid.py | 24 +- src/functions/spectral_density.py | 22 + src/functions/util.py | 16 + src/methods/constants.py | 16 + src/methods/mode_clustering.py | 138 +++- .../align_clusters.py | 120 +-- .../check_mode_shapes.py | 16 + .../mode_clustering_functions/clustering.py | 72 +- .../create_cluster.py | 130 ++-- .../expand_cluster.py | 32 +- .../initialize_Ip.py | 15 +- src/methods/mode_tracking.py | 47 +- .../match_to_tracked_cluster.py | 186 +++-- .../mode_tracking_functions/mode_tracking.py | 107 +-- .../resolve_nonunique_matches.py | 51 +- src/methods/model_update.py | 311 +++++--- .../model_update_functions/__init__.py | 0 .../model_update_functions/mode_pairing.py | 168 ++++ .../model_update_func.py | 104 +++ src/methods/packages/eval_yafem_model.py | 150 ---- src/methods/packages/models/__init__.py | 0 .../models/beam_parameters/beam_pars.jsonl | 721 ++++++++++++++++++ .../packages/models/beam_yafem_model.py | 139 ++++ .../models/model_parameters/__init__.py | 0 src/methods/sysid.py | 22 +- 37 files changed, 2157 insertions(+), 732 deletions(-) create mode 100644 src/functions/plot_model_update.py create mode 100644 src/functions/spectral_density.py create mode 100644 src/methods/mode_clustering_functions/check_mode_shapes.py create mode 100644 src/methods/model_update_functions/__init__.py create mode 100644 src/methods/model_update_functions/mode_pairing.py create mode 100644 src/methods/model_update_functions/model_update_func.py delete mode 100644 src/methods/packages/eval_yafem_model.py create mode 100644 src/methods/packages/models/__init__.py create mode 100644 src/methods/packages/models/beam_parameters/beam_pars.jsonl create mode 100644 src/methods/packages/models/beam_yafem_model.py create mode 100644 src/methods/packages/models/model_parameters/__init__.py diff --git a/src/data/accel/hbk/aligner.py b/src/data/accel/hbk/aligner.py index ab339a1..5dabe86 100644 --- a/src/data/accel/hbk/aligner.py +++ b/src/data/accel/hbk/aligner.py @@ -138,7 +138,6 @@ def extract(self, requested_samples: int) -> Tuple[np.ndarray, Optional[datetime with self._lock: batch_size, key_groups = self.find_continuous_key_groups() #print("Keys", key_groups) - if batch_size is None or key_groups is None: # No data or groups to align, returun empty return np.empty((0, len(self.channels)), dtype=np.float32), None diff --git a/src/data/comm/mqtt.py b/src/data/comm/mqtt.py index 3463a5e..eb84e7c 100644 --- a/src/data/comm/mqtt.py +++ b/src/data/comm/mqtt.py @@ -121,3 +121,14 @@ def setup_mqtt_client(config, topic_index=0): mqttc.on_publish = create_on_publish_callback() return mqttc, selected_topic + +def reconnect_client(mqtt_client) -> bool: + if not mqtt_client.is_connected(): + print("Client disconnected. Reconnecting...") + mqtt_client.reconnect() + + if not mqtt_client.is_connected(): + raise Exception("Clint is not connected") + else: + print("Succesfully connected") + return True \ No newline at end of file diff --git a/src/examples/README.md b/src/examples/README.md index f1bacd5..cd805df 100644 --- a/src/examples/README.md +++ b/src/examples/README.md @@ -74,11 +74,15 @@ python .\src\examples\example.py live-sysid-publish python .\src\examples\example.py clustering-with-local-sysid python .\src\examples\example.py clustering-with-remote-sysid python .\src\examples\example.py live-clustering-with-remote-sysid -python .\src\examples\example.py mode-tracking-with-remote-sysid +python .\src\examples\example.py live-clustering-with-remote-sysid-and-publish python .\src\examples\example.py mode-tracking-with-local-sysid -python .\src\examples\example.py live-mode-tracking-remote-sysid +python .\src\examples\example.py mode-tracking-with-remote-sysid +python .\src\examples\example.py live-mode-tracking-with-remote-sysid python .\src\examples\example.py model-update-local-sysid python .\src\examples\example.py live-model-update-remote-sysid +python .\src\examples\example.py live-model-update-remote-clustering +python .\src\examples\example.py live-model-update-remote-clustering-and-publish + ``` To run the examples with specified config, use @@ -116,21 +120,20 @@ poetry run python src/scripts/publish_samples.py ## Machine 2: Fog Layer – Data Alignment and System Identification -This machine subscribes to MQTT topics from Machine 1. It aligns multi-channel data, runs system identification, -and publishes pyOMA results. +This machine subscribes to MQTT topics from Machine 1. It aligns multi-channel data, runs system identification, and continuously publishes SysID results. Run the aligner and system identification pipeline ```bash -poetry run python src/examples/example.py oma-and-publish +poetry run python src/examples/example.py live-sysid-publish ``` ## Machine 3: Cloud Layer – Mode Tracking and Model Update -This machine subscribes to pyOMA results, performs mode tracking and updates the structural model. +This machine subscribes to SysID results, and performs mode tracking. -Run mode tracking and model update +Run mode tracking ```bash -poetry run python src/examples/example.py model-update-remote-sysid +poetry run python src/examples/example.py mode-tracking-with-remote-sysid ``` diff --git a/src/examples/aligning_readings.py b/src/examples/aligning_readings.py index 33a2264..62ac3b2 100644 --- a/src/examples/aligning_readings.py +++ b/src/examples/aligning_readings.py @@ -7,7 +7,7 @@ def align_acceleration_readings(config_path): config = load_config(config_path) mqtt_config = config["MQTT"] - topic_indexes = [0,2] + topic_indexes = [0, 2, 3, 4] all_topics = mqtt_config["TopicsToSubscribe"] selected_topics = [all_topics[i] for i in topic_indexes] diff --git a/src/examples/example.py b/src/examples/example.py index 4344c68..cb8da93 100644 --- a/src/examples/example.py +++ b/src/examples/example.py @@ -11,7 +11,8 @@ from examples.run_mode_clustering import ( run_mode_clustering_with_local_sysid, run_mode_clustering_with_remote_sysid, - run_live_mode_clustering_with_remote_sysid + run_live_mode_clustering_with_remote_sysid, + run_live_mode_clustering_with_remote_sysid_and_publish ) from examples.run_mode_tracking import ( run_mode_tracking_with_local_sysid, @@ -20,10 +21,11 @@ ) from examples.run_model_update import ( run_model_update_local_sysid, - run_model_update_remote_sysid + run_model_update_remote_sysid, + run_live_model_update_remote_clustering, + run_live_model_update_with_remote_clustering_and_publish, ) - @click.group() @click.option('--config', default="config/production.json", help="Path to config file") @click.pass_context @@ -43,23 +45,23 @@ def align_readings(ctx): @cli.command() @click.pass_context -def sysid_and_publish(ctx): - run_sysid_and_publish(ctx.obj["CONFIG"]) +def sysid_and_print(ctx): + run_sysid_and_print(ctx.obj["CONFIG"]) @cli.command() @click.pass_context -def live_sysid_publish(ctx): - live_sysid_and_publish(ctx.obj["CONFIG"]) +def sysid_and_plot(ctx): + run_sysid_and_plot(ctx.obj["CONFIG"]) @cli.command() @click.pass_context -def sysid_and_plot(ctx): - run_sysid_and_plot(ctx.obj["CONFIG"]) +def sysid_and_publish(ctx): + run_sysid_and_publish(ctx.obj["CONFIG"]) @cli.command() @click.pass_context -def sysid_and_print(ctx): - run_sysid_and_print(ctx.obj["CONFIG"]) +def live_sysid_publish(ctx): + live_sysid_and_publish(ctx.obj["CONFIG"]) @cli.command() @click.pass_context @@ -76,6 +78,11 @@ def clustering_with_remote_sysid(ctx): def live_clustering_with_remote_sysid(ctx): run_live_mode_clustering_with_remote_sysid(ctx.obj["CONFIG"]) +@cli.command() +@click.pass_context +def live_clustering_with_remote_sysid_and_publish(ctx): + run_live_mode_clustering_with_remote_sysid_and_publish(ctx.obj["CONFIG"]) + @cli.command() @click.pass_context def mode_tracking_with_local_sysid(ctx): @@ -101,5 +108,16 @@ def model_update_local_sysid(ctx): def live_model_update_remote_sysid(ctx): run_model_update_remote_sysid(ctx.obj["CONFIG"]) +@cli.command() +@click.pass_context +def live_model_update_remote_clustering(ctx): + run_live_model_update_remote_clustering(ctx.obj["CONFIG"]) + +@cli.command() +@click.pass_context +def live_model_update_remote_clustering_and_publish(ctx): + run_live_model_update_with_remote_clustering_and_publish(ctx.obj["CONFIG"]) + + if __name__ == "__main__": cli(obj={}) diff --git a/src/examples/run_mode_clustering.py b/src/examples/run_mode_clustering.py index fceea97..c2e600a 100644 --- a/src/examples/run_mode_clustering.py +++ b/src/examples/run_mode_clustering.py @@ -32,10 +32,9 @@ def run_mode_clustering_with_local_sysid(config_path): sysid_output, aligner_time = sysID.get_sysid_results(number_of_minutes, aligner, fs) data_client.disconnect() - # Mode Tracks + # Mode clustering dictionary_of_clusters, median_frequencies = MC.cluster_sysid( sysid_output,PARAMS) - # Print frequencies print("\nMedian frequencies:", median_frequencies) @@ -44,10 +43,14 @@ def run_mode_clustering_with_local_sysid(config_path): sys.stdout.flush() def run_mode_clustering_with_remote_sysid(config_path): - sysid_output, dictionary_of_clusters, meadian_frequencies = MC.subscribe_and_cluster(config_path,PARAMS) - fig_ax = plot_clusters(dictionary_of_clusters, sysid_output, PARAMS, fig_ax = None) - plt.show(block=True) + cluster_results, sysid_output, dictionary_of_clusters, meadian_frequencies, timestamp = MC.subscribe_and_cluster(config_path,PARAMS) + if sysid_output is not None: + fig_ax = plot_clusters(dictionary_of_clusters, sysid_output, PARAMS, fig_ax = None) + plt.show(block=True) sys.stdout.flush() def run_live_mode_clustering_with_remote_sysid(config_path): MC.live_mode_clustering(config_path,topic_index=0,plot=[1,1]) + +def run_live_mode_clustering_with_remote_sysid_and_publish(config_path): + MC.live_mode_clustering_publish(config_path,topic_index=0) diff --git a/src/examples/run_mode_tracking.py b/src/examples/run_mode_tracking.py index 2dc1bc4..470a50e 100644 --- a/src/examples/run_mode_tracking.py +++ b/src/examples/run_mode_tracking.py @@ -49,8 +49,9 @@ def run_mode_tracking_with_local_sysid(config_path): def run_mode_tracking_with_remote_sysid(config_path): sysid_output, clusters, tracked_clusters = MT.subscribe_and_track_clusters(config_path) - fig_ax = plot_tracked_modes(tracked_clusters, PARAMS, fig_ax = None, x_length = None) - plt.show(block=True) + if sysid_output is not None: + fig_ax = plot_tracked_modes(tracked_clusters, PARAMS, fig_ax = None, x_length = None) + plt.show(block=True) sys.stdout.flush() def run_live_mode_tracking_with_remote_sysid(config_path): diff --git a/src/examples/run_model_update.py b/src/examples/run_model_update.py index 3b420d3..10605d6 100644 --- a/src/examples/run_model_update.py +++ b/src/examples/run_model_update.py @@ -3,12 +3,12 @@ from data.accel.hbk.aligner import Aligner from methods import sysid as sysID from methods import mode_clustering as MC -from methods import model_update as MU -from methods.constants import PARAMS +from methods import model_update +from methods.constants import PARAMS, MODEL_PARAMETERS # pylint: disable=R0914, C0103 def run_model_update_local_sysid(config_path): - number_of_minutes = 5 + number_of_minutes = 1 config = load_config(config_path) mqtt_config = config["MQTT"] @@ -16,7 +16,7 @@ def run_model_update_local_sysid(config_path): data_client, fs = sysID.setup_client(mqtt_config) # Setting up the aligner - data_topic_indexes = [0, 2] + data_topic_indexes = [0, 2, 3, 4] selected_topics = [mqtt_config["TopicsToSubscribe"][i] for i in data_topic_indexes] aligner = Aligner(data_client, topics=selected_topics) @@ -27,65 +27,21 @@ def run_model_update_local_sysid(config_path): oma_output, aligner_time = sysID.get_sysid_results(number_of_minutes, aligner, fs) data_client.disconnect() - # Mode Track + # Mode clustering dictionary_clusters, median_frequencies = MC.cluster_sysid(oma_output,PARAMS) # Run model update - update_result = MU.run_model_update(dictionary_clusters) - - if update_result is not None: - optimized_parameters = update_result['optimized_parameters'] - omegaN_rad = update_result['omegaN_rad'] - omegaN_Hz = update_result['omegaN_Hz'] - mode_shapes = update_result['mode_shapes'] - damping_matrix = update_result['damping_matrix'] - pars_model = update_result['pars_updated'] - system_up = update_result['System_updated'] - - print("\nOptimized parameters (k, m):", optimized_parameters) - print("\nNatural frequencies (rad/s):", omegaN_rad) - print("\nNatural frequencies (Hz):", omegaN_Hz) - print("\nMode shapes (normalized):\n", mode_shapes) - print("\nDamping matrix:\n", damping_matrix) - print("\nUpdated model parameters (dictionary):", pars_model) - print("\nUpdated system:") - print("\nMass matrix M:", system_up["M"]) - print("\nStiffness matrix K:\n", system_up["K"]) - print("\nDamping matrix C:\n", system_up["C"]) - - else: - print("Model update failed.") - - + parameters, omegaMU, model_parameters = model_update.estimate_updated_model(dictionary_clusters,MODEL_PARAMETERS,PARAMS) def run_model_update_remote_sysid(config_path): - config = load_config(config_path) - sysid_output, clusters, median_frequencies = ( - MC.subscribe_and_cluster(config_path) - ) - - # Run model update - update_result = MU.run_model_update(clusters) + model_update.live_model_update_with_remote_sysid(config_path) - if update_result is not None: - optimized_parameters = update_result['optimized_parameters'] - omegaN_rad = update_result['omegaN_rad'] - omegaN_Hz = update_result['omegaN_Hz'] - mode_shapes = update_result['mode_shapes'] - damping_matrix = update_result['damping_matrix'] - pars_model = update_result['pars_updated'] - system_up = update_result['System_updated'] +def run_live_model_update_remote_clustering(config_path): + model_update.live_model_update_with_remote_clustering(config_path) - print("\nOptimized parameters (k, m):", optimized_parameters) - print("\nNatural frequencies (rad/s):", omegaN_rad) - print("\nNatural frequencies (Hz):", omegaN_Hz) - print("\nMode shapes (normalized):\n", mode_shapes) - print("\nDamping matrix:\n", damping_matrix) - print("\nUpdated model parameters (dictionary):", pars_model) - print("\nUpdated system:") - print("\nMass matrix M:", system_up["M"]) - print("\nStiffness matrix K:\n", system_up["K"]) - print("\nDamping matrix C:\n", system_up["C"]) - - else: - print("Model update failed.") +def run_live_model_update_with_remote_clustering_and_publish(config_path): + config = load_config(config_path) + publish_config = config["model_update"] + publish_client, publish_topic = MC.setup_publish_client(publish_config) + # publish_topic = publish_config["TopicsToSubscribe"][0] + model_update.live_model_update_with_remote_clustering_and_publish(config_path,publish_client,publish_topic) diff --git a/src/examples/run_sysid.py b/src/examples/run_sysid.py index 0a4bb61..3c146fd 100644 --- a/src/examples/run_sysid.py +++ b/src/examples/run_sysid.py @@ -33,7 +33,7 @@ def setup_sysid(config_path, data_topic_indexes): def run_sysid_and_plot(config_path): - number_of_minutes = 1 + number_of_minutes = 0.2 data_topic_indexes = [0, 2, 3, 4] aligner, data_client, fs = setup_sysid(config_path, data_topic_indexes) @@ -86,7 +86,7 @@ def run_sysid_and_publish(config_path): # Setting up the client for publishing sysid results publish_client, _ = sysID.setup_client(publish_config) # fs not needed here - publish_result = sysID.publish_sysid_results( + publish_result, timestamp = sysID.publish_sysid_results( number_of_minutes, aligner, publish_client, @@ -95,7 +95,7 @@ def run_sysid_and_publish(config_path): ) if publish_result is True: - print(f"Publishing to topic: {publish_config['TopicsToSubscribe'][0]}") + print(f"Publishing to topic: {publish_config['TopicsToSubscribe'][0]} at time: {timestamp}") data_client.disconnect() sys.stdout.flush() @@ -111,7 +111,7 @@ def live_sysid_and_publish(config_path): publish_result = True while publish_result: - publish_result = sysID.publish_sysid_results( + publish_result, timestamp = sysID.publish_sysid_results( number_of_minutes, aligner, publish_client, @@ -119,4 +119,4 @@ def live_sysid_and_publish(config_path): fs ) if publish_result is True: - print(f"Publishing to topic: {publish_config['TopicsToSubscribe'][0]}") + print(f"Publishing to topic: {publish_config['TopicsToSubscribe'][0]} at time: {timestamp}") diff --git a/src/functions/calculate_mac.py b/src/functions/calculate_mac.py index f6b73f1..6c92335 100644 --- a/src/functions/calculate_mac.py +++ b/src/functions/calculate_mac.py @@ -12,5 +12,7 @@ def calculate_mac(reference_mode_shape: np.array, second_mode_shape: np.array) - """ numerator = np.abs(np.dot(reference_mode_shape.conj().T, second_mode_shape)) ** 2 - denominator = np.dot(reference_mode_shape.conj().T, reference_mode_shape) * np.dot(second_mode_shape.conj().T, second_mode_shape) + denominator = np.dot(reference_mode_shape.conj().T, + reference_mode_shape) * np.dot(second_mode_shape.conj().T, + second_mode_shape) return np.real(numerator / denominator) \ No newline at end of file diff --git a/src/functions/plot_clusters.py b/src/functions/plot_clusters.py index feec388..87cbf79 100644 --- a/src/functions/plot_clusters.py +++ b/src/functions/plot_clusters.py @@ -88,15 +88,15 @@ def plot_clusters(clusters: Dict[str,dict], return fig, (ax1,ax2) -def add_scatter_cluster(ax: matplotlib.axes.Axes, x: np.ndarray[float], y: np.ndarray[float], cov: np.ndarray[float], cluster_id = int, error_dir: str = "h") -> Tuple[matplotlib.axes.Axes, Any]: +def add_scatter_cluster(ax: matplotlib.axes.Axes, x: np.ndarray, y: np.ndarray, cov: np.ndarray, cluster_id = int, error_dir: str = "h") -> Tuple[matplotlib.axes.Axes, Any]: """ Add scatter plot of clusters to existing axes Args: ax (matplotlib.axes.Axes): ax from matplotlib - x (np.ndarray[float]): x-axis data - y (np.ndarray[float]): y-axis data - cov (np.ndarray[float]): covariance for errorbars + x (np.ndarray): x-axis data + y (np.ndarray): y-axis data + cov (np.ndarray): covariance for errorbars cluster_id (int): Index of cluster for labeling error_dir (str): Direction of errorbars, either "h" horizontal or "v" vertical diff --git a/src/functions/plot_model_update.py b/src/functions/plot_model_update.py new file mode 100644 index 0000000..fea186c --- /dev/null +++ b/src/functions/plot_model_update.py @@ -0,0 +1,95 @@ +from typing import Tuple, Dict, Any, List +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.figure +plt.rcParams['font.family'] = 'Times New Roman' + +def plot_parameters(model_parameters: Dict[str, Any], + pars_to_update: List[str], + fig_ax = None)-> Tuple[matplotlib.figure.Figure, Tuple[plt.Axes,plt.Axes]]: + """ + Plot stabilization of clusters + + Args: + model_parameters (Dict[str,Any]): Model parameters (YaFEM) + parameters_to_update (np.ndarray[str]): String of keys to update in model_parameters + fix_ax (tuple): fig and ax of plot to redraw + Returns: + fig_ax (tuple): fig and ax of plot + + """ + n_pars = len(pars_to_update) + prev_data_x = [] + prev_data_y = [] + + if fig_ax is None: + plt.ion() + fig, axes = plt.subplots(n_pars,1,figsize=(6, n_pars*2), tight_layout=True) + else: + fig, axes = fig_ax + for ax in axes: + line1 = ax.lines[0] + xdata = line1.get_xdata().tolist() + ydata = line1.get_ydata().tolist() + prev_data_x.append(xdata) + prev_data_y.append(ydata) + ax.clear() + + for ii, ax in enumerate(axes): + if fig_ax is not None: + xdata = prev_data_x[ii] + ydata = prev_data_y[ii] + xdata.append(xdata[-1]+1) + else: + ydata = [] + xdata = [1] + + ydata.append(model_parameters[pars_to_update[ii]]) + ax.plot(xdata,ydata,'*-',color="k") + ax.set_ylabel(pars_to_update[ii]) + ax.set_xlabel('Dataset [-]') + + fig.canvas.draw() + fig.canvas.flush_events() + return fig, axes + + + +def plot_model_frequencies(omegaM: np.ndarray, + fig_ax = None)-> Tuple[matplotlib.figure.Figure, Tuple[plt.Axes,plt.Axes]]: + """ + Plot updated model frequencies + + Args: + omegaM (np.ndarray): array of model eigenfrequencies + fix_ax (tuple): fig and ax of plot to redraw + Returns: + fig_ax (tuple): fig and ax of plot + + """ + + if fig_ax is None: + plt.ion() + fig, ax1 = plt.subplots(1,1,figsize=(6, 4), tight_layout=True) + ydata = omegaM + xdata = [1] + else: + ydata_prev = [] + fig, ax1 = fig_ax + line1 = ax1.lines[0] + xdata_prev = line1.get_xdata().tolist() + for line in ax1.lines: + ydata_prev.append(line.get_ydata()) + ax1.clear() + + xdata = np.hstack((xdata_prev,np.array(xdata_prev[-1])+1)) + ydata = np.hstack((np.asarray(ydata_prev),np.reshape(omegaM, (-1, 1)))) + + for ii in range(len(omegaM)): + ax1.plot(xdata,ydata[ii],'*-') + ax1.set_ylabel("Model eigenfrequencies [Hz]") + ax1.set_xlabel('Dataset [-]') + + fig.canvas.draw() + fig.canvas.flush_events() + return fig, ax1 \ No newline at end of file diff --git a/src/functions/plot_sysid.py b/src/functions/plot_sysid.py index f3cc82c..b4b6b1b 100644 --- a/src/functions/plot_sysid.py +++ b/src/functions/plot_sysid.py @@ -114,15 +114,15 @@ def plot_stabilization_diagram( return fig, (ax1,ax2) -def add_scatter_cluster(ax: matplotlib.axes.Axes, x: np.ndarray[float], y: np.ndarray[float], cov: np.ndarray[float], cluster_id = int, error_dir: str = "h") -> Tuple[matplotlib.axes.Axes, Any]: +def add_scatter_cluster(ax: matplotlib.axes.Axes, x: np.ndarray, y: np.ndarray, cov: np.ndarray, cluster_id = int, error_dir: str = "h") -> Tuple[matplotlib.axes.Axes, Any]: """ Add scatter plot of clusters to existing axes Args: ax (matplotlib.axes.Axes): ax from matplotlib - x (np.ndarray[float]): x-axis data - y (np.ndarray[float]): y-axis data - cov (np.ndarray[float]): covariance for errorbars + x (np.ndarray): x-axis data + y (np.ndarray): y-axis data + cov (np.ndarray): covariance for errorbars cluster_id (int): Index of cluster for labeling error_dir (str): Direction of errorbars, either "h" horizontal or "v" vertical @@ -131,15 +131,15 @@ def add_scatter_cluster(ax: matplotlib.axes.Axes, x: np.ndarray[float], y: np.nd col (Any): """ -def add_scatter_data(ax: matplotlib.axes.Axes, x: np.ndarray[float], y: np.ndarray[float], cov: np.ndarray[float], error_dir: str = "h", mark: str ="o", lab: str ='Non clustered',size: float = 50) -> matplotlib.axes.Axes: +def add_scatter_data(ax: matplotlib.axes.Axes, x: np.ndarray, y: np.ndarray, cov: np.ndarray, error_dir: str = "h", mark: str ="o", lab: str ='Non clustered',size: float = 50) -> matplotlib.axes.Axes: """ Add scatter plot of sysid results to existing axes Args: ax (matplotlib.axes.Axes): ax from matplotlib - x (np.ndarray[float]): x-axis data - y (np.ndarray[float]): y-axis data - cov (np.ndarray[float]): covariance for errorbars + x (np.ndarray): x-axis data + y (np.ndarray): y-axis data + cov (np.ndarray): covariance for errorbars error_dir (str): Direction of errorbars, either "h" horizontal or "v" vertical mark (str): marker type option lab (str): Labeling for legend @@ -179,15 +179,15 @@ def add_plot_standard_flair(ax: matplotlib.axes.Axes, sysid_params: Dict[str,Any return ax -def add_plot_annotation(ax: matplotlib.axes.Axes, x: np.ndarray[float], y: np.ndarray[float], y_model_order: np.ndarray[float]) -> matplotlib.axes.Axes: +def add_plot_annotation(ax: matplotlib.axes.Axes, x: np.ndarray, y: np.ndarray, y_model_order: np.ndarray) -> matplotlib.axes.Axes: """ Add model order annotations Args: ax (matplotlib.axes.Axes): ax from matplotlib - x (np.ndarray[float]): x-axis data - y (np.ndarray[float]): y-axis data - y_model_order (np.ndarray[float]): Model order data + x (np.ndarray): x-axis data + y (np.ndarray): y-axis data + y_model_order (np.ndarray): Model order data Returns: ax (matplotlib.axes.Axes): diff --git a/src/functions/spectral_density.py b/src/functions/spectral_density.py new file mode 100644 index 0000000..21780c3 --- /dev/null +++ b/src/functions/spectral_density.py @@ -0,0 +1,22 @@ +import numpy as np +import matplotlib.pyplot as plt + +def plot_spectral_density(y,N,params): + # Spectrum test + fig1, (ax1) = plt.subplots(1,1,figsize=(8, 6), tight_layout=True) + fs = params['Fs'] # Sampling frequency (Hz) + duration = N/256 + t = np.linspace(0, duration, int(fs * duration), endpoint=False) + # Applying FFT + for ii, y_data in enumerate(y[:,0]): + fft_result = np.fft.fft(y[ii,:]) + freq = np.fft.fftfreq(t.shape[-1], d=1/fs) + + # Plotting the spectrum + ax1.plot(freq, np.abs(fft_result)) + ax1.set_xlabel('Frequency (Hz)') + ax1.set_ylabel('Amplitude') + ax1.set_xlim(0,fs/2) + ax1.legend(["acc1,node7","acc2,node6","acc3,node5","acc4,node4"]) + ax1.set_title("Filtered FFT") + plt.show(block=False) \ No newline at end of file diff --git a/src/functions/util.py b/src/functions/util.py index d69fa61..f5dd1d2 100644 --- a/src/functions/util.py +++ b/src/functions/util.py @@ -31,3 +31,19 @@ def convert_numpy_to_list(obj: Any) -> Any: except Exception: pass return obj + + +def _convert_list_to_dict_or_array(obj: Any) -> Any: + """Recursively convert JSON structure into complex numbers and numpy arrays.""" + if isinstance(obj, dict): + if "real" in obj and "imag" in obj: + return complex(obj["real"], obj["imag"]) + return {k: _convert_list_to_dict_or_array(v) for k, v in obj.items()} + + if isinstance(obj, list): + try: + return np.array([_convert_list_to_dict_or_array(item) for item in obj]) + except Exception: + return [_convert_list_to_dict_or_array(item) for item in obj] + + return obj \ No newline at end of file diff --git a/src/methods/constants.py b/src/methods/constants.py index d376b5e..33b15a2 100644 --- a/src/methods/constants.py +++ b/src/methods/constants.py @@ -42,3 +42,19 @@ # If more clusters match, an it is not clear what cluster is best, # then check if the difference of the objective function values are less than the criteria. # Then it is probably the one with higest MAC rather than frequency [difference] + +# Params for model updating +PARAMS['tMAC_MU'] = 0.7 + +PARAMS['modes_search_paring'] = 6 +PARAMS['pars_to_update'] = ["k_rot","m"] +PARAMS['MU_start_values'] = np.array([10, 0.015]) +PARAMS['MU_bounds'] = [(0.01, 1000), (0, 1000)] +PARAMS['MU_modes'] = [1,2,3] + +MODEL_PARAMETERS = {'modes': PARAMS['modes_search_paring'], + 'dofs_sel': np.array([[7,1],[6,1],[5,1],[4,1]]), + 'k_rot': None, + 'l4': 0.1289, + 'm': None, + } diff --git a/src/methods/mode_clustering.py b/src/methods/mode_clustering.py index fc1715f..b7f76ac 100644 --- a/src/methods/mode_clustering.py +++ b/src/methods/mode_clustering.py @@ -6,32 +6,17 @@ import matplotlib.pyplot as plt import paho.mqtt.client as mqtt from methods.constants import PARAMS +from functions.util import (convert_numpy_to_list, _convert_list_to_dict_or_array) from methods.mode_clustering_functions.clustering import cluster_func from functions.plot_sysid import plot_stabilization_diagram from functions.plot_clusters import plot_clusters -from data.comm.mqtt import load_config, setup_mqtt_client +from data.comm.mqtt import (load_config, setup_mqtt_client, reconnect_client) # pylint: disable=C0103, W0603 # Global threading event to wait for sysid data result_ready = threading.Event() sysid_output_global = None # will store received sysid data inside callback -def _convert_sysid_output(obj: Any) -> Any: - """Recursively convert JSON structure into complex numbers and numpy arrays.""" - if isinstance(obj, dict): - if "real" in obj and "imag" in obj: - return complex(obj["real"], obj["imag"]) - return {k: _convert_sysid_output(v) for k, v in obj.items()} - - if isinstance(obj, list): - try: - return np.array([_convert_sysid_output(item) for item in obj]) - except Exception: - return [_convert_sysid_output(item) for item in obj] - - return obj - - def _on_connect(client: mqtt.Client, userdata: dict, flags: dict, reason_code: int, properties: mqtt.Properties) -> None: """Callback when MQTT client connects.""" if reason_code == 0: @@ -45,26 +30,43 @@ def _on_connect(client: mqtt.Client, userdata: dict, flags: dict, reason_code: i def _on_message(_client: mqtt.Client, _userdata: dict, msg: mqtt.MQTTMessage) -> None: """Callback when a message is received.""" global sysid_output_global + global timestamp_global print(f"Message received on topic: {msg.topic}") try: raw = json.loads(msg.payload.decode("utf-8")) - sysid_output = _convert_sysid_output(raw["sysid_output"]) + sysid_output = _convert_list_to_dict_or_array(raw["sysid_output"]) timestamp = raw["timestamp"] print(f"Received sysid data at timestamp: {timestamp}") sysid_output_global = sysid_output + timestamp_global = timestamp result_ready.set() except Exception as e: print(f"Error processing sysid message: {e}") +def setup_publish_client(mqtt_config: Dict[str, Any]) -> Tuple[mqtt.Client, float]: + """ + Sets up and starts the MQTT client for subscribing to sensor data. + + Args: + mqtt_config: Configuration dictionary for the MQTT client. -def cluster_sysid(sysid_output: Any, params: dict[str,Any]) -> Tuple[dict[str,Any], np.ndarray]: + Returns: + A tuple of the connected MQTTClient instance and the extracted sampling frequency. + """ + + data_client, topic = setup_mqtt_client(mqtt_config, topic_index=0) + data_client.connect(mqtt_config["host"], mqtt_config["port"], 60) + data_client.loop_start() + return data_client, topic + +def cluster_sysid(sysid_output: Any, params: Dict[str,Any]) -> Tuple[Dict[str,Any], np.ndarray]: """ Runs the mode clustering algorithm. Args: sysid_output (Any): sysid output from subscription or elsewhere. Returns: - cluster_dict (dict[str,Any]), + cluster_dict (Dict[str,Any]), median_frequencies (np.ndarray), """ dictionary_clusters = cluster_func(sysid_output, params) @@ -87,6 +89,8 @@ def subscribe_and_cluster(config_path: str, params: Dict[str,Any] clusters (Dict[str,Any]]): Clusters """ global sysid_output_global + global timestamp_global + sysid_output_global = None # Reset in case old data is present result_ready.clear() @@ -103,26 +107,32 @@ def subscribe_and_cluster(config_path: str, params: Dict[str,Any] result_ready.wait() # Wait until message arrives mqtt_client.loop_stop() mqtt_client.disconnect() - + if sysid_output_global is None: raise RuntimeError("Failed to receive sysid data.") - print("sysid data received. Running mode clustering and tracking...") - clusters, median_frequencies = cluster_sysid(sysid_output_global,params) - print("Clustered frequencies", median_frequencies) + else: + print("Sysid data received. Running mode clustering...") + clusters, median_frequencies = cluster_sysid(sysid_output_global,params) + print("Clustered frequencies", median_frequencies) + + cluster_results = True + return cluster_results, sysid_output_global, clusters, median_frequencies, timestamp_global except KeyboardInterrupt: print("Shutting down gracefully") mqtt_client.loop_stop() mqtt_client.disconnect() + cluster_results = False + return cluster_results, None, None, None, None except Exception as e: print(f"Unexpected error: {e}") - - return sysid_output_global, clusters, median_frequencies + + return None, None, None, None, None def live_mode_clustering(config_path: str, topic_index: int = 0, - plot: np.ndarray[bool] = np.array([1,1]) + plot: np.ndarray = np.array([1,1]) ) -> Tuple[List[Dict], np.ndarray, np.ndarray]: """ Subscribes to MQTT broker, receives one sysid message, runs mode clustering, plots results. Continue until stopped. @@ -138,6 +148,7 @@ def live_mode_clustering(config_path: str, topic_index: int = 0, tracked_clusters (Dict[str,Any]]): Tracked clusters """ global sysid_output_global + global timestamp_global sysid_output_global = None # Reset in case old data is present result_ready.clear() @@ -180,5 +191,78 @@ def live_mode_clustering(config_path: str, topic_index: int = 0, mqtt_client.loop_stop() mqtt_client.disconnect() break + except Exception as e: + print(f"Unexpected error: {e}") + +def live_mode_clustering_publish(config_path: str, topic_index: int = 0 + ) -> Tuple[List[Dict], np.ndarray, np.ndarray]: + """ + Subscribes to MQTT broker, receives one sysid message, runs mode clustering, plots results. Continue until stopped. + + Args: + config_path (str): Path to config JSON. + topic_index (int): Topic to subscribe + + Returns: + sysid_output_global (Dict[str,Any]): sysid output + clusters (Dict[str,Any]]): Clusters + tracked_clusters (Dict[str,Any]]): Tracked clusters + """ + global sysid_output_global + global timestamp_global + sysid_output_global = None # Reset in case old data is present + timestamp_global = None # Reset in case old data is present + result_ready.clear() + + config = load_config(config_path) + mqtt_client, selected_topic = setup_mqtt_client(config["sysID"], topic_index) + + mqtt_client.user_data_set({"topic": selected_topic, "qos": 0}) + mqtt_client.on_connect = _on_connect + mqtt_client.on_message = _on_message + mqtt_client.connect(config["sysID"]["host"], config["sysID"]["port"], keepalive=60) + mqtt_client.loop_start() + + publish_config = config["mode_cluster"] + publish_client, publish_topic = setup_publish_client(publish_config) + + + while True: + try: + print("Waiting for sysid data...") + result_ready.wait() # Wait until message arrives + + if sysid_output_global is None: + raise RuntimeError("Failed to receive sysid data.") + + timestamp = timestamp_global + print(f"sysid data received at {timestamp}. Running mode clustering and tracking...") + result_ready.clear() + + clusters, median_frequencies = cluster_sysid(sysid_output_global,PARAMS) + print("Clustered frequencies", median_frequencies) + + payload = { + "timestamp": timestamp, + "cluster_dictionary": convert_numpy_to_list(clusters) + } + try: + message = json.dumps(payload) + + reconnect_succes = reconnect_client(publish_client) + + publish_client.publish(publish_topic, message, qos=1) + print(f"[{timestamp}] Published mode clusters to {publish_topic}") + + except Exception as e: + print(f"\nFailed to publish mode clusters: {e}") + + sys.stdout.flush() + except KeyboardInterrupt: + print("Shutting down gracefully") + mqtt_client.loop_stop() + mqtt_client.disconnect() + publish_client.disconnect() + break except Exception as e: print(f"Unexpected error: {e}") \ No newline at end of file diff --git a/src/methods/mode_clustering_functions/align_clusters.py b/src/methods/mode_clustering_functions/align_clusters.py index 3b970e3..c60f2eb 100644 --- a/src/methods/mode_clustering_functions/align_clusters.py +++ b/src/methods/mode_clustering_functions/align_clusters.py @@ -1,14 +1,15 @@ +from typing import Any, Dict import numpy as np -from typing import Any from functions.calculate_mac import calculate_mac +# pylint: disable=C0103 -def alignment(cluster_dict: dict[str,dict], Params: dict[str,Any]) -> dict[str,dict]: +def alignment(cluster_dict: Dict[str,dict], params: Dict[str,Any]) -> Dict[str,dict]: """ Alignment/merging of clusters Args: cluster_dict (dict): Dictionary of multiple clusters - Params (dict): Dictionary of algorithm parameters + params (dict): Dictionary of algorithm parameters Returns: cluster_dict (dict): Dictionary of aligned clusters @@ -26,59 +27,66 @@ def alignment(cluster_dict: dict[str,dict], Params: dict[str,Any]) -> dict[str,d # Calculate absolute difference of selected median and all medians diff = abs(median_f-m_f) # If this difference is above 0 (not itself) and inside the bounds: - # Bounds are the minimum of either median_f * allignment_factor_0 or Sampling frequency / 2 * allignment_factor_1 + # Bounds are the minimum of either median_f * allignment_factor_0 + # or Sampling frequency / 2 * allignment_factor_1 # For lower median frequencies the bound is determined by the size of median frequency. # For higher median frequencies the bound is determined by the sampling frequency - mask = (diff > 0) & (diff < min(m_f*Params['allignment_factor'][0],Params['Fs']/2*Params['allignment_factor'][1])) - indices = np.argwhere(mask == True) #Indicies of clusters that are closely located in frequency + mask = (diff > 0) & (diff < min(m_f*params['allignment_factor'][0], + params['Fs']/2*params['allignment_factor'][1])) + #Indicies of clusters that are closely located in frequency + indices = np.argwhere(mask == True) if indices.shape[0] > 0:# If one or more clusters are found ids = indices[:,0] - for id in ids: #Go through all clusters that is closely located - if id in deleted_cluster_id: + for idx in ids: #Go through all clusters that is closely located + if idx in deleted_cluster_id: continue cluster1 = cluster_dict[str(ii)] #Parent cluster - cluster2 = cluster_dict[str(id)] #Co-located cluster - - MAC = calculate_mac(cluster1['mode_shapes'][0],cluster2['mode_shapes'][0]) # Check mode shape for the first pole in each cluster - if MAC >= Params['tMAC']: #If MAC complies with the criteria, then add the two clusters - cluster, cluster_remaining = join_clusters(cluster_dict[str(ii)],cluster_dict[str(id)],Params) + cluster2 = cluster_dict[str(idx)] #Co-located cluster + + # Check mode shape for the first pole in each cluster + MAC = calculate_mac(cluster1['mode_shapes'][0],cluster2['mode_shapes'][0]) + if MAC >= params['tMAC']: #If MAC complies with the criteria, then add the two clusters + cluster, cluster_remaining = join_clusters(cluster_dict[str(ii)], + cluster_dict[str(idx)], + params) cluster_dict[str(ii)] = cluster #Save the new larger cluster if len(cluster_remaining) == 0: #If the remaining cluster is emmpty - cluster_dict.pop(str(id), None) #Remove the co-located cluster - deleted_cluster_id.append(int(id)) #The delete cluster id + cluster_dict.pop(str(idx), None) #Remove the co-located cluster + deleted_cluster_id.append(int(idx)) #The delete cluster idx else: - cluster_dict[str(id)] = cluster_remaining #Save the remaining cluster + cluster_dict[str(idx)] = cluster_remaining #Save the remaining cluster else: #Check if the mode shapes across any of the poles complies with the MAC criteria - - MAC = np.zeros((cluster1['mode_shapes'].shape[0],cluster2['mode_shapes'].shape[0])) + MAC = np.zeros((cluster1['mode_shapes'].shape[0], + cluster2['mode_shapes'].shape[0])) for jj, ms1 in enumerate(cluster1['mode_shapes']): for kk, ms2 in enumerate(cluster2['mode_shapes']): MAC[jj,kk] = calculate_mac(ms1,ms2) - if MAC.max() >= Params['tMAC']: #If MAC criteria is meet add the clusters together - cluster, cluster_remaining = join_clusters(cluster_dict[str(ii)],cluster_dict[str(id)],Params) + if MAC.max() >= params['tMAC']: #If MAC criteria is meet add clusters together + cluster, cluster_remaining = join_clusters(cluster_dict[str(ii)], + cluster_dict[str(idx)],params) cluster_dict[str(ii)] = cluster #Save the new larger cluster if len(cluster_remaining) == 0: #If the remaining cluster is emmpty - cluster_dict.pop(str(id), None) #Remove the co-located cluster - deleted_cluster_id.append(int(id)) #The delete cluster id + cluster_dict.pop(str(idx), None) #Remove the co-located cluster + deleted_cluster_id.append(int(idx)) #The delete cluster idx else: - cluster_dict[str(id)] = cluster_remaining #Save the remaining cluster - - + cluster_dict[str(idx)] = cluster_remaining #Save the remaining cluster + cluster_dict_alligned = cluster_dict return cluster_dict_alligned -def join_clusters(cluster_1: dict[str,Any], cluster_2: dict[str,Any], Params: dict[str,Any]) -> dict[str,Any]: +def join_clusters(cluster_1: Dict[str,Any], cluster_2: Dict[str,Any], + params: Dict[str,Any]) -> Dict[str,Any]: """ Add two clusters together Args: cluster_1 (dict): Cluster cluster_2 (dict): Cluster - Params (dict): Dictionary of algorithm parameters + params (dict): Dictionary of algorithm parameters Returns: cluster (dict): Joined cluster cluster_remaining (dict): The cluster that remains @@ -104,58 +112,58 @@ def join_clusters(cluster_1: dict[str,Any], cluster_2: dict[str,Any], Params: di median_f1 = np.median(cluster1['f']) - for MO in range(Params['model_order']): #Go through all poles in a cluster + for MO in range(params['model_order']): #Go through all poles in a cluster jj = np.argwhere(row1 == MO) - id = np.argwhere(row2 == MO) + idx = np.argwhere(row2 == MO) if MO in row1: #If a pole in the largest cluster exist for the this model order - r1 = MO if MO in row2: #If a pole exist in the same model order #Get frequencies of the poles f1 = cluster1['f'][jj[:,0]] - f2 = cluster2['f'][id[:,0]] - if abs(median_f1-f2) >= abs(median_f1-f1): #If pole in cluster 1 is closer to median of cluster 1 + f2 = cluster2['f'][idx[:,0]] + if abs(median_f1-f2) >= abs(median_f1-f1): + #If pole in cluster 1 is closer to median of cluster 1 cluster = append_cluster_data(cluster,cluster1,jj[:,0]) - cluster_remaining = append_cluster_data(cluster_remaining,cluster2,id[:,0]) + cluster_remaining = append_cluster_data(cluster_remaining,cluster2,idx[:,0]) else: #If pole in cluster 2 is closer to median of cluster 1 - cluster = append_cluster_data(cluster,cluster2,id[:,0]) + cluster = append_cluster_data(cluster,cluster2,idx[:,0]) cluster_remaining = append_cluster_data(cluster_remaining,cluster1,jj[:,0]) else: #If only one pole exist in the largest cluster cluster = append_cluster_data(cluster,cluster1,jj[:,0]) elif MO in row2: #If a pole in the smallest cluster exist for the model order - cluster = append_cluster_data(cluster,cluster2,id[:,0]) + cluster = append_cluster_data(cluster,cluster2,idx[:,0]) return cluster, cluster_remaining -def append_cluster_data(cluster: dict[str,Any], cluster2: dict[str,Any], id: int) -> dict[str,Any]: +def append_cluster_data(cluster: Dict[str,Any], cluster2: Dict[str,Any], idx: int) -> Dict[str,Any]: """ Add cluster data to an existing cluster Args: cluster (dict): Existing cluster cluster2 (dict): Cluster - id (int): id of data to append + idx (int): id of data to append Returns: cluster (dict): Cluster """ if len(cluster) == 0: #If it is the first pole - cluster['f'] = cluster2['f'][id] - cluster['cov_f'] = cluster2['cov_f'][id] - cluster['d'] = cluster2['d'][id] - cluster['cov_d'] = cluster2['cov_d'][id] - cluster['mode_shapes'] = cluster2['mode_shapes'][id,:] - cluster['MAC'] = cluster2['MAC'][id] - cluster['model_order'] = cluster2['model_order'][id] - cluster['row'] = cluster2['row'][id] - cluster['col'] = cluster2['col'][id] + cluster['f'] = cluster2['f'][idx] + cluster['cov_f'] = cluster2['cov_f'][idx] + cluster['d'] = cluster2['d'][idx] + cluster['cov_d'] = cluster2['cov_d'][idx] + cluster['mode_shapes'] = cluster2['mode_shapes'][idx,:] + cluster['MAC'] = cluster2['MAC'][idx] + cluster['model_order'] = cluster2['model_order'][idx] + cluster['row'] = cluster2['row'][idx] + cluster['col'] = cluster2['col'][idx] else: - cluster['f'] = np.append(cluster['f'],cluster2['f'][id]) - cluster['cov_f'] = np.append(cluster['cov_f'],cluster2['cov_f'][id]) - cluster['d'] = np.append(cluster['d'],cluster2['d'][id]) - cluster['cov_d'] = np.append(cluster['cov_d'],cluster2['cov_d'][id]) - cluster['mode_shapes'] = np.vstack((cluster['mode_shapes'],cluster2['mode_shapes'][id,:])) - cluster['MAC'] = np.append(cluster['MAC'],cluster2['MAC'][id]) - cluster['model_order'] = np.append(cluster['model_order'],cluster2['model_order'][id]) - cluster['row'] = np.append(cluster['row'],cluster2['row'][id]) - cluster['col'] = np.append(cluster['col'],cluster2['col'][id]) - return cluster \ No newline at end of file + cluster['f'] = np.append(cluster['f'],cluster2['f'][idx]) + cluster['cov_f'] = np.append(cluster['cov_f'],cluster2['cov_f'][idx]) + cluster['d'] = np.append(cluster['d'],cluster2['d'][idx]) + cluster['cov_d'] = np.append(cluster['cov_d'],cluster2['cov_d'][idx]) + cluster['mode_shapes'] = np.vstack((cluster['mode_shapes'],cluster2['mode_shapes'][idx,:])) + cluster['MAC'] = np.append(cluster['MAC'],cluster2['MAC'][idx]) + cluster['model_order'] = np.append(cluster['model_order'],cluster2['model_order'][idx]) + cluster['row'] = np.append(cluster['row'],cluster2['row'][idx]) + cluster['col'] = np.append(cluster['col'],cluster2['col'][idx]) + return cluster diff --git a/src/methods/mode_clustering_functions/check_mode_shapes.py b/src/methods/mode_clustering_functions/check_mode_shapes.py new file mode 100644 index 0000000..42881fb --- /dev/null +++ b/src/methods/mode_clustering_functions/check_mode_shapes.py @@ -0,0 +1,16 @@ +def check_mode_shapes(cluster_dict,dofs=None): + print("Check mode shapes") + + for key in cluster_dict.keys(): + cluster = cluster_dict[key] + print("\nCluster",key,cluster['median_f']) + mode_shape = cluster['mode_shapes'][0] + print("Mode shape") + if dofs is not None: + for ii, dof in enumerate(dofs): + print(dof,mode_shape[ii]) + else: + print(mode_shape) + print('Press enter to continue') + x = input() + print("Mode shape check done") diff --git a/src/methods/mode_clustering_functions/clustering.py b/src/methods/mode_clustering_functions/clustering.py index 56710d4..d00bc2e 100644 --- a/src/methods/mode_clustering_functions/clustering.py +++ b/src/methods/mode_clustering_functions/clustering.py @@ -1,22 +1,28 @@ +<<<<<<< HEAD from typing import Any +======= +from typing import Any, Dict, Tuple +>>>>>>> eceb467 (Added clustering and mode tracking) import numpy as np from functions.clean_sysid_output import (remove_highly_uncertain_points,transform_sysid_features) from methods.mode_clustering_functions.create_cluster import cluster_creation from methods.mode_clustering_functions.expand_cluster import cluster_expansion from methods.mode_clustering_functions.initialize_Ip import cluster_initial from methods.mode_clustering_functions.align_clusters import alignment - +# pylint: disable=C0103 # Following the algorithm proposed here: https://doi.org/10.1007/978-3-031-61421-7_56 # JVM 22/10/2025 -def cluster_func(sysid_output: dict[str,Any], Params : dict[str,Any]) -> tuple[dict[str,Any], dict[str,Any], dict[str,Any]]: +def cluster_func(sysid_output: Dict[str,Any], + params: Dict[str,Any])-> Tuple[Dict[str,Any], + Dict[str,Any], Dict[str,Any]]: """ Clustering of OMA results Args: sysid_output (dict): PyOMA results - Params (dict): Algorihm parameters + params (dict): Algorihm parameters Returns: cluster_dict_1 (dict): Dictionary of clusters after clustering cluster_dict_2 (dict): Dictionary of clusters after alignment @@ -25,10 +31,13 @@ def cluster_func(sysid_output: dict[str,Any], Params : dict[str,Any]) -> tuple[d """ #Preeliminary cleaning - frequencies, cov_freq, damping_ratios, cov_damping, mode_shapes = remove_highly_uncertain_points(sysid_output,Params) + (frequencies, cov_freq, damping_ratios, cov_damping, mode_shapes + ) = remove_highly_uncertain_points(sysid_output,params) + + (frequencies, cov_freq, damping_ratios, cov_damping,mode_shapes2, model_orders + ) = transform_sysid_features(frequencies, cov_freq, damping_ratios, + cov_damping, mode_shapes) - frequencies, cov_freq, damping_ratios, cov_damping, mode_shapes2, model_orders = transform_sysid_features(frequencies, cov_freq, damping_ratios, cov_damping, mode_shapes) - row, col = np.indices(model_orders.shape) row = row.flatten(order="C") col = col.flatten(order="C") @@ -41,7 +50,6 @@ def cluster_func(sysid_output: dict[str,Any], Params : dict[str,Any]) -> tuple[d 'mode_shapes':mode_shapes2, 'row':row, 'col':col} - cluster_dict = {} cluster_counter = 0 for count, f in enumerate(frequencies.flatten(order="f")): @@ -62,7 +70,7 @@ def cluster_func(sysid_output: dict[str,Any], Params : dict[str,Any]) -> tuple[d initial_points = cluster_initial(ip,data1) #Algorithm. 1 step 3 - Initialization #Creating clusters - cluster1 = cluster_creation(initial_points,Params) + cluster1 = cluster_creation(initial_points,params) data2 = data1.copy() @@ -72,9 +80,9 @@ def cluster_func(sysid_output: dict[str,Any], Params : dict[str,Any]) -> tuple[d while expansion: kk += 1 if kk > 10: - raise("Expansion never ends, something is wrong.") + raise RuntimeError("Expansion never ends, something is wrong.") pre_cluster = cluster1 - cluster2 = cluster_expansion(cluster1,data2,Params) + cluster2 = cluster_expansion(cluster1,data2,params) if cluster2['f'].shape == pre_cluster['f'].shape: if (cluster2['f'] == pre_cluster['f']).all(): expansion = False @@ -82,22 +90,21 @@ def cluster_func(sysid_output: dict[str,Any], Params : dict[str,Any]) -> tuple[d cluster1 = cluster2 else: cluster1 = cluster2 - + #Sort if more than one pole exist in the cluster if isinstance(cluster2['f'],np.ndarray): cluster2 = sort_cluster(cluster2) - + #Save cluster if isinstance(cluster2['f'],np.ndarray): #Must atleast have two poles cluster_dict[str(cluster_counter)] = cluster2 cluster_counter += 1 data1 = remove_data_from_S(data2,cluster2) #Remove clustered poles from data else: - print("cluster2 too short:",1,"But must be:",Params['mstab']) - - + print("cluster2 too short:",1,"But must be:",params['mstab']) + #Allignment or merging of stacked clusters - cluster_dict2 = alignment(cluster_dict.copy(),Params) + cluster_dict2 = alignment(cluster_dict.copy(),params) #Custom cardinality check cluster_dict3 = {} @@ -105,40 +112,43 @@ def cluster_func(sysid_output: dict[str,Any], Params : dict[str,Any]) -> tuple[d for ii, key in enumerate(cluster_dict2.keys()): cluster = cluster_dict2[key] if isinstance(cluster['f'],np.ndarray): - if cluster['f'].shape[0] < Params['mstab']: - print("cluster", np.median(cluster['f']),"too short:",cluster['f'].shape[0],"But must be:",Params['mstab']) + if cluster['f'].shape[0] < params['mstab']: + print("Cluster", np.median(cluster['f']), + "too short:",cluster['f'].shape[0], + "Must be: >",params['mstab']) else: print("Cluster saved:", np.median(cluster['f'])) cluster_dict3[str(ii)] = cluster cluster_counter += 1 data1 = remove_data_from_S(data2,cluster) #Remove clustered poles from data else: - print("cluster too short:",1,"But must be:",Params['mstab']) + print("cluster too short:",1,"But must be:",params['mstab']) cluster_dict2.pop(key) - + #Add median and confidence intervals (one sided) to cluster data for key in cluster_dict3.keys(): cluster = cluster_dict3[key] cluster['median_f'] = np.median(cluster['f']) - ci_f = np.sqrt(cluster['cov_f']) * Params['bound_multiplier'] - ci_d = np.sqrt(cluster['cov_d']) * Params['bound_multiplier'] + ci_f = np.sqrt(cluster['cov_f']) * params['bound_multiplier'] + ci_d = np.sqrt(cluster['cov_d']) * params['bound_multiplier'] cluster['ci_f'] = ci_f cluster['ci_d'] = ci_d #Sort the clusters into accending order of median frequency median_frequencies = np.zeros(len(cluster_dict3)) - for ii, key in enumerate(cluster_dict3.keys()): + for ii, key in enumerate(cluster_dict3.keys()): cluster = cluster_dict3[key] median_frequencies[ii] = cluster['median_f'] - + indices = np.argsort(median_frequencies) cluster_dict4 = {} - for ii, id in enumerate(np.array(list(cluster_dict3.keys()))[indices]): #Rename all cluster dict from 0 to len(cluster_dict2) - cluster_dict4[ii] = cluster_dict3[id] #Insert a cluster into a key + #Rename all cluster dict from 0 to len(cluster_dict2) + for ii, key in enumerate(np.array(list(cluster_dict3.keys()))[indices]): + cluster_dict4[ii] = cluster_dict3[key] #Insert a cluster into a key return cluster_dict4 -def remove_data_from_S(data: dict[str,Any],cluster: dict[str,Any]) -> dict[str,Any]: +def remove_data_from_S(data: Dict[str,Any],cluster: Dict[str,Any]) -> Dict[str,Any]: """ Remove cluster from data or S @@ -175,10 +185,10 @@ def remove_data_from_S(data: dict[str,Any],cluster: dict[str,Any]) -> dict[str,A data2['cov_f'][r,c] = np.nan data2['cov_d'][r,c] = np.nan data2['mode_shapes'][r,c,:] = np.nan - + return data2 -def sort_cluster(cluster: dict[str,Any]) -> dict[str,Any]: +def sort_cluster(cluster: Dict[str,Any]) -> Dict[str,Any]: """ Sort cluster based on row/model order @@ -199,5 +209,5 @@ def sort_cluster(cluster: dict[str,Any]) -> dict[str,Any]: cluster['model_order'] = cluster['model_order'][sort_id] cluster['row'] = cluster['row'][sort_id] cluster['col'] = cluster['col'][sort_id] - - return cluster \ No newline at end of file + + return cluster diff --git a/src/methods/mode_clustering_functions/create_cluster.py b/src/methods/mode_clustering_functions/create_cluster.py index e020b74..c6703df 100644 --- a/src/methods/mode_clustering_functions/create_cluster.py +++ b/src/methods/mode_clustering_functions/create_cluster.py @@ -1,14 +1,15 @@ -import numpy as np from typing import Any, Dict +import numpy as np from functions.calculate_mac import calculate_mac +# pylint: disable=C0103 -def cluster_creation(IP: Dict[str,Any],Params: Dict[str,Any]) -> Dict[str,Any]: #Algorithm 2 +def cluster_creation(IP: Dict[str,Any],params: Dict[str,Any]) -> Dict[str,Any]: #Algorithm 2 """ Create cluster Args: IP (dict): Dictionary of data on inital points - Params (dict): Dictionary of algorithm parameters + params (dict): Dictionary of algorithm parameters Returns: cluster (dict): Cluster @@ -23,9 +24,10 @@ def cluster_creation(IP: Dict[str,Any],Params: Dict[str,Any]) -> Dict[str,Any]: col = IP['col'] IPu = {} - if len(row) != len(set(row)): #line 5 in algorithm #If there are multiple points at the same model order - for ii, id in enumerate(row): #Go through all rows/model orders - pos = np.argwhere(row==id) #Locate the indices of one or more poles + #line 5 in algorithm #If there are multiple points at the same model order + if len(row) != len(set(row)): + for ii, idx in enumerate(row): #Go through all rows/model orders + pos = np.argwhere(row==idx) #Locate the indices of one or more poles #line 6 in algorithm if len(pos) == 1: #If only 1 pole exist at the model order if len(IPu) == 0: #First pole @@ -36,7 +38,7 @@ def cluster_creation(IP: Dict[str,Any],Params: Dict[str,Any]) -> Dict[str,Any]: IPu['ms'] = np.array((mode_shapes[ii,:])) IPu['row'] = row[ii] IPu['col'] = col[ii] - else: + else: IPu['f'] = np.append(IPu['f'],frequencies[ii]) IPu['cov_f'] = np.append(IPu['cov_f'],cov_f[ii]) IPu['d'] = np.append(IPu['d'],damping_ratios[ii]) @@ -44,15 +46,15 @@ def cluster_creation(IP: Dict[str,Any],Params: Dict[str,Any]) -> Dict[str,Any]: IPu['ms'] = np.vstack((IPu['ms'],mode_shapes[ii,:])) IPu['row'] = np.append(IPu['row'],row[ii]) IPu['col'] = np.append(IPu['col'],col[ii]) - + if len(IPu) > 0: #If there exist model orders with unique poles - if type(IPu['f']) == np.float64: + if isinstance(IPu['f'],float): cluster = {'f':np.array([IPu['f']]), 'cov_f':np.array([IPu['cov_f']]), 'd':np.array([IPu['d']]), 'cov_d':np.array([IPu['cov_d']]), 'mode_shapes':np.array([IPu['ms']]), - 'model_order':np.array([Params['model_order']-IPu['row']]), + 'model_order':np.array([params['model_order']-IPu['row']]), 'row':np.array([IPu['row']]), 'col':np.array([IPu['col']]), 'MAC':np.array([1])} @@ -63,12 +65,13 @@ def cluster_creation(IP: Dict[str,Any],Params: Dict[str,Any]) -> Dict[str,Any]: 'd':np.array([IPu['d'][0]]), 'cov_d':np.array([IPu['cov_d'][0]]), 'mode_shapes':np.array([IPu['ms'][0,:]]), - 'model_order':np.array([Params['model_order']-IPu['row'][0]]), + 'model_order':np.array([params['model_order']-IPu['row'][0]]), 'row':np.array([IPu['row'][0]]), 'col':np.array([IPu['col'][0]]), 'MAC':np.array([1])} - cluster, non_clustered_IPu = cluster_from_mac(cluster,IPu,Params) #cluster the unique poles + #cluster the unique poles + cluster, non_clustered_IPu = cluster_from_mac(cluster,IPu,params) else: #if no unique poles exist then go forth with the initial point, ip. #Only the initial point is clustered @@ -77,11 +80,11 @@ def cluster_creation(IP: Dict[str,Any],Params: Dict[str,Any]) -> Dict[str,Any]: 'd':np.array([damping_ratios[0]]), 'cov_d':np.array([cov_d[0]]), 'mode_shapes':np.array([mode_shapes[0,:]]), - 'model_order':np.array([Params['model_order']-row[0]]), + 'model_order':np.array([params['model_order']-row[0]]), 'row':np.array([row[0]]), 'col':np.array([col[0]]), 'MAC':np.array([1])} - + #Check if there are multiple points with same model order as ip ip_ids = np.argwhere(row==row[0]) if len(ip_ids[:,0]) > 1: # Remove all the other points at the same model order @@ -95,12 +98,12 @@ def cluster_creation(IP: Dict[str,Any],Params: Dict[str,Any]) -> Dict[str,Any]: row = np.delete(row,ii) col = np.delete(col,ii) except: - breakpoint() - + raise ValueError("Multiple rows exist") + non_clustered_IPu = {'row':[]} if len(row) != len(set(row)): #If there still are points at the same model order in IP IPm = {} - for ii, id in enumerate(row): #Go through all rows/model orders - pos = np.argwhere(row==id) #Locate the indices of one or more poles + for ii, idx in enumerate(row): #Go through all rows/model orders + pos = np.argwhere(row==idx) #Locate the indices of one or more poles #line 6 in algorithm if len(pos) > 1: #If more than one pole exist for the model order if len(IPm) == 0: #First pole @@ -111,7 +114,7 @@ def cluster_creation(IP: Dict[str,Any],Params: Dict[str,Any]) -> Dict[str,Any]: IPm['ms'] = np.array((mode_shapes[ii,:])) IPm['row'] = row[ii] IPm['col'] = col[ii] - else: + else: IPm['f'] = np.append(IPm['f'],frequencies[ii]) IPm['cov_f'] = np.append(IPm['cov_f'],cov_f[ii]) IPm['d'] = np.append(IPm['d'],damping_ratios[ii]) @@ -120,19 +123,20 @@ def cluster_creation(IP: Dict[str,Any],Params: Dict[str,Any]) -> Dict[str,Any]: IPm['row'] = np.append(IPm['row'],row[ii]) IPm['col'] = np.append(IPm['col'],col[ii]) # After the unique poles are clustered, the multiple poles are clusterd - cluster, non_clustered_IPm = cluster_from_mac_IPm(cluster,IPm,Params) + cluster, non_clustered_IPm = cluster_from_mac_IPm(cluster,IPm,params) #Start while loop cluster_len_before = 0 while len(cluster['row']) != cluster_len_before: cluster_len_before = len(cluster['row']) - try: - if len(non_clustered_IPu['row']) > 0: - cluster, non_clustered_IPu = cluster_from_mac(cluster,non_clustered_IPu,Params) #cluster the unique poles again - except: - pass + if len(non_clustered_IPu['row']) > 0: + #cluster the unique poles again + cluster, non_clustered_IPu = cluster_from_mac(cluster,non_clustered_IPu, + params) if len(non_clustered_IPm['row']) > 0: - cluster, non_clustered_IPm = cluster_from_mac_IPm(cluster,non_clustered_IPm,Params) #cluster the non-unique poles again + #cluster the non-unique poles again + cluster, non_clustered_IPm = cluster_from_mac_IPm(cluster,non_clustered_IPm, + params) else: #line 1 in algorithm: only unique poles cluster = {'f':np.array([frequencies[0]]), @@ -140,23 +144,24 @@ def cluster_creation(IP: Dict[str,Any],Params: Dict[str,Any]) -> Dict[str,Any]: 'd':np.array([damping_ratios[0]]), 'cov_d':np.array([cov_d[0]]), 'mode_shapes':np.array([mode_shapes[0,:]]), - 'model_order':np.array([Params['model_order']-row[0]]), + 'model_order':np.array([params['model_order']-row[0]]), 'row':np.array([row[0]]), 'col':np.array([col[0]]), 'MAC':np.array([1])} if IP['f'].shape[0] > 1: - cluster, _ = cluster_from_mac(cluster,IP,Params) + cluster, _ = cluster_from_mac(cluster,IP,params) return cluster -def cluster_from_mac(cluster: Dict[str,Any], IP: Dict[str,Any], Params: Dict[str,Any]) -> Dict[str,Any]: +def cluster_from_mac(cluster: Dict[str,Any], IP: Dict[str,Any], + params: Dict[str,Any]) -> Dict[str,Any]: """ Add points to cluster based on MAC Args: cluster (dict): Intermediate cluster IP (dict): Dictionary of data on inital points - Params (dict): Dictionary of algorithm parameters + params (dict): Dictionary of algorithm parameters Returns: cluster (dict): Intermediate cluster @@ -173,31 +178,29 @@ def cluster_from_mac(cluster: Dict[str,Any], IP: Dict[str,Any], Params: Dict[str ip_ms = IP['ms'][0] i_ms = IP['ms'][1:] - f_ip = frequencies[0] - f_i = frequencies[1:] - row_i = row[1:] skip_id = [] - for jj, ms in enumerate(i_ms): #Go through all mode shapes in cluster idx = jj+1 MAC = calculate_mac(ip_ms,ms) #Does the mode shape match with the first pole - if MAC > Params['tMAC']: #line 2 in algorithm + if MAC > params['tMAC']: #line 2 in algorithm #Add to cluster cluster['f'] = np.append(cluster['f'],frequencies[idx]) cluster['cov_f'] = np.append(cluster['cov_f'],cov_f[idx]) cluster['d'] = np.append(cluster['d'],damping_ratios[idx]) cluster['cov_d'] = np.append(cluster['cov_d'],cov_d[idx]) - cluster['mode_shapes'] = np.vstack((cluster['mode_shapes'],np.array(mode_shapes[idx,:]))) + cluster['mode_shapes'] = np.vstack((cluster['mode_shapes'], + np.array(mode_shapes[idx,:]))) cluster['MAC'] = np.append(cluster['MAC'],MAC) - cluster['model_order'] = np.append(cluster['model_order'],Params['model_order']-row[idx]) + cluster['model_order'] = np.append(cluster['model_order'], + params['model_order']-row[idx]) cluster['row'] = np.append(cluster['row'],row[idx]) cluster['col'] = np.append(cluster['col'],col[idx]) - skip_id.append(idx) - #Compare remaining points with newly added cluster points, i.e. points are compared with the full cluster, not just ip - if cluster['f'].shape[0] > 1: #Proceed if points have been added to cluster + # Compare remaining points with newly added cluster points, + # i.e. points are compared with the full cluster, not just ip + if cluster['f'].shape[0] > 1: #Proceed if points have been added to cluster if IP['ms'].shape[0] > len(skip_id): #If there are more points to compare left, then proceed cluster_length = len(cluster['row']) new_cluster_length = 0 @@ -214,27 +217,28 @@ def cluster_from_mac(cluster: Dict[str,Any], IP: Dict[str,Any], Params: Dict[str for c_ms in cluster['mode_shapes']: MAC_list.append(calculate_mac(c_ms,ms)) - if max(MAC_list) > Params['tMAC']: #line 2 in algorithm + if max(MAC_list) > params['tMAC']: #line 2 in algorithm MAC = calculate_mac(ip_ms,ms) #Add to cluster cluster['f'] = np.append(cluster['f'],frequencies[idx]) cluster['cov_f'] = np.append(cluster['cov_f'],cov_f[idx]) cluster['d'] = np.append(cluster['d'],damping_ratios[idx]) cluster['cov_d'] = np.append(cluster['cov_d'],cov_d[idx]) - cluster['mode_shapes'] = np.vstack((cluster['mode_shapes'],np.array(mode_shapes[idx,:]))) - cluster['MAC'] = np.append(cluster['MAC'],MAC) - cluster['model_order'] = np.append(cluster['model_order'],Params['model_order']-row[idx]) + cluster['mode_shapes'] = np.vstack((cluster['mode_shapes'], + np.array(mode_shapes[idx,:]))) + cluster['MAC'] = np.append(cluster['MAC'],MAC) + cluster['model_order'] = np.append(cluster['model_order'], + params['model_order']-row[idx]) cluster['row'] = np.append(cluster['row'],row[idx]) cluster['col'] = np.append(cluster['col'],col[idx]) skip_id.append(idx) - new_cluster_length = len(cluster['row']) + new_cluster_length = len(cluster['row']) clustered_id = [] for r2 in cluster['row']: #For every entry in row cluster - unclustered_point = False for ii, r1 in enumerate(IP['row']): #For every entry in row IPu if r1 == r2: #If r1 is a entry of "row" in the cluster, then save that row for later. clustered_id.append(ii) @@ -259,14 +263,15 @@ def cluster_from_mac(cluster: Dict[str,Any], IP: Dict[str,Any], Params: Dict[str return cluster, unclustered_IPu -def cluster_from_mac_IPm(cluster: Dict[str,Any], IPm: Dict[str,Any], Params: Dict[str,Any]) -> Dict[str,Any]: +def cluster_from_mac_IPm(cluster: Dict[str,Any], IPm: Dict[str,Any], + params: Dict[str,Any]) -> Dict[str,Any]: """ Cluster based on MAC if multiple poles exist for the model order Args: cluster (dict): Intermediate cluster IP (dict): Dictionary of data on inital points - Params (dict): Dictionary of algorithm parameters + params (dict): Dictionary of algorithm parameters Returns: cluster (dict): Intermediate cluster @@ -283,7 +288,7 @@ def cluster_from_mac_IPm(cluster: Dict[str,Any], IPm: Dict[str,Any], Params: Dic # Find the model orders with multiple poles pos = [] - for ii, idd in enumerate(set(row)): + for ii, idd in enumerate(set(row)): pos.append(np.argwhere(row==idd)) skip_id = [] @@ -294,7 +299,6 @@ def cluster_from_mac_IPm(cluster: Dict[str,Any], IPm: Dict[str,Any], Params: Dic ip_ms_0 = ip_ms[0,:] #Mode shape of the first pole else: ip_ms_0 = ip_ms #Mode shape of the first pole - i_ms = IPm['ms'][:] #Mode shape of the model orders with mutiple poles skip_id_before = skip_id.copy() @@ -307,9 +311,11 @@ def cluster_from_mac_IPm(cluster: Dict[str,Any], IPm: Dict[str,Any], Params: Dic pos_i = pos_i[:,0] for ii, id_row in enumerate(pos_i): - MAC[ii] = calculate_mac(ip_ms_0,i_ms[id_row]) #Calculate MAC between first pole of cluster and a pole in IPm + #Calculate MAC between first pole of cluster and a pole in IPm + MAC[ii] = calculate_mac(ip_ms_0,i_ms[id_row]) #If MAC is not satisfied - if MAC[ii] < Params['tMAC']: #Search for max across all mode shapes in cluster: + if MAC[ii] < params['tMAC']: + #Search for max across all mode shapes in cluster: #line 3 in algorithm MAC_list = [] for ms in ip_ms: @@ -317,7 +323,7 @@ def cluster_from_mac_IPm(cluster: Dict[str,Any], IPm: Dict[str,Any], Params: Dic MAC[ii] = max(MAC_list) #Find the mask for the poles that meets the MAC criteria - mask = MAC > Params['tMAC'] + mask = MAC > params['tMAC'] pos_MAC = np.argwhere(mask==True) #Get indicies #Formatting of the indicies @@ -346,9 +352,11 @@ def cluster_from_mac_IPm(cluster: Dict[str,Any], IPm: Dict[str,Any], Params: Dic cluster['cov_f'] = np.append(cluster['cov_f'],cov_f[ll]) cluster['d'] = np.append(cluster['d'],damping_ratios[ll]) cluster['cov_d'] = np.append(cluster['cov_d'],cov_d[ll]) - cluster['mode_shapes'] = np.vstack((cluster['mode_shapes'],np.array(mode_shapes[ll,:]))) + cluster['mode_shapes'] = np.vstack((cluster['mode_shapes'], + np.array(mode_shapes[ll,:]))) cluster['MAC'] = np.append(cluster['MAC'],MAC[pos_MAC[idx]]) - cluster['model_order'] = np.append(cluster['model_order'],Params['model_order']-row[ll]) + cluster['model_order'] = np.append(cluster['model_order'], + params['model_order']-row[ll]) cluster['row'] = np.append(cluster['row'],row[ll]) cluster['col'] = np.append(cluster['col'],col[ll]) @@ -362,9 +370,11 @@ def cluster_from_mac_IPm(cluster: Dict[str,Any], IPm: Dict[str,Any], Params: Dic cluster['cov_f'] = np.append(cluster['cov_f'],cov_f[ll]) cluster['d'] = np.append(cluster['d'],damping_ratios[ll]) cluster['cov_d'] = np.append(cluster['cov_d'],cov_d[ll]) - cluster['mode_shapes'] = np.vstack((cluster['mode_shapes'],np.array(mode_shapes[ll,:]))) + cluster['mode_shapes'] = np.vstack((cluster['mode_shapes'], + np.array(mode_shapes[ll,:]))) cluster['MAC'] = np.append(cluster['MAC'],MAC[pos_MAC[0]]) - cluster['model_order'] = np.append(cluster['model_order'],Params['model_order']-row[ll]) + cluster['model_order'] = np.append(cluster['model_order'], + params['model_order']-row[ll]) cluster['row'] = np.append(cluster['row'],row[ll]) cluster['col'] = np.append(cluster['col'],col[ll]) @@ -372,9 +382,9 @@ def cluster_from_mac_IPm(cluster: Dict[str,Any], IPm: Dict[str,Any], Params: Dic clustered_id = [] for r2 in cluster['row']: #For every entry in row cluster - unclustered_point = False for ii, r1 in enumerate(IPm['row']): #For every entry in row IPm - if r1 == r2: #If r1 is a entry of "row" in the cluster, then save that row for later. + #If r1 is a entry of "row" in the cluster, then save that row for later. + if r1 == r2: clustered_id.append(ii) all_id = np.array(list(range(len(IPm['row'])))) @@ -394,4 +404,4 @@ def cluster_from_mac_IPm(cluster: Dict[str,Any], IPm: Dict[str,Any], Params: Dic unclustered_IPm['row'] = IPm['row'][unclustered_id] unclustered_IPm['col'] = IPm['col'][unclustered_id] - return cluster, unclustered_IPm \ No newline at end of file + return cluster, unclustered_IPm diff --git a/src/methods/mode_clustering_functions/expand_cluster.py b/src/methods/mode_clustering_functions/expand_cluster.py index bf53060..607d8b5 100644 --- a/src/methods/mode_clustering_functions/expand_cluster.py +++ b/src/methods/mode_clustering_functions/expand_cluster.py @@ -1,15 +1,16 @@ -from typing import Any +from typing import Any, Dict import numpy as np from methods.mode_clustering_functions.create_cluster import cluster_creation +# pylint: disable=C0103 -def cluster_expansion(cluster: dict[str,Any], data: dict[str,Any], Params: dict[str,Any]) -> dict[str,Any]: +def cluster_expansion(cluster: Dict[str,Any], data: Dict[str,Any], params: Dict[str,Any]) -> Dict[str,Any]: """ Expand cluster based on minima and maxima bound Args: cluster (dict): Intermediate cluster data (dict): OMA points data - Params (dict): Dictionary of algorithm parameters + params (dict): Dictionary of algorithm parameters Returns: cluster (dict): Expanded cluster @@ -19,23 +20,28 @@ def cluster_expansion(cluster: dict[str,Any], data: dict[str,Any], Params: dict[ """ unClustered_frequencies = data['frequencies'] unClustered_damping = data['damping_ratios'] - freq_c = cluster['f'] cov_f = cluster['cov_f'] damp_c = cluster['d'] cov_d = cluster['cov_d'] - row = cluster['row'] - bound_multiplier = Params['bound_multiplier'] - + bound_multiplier = params['bound_multiplier'] + #Find min-max bounds of cluster - f_lower_bound = np.min(freq_c - bound_multiplier * np.sqrt(cov_f)) # Minimum of all points for frequencies - f_upper_bound = np.max(freq_c + bound_multiplier * np.sqrt(cov_f)) # Maximum of all points for frequencies - d_lower_bound = np.min(damp_c - bound_multiplier * np.sqrt(cov_d)) # Minimum of all points for damping - d_upper_bound = np.max(damp_c + bound_multiplier * np.sqrt(cov_d)) # Maximum of all points for damping + # Minimum of all points for frequencies + f_lower_bound = np.min(freq_c - bound_multiplier * np.sqrt(cov_f)) + # Maximum of all points for frequencies + f_upper_bound = np.max(freq_c + bound_multiplier * np.sqrt(cov_f)) + # Minimum of all points for damping + d_lower_bound = np.min(damp_c - bound_multiplier * np.sqrt(cov_d)) + # Maximum of all points for damping + d_upper_bound = np.max(damp_c + bound_multiplier * np.sqrt(cov_d)) #Mask of possible expanded poles - condition_mask = (unClustered_frequencies >= f_lower_bound) & (unClustered_frequencies <= f_upper_bound) & (unClustered_damping >= d_lower_bound) & (unClustered_damping <= d_upper_bound) + condition_mask = ((unClustered_frequencies >= f_lower_bound) + & (unClustered_frequencies <= f_upper_bound) + & (unClustered_damping >= d_lower_bound) + & (unClustered_damping <= d_upper_bound)) # Get indices satisfying the condition expanded_indices = np.argwhere(condition_mask) @@ -73,7 +79,7 @@ def cluster_expansion(cluster: dict[str,Any], data: dict[str,Any], Params: dict[ cluster_points['col'] = cluster_points['col'][indecies] #Check if these values can be clustered - cluster = cluster_creation(cluster_points,Params) + cluster = cluster_creation(cluster_points,params) if isinstance(cluster['f'],np.ndarray): if len(cluster['row']) != len(set(cluster['row'])): print("row_before",cluster_points['row']) diff --git a/src/methods/mode_clustering_functions/initialize_Ip.py b/src/methods/mode_clustering_functions/initialize_Ip.py index 5dc0dbb..f480cdc 100644 --- a/src/methods/mode_clustering_functions/initialize_Ip.py +++ b/src/methods/mode_clustering_functions/initialize_Ip.py @@ -1,7 +1,8 @@ -from typing import Any +from typing import Any, List, Dict import numpy as np +# pylint: disable=C0103 -def cluster_initial(ip: list[float], data: dict[str,Any], bound: float = 2) -> dict[str,Any]: +def cluster_initial(ip: List[float], data: Dict[str,Any], bound: float = 2) -> Dict[str,Any]: """ Find the initial cluster points @@ -19,18 +20,20 @@ def cluster_initial(ip: list[float], data: dict[str,Any], bound: float = 2) -> d ip_d = ip[2] ip_cov_d = ip[3] - # Confidence interval using the ±2*standard_deviation + # Confidence interval using the ±2*standard_deviation f_lower_bound = ip_f - bound * np.sqrt(ip_cov_f) f_upper_bound = ip_f + bound * np.sqrt(ip_cov_f) z_lower_bound = ip_d - bound * np.sqrt(ip_cov_d) z_upper_bound = ip_d + bound * np.sqrt(ip_cov_d) - frequencies = data['frequencies'] damping_ratios = data['damping_ratios'] # Find elements within the current limit that are still ungrouped - condition_mask = (frequencies >= f_lower_bound) & (frequencies <= f_upper_bound) & (damping_ratios >= z_lower_bound) & (damping_ratios <= z_upper_bound)# & ungrouped_mask + condition_mask = ((frequencies >= f_lower_bound) + & (frequencies <= f_upper_bound) + & (damping_ratios >= z_lower_bound) + & (damping_ratios <= z_upper_bound))# & ungrouped_mask indices = np.argwhere(condition_mask) # Get indices satisfying the condition #Generate the data for inital points @@ -43,4 +46,4 @@ def cluster_initial(ip: list[float], data: dict[str,Any], bound: float = 2) -> d initial_points['row'] = indices[:,0] initial_points['col'] = indices[:,1] - return initial_points \ No newline at end of file + return initial_points diff --git a/src/methods/mode_tracking.py b/src/methods/mode_tracking.py index ae3f661..ecac8b5 100644 --- a/src/methods/mode_tracking.py +++ b/src/methods/mode_tracking.py @@ -9,15 +9,15 @@ from functions.plot_clusters import plot_clusters # pylint: disable=C0103, W0603 -def track_clusters(cluster_dict: dict[str,Any], tracked_clusters: dict[str,Any], - params: dict[str,Any]) -> dict[str,Any]: +def track_clusters(cluster_dict: Dict[str,Any], tracked_clusters: Dict[str,Any], + params: Dict[str,Any]) -> Dict[str,Any]: """ Runs the mode tracking algorithm. Args: - cluster_dict (dict[str,Any]): Clusters from OMA + cluster_dict (Dict[str,Any]): Clusters from OMA Returns: - tracked_clusters (dict[str,Any]): Tracked clusters + tracked_clusters (Dict[str,Any]): Tracked clusters """ tracked_clusters = cluster_tracking(cluster_dict, tracked_clusters, params) return tracked_clusters @@ -35,15 +35,16 @@ def subscribe_and_track_clusters(config_path: str) -> Tuple[List[Dict], np.ndarr tracked_clusters (Dict[str,Any]]): Tracked clusters """ tracked_clusters = {} - sysid_output, clusters, median_frequencies = subscribe_and_cluster(config_path,PARAMS) + cluster_results, sysid_output, clusters, median_frequencies, timestamp = subscribe_and_cluster(config_path,PARAMS) + if sysid_output is not None: + tracked_clusters = track_clusters(clusters, tracked_clusters,PARAMS) + return sysid_output, clusters, tracked_clusters - print("Clustered frequencies", median_frequencies) - tracked_clusters = track_clusters(clusters, tracked_clusters,PARAMS) - - return sysid_output, clusters, tracked_clusters + else: + return None, None, None def live_mode_tracking(config_path: str, - plot: np.ndarray[bool] = np.array([1,1]) + plot: np.ndarray = np.array([1,1]) ) -> Tuple[List[Dict], np.ndarray, np.ndarray]: """ Subscribes to MQTT broker, receives one OMA message, runs mode tracking, plot results. Continue until stopped. @@ -65,21 +66,27 @@ def live_mode_tracking(config_path: str, while True: try: - sysid_output, clusters, median_frequencies = subscribe_and_cluster(config_path,PARAMS) + cluster_results, sysid_output, clusters, median_frequencies, timestamp = subscribe_and_cluster(config_path,PARAMS) + + if cluster_results == False: + plt.close() + break - print("Clustered frequencies", median_frequencies) - tracked_clusters = track_clusters(clusters, tracked_clusters,PARAMS) + if sysid_output is not None: + print("Clustered frequencies", median_frequencies) + tracked_clusters = track_clusters(clusters, tracked_clusters,PARAMS) - if plot[0] == 1: - fig_ax1 = plot_clusters(clusters,sysid_output,PARAMS,fig_ax=fig_ax1) - plt.show(block=False) - if plot[1] == 1: - fig_ax2 = plot_tracked_modes(tracked_clusters,PARAMS,fig_ax=fig_ax2,x_length=None) - plt.show(block=False) - sys.stdout.flush() + if plot[0] == 1: + fig_ax1 = plot_clusters(clusters,sysid_output,PARAMS,fig_ax=fig_ax1) + plt.show(block=False) + if plot[1] == 1: + fig_ax2 = plot_tracked_modes(tracked_clusters,PARAMS,fig_ax=fig_ax2,x_length=None) + plt.show(block=False) + sys.stdout.flush() except KeyboardInterrupt: print("Shutting down gracefully") plt.close() + break except Exception as e: print(f"Unexpected error: {e}") \ No newline at end of file diff --git a/src/methods/mode_tracking_functions/match_to_tracked_cluster.py b/src/methods/mode_tracking_functions/match_to_tracked_cluster.py index 5707510..e642d02 100644 --- a/src/methods/mode_tracking_functions/match_to_tracked_cluster.py +++ b/src/methods/mode_tracking_functions/match_to_tracked_cluster.py @@ -1,12 +1,18 @@ -from typing import Any +from typing import Any, Dict, List import numpy as np from functions.calculate_mac import calculate_mac +# pylint: disable=C0103 -def match_cluster_to_tracked_cluster(cluster_dict: dict[str,Any], tracked_clusters: dict[str,Any], Params: dict[str,Any], result_prev: dict[str,Any] = {},skip_cluster: list = [], skip_tracked_cluster: list = []) -> dict[str,Any]: +def match_cluster_to_tracked_cluster(cluster_dict: Dict[str,Any], tracked_clusters: Dict[str,Any], + params: Dict[str,Any], result_pairs_prev: Dict[str,Any] = {}, + skip_cluster: List = [], + skip_tracked_cluster: List = []) -> Dict[str,Any]: """ Match clusters to tracked clusters - The result dictionary consist of keys: cluster indecies, and values: indecies of tracked cluster to match with + The result dictionary consist of keys: cluster indecies, + and values: indecies of tracked cluster to match with + Example: Cluster 1 match with tracked cluster 2 Cluster 2 match with tracked cluster 1 @@ -16,19 +22,19 @@ def match_cluster_to_tracked_cluster(cluster_dict: dict[str,Any], tracked_cluste Args: cluster_dict (dict): Dictionary of clusters tracked_clusters (dict): Previously tracked clusters - Params (dict): tracking parameters + params (dict): tracking parameters result_prev (dict): Dictionary of previous match result - skip_cluster (list): List of clusters that have proven they are a optimal match with a tracked cluster - skip_tracked_cluster (list): List of tracked clusters that have an optimal match with a cluster + skip_cluster (list): List of clusters that are the optimal match with a tracked cluster + skip_tracked_cluster (list): List of tracked clusters are an optimal match with a cluster Returns: result (dict): Dictionary of matches """ - result = {} + result_pairs = {} for id, key in enumerate(cluster_dict): #Go through all clusters if id in skip_cluster: #If this cluster is already matched skip it - result[str(id)] = result_prev[str(id)] + result_pairs[str(id)] = result_pairs_prev[str(id)] continue #Get mode shapes @@ -37,113 +43,103 @@ def match_cluster_to_tracked_cluster(cluster_dict: dict[str,Any], tracked_cluste phi = cluster['mode_shapes'][0] phi_all = cluster['mode_shapes'] - Xres = [] MAC_list = [] - D_freq = [] - omega_t_list = [] + R_freq = [] MAC_max_list = [] MAC_avg_list = [] - for key in tracked_clusters: #Go through all tracked clusters. They are identified with keys which are integers from 0 and up to total number of clusters + for key in tracked_clusters: #Go through all tracked clusters. + #They are identified with keys which are integers from 0 up to total number of clusters if key == 'iteration': pass else: - tracked_cluster_list = tracked_clusters[key] #Accessing all cluster in a tracked cluster group - tracked_cluster = tracked_cluster_list[-1] #Accessing the last cluster for each tracked cluster group - omega_t = tracked_cluster['median_f'] #median freq of last cluster in tracked cluster group - omega_t_list.append(omega_t) - phi_t_all = tracked_cluster['mode_shapes'] #phi of last cluster in tracked cluster group - phi_t = phi_t_all[0] - - MAC_list.append(float(calculate_mac(phi_t, phi))) - - MACs = np.zeros((phi_all.shape[0],phi_t_all.shape[0])) - for ii, phi in enumerate(phi_all): - for jj, phi_t in enumerate(phi_t_all): - MAC = float(calculate_mac(phi_t, phi)) - MACs[ii,jj] = MAC #Compare the cluster with all tracked clusters + #Accessing all cluster in a tracked cluster group + tracked_cluster_list = tracked_clusters[key] + n_last_tracked_clusters = np.min((len(tracked_cluster_list),6)) + for ii in range(n_last_tracked_clusters): + tracked_cluster = tracked_cluster_list[-1*(ii+1)] + + #median freq of last cluster in tracked cluster group + omega_t = tracked_cluster['median_f'] + #phi of last cluster in tracked cluster group + phi_t_all = tracked_cluster['mode_shapes'] + + MAC_matrix = np.zeros((phi_all.shape[0],phi_t_all.shape[0])) + for ii, phi in enumerate(phi_all): + for jj, phi_t in enumerate(phi_t_all): + MAC = float(calculate_mac(phi_t, phi)) + #array to compare the cluster with all tracked clusters + MAC_matrix[ii,jj] = MAC + if np.max(MAC_matrix) > params['phi_cri']: + break if key in skip_tracked_cluster: MAC_avg = np.mean(0) MAC_max = np.max(0) MAC_max_list.append(0) MAC_avg_list.append(0) - D_freq.append(10**6) + R_freq.append(10**6) else: - MAC_avg = np.mean(MACs) - MAC_max = np.max(MACs) + MAC_avg = np.mean(MAC_matrix) + MAC_max = np.max(MAC_matrix) MAC_max_list.append(MAC_max) MAC_avg_list.append(MAC_avg) - D_freq.append(abs(omega_t-omega)/omega) - - itemindex1 = np.argwhere(np.array(MAC_max_list) > Params['phi_cri']) #Find where the cluster matches the tracked cluster regarding the MAC criteria - itemindex = np.argwhere(np.array(D_freq)[itemindex1[:,0]] < Params['freq_cri']) #Find where the cluster matches the tracked cluster regarding the MAC and frequency criteria + R_freq.append(abs(omega_t-omega)/omega_t) + + #Find where the cluster matches the tracked cluster regarding the MAC criteria + itemindex1 = np.argwhere(np.array(MAC_max_list) > params['phi_cri']) + #Find where the cluster matches the tracked cluster regarding the MAC and frequency criteria + itemindex = np.argwhere(np.array(R_freq)[itemindex1[:,0]] < params['freq_cri']) indicies = itemindex1[itemindex[:,0]] if len(indicies) > 1: #If two or more clusters combly with the mode shape criteria - Xres = [] - Xres_f = [] - Xres_MAC = [] - for nn in indicies: - pos = nn[0] - X = D_freq[pos]/MAC_max_list[pos] #Objective function - Xres.append(X) - Xres_f.append(D_freq[pos]) - Xres_MAC.append(MAC_max_list[pos]) - - if Xres != []: # One or more cluster(s) combly with the frequency criteria - pos1 = Xres.index(min(Xres)) #Find the cluster that is most likely - pos2 = Xres_MAC.index(max(Xres_MAC)) #Find the largest MAC - pos3 = Xres_f.index(min(Xres_f)) #Find the smallest frequency difference - - if len(Xres) > 1: #If more than one cluster comply with criteria - Xres_left = Xres.copy() - del Xres_left[pos1] - if type(Xres_left) == np.float64: - Xres_left = [Xres_left] - - Xres_MAC_left = Xres_MAC.copy() - del Xres_MAC_left[pos1] - if type(Xres_MAC_left) == np.float64: - Xres_MAC_left = [Xres_MAC_left] - - Xres_f_left = Xres_f.copy() - del Xres_f_left[pos1] - if type(Xres_f_left) == np.float64: - Xres_f_left = [Xres_f_left] - - pos1_2 = Xres_left.index(min(Xres_left)) #Find the cluster that is most likely - pos2_2 = Xres_MAC_left.index(max(Xres_MAC_left)) #Find the cluster that is most likely based on MAC - pos3_2 = Xres_f_left.index(min(Xres_f_left)) #Find the cluster that is most likely based on Freq - - if (pos1 == pos2) and (pos1 == pos3): #If one match on all three parameters: objective function, max MAC and frequency difference - pos = int(indicies[pos1][0]) - result[str(id)] = pos #group to a tracked cluster - - #Make different: abs(min(Xres_left)/min(Xres)) < Params['obj_cri'] = 2 - elif abs(min(Xres_left)-min(Xres)) < Params['obj_cri']: #If the objective function results are close - if (min(Xres_f) < Params['freq_cri']) and (min(Xres_f_left) < Params['freq_cri']): #If both frequency differences are close to the target cluster + X_list = [] + R_f_list = [] + MAC_list = [] + for pos in indicies[:,0]: + X = R_freq[pos]/MAC_max_list[pos] #Objective function + X_list.append(X) + R_f_list.append(R_freq[pos]) + MAC_list.append(MAC_max_list[pos]) + + pos1 = X_list.index(min(X_list)) #Find the cluster that is most likely + pos2 = MAC_list.index(max(MAC_list)) #Find the largest MAC + pos3 = R_f_list.index(min(R_f_list)) #Find the smallest frequency difference + #If one match on all three parameters: + if pos2 == pos3: + pos = int(indicies[pos1][0]) + result_pairs[str(id)] = pos #group to a tracked cluster + else: + X_list_left = X_list.copy() + del X_list_left[pos1] + if isinstance(X_list_left,float): + X_list_left = [X_list_left] + + MAC_list_left = MAC_list.copy() + del MAC_list_left[pos1] + if isinstance(MAC_list_left,float): + MAC_list_left = [MAC_list_left] + + #Find the cluster that is most likely based on MAC + pos2_2 = MAC_list_left.index(max(MAC_list_left)) + + #Make different: abs(min(X_list_left)/min(X_list)) < params['obj_cri'] = 2 + #If the objective function results are close + if abs(min(X_list_left)-min(X_list)) < params['obj_cri']: + #Cluster with the best MAC + if max(MAC_list_left) > max(MAC_list): pos = int(indicies[pos2_2][0]) #Match with best MAC - result[str(id)] = pos #group to a tracked cluster - elif (min(Xres_f) < Params['freq_cri']) and (min(Xres_f_left) > Params['freq_cri']): #If Xres_f is smaller than the threshold - pos = int(indicies[pos3][0]) #Match with lowest frequency difference - result[str(id)] = pos #group to a tracked cluster - elif (min(Xres_f) > Params['freq_cri']) and (min(Xres_f_left) < Params['freq_cri']): - pos = int(indicies[pos3_2][0]) #Match with lowest frequency difference - result[str(id)] = pos #group to a tracked cluster - else: #If none of the above choose the one with highest MAC - pos = int(indicies[pos2_2][0]) - result[str(id)] = pos #group to a tracked cluster - else: #If none of the above choose the one with lowest onjective function + result_pairs[str(id)] = pos #group to a tracked cluster + else: + pos = int(indicies[pos2][0]) #Match with best X + result_pairs[str(id)] = pos #group to a tracked cluster + else: #If none of the above choose the one with lowest opjective function pos = int(indicies[pos1][0]) - result[str(id)] = pos #group to a tracked cluster - - else: #No cluster comply with frequency criteria, so a new cluster is saved - result[str(id)] = "new" - + result_pairs[str(id)] = pos #group to a tracked cluster + elif len(indicies) == 1: #If one cluster combly with the mode shape criteria pos = int(indicies[0][0]) - result[str(id)] = pos #group to a tracked cluster + result_pairs[str(id)] = pos #group to a tracked cluster else: #Does not comply with mode shape criteria - result[str(id)] = "new" - - return result \ No newline at end of file + result_pairs[str(id)] = "new" + + return result_pairs diff --git a/src/methods/mode_tracking_functions/mode_tracking.py b/src/methods/mode_tracking_functions/mode_tracking.py index 361c3ac..8a0695f 100644 --- a/src/methods/mode_tracking_functions/mode_tracking.py +++ b/src/methods/mode_tracking_functions/mode_tracking.py @@ -1,10 +1,14 @@ -from typing import Any +from typing import Any, Dict import numpy as np -from methods.mode_tracking_functions.match_to_tracked_cluster import match_cluster_to_tracked_cluster -from methods.mode_tracking_functions.resolve_nonunique_matches import resolve_nonunique_matches +from methods.mode_tracking_functions.match_to_tracked_cluster import ( + match_cluster_to_tracked_cluster) +from methods.mode_tracking_functions.resolve_nonunique_matches import ( + resolve_nonunique_matches) +# pylint: disable=C0103 # JVM 22/10/2025 -def cluster_tracking(cluster_dict: dict[str,Any],tracked_clusters: dict[str,Any],Params: dict[str,Any]=None) -> dict[str,Any]: +def cluster_tracking(cluster_dict: Dict[str,Any],tracked_clusters: Dict[str,Any], + Params: Dict[str,Any] = None) -> Dict[str,Any]: """ Tracking of modes across experiments @@ -17,7 +21,7 @@ def cluster_tracking(cluster_dict: dict[str,Any],tracked_clusters: dict[str,Any] tracked_clusters (dict): Previously tracked clusters """ - if Params == None: + if Params is None: Params = {'phi_cri':0.8, 'freq_cri':0.2} @@ -28,47 +32,48 @@ def cluster_tracking(cluster_dict: dict[str,Any],tracked_clusters: dict[str,Any] t_list = [] t_length = [] - for key in tracked_clusters: #Go through all tracked clusters. They are identified with keys which are integers from 0 and up to total number of clusters + for key in tracked_clusters: #Go through all tracked clusters. + # They are identified with keys which are integers from 0 and up to total number of clusters if key == 'iteration': pass else: - tracked_cluster_list = tracked_clusters[key] #Accessing all cluster in a tracked cluster group + #Accessing all cluster in a tracked cluster group + tracked_cluster_list = tracked_clusters[key] t_length.append(len(tracked_cluster_list)) - tracked_cluster = tracked_cluster_list[-1] #Accessing the last cluster for each tracked cluster group + #Accessing the last cluster for each tracked cluster group + tracked_cluster = tracked_cluster_list[-1] #median freq of last cluster in tracked cluster group t_list.append(tracked_cluster['median_f']) # No tracked clusters yet? if not tracked_clusters: - first_track = 1 - else: - first_track = 0 - - if first_track == 1: - for id, key in enumerate(cluster_dict.keys()): + for idx, key in enumerate(cluster_dict.keys()): cluster = cluster_dict[key] cluster['id'] = 0 tracked_clusters['iteration'] = 0 - tracked_clusters[str(id)] = [cluster] + tracked_clusters[str(idx)] = [cluster] else: - iter = tracked_clusters['iteration'] + 1 - tracked_clusters['iteration'] = iter + iteration = tracked_clusters['iteration'] + 1 + tracked_clusters['iteration'] = iteration + + #Match clusters to tracked clusters + result = match_cluster_to_tracked_cluster(cluster_dict,tracked_clusters,Params) - result = match_cluster_to_tracked_cluster(cluster_dict,tracked_clusters,Params) #Match clusters to tracked clusters - - result_int = [] + result_int = [] for val in result.values(): #Get all non-"new" results - if type(val) == int: + if isinstance(val,int): result_int.append(val) - if len(result_int) == len(set(result_int)): #If all clusters match with a unique tracked cluster + #If all clusters match with a unique tracked cluster + if len(result_int) == len(set(result_int)): for ii, key in enumerate(cluster_dict.keys()): cluster = cluster_dict[key] pos = result[str(ii)] #Find pos in result dict - cluster['id'] = iter + cluster['id'] = iteration if pos == "new": #Add cluster as a new tracked cluster - new_key = len(tracked_clusters)-1 #-1 for "iteration", + 1 for next cluster and -1 for starting at 0 = -1 + new_key = len(tracked_clusters)-1 + # why -1? -1 for "iteration", + 1 for next cluster and -1 for starting at 0 = -1 tracked_clusters[str(new_key)] = [cluster] else: #Add cluster to an existing tracked cluster cluster_to_add_to = tracked_clusters[str(pos)] @@ -81,40 +86,52 @@ def cluster_tracking(cluster_dict: dict[str,Any],tracked_clusters: dict[str,Any] skip_cluster = [] while len(result_int) != len(set(result_int)): kk += 1 - if kk > 10: + if kk > 10: #Debug info: unique_match_debug_info(result,cluster_dict,t_list) - raise("Unresolved mode tracking") + raise RuntimeError("Unresolved mode tracking") for possible_match_id in set(result.values()): #Go through all unique values if possible_match_id == "new": #Do nothing if "new" pass + #Test if "new" is present. If so, then we must match with str instead of int. else: - test_if_str = np.argwhere(np.array(list(result.values())) == "new") #Test if "new" is present. If so, then we must match with str instead of int. - if len(test_if_str) > 0: - itemindex = np.argwhere(np.array(list(result.values())) == str(possible_match_id)) #Find the index of the unique cluster match - else: - itemindex = np.argwhere(np.array(list(result.values())) == possible_match_id) #Find the index of the unique cluster match - - if len(itemindex) > 1: #If multiple clusters match to the same tracked cluster - pos, result, cluster_index = resolve_nonunique_matches(possible_match_id, itemindex, result, cluster_dict, tracked_clusters) - skip_tracked_cluster.append(str(result[str(cluster_index[pos])])) #Skip the best tracked cluster which is matced with another cluster. - skip_cluster.append(cluster_index[pos]) #Skip the best tracked cluster which is matced with another cluster. - - result = match_cluster_to_tracked_cluster(cluster_dict,tracked_clusters,Params,result,skip_cluster,skip_tracked_cluster) #Match with tracked clusters, but skip the already matched. - + test_if_str = np.argwhere( + np.array(list(result.values())) == "new") + if len(test_if_str) > 0: #Find the index of the unique cluster match + itemindex = np.argwhere( + np.array(list(result.values())) == str(possible_match_id)) + else: #Find the index of the unique cluster match + itemindex = np.argwhere( + np.array(list(result.values())) == possible_match_id) + + #If multiple clusters match to the same tracked cluster + if len(itemindex) > 1: + pos, result, cluster_index = resolve_nonunique_matches( + possible_match_id, itemindex, result, cluster_dict, + tracked_clusters) + #Skip the best tracked cluster which is matced with another cluster. + skip_tracked_cluster.append(str(result[str(cluster_index[pos])])) + #Skip the best tracked cluster which is matced with another cluster. + skip_cluster.append(cluster_index[pos]) + #Match with tracked clusters, but skip the already matched. + result = match_cluster_to_tracked_cluster(cluster_dict, + tracked_clusters,Params, + result,skip_cluster, + skip_tracked_cluster) result_int = [] for val in result.values(): - if type(val) == int: + if isinstance(val,int): result_int.append(val) #Add the clusters to tracked clusters - for ii, key in enumerate(cluster_dict.keys()): + for ii, key in enumerate(cluster_dict.keys()): cluster = cluster_dict[key] pos = result[str(ii)] #Find pos in result dict - cluster['id'] = iter + cluster['id'] = iteration if pos == "new": - new_key = len(tracked_clusters)-1 #-1 for "iteration", + 1 for next cluster and -1 for starting at 0 = -1 + new_key = len(tracked_clusters)-1 + #Why -1? -1 for "iteration", + 1 for next cluster and -1 for starting at 0 = -1 tracked_clusters[str(new_key)] = [cluster] else: cluster_to_add_to = tracked_clusters[str(pos)] @@ -143,6 +160,6 @@ def unique_match_debug_info(result,cluster_dict,t_list): cluster = cluster_dict[key] pos = result[str(ii)] #Find pos in result dict if pos == "new": - print(cluster_dict[key]['median_f'],str(ii),pos) + print(cluster['median_f'],str(ii),pos) else: - print(cluster_dict[key]['median_f'],str(ii),pos,t_list[pos]) \ No newline at end of file + print(cluster['median_f'],str(ii),pos,t_list[pos]) diff --git a/src/methods/mode_tracking_functions/resolve_nonunique_matches.py b/src/methods/mode_tracking_functions/resolve_nonunique_matches.py index 7cbeea4..6a39bdc 100644 --- a/src/methods/mode_tracking_functions/resolve_nonunique_matches.py +++ b/src/methods/mode_tracking_functions/resolve_nonunique_matches.py @@ -1,10 +1,15 @@ -from typing import Any +from typing import Any, Dict, Tuple import numpy as np from functions.calculate_mac import calculate_mac +# pylint: disable=C0103 -def resolve_nonunique_matches(possible_match_id, itemindex, result, cluster_dict, tracked_clusters): +def resolve_nonunique_matches(possible_match_id: int, itemindex: np.ndarray[int], + result: Dict[str,Any],cluster_dict: Dict[str,Any], + tracked_clusters: Dict[str,Any] + ) -> Tuple[int, Dict[str, Any], np.ndarray[int]]: """ - Resolve if two clusters match with the same tracked cluster. Determine what match is the most optimal. + Resolve if two clusters match with the same tracked cluster. + Determine what match is the most optimal. Those clusters that does not have an optimal match, they are given the match result = "new" Example: @@ -14,40 +19,38 @@ def resolve_nonunique_matches(possible_match_id, itemindex, result, cluster_dict Args: possible_match_id (int): The index of tracked cluster itemindex (np.ndarray): The indecies of clusters that have the same match - result (dict): Dictionary of suggested matches - cluster_dict (dict): Dictionary of clusters - tracked_clusters (dict): Previously tracked clusters + result (Dict[str,Any]): Dictionary of suggested matches + cluster_dict (Dict[str,Any]): Dictionary of clusters + tracked_clusters (Dict[str,Any]): Previously tracked clusters Returns: pos (int): Value of cluster that have the most optimal match. - result (dict): Dictionary of re-done matches - cluster_index: The indecies of clusters that have the same match + result (Dict[str,Any]): Dictionary of re-done matches + cluster_index (np.ndarray): The indecies of clusters that have the same match """ mean_MAC = [] - keys = [str(y[0]) for y in itemindex.tolist()] #Make keys for dictionary based on indices in itemindex + #Make keys for dictionary based on indices in itemindex + keys = [str(y[0]) for y in itemindex.tolist()] for nn in itemindex: #Go through possible clusters match index cluster = cluster_dict[int(nn[0])] phi_all = cluster["mode_shapes"] #Find mode shapes in cluster - tracked_cluster_list = tracked_clusters[str(possible_match_id)] #Accessing all cluster in a tracked cluster group - tracked_cluster = tracked_cluster_list[-1] #Accessing the last cluster for each tracked cluster group + #Accessing all cluster in a tracked cluster group + tracked_cluster_list = tracked_clusters[str(possible_match_id)] + #Accessing the last cluster for each tracked cluster group + tracked_cluster = tracked_cluster_list[-1] phi_t_all = tracked_cluster['mode_shapes'] #Find mode shapes in tracked cluster - - #Make list of mode shapes have the same length, i.e. same number of poles - if len(phi_all) > len(phi_t_all): - phi_all = phi_all[0:len(phi_t_all)] - elif len(phi_all) < len(phi_t_all): - phi_t_all = phi_t_all[0:len(phi_all)] - else: #Equal length - pass - MAC_matrix = np.zeros((len(phi_all),len(phi_all))) #Initiate a matrix of MAC values + + MAC_matrix = np.zeros((len(phi_all),len(phi_t_all))) #Initiate a matrix of MAC values for ii, phi in enumerate(phi_all): for jj, phi_t in enumerate(phi_t_all): MAC_matrix[ii,jj] = calculate_mac(phi,phi_t) #Mac - mean_MAC.append(np.mean(MAC_matrix)) #Save the mean values of MAC from this cluster compared to the matched tracked cluster - pos = mean_MAC.index(max(mean_MAC)) #Find the index with higest mean MAC, i.e. the cluster that match best with the tracked cluster. - + #Save the mean values of MAC from this cluster compared to the matched tracked cluster + mean_MAC.append(np.mean(MAC_matrix)) + #Find the index with higest mean MAC, i.e. the cluster that match best with the tracked cluster. + pos = mean_MAC.index(max(mean_MAC)) + cluster_index = itemindex[:,0] for key in keys: @@ -55,4 +58,4 @@ def resolve_nonunique_matches(possible_match_id, itemindex, result, cluster_dict pass else: #Add the clusters with the worst match as a new cluster result[key] = "new" - return pos, result, cluster_index \ No newline at end of file + return pos, result, cluster_index diff --git a/src/methods/model_update.py b/src/methods/model_update.py index b6fa1ef..117b3fc 100644 --- a/src/methods/model_update.py +++ b/src/methods/model_update.py @@ -1,38 +1,27 @@ -import json +from datetime import datetime +import os import threading -from typing import Any, List, Dict, Optional +import json +from typing import Any, List, Dict, Optional, Tuple import numpy as np +import matplotlib.pyplot as plt import paho.mqtt.client as mqtt -from scipy.optimize import minimize -from scipy.linalg import eigh -from methods.packages.eval_yafem_model import eval_yafem_model -from methods.mode_update_functions import model_update -from methods.constants import X0, BOUNDS +from paho.mqtt.client import Client as MQTTClient +from data.comm.mqtt import (load_config, setup_mqtt_client, reconnect_client) +from functions.util import (convert_numpy_to_list, _convert_list_to_dict_or_array) +from methods.mode_clustering import (subscribe_and_cluster) +from methods.model_update_functions import model_update_func as MU +from methods.constants import PARAMS, MODEL_PARAMETERS +from functions.plot_model_update import (plot_parameters,plot_model_frequencies) # pylint: disable=C0103, W0603 -# Global threading event to wait for OMA data +# Global threading event to wait for cluster data result_ready = threading.Event() -oma_output_global = None # will store received OMA data inside callback - -def _convert_oma_output(obj: Any) -> Any: - """Recursively convert JSON structure into complex numbers and numpy arrays.""" - if isinstance(obj, dict): - if "real" in obj and "imag" in obj: - return complex(obj["real"], obj["imag"]) - return {k: _convert_oma_output(v) for k, v in obj.items()} - - if isinstance(obj, list): - try: - return np.array([_convert_oma_output(item) for item in obj]) - except Exception: - return [_convert_oma_output(item) for item in obj] - - return obj - +cluster_global = None # will store received cluster data inside callback def _on_connect(client: mqtt.Client, userdata: dict, flags: dict, reason_code: int, properties: mqtt.Properties) -> None: """Callback when MQTT client connects.""" - if reason_code == 0: + if reason_code == 0: print("Connected to MQTT broker.") client.subscribe(userdata["topic"], qos=userdata["qos"]) print(f"Subscribed to topic: {userdata['topic']}") @@ -42,74 +31,226 @@ def _on_connect(client: mqtt.Client, userdata: dict, flags: dict, reason_code: i def _on_message(_client: mqtt.Client, _userdata: dict, msg: mqtt.MQTTMessage) -> None: """Callback when a message is received.""" - global oma_output_global + global cluster_global + global timestamp_global print(f"Message received on topic: {msg.topic}") try: raw = json.loads(msg.payload.decode("utf-8")) - oma_output = _convert_oma_output(raw["OMA_output"]) + clusters = _convert_list_to_dict_or_array(raw["cluster_dictionary"]) timestamp = raw["timestamp"] - print(f"Received OMA data at timestamp: {timestamp}") - oma_output_global = oma_output + print(f"Received cluster data at timestamp: {timestamp}") + cluster_global = clusters + timestamp_global = timestamp result_ready.set() + except Exception as e: - print(f"Error processing OMA message: {e}") + print(f"Error processing sysid message: {e}") + +def subscribe_cluster_results(config_path) -> Optional[Tuple[datetime, Dict[str,any]]]: + global cluster_global + global timestamp_global + + cluster_global = None # Reset in case old data is present + result_ready.clear() + + config = load_config(config_path) + mqtt_client, selected_topic = setup_mqtt_client(config["mode_cluster"], topic_index=0) + + mqtt_client.user_data_set({"topic": selected_topic, "qos": 0}) + mqtt_client.on_connect = _on_connect + mqtt_client.on_message = _on_message + mqtt_client.connect(config["mode_cluster"]["host"], config["mode_cluster"]["port"], keepalive=60) + mqtt_client.loop_start() + print("Waiting for mode clustering data...") + + while True: + try: + result_ready.wait() # Wait until message arrives + mqtt_client.loop_stop() + mqtt_client.disconnect() + if cluster_global is None: + raise RuntimeError("Failed to receive cluster data.") + clusters = cluster_global + timestamp = timestamp_global + print(f"Cluster data received at {timestamp}. Running model update...") -# pylint: disable=R0914 -def run_model_update(cleaned_values: List[Dict]) -> Optional[Dict[str, Any]]: - """ - Runs model updating based on cleaned OMA clusters. + return timestamp, clusters - Args: - cleaned_values (List[Dict]): Cleaned cluster results. + except KeyboardInterrupt: + print("Shutting down gracefully") + mqtt_client.loop_stop() + mqtt_client.disconnect() + break + except Exception as e: + print(f"Unexpected error: {e}") + + return None, None - Returns: - Updated model details or None if error. - """ - comb = {'cluster': cleaned_values} + +def publish_model_parameters(publish_client,publish_topic,timestamp,model_parameters): + #Publish updated model + print(f"Timestamp: {timestamp}") + payload = { + "timestamp": timestamp, + "model_parameters": convert_numpy_to_list(model_parameters) + } try: - res = minimize(lambda x: model_update.par_est(x, comb), - X0, bounds=BOUNDS, options={'maxiter': 1000}) - X = res.x - print(f'Updated parameters: {X}') - - pars_updated = {'k': X[0], 'Lab': X[1]} - omegaMU, phi, PhiMU, myModel = eval_yafem_model(pars_updated) - print("\nomegaMU:",omegaMU) - print("\nphi:",phi) - print("\nPhiMU:",PhiMU) - - M = myModel.M.todense() - K = myModel.K.todense() - - eigenvalues, eigenvectors = eigh(K, M) - omegaN = np.sqrt(eigenvalues) - omegaN_pi = omegaN / (2 * np.pi) - - dd = np.sqrt(np.diag(eigenvectors.T @ M @ eigenvectors)) - aa = eigenvectors @ np.diag(1.0 / dd) - - zeta = np.zeros(len(omegaN)) - zeta_medians = np.array([np.median(cluster['z_values']) for cluster in cleaned_values]) - zeta[:len(zeta_medians)] = zeta_medians - - Cmodal = np.diag(2 * zeta * omegaN) - C = np.linalg.inv(aa).T @ Cmodal @ np.linalg.inv(aa) - system_updated = { - "M": M, - "K": K, - "C": C - } - return { - 'optimized_parameters': X, - 'omegaN_rad': omegaN, - 'omegaN_Hz': omegaN_pi, - 'mode_shapes': aa, - 'damping_matrix': C, - 'pars_updated': pars_updated, - 'System_updated': system_updated - } - - except ValueError as e: - print(f"Skipping model updating due to error: {e}") + message = json.dumps(payload) + + reconnect_succes = reconnect_client(publish_client) + + publish_client.publish(publish_topic, message, qos=1) + print(f"[{timestamp}] Published model parameters to {publish_topic}") + except Exception as e: + print(f"\nFailed to publish model parameters: {e}") + +def estimate_updated_model(cluster_dict: Dict[str,Any], model_parameters: Dict[str,Any], params: Dict[str,Any]) -> Optional[Tuple[np.ndarray[float], List[float], Dict[str,Any]]]: + try: + X, omegaMU, updated_model_parameters = MU.update_model(cluster_dict, model_parameters, params['pars_to_update'], params) + model_parameters = updated_model_parameters + + print("Model frequencies:",omegaMU,"[Hz]") + print("Updated parameters are:") + for ii, name in enumerate(params['pars_to_update']): + print(name+":",X[ii]) + return (X, omegaMU, model_parameters) + except: return None + +def save_model_parameters(config_path: str, timestamp: str, model_parameters: Dict[str,Any]) -> None: + config = load_config(config_path) + + # Ensure output directory exists + os.makedirs("src/methods/packages/models/beam_parameters", exist_ok=True) + + # Thread-safe file locks + file_locks = {topic: threading.Lock() for topic in config["model_update"]["TopicsToSubscribe"]} + + record = { + "timestamp": timestamp, + "parameters": convert_numpy_to_list(model_parameters) + } + file_path = "src/methods/packages/models/beam_parameters/beam_pars.jsonl" + with file_locks["cpsens/d8-3a-dd-37-d2-7e/3050-A-060_sn_106209/1/acc/model_update/data"]: + with open(file_path, "a", encoding="utf-8") as f: + f.write(json.dumps(record) + "\n") + + print("Model parameters saved to:",file_path) + +def load_model_parameters(config_path) -> None: + RECORDINGS_DIR = "src/methods/packages/models/beam_parameters" + fname = "beam_pars.jsonl" + path = os.path.join(RECORDINGS_DIR, fname) + if not os.path.exists(path): + print(f"File not found: {path}") + else: + with open(path, 'r') as json_file: + data = json.loads(json_file.readlines()[-1]) + timestamp = data['timestamp'] + model_parameters = data['parameters'] + print("Model parameters loaded succesfully from:", timestamp) + return timestamp, model_parameters + + +def live_model_update_with_remote_sysid(config_path: str) -> None: + model_parameters = MODEL_PARAMETERS + fig_ax1 = None + fig_ax2 = None + while True: + cluster_results, sysid_output, clusters, median_frequencies, timestamp = subscribe_and_cluster(config_path,PARAMS) + + if cluster_results: + try: + timestamp_last_model, model_parameters = load_model_parameters(config_path) + except: + print('Could not find previous model data') + + update_results = estimate_updated_model(clusters, model_parameters, PARAMS) + + if update_results is not None: + X, omegaMU, model_parameters = update_results + + save_model_parameters(config_path,timestamp,model_parameters) + + fig_ax1 = plot_parameters(model_parameters, PARAMS['pars_to_update'], fig_ax=fig_ax1) + plt.show(block=False) + + fig_ax2 = plot_model_frequencies(omegaMU,fig_ax=fig_ax2) + plt.show(block=False) + else: + print("Shutting down model updating") + plt.close() + break + +def live_model_update_with_remote_clustering(config_path: str) -> None: + model_parameters = MODEL_PARAMETERS + fig_ax1 = None + fig_ax2 = None + + while True: + timestamp, clusters = subscribe_cluster_results(config_path) + + if clusters: + try: + timestamp_last_model, model_parameters = load_model_parameters(config_path) + except: + print('Could not find previous model data') + + try: + update_results = estimate_updated_model(clusters, model_parameters, PARAMS) + + if update_results is not None: + X, omegaMU, model_parameters = update_results + + save_model_parameters(config_path,timestamp,model_parameters) + + fig_ax1 = plot_parameters(model_parameters, PARAMS['pars_to_update'],fig_ax=fig_ax1) + plt.show(block=False) + + fig_ax2 = plot_model_frequencies(omegaMU,fig_ax=fig_ax2) + plt.show(block=False) + + except KeyboardInterrupt: + print("Shutting down modelupdating") + plt.close() + break + except Exception as e: + print(f"Unexpected error: {e}") + + +def live_model_update_with_remote_clustering_and_publish(config_path: str, publish_client: MQTTClient, publish_topic: str) -> None: + model_parameters = MODEL_PARAMETERS + fig_ax1 = None + fig_ax2 = None + + while True: + timestamp, clusters = subscribe_cluster_results(config_path) + + if clusters: + try: + timestamp_last_model, model_parameters = load_model_parameters(config_path) + except: + print('Could not find previous model data') + + try: + update_results = estimate_updated_model(clusters, model_parameters, PARAMS) + + if update_results is not None: + X, omegaMU, model_parameters = update_results + + save_model_parameters(config_path,timestamp,model_parameters) + publish_model_parameters(publish_client,publish_topic,timestamp,model_parameters) + + fig_ax1 = plot_parameters(model_parameters, PARAMS['pars_to_update'],fig_ax=fig_ax1) + plt.show(block=False) + + fig_ax2 = plot_model_frequencies(omegaMU,fig_ax=fig_ax2) + plt.show(block=False) + + except KeyboardInterrupt: + print("Shutting down modelupdating") + plt.close() + break + except Exception as e: + print(f"Unexpected error: {e}") diff --git a/src/methods/model_update_functions/__init__.py b/src/methods/model_update_functions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/methods/model_update_functions/mode_pairing.py b/src/methods/model_update_functions/mode_pairing.py new file mode 100644 index 0000000..052a838 --- /dev/null +++ b/src/methods/model_update_functions/mode_pairing.py @@ -0,0 +1,168 @@ +from typing import Dict, Any, Tuple +import numpy as np +from functions.calculate_mac import calculate_mac +# pylint: disable=C0103 + +def pair_modes(model_freq: np.ndarray[float], model_mode_shapes: np.ndarray[float], + cluster_dict: Dict[str,Any], Params) -> Tuple[np.ndarray, + np.ndarray,np.ndarray,np.ndarray]: + """ + Args: + model_freq (np.ndarray[float]): Model frequencies in Hz + model_mode_shapes (np.ndarray[float]): Model mode shape + cluster_dict (Dict[str,Any]): Dictionary of clusters + Params: Update parameters + + Returns: + paired_c_freq (): Paired cluster median frequencies + paired_c_mode_shapes (): Paired cluster mode shapes + paired_model_freq (): Paired model median frequencies + paried_model_mode_shapes (): Paired model mode shapes + + JVM: 03/11/2025 + + """ + #Define number of sensors + sensors = model_mode_shapes.shape[0] + + # Calculate beta (highest MAC based pairing) and tau (average MAC based pairing) + mode_count = model_mode_shapes.shape[1] # Number of modes in PhiM + + # Initialize matrices to store MAC values + # Highest MAC for each mode across all dictionaries + highest_MAC = np.zeros((len(cluster_dict),mode_count)) + # Average MAC for each mode across all dictionaries + average_MAC = np.zeros((len(cluster_dict),mode_count)) + + # Dictionary index with highest MAC for each mode + highest_MAC_dict_idx = np.zeros(len(cluster_dict), dtype=int) + + # Loop through each mode of PhiM + median_frequencies = [] + closest_freq_id = [] + for i, key in enumerate(cluster_dict): + + cluster = cluster_dict[key] + mode_shape = cluster['mode_shapes'] # Mode shapes in current dictionary + m_f = cluster['median_f'] + median_frequencies.append(m_f) + # Step 1: Frequency-based pairing (alfa) + closest_freq_id.append(int(np.argmin(np.abs(model_freq - m_f)))) + + for j in range(mode_count): + if model_freq[j] < 2*m_f: + # Track the highest MAC for current mode of PhiM + max_mac_for_mode = -1 # Track the highest MAC for this mode + mac_per_mode = [] + for k in range(mode_shape.shape[0]): + current_MAC = calculate_mac(mode_shape[k, :].T, model_mode_shapes[:,j]) + highest_MAC[i, j] = max(highest_MAC[i, j], current_MAC) + mac_per_mode.append(current_MAC) + max_mac_for_mode = max(max_mac_for_mode, current_MAC) + + # Track the dictionary with the highest MAC for the current mode + if highest_MAC[i, j] == max_mac_for_mode: + highest_MAC_dict_idx[i] = j # paremeter beta + + # Calculate the average MAC for the current mode in the current dictionary + # Calculate the average MAC inside the dictionary + avg_mac = np.mean(mac_per_mode) + # Store the average MAC for the current mode in the current dictionary + average_MAC[i, j] = avg_mac + + MAC_THRESHOLD = Params['tMAC_MU'] + paired_c_freq = [] + paired_c_mode_shapes = np.zeros((sensors,1)) + paired_model_freq = [] + paried_model_mode_shapes = np.zeros((1,sensors)) + MAC_max_list = [] + Dm_f_list = [] + id_model_list = [] + for ii, key in enumerate(cluster_dict): #Iterate over all clusters + cluster = cluster_dict[key] + + # Find the idx in the MAC array with higest max and average. + id_high_MAC = np.argmax(highest_MAC[ii,:]) + id_avg_MAC = np.argmax(average_MAC[ii,:]) + id_freq = closest_freq_id[ii] #The idx of the best frequency match + + id_model = [] + if max(average_MAC[ii,:]) > MAC_THRESHOLD: #If the MAC value is above the threshold + #At least two are similar idx must be present across the three different parameters, + # max(MAC), avg(MAC) and min(D_freq) + if (id_high_MAC == id_avg_MAC) or (id_avg_MAC == id_freq) or (id_high_MAC == id_freq): + id_model = int(id_high_MAC) #What is the model idx, what is a match/pair + + if id_high_MAC in id_model_list: + #If a pairing is already made, then check what is best. + indices = int(np.argwhere(id_model_list == id_high_MAC)) + + for idx, ms in enumerate(cluster['mode_shapes']): #Iterate over all mode shapes + MAC = calculate_mac(ms.T, model_mode_shapes[:,id_model]) #Calculate MAC + if MAC > MAC_max: #Find the max MAC for the possible other pairing + MAC_max = MAC + MAC_max_id = idx + + MAC_previous = MAC_max_list[indices] #Previous MAC pairing + Dm_f_list_previous = Dm_f_list[indices] #Previous pairing difference in frequency + + #The new frequency differences for the new possible pairing. + Dm_f = model_freq[id_model] - cluster['median_f'] + + #If the new pairing is better in terms of both MAC and frequency. + if (MAC_max > MAC_previous) and (Dm_f_list_previous > Dm_f): + # print("Replace prevoius pairing") + replace_id = indices + id_model_list[replace_id] = id_model + + paired_c_freq[replace_id] = cluster['median_f'] + paired_model_freq[replace_id] = model_freq[id_model] + + Dm_f_list[replace_id] = Dm_f + MAC_max_list[replace_id] = MAC_max + paried_model_mode_shapes[:,replace_id] = model_mode_shapes[:,id_model] + paired_c_mode_shapes[:,replace_id] = cluster['mode_shapes'][MAC_max_id,:] + + + else: #If this is a new pairing + #Add information to paring + id_model_list.append(id_model) + paired_c_freq.append(cluster['median_f']) + paired_model_freq.append(model_freq[id_model]) + + Dm_f_list.append(model_freq[id_model]-cluster['median_f']) + + #Mode shape of paried model mode + if np.sum(paried_model_mode_shapes) == 0: #If no paried mode shapes have been done before + paried_model_mode_shapes = model_mode_shapes[:,id_model].reshape(sensors,1) + else: + paried_model_mode_shapes = np.append(paried_model_mode_shapes, + model_mode_shapes[:,id_model].reshape(sensors,1),axis=1) + + MAC_max = -1 #Insert the MAC value into the paring information + for idx, ms in enumerate(cluster['mode_shapes']): + MAC = calculate_mac(ms.T, model_mode_shapes[:,id_model]) + if MAC > MAC_max: + MAC_max = MAC + MAC_max_id = idx + MAC_max_list.append(MAC_max) + #Mode shape of paried cluster + if np.sum(paired_c_mode_shapes) == 0:#If no paried mode shapes have been done before + paired_c_mode_shapes = cluster['mode_shapes'][MAC_max_id,:].reshape(sensors,1) + else: + paired_c_mode_shapes = np.append(paired_c_mode_shapes, + cluster['mode_shapes'][MAC_max_id,:].reshape(sensors,1),axis=1) + + else: + print("Cluster",key,cluster['median_f'] + ,"is not matched. Reason: similar match idx criteria") + else: + print("Cluster",key,cluster['median_f'] + ,"is not matched. Reason: MAC threshold") + + + + paired_c_freq = np.array(paired_c_freq) + paired_model_freq = np.array(paired_model_freq) + + return paired_c_freq, paired_c_mode_shapes, paired_model_freq, paried_model_mode_shapes diff --git a/src/methods/model_update_functions/model_update_func.py b/src/methods/model_update_functions/model_update_func.py new file mode 100644 index 0000000..51f35db --- /dev/null +++ b/src/methods/model_update_functions/model_update_func.py @@ -0,0 +1,104 @@ +from typing import Dict, Any, Optional, List +import numpy as np +from scipy.optimize import minimize +from methods.packages.models import beam_yafem_model as beam_new +from methods.model_update_functions.mode_pairing import pair_modes +# pylint: disable=C0103 + +def update_model(cluster_dict: Dict[str,Any], model_pars: Dict[str,Any], + pars_to_update: List[str], Params: Dict[str,Any]) -> Optional[Any]: + """ + Estimate updated model parameters + + Args: + cluster_dict (Dict[str,Any]): Dictionary of clustered modes + model_parameters (Dict[str,Any]): Model parameters (YaFEM) + parameters_to_update (List[str]): String of keys to update in model_parameters + Params (Dict[str,Any]): Update parameters + + Returns: + X (np.ndarray[float]): Updated values + omegaMU (np.ndarray[float]): Eigenfrequencies in Hertz of the updated model + updated_model_parameters (Dict[str,Any]): Updated model parameters + + """ + X = None + pars_to_update = Params['pars_to_update'] + try: + res = minimize(lambda x: estimate_parameters(x, cluster_dict, model_pars, + pars_to_update, Params), + Params['MU_start_values'], bounds=Params['MU_bounds'], + options={'maxiter': 1000}) + # Get the optimized parameter values + X = res.x + print(f'Updated values: {X}') + + # Updated model parameter + idx = 0 + for key in model_pars: + if str(key) in pars_to_update: + model_pars[key] = X[idx] + idx += 1 + updated_model_parameters = model_pars + omegaMU, _, __, ___ = beam_new.eval_yafem_model(updated_model_parameters) + + except ValueError as e: + print(f"Skipping model updating due to error: {e}") + + if X is not None: + return X, omegaMU, updated_model_parameters + return None, None, None + +def estimate_parameters(theta_star: List[float], cluster_dict: Dict[str,Any], + model_parameters: Dict[str,Any], + parameters_to_update: List[str],Params: Dict[str,Any]) -> float: + """ + Estimate updated parameters and return the objective function result + + Args: + theta_star (np.ndarray[float]): The parameters to update + cluster_dict (Dict[str,Any]): Dictionary of clustered modes + model_parameters (Dict[str,Any]): Model parameters (YaFEM) + parameters_to_update (List[str]): String of keys to update in model_parameters + Params (Dict[str,Any]): Update parameters + + Returns: + X (float): Resulting value from objective function + + Raises: + ValueError: + The number of updating parameters more than than the number of features. + One should re-try after reducing the number of updating parameters + + """ + idx = 0 + for key in model_parameters: + if str(key) in parameters_to_update: + model_parameters[key] = theta_star[idx] + idx += 1 + # Call FE solver to get model frequencies and mode shapes + omegaM, _, PhiM, __ = beam_new.eval_yafem_model(model_parameters) + + # Mode Pairing Start + (paired_frequencies, paired_mode_shapes, omegaM, PhiM + ) = pair_modes(omegaM, PhiM, cluster_dict, Params) + omegaM = omegaM.reshape(paired_frequencies.shape) + + # Error message if the number of updating parameters + # are more than double of the paired frequencies + if len(theta_star) > 2 * len(paired_frequencies): + raise ValueError("The problem becomes undetermined." \ + " The number of updated parameters should not be more than the number of features") + + # Compute MAC + MACn = np.abs(np.diag(np.conj(paired_mode_shapes).T @ PhiM))**2 + MACd = np.diag(np.conj(paired_mode_shapes).T @ + paired_mode_shapes) * np.diag(np.conj(PhiM).T @ PhiM) + MAC = MACn / MACd + + # Objective function + resOM = (omegaM - paired_frequencies)/omegaM + resPhi = MAC + X = np.dot(resOM.T, resOM) + 1 / np.dot(resPhi.T, resPhi) + + return np.real(X) diff --git a/src/methods/packages/eval_yafem_model.py b/src/methods/packages/eval_yafem_model.py deleted file mode 100644 index 3f42745..0000000 --- a/src/methods/packages/eval_yafem_model.py +++ /dev/null @@ -1,150 +0,0 @@ -import numpy as np -from yafem import nodes -from yafem import model -from yafem.elem import beam2d -from yafem.elem import MCK - -def eval_yafem_model(pars=None): - if pars is None: pars = {} - pars.setdefault('b' ,29e-3) # [m] width of the beam - pars.setdefault('h' ,1e-3) # [m] heigh of the beam - pars.setdefault('E' ,210e9) # [Pa] youngs modulus - pars.setdefault('rho',7850) # [kg/m3] density - pars.setdefault('L' ,0.530) # [m] total length of the beam - pars.setdefault('Lab',0.423) # [m] total length of the beam - pars.setdefault('l0' ,0.067) # [m] distance of cantileveredness - pars.setdefault('l1' ,0.030) # [m] distance to end of beam - pars.setdefault('l2' ,0.135) # [m] distance to second sensor (mass) - pars.setdefault('ma' ,4.8e-3) # [kg] mass - pars.setdefault('m' ,4.8e-3) # [kg] mass - pars.setdefault('k' ,3.5e3) # stiffness - pars.setdefault('dofs_sel',np.array([1,1])) - pars.setdefault('modes' ,3) - - L = pars['L'] - Lab = pars['Lab'] - l0 = pars['l0'] - l1 = pars['l1'] - l2 = pars['l2'] - A = pars['b'] * pars['h'] - I = pars['b'] * pars['h']**3/12 - E = pars['E'] - rho = pars['rho'] - k = pars['k'] - ma = pars['ma'] - m = pars['m'] - dofs_sel = pars['dofs_sel'] - modes = pars['modes'] - - # nodal parameters - nodes_pars = {} - nodes_pars['nodal_data'] = np.array([[1,0.0,0.0 ,0.0], - [2,0.0,L-Lab-l0,0.0], # support 1 - [3,0.0,L-Lab ,0.0], # support 2 - [4,0.0,L-l1-l2 ,0.0], # acc 1 - [5,0.0,L-l1 ,0.0], # acc 2 - [6,0.0,L ,0.0], # tip mass - ]) - - # node object - myNodes = nodes(nodes_pars) - - #%% Element object - - # accelerometers - acc_pars = {} - acc_pars['M'] = np.array([[ma,0],[0,ma]]) - acc_pars['K'] = np.zeros((2,2)) - acc_pars['dofs'] = np.array([[4,1],[5,1]]) - mass = MCK(myNodes,acc_pars) - - # tip mass - mass_pars = {} - mass_pars['M'] = np.array([[m,0,0],[0,m,0],[0,0,m]]) - mass_pars['K'] = np.zeros((3,3)) - mass_pars['dofs'] = np.array([[6,1],[6,2],[6,3]]) - mass_tip = MCK(myNodes,mass_pars) - - # springs - spring1_pars = {} - spring1_pars['K'] = np.array([[k]]) - spring1_pars['dofs'] = np.array([[2,3]]) - spring1 = MCK(myNodes,spring1_pars) - - # springs - spring2_pars = {} - spring2_pars['K'] = np.array([[k]]) - spring2_pars['dofs'] = np.array([[3,3]]) - spring2 = MCK(myNodes,spring2_pars) - - beam2d1_pars = {} - beam2d1_pars['E'] = E - beam2d1_pars['rho'] = rho - beam2d1_pars['A'] = A - beam2d1_pars['I'] = I - beam2d1_pars['nodal_labels'] = np.array([1,2]) - beam2d1 = beam2d(myNodes,beam2d1_pars) - - beam2d2_pars = {} - beam2d2_pars['E'] = E - beam2d2_pars['rho'] = rho - beam2d2_pars['A'] = A - beam2d2_pars['I'] = I - beam2d2_pars['nodal_labels'] = np.array([2,3]) - beam2d2 = beam2d(myNodes,beam2d2_pars) - - beam2d3_pars = {} - beam2d3_pars['E'] = E - beam2d3_pars['rho'] = rho - beam2d3_pars['A'] = A - beam2d3_pars['I'] = I - beam2d3_pars['nodal_labels'] = np.array([3,4]) - beam2d3 = beam2d(myNodes,beam2d3_pars) - - beam2d4_pars = {} - beam2d4_pars['E'] = E - beam2d4_pars['rho'] = rho - beam2d4_pars['A'] = A - beam2d4_pars['I'] = I - beam2d4_pars['nodal_labels'] = np.array([4,5]) - beam2d4 = beam2d(myNodes,beam2d4_pars) - - beam2d5_pars = {} - beam2d5_pars['E'] = E - beam2d5_pars['rho'] = rho - beam2d5_pars['A'] = A - beam2d5_pars['I'] = I - beam2d5_pars['nodal_labels'] = np.array([5,6]) - beam2d5 = beam2d(myNodes,beam2d5_pars) - - # list of all elements - myElements = [mass, - mass_tip, - spring1, - spring2, - beam2d1, - beam2d2, - beam2d3, - beam2d4, - beam2d5, - ] - #%% model parameters - model_pars = {} - model_pars['dofs_c'] = np.array([[2,1], - [2,2], - [3,1], - [3,2], - ]) - model_pars['damping_model'] = 'proportional' - model_pars['alpha'] = 2.0 - model_pars['beta'] = 0.1 - - # modal analysis - myModel = model(myNodes, myElements,model_pars) - - # modal analysis - omega, phi = myModel.compute_modal(modes) - idxs_sel = myModel.find_dofs(dofs_sel) - phi_sel = phi[idxs_sel,:] - - return omega, phi, phi_sel, myModel diff --git a/src/methods/packages/models/__init__.py b/src/methods/packages/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/methods/packages/models/beam_parameters/beam_pars.jsonl b/src/methods/packages/models/beam_parameters/beam_pars.jsonl new file mode 100644 index 0000000..be5c8e4 --- /dev/null +++ b/src/methods/packages/models/beam_parameters/beam_pars.jsonl @@ -0,0 +1,721 @@ +{"timestamp": "2025-11-10T21:22:01.859875", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 12.030711135925346, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T21:23:01.956628", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 11.78816953165851, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T21:24:01.954229", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 7.459104689370817, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T21:25:01.852702", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 30.839556101088053, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T21:47:01.923007", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 7.433851233791906, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T21:48:01.861140", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 16.54996867422018, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T21:49:01.934173", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.777076316705873, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:08:01.870257", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 12.594721818524727, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:20:01.924219", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 32.895219946096816, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:21:01.869620", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 4.657598559341347, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:22:01.933608", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 12.48393198751839, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:25:01.894645", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 21.57250653623606, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:25:01.894645", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 21.459974101262215, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:25:01.894645", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 22.152665597814977, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:25:01.894645", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 22.066090854960663, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:25:01.894645", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 21.600533257115547, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:25:01.894645", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 21.83145247572867, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:25:01.894645", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 21.880127684418767, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:25:01.894645", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 21.660766638528365, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:25:01.894645", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 21.699733220610035, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:25:01.894645", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 21.93402458453024, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:25:01.894645", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 21.54863610398129, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:28:01.912552", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 15.278611949629742, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:29:01.919069", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 21.36645856523477, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:30:01.917250", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 9.998775046583335, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.295147540253186, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.957119242766836, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.447597349349042, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.105796137631684, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.936954616866307, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.972043203499634, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.341098903271146, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.18308765285314, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.244965637301975, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.159462749350658, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.405208335991324, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.643864525338406, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.512847612608057, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.089129039287355, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.999050579721521, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 12.94303482651752, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.471584734426141, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.405124815417272, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.043707126961806, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.532725721516675, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.924394975514543, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.830048090027688, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.31322190943955, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.148577704879273, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.218629518537204, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:36:01.994329", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 11.746533740205486, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.41574143948244, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.927331973273043, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.496044262929978, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.99638750507572, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.890982692316337, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.823870966145874, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:37:01.980233", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 21.634419518638342, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.922630805280493, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.990292903408193, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.760669758163978, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.608272218154577, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.967756050575929, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.014345934203678, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.153787836261351, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.13821155266451, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:38:01.938552", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.072735302055525, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.666565026319027, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.518750347199974, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.96865946600283, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.52566759863147, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.945419461632158, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.988048661099743, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.950145918619048, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.031996877380797, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:39:01.936510", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 19.945431176541188, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.193941893795538, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.250619518752869, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.097692540739605, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.033181481683187, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.034209080463853, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.607448825390373, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.994221314054228, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:40:01.941045", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 16.88776704514902, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.836776210623682, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.043444318281804, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.896199695339456, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.563099569689633, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.60211302808787, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.419568720333235, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.269916069941825, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:41:01.974333", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 12.521235050014468, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.387145760527217, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.210290605218306, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.133842104217504, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.559930527276997, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.212633629818523, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.79682743289967, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.835036093473597, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:42:01.897392", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 18.52896857503618, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.369218991054439, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.645919750089815, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.408693867936087, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.361395196833856, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.04328669028679, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.643367012685273, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.116531083190745, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:43:01.963921", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 17.27913359678307, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.189332202344577, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.860989237935328, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.177113973070718, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.88997057913406, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.329134583762844, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.51922177289472, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.090750055453057, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.324557860850565, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:44:01.960660", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 26.744541229310627, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.287288004898565, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.74386835108984, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.23310437747867, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.637917990777312, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.870723315673661, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.964581195719866, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.674856781929217, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.012826495972217, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:45:01.888361", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 6.030932614272487, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.049807949340815, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.408815710174, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.914715128362706, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.025893145165147, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.576424472417173, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.892306319940596, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.995700663905192, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.621234267754714, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:46:01.927415", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 22.873785305292852, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.473365907805237, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.796726081275061, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.41195528735157, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.163705244025104, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.18780004969671, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.716166225228584, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.666029339503307, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.94230571049573, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:47:01.876299", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 17.269488160823816, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.063862377513145, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.183484883303311, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.006231890534435, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.937738735092775, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.236264927339095, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.424016135946466, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.059963350394314, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.136551544617177, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.487579651591446, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:48:01.842004", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 23.916965690834527, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.060530802498562, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.216951801645953, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.227898979795409, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.221723707193748, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.38470807918248, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.76889942234939, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.426522689841086, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.951041129726605, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:49:01.945002", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 9.998784572300845, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.01895553537652, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.744660762224074, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.543904276878143, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.467479992970734, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.616964639495308, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.891945732334491, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.102936722387948, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.505123528104448, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:50:01.941420", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 31.148159814259657, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.586634938640845, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.046100222905677, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.671190371415513, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.477771235586925, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.154133862882492, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.984593037642867, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.231144862700265, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.892444038754448, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:51:01.862856", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 12.529942061850363, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.897003605783427, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.954317361790734, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.685241169263024, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.985284542740274, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.848229109854792, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.38084333787007, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.053830386169981, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.049397553773588, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:52:01.914795", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 15.818712375078702, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.818576317694284, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.810766034552477, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.598977761700974, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.113885111549369, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.586236208289954, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.919343579773479, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.879317977528933, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.389936415431617, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.565491717309287, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:53:01.862543", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 16.85192229590117, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.697451518087696, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.719859888076126, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.35348601020315, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.85991694712248, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.077612329645953, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.330470117688323, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.380134860677122, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:54:02.010188", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 22.193798169866067, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.150617096008101, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.600784463964434, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.994745499000667, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.578537765172912, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.474930267010611, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.894192067706017, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.09631911505834, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.180729773785144, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:55:01.923906", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 65.14731752487411, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.159435465501486, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.049488710025493, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.966200377628539, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.885188492419132, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.871520419530082, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.711110586689841, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.169497980138122, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.862025792726046, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.812749193806365, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.521471385123121, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.851808006826555, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.41938706518012, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.733805825319857, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.04502814630544, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.060576044114569, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.543335595378242, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.741220771903093, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.792960185318769, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.380018285527658, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.039865496004754, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.908830045288793, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.442378773444663, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.309667439055321, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.034171511285429, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.875530336986841, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.987268593402, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.045920249612013, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.00058947916532, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.593263425564196, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.133433738256377, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.416003184599166, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.37369066642448, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.93713273434121, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.111838698072457, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.993280179247144, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.145282747581971, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.589496521896342, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.116800254371837, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.690160042073396, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 12.994809274612551, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.07567535283585, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.302475796972674, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.205051159744048, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.860637576818899, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.832455488005886, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.737852162505435, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.162209370877438, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.02544835465861, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.30689969592575, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.504525464382757, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.475284358421296, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.053669347511631, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.16546609611043, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.859845751765828, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.100947533247544, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.73441405506003, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.360439061722893, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.006102022428662, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.030932874262252, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.801264400348744, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.042183299715438, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.19834053325523, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.718007495732223, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.82796830984153, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.78997322812529, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.916995865718432, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.128401592417227, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.844344360469872, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.91767360136023, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.038859343511938, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.100182007667732, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.882852443368673, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.967932962610602, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.778137582181039, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.620120930421587, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.05630639508794, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.010617067380617, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.197221587183922, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.245404342750213, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.692669546484062, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.029035148085638, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.057044743159393, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.827995389080499, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.94767955173964, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.289674674746678, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.229142914300843, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.134971686428928, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.927665831001441, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.949451163107966, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.047973477557967, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.913396580634116, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.148905885902106, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.006119043513614, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.250817199175051, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.437146945495202, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.965614626243473, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.273228688403275, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.043494539165009, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 12.976186711387703, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.712018757117049, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.85011201777508, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.213072101860218, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.461149272362158, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.863476348786344, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.490798373513368, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.793190470153924, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.994242466096825, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.976846708442501, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.120233065440498, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.512840637163839, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.905184616232349, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.055399450129139, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.870432552169069, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.137954979667747, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.008023498721428, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.372468687581318, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.275018256381896, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.98555010371083, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.934591923610565, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.50373530402153, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.770833721738077, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.185451630063946, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.17613789820984, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.836969776089209, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.708121397373707, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.61109819910074, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.85841409471209, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.986048856639453, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.06160484725406, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.729419553999739, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.839612084309575, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.80092530289604, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.866872199597253, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.329139375345893, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.281823256001765, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.091112006657148, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.69082161890007, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.483953723603996, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.920232592773258, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.144063238588533, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.93695838057457, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.044979969756547, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.834022196892173, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.382172678724109, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.879134685012398, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.678318860475404, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.912349826890534, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.023043595113888, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.986636806556403, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.178754355763864, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.515569949986554, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.63620889295041, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.988945745305372, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.814309766255745, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.117048890645306, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.124343920318072, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.833031722606362, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.011509244400736, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.60669671252322, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.540655158296373, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.32158556853877, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.156466267753459, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.727891789137272, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.412274742998003, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.025380572110828, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.082718895013867, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.93713273434121, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.111838698072457, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.993280179247144, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.145282747581971, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.589496521896342, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.116800254371837, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.690160042073396, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 12.994809274612551, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.07567535283585, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.302475796972674, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.205051159744048, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.860637576818899, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.832455488005886, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.737852162505435, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.162209370877438, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.02544835465861, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.30689969592575, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.504525464382757, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.475284358421296, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.053669347511631, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.16546609611043, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.859845751765828, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.100947533247544, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.73441405506003, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.360439061722893, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.006102022428662, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.030932874262252, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.801264400348744, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.042183299715438, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.19834053325523, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.718007495732223, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.82796830984153, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.78997322812529, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.916995865718432, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.128401592417227, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.844344360469872, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.91767360136023, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.038859343511938, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.100182007667732, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.882852443368673, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.967932962610602, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.778137582181039, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.620120930421587, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.05630639508794, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.010617067380617, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.197221587183922, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.245404342750213, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.692669546484062, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.029035148085638, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.057044743159393, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.827995389080499, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.94767955173964, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.289674674746678, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.229142914300843, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.134971686428928, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.927665831001441, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.949451163107966, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.047973477557967, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.913396580634116, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.148905885902106, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.006119043513614, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.250817199175051, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.437146945495202, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.965614626243473, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.273228688403275, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.043494539165009, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 12.976186711387703, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.712018757117049, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.85011201777508, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.213072101860218, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.461149272362158, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.863476348786344, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.490798373513368, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.793190470153924, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.994242466096825, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.976846708442501, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.120233065440498, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.512840637163839, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.905184616232349, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.055399450129139, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.870432552169069, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.137954979667747, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.008023498721428, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.372468687581318, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.275018256381896, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.98555010371083, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.934591923610565, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.50373530402153, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.770833721738077, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.185451630063946, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.17613789820984, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.836969776089209, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.708121397373707, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.61109819910074, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.85841409471209, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.986048856639453, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.06160484725406, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.729419553999739, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.839612084309575, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.80092530289604, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.866872199597253, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.329139375345893, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.281823256001765, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.091112006657148, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.69082161890007, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.483953723603996, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.920232592773258, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.144063238588533, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.93695838057457, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.044979969756547, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.834022196892173, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.382172678724109, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.879134685012398, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.678318860475404, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.912349826890534, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.023043595113888, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.986636806556403, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.178754355763864, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.515569949986554, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.63620889295041, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.988945745305372, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.814309766255745, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.117048890645306, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.124343920318072, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.833031722606362, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.011509244400736, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.60669671252322, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.540655158296373, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.32158556853877, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.156466267753459, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.727891789137272, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.412274742998003, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.025380572110828, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.082718895013867, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.93713273434121, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.111838698072457, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.993280179247144, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.145282747581971, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.589496521896342, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.116800254371837, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.690160042073396, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 12.994809274612551, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.07567535283585, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.302475796972674, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.205051159744048, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.860637576818899, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.832455488005886, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.737852162505435, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.162209370877438, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.02544835465861, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.30689969592575, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.504525464382757, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.475284358421296, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.053669347511631, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.16546609611043, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.859845751765828, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.100947533247544, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.73441405506003, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.360439061722893, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.006102022428662, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.030932874262252, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.801264400348744, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.042183299715438, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.19834053325523, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.718007495732223, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.82796830984153, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.78997322812529, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.916995865718432, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.128401592417227, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.844344360469872, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.91767360136023, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.038859343511938, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.100182007667732, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.882852443368673, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.967932962610602, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.778137582181039, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.620120930421587, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.05630639508794, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.010617067380617, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.197221587183922, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.245404342750213, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.692669546484062, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.029035148085638, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.057044743159393, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.827995389080499, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.94767955173964, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.289674674746678, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.229142914300843, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.134971686428928, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.927665831001441, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.949451163107966, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.047973477557967, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.913396580634116, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.148905885902106, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.006119043513614, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.250817199175051, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.437146945495202, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.965614626243473, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.273228688403275, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.043494539165009, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 12.976186711387703, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.712018757117049, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.85011201777508, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.213072101860218, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.461149272362158, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.863476348786344, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.490798373513368, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.793190470153924, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.994242466096825, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.976846708442501, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.120233065440498, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.512840637163839, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.905184616232349, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.055399450129139, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.870432552169069, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.137954979667747, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.008023498721428, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.372468687581318, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.275018256381896, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.98555010371083, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.934591923610565, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.50373530402153, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.770833721738077, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.185451630063946, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.17613789820984, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.836969776089209, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.708121397373707, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.61109819910074, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.85841409471209, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.986048856639453, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.06160484725406, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.729419553999739, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.839612084309575, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.80092530289604, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.866872199597253, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.329139375345893, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.281823256001765, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.091112006657148, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.69082161890007, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.483953723603996, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.920232592773258, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.144063238588533, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.93695838057457, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.044979969756547, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.834022196892173, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.382172678724109, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.879134685012398, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.678318860475404, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.912349826890534, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.023043595113888, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.986636806556403, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.178754355763864, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.515569949986554, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.63620889295041, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.988945745305372, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.814309766255745, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.117048890645306, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.124343920318072, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.833031722606362, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.011509244400736, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.60669671252322, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.540655158296373, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.32158556853877, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.156466267753459, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.727891789137272, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.412274742998003, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.025380572110828, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.082718895013867, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.93713273434121, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.111838698072457, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.993280179247144, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.145282747581971, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.589496521896342, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.116800254371837, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.690160042073396, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 12.994809274612551, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.07567535283585, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.302475796972674, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.205051159744048, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.860637576818899, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.832455488005886, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.737852162505435, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.162209370877438, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.02544835465861, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.30689969592575, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.504525464382757, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.475284358421296, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.979501407001004, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.867201774746185, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.993380129431833, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.625548595437483, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.122203289732653, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.874955810628508, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.832911941903456, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.300023083440696, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.878773152407717, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.985740149649601, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.915155736463856, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.809733505258178, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.253354897795793, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.054766128282935, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.02395273908794, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.08927308667033, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.78402557969448, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.513066729225057, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.708260076747775, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.897810900862597, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.752630918159202, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.93122420560075, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.350302170499948, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.87293411779316, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.088388121971134, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.92424484434659, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.49913793190782, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.853497752222982, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.030935026698176, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.021182447763769, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.080468920257093, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.336182059528296, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.46313771646706, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.158027547091269, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.22132577476254, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.664400629774148, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.936909546524731, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.026457201767235, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.094545917929187, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.085344451726227, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.589511876624973, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.454918447354698, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.203729546631376, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.605893914951249, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 13.693242459098286, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-10T22:33:01.875122", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 14.046641133003208, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-11T11:11:01.760031", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 20.319472013800787, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-11T11:14:01.774720", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 142.70958270272504, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-11T11:15:01.761908", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 88.29253204186809, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-11T11:16:01.815999", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 10.0017638127646, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} +{"timestamp": "2025-11-11T11:17:01.813247", "parameters": {"modes": 6, "dofs_sel": [[7, 1], [6, 1], [5, 1], [4, 1]], "k_rot": 57.30472490284354, "l4": 0.1289, "m": 0.0, "L": 0.53, "ma": 0.0048, "l1": 0.03, "l2": 0.0675, "l3": 0.07, "E": 200000000000.0, "b": 0.029, "h": 0.001, "rho": 7850}} diff --git a/src/methods/packages/models/beam_yafem_model.py b/src/methods/packages/models/beam_yafem_model.py new file mode 100644 index 0000000..6fe8bcf --- /dev/null +++ b/src/methods/packages/models/beam_yafem_model.py @@ -0,0 +1,139 @@ +import numpy as np +from yafem import nodes +from yafem import model +from yafem import simulation +from yafem.elem import beam2d +from yafem.elem import MCK + + +def eval_yafem_model(pars=None): + #%% Parameters + if pars is None: pars = {} + L = pars.setdefault('L' ,0.530) # [m] ruler length + ma = pars.setdefault('ma' ,4.8e-3) # [kg] mass of the accelerometer + l1 = pars.setdefault('l1' ,0.030) # [m] distance from the beam top to the top accelerometer + l2 = pars.setdefault('l2' ,0.0675) # [m] distance between the accelerometers 0.0675 + l3 = pars.setdefault('l3' ,0.070) # [m] distance between the supports + l4 = pars.setdefault('l4' ,0.130) # [m] VARIABLE approx. the depth of the "ground" + E = pars.setdefault('E' ,200e9) # [Pa] Young modulus, normal steel + b = pars.setdefault('b' ,29e-3) # [m] width of the ruler + h = pars.setdefault('h' ,1e-3) # [m] thichness of the ruler + rho = pars.setdefault('rho',7850) # [kg/m3] density of the steel + m = pars.setdefault('m' ,15e-3) # [kg] VARIABLE tip mass + k_rot = pars.setdefault('k_rot' ,3.5e3) # [Nm/rad] VARIABLE rotational stiffness + modes = pars.setdefault('modes' ,3) + dofs_sel = pars.setdefault('dofs_sel',np.array([1,1])) + + A = b * h + I = b * h**3/12 + + #%% nodal object + nodes_pars = {} + + nodes_pars['nodal_data'] = np.array([[8,0.0,L ,0.0], # tip mass + [7,0.0,L-l1 ,0.0], # acc 1 + [6,0.0,L-l1-1*l2,0.0], # acc 3 + [5,0.0,L-l1-2*l2,0.0], # acc 2 + [4,0.0,L-l1-3*l2,0.0], # acc 4 + [3,0.0,l4 ,0.0], # support 2 + [2,0.0,l4-l3 ,0.0], # support 1 + [1,0.0,0.0 ,0.0], + ]) + + # node object + myNodes = nodes(nodes_pars) + + #%% Element object + + # accelerometers + acc_pars = {} + acc_pars['M'] = np.array([[ma,0,0,0],[0,ma,0,0],[0,0,ma,0],[0,0,0,ma]]) + acc_pars['K'] = np.zeros((4,4)) + acc_pars['dofs'] = np.array([[7,1],[6,1],[5,1],[4,1]]) + mass_acc = MCK(myNodes,acc_pars) + + # tip mass + mass_pars = {} + mass_pars['M'] = np.array([[m]]) + mass_pars['K'] = np.zeros((1,1)) + mass_pars['dofs'] = np.array([[8,1]]) + mass_tip = MCK(myNodes,mass_pars) + + # # springs + spring_pars = {} + spring_pars['K'] = np.array([[k_rot,0],[0,k_rot]]) + spring_pars['dofs'] = np.array([[3,3],[2,3]]) + springs = MCK(myNodes,spring_pars) + + # Common beam parameters + beam2d_pars = {} + beam2d_pars['E'] = E + beam2d_pars['rho'] = rho + beam2d_pars['A'] = A + beam2d_pars['I'] = I + + beam2d1_pars = beam2d_pars + beam2d1_pars['nodal_labels'] = np.array([1,2]) + beam2d1 = beam2d(myNodes,beam2d1_pars) + + beam2d2_pars = beam2d_pars + beam2d2_pars['nodal_labels'] = np.array([2,3]) + beam2d2 = beam2d(myNodes,beam2d2_pars) + + beam2d3_pars = beam2d_pars + beam2d3_pars['nodal_labels'] = np.array([3,4]) + beam2d3 = beam2d(myNodes,beam2d3_pars) + + beam2d4_pars = beam2d_pars + beam2d4_pars['nodal_labels'] = np.array([4,5]) + beam2d4 = beam2d(myNodes,beam2d4_pars) + + beam2d5_pars = beam2d_pars + beam2d5_pars['nodal_labels'] = np.array([5,6]) + beam2d5 = beam2d(myNodes,beam2d5_pars) + + beam2d6_pars = beam2d_pars + beam2d6_pars['nodal_labels'] = np.array([6,7]) + beam2d6 = beam2d(myNodes,beam2d6_pars) + + beam2d7_pars = beam2d_pars + beam2d7_pars['nodal_labels'] = np.array([7,8]) + beam2d7 = beam2d(myNodes,beam2d7_pars) + + # list of all elements + myElements = [mass_acc, + mass_tip, + springs, + beam2d1, + beam2d2, + beam2d3, + beam2d4, + beam2d5, + beam2d6, + beam2d7, + ] + + #%% model object + model_pars = {} + model_pars['dofs_c'] = np.array([[3,1], + [3,2], + [2,1], + [2,2], + ]) + + model_pars['damping_model'] = 'proportional' + model_pars['alpha'] = 2.0 + model_pars['beta'] = 0.1 + + # modal analysis + myModel = model(myNodes, myElements,model_pars) + + # simulation + mySimulation = simulation(myModel) + + # modal analysis + omega, phi = myModel.compute_modal_ss(modes,dofs_sel) + idxs_sel = myModel.find_dofs(dofs_sel) + phi_sel = phi[idxs_sel,:] + + return omega, phi, phi_sel, myModel diff --git a/src/methods/packages/models/model_parameters/__init__.py b/src/methods/packages/models/model_parameters/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/methods/sysid.py b/src/methods/sysid.py index cf09512..479e95c 100644 --- a/src/methods/sysid.py +++ b/src/methods/sysid.py @@ -1,19 +1,20 @@ import time import json +import numpy as np from datetime import datetime from typing import Any, Dict, Optional, Tuple from paho.mqtt.client import Client as MQTTClient from pyoma2.setup.single import SingleSetup from functions.util import convert_numpy_to_list from data.accel.metadata import extract_fs_from_metadata -from data.comm.mqtt import setup_mqtt_client +from data.comm.mqtt import (setup_mqtt_client, reconnect_client) from data.accel.hbk.aligner import Aligner from methods.packages.pyoma.ssiWrapper import SSIcov from methods.constants import DEFAULT_FS, PARAMS -def sysid(data, params): +def sysid(data: np.ndarray[float], params: Dict[str,Any]) -> Dict[str, Any]: """ Perform system identification using the Covariance-based Stochastic Subspace Identification (SSI-COV) method. @@ -71,7 +72,7 @@ def setup_client(mqtt_config: Dict[str, Any]) -> Tuple[MQTTClient, float]: """ try: fs = extract_fs_from_metadata(mqtt_config) - print("Extracted FS from metadata:", fs) + print("Extracted Fs from metadata:", fs) except Exception: print("Failed to extract FS from metadata. Using DEFAULT_FS.") fs = DEFAULT_FS @@ -113,7 +114,7 @@ def get_sysid_results( def publish_sysid_results(sampling_period: int, aligner: Aligner, publish_client: MQTTClient, publish_topic: str, - fs: float) -> None: + fs: float) -> int: """ Repeatedly tries to get aligned data and publish sysid results once. @@ -125,7 +126,8 @@ def publish_sysid_results(sampling_period: int, aligner: Aligner, fs: Sampling frequency. """ t1 = time.time() - loop = True + timestamp = datetime.now() + publish_result = True while True: try: time.sleep(0.1) @@ -144,13 +146,11 @@ def publish_sysid_results(sampling_period: int, aligner: Aligner, try: message = json.dumps(payload) - if not publish_client.is_connected(): - print("Publisher disconnected. Reconnecting...") - publish_client.reconnect() + reconnect_succes = reconnect_client(publish_client) publish_client.publish(publish_topic, message, qos=1) print(f"[{timestamp.isoformat()}] Published sysid result to {publish_topic}") - loop = True + publish_result = True break except Exception as e: print(f"\nFailed to publish sysid result: {e}") @@ -160,9 +160,9 @@ def publish_sysid_results(sampling_period: int, aligner: Aligner, aligner.mqtt_client.loop_stop() aligner.mqtt_client.disconnect() publish_client.disconnect() - loop = False + publish_result = False break except Exception as e: print(f"\nUnexpected error: {e}") - return loop + return publish_result, timestamp.isoformat() From af4520b1685a0fda2162e3d0589be99abe74684e Mon Sep 17 00:00:00 2001 From: prasadtalasila Date: Tue, 11 Nov 2025 18:39:16 +0100 Subject: [PATCH 2/2] resolve merge conflicts --- src/methods/mode_clustering_functions/clustering.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/methods/mode_clustering_functions/clustering.py b/src/methods/mode_clustering_functions/clustering.py index d00bc2e..f319a34 100644 --- a/src/methods/mode_clustering_functions/clustering.py +++ b/src/methods/mode_clustering_functions/clustering.py @@ -1,8 +1,4 @@ -<<<<<<< HEAD -from typing import Any -======= from typing import Any, Dict, Tuple ->>>>>>> eceb467 (Added clustering and mode tracking) import numpy as np from functions.clean_sysid_output import (remove_highly_uncertain_points,transform_sysid_features) from methods.mode_clustering_functions.create_cluster import cluster_creation