Skip to content

Commit

Permalink
Use the new event_maker.getEvent function
Browse files Browse the repository at this point in the history
  • Loading branch information
b1quint committed Sep 29, 2023
1 parent 42ce805 commit 55ab3f9
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 88 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
import pandas as pd
from astropy import units as u
from astropy.time import Time
from lsst.summit.testing.analysis.m1m3.plots import inertia_compensation_system
from lsst.summit.testing.analysis.utils import create_logger
from lsst.summit.utils.efdUtils import EfdClient, getEfdData
from lsst.summit.utils.tmaUtils import TMAEvent, TMAEventMaker
from plots import inertia_compensation_system

__all__ = ["M1M3ICSAnalysis"]

Expand Down Expand Up @@ -371,52 +371,6 @@ def find_adjacent_true_regions(
return regions


def get_tma_slew_event(
day_obs: int, seq_num: int, log: logging.Logger | None = None
) -> TMAEvent:
"""
Retrieve all the Telescope Mount Assembly (TMA) slew events in a day and
select the one that matches the specified sequence number.
Parameters
----------
day_obs : int
Observation day in the YYYYMMDD format.
seq_num : int
Sequence number associated with the slew event.
Returns
-------
single_event : lsst.summit.utils.tmaUtils.TMAEvent
A TMA slew events that occurred within the specified time range.
Raises
------
ValueError
If no events are found for the provided day_obs.
ValueError
If more than one event matching the seq_num is found for day_obs.
ValueError
If no events matching the seq_num are found for day_obs.
"""
log = log.getChild(__name__) if log is not None else logging.getLogger(__name__)

log.info(f"Query events in {day_obs}")
events = event_maker.getEvents(day_obs)

if len(events) == 0:
raise ValueError(f"Could not find any events for {day_obs}. ")

log.info(f"Found {len(events)} events.")

if seq_num <= len(events):
return events[seq_num]
else:
raise ValueError(
f"{seq_num=} is out of range -" f"{day_obs=} only has {len(events)} events"
)


def evaluate_m1m3_ics_single_slew(
day_obs: int,
seq_number: int,
Expand Down Expand Up @@ -454,12 +408,12 @@ def evaluate_m1m3_ics_single_slew(
"""
log = log.getChild(__name__) if log is not None else logging.getLogger(__name__)

log.info("Retrieving TMA slew event.") # type: ignore
event = get_tma_slew_event(day_obs, seq_number)
log.info("Retrieving TMA slew event.")
event = event_maker.getEvent(day_obs, seq_number)
if event is None:
raise ValueError(f"Could not find event with {seq_number} in {day_obs}")

log.info("Start inertia compensation system analysis.") # type: ignore
event = get_tma_slew_event(day_obs, seq_number)
log.info("Start inertia compensation system analysis.") # type: ignore
log.info("Start inertia compensation system analysis.")
performance_analysis = M1M3ICSAnalysis(
event,
event_maker.client,
Expand All @@ -477,5 +431,5 @@ def evaluate_m1m3_ics_single_slew(
log.info("Start")
event_maker = TMAEventMaker()
results = evaluate_m1m3_ics_single_slew(20230802, 38, event_maker, log=log)
inertia_compensation_system.plot_hp_measured_data(results)
inertia_compensation_system.plot_hp_measured_data(results, log=log)
log.info("End")
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import logging

import matplotlib.pyplot as plt
import pandas as pd
from astropy.time import Time
from lsst.summit.testing.analysis.m1m3.inertia_compensation_system import (
M1M3ICSAnalysis,
)
from lsst.summit.testing.analysis.type_utils import M1M3ICSAnalysis


def plot_hp_data(ax: plt.Axes, data: pd.Series | list, label: str) -> list[plt.Line2D]:
Expand Down Expand Up @@ -106,11 +106,11 @@ def customize_hp_plot(
t_fmt = "%Y%m%d %H:%M:%S"
ax.set_title(
f"HP Measured Data\n "
f"DayObs {dataset.event.dayObs} " # type: ignore
f"SeqNum {dataset.event.seqNum} " # type: ignore
f"v{dataset.event.version}\n " # type: ignore
f"{dataset.df.index[0].strftime(t_fmt)} - " # type: ignore
f"{dataset.df.index[-1].strftime(t_fmt)}" # type: ignore
f"DayObs {dataset.event.dayObs} "
f"SeqNum {dataset.event.seqNum} "
f"v{dataset.event.version}\n "
f"{dataset.df.index[0].strftime(t_fmt)} - "
f"{dataset.df.index[-1].strftime(t_fmt)}"
)
ax.set_xlabel("Time [UTC]")
ax.set_ylabel("HP Measured Forces [N]")
Expand All @@ -129,11 +129,11 @@ def plot_velocity_data(ax: plt.Axes, dataset: M1M3ICSAnalysis) -> None:
dataset : M1M3ICSAnalysis
The dataset object containing the data to be plotted and metadata.
"""
ax.plot(dataset.df["az_actual_velocity"], color="royalblue", label="Az Velocity") # type: ignore
ax.plot(dataset.df["el_actual_velocity"], color="teal", label="El Velocity") # type: ignore
ax.plot(dataset.df["az_actual_velocity"], color="royalblue", label="Az Velocity")
ax.plot(dataset.df["el_actual_velocity"], color="teal", label="El Velocity")
ax.grid(":", alpha=0.2)
ax.set_ylabel("Actual Velocity\n [deg/s]")
ax.legend(ncol=2)
ax.legend(ncol=2, fontsize="small")


def plot_torque_data(ax: plt.Axes, dataset: M1M3ICSAnalysis) -> None:
Expand All @@ -147,8 +147,8 @@ def plot_torque_data(ax: plt.Axes, dataset: M1M3ICSAnalysis) -> None:
dataset : M1M3ICSAnalysis
The dataset object containing the data to be plotted and metadata.
"""
ax.plot(dataset.df["az_actual_torque"], color="firebrick", label="Az Torque") # type: ignore
ax.plot(dataset.df["el_actual_torque"], color="salmon", label="El Torque") # type: ignore
ax.plot(dataset.df["az_actual_torque"], color="firebrick", label="Az Torque")
ax.plot(dataset.df["el_actual_torque"], color="salmon", label="El Torque")
ax.grid(":", alpha=0.2)
ax.set_ylabel("Actual Torque\n [kN.m]")
ax.legend(ncol=2)
Expand Down Expand Up @@ -186,7 +186,9 @@ def plot_stable_region(
return span


def finalize_and_save_figure(fig: plt.figure, name: str) -> None:
def finalize_and_save_figure(
fig: plt.figure, name: str, log: None | logging.Logger = None
) -> None:
"""
Finalize the appearance of the figure and save it to a file.
Expand All @@ -197,19 +199,29 @@ def finalize_and_save_figure(fig: plt.figure, name: str) -> None:
name : str
The name of the file to which the figure is saved.
"""
log = log.getChild(__name__) if log is not None else logging.getLogger(__name__)

fig.tight_layout()
fig.savefig(
plt.show()

filename = (
name.replace("/", "")
.replace(" ", "_")
.replace(" ", "_")
.replace(",", "")
.replace("%", "pc")
)

plt.show()
log.info(f"Saving figure to {filename}.png")
fig.savefig(filename)
log.info("Done")


def plot_hp_measured_data(dataset: M1M3ICSAnalysis) -> None:
def plot_hp_measured_data(
dataset: M1M3ICSAnalysis,
dpi: float = 120,
figsize: tuple[float, float] = (9, 6),
log: None | logging.Logger = None,
) -> None:
"""
Create and plot hardpoint measured data, velocity, and torque on subplots.
Expand All @@ -218,51 +230,56 @@ def plot_hp_measured_data(dataset: M1M3ICSAnalysis) -> None:
dataset : M1M3ICSAnalysis
The dataset object containing the data to be plotted and metadata.
"""
log = log.getChild(__name__) if log is not None else logging.getLogger(__name__)

figure_name = (
f"hp_measured_forces_"
f"{dataset.event.dayObs}_" # type: ignore
f"sn{dataset.event.seqNum}_" # type: ignore
f"v{dataset.event.version}" # type: ignore
f"{dataset.event.dayObs}_"
f"sn{dataset.event.seqNum}_"
f"v{dataset.event.version}"
)

fig = plt.figure(figure_name)
fig.clear()

fig, (ax_hp, ax_tor, ax_vel) = plt.subplots(
num=figure_name,
dpi=120,
figsize=(9, 6),
dpi=dpi,
figsize=figsize,
nrows=3,
sharex=True,
height_ratios=[2, 1, 1],
)

lines = []
for hp in range(dataset.number_of_hardpoints): # type: ignore
topic = dataset.measured_forces_topics[hp] # type: ignore
line = plot_hp_data(ax_hp, dataset.df[topic], f"HP{hp+1}") # type: ignore
for hp in range(dataset.number_of_hardpoints):
topic = dataset.measured_forces_topics[hp]
line = plot_hp_data(ax_hp, dataset.df[topic], f"HP{hp+1}")
lines.extend(line)

slew_begin = Time(dataset.event.begin, scale="utc") # type: ignore
slew_end = Time(dataset.event.end, scale="utc") # type: ignore
slew_begin = Time(dataset.event.begin, scale="utc")
slew_end = Time(dataset.event.end, scale="utc")

mark_slew_begin_end(ax_hp, slew_begin, slew_end)
mark_slew_begin_end(ax_vel, slew_begin, slew_end)
line = mark_slew_begin_end(ax_tor, slew_begin, slew_end)
lines.append(line)

mark_padded_slew_begin_end(
ax_hp, slew_begin - dataset.outer_pad, slew_end + dataset.outer_pad # type: ignore
ax_hp, slew_begin - dataset.outer_pad, slew_end + dataset.outer_pad
)
mark_padded_slew_begin_end(
ax_vel, slew_begin - dataset.outer_pad, slew_end + dataset.outer_pad # type: ignore
ax_vel, slew_begin - dataset.outer_pad, slew_end + dataset.outer_pad
)
line = mark_padded_slew_begin_end(
ax_tor, slew_begin - dataset.outer_pad, slew_end + dataset.outer_pad # type: ignore
ax_tor, slew_begin - dataset.outer_pad, slew_end + dataset.outer_pad
)
lines.append(line)

stable_begin, stable_end = dataset.find_stable_region() # type: ignore
stable_begin, stable_end = dataset.find_stable_region()
stat_begin, stat_end = (
stable_begin + dataset.inner_pad, # type: ignore
stable_end - dataset.inner_pad, # type: ignore
stable_begin + dataset.inner_pad,
stable_end - dataset.inner_pad,
)

plot_velocity_data(ax_vel, dataset)
Expand All @@ -274,4 +291,6 @@ def plot_hp_measured_data(dataset: M1M3ICSAnalysis) -> None:
lines.extend([span_stable, span_with_padding])

customize_hp_plot(ax_hp, dataset, lines)
finalize_and_save_figure(fig, figure_name)
finalize_and_save_figure(fig, figure_name, log=log)

return fig

0 comments on commit 55ab3f9

Please sign in to comment.