Source code for model.model_utils

#!/usr/bin/python3
"""Helper functions related to model parameters."""

import math

from simtools.model.calibration_model import CalibrationModel
from simtools.model.site_model import SiteModel
from simtools.model.telescope_model import TelescopeModel
from simtools.utils import names


[docs] def initialize_simulation_models( label, db_config, model_version, site, telescope_name, calibration_device_name=None ): """ Initialize simulation models for a single telescope, site, and calibration device model. Parameters ---------- label: str Label for the simulation. db_config: dict Database configuration. model_version: str Version of the simulation model site: str Name of the site. telescope_name: str Name of the telescope. calibration_device_name: str, optional Name of the calibration device. Returns ------- Tuple Tuple containing the telescope site, (optional) calibration device model. """ tel_model = TelescopeModel( site=site, telescope_name=telescope_name, mongo_db_config=db_config, model_version=model_version, label=label, ) site_model = SiteModel( site=site, model_version=model_version, mongo_db_config=db_config, label=label, ) if calibration_device_name is not None: calibration_model = CalibrationModel( site=site, calibration_device_model_name=calibration_device_name, mongo_db_config=db_config, model_version=model_version, label=label, ) else: calibration_model = None for model in tel_model, site_model: model.export_model_files() return tel_model, site_model, calibration_model
[docs] def compute_telescope_transmission(pars: list[float], off_axis: float) -> float: """ Compute telescope transmission (0 < T < 1) for a given off-axis angle. The telescope transmission depends on the MC model used. Parameters ---------- pars: list of float Parameters of the telescope transmission. Len(pars) should be 5 or 6. off_axis: float Off-axis angle in deg. Returns ------- float Telescope transmission. """ _deg_to_rad = math.pi / 180.0 if pars[1] == 0: return pars[0] t = math.sin(off_axis * _deg_to_rad) / (pars[3] * _deg_to_rad) return pars[0] / (1.0 + pars[2] * t ** pars[4])
[docs] def is_two_mirror_telescope(telescope_model_name: str) -> bool: """ Determine if the telescope model is a two-mirror telescope. Parameters ---------- telescope_model_name: str Name of the telescope model. Returns ------- bool True if it is a two-mirror telescope. """ tel_type = names.get_array_element_type_from_name(telescope_model_name) if "SST" in tel_type or "SCT" in tel_type: return True return False