Source code for rubin_scheduler.site_models.cloud_model
__all__ = ("CloudModel",)
import warnings
import numpy as np
[docs]
class CloudModel:
"""LSST cloud calculations for cloud extinction.
Currently this actually only returns the cloud coverage of the sky,
exactly as reported in the cloud database (thus the sky coverage,
in fractions of 8ths).
Parameters
----------
XXX--update docstring
self.efd_requirements and self.map_requirements are also set.
efd_requirements is a tuple: (list of str, float).
This corresponds to the data columns required from the EFD and
the amount of time history required. target_requirements is a
list of str. This corresponds to the data columns required in the
target map dictionary passed when calculating the processed
telemetry values.
"""
def __init__(self, cloud_column="cloud", altitude_column="altitude", azimuth_column="azimuth"):
self.altcol = altitude_column
self.azcol = azimuth_column
self.cloudcol = cloud_column
def configure(self, config=None):
""""""
warnings.warn("The configure method is deprecated.")
def config_info(self):
""""""
warnings.warn("The config_info method is deprecated.")
[docs]
def __call__(self, cloud_value, altitude):
"""Calculate the sky coverage due to clouds.
This is where we'd plug in Peter's cloud transparency maps and
predictions. We could also try translating cloud transparency
into a cloud extinction. For now, we're simply returning the
cloud coverage that we already got from the database,
but multiplied over the whole sky to provide a map.
Parameters
----------
cloud_value: float or efdData dict
The value to give the clouds (XXX-units?).
altitude: float, np.array, or targetDict
Altitude of the output (arbitrary).
Returns
-------
dict of np.ndarray
Cloud transparency map values.
"""
if isinstance(cloud_value, dict):
cloud_value = cloud_value[self.cloudcol]
if isinstance(altitude, dict):
altitude = altitude[self.altcol]
model_cloud = np.zeros(len(altitude), float) + cloud_value
return {"cloud": model_cloud}