gammasimtools 0.10.0__py3-none-any.whl → 0.12.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 (84) hide show
  1. {gammasimtools-0.10.0.dist-info → gammasimtools-0.12.0.dist-info}/METADATA +3 -1
  2. {gammasimtools-0.10.0.dist-info → gammasimtools-0.12.0.dist-info}/RECORD +84 -77
  3. {gammasimtools-0.10.0.dist-info → gammasimtools-0.12.0.dist-info}/WHEEL +1 -1
  4. {gammasimtools-0.10.0.dist-info → gammasimtools-0.12.0.dist-info}/entry_points.txt +4 -0
  5. simtools/_version.py +9 -4
  6. simtools/applications/convert_all_model_parameters_from_simtel.py +0 -1
  7. simtools/applications/convert_model_parameter_from_simtel.py +0 -1
  8. simtools/applications/db_add_file_to_db.py +0 -1
  9. simtools/applications/db_get_parameter_from_db.py +7 -28
  10. simtools/applications/derive_mirror_rnda.py +1 -2
  11. simtools/applications/derive_psf_parameters.py +1 -0
  12. simtools/applications/docs_produce_array_element_report.py +71 -0
  13. simtools/applications/docs_produce_model_parameter_reports.py +63 -0
  14. simtools/applications/generate_corsika_histograms.py +2 -2
  15. simtools/applications/generate_regular_arrays.py +4 -2
  16. simtools/applications/production_derive_limits.py +95 -0
  17. simtools/applications/production_generate_simulation_config.py +15 -29
  18. simtools/applications/production_scale_events.py +2 -7
  19. simtools/applications/run_application.py +165 -0
  20. simtools/applications/simulate_light_emission.py +0 -4
  21. simtools/applications/submit_model_parameter_from_external.py +11 -6
  22. simtools/applications/validate_file_using_schema.py +3 -3
  23. simtools/configuration/commandline_parser.py +30 -1
  24. simtools/configuration/configurator.py +8 -10
  25. simtools/corsika/corsika_config.py +11 -10
  26. simtools/corsika/corsika_histograms.py +4 -6
  27. simtools/corsika/corsika_histograms_visualize.py +2 -4
  28. simtools/data_model/metadata_collector.py +18 -9
  29. simtools/data_model/model_data_writer.py +67 -15
  30. simtools/data_model/schema.py +10 -3
  31. simtools/data_model/validate_data.py +70 -24
  32. simtools/db/db_handler.py +46 -14
  33. simtools/dependencies.py +112 -0
  34. simtools/layout/array_layout.py +5 -4
  35. simtools/model/model_parameter.py +35 -2
  36. simtools/production_configuration/calculate_statistical_errors_grid_point.py +5 -6
  37. simtools/production_configuration/event_scaler.py +3 -19
  38. simtools/production_configuration/generate_simulation_config.py +4 -12
  39. simtools/production_configuration/interpolation_handler.py +2 -5
  40. simtools/production_configuration/limits_calculation.py +202 -0
  41. simtools/reporting/docs_read_parameters.py +310 -0
  42. simtools/runners/corsika_simtel_runner.py +1 -3
  43. simtools/schemas/{integration_tests_config.metaschema.yml → application_workflow.metaschema.yml} +51 -27
  44. simtools/schemas/array_elements.yml +8 -0
  45. simtools/schemas/model_parameter.metaschema.yml +96 -0
  46. simtools/schemas/model_parameter_and_data_schema.metaschema.yml +2 -1
  47. simtools/schemas/model_parameters/correct_nsb_spectrum_to_telescope_altitude.schema.yml +1 -1
  48. simtools/schemas/model_parameters/corsika_cherenkov_photon_bunch_size.schema.yml +2 -0
  49. simtools/schemas/model_parameters/corsika_cherenkov_photon_wavelength_range.schema.yml +2 -0
  50. simtools/schemas/model_parameters/corsika_first_interaction_height.schema.yml +2 -0
  51. simtools/schemas/model_parameters/corsika_iact_io_buffer.schema.yml +2 -0
  52. simtools/schemas/model_parameters/corsika_iact_max_bunches.schema.yml +2 -0
  53. simtools/schemas/model_parameters/corsika_iact_split_auto.schema.yml +2 -0
  54. simtools/schemas/model_parameters/corsika_longitudinal_shower_development.schema.yml +2 -0
  55. simtools/schemas/model_parameters/corsika_particle_kinetic_energy_cutoff.schema.yml +2 -0
  56. simtools/schemas/model_parameters/corsika_starting_grammage.schema.yml +2 -0
  57. simtools/schemas/model_parameters/iobuf_maximum.schema.yml +1 -1
  58. simtools/schemas/model_parameters/iobuf_output_maximum.schema.yml +1 -1
  59. simtools/schemas/model_parameters/lightguide_efficiency_vs_incidence_angle.schema.yml +1 -1
  60. simtools/schemas/model_parameters/lightguide_efficiency_vs_wavelength.schema.yml +1 -1
  61. simtools/schemas/model_parameters/min_photoelectrons.schema.yml +1 -1
  62. simtools/schemas/model_parameters/min_photons.schema.yml +1 -1
  63. simtools/schemas/model_parameters/random_generator.schema.yml +1 -1
  64. simtools/schemas/model_parameters/sampled_output.schema.yml +1 -1
  65. simtools/schemas/model_parameters/save_pe_with_amplitude.schema.yml +1 -1
  66. simtools/schemas/model_parameters/store_photoelectrons.schema.yml +1 -1
  67. simtools/schemas/model_parameters/tailcut_scale.schema.yml +1 -1
  68. simtools/schemas/production_tables.schema.yml +1 -1
  69. simtools/simtel/simtel_config_reader.py +1 -2
  70. simtools/simtel/simtel_config_writer.py +1 -2
  71. simtools/simtel/simtel_io_histogram.py +0 -1
  72. simtools/simtel/simtel_io_histograms.py +2 -4
  73. simtools/simtel/simulator_camera_efficiency.py +1 -3
  74. simtools/simtel/simulator_light_emission.py +2 -5
  75. simtools/simtel/simulator_ray_tracing.py +1 -3
  76. simtools/testing/configuration.py +2 -1
  77. simtools/testing/validate_output.py +23 -13
  78. simtools/utils/general.py +12 -2
  79. simtools/utils/names.py +290 -152
  80. simtools/utils/value_conversion.py +20 -14
  81. simtools/version.py +2 -2
  82. simtools/visualization/legend_handlers.py +2 -0
  83. {gammasimtools-0.10.0.dist-info → gammasimtools-0.12.0.dist-info}/LICENSE +0 -0
  84. {gammasimtools-0.10.0.dist-info → gammasimtools-0.12.0.dist-info}/top_level.txt +0 -0
@@ -87,7 +87,7 @@ def get_value_unit_type(value, unit_str=None):
87
87
  return base_value, _unit_as_string(base_unit), base_type
88
88
 
89
89
 
90
- def split_value_and_unit(value):
90
+ def split_value_and_unit(value, is_integer=False):
91
91
  """
92
92
  Split a value into its value and unit.
93
93
 
@@ -98,6 +98,8 @@ def split_value_and_unit(value):
98
98
  ----------
99
99
  value: str, int, float, bool, u.Quantity
100
100
  Value to be parsed.
101
+ is_integer: bool
102
+ Flag to indicate if the value is an integer.
101
103
 
102
104
  Returns
103
105
  -------
@@ -105,40 +107,44 @@ def split_value_and_unit(value):
105
107
  Value and units as (value, unit), or lists of values and unites
106
108
  """
107
109
  if isinstance(value, u.Quantity):
108
- return _split_value_is_quantity(value)
110
+ return _split_value_is_quantity(value, is_integer)
109
111
  if isinstance(value, str):
110
- return _split_value_is_string(value)
112
+ return _split_value_is_string(value, is_integer)
111
113
  if isinstance(value, list | np.ndarray):
112
- return _split_value_is_list(value)
114
+ return _split_value_is_list(value, is_integer)
113
115
  return value, None
114
116
 
115
117
 
116
- def _split_value_is_quantity(value):
118
+ def _split_value_is_quantity(value, is_integer=False):
117
119
  """Split value and unit for an astropy Quantity."""
118
- if isinstance(value.value, list | np.ndarray): # type [100.0, 200] * u.m,
119
- return list(value.value), [str(value.unit)] * len(value)
120
- return value.value, str(value.unit)
120
+ if isinstance(value.value, list | np.ndarray): # type [100.0, 200] * u.m
121
+ return [int(v) if is_integer else v for v in value.value], [str(value.unit)] * len(value)
122
+ return int(value.value) if is_integer else value.value, str(value.unit)
121
123
 
122
124
 
123
- def _split_value_is_string(value):
124
- """Split vale and unit for a string."""
125
+ def _split_value_is_string(value, is_integer=False):
126
+ """Split value and unit for a string."""
125
127
  if value.isdigit(): # single integer value
126
128
  return int(value), None
127
129
  try: # single value with/without unit
128
- return u.Quantity(value).value, str(u.Quantity(value).unit)
130
+ quantity = u.Quantity(value)
131
+ unit = str(quantity.unit)
132
+ if unit.isdigit(): # cases where numbers are wrongly identified as units
133
+ raise ValueError
134
+ return (int(quantity.value), unit) if is_integer else (quantity.value, unit)
129
135
  except ValueError:
130
- return _split_value_is_list(gen.convert_string_to_list(value))
136
+ return _split_value_is_list(gen.convert_string_to_list(value), is_integer)
131
137
  except TypeError: # string value (not numerical)
132
138
  return value, None
133
139
 
134
140
 
135
- def _split_value_is_list(value):
141
+ def _split_value_is_list(value, is_integer=False):
136
142
  """Split value and unit for a list."""
137
143
  value_list = []
138
144
  unit_list = []
139
145
  for item in value:
140
146
  _value, _unit = split_value_and_unit(item)
141
- value_list.append(_value)
147
+ value_list.append(int(_value) if is_integer else _value)
142
148
  if isinstance(_unit, str):
143
149
  unit_list.append(_unit)
144
150
  else:
simtools/version.py CHANGED
@@ -9,11 +9,11 @@ try:
9
9
  from ._dev_version import version
10
10
  except ImportError:
11
11
  from ._version import version
12
- except Exception:
12
+ except Exception: # pylint: disable=broad-except
13
13
  import warnings
14
14
 
15
15
  warnings.warn("Could not determine simtools version; this indicates a broken installation.")
16
16
  del warnings
17
- version = "0.0.0"
17
+ version = "0.0.0" # pylint: disable=invalid-name
18
18
 
19
19
  __version__ = version
@@ -71,6 +71,7 @@ class TelescopeHandler:
71
71
  def __init__(self, radius=None):
72
72
  self.colors_dict = {
73
73
  "LSTN": "darkorange",
74
+ "MSTx": "dodgerblue",
74
75
  "MSTN": "dodgerblue",
75
76
  "LSTS": "darkorange",
76
77
  "MSTS": "dodgerblue",
@@ -84,6 +85,7 @@ class TelescopeHandler:
84
85
  # hardwired values; this is for plotting purposes only
85
86
  self.radius_dict = {
86
87
  "LSTN": 12.5,
88
+ "MSTx": 9.15,
87
89
  "MSTN": 9.15,
88
90
  "LSTS": 12.5,
89
91
  "MSTS": 9.15,