Source code for atomicds.results.rheed_video
from __future__ import annotations
from uuid import UUID
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
from monty.json import MSONable
from pandas import DataFrame
from atomicds.results import RHEEDImageResult
[docs]
class RHEEDVideoResult(MSONable):
[docs]
def __init__(
self,
data_id: UUID | str,
timeseries_data: DataFrame,
cluster_image_data: list[RHEEDImageResult] | None,
snapshot_image_data: list[RHEEDImageResult] | None,
rotating: bool,
):
"""RHEED video result
Args:
data_id (UUID | str): Data ID for the entry in the data catalogue.
timeseries_data (DataFrame): Pandas DataFrame with timeseries data associated with the video.
Includes cluster assignments, specular intensity, strain, etc...
cluster_image_data (list[RHEEDImageResult]): List of RHEEDImageResult objects containing data for
images associated with each identified cluster in the video.
snapshot_image_data (list[RHEEDImageResult]): List of RHEEDImageResult objects containing data for
images associated with each user extracted snapshot in the video.
rotating (bool): Whether the video was taken of a rotating stage.
"""
self.data_id = data_id
self.timeseries_data = timeseries_data
self.cluster_image_data = cluster_image_data
self.snapshot_image_data = snapshot_image_data
self.rotating = rotating
[docs]
def get_plot(self) -> Figure:
"""Get plot of timeseries data associated with this RHEED video
Returns:
(Figure): Matplotlib Figure object containing plot data
"""
fig, axes = plt.subplots(nrows=6, sharex=True, figsize=(10, 10))
time = self.timeseries_data["Time"]
cluster_uncertainty = self.timeseries_data["Cluster ID Uncertainty"]
timeseries_data = self.timeseries_data.drop(columns=["Time"])
timeseries_data = timeseries_data.drop(columns=["Cluster ID Uncertainty"])
timeseries_data = timeseries_data.rename(
columns={"Oscillation Period": "Oscillation Period [s]"}
)
colors = {
"Cluster ID": "black",
"Specular Intensity": "#0D74CE",
"First Order Intensity": "#0588F0",
"Cumulative Strain": "#CA244D",
"Relative Strain": "#DC3B5D",
"Oscillation Period [s]": "#AB4ABA",
"Diffraction Spot Count": "#CC4E00",
}
linewidth = 3
for col, axis in zip(timeseries_data.columns, axes):
(line,) = axis.plot(
time,
timeseries_data[col].values,
label=col,
color=colors[col],
linewidth=linewidth,
)
axis.grid(color="#E0E0E0", linestyle="--", linewidth=0.5)
axis.legend([line], [col])
if col == "Cluster ID":
axis.errorbar(
time,
timeseries_data[col].values,
yerr=cluster_uncertainty,
fmt="-",
capsize=2,
color=colors[col],
linewidth=2,
)
axes[-1].set_xlabel("Time [s]", fontsize=12)
plt.close()
return fig