gammasimtools 0.11.0__py3-none-any.whl → 0.13.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 (83) hide show
  1. {gammasimtools-0.11.0.dist-info → gammasimtools-0.13.0.dist-info}/METADATA +1 -1
  2. {gammasimtools-0.11.0.dist-info → gammasimtools-0.13.0.dist-info}/RECORD +66 -79
  3. {gammasimtools-0.11.0.dist-info → gammasimtools-0.13.0.dist-info}/WHEEL +1 -1
  4. {gammasimtools-0.11.0.dist-info → gammasimtools-0.13.0.dist-info}/entry_points.txt +2 -1
  5. simtools/_version.py +2 -2
  6. simtools/applications/convert_all_model_parameters_from_simtel.py +77 -88
  7. simtools/applications/convert_geo_coordinates_of_array_elements.py +1 -1
  8. simtools/applications/db_get_parameter_from_db.py +52 -22
  9. simtools/applications/derive_photon_electron_spectrum.py +1 -1
  10. simtools/applications/docs_produce_array_element_report.py +1 -10
  11. simtools/applications/docs_produce_model_parameter_reports.py +4 -17
  12. simtools/applications/plot_tabular_data.py +14 -2
  13. simtools/applications/{production_derive_limits.py → production_derive_corsika_limits.py} +20 -8
  14. simtools/applications/production_extract_mc_event_data.py +125 -0
  15. simtools/applications/run_application.py +9 -10
  16. simtools/applications/submit_data_from_external.py +1 -1
  17. simtools/applications/submit_model_parameter_from_external.py +2 -1
  18. simtools/camera/single_photon_electron_spectrum.py +6 -2
  19. simtools/configuration/commandline_parser.py +1 -1
  20. simtools/constants.py +7 -0
  21. simtools/data_model/metadata_collector.py +159 -61
  22. simtools/data_model/model_data_writer.py +11 -55
  23. simtools/data_model/schema.py +2 -1
  24. simtools/data_model/validate_data.py +5 -3
  25. simtools/db/db_handler.py +119 -33
  26. simtools/model/model_parameter.py +0 -31
  27. simtools/production_configuration/derive_corsika_limits.py +260 -0
  28. simtools/production_configuration/extract_mc_event_data.py +253 -0
  29. simtools/ray_tracing/mirror_panel_psf.py +1 -1
  30. simtools/reporting/docs_read_parameters.py +164 -91
  31. simtools/schemas/metadata.metaschema.yml +7 -6
  32. simtools/schemas/model_parameter.metaschema.yml +0 -4
  33. simtools/schemas/model_parameter_and_data_schema.metaschema.yml +13 -5
  34. simtools/schemas/model_parameters/array_coordinates.schema.yml +1 -1
  35. simtools/schemas/model_parameters/array_layouts.schema.yml +3 -0
  36. simtools/schemas/model_parameters/asum_shaping.schema.yml +1 -1
  37. simtools/schemas/model_parameters/atmospheric_profile.schema.yml +1 -1
  38. simtools/schemas/model_parameters/camera_config_file.schema.yml +1 -1
  39. simtools/schemas/model_parameters/camera_degraded_map.schema.yml +1 -1
  40. simtools/schemas/model_parameters/camera_filter.schema.yml +1 -1
  41. simtools/schemas/model_parameters/dsum_shaping.schema.yml +1 -1
  42. simtools/schemas/model_parameters/fadc_dev_pedestal.schema.yml +1 -1
  43. simtools/schemas/model_parameters/fadc_lg_dev_pedestal.schema.yml +1 -1
  44. simtools/schemas/model_parameters/fadc_lg_max_sum.schema.yml +3 -3
  45. simtools/schemas/model_parameters/fadc_max_sum.schema.yml +3 -3
  46. simtools/schemas/model_parameters/fake_mirror_list.schema.yml +1 -1
  47. simtools/schemas/model_parameters/lightguide_efficiency_vs_incidence_angle.schema.yml +1 -1
  48. simtools/schemas/model_parameters/lightguide_efficiency_vs_wavelength.schema.yml +1 -1
  49. simtools/schemas/model_parameters/mirror_list.schema.yml +1 -1
  50. simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml +1 -1
  51. simtools/schemas/model_parameters/nsb_skymap.schema.yml +1 -1
  52. simtools/schemas/model_parameters/primary_mirror_degraded_map.schema.yml +1 -1
  53. simtools/schemas/model_parameters/primary_mirror_segmentation.schema.yml +1 -1
  54. simtools/schemas/model_parameters/secondary_mirror_degraded_map.schema.yml +1 -1
  55. simtools/schemas/model_parameters/secondary_mirror_segmentation.schema.yml +1 -1
  56. simtools/schemas/plot_configuration.metaschema.yml +162 -0
  57. simtools/schemas/production_tables.schema.yml +1 -1
  58. simtools/simtel/simtel_config_reader.py +85 -34
  59. simtools/simtel/simtel_table_reader.py +4 -0
  60. simtools/utils/general.py +50 -9
  61. simtools/utils/names.py +7 -2
  62. simtools/utils/value_conversion.py +6 -4
  63. simtools/visualization/plot_tables.py +25 -20
  64. simtools/visualization/visualize.py +71 -23
  65. simtools/_dev_version/__init__.py +0 -9
  66. simtools/applications/__init__.py +0 -0
  67. simtools/configuration/__init__.py +0 -0
  68. simtools/corsika/__init__.py +0 -0
  69. simtools/data_model/__init__.py +0 -0
  70. simtools/db/__init__.py +0 -0
  71. simtools/io_operations/__init__.py +0 -0
  72. simtools/job_execution/__init__.py +0 -0
  73. simtools/layout/__init__.py +0 -0
  74. simtools/model/__init__.py +0 -0
  75. simtools/production_configuration/limits_calculation.py +0 -202
  76. simtools/ray_tracing/__init__.py +0 -0
  77. simtools/runners/__init__.py +0 -0
  78. simtools/simtel/__init__.py +0 -0
  79. simtools/testing/__init__.py +0 -0
  80. simtools/utils/__init__.py +0 -0
  81. simtools/visualization/__init__.py +0 -0
  82. {gammasimtools-0.11.0.dist-info → gammasimtools-0.13.0.dist-info}/LICENSE +0 -0
  83. {gammasimtools-0.11.0.dist-info → gammasimtools-0.13.0.dist-info}/top_level.txt +0 -0
@@ -4,9 +4,13 @@ r"""Class to read and manage relevant model parameters for a given telescope mod
4
4
 
5
5
  import logging
6
6
  import textwrap
7
+ from collections import defaultdict
7
8
  from itertools import groupby
8
9
  from pathlib import Path
9
10
 
11
+ import numpy as np
12
+
13
+ from simtools.db import db_handler
10
14
  from simtools.io_operations import io_handler
11
15
  from simtools.model.telescope_model import TelescopeModel
12
16
  from simtools.utils import names
@@ -15,13 +19,16 @@ logger = logging.getLogger()
15
19
 
16
20
 
17
21
  class ReadParameters:
18
- """Read and manage model parameter data."""
22
+ """Read and manage model parameter data for report generation."""
19
23
 
20
- def __init__(self, db_config, telescope_model, output_path):
21
- """Initialise class with a telescope model."""
24
+ def __init__(self, db_config, args, output_path):
25
+ """Initialise class."""
22
26
  self._logger = logging.getLogger(__name__)
27
+ self.db = db_handler.DatabaseHandler(mongo_db_config=db_config)
23
28
  self.db_config = db_config
24
- self.telescope_model = telescope_model
29
+ self.array_element = args.get("telescope")
30
+ self.site = args.get("site")
31
+ self.model_version = args.get("model_version", None)
25
32
  self.output_path = output_path
26
33
 
27
34
  def _convert_to_md(self, input_file):
@@ -86,9 +93,9 @@ class ReadParameters:
86
93
 
87
94
  def get_array_element_parameter_data(self, telescope_model, collection="telescopes"):
88
95
  """
89
- Get model parameter data for a given array element.
96
+ Get model parameter data and descriptions for a given array element.
90
97
 
91
- Currently only configures for telescope.
98
+ Currently only configured for telescope.
92
99
 
93
100
  Parameters
94
101
  ----------
@@ -104,6 +111,7 @@ class ReadParameters:
104
111
  site=telescope_model.site,
105
112
  array_element_name=telescope_model.name,
106
113
  collection=collection,
114
+ model_version=telescope_model.model_version,
107
115
  )
108
116
 
109
117
  telescope_model.export_model_files()
@@ -140,75 +148,143 @@ class ReadParameters:
140
148
 
141
149
  return data
142
150
 
143
- def _compare_parameter_across_versions(self, parameter_name):
151
+ def _format_parameter_value(self, value_data, unit, file_flag):
152
+ """Format parameter value based on type."""
153
+ if file_flag:
154
+ input_file_name = f"{self.output_path}/model/{value_data}"
155
+ output_file_name = self._convert_to_md(input_file_name)
156
+ return f"[{Path(value_data).name}]({output_file_name})".strip()
157
+ if isinstance(value_data, (str | int | float)):
158
+ return f"{value_data} {unit}".strip()
159
+ if len(value_data) > 5 and np.allclose(value_data, value_data[0]):
160
+ return f"all: {value_data[0]} {unit}".strip()
161
+ return (
162
+ ", ".join(f"{v} {u}" for v, u in zip(value_data, unit))
163
+ if isinstance(unit, list)
164
+ else ", ".join(f"{v} {unit}" for v in value_data)
165
+ ).strip()
166
+
167
+ def _group_model_versions_by_parameter_version(self, grouped_data):
168
+ """Group model versions by parameter version and track the parameter values."""
169
+ result = {}
170
+
171
+ for parameter_name, items in grouped_data.items():
172
+ version_grouped = defaultdict(
173
+ lambda: {"model_versions": [], "value": None, "file_flag": None}
174
+ )
175
+
176
+ for item in items:
177
+ param_version = item["parameter_version"]
178
+ version_grouped[param_version]["model_versions"].append(item["model_version"])
179
+
180
+ if version_grouped[param_version]["value"] is None:
181
+ version_grouped[param_version]["value"] = item["value"]
182
+ version_grouped[param_version]["file_flag"] = item["file_flag"]
183
+
184
+ result[parameter_name] = [
185
+ {
186
+ "value": data["value"],
187
+ "parameter_version": param_version,
188
+ "file_flag": data["file_flag"],
189
+ "model_version": ", ".join(data["model_versions"]),
190
+ }
191
+ for param_version, data in version_grouped.items()
192
+ ]
193
+
194
+ return result
195
+
196
+ def _compare_parameter_across_versions(self, all_param_data, all_parameter_names):
144
197
  """
145
198
  Compare a parameter's value across different model versions.
146
199
 
147
200
  Parameters
148
201
  ----------
149
- parameter_name : str
150
- The name of the parameter to compare.
202
+ all_param_data : dict
203
+ The dictionary containing parameter data for all versions.
204
+
205
+ all_parameter_names : list
206
+ The list of parameter names to compare across versions.
151
207
 
152
208
  Returns
153
209
  -------
154
210
  list
155
- A list of dictionaries containing model version, parameter value, and description.
211
+ A list of dictionaries containing model version, parameter value, description.
156
212
  """
157
- all_versions = self.telescope_model.db.get_model_versions()
158
- all_versions.reverse()
159
- comparison_data = []
160
-
161
- for model_version in all_versions:
162
- telescope_model = TelescopeModel(
163
- site=self.telescope_model.site,
164
- telescope_name=self.telescope_model.name,
165
- model_version=model_version,
166
- label="reports",
167
- mongo_db_config=self.db_config,
213
+ all_versions = self.db.get_model_versions()
214
+ all_versions.reverse() # latest first
215
+ grouped_data = defaultdict(list)
216
+
217
+ # Iterate over each model version
218
+ for version in all_versions:
219
+ Path(f"{self.output_path}/model").mkdir(parents=True, exist_ok=True)
220
+
221
+ self.db.export_model_files(
222
+ parameters=all_param_data.get(version), dest=f"{self.output_path}/model"
168
223
  )
169
224
 
170
- if not telescope_model.has_parameter(parameter_name):
171
- return comparison_data
172
-
173
- parameter_data = self.get_array_element_parameter_data(telescope_model)
174
- for param in parameter_data:
175
- if param[1] == parameter_name:
176
- comparison_data.append(
177
- {
178
- "model_version": model_version,
179
- "parameter_version": param[2],
180
- "value": param[3],
181
- "description": param[4],
182
- }
183
- )
184
- break
185
- return comparison_data
225
+ parameter_dict = all_param_data.get(version, {})
226
+
227
+ for parameter_name in filter(parameter_dict.__contains__, all_parameter_names):
228
+ parameter_data = parameter_dict.get(parameter_name)
229
+
230
+ # Skip if instrument doesn't match
231
+ if parameter_data.get("instrument") != self.array_element:
232
+ continue
233
+
234
+ unit = parameter_data.get("unit") or " "
235
+ value_data = parameter_data.get("value")
236
+
237
+ if not value_data:
238
+ continue
239
+
240
+ file_flag = parameter_data.get("file", False)
241
+ value = self._format_parameter_value(value_data, unit, file_flag)
242
+ parameter_version = parameter_data.get("parameter_version")
243
+ model_version = version
244
+
245
+ # Group the data by parameter version and store model versions as a list
246
+ grouped_data[parameter_name].append(
247
+ {
248
+ "value": value,
249
+ "parameter_version": parameter_version,
250
+ "model_version": model_version,
251
+ "file_flag": file_flag,
252
+ }
253
+ )
254
+
255
+ return self._group_model_versions_by_parameter_version(grouped_data)
186
256
 
187
257
  def produce_array_element_report(self):
188
258
  """
189
259
  Produce a markdown report of all model parameters per array element.
190
260
 
191
- Output
192
- ----------
193
- One markdown report of a given array element listing parameter values,
261
+ Outputs one markdown report of a given array element listing parameter values,
194
262
  versions, and descriptions.
195
263
  """
196
- output_filename = Path(self.output_path / (self.telescope_model.name + ".md"))
264
+ telescope_model = TelescopeModel(
265
+ site=self.site,
266
+ telescope_name=self.array_element,
267
+ model_version=self.model_version,
268
+ label="reports",
269
+ mongo_db_config=self.db_config,
270
+ )
271
+
272
+ output_filename = Path(self.output_path / (telescope_model.name + ".md"))
197
273
  output_filename.parent.mkdir(parents=True, exist_ok=True)
198
- data = self.get_array_element_parameter_data(self.telescope_model)
274
+ data = self.get_array_element_parameter_data(telescope_model)
199
275
  # Sort data by class to prepare for grouping
200
276
  if not isinstance(data, str):
201
277
  data.sort(key=lambda x: (x[0], x[1]), reverse=True)
202
278
 
203
279
  with output_filename.open("w", encoding="utf-8") as file:
204
280
  # Group by class and write sections
205
- file.write(f"# {self.telescope_model.name}\n")
281
+ file.write(f"# {telescope_model.name}\n")
206
282
 
207
- if self.telescope_model.name != self.telescope_model.design_model:
283
+ if telescope_model.name != telescope_model.design_model:
208
284
  file.write(
209
285
  "The design model can be found here: "
210
- f"[{self.telescope_model.design_model}]"
211
- f"({self.telescope_model.design_model}.md).\n"
286
+ f"[{telescope_model.design_model}]"
287
+ f"({telescope_model.design_model}.md).\n"
212
288
  )
213
289
  file.write("\n\n")
214
290
 
@@ -249,62 +325,59 @@ class ReadParameters:
249
325
  """
250
326
  Produce a markdown report per parameter for a given array element.
251
327
 
252
- Output
253
- ----------
254
- One markdown report per model parameter of a given array element comparing
328
+ Outputs one markdown report per model parameter of a given array element comparing
255
329
  values across model versions.
256
330
  """
257
331
  logger.info(
258
- f"Comparing parameters across model versions for Telescope: {self.telescope_model.name}"
259
- f" and Site: {self.telescope_model.site}."
332
+ f"Comparing parameters across model versions for Telescope: {self.array_element}"
333
+ f" and Site: {self.site}."
260
334
  )
261
335
  io_handler_instance = io_handler.IOHandler()
262
336
  output_path = io_handler_instance.get_output_directory(
263
- label="reports", sub_dir=f"parameters/{self.telescope_model.name}"
337
+ label="reports", sub_dir=f"parameters/{self.array_element}"
264
338
  )
265
339
 
266
- all_params = self.telescope_model.db.get_model_parameters(
267
- site=self.telescope_model.site,
268
- array_element_name=self.telescope_model.name,
269
- collection="telescopes",
340
+ all_parameter_names = names.model_parameters(None).keys()
341
+ all_parameter_data = self.db.get_model_parameters_for_all_model_versions(
342
+ site=self.site, array_element_name=self.array_element, collection="telescopes"
270
343
  )
271
344
 
272
- for parameter in all_params:
273
- comparison_data = []
274
- if all_params[parameter]["instrument"] == self.telescope_model.name:
275
- comparison_data = self._compare_parameter_across_versions(parameter)
276
- if comparison_data:
277
- output_filename = output_path / f"{parameter}.md"
278
- with output_filename.open("w", encoding="utf-8") as file:
279
- # Write header
280
- file.write(
281
- f"# {parameter}\n\n"
282
- f"**Telescope**: {self.telescope_model.name}\n\n"
283
- f"**Description**: {comparison_data[0]['description']}\n\n"
284
- "\n"
285
- )
345
+ comparison_data = self._compare_parameter_across_versions(
346
+ all_parameter_data, all_parameter_names
347
+ )
286
348
 
287
- # Write table header
349
+ for parameter in all_parameter_names:
350
+ parameter_data = comparison_data.get(parameter)
351
+ if not parameter_data:
352
+ continue
353
+
354
+ output_filename = output_path / f"{parameter}.md"
355
+ description = self.get_all_parameter_descriptions()[0].get(parameter)
356
+ with output_filename.open("w", encoding="utf-8") as file:
357
+ # Write header
358
+ file.write(
359
+ f"# {parameter}\n\n"
360
+ f"**Telescope**: {self.array_element}\n\n"
361
+ f"**Description**: {description}\n\n"
362
+ "\n"
363
+ )
364
+
365
+ # Write table header
366
+ file.write(
367
+ "| Parameter Version | Model Version(s) "
368
+ "| Value |\n"
369
+ "|------------------------|--------------------"
370
+ "|----------------------|\n"
371
+ )
372
+
373
+ # Write table rows
374
+ for item in comparison_data.get(parameter):
288
375
  file.write(
289
- "| Model Version | Parameter Version "
290
- "| Value |\n"
291
- "|--------------------|------------------------"
292
- "|----------------------|\n"
376
+ f"| {item['parameter_version']} |"
377
+ f" {item['model_version']} |"
378
+ f"{item['value'].replace('](', '](../')} |\n"
293
379
  )
294
380
 
295
- # Write table rows
296
- for item in comparison_data:
297
- file.write(
298
- f"| {item['model_version']} |"
299
- f" {item['parameter_version']} |"
300
- f"{item['value'].replace('](', '](../')} |\n"
301
- )
302
-
303
- file.write("\n")
304
- if isinstance(comparison_data[0]["value"], str) and comparison_data[0][
305
- "value"
306
- ].endswith(".md)"):
307
- file.write(
308
- f"![Parameter plot.](_images/"
309
- f"{self.telescope_model.name}_{parameter}.png)"
310
- )
381
+ file.write("\n")
382
+ if comparison_data.get(parameter)[0]["file_flag"]:
383
+ file.write(f"![Parameter plot.](_images/{self.array_element}_{parameter}.png)")
@@ -51,9 +51,7 @@ definitions:
51
51
  Describes the person or institution that is responsible for this
52
52
  data product.
53
53
  required:
54
- - EMAIL
55
54
  - NAME
56
- - ORGANIZATION
57
55
  type: object
58
56
  additionalProperties: false
59
57
  properties:
@@ -90,10 +88,8 @@ definitions:
90
88
  links to the data model definition.
91
89
  required:
92
90
  - DATA
93
- - DESCRIPTION
94
91
  - FORMAT
95
92
  - ID
96
- - VALID
97
93
  type: object
98
94
  additionalProperties: false
99
95
  properties:
@@ -125,7 +121,6 @@ definitions:
125
121
  title: Data
126
122
  required:
127
123
  - CATEGORY
128
- - ASSOCIATION
129
124
  - LEVEL
130
125
  - MODEL
131
126
  type: object
@@ -346,7 +341,6 @@ definitions:
346
341
  associated ID.
347
342
  required:
348
343
  - TYPE
349
- - ID
350
344
  type: object
351
345
  additionalProperties: false
352
346
  properties:
@@ -524,6 +518,13 @@ definitions:
524
518
  - type: string
525
519
  - type: "null"
526
520
  default: null
521
+ AUTHOR:
522
+ description: |-
523
+ Author of document.
524
+ anyOf:
525
+ - type: string
526
+ - type: "null"
527
+ default: null
527
528
  ID:
528
529
  description: |-
529
530
  Unique identifier of document.
@@ -205,9 +205,6 @@ definitions:
205
205
  _id:
206
206
  type: string
207
207
  description: "DB unique identifier"
208
- applicable:
209
- type: boolean
210
- description: "Model parameter to be used for this telescope and site"
211
208
  entry_date:
212
209
  type: string
213
210
  description: "Value entry data"
@@ -257,7 +254,6 @@ definitions:
257
254
  - type: "null"
258
255
  description: "Model version."
259
256
  required:
260
- - applicable
261
257
  - file
262
258
  - instrument
263
259
  - site
@@ -115,6 +115,7 @@ definitions:
115
115
  - number
116
116
  - string
117
117
  - boolean
118
+ - "null"
118
119
  table_columns:
119
120
  type: array
120
121
  items:
@@ -265,12 +266,15 @@ definitions:
265
266
  - class
266
267
  title: Instrument
267
268
  InstrumentTypeElement:
268
- type: string
269
+ type:
270
+ - string
271
+ - "null"
269
272
  description: "specific type of instrument"
270
273
  enum:
271
274
  - Atmosphere
272
275
  - Observatory
273
276
  - None
277
+ - null
274
278
  title: InstrumentTypeElement
275
279
  SimulationSoftware:
276
280
  type: object
@@ -297,7 +301,9 @@ definitions:
297
301
  - $ref: '#/definitions/DataClass'
298
302
  title: DataUnion
299
303
  Setting:
300
- type: string
304
+ type:
305
+ - string
306
+ - "null"
301
307
  description: "list of setting workflows"
302
308
  enum:
303
309
  - SetArrayElementCoordinates
@@ -315,10 +321,12 @@ definitions:
315
321
  - SetTelescopeFiducialSphere
316
322
  - SetTelescopeShadowingParameters
317
323
  - SetTriggerThresholdsFromRateScan
318
- - None
324
+ - null
319
325
  title: Setting
320
326
  Validation:
321
- type: string
327
+ type:
328
+ - string
329
+ - "null"
322
330
  description: "list of validation workflows"
323
331
  enum:
324
332
  - ValidateArrayElementCoordinates
@@ -344,7 +352,7 @@ definitions:
344
352
  - ValidateTelescopeStructure
345
353
  - ValidateTriggerPerformance
346
354
  - ValidationWorkflowMissing
347
- - None
355
+ - null
348
356
  TableColumnType:
349
357
  type: string
350
358
  enum:
@@ -12,7 +12,7 @@ description: |-
12
12
  data:
13
13
  - type: file
14
14
  unit: dimensionless
15
- default: None
15
+ default: null
16
16
  instrument:
17
17
  class: Site
18
18
  type:
@@ -24,6 +24,9 @@ data:
24
24
  type: string
25
25
  format: array_element
26
26
  description: Name of the array element.
27
+ comment:
28
+ type: string
29
+ description: Additional comment.
27
30
  required:
28
31
  - name
29
32
  - elements
@@ -13,7 +13,7 @@ description: |-
13
13
  data:
14
14
  - type: file
15
15
  unit: dimensionless
16
- default: None
16
+ default: null
17
17
  instrument:
18
18
  class: Camera
19
19
  type:
@@ -11,7 +11,7 @@ description: Density, thickness, and index of refraction as function of altitude
11
11
  data:
12
12
  - type: file
13
13
  unit: dimensionless
14
- default: None
14
+ default: null
15
15
  instrument:
16
16
  class: Site
17
17
  type:
@@ -15,7 +15,7 @@ description: |-
15
15
  data:
16
16
  - type: file
17
17
  unit: dimensionless
18
- default: None
18
+ default: null
19
19
  instrument:
20
20
  class: Camera
21
21
  type:
@@ -19,7 +19,7 @@ short_description: |-
19
19
  data:
20
20
  - type: file
21
21
  unit: dimensionless
22
- default: None
22
+ default: null
23
23
  instrument:
24
24
  class: Camera
25
25
  type:
@@ -22,7 +22,7 @@ short_description: |-
22
22
  data:
23
23
  - type: file
24
24
  unit: dimensionless
25
- default: None
25
+ default: null
26
26
  instrument:
27
27
  class: Camera
28
28
  type:
@@ -24,7 +24,7 @@ short_description: |-
24
24
  data:
25
25
  - type: file
26
26
  unit: dimensionless
27
- default: None
27
+ default: null
28
28
  instrument:
29
29
  class: Camera
30
30
  type:
@@ -25,7 +25,7 @@ data:
25
25
  instrument:
26
26
  class: Camera
27
27
  type:
28
- - None
28
+ - null
29
29
  activity:
30
30
  setting:
31
31
  - SetParameterFromExternal
@@ -24,7 +24,7 @@ data:
24
24
  instrument:
25
25
  class: Camera
26
26
  type:
27
- - None
27
+ - null
28
28
  activity:
29
29
  setting:
30
30
  - SetParameterFromExternal
@@ -27,12 +27,12 @@ data:
27
27
  instrument:
28
28
  class: Camera
29
29
  type:
30
- - None
30
+ - null
31
31
  activity:
32
32
  setting:
33
- - None
33
+ - null
34
34
  validation:
35
- - None
35
+ - null
36
36
  source:
37
37
  - Initial instrument setup
38
38
  simulation_software:
@@ -27,12 +27,12 @@ data:
27
27
  instrument:
28
28
  class: Camera
29
29
  type:
30
- - None
30
+ - null
31
31
  activity:
32
32
  setting:
33
- - None
33
+ - null
34
34
  validation:
35
- - None
35
+ - null
36
36
  source:
37
37
  - Initial instrument setup
38
38
  simulation_software:
@@ -15,7 +15,7 @@ description: |-
15
15
  data:
16
16
  - type: file
17
17
  unit: dimensionless
18
- default: None
18
+ default: null
19
19
  instrument:
20
20
  class: Structure
21
21
  type:
@@ -17,7 +17,7 @@ short_description: Lightguide efficiency as a function of incidence angle.
17
17
  data:
18
18
  - type: file
19
19
  unit: dimensionless
20
- default: None
20
+ default: null
21
21
  instrument:
22
22
  class: Camera
23
23
  type:
@@ -19,7 +19,7 @@ description: Lightguide efficiency for on-axis photons vs wavelength.
19
19
  data:
20
20
  - type: file
21
21
  unit: dimensionless
22
- default: None
22
+ default: null
23
23
  instrument:
24
24
  class: Camera
25
25
  type:
@@ -11,7 +11,7 @@ description: List of mirror positions, diameters, focal lengths, and shape codes
11
11
  data:
12
12
  - type: file
13
13
  unit: dimensionless
14
- default: None
14
+ default: null
15
15
  instrument:
16
16
  class: Structure
17
17
  type:
@@ -15,7 +15,7 @@ description: |-
15
15
  data:
16
16
  - type: file
17
17
  unit: dimensionless
18
- default: None
18
+ default: null
19
19
  instrument:
20
20
  class: Site
21
21
  type:
@@ -20,7 +20,7 @@ short_description: Sky map (Az/Alt) of NSB enhancement factors.
20
20
  data:
21
21
  - type: file
22
22
  unit: dimensionless
23
- default: None
23
+ default: null
24
24
  instrument:
25
25
  class: Site
26
26
  type: