Skip to content

ctaoirf - IRF Management

Manages and loads multiple CTA Instrument Response Functions (IRFs).

IRFHouse(base_directory: str | Path, check_irfs: bool = False)

Parameters:

ParameterTypeDescription
base_directorystr | PathRoot directory containing IRF files
check_irfsboolIf True, verify all IRF files exist during initialization

Example:

from sensipy.ctaoirf import IRFHouse
house = IRFHouse(base_directory="./IRFs/CTAO")

Load a specific IRF configuration.

get_irf(
site: Site | str,
configuration: Configuration | str,
zenith: Zenith | int,
duration: Duration | int,
azimuth: Azimuth | str,
version: Version | str,
) -> IRF

Parameters:

ParameterTypeOptions
sitestr"north", "south"
configurationstr"alpha", "omega", "alpha_lst"
zenithint20, 40, 60 (degrees)
durationint1800, 18000, 180000 (seconds)
azimuthstr"north", "south", "average"
versionstr"prod5-v0.1", "prod3b-v2"

Returns: IRF object

Example:

irf = house.get_irf(
site="south",
configuration="alpha",
zenith=20,
duration=1800,
azimuth="average",
version="prod5-v0.1",
)

Verify all expected IRF files exist.

check_all_paths() -> None

Prints status for all IRF combinations and reports missing files.

house.check_all_paths()

Represents a single Instrument Response Function configuration.

AttributeTypeDescription
filepathPathPath to IRF FITS file
siteSiteObservatory site (north/south)
configurationConfigurationTelescope configuration
zenithZenith | intZenith angle
durationDuration | intIRF duration
azimuthAzimuthAzimuth direction
versionVersionIRF production version
base_directoryPathBase IRF directory

Get energy range of the IRF.

energy_min, energy_max = irf.energy_limits
print(f"Energy range: {energy_min} to {energy_max}")

String representation of the IRF.

print(irf)
# Output:
# CTA IRF [prod5-v0.1]
# filepath: .../CTA-Performance-prod5-v0.1-South-20deg...
# config: alpha
# site: south
# zenith: 20º
# duration: 1800s
# azimuth: average

Return file path (allows IRF to be used as path-like object).

from gammapy.irf import load_irf_dict_from_file
irf_dict = load_irf_dict_from_file(irf) # Uses __fspath__()
class Site(str, Enum):
south = "south"
north = "north"
class Configuration(str, Enum):
alpha = "alpha"
omega = "omega"
alpha_lst = "alpha_lst"
class Zenith(IntEnum):
z20 = 20
z40 = 40
z60 = 60
class Duration(IntEnum):
t1800 = 1800
t18000 = 18000
t180000 = 180000
class Azimuth(str, Enum):
south = "south"
north = "north"
average = "average"
class Version(str, Enum):
prod5_v0p1 = "prod5-v0.1"
prod3b_v2 = "prod3b-v2"
from sensipy.ctaoirf import IRFHouse, Site, Zenith, Configuration
house = IRFHouse(base_directory="./IRFs/CTAO")
irf = house.get_irf(
site=Site.south,
configuration=Configuration.alpha,
zenith=Zenith.z20,
duration=1800,
azimuth="average",
version="prod5-v0.1",
)