gammasimtools 0.8.2__py3-none-any.whl → 0.10.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. {gammasimtools-0.8.2.dist-info → gammasimtools-0.10.0.dist-info}/METADATA +4 -4
  2. {gammasimtools-0.8.2.dist-info → gammasimtools-0.10.0.dist-info}/RECORD +119 -105
  3. {gammasimtools-0.8.2.dist-info → gammasimtools-0.10.0.dist-info}/WHEEL +1 -1
  4. {gammasimtools-0.8.2.dist-info → gammasimtools-0.10.0.dist-info}/entry_points.txt +4 -1
  5. simtools/_version.py +2 -2
  6. simtools/applications/calculate_trigger_rate.py +15 -38
  7. simtools/applications/convert_all_model_parameters_from_simtel.py +9 -28
  8. simtools/applications/convert_geo_coordinates_of_array_elements.py +54 -53
  9. simtools/applications/convert_model_parameter_from_simtel.py +2 -2
  10. simtools/applications/db_add_file_to_db.py +1 -2
  11. simtools/applications/db_add_simulation_model_from_repository_to_db.py +110 -0
  12. simtools/applications/db_add_value_from_json_to_db.py +2 -11
  13. simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +6 -6
  14. simtools/applications/db_get_array_layouts_from_db.py +3 -1
  15. simtools/applications/db_get_file_from_db.py +11 -12
  16. simtools/applications/db_get_parameter_from_db.py +44 -32
  17. simtools/applications/derive_mirror_rnda.py +10 -1
  18. simtools/applications/derive_photon_electron_spectrum.py +99 -0
  19. simtools/applications/derive_psf_parameters.py +1 -1
  20. simtools/applications/generate_array_config.py +18 -22
  21. simtools/applications/generate_regular_arrays.py +24 -21
  22. simtools/applications/generate_simtel_array_histograms.py +11 -48
  23. simtools/applications/plot_array_layout.py +3 -1
  24. simtools/applications/plot_tabular_data.py +84 -0
  25. simtools/applications/production_generate_simulation_config.py +25 -7
  26. simtools/applications/production_scale_events.py +3 -4
  27. simtools/applications/simulate_light_emission.py +2 -2
  28. simtools/applications/simulate_prod.py +25 -60
  29. simtools/applications/simulate_prod_htcondor_generator.py +95 -0
  30. simtools/applications/submit_data_from_external.py +12 -4
  31. simtools/applications/submit_model_parameter_from_external.py +8 -6
  32. simtools/applications/validate_camera_efficiency.py +3 -3
  33. simtools/applications/validate_camera_fov.py +3 -7
  34. simtools/applications/validate_cumulative_psf.py +3 -7
  35. simtools/applications/validate_file_using_schema.py +38 -24
  36. simtools/applications/validate_optics.py +3 -4
  37. simtools/{camera_efficiency.py → camera/camera_efficiency.py} +1 -4
  38. simtools/camera/single_photon_electron_spectrum.py +168 -0
  39. simtools/configuration/commandline_parser.py +14 -13
  40. simtools/configuration/configurator.py +6 -19
  41. simtools/constants.py +10 -3
  42. simtools/corsika/corsika_config.py +8 -7
  43. simtools/corsika/corsika_histograms.py +1 -1
  44. simtools/data_model/data_reader.py +0 -3
  45. simtools/data_model/metadata_collector.py +21 -4
  46. simtools/data_model/metadata_model.py +8 -111
  47. simtools/data_model/model_data_writer.py +18 -64
  48. simtools/data_model/schema.py +213 -0
  49. simtools/data_model/validate_data.py +73 -51
  50. simtools/db/db_handler.py +395 -790
  51. simtools/db/db_model_upload.py +139 -0
  52. simtools/io_operations/hdf5_handler.py +54 -24
  53. simtools/io_operations/legacy_data_handler.py +61 -0
  54. simtools/job_execution/htcondor_script_generator.py +133 -0
  55. simtools/job_execution/job_manager.py +77 -50
  56. simtools/layout/array_layout.py +33 -28
  57. simtools/model/array_model.py +13 -7
  58. simtools/model/camera.py +4 -2
  59. simtools/model/model_parameter.py +61 -63
  60. simtools/model/site_model.py +3 -3
  61. simtools/production_configuration/calculate_statistical_errors_grid_point.py +119 -144
  62. simtools/production_configuration/event_scaler.py +7 -17
  63. simtools/production_configuration/generate_simulation_config.py +5 -32
  64. simtools/production_configuration/interpolation_handler.py +8 -11
  65. simtools/ray_tracing/mirror_panel_psf.py +47 -27
  66. simtools/runners/corsika_runner.py +14 -3
  67. simtools/runners/corsika_simtel_runner.py +3 -1
  68. simtools/runners/runner_services.py +3 -3
  69. simtools/runners/simtel_runner.py +27 -8
  70. simtools/schemas/input/MST_mirror_2f_measurements.schema.yml +39 -0
  71. simtools/schemas/input/single_pe_spectrum.schema.yml +38 -0
  72. simtools/schemas/integration_tests_config.metaschema.yml +23 -3
  73. simtools/schemas/model_parameter.metaschema.yml +95 -2
  74. simtools/schemas/model_parameter_and_data_schema.metaschema.yml +2 -0
  75. simtools/schemas/model_parameters/array_element_position_utm.schema.yml +1 -1
  76. simtools/schemas/model_parameters/array_window.schema.yml +37 -0
  77. simtools/schemas/model_parameters/asum_clipping.schema.yml +0 -4
  78. simtools/schemas/model_parameters/channels_per_chip.schema.yml +1 -1
  79. simtools/schemas/model_parameters/corsika_iact_io_buffer.schema.yml +2 -2
  80. simtools/schemas/model_parameters/dsum_clipping.schema.yml +0 -2
  81. simtools/schemas/model_parameters/dsum_ignore_below.schema.yml +0 -2
  82. simtools/schemas/model_parameters/dsum_offset.schema.yml +0 -2
  83. simtools/schemas/model_parameters/dsum_pedsub.schema.yml +0 -2
  84. simtools/schemas/model_parameters/dsum_pre_clipping.schema.yml +0 -2
  85. simtools/schemas/model_parameters/dsum_prescale.schema.yml +0 -2
  86. simtools/schemas/model_parameters/dsum_presum_max.schema.yml +0 -2
  87. simtools/schemas/model_parameters/dsum_presum_shift.schema.yml +0 -2
  88. simtools/schemas/model_parameters/dsum_shaping.schema.yml +0 -2
  89. simtools/schemas/model_parameters/dsum_shaping_renormalize.schema.yml +0 -2
  90. simtools/schemas/model_parameters/dsum_threshold.schema.yml +0 -2
  91. simtools/schemas/model_parameters/dsum_zero_clip.schema.yml +0 -2
  92. simtools/schemas/model_parameters/effective_focal_length.schema.yml +31 -1
  93. simtools/schemas/model_parameters/fadc_compensate_pedestal.schema.yml +1 -1
  94. simtools/schemas/model_parameters/fadc_lg_compensate_pedestal.schema.yml +1 -1
  95. simtools/schemas/model_parameters/fadc_noise.schema.yml +3 -3
  96. simtools/schemas/model_parameters/fake_mirror_list.schema.yml +33 -0
  97. simtools/schemas/model_parameters/laser_photons.schema.yml +2 -2
  98. simtools/schemas/model_parameters/secondary_mirror_degraded_reflection.schema.yml +1 -1
  99. simtools/schemas/production_configuration_metrics.schema.yml +68 -0
  100. simtools/schemas/production_tables.schema.yml +41 -0
  101. simtools/simtel/simtel_config_writer.py +5 -6
  102. simtools/simtel/simtel_io_histogram.py +32 -67
  103. simtools/simtel/simtel_io_histograms.py +15 -30
  104. simtools/simtel/simtel_table_reader.py +410 -0
  105. simtools/simtel/simulator_array.py +2 -1
  106. simtools/simtel/simulator_camera_efficiency.py +11 -4
  107. simtools/simtel/simulator_light_emission.py +5 -3
  108. simtools/simtel/simulator_ray_tracing.py +2 -2
  109. simtools/simulator.py +80 -33
  110. simtools/testing/configuration.py +12 -8
  111. simtools/testing/helpers.py +9 -16
  112. simtools/testing/validate_output.py +152 -68
  113. simtools/utils/general.py +149 -12
  114. simtools/utils/names.py +25 -21
  115. simtools/utils/value_conversion.py +9 -1
  116. simtools/visualization/plot_tables.py +106 -0
  117. simtools/visualization/visualize.py +43 -5
  118. simtools/applications/db_add_model_parameters_from_repository_to_db.py +0 -184
  119. simtools/db/db_array_elements.py +0 -130
  120. simtools/db/db_from_repo_handler.py +0 -106
  121. {gammasimtools-0.8.2.dist-info → gammasimtools-0.10.0.dist-info}/LICENSE +0 -0
  122. {gammasimtools-0.8.2.dist-info → gammasimtools-0.10.0.dist-info}/top_level.txt +0 -0
@@ -9,7 +9,7 @@ import numpy as np
9
9
  from astropy.table import QTable
10
10
 
11
11
  import simtools.utils.general as gen
12
- from simtools.data_model import data_reader
12
+ from simtools.data_model import data_reader, schema
13
13
  from simtools.io_operations import io_handler
14
14
  from simtools.layout.geo_coordinates import GeoCoordinates
15
15
  from simtools.layout.telescope_position import TelescopePosition
@@ -386,7 +386,9 @@ class ArrayLayout:
386
386
  with Path(file_name).open("r", encoding="utf-8") as file:
387
387
  data = json.load(file)
388
388
 
389
- position = gen.convert_string_to_list(data["value"])
389
+ position = data["value"]
390
+ if isinstance(position, str):
391
+ position = gen.convert_string_to_list(position)
390
392
  self.site = data.get("site", None)
391
393
 
392
394
  table = QTable()
@@ -579,7 +581,12 @@ class ArrayLayout:
579
581
 
580
582
  return table
581
583
 
582
- def export_one_telescope_as_json(self, crs_name):
584
+ def export_one_telescope_as_json(
585
+ self,
586
+ crs_name,
587
+ parameter_version=None,
588
+ schema_version=None,
589
+ ):
583
590
  """
584
591
  Return a list containing a single telescope in simtools-DB-style json.
585
592
 
@@ -587,6 +594,8 @@ class ArrayLayout:
587
594
  ----------
588
595
  crs_name: str
589
596
  Name of coordinate system to be used for export.
597
+ schema_version: str
598
+ Version of the schema.
590
599
 
591
600
  Returns
592
601
  -------
@@ -596,43 +605,39 @@ class ArrayLayout:
596
605
  table = self.export_telescope_list_table(crs_name)
597
606
  if len(table) != 1:
598
607
  raise ValueError("Only one telescope can be exported to json")
599
- parameter_name = value_string = None
608
+ parameter_name = value = None
600
609
  if crs_name == "ground":
601
610
  parameter_name = "array_element_position_ground"
602
- value_string = gen.convert_list_to_string(
603
- [
604
- table["position_x"][0].value,
605
- table["position_y"][0].value,
606
- table["position_z"][0].value,
607
- ]
608
- )
611
+ value = [
612
+ table["position_x"][0].value,
613
+ table["position_y"][0].value,
614
+ table["position_z"][0].value,
615
+ ]
609
616
  elif crs_name == "utm":
610
617
  parameter_name = "array_element_position_utm"
611
- value_string = gen.convert_list_to_string(
612
- [
613
- table["utm_east"][0].value,
614
- table["utm_north"][0].value,
615
- table["altitude"][0].value,
616
- ]
617
- )
618
+ value = [
619
+ table["utm_east"][0].value,
620
+ table["utm_north"][0].value,
621
+ table["altitude"][0].value,
622
+ ]
618
623
  elif crs_name == "mercator":
619
624
  parameter_name = "array_element_position_mercator"
620
- value_string = gen.convert_list_to_string(
621
- [
622
- table["latitude"][0].value,
623
- table["longitude"][0].value,
624
- table["altitude"][0].value,
625
- ]
626
- )
625
+ value = [
626
+ table["latitude"][0].value,
627
+ table["longitude"][0].value,
628
+ table["altitude"][0].value,
629
+ ]
630
+
627
631
  return {
632
+ "schema_version": schema.get_model_parameter_schema_version(schema_version),
628
633
  "parameter": parameter_name,
629
634
  "instrument": table["telescope_name"][0],
630
635
  "site": self.site,
631
- "version": self.model_version,
632
- "value": value_string,
636
+ "parameter_version": parameter_version,
637
+ "unique_id": None,
638
+ "value": value,
633
639
  "unit": "m",
634
640
  "type": "float64",
635
- "applicable": True,
636
641
  "file": False,
637
642
  }
638
643
 
@@ -6,8 +6,8 @@ from pathlib import Path
6
6
  import astropy.units as u
7
7
  from astropy.table import QTable
8
8
 
9
- from simtools.data_model import data_reader
10
- from simtools.db import db_array_elements, db_handler
9
+ from simtools.data_model import data_reader, schema
10
+ from simtools.db import db_handler
11
11
  from simtools.io_operations import io_handler
12
12
  from simtools.model.site_model import SiteModel
13
13
  from simtools.model.telescope_model import TelescopeModel
@@ -290,7 +290,13 @@ class ArrayModel:
290
290
  }
291
291
 
292
292
  def _get_telescope_position_parameter(
293
- self, telescope_name: str, site: str, x: u.Quantity, y: u.Quantity, z: u.Quantity
293
+ self,
294
+ telescope_name: str,
295
+ site: str,
296
+ x: u.Quantity,
297
+ y: u.Quantity,
298
+ z: u.Quantity,
299
+ parameter_version: str | None = None,
294
300
  ) -> dict:
295
301
  """
296
302
  Return dictionary with telescope position parameters (following DB model database format).
@@ -314,16 +320,17 @@ class ArrayModel:
314
320
  Dict with telescope position parameters.
315
321
  """
316
322
  return {
323
+ "schema_version": schema.get_model_parameter_schema_version(),
317
324
  "parameter": "array_element_position_ground",
318
325
  "instrument": telescope_name,
319
326
  "site": site,
320
- "version": self.model_version,
327
+ "parameter_version": parameter_version,
328
+ "unique_id": None,
321
329
  "value": general.convert_list_to_string(
322
330
  [x.to("m").value, y.to("m").value, z.to("m").value]
323
331
  ),
324
332
  "unit": "m",
325
333
  "type": "float64",
326
- "applicable": True,
327
334
  "file": False,
328
335
  }
329
336
 
@@ -367,9 +374,8 @@ class ArrayModel:
367
374
  dict
368
375
  Dict with array elements.
369
376
  """
370
- all_elements = db_array_elements.get_array_elements_of_type(
377
+ all_elements = self.db.get_array_elements_of_type(
371
378
  array_element_type=array_element_type,
372
- db=self.db,
373
379
  model_version=self.model_version,
374
380
  collection="telescopes",
375
381
  )
simtools/model/camera.py CHANGED
@@ -5,8 +5,6 @@ from pathlib import Path
5
5
 
6
6
  import astropy.units as u
7
7
  import numpy as np
8
- from scipy.spatial import cKDTree as KDTree
9
- from scipy.spatial import distance
10
8
 
11
9
  from simtools.utils.geometry import rotate
12
10
 
@@ -304,6 +302,8 @@ class Camera:
304
302
  float
305
303
  The camera fill factor.
306
304
  """
305
+ from scipy.spatial import distance # pylint: disable=import-outside-toplevel
306
+
307
307
  if self.pixels["pixel_spacing"] == 9999:
308
308
  points = np.array([self.pixels["x"], self.pixels["y"]]).T
309
309
  pixel_distances = distance.cdist(points, points, "euclidean")
@@ -403,6 +403,8 @@ class Camera:
403
403
  list of lists
404
404
  Array of neighbor indices in a list for each pixel
405
405
  """
406
+ from scipy.spatial import cKDTree as KDTree # pylint: disable=import-outside-toplevel
407
+
406
408
  tree = KDTree(np.column_stack([x_pos, y_pos]))
407
409
  neighbors = tree.query_ball_tree(tree, radius)
408
410
  return [list(np.setdiff1d(neigh, [i])) for i, neigh in enumerate(neighbors)]
@@ -6,10 +6,12 @@ import shutil
6
6
  from copy import copy
7
7
 
8
8
  import astropy.units as u
9
+ from astropy.table import Table
9
10
 
10
11
  import simtools.utils.general as gen
11
12
  from simtools.db import db_handler
12
13
  from simtools.io_operations import io_handler
14
+ from simtools.simtel import simtel_table_reader
13
15
  from simtools.simtel.simtel_config_writer import SimtelConfigWriter
14
16
  from simtools.utils import names
15
17
 
@@ -65,7 +67,6 @@ class ModelParameter:
65
67
 
66
68
  self._parameters = {}
67
69
  self._simulation_config_parameters = {"corsika": {}, "simtel": {}}
68
- self._derived = None
69
70
  self.collection = collection
70
71
  self.label = label
71
72
  self.model_version = model_version
@@ -109,12 +110,8 @@ class ModelParameter:
109
110
  """
110
111
  try:
111
112
  return self._parameters[par_name]
112
- except KeyError:
113
- pass
114
- try:
115
- return self.derived[par_name]
116
113
  except (KeyError, ValueError) as e:
117
- msg = f"Parameter {par_name} was not found in the model"
114
+ msg = f"Parameter {par_name} was not found in the model {self.name}, {self.site}."
118
115
  self._logger.error(msg)
119
116
  raise InvalidModelParameterError(msg) from e
120
117
 
@@ -178,7 +175,10 @@ class ModelParameter:
178
175
  _value = self.get_parameter_value(par_name, _parameter)
179
176
 
180
177
  try:
181
- _unit = [item.strip() for item in _parameter.get("unit").split(",")]
178
+ if isinstance(_parameter.get("unit"), str):
179
+ _unit = [item.strip() for item in _parameter.get("unit").split(",")]
180
+ else:
181
+ _unit = _parameter.get("unit")
182
182
 
183
183
  # if there is only one value or the values share one unit
184
184
  if (isinstance(_value, (int | float))) or (len(_value) > len(_unit)):
@@ -239,33 +239,6 @@ class ModelParameter:
239
239
  self._logger.debug(f"Parameter {par_name} does not have a file associated with it.")
240
240
  return False
241
241
 
242
- @property
243
- def derived(self):
244
- """Load the derived values and export them if the class instance hasn't done it yet."""
245
- if self._derived is None:
246
- self._load_derived_values()
247
- self._export_derived_files()
248
- return self._derived
249
-
250
- def _load_derived_values(self):
251
- """Load derived values from the DB."""
252
- self._logger.debug("Reading derived values from DB")
253
- self._derived = self.db.get_derived_values(
254
- self.site,
255
- self.name,
256
- self.model_version,
257
- )
258
-
259
- def _export_derived_files(self):
260
- """Write to disk a file from the derived values DB."""
261
- for par_now in self.derived.values():
262
- if par_now.get("File") or par_now.get("file"):
263
- self.db.export_file_db(
264
- db_name=self.db.DB_DERIVED_VALUES,
265
- dest=self.config_file_directory,
266
- file_name=(par_now.get("value") or par_now.get("Value")),
267
- )
268
-
269
242
  def print_parameters(self):
270
243
  """Print parameters and their values for debugging purposes."""
271
244
  for par in self._parameters:
@@ -273,7 +246,7 @@ class ModelParameter:
273
246
 
274
247
  def _set_config_file_directory_and_name(self):
275
248
  """Set and create the directory and the name of the config file."""
276
- if self.name is None:
249
+ if self.name is None and self.site is None:
277
250
  return
278
251
 
279
252
  self._config_file_directory = self.io_handler.get_output_directory(
@@ -281,15 +254,14 @@ class ModelParameter:
281
254
  )
282
255
 
283
256
  # Setting file name and the location
284
- if self.site is not None and self.name is not None:
285
- config_file_name = names.simtel_config_file_name(
286
- self.site,
287
- self.model_version,
288
- telescope_model_name=self.name,
289
- label=self.label,
290
- extra_label=self._extra_label,
291
- )
292
- self._config_file_path = self.config_file_directory.joinpath(config_file_name)
257
+ config_file_name = names.simtel_config_file_name(
258
+ self.site,
259
+ self.model_version,
260
+ telescope_model_name=self.name,
261
+ label=self.label,
262
+ extra_label=self._extra_label,
263
+ )
264
+ self._config_file_path = self.config_file_directory.joinpath(config_file_name)
293
265
 
294
266
  self._logger.debug(f"Config file path: {self._config_file_path}")
295
267
 
@@ -321,10 +293,11 @@ class ModelParameter:
321
293
  simulation_software=simulation_software,
322
294
  )
323
295
  )
324
- except ValueError:
296
+ except ValueError as exc:
325
297
  self._logger.warning(
326
298
  f"No {simulation_software} parameters found for "
327
- f"{self.site}, {self.name} (model version {self.model_version})."
299
+ f"{self.site}, {self.name} (model version {self.model_version}). "
300
+ f" (Query {exc})"
328
301
  )
329
302
 
330
303
  def _load_parameters_from_db(self):
@@ -334,15 +307,18 @@ class ModelParameter:
334
307
 
335
308
  if self.name is not None:
336
309
  self._parameters = self.db.get_model_parameters(
337
- self.site, self.name, self.model_version, self.collection, only_applicable=True
310
+ self.site, self.name, self.collection, self.model_version
338
311
  )
339
312
 
340
313
  if self.site is not None:
341
- _site_pars = self.db.get_site_parameters(
342
- self.site, self.model_version, only_applicable=True
314
+ self._parameters.update(
315
+ self.db.get_model_parameters(
316
+ self.site,
317
+ None,
318
+ "sites",
319
+ self.model_version,
320
+ )
343
321
  )
344
- self._parameters.update(_site_pars)
345
-
346
322
  self._load_simulation_software_parameter()
347
323
 
348
324
  def set_extra_label(self, extra_label):
@@ -368,7 +344,7 @@ class ModelParameter:
368
344
  """Return the extra label if defined, if not return ''."""
369
345
  return self._extra_label if self._extra_label is not None else ""
370
346
 
371
- def get_simtel_parameters(self, parameters=None, telescope_model=True, site_model=True):
347
+ def get_simtel_parameters(self, parameters=None):
372
348
  """
373
349
  Get simtel parameters as name and value pairs.
374
350
 
@@ -376,10 +352,6 @@ class ModelParameter:
376
352
  ----------
377
353
  parameters: dict
378
354
  Parameters (simtools) to be renamed (if necessary)
379
- telescope_model: bool
380
- If True, telescope model parameters are included.
381
- site_model: bool
382
- If True, site model parameters are included.
383
355
 
384
356
  Returns
385
357
  -------
@@ -393,10 +365,7 @@ class ModelParameter:
393
365
  _simtel_parameter_value = {}
394
366
  for key in parameters:
395
367
  _par_name = names.get_simulation_software_name_from_parameter_name(
396
- key,
397
- simulation_software="sim_telarray",
398
- search_telescope_parameters=telescope_model,
399
- search_site_parameters=site_model,
368
+ key, simulation_software="sim_telarray"
400
369
  )
401
370
  if _par_name is not None:
402
371
  _simtel_parameter_value[_par_name] = parameters[key].get("value")
@@ -512,9 +481,38 @@ class ModelParameter:
512
481
  for par in self._added_parameter_files:
513
482
  pars_from_db.pop(par)
514
483
 
515
- self.db.export_model_files(pars_from_db, self.config_file_directory)
484
+ self.db.export_model_files(parameters=pars_from_db, dest=self.config_file_directory)
516
485
  self._is_exported_model_files_up_to_date = True
517
486
 
487
+ def get_model_file_as_table(self, par_name):
488
+ """
489
+ Return tabular data from file as astropy table.
490
+
491
+ Parameters
492
+ ----------
493
+ par_name: str
494
+ Name of the parameter.
495
+
496
+ Returns
497
+ -------
498
+ Table
499
+ Astropy table.
500
+ """
501
+ _par_entry = {}
502
+ try:
503
+ _par_entry[par_name] = self._parameters[par_name]
504
+ except KeyError as exc:
505
+ raise ValueError(f"Parameter {par_name} not found in the model.") from exc
506
+ self.db.export_model_files(parameters=_par_entry, dest=self.config_file_directory)
507
+ if _par_entry[par_name]["value"].endswith("ecsv"):
508
+ return Table.read(
509
+ self.config_file_directory.joinpath(_par_entry[par_name]["value"]),
510
+ format="ascii.ecsv",
511
+ )
512
+ return simtel_table_reader.read_simtel_table(
513
+ par_name, self.config_file_directory.joinpath(_par_entry[par_name]["value"])
514
+ )
515
+
518
516
  def export_config_file(self):
519
517
  """Export the config file used by sim_telarray."""
520
518
  # Exporting model file
@@ -590,7 +588,7 @@ class ModelParameter:
590
588
  Model directory to export the file to.
591
589
  """
592
590
  self.db.export_model_files(
593
- {
591
+ parameters={
594
592
  "nsb_spectrum_at_2200m": {
595
593
  "value": self._simulation_config_parameters["simtel"][
596
594
  "correct_nsb_spectrum_to_telescope_altitude"
@@ -598,5 +596,5 @@ class ModelParameter:
598
596
  "file": True,
599
597
  }
600
598
  },
601
- model_directory,
599
+ dest=model_directory,
602
600
  )
@@ -80,7 +80,7 @@ class SiteModel(ModelParameter):
80
80
  Site-related CORSIKA parameters as dict
81
81
  """
82
82
  if config_file_style:
83
- model_directory = model_directory or Path("")
83
+ model_directory = model_directory or Path()
84
84
  return {
85
85
  "OBSLEV": [
86
86
  self.get_parameter_value_with_unit("corsika_observation_level").to_value("cm")
@@ -151,11 +151,11 @@ class SiteModel(ModelParameter):
151
151
  Model directory to export the file to.
152
152
  """
153
153
  self.db.export_model_files(
154
- {
154
+ parameters={
155
155
  "atmospheric_transmission_file": {
156
156
  "value": self.get_parameter_value("atmospheric_profile"),
157
157
  "file": True,
158
158
  }
159
159
  },
160
- model_directory,
160
+ dest=model_directory,
161
161
  )