gammasimtools 0.22.0__py3-none-any.whl → 0.24.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 (128) hide show
  1. {gammasimtools-0.22.0.dist-info → gammasimtools-0.24.0.dist-info}/METADATA +2 -1
  2. {gammasimtools-0.22.0.dist-info → gammasimtools-0.24.0.dist-info}/RECORD +128 -125
  3. simtools/_version.py +2 -2
  4. simtools/application_control.py +118 -0
  5. simtools/applications/calculate_incident_angles.py +17 -22
  6. simtools/applications/convert_all_model_parameters_from_simtel.py +28 -43
  7. simtools/applications/convert_geo_coordinates_of_array_elements.py +26 -45
  8. simtools/applications/convert_model_parameter_from_simtel.py +21 -41
  9. simtools/applications/db_add_file_to_db.py +13 -14
  10. simtools/applications/db_add_simulation_model_from_repository_to_db.py +20 -33
  11. simtools/applications/db_add_value_from_json_to_db.py +29 -24
  12. simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +20 -35
  13. simtools/applications/db_generate_compound_indexes.py +11 -13
  14. simtools/applications/db_get_array_layouts_from_db.py +20 -40
  15. simtools/applications/db_get_file_from_db.py +15 -17
  16. simtools/applications/db_get_parameter_from_db.py +33 -35
  17. simtools/applications/db_inspect_databases.py +13 -12
  18. simtools/applications/db_upload_model_repository.py +13 -31
  19. simtools/applications/derive_ctao_array_layouts.py +16 -21
  20. simtools/applications/derive_mirror_rnda.py +9 -14
  21. simtools/applications/derive_photon_electron_spectrum.py +7 -10
  22. simtools/applications/derive_psf_parameters.py +13 -20
  23. simtools/applications/derive_trigger_rates.py +6 -9
  24. simtools/applications/docs_produce_array_element_report.py +22 -23
  25. simtools/applications/docs_produce_calibration_reports.py +26 -24
  26. simtools/applications/docs_produce_model_parameter_reports.py +15 -22
  27. simtools/applications/docs_produce_simulation_configuration_report.py +21 -22
  28. simtools/applications/generate_array_config.py +14 -33
  29. simtools/applications/generate_corsika_histograms.py +22 -43
  30. simtools/applications/generate_default_metadata.py +15 -36
  31. simtools/applications/generate_regular_arrays.py +11 -15
  32. simtools/applications/generate_simtel_event_data.py +23 -33
  33. simtools/applications/maintain_simulation_model_add_production.py +20 -37
  34. simtools/applications/maintain_simulation_model_compare_productions.py +10 -12
  35. simtools/applications/maintain_simulation_model_verify_production_tables.py +8 -11
  36. simtools/applications/merge_tables.py +14 -23
  37. simtools/applications/plot_array_layout.py +77 -54
  38. simtools/applications/plot_simtel_events.py +11 -13
  39. simtools/applications/plot_tabular_data.py +17 -38
  40. simtools/applications/plot_tabular_data_for_model_parameter.py +16 -23
  41. simtools/applications/print_version.py +14 -42
  42. simtools/applications/production_derive_corsika_limits.py +5 -9
  43. simtools/applications/production_derive_statistics.py +12 -25
  44. simtools/applications/production_generate_grid.py +20 -48
  45. simtools/applications/production_merge_corsika_limits.py +17 -21
  46. simtools/applications/run_application.py +12 -32
  47. simtools/applications/simulate_flasher.py +21 -25
  48. simtools/applications/simulate_illuminator.py +7 -14
  49. simtools/applications/simulate_pedestals.py +13 -13
  50. simtools/applications/simulate_prod.py +21 -33
  51. simtools/applications/simulate_prod_htcondor_generator.py +11 -25
  52. simtools/applications/submit_array_layouts.py +16 -19
  53. simtools/applications/submit_data_from_external.py +18 -34
  54. simtools/applications/submit_model_parameter_from_external.py +27 -40
  55. simtools/applications/validate_camera_efficiency.py +23 -21
  56. simtools/applications/validate_camera_fov.py +21 -26
  57. simtools/applications/validate_cumulative_psf.py +27 -35
  58. simtools/applications/validate_file_using_schema.py +15 -33
  59. simtools/applications/validate_optics.py +27 -33
  60. simtools/camera/camera_efficiency.py +0 -2
  61. simtools/configuration/commandline_parser.py +39 -13
  62. simtools/configuration/configurator.py +1 -6
  63. simtools/corsika/corsika_config.py +2 -9
  64. simtools/data_model/data_reader.py +0 -2
  65. simtools/data_model/metadata_collector.py +0 -2
  66. simtools/data_model/model_data_writer.py +1 -3
  67. simtools/data_model/schema.py +36 -34
  68. simtools/data_model/validate_data.py +0 -2
  69. simtools/db/db_handler.py +61 -296
  70. simtools/db/db_model_upload.py +1 -1
  71. simtools/db/mongo_db.py +535 -0
  72. simtools/dependencies.py +33 -8
  73. simtools/io/hdf5_handler.py +0 -5
  74. simtools/io/legacy_data_handler.py +0 -5
  75. simtools/job_execution/job_manager.py +0 -3
  76. simtools/layout/array_layout.py +7 -9
  77. simtools/layout/array_layout_utils.py +3 -3
  78. simtools/layout/telescope_position.py +0 -2
  79. simtools/model/array_model.py +38 -71
  80. simtools/model/calibration_model.py +12 -11
  81. simtools/model/camera.py +0 -2
  82. simtools/model/mirrors.py +0 -2
  83. simtools/model/model_parameter.py +200 -140
  84. simtools/model/model_repository.py +159 -35
  85. simtools/model/model_utils.py +3 -8
  86. simtools/model/site_model.py +59 -29
  87. simtools/model/telescope_model.py +21 -15
  88. simtools/production_configuration/calculate_statistical_uncertainties_grid_point.py +0 -2
  89. simtools/production_configuration/derive_production_statistics.py +0 -2
  90. simtools/production_configuration/interpolation_handler.py +0 -2
  91. simtools/ray_tracing/mirror_panel_psf.py +4 -4
  92. simtools/ray_tracing/psf_analysis.py +0 -2
  93. simtools/ray_tracing/psf_parameter_optimisation.py +1 -1
  94. simtools/ray_tracing/ray_tracing.py +0 -2
  95. simtools/reporting/docs_auto_report_generator.py +109 -1
  96. simtools/reporting/docs_read_parameters.py +4 -9
  97. simtools/runners/corsika_runner.py +0 -2
  98. simtools/runners/corsika_simtel_runner.py +0 -2
  99. simtools/runners/simtel_runner.py +0 -2
  100. simtools/schemas/model_parameters/transit_time_random.schema.yml +29 -0
  101. simtools/schemas/simulation_models_info.schema.yml +2 -1
  102. simtools/simtel/simtel_config_reader.py +0 -2
  103. simtools/simtel/simtel_config_writer.py +128 -33
  104. simtools/simtel/simtel_io_metadata.py +3 -3
  105. simtools/simtel/simulator_array.py +9 -21
  106. simtools/simtel/simulator_camera_efficiency.py +0 -2
  107. simtools/simtel/simulator_light_emission.py +1 -3
  108. simtools/simtel/simulator_ray_tracing.py +0 -2
  109. simtools/simulator.py +2 -6
  110. simtools/testing/assertions.py +52 -8
  111. simtools/testing/configuration.py +17 -4
  112. simtools/testing/validate_output.py +4 -8
  113. simtools/utils/general.py +5 -13
  114. simtools/utils/geometry.py +0 -5
  115. simtools/utils/names.py +1 -13
  116. simtools/utils/value_conversion.py +10 -5
  117. simtools/version.py +85 -0
  118. simtools/visualization/plot_array_layout.py +129 -23
  119. simtools/visualization/plot_incident_angles.py +0 -2
  120. simtools/visualization/plot_pixels.py +1 -1
  121. simtools/visualization/plot_psf.py +1 -1
  122. simtools/visualization/plot_simtel_events.py +0 -11
  123. simtools/visualization/plot_tables.py +1 -1
  124. simtools/visualization/visualize.py +0 -12
  125. {gammasimtools-0.22.0.dist-info → gammasimtools-0.24.0.dist-info}/WHEEL +0 -0
  126. {gammasimtools-0.22.0.dist-info → gammasimtools-0.24.0.dist-info}/entry_points.txt +0 -0
  127. {gammasimtools-0.22.0.dist-info → gammasimtools-0.24.0.dist-info}/licenses/LICENSE +0 -0
  128. {gammasimtools-0.22.0.dist-info → gammasimtools-0.24.0.dist-info}/top_level.txt +0 -0
@@ -60,38 +60,24 @@ r"""
60
60
 
61
61
  """
62
62
 
63
- import logging
64
63
  from pathlib import Path
65
64
 
66
65
  import numpy as np
67
66
 
68
67
  import simtools.data_model.model_data_writer as writer
69
- import simtools.utils.general as gen
68
+ from simtools.application_control import get_application_label, startup_application
70
69
  from simtools.configuration import configurator
71
70
  from simtools.data_model import schema
72
71
  from simtools.io import ascii_handler
73
- from simtools.io.io_handler import IOHandler
74
72
  from simtools.simtel import simtel_config_reader
75
73
 
76
74
 
77
- def _parse(label=None, description=None):
78
- """
79
- Parse command line configuration.
80
-
81
- Parameters
82
- ----------
83
- label: str
84
- Label describing application.
85
- description: str
86
- Description of application.
87
-
88
- Returns
89
- -------
90
- CommandLineParser
91
- Command line parser object
92
-
93
- """
94
- config = configurator.Configurator(label=label, description=description)
75
+ def _parse():
76
+ """Parse command line configuration."""
77
+ config = configurator.Configurator(
78
+ label=get_application_label(__file__),
79
+ description="Convert all model parameters from sim_telarray",
80
+ )
95
81
 
96
82
  config.parser.add_argument(
97
83
  "--simtel_cfg_file",
@@ -156,8 +142,8 @@ def get_number_of_camera_pixel(args_dict, logger):
156
142
  ----------
157
143
  args_dict: dict
158
144
  Dictionary with command line arguments.
159
- logger: logging.Logger
160
- Logger object
145
+ logger: logging.logger
146
+ logger object
161
147
 
162
148
  Returns
163
149
  -------
@@ -177,7 +163,7 @@ def get_number_of_camera_pixel(args_dict, logger):
177
163
  return _camera_pixel
178
164
 
179
165
 
180
- def read_and_export_parameters(args_dict, logger):
166
+ def read_and_export_parameters(args_dict, logger, io_handler):
181
167
  """
182
168
  Read and export parameters from sim_telarray configuration file to json files.
183
169
 
@@ -188,8 +174,10 @@ def read_and_export_parameters(args_dict, logger):
188
174
  ----------
189
175
  args_dict: dict
190
176
  Dictionary with command line arguments.
191
- logger: logging.Logger
192
- Logger object
177
+ logger: logging.logger
178
+ logger object
179
+ io_handler: IOHandler
180
+ IOHandler object
193
181
 
194
182
  Returns
195
183
  -------
@@ -205,9 +193,6 @@ def read_and_export_parameters(args_dict, logger):
205
193
  )
206
194
  logger.info(f"Found {len(_simtel_parameters)} parameters in sim_telarray configuration file.")
207
195
 
208
- io_handler = IOHandler()
209
- io_handler.set_paths(output_path=args_dict["output_path"])
210
-
211
196
  _camera_pixel = get_number_of_camera_pixel(args_dict, logger)
212
197
 
213
198
  _parameters_not_in_simtel = []
@@ -263,8 +248,8 @@ def print_parameters_not_found(_parameters_not_in_simtel, _simtel_parameters, ar
263
248
  List of sim_telarray parameters not found in simtools schema files.
264
249
  args_dict: dict
265
250
  Dictionary with command line arguments.
266
- logger: logging.Logger
267
- Logger object
251
+ logger: logging.logger
252
+ logger object
268
253
 
269
254
  """
270
255
  logger.info(
@@ -313,8 +298,8 @@ def print_list_of_files(args_dict, logger):
313
298
  ----------
314
299
  args_dict: dict
315
300
  Dictionary with command line arguments.
316
- logger: logging.Logger
317
- Logger object
301
+ logger: logging.logger
302
+ logger object
318
303
 
319
304
  """
320
305
  model_files = sorted(Path(args_dict["output_path"]).rglob("*.json"))
@@ -324,17 +309,17 @@ def print_list_of_files(args_dict, logger):
324
309
  logger.info(f"{file.name}: {model_dict['value']}")
325
310
 
326
311
 
327
- def main(): # noqa: D103
328
- args_dict, _ = _parse(
329
- label=Path(__file__).stem,
330
- description="Convert simulation model parameters from sim_telarray to simtools format.",
331
- )
332
- logger = logging.getLogger()
333
- logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
312
+ def main():
313
+ """Convert all simulation model parameters exported from sim_telarray format."""
314
+ app_context = startup_application(_parse)
334
315
 
335
- _parameters_not_in_simtel, _simtel_parameters = read_and_export_parameters(args_dict, logger)
336
- print_parameters_not_found(_parameters_not_in_simtel, _simtel_parameters, args_dict, logger)
337
- print_list_of_files(args_dict, logger)
316
+ _parameters_not_in_simtel, _simtel_parameters = read_and_export_parameters(
317
+ app_context.args, app_context.logger, app_context.io_handler
318
+ )
319
+ print_parameters_not_found(
320
+ _parameters_not_in_simtel, _simtel_parameters, app_context.args, app_context.logger
321
+ )
322
+ print_list_of_files(app_context.args, app_context.logger)
338
323
 
339
324
 
340
325
  if __name__ == "__main__":
@@ -54,33 +54,19 @@ Expected output is a ecsv file in the directory printed to the screen.
54
54
 
55
55
  """
56
56
 
57
- import logging
58
- from pathlib import Path
59
-
60
57
  import simtools.data_model.model_data_writer as writer
61
- import simtools.utils.general as gen
58
+ from simtools.application_control import get_application_label, startup_application
62
59
  from simtools.configuration import configurator
63
60
  from simtools.data_model.metadata_collector import MetadataCollector
64
61
  from simtools.layout import array_layout
65
62
 
66
63
 
67
- def _parse(label=None, description=None):
68
- """
69
- Parse command line configuration.
70
-
71
- Parameters
72
- ----------
73
- label: str
74
- Label describing application.
75
- description: str
76
- Description of application.
77
-
78
- Returns
79
- -------
80
- CommandLineParser
81
- Command line parser object
82
- """
83
- config = configurator.Configurator(label=label, description=description)
64
+ def _parse():
65
+ """Parse command line configuration."""
66
+ config = configurator.Configurator(
67
+ label=get_application_label(__file__),
68
+ description="Print a list of array element positions",
69
+ )
84
70
 
85
71
  config.parser.add_argument(
86
72
  "--input",
@@ -139,52 +125,47 @@ def _parse(label=None, description=None):
139
125
 
140
126
  def main():
141
127
  """Print a list of array elements."""
142
- label = Path(__file__).stem
143
- model_parameter_name = "array_coordinates"
144
- args_dict, db_config = _parse(
145
- label,
146
- description=f"Print a list of array element positions ({model_parameter_name})",
147
- )
148
-
149
- logger = logging.getLogger()
150
- logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
128
+ app_context = startup_application(_parse)
151
129
 
152
- if args_dict.get("input", "").endswith(".json"):
153
- site = args_dict.get("site", None)
130
+ if app_context.args.get("input", "").endswith(".json"):
131
+ site = app_context.args.get("site", None)
154
132
  metadata, validate_schema_file = None, None
155
133
  else:
156
- metadata = MetadataCollector(args_dict=args_dict, model_parameter_name=model_parameter_name)
134
+ metadata = MetadataCollector(
135
+ args_dict=app_context.args, model_parameter_name="array_coordinates"
136
+ )
157
137
  site = metadata.get_site(from_input_meta=True)
158
138
  validate_schema_file = metadata.get_data_model_schema_file_name()
159
139
 
160
140
  layout = array_layout.ArrayLayout(
161
- mongo_db_config=db_config,
162
- model_version=args_dict["model_version"],
141
+ db_config=app_context.db_config,
142
+ model_version=app_context.args["model_version"],
163
143
  site=site,
164
- telescope_list_file=args_dict["input"],
165
- telescope_list_metadata_file=args_dict["input_meta"],
166
- validate=not args_dict["skip_input_validation"],
144
+ telescope_list_file=app_context.args["input"],
145
+ telescope_list_metadata_file=app_context.args["input_meta"],
146
+ validate=not app_context.args["skip_input_validation"],
167
147
  )
168
- layout.select_assets(args_dict["select_assets"])
148
+ layout.select_assets(app_context.args["select_assets"])
169
149
  layout.convert_coordinates()
170
150
 
171
- if args_dict["export"] is not None:
151
+ if app_context.args["export"] is not None:
172
152
  product_data = (
173
153
  layout.export_one_telescope_as_json(
174
- crs_name=args_dict["export"], parameter_version=args_dict.get("parameter_version")
154
+ crs_name=app_context.args["export"],
155
+ parameter_version=app_context.args.get("parameter_version"),
175
156
  )
176
- if args_dict.get("input", "").endswith(".json")
177
- else layout.export_telescope_list_table(crs_name=args_dict["export"])
157
+ if app_context.args.get("input", "").endswith(".json")
158
+ else layout.export_telescope_list_table(crs_name=app_context.args["export"])
178
159
  )
179
160
  writer.ModelDataWriter.dump(
180
- args_dict=args_dict,
161
+ args_dict=app_context.args,
181
162
  metadata=metadata,
182
163
  product_data=product_data,
183
164
  validate_schema_file=validate_schema_file,
184
165
  )
185
166
  else:
186
167
  layout.print_telescope_list(
187
- crs_name=args_dict["print"],
168
+ crs_name=app_context.args["print"],
188
169
  )
189
170
 
190
171
 
@@ -35,33 +35,18 @@ r"""
35
35
 
36
36
  """
37
37
 
38
- import logging
39
- from pathlib import Path
40
-
41
38
  import simtools.data_model.model_data_writer as writer
42
- import simtools.utils.general as gen
39
+ from simtools.application_control import get_application_label, startup_application
43
40
  from simtools.configuration import configurator
44
41
  from simtools.simtel.simtel_config_reader import SimtelConfigReader
45
42
 
46
43
 
47
- def _parse(label=None, description=None):
48
- """
49
- Parse command line configuration.
50
-
51
- Parameters
52
- ----------
53
- label: str
54
- Label describing application.
55
- description: str
56
- Description of application.
57
-
58
- Returns
59
- -------
60
- CommandLineParser
61
- Command line parser object
62
-
63
- """
64
- config = configurator.Configurator(label=label, description=description)
44
+ def _parse():
45
+ """Parse command line configuration."""
46
+ config = configurator.Configurator(
47
+ label=get_application_label(__file__),
48
+ description="Convert simulation model parameter from sim_telarray to simtools format.",
49
+ )
65
50
 
66
51
  config.parser.add_argument(
67
52
  "--schema", help="Schema file for model parameter validation", required=True
@@ -81,36 +66,31 @@ def _parse(label=None, description=None):
81
66
  return config.initialize(simulation_model=["telescope", "parameter_version"], output=True)
82
67
 
83
68
 
84
- def main(): # noqa: D103
85
- args_dict, _ = _parse(
86
- label=Path(__file__).stem,
87
- description="Convert simulation model parameter from sim_telarray to simtools format.",
88
- )
89
-
90
- logger = logging.getLogger()
91
- logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
69
+ def main():
70
+ """Convert simulation model parameter from sim_telarray to simtools format."""
71
+ app_context = startup_application(_parse, setup_io_handler=False)
92
72
 
93
73
  simtel_config_reader = SimtelConfigReader(
94
- schema_file=args_dict["schema"],
95
- simtel_config_file=args_dict["simtel_cfg_file"],
96
- simtel_telescope_name=args_dict["simtel_telescope_name"],
74
+ schema_file=app_context.args["schema"],
75
+ simtel_config_file=app_context.args["simtel_cfg_file"],
76
+ simtel_telescope_name=app_context.args["simtel_telescope_name"],
97
77
  )
98
- logger.info(f"Simtel parameter: {simtel_config_reader.parameter_dict}")
78
+ app_context.logger.info(f"Simtel parameter: {simtel_config_reader.parameter_dict}")
99
79
  if simtel_config_reader.parameter_dict is None or len(simtel_config_reader.parameter_dict) == 0:
100
- logger.error("Parameter not found in sim_telarray configuration file.")
80
+ app_context.logger.error("Parameter not found in sim_telarray configuration file.")
101
81
  return
102
82
 
103
83
  simtel_config_reader.compare_simtel_config_with_schema()
104
84
 
105
85
  _json_dict = writer.ModelDataWriter.dump_model_parameter(
106
86
  parameter_name=simtel_config_reader.parameter_name,
107
- value=simtel_config_reader.parameter_dict.get(args_dict["simtel_telescope_name"]),
108
- instrument=args_dict["telescope"],
109
- parameter_version=args_dict["parameter_version"],
110
- output_file=args_dict["output_file"],
111
- output_path=args_dict.get("output_path"),
87
+ value=simtel_config_reader.parameter_dict.get(app_context.args["simtel_telescope_name"]),
88
+ instrument=app_context.args["telescope"],
89
+ parameter_version=app_context.args["parameter_version"],
90
+ output_file=app_context.args["output_file"],
91
+ output_path=app_context.args.get("output_path"),
112
92
  )
113
- logger.info(f"Validated parameter: {_json_dict}")
93
+ app_context.logger.info(f"Validated parameter: {_json_dict}")
114
94
 
115
95
 
116
96
  if __name__ == "__main__":
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/python3
2
2
 
3
- """
3
+ r"""
4
4
  Add a file to a DB.
5
5
 
6
6
  The name and location of the file are required.
@@ -37,21 +37,22 @@
37
37
 
38
38
  """
39
39
 
40
- import logging
41
40
  import uuid
42
41
  from pathlib import Path
43
42
 
44
43
  import simtools.utils.general as gen
44
+ from simtools.application_control import get_application_label, startup_application
45
45
  from simtools.configuration import configurator
46
46
  from simtools.db import db_handler
47
47
 
48
48
 
49
49
  def _parse():
50
+ """Parse command line configuration."""
50
51
  config = configurator.Configurator(
52
+ label=get_application_label(__file__),
51
53
  description="Add file to the DB.",
52
54
  usage="simtools-add-file-to-db --file_name test_application.dat --db test-data",
53
55
  )
54
-
55
56
  group = config.parser.add_mutually_exclusive_group(required=True)
56
57
  group.add_argument(
57
58
  "--file_name",
@@ -135,8 +136,8 @@ def confirm_and_insert_files(files_to_insert, args_dict, db, logger):
135
136
  Dictionary of parsed command-line arguments.
136
137
  db : DatabaseHandler
137
138
  Database handler object.
138
- logger : logging.Logger
139
- Logger object for logging messages.
139
+ logger : logging.logger
140
+ logger object for logging messages.
140
141
  """
141
142
  plural = "" if len(files_to_insert) == 1 else "s"
142
143
 
@@ -158,19 +159,17 @@ def confirm_and_insert_files(files_to_insert, args_dict, db, logger):
158
159
  # drop test database; be safe and required DB name is sandbox
159
160
  if args_dict.get("test_db", False) and "sandbox" in args_dict["db"]:
160
161
  logger.info(f"Test database used. Dropping all data from {args_dict['db']}")
161
- db.db_client.drop_database(args_dict["db"])
162
-
162
+ db.mongo_db_handler.db_client.drop_database(args_dict["db"])
163
163
 
164
- def main(): # noqa: D103
165
- args_dict, db_config = _parse()
166
164
 
167
- logger = logging.getLogger()
168
- logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
165
+ def main():
166
+ """Add files to the database."""
167
+ app_context = startup_application(_parse, setup_io_handler=False)
169
168
 
170
- db = db_handler.DatabaseHandler(mongo_db_config=db_config)
169
+ db = db_handler.DatabaseHandler(db_config=app_context.db_config)
171
170
 
172
- files_to_insert = collect_files_to_insert(args_dict, logger, db)
173
- confirm_and_insert_files(files_to_insert, args_dict, db, logger)
171
+ files_to_insert = collect_files_to_insert(app_context.args, app_context.logger, db)
172
+ confirm_and_insert_files(files_to_insert, app_context.args, db, app_context.logger)
174
173
 
175
174
 
176
175
  if __name__ == "__main__":
@@ -51,31 +51,19 @@ r"""
51
51
 
52
52
  """
53
53
 
54
- import logging
55
54
  from pathlib import Path
56
55
 
57
- import simtools.utils.general as gen
56
+ from simtools.application_control import get_application_label, startup_application
58
57
  from simtools.configuration import configurator
59
58
  from simtools.db import db_handler, db_model_upload
60
59
 
61
60
 
62
- def _parse(label=None, description=None):
63
- """
64
- Parse command line configuration.
65
-
66
- Parameters
67
- ----------
68
- label : str
69
- Label describing application.
70
- description : str
71
- Description of application.
72
-
73
- Returns
74
- -------
75
- CommandLineParser
76
- Command line parser object.
77
- """
78
- config = configurator.Configurator(label=label, description=description)
61
+ def _parse():
62
+ """Parse command line configuration."""
63
+ config = configurator.Configurator(
64
+ label=get_application_label(__file__),
65
+ description="Add or update a model parameter database to the DB",
66
+ )
79
67
  config.parser.add_argument(
80
68
  "--input_path",
81
69
  help="Path to simulation model repository.",
@@ -102,20 +90,19 @@ def _parse(label=None, description=None):
102
90
 
103
91
 
104
92
  def main():
105
- """Application main."""
106
- label = Path(__file__).stem
107
- args_dict, db_config = _parse(
108
- label, description="Add or update a model parameter database to the DB"
109
- )
110
- logger = logging.getLogger()
111
- logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
112
-
113
- db = db_handler.DatabaseHandler(mongo_db_config=db_config)
114
-
115
- if args_dict.get("type") == "model_parameters":
116
- db_model_upload.add_model_parameters_to_db(input_path=Path(args_dict["input_path"]), db=db)
117
- elif args_dict.get("type") == "production_tables":
118
- db_model_upload.add_production_tables_to_db(input_path=Path(args_dict["input_path"]), db=db)
93
+ """Add or update a model parameter database to the DB."""
94
+ app_context = startup_application(_parse, setup_io_handler=False)
95
+
96
+ db = db_handler.DatabaseHandler(db_config=app_context.db_config)
97
+
98
+ if app_context.args.get("type") == "model_parameters":
99
+ db_model_upload.add_model_parameters_to_db(
100
+ input_path=Path(app_context.args["input_path"]), db=db
101
+ )
102
+ elif app_context.args.get("type") == "production_tables":
103
+ db_model_upload.add_production_tables_to_db(
104
+ input_path=Path(app_context.args["input_path"]), db=db
105
+ )
119
106
 
120
107
 
121
108
  if __name__ == "__main__":
@@ -25,18 +25,21 @@ r"""
25
25
 
26
26
  """
27
27
 
28
- import logging
29
28
  import uuid
30
29
  from pathlib import Path
31
30
 
32
31
  import simtools.utils.general as gen
32
+ from simtools.application_control import get_application_label, startup_application
33
33
  from simtools.configuration import configurator
34
34
  from simtools.db import db_handler
35
35
  from simtools.io import ascii_handler
36
36
 
37
37
 
38
38
  def _parse():
39
- config = configurator.Configurator(description="Add a new parameter to the DB.")
39
+ """Parse command line configuration."""
40
+ config = configurator.Configurator(
41
+ label=get_application_label(__file__), description="Add a new parameter to the DB."
42
+ )
40
43
  group = config.parser.add_mutually_exclusive_group(required=True)
41
44
  group.add_argument("--file_name", help="file to be added", type=str)
42
45
  group.add_argument(
@@ -55,22 +58,22 @@ def _parse():
55
58
  return config.initialize(db_config=True)
56
59
 
57
60
 
58
- def main(): # noqa: D103
59
- args_dict, db_config = _parse()
60
-
61
- logger = logging.getLogger()
62
- logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
61
+ def main():
62
+ """Add value from JSON to database."""
63
+ app_context = startup_application(_parse)
63
64
 
64
- if args_dict.get("test_db", False):
65
- db_config["db_simulation_model_version"] = str(uuid.uuid4())
66
- logger.info(f"Using test database version {db_config['db_simulation_model_version']}")
67
- db = db_handler.DatabaseHandler(mongo_db_config=db_config)
65
+ if app_context.args.get("test_db", False):
66
+ app_context.db_config["db_simulation_model_version"] = str(uuid.uuid4())
67
+ app_context.logger.info(
68
+ f"Using test database version {app_context.db_config['db_simulation_model_version']}"
69
+ )
70
+ db = db_handler.DatabaseHandler(db_config=app_context.db_config)
68
71
 
69
72
  files_to_insert = []
70
- if args_dict.get("file_name", None) is not None:
71
- files_to_insert.append(args_dict["file_name"])
73
+ if app_context.args.get("file_name", None) is not None:
74
+ files_to_insert.append(app_context.args["file_name"])
72
75
  else:
73
- files_to_insert.extend(Path(args_dict["input_path"]).glob("*json"))
76
+ files_to_insert.extend(Path(app_context.args["input_path"]).glob("*json"))
74
77
 
75
78
  if len(files_to_insert) < 1:
76
79
  raise ValueError("No files were provided to upload")
@@ -78,33 +81,35 @@ def main(): # noqa: D103
78
81
 
79
82
  print(
80
83
  f"Should the following parameter{plural} be inserted to the "
81
- f"{args_dict['db_collection']} DB collection?:\n"
84
+ f"{app_context.args['db_collection']} DB collection?:\n"
82
85
  )
83
86
  print(*files_to_insert, sep="\n")
84
87
  print()
85
88
 
86
- logger.info(f"DB {db.get_db_name()} selected.")
89
+ app_context.logger.info(f"DB {db.get_db_name()} selected.")
87
90
 
88
91
  if gen.user_confirm():
89
92
  for file_to_insert_now in files_to_insert:
90
93
  par_dict = ascii_handler.collect_data_from_file(file_name=file_to_insert_now)
91
- logger.info(f"Adding the following parameter to the DB: {par_dict['parameter']}")
94
+ app_context.logger.info(
95
+ f"Adding the following parameter to the DB: {par_dict['parameter']}"
96
+ )
92
97
  db.add_new_parameter(
93
98
  par_dict=par_dict,
94
- collection_name=args_dict["db_collection"],
99
+ collection_name=app_context.args["db_collection"],
95
100
  file_prefix="./",
96
101
  )
97
- logger.info(
102
+ app_context.logger.info(
98
103
  f"Value for {par_dict['parameter']} added to "
99
- f"{args_dict['db_collection']} collection."
104
+ f"{app_context.args['db_collection']} collection."
100
105
  )
101
106
  else:
102
- logger.info("Aborted, no change applied to the database")
107
+ app_context.logger.info("Aborted, no change applied to the database")
103
108
 
104
109
  # drop test database; be safe and required DB name is sandbox
105
- if args_dict.get("test_db", False) and "sandbox" in db.get_db_name():
106
- logger.info(f"Test database used. Dropping all data from {db.get_db_name()}")
107
- db.db_client.drop_database(db.get_db_name())
110
+ if app_context.args.get("test_db", False) and "sandbox" in db.get_db_name():
111
+ app_context.logger.info(f"Test database used. Dropping all data from {db.get_db_name()}")
112
+ db.mongo_db_handler.db_client.drop_database(db.get_db_name())
108
113
 
109
114
 
110
115
  if __name__ == "__main__":