Source code for ctapipe.instrument.camera.description

"""
Classes pertaining to the description of a Cherenkov camera
"""

from ctapipe.utils import find_all_matching_datasets

from .geometry import CameraGeometry
from .readout import CameraReadout

__all__ = ["CameraDescription"]


[docs]class CameraDescription: """ Describes a Cherenkov camera and its associated `~ctapipe.instrument.CameraGeometry` and `~ctapipe.instrument.CameraReadout` Parameters ---------- name: str Camera name (e.g. NectarCam, LSTCam, ...) geometry: CameraGeometry The pixel geometry of this camera readout: CameraReadout The readout properties for this camera """ __slots__ = ( "name", "geometry", "readout", ) def __init__(self, name, geometry: CameraGeometry, readout: CameraReadout): self.name = name self.geometry = geometry self.readout = readout def __hash__(self): """Make this hashable, so it can be used as dict keys or in sets""" return hash((self.geometry, self.readout)) def __eq__(self, other): return self.geometry == other.geometry and self.readout == other.readout @classmethod def get_known_camera_names(cls): """ Returns a list of camera names that are available currently on the system. Beware that the `from_name` method also tries to download camera descriptions from the data server, so this list might not be exhaustive. Returns ------- list(str) """ pattern = r"(.*)\.camgeom\.fits(\.gz)?" return find_all_matching_datasets(pattern, regexp_group=1) @classmethod def from_name(cls, name): """ Construct a CameraDescription from a camera name Parameters ---------- name: str Camera name (e.g. NectarCam, LSTCam, ...) Returns ------- CameraDescription """ geometry = CameraGeometry.from_name(name) try: readout = CameraReadout.from_name(name) except FileNotFoundError: readout = None return cls(name=name, geometry=geometry, readout=readout) def __str__(self): return f"{self.name}" def __repr__(self): return "{}(name={}, geometry={}, readout={})".format( self.__class__.__name__, self.name, str(self.geometry), str(self.readout), )