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..f319a34 100644 --- a/src/methods/mode_clustering_functions/clustering.py +++ b/src/methods/mode_clustering_functions/clustering.py @@ -1,22 +1,24 @@ -from typing import Any +from typing import Any, Dict, Tuple 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 +27,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 +46,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 +66,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 +76,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 +86,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 +108,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 +181,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 +205,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()