gammasimtools 0.18.0__py3-none-any.whl → 0.20.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.
- {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/METADATA +24 -69
- gammasimtools-0.20.0.dist-info/RECORD +395 -0
- {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/entry_points.txt +11 -4
- {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/licenses/LICENSE +1 -1
- simtools/_version.py +16 -3
- simtools/applications/calculate_incident_angles.py +182 -0
- simtools/applications/convert_all_model_parameters_from_simtel.py +4 -3
- simtools/applications/convert_geo_coordinates_of_array_elements.py +3 -3
- simtools/applications/db_add_simulation_model_from_repository_to_db.py +17 -14
- simtools/applications/db_add_value_from_json_to_db.py +8 -10
- simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +8 -13
- simtools/applications/db_generate_compound_indexes.py +65 -0
- simtools/applications/db_get_file_from_db.py +12 -24
- simtools/applications/db_get_parameter_from_db.py +4 -4
- simtools/applications/db_inspect_databases.py +20 -10
- simtools/applications/derive_mirror_rnda.py +17 -11
- simtools/applications/derive_psf_parameters.py +59 -309
- simtools/applications/derive_trigger_rates.py +91 -0
- simtools/applications/docs_produce_array_element_report.py +1 -1
- simtools/applications/docs_produce_calibration_reports.py +1 -1
- simtools/applications/docs_produce_model_parameter_reports.py +1 -1
- simtools/applications/docs_produce_simulation_configuration_report.py +1 -1
- simtools/applications/generate_corsika_histograms.py +1 -1
- simtools/applications/generate_default_metadata.py +8 -24
- simtools/applications/generate_simtel_event_data.py +11 -11
- simtools/applications/maintain_simulation_model_add_production_table.py +71 -0
- simtools/applications/maintain_simulation_model_compare_productions.py +98 -0
- simtools/applications/{verify_simulation_model_production_tables.py → maintain_simulation_model_verify_production_tables.py} +9 -1
- simtools/applications/merge_tables.py +2 -2
- simtools/applications/plot_array_layout.py +3 -3
- simtools/applications/plot_simtel_events.py +421 -0
- simtools/applications/plot_tabular_data.py +9 -2
- simtools/applications/plot_tabular_data_for_model_parameter.py +2 -1
- simtools/applications/print_version.py +8 -9
- simtools/applications/production_derive_corsika_limits.py +6 -7
- simtools/applications/production_derive_statistics.py +1 -1
- simtools/applications/production_generate_grid.py +2 -2
- simtools/applications/production_merge_corsika_limits.py +214 -0
- simtools/applications/run_application.py +47 -113
- simtools/applications/simulate_calibration_events.py +166 -0
- simtools/applications/simulate_flasher.py +141 -0
- simtools/applications/{simulate_light_emission.py → simulate_illuminator.py} +35 -99
- simtools/applications/simulate_prod.py +6 -24
- simtools/applications/simulate_prod_htcondor_generator.py +7 -0
- simtools/applications/submit_array_layouts.py +2 -1
- simtools/applications/submit_model_parameter_from_external.py +1 -1
- simtools/applications/validate_camera_efficiency.py +30 -12
- simtools/applications/validate_camera_fov.py +1 -1
- simtools/applications/validate_cumulative_psf.py +1 -1
- simtools/applications/validate_file_using_schema.py +9 -5
- simtools/applications/validate_optics.py +1 -1
- simtools/camera/camera_efficiency.py +61 -45
- simtools/camera/single_photon_electron_spectrum.py +1 -1
- simtools/configuration/commandline_parser.py +46 -11
- simtools/configuration/configurator.py +4 -4
- simtools/corsika/corsika_config.py +45 -25
- simtools/corsika/corsika_histograms.py +6 -5
- simtools/data_model/data_reader.py +2 -3
- simtools/data_model/metadata_collector.py +32 -36
- simtools/data_model/metadata_model.py +15 -12
- simtools/data_model/model_data_writer.py +13 -32
- simtools/data_model/schema.py +74 -24
- simtools/data_model/validate_data.py +42 -12
- simtools/db/db_handler.py +125 -62
- simtools/db/db_model_upload.py +14 -19
- simtools/dependencies.py +98 -30
- simtools/io/ascii_handler.py +279 -0
- simtools/{io_operations → io}/io_handler.py +25 -3
- simtools/job_execution/htcondor_script_generator.py +15 -4
- simtools/layout/array_layout.py +1 -1
- simtools/layout/array_layout_utils.py +51 -12
- simtools/model/array_model.py +41 -5
- simtools/model/flasher_model.py +106 -0
- simtools/model/model_parameter.py +4 -4
- simtools/model/model_repository.py +197 -2
- simtools/model/site_model.py +25 -0
- simtools/model/telescope_model.py +3 -1
- simtools/production_configuration/derive_corsika_limits.py +336 -427
- simtools/production_configuration/derive_production_statistics_handler.py +7 -6
- simtools/production_configuration/generate_production_grid.py +9 -11
- simtools/production_configuration/merge_corsika_limits.py +528 -0
- simtools/ray_tracing/incident_angles.py +706 -0
- simtools/ray_tracing/mirror_panel_psf.py +1 -0
- simtools/ray_tracing/psf_parameter_optimisation.py +792 -0
- simtools/ray_tracing/ray_tracing.py +6 -2
- simtools/reporting/docs_read_parameters.py +150 -62
- simtools/runners/corsika_runner.py +1 -1
- simtools/runners/corsika_simtel_runner.py +14 -5
- simtools/runners/runner_services.py +10 -5
- simtools/runners/simtools_runner.py +267 -0
- simtools/schemas/application_workflow.metaschema.yml +101 -68
- simtools/schemas/input/MST_mirror_2f_measurements.schema.yml +1 -1
- simtools/schemas/input/single_pe_spectrum.schema.yml +1 -1
- simtools/schemas/metadata.metaschema.yml +577 -3
- simtools/schemas/model_parameter.metaschema.yml +6 -6
- simtools/schemas/model_parameter_and_data_schema.metaschema.yml +4 -4
- simtools/schemas/model_parameters/adjust_gain.schema.yml +1 -1
- simtools/schemas/model_parameters/altitude.schema.yml +1 -1
- simtools/schemas/model_parameters/array_coordinates.schema.yml +1 -1
- simtools/schemas/model_parameters/array_coordinates_UTM.schema.yml +1 -1
- simtools/schemas/model_parameters/array_element_position_ground.schema.yml +1 -1
- simtools/schemas/model_parameters/array_element_position_utm.schema.yml +1 -1
- simtools/schemas/model_parameters/array_layouts.schema.yml +1 -1
- simtools/schemas/model_parameters/array_triggers.schema.yml +1 -1
- simtools/schemas/model_parameters/array_window.schema.yml +1 -1
- simtools/schemas/model_parameters/asum_clipping.schema.yml +1 -1
- simtools/schemas/model_parameters/asum_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/asum_shaping.schema.yml +1 -1
- simtools/schemas/model_parameters/asum_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/atmospheric_profile.schema.yml +1 -1
- simtools/schemas/model_parameters/atmospheric_transmission.schema.yml +1 -1
- simtools/schemas/model_parameters/axes_offsets.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_body_diameter.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_body_shape.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_config_file.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_config_rotate.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_degraded_efficiency.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_degraded_map.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_depth.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_filter.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_filter_incidence_angle.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_pixels.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_transmission.schema.yml +1 -1
- simtools/schemas/model_parameters/channels_per_chip.schema.yml +1 -1
- simtools/schemas/model_parameters/correct_nsb_spectrum_to_telescope_altitude.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_cherenkov_photon_bunch_size.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_cherenkov_photon_wavelength_range.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_first_interaction_height.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_iact_io_buffer.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_iact_max_bunches.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_iact_split_auto.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_longitudinal_shower_development.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_observation_level.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_particle_kinetic_energy_cutoff.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_starting_grammage.schema.yml +3 -3
- simtools/schemas/model_parameters/dark_events.schema.yml +1 -1
- simtools/schemas/model_parameters/default_trigger.schema.yml +1 -1
- simtools/schemas/model_parameters/design_model.schema.yml +1 -1
- simtools/schemas/model_parameters/disc_ac_coupled.schema.yml +1 -1
- simtools/schemas/model_parameters/disc_bins.schema.yml +1 -1
- simtools/schemas/model_parameters/disc_start.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_amplitude.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_fall_time.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_gate_length.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_hysteresis.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_output_amplitude.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_output_var_percent.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_pulse_shape.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_rise_time.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_scale_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_sigsum_over_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_time_over_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_var_gate_length.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_var_sigsum_over_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_var_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_var_time_over_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/dish_shape_length.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_clipping.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_ignore_below.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_pedsub.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_pre_clipping.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_prescale.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_presum_max.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_presum_shift.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_shaping.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_shaping_renormalize.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_threshold.schema.yml +2 -2
- simtools/schemas/model_parameters/dsum_zero_clip.schema.yml +1 -1
- simtools/schemas/model_parameters/effective_focal_length.schema.yml +1 -1
- simtools/schemas/model_parameters/epsg_code.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_ac_coupled.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_amplitude.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_bins.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_compensate_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_dev_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_err_compensate_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_err_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_amplitude.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_compensate_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_dev_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_err_compensate_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_err_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_max_signal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_max_sum.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_noise.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_sensitivity.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_sysvar_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_var_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_var_sensitivity.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_long_event_threshold.schema.yml +35 -0
- simtools/schemas/model_parameters/fadc_long_sum_bins.schema.yml +41 -0
- simtools/schemas/model_parameters/fadc_long_sum_offset.schema.yml +38 -0
- simtools/schemas/model_parameters/fadc_max_signal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_max_sum.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_mhz.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_noise.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_pulse_shape.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_sensitivity.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_sum_bins.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_sum_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_sysvar_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_var_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_var_sensitivity.schema.yml +1 -1
- simtools/schemas/model_parameters/fake_mirror_list.schema.yml +1 -1
- simtools/schemas/model_parameters/flatfielding.schema.yml +1 -1
- simtools/schemas/model_parameters/focal_length.schema.yml +1 -1
- simtools/schemas/model_parameters/focal_surface_parameters.schema.yml +1 -1
- simtools/schemas/model_parameters/focal_surface_ref_radius.schema.yml +1 -1
- simtools/schemas/model_parameters/focus_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/gain_variation.schema.yml +1 -1
- simtools/schemas/model_parameters/geomag_horizontal.schema.yml +1 -1
- simtools/schemas/model_parameters/geomag_rotation.schema.yml +1 -1
- simtools/schemas/model_parameters/geomag_vertical.schema.yml +1 -1
- simtools/schemas/model_parameters/hg_lg_variation.schema.yml +1 -1
- simtools/schemas/model_parameters/iobuf_maximum.schema.yml +1 -1
- simtools/schemas/model_parameters/iobuf_output_maximum.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_events.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_external_trigger.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_photons.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_pulse_exptime.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_pulse_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_pulse_sigtime.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_pulse_twidth.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_var_photons.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_wavelength.schema.yml +1 -1
- simtools/schemas/model_parameters/led_events.schema.yml +1 -1
- simtools/schemas/model_parameters/led_photons.schema.yml +1 -1
- simtools/schemas/model_parameters/led_pulse_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/led_pulse_sigtime.schema.yml +1 -1
- simtools/schemas/model_parameters/led_var_photons.schema.yml +1 -1
- simtools/schemas/model_parameters/lightguide_efficiency_vs_incidence_angle.schema.yml +1 -1
- simtools/schemas/model_parameters/lightguide_efficiency_vs_wavelength.schema.yml +50 -1
- simtools/schemas/model_parameters/min_photoelectrons.schema.yml +1 -1
- simtools/schemas/model_parameters/min_photons.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_align_random_distance.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_align_random_horizontal.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_align_random_vertical.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_class.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_degraded_reflection.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_focal_length.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_list.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_panel_2f_measurements.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_reflection_random_angle.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_reflectivity.schema.yml +1 -1
- simtools/schemas/model_parameters/multiplicity_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/muon_mono_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_autoscale_airmass.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_gain_drop_scale.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_offaxis.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_pixel_rate.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml +2 -2
- simtools/schemas/model_parameters/nsb_reference_value.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_scaling_factor.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_sky_map.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_spectrum.schema.yml +23 -30
- simtools/schemas/model_parameters/num_gains.schema.yml +1 -1
- simtools/schemas/model_parameters/only_triggered_telescopes.schema.yml +1 -1
- simtools/schemas/model_parameters/optics_properties.schema.yml +1 -1
- simtools/schemas/model_parameters/parabolic_dish.schema.yml +1 -1
- simtools/schemas/model_parameters/pedestal_events.schema.yml +1 -1
- simtools/schemas/model_parameters/photon_delay.schema.yml +1 -1
- simtools/schemas/model_parameters/photons_per_run.schema.yml +1 -1
- simtools/schemas/model_parameters/pixel_cells.schema.yml +1 -1
- simtools/schemas/model_parameters/pixels_parallel.schema.yml +1 -1
- simtools/schemas/model_parameters/pixeltrg_time_step.schema.yml +1 -1
- simtools/schemas/model_parameters/pm_average_gain.schema.yml +1 -1
- simtools/schemas/model_parameters/pm_collection_efficiency.schema.yml +1 -1
- simtools/schemas/model_parameters/pm_gain_index.schema.yml +1 -1
- simtools/schemas/model_parameters/pm_photoelectron_spectrum.schema.yml +1 -1
- simtools/schemas/model_parameters/pm_transit_time.schema.yml +1 -1
- simtools/schemas/model_parameters/pm_voltage_variation.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_degraded_map.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_diameter.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_hole_diameter.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_incidence_angle.schema.yml +11 -1
- simtools/schemas/model_parameters/primary_mirror_parameters.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_ref_radius.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_segmentation.schema.yml +1 -1
- simtools/schemas/model_parameters/qe_variation.schema.yml +1 -1
- simtools/schemas/model_parameters/quantum_efficiency.schema.yml +1 -1
- simtools/schemas/model_parameters/random_focal_length.schema.yml +1 -1
- simtools/schemas/model_parameters/random_generator.schema.yml +1 -1
- simtools/schemas/model_parameters/random_mono_probability.schema.yml +1 -1
- simtools/schemas/model_parameters/reference_point_altitude.schema.yml +1 -1
- simtools/schemas/model_parameters/reference_point_latitude.schema.yml +1 -1
- simtools/schemas/model_parameters/reference_point_longitude.schema.yml +1 -1
- simtools/schemas/model_parameters/reference_point_utm_east.schema.yml +1 -1
- simtools/schemas/model_parameters/reference_point_utm_north.schema.yml +1 -1
- simtools/schemas/model_parameters/sampled_output.schema.yml +1 -1
- simtools/schemas/model_parameters/save_pe_with_amplitude.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_baffle.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_degraded_map.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_degraded_reflection.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_diameter.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_hole_diameter.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_incidence_angle.schema.yml +11 -1
- simtools/schemas/model_parameters/secondary_mirror_parameters.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_ref_radius.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_reflectivity.schema.yml +11 -1
- simtools/schemas/model_parameters/secondary_mirror_segmentation.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_shadow_diameter.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_shadow_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/stars.schema.yml +2 -2
- simtools/schemas/model_parameters/store_photoelectrons.schema.yml +1 -1
- simtools/schemas/model_parameters/tailcut_scale.schema.yml +1 -1
- simtools/schemas/model_parameters/telescope_axis_height.schema.yml +1 -1
- simtools/schemas/model_parameters/telescope_random_angle.schema.yml +1 -1
- simtools/schemas/model_parameters/telescope_random_error.schema.yml +1 -1
- simtools/schemas/model_parameters/telescope_sphere_radius.schema.yml +1 -1
- simtools/schemas/model_parameters/telescope_transmission.schema.yml +1 -1
- simtools/schemas/model_parameters/teltrig_min_sigsum.schema.yml +1 -1
- simtools/schemas/model_parameters/teltrig_min_time.schema.yml +1 -1
- simtools/schemas/model_parameters/transit_time_calib_error.schema.yml +1 -1
- simtools/schemas/model_parameters/transit_time_compensate_error.schema.yml +1 -1
- simtools/schemas/model_parameters/transit_time_compensate_step.schema.yml +1 -1
- simtools/schemas/model_parameters/transit_time_error.schema.yml +1 -1
- simtools/schemas/model_parameters/transit_time_jitter.schema.yml +1 -1
- simtools/schemas/model_parameters/trigger_current_limit.schema.yml +1 -1
- simtools/schemas/model_parameters/trigger_delay_compensation.schema.yml +1 -1
- simtools/schemas/model_parameters/trigger_pixels.schema.yml +1 -1
- simtools/schemas/plot_configuration.metaschema.yml +5 -2
- simtools/schemas/production_configuration_metrics.schema.yml +12 -2
- simtools/schemas/production_tables.schema.yml +7 -2
- simtools/simtel/simtel_config_reader.py +2 -2
- simtools/simtel/simtel_config_writer.py +33 -23
- simtools/simtel/simtel_io_event_histograms.py +483 -0
- simtools/simtel/simtel_io_event_reader.py +65 -43
- simtools/simtel/simtel_io_event_writer.py +40 -20
- simtools/simtel/simtel_io_metadata.py +1 -1
- simtools/simtel/simtel_table_reader.py +95 -13
- simtools/simtel/simulator_array.py +138 -10
- simtools/simtel/simulator_camera_efficiency.py +32 -23
- simtools/simtel/simulator_light_emission.py +437 -271
- simtools/simtel/simulator_ray_tracing.py +1 -1
- simtools/simulator.py +105 -147
- simtools/telescope_trigger_rates.py +119 -0
- simtools/testing/configuration.py +24 -26
- simtools/testing/helpers.py +2 -2
- simtools/testing/log_inspector.py +52 -0
- simtools/testing/validate_output.py +87 -37
- simtools/utils/general.py +125 -255
- simtools/utils/geometry.py +56 -0
- simtools/utils/names.py +1 -1
- simtools/visualization/legend_handlers.py +180 -264
- simtools/visualization/plot_array_layout.py +20 -8
- simtools/visualization/plot_incident_angles.py +431 -0
- simtools/visualization/plot_pixels.py +1 -1
- simtools/visualization/plot_simtel_event_histograms.py +376 -0
- simtools/visualization/plot_simtel_events.py +816 -0
- simtools/visualization/plot_tables.py +133 -37
- simtools/visualization/visualize.py +1 -100
- gammasimtools-0.18.0.dist-info/RECORD +0 -376
- simtools/applications/calculate_trigger_rate.py +0 -187
- simtools/applications/generate_sim_telarray_histograms.py +0 -196
- simtools/production_configuration/derive_corsika_limits_grid.py +0 -232
- simtools/simtel/simtel_io_histogram.py +0 -621
- simtools/simtel/simtel_io_histograms.py +0 -552
- {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/WHEEL +0 -0
- {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/top_level.txt +0 -0
- /simtools/{io_operations → io}/hdf5_handler.py +0 -0
- /simtools/{io_operations → io}/legacy_data_handler.py +0 -0
- /simtools/{io_operations/io_table_handler.py → io/table_handler.py} +0 -0
|
@@ -4,9 +4,8 @@ import logging
|
|
|
4
4
|
import os
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
|
|
7
|
-
import yaml
|
|
8
|
-
|
|
9
7
|
import simtools.utils.general as gen
|
|
8
|
+
from simtools.io import ascii_handler
|
|
10
9
|
|
|
11
10
|
_logger = logging.getLogger(__name__)
|
|
12
11
|
|
|
@@ -43,24 +42,24 @@ def get_list_of_test_configurations(config_files):
|
|
|
43
42
|
|
|
44
43
|
# list of all applications
|
|
45
44
|
# (needs to be sorted for pytest-xdist, see Known Limitations in their website)
|
|
46
|
-
_applications = sorted({item["
|
|
45
|
+
_applications = sorted({item["application"] for item in configs if "application" in item})
|
|
47
46
|
for app in _applications:
|
|
48
47
|
configs.extend(
|
|
49
48
|
[
|
|
50
|
-
{"
|
|
49
|
+
{"application": app, "test_name": "auto-help", "configuration": {"help": True}},
|
|
51
50
|
{
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
51
|
+
"application": app,
|
|
52
|
+
"test_name": "auto-version",
|
|
53
|
+
"configuration": {"version": True},
|
|
55
54
|
},
|
|
56
|
-
{"
|
|
55
|
+
{"application": app, "test_name": "auto-no_config"},
|
|
57
56
|
]
|
|
58
57
|
)
|
|
59
58
|
|
|
60
59
|
return (
|
|
61
60
|
configs,
|
|
62
61
|
[
|
|
63
|
-
f"{item.get('
|
|
62
|
+
f"{item.get('application', 'no-app-name')}_{item.get('test_name', 'no-test-name')}"
|
|
64
63
|
for item in configs
|
|
65
64
|
],
|
|
66
65
|
)
|
|
@@ -74,9 +73,9 @@ def _read_configs_from_files(config_files):
|
|
|
74
73
|
# remove new line characters from config - otherwise issues
|
|
75
74
|
# with especially long file names
|
|
76
75
|
_dict = gen.remove_substring_recursively_from_dict(
|
|
77
|
-
|
|
76
|
+
ascii_handler.collect_data_from_file(file_name=config_file), substring="\n"
|
|
78
77
|
)
|
|
79
|
-
for application in _dict.get("
|
|
78
|
+
for application in _dict.get("applications", []):
|
|
80
79
|
configs.append(application)
|
|
81
80
|
return configs
|
|
82
81
|
|
|
@@ -108,12 +107,12 @@ def configure(config, tmp_test_directory, request):
|
|
|
108
107
|
if isinstance(model_version_requested, list) and len(model_version_requested) == 1:
|
|
109
108
|
model_version_requested = model_version_requested[0]
|
|
110
109
|
|
|
111
|
-
if "
|
|
110
|
+
if "configuration" in config:
|
|
112
111
|
_skip_test_for_model_version(config, model_version_requested)
|
|
113
112
|
_skip_test_for_production_db(config)
|
|
114
113
|
|
|
115
114
|
config_file, config_string, config_file_model_version = _prepare_test_options(
|
|
116
|
-
config["
|
|
115
|
+
config["configuration"],
|
|
117
116
|
output_path=tmp_output_path,
|
|
118
117
|
model_version=model_version_requested,
|
|
119
118
|
)
|
|
@@ -123,7 +122,7 @@ def configure(config, tmp_test_directory, request):
|
|
|
123
122
|
config_file_model_version = None
|
|
124
123
|
|
|
125
124
|
cmd = get_application_command(
|
|
126
|
-
app=config.get("
|
|
125
|
+
app=config.get("application", None),
|
|
127
126
|
config_file=config_file,
|
|
128
127
|
config_string=config_string,
|
|
129
128
|
)
|
|
@@ -132,9 +131,9 @@ def configure(config, tmp_test_directory, request):
|
|
|
132
131
|
|
|
133
132
|
def _skip_test_for_model_version(config, model_version_requested):
|
|
134
133
|
"""Skip test if model version requested is not supported."""
|
|
135
|
-
if config.get("
|
|
134
|
+
if config.get("model_version_use_current") is None or model_version_requested is None:
|
|
136
135
|
return
|
|
137
|
-
model_version_config = config["
|
|
136
|
+
model_version_config = config["configuration"]["model_version"]
|
|
138
137
|
if model_version_requested != model_version_config:
|
|
139
138
|
raise VersionError(
|
|
140
139
|
f"Model version requested {model_version_requested} not supported for this test"
|
|
@@ -143,7 +142,7 @@ def _skip_test_for_model_version(config, model_version_requested):
|
|
|
143
142
|
|
|
144
143
|
def _skip_test_for_production_db(config):
|
|
145
144
|
"""Skip test if production db is used."""
|
|
146
|
-
if not config.get("
|
|
145
|
+
if not config.get("skip_for_production_db"):
|
|
147
146
|
return
|
|
148
147
|
|
|
149
148
|
if "db.zeuthen.desy.de" in os.getenv("SIMTOOLS_DB_SERVER", ""):
|
|
@@ -184,19 +183,18 @@ def _prepare_test_options(config, output_path, model_version=None):
|
|
|
184
183
|
return None, "--" + next(iter(config.keys())).lower(), None
|
|
185
184
|
|
|
186
185
|
tmp_config_file = output_path / "tmp_config.yml"
|
|
187
|
-
config_file_model_version = config.get("
|
|
188
|
-
if model_version and "
|
|
189
|
-
config.update({"
|
|
186
|
+
config_file_model_version = config.get("model_version")
|
|
187
|
+
if model_version and "model_version" in config:
|
|
188
|
+
config.update({"model_version": model_version})
|
|
190
189
|
|
|
191
|
-
for key in ["
|
|
190
|
+
for key in ["output_path", "data_directory", "pack_for_grid_register"]:
|
|
192
191
|
if key in config:
|
|
193
192
|
config[key] = str(Path(output_path).joinpath(config[key]))
|
|
194
|
-
if key == "
|
|
195
|
-
config["
|
|
193
|
+
if key == "output_path":
|
|
194
|
+
config["use_plain_output_path"] = True
|
|
196
195
|
|
|
197
196
|
_logger.info(f"Writing config file: {tmp_config_file}")
|
|
198
|
-
|
|
199
|
-
yaml.safe_dump(config, file, sort_keys=False)
|
|
197
|
+
ascii_handler.write_data_to_file(data=config, output_file=tmp_config_file, sort_keys=False)
|
|
200
198
|
|
|
201
199
|
return tmp_config_file, None, config_file_model_version
|
|
202
200
|
|
|
@@ -245,7 +243,7 @@ def create_tmp_output_path(tmp_test_directory, config):
|
|
|
245
243
|
"""
|
|
246
244
|
try:
|
|
247
245
|
tmp_output_path = Path(tmp_test_directory).joinpath(
|
|
248
|
-
config["
|
|
246
|
+
config["application"] + "-" + config["test_name"]
|
|
249
247
|
)
|
|
250
248
|
except KeyError as exc:
|
|
251
249
|
raise KeyError(f"No application defined in configuration {config}.") from exc
|
simtools/testing/helpers.py
CHANGED
|
@@ -6,7 +6,7 @@ from pathlib import Path
|
|
|
6
6
|
|
|
7
7
|
def skip_camera_efficiency(config):
|
|
8
8
|
"""Skip camera efficiency tests if the old version of testeff is used."""
|
|
9
|
-
if "camera-efficiency" in config["
|
|
9
|
+
if "camera-efficiency" in config["application"] and not _new_testeff_version():
|
|
10
10
|
return (
|
|
11
11
|
"Any applications calling the old version of testeff are skipped "
|
|
12
12
|
"due to a limitation of the old testeff not allowing to specify "
|
|
@@ -42,7 +42,7 @@ def skip_multiple_version_test(config, model_version):
|
|
|
42
42
|
if not isinstance(model_version, list):
|
|
43
43
|
return None
|
|
44
44
|
|
|
45
|
-
config_model_version = config.get("
|
|
45
|
+
config_model_version = config.get("configuration", {}).get("model_version", [])
|
|
46
46
|
|
|
47
47
|
if not isinstance(config_model_version, list):
|
|
48
48
|
config_model_version = [config_model_version]
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""Inspect logs and output for errors and warnings."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import re
|
|
5
|
+
|
|
6
|
+
_logger = logging.getLogger(__name__)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
ERROR_PATTERNS = [
|
|
10
|
+
re.compile(r"error", re.IGNORECASE),
|
|
11
|
+
re.compile(r"exception", re.IGNORECASE),
|
|
12
|
+
re.compile(r"traceback", re.IGNORECASE),
|
|
13
|
+
re.compile(r"\b(failed to|has failed)\b", re.IGNORECASE),
|
|
14
|
+
re.compile(r"runtime\s*warning", re.IGNORECASE),
|
|
15
|
+
re.compile(r"segmentation fault", re.IGNORECASE),
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
IGNORE_PATTERNS = [re.compile(r"Falling back to 'utf-8' with errors='ignore'", re.IGNORECASE)]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def inspect(log_text):
|
|
22
|
+
"""
|
|
23
|
+
Inspect log text for errors and run-time warnings.
|
|
24
|
+
|
|
25
|
+
Ignore any lines containing "INFO::" (to avoid false positives
|
|
26
|
+
like "INFO:: Job error stream ").
|
|
27
|
+
|
|
28
|
+
Parameters
|
|
29
|
+
----------
|
|
30
|
+
log_text: str or list of str
|
|
31
|
+
Text of the log to inspect.
|
|
32
|
+
|
|
33
|
+
Returns
|
|
34
|
+
-------
|
|
35
|
+
bool
|
|
36
|
+
True if no errors or warnings are found, False otherwise.
|
|
37
|
+
"""
|
|
38
|
+
log_text = log_text if isinstance(log_text, list) else [log_text]
|
|
39
|
+
|
|
40
|
+
issues = [
|
|
41
|
+
(lineno, line)
|
|
42
|
+
for txt in log_text
|
|
43
|
+
for lineno, line in enumerate(txt.splitlines(), 1)
|
|
44
|
+
if "INFO::" not in line
|
|
45
|
+
and any(p.search(line) for p in ERROR_PATTERNS)
|
|
46
|
+
and not any(p.search(line) for p in IGNORE_PATTERNS)
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
for lineno, line in issues:
|
|
50
|
+
_logger.error(f"Error or warning found in log at line {lineno}: {line.strip()}")
|
|
51
|
+
|
|
52
|
+
return not issues
|
|
@@ -7,12 +7,16 @@ import numpy as np
|
|
|
7
7
|
from astropy.table import Table
|
|
8
8
|
|
|
9
9
|
import simtools.utils.general as gen
|
|
10
|
+
from simtools.db import db_handler
|
|
11
|
+
from simtools.io import ascii_handler
|
|
10
12
|
from simtools.testing import assertions
|
|
11
13
|
|
|
12
14
|
_logger = logging.getLogger(__name__)
|
|
13
15
|
|
|
14
16
|
|
|
15
|
-
def validate_application_output(
|
|
17
|
+
def validate_application_output(
|
|
18
|
+
config, from_command_line=None, from_config_file=None, db_config=None
|
|
19
|
+
):
|
|
16
20
|
"""
|
|
17
21
|
Validate application output against expected output.
|
|
18
22
|
|
|
@@ -30,41 +34,47 @@ def validate_application_output(config, from_command_line=None, from_config_file
|
|
|
30
34
|
Model version from the configuration file.
|
|
31
35
|
|
|
32
36
|
"""
|
|
33
|
-
if "
|
|
37
|
+
if "integration_tests" not in config:
|
|
34
38
|
return
|
|
35
39
|
|
|
36
|
-
for integration_test in config["
|
|
40
|
+
for integration_test in config["integration_tests"]:
|
|
37
41
|
_logger.info(f"Testing application output: {integration_test}")
|
|
38
42
|
|
|
39
43
|
if from_command_line == from_config_file:
|
|
40
|
-
_validate_output_files(config, integration_test)
|
|
44
|
+
_validate_output_files(config, integration_test, db_config)
|
|
41
45
|
|
|
42
|
-
if "
|
|
46
|
+
if "file_type" in integration_test:
|
|
43
47
|
assert assertions.assert_file_type(
|
|
44
|
-
integration_test["
|
|
45
|
-
Path(config["
|
|
46
|
-
config["
|
|
48
|
+
integration_test["file_type"],
|
|
49
|
+
Path(config["configuration"]["output_path"]).joinpath(
|
|
50
|
+
config["configuration"]["output_file"]
|
|
47
51
|
),
|
|
48
52
|
)
|
|
49
53
|
_test_simtel_cfg_files(config, integration_test, from_command_line, from_config_file)
|
|
50
54
|
|
|
51
55
|
|
|
52
|
-
def _validate_output_files(config, integration_test):
|
|
56
|
+
def _validate_output_files(config, integration_test, db_config):
|
|
53
57
|
"""Validate output files."""
|
|
54
|
-
if "
|
|
58
|
+
if "reference_output_file" in integration_test:
|
|
55
59
|
_validate_reference_output_file(config, integration_test)
|
|
56
|
-
if "
|
|
57
|
-
_validate_output_path_and_file(config, integration_test["
|
|
58
|
-
if "
|
|
60
|
+
if "test_output_files" in integration_test:
|
|
61
|
+
_validate_output_path_and_file(config, integration_test["test_output_files"])
|
|
62
|
+
if "output_file" in integration_test:
|
|
59
63
|
_validate_output_path_and_file(
|
|
60
64
|
config,
|
|
61
|
-
[{"
|
|
65
|
+
[{"path_descriptor": "output_path", "file": integration_test["output_file"]}],
|
|
66
|
+
)
|
|
67
|
+
if "model_parameter_validation" in integration_test:
|
|
68
|
+
_validate_model_parameter_json_file(
|
|
69
|
+
config,
|
|
70
|
+
integration_test["model_parameter_validation"],
|
|
71
|
+
db_config,
|
|
62
72
|
)
|
|
63
73
|
|
|
64
74
|
|
|
65
75
|
def _test_simtel_cfg_files(config, integration_test, from_command_line, from_config_file):
|
|
66
76
|
"""Test simtel cfg files."""
|
|
67
|
-
cfg_files = integration_test.get("
|
|
77
|
+
cfg_files = integration_test.get("test_simtel_cfg_files", {})
|
|
68
78
|
if isinstance(from_command_line, list):
|
|
69
79
|
sources = from_command_line
|
|
70
80
|
elif isinstance(from_config_file, list):
|
|
@@ -81,12 +91,12 @@ def _test_simtel_cfg_files(config, integration_test, from_command_line, from_con
|
|
|
81
91
|
def _validate_reference_output_file(config, integration_test):
|
|
82
92
|
"""Compare with reference output file."""
|
|
83
93
|
assert compare_files(
|
|
84
|
-
integration_test["
|
|
85
|
-
Path(config["
|
|
86
|
-
config["
|
|
94
|
+
integration_test["reference_output_file"],
|
|
95
|
+
Path(config["configuration"]["output_path"]).joinpath(
|
|
96
|
+
config["configuration"]["output_file"]
|
|
87
97
|
),
|
|
88
|
-
integration_test.get("
|
|
89
|
-
integration_test.get("
|
|
98
|
+
integration_test.get("tolerance", 1.0e-5),
|
|
99
|
+
integration_test.get("test_columns", None),
|
|
90
100
|
)
|
|
91
101
|
|
|
92
102
|
|
|
@@ -94,26 +104,64 @@ def _validate_output_path_and_file(config, integration_file_tests):
|
|
|
94
104
|
"""Check if output paths and files exist."""
|
|
95
105
|
for file_test in integration_file_tests:
|
|
96
106
|
try:
|
|
97
|
-
output_path = config["
|
|
107
|
+
output_path = config["configuration"][file_test["path_descriptor"]]
|
|
98
108
|
except KeyError as exc:
|
|
99
109
|
raise KeyError(
|
|
100
|
-
f"Path {file_test['
|
|
110
|
+
f"Path {file_test['path_descriptor']} not found in integration test configuration."
|
|
101
111
|
) from exc
|
|
102
112
|
|
|
103
|
-
output_file_path = Path(output_path) / file_test["
|
|
113
|
+
output_file_path = Path(output_path) / file_test["file"]
|
|
104
114
|
_logger.info(f"Checking path: {output_file_path}")
|
|
105
115
|
try:
|
|
106
116
|
assert output_file_path.exists()
|
|
107
117
|
except AssertionError as exc:
|
|
108
118
|
raise AssertionError(f"Output file {output_file_path} does not exist. ") from exc
|
|
109
119
|
|
|
110
|
-
if "
|
|
120
|
+
if "expected_output" in file_test:
|
|
111
121
|
assert assertions.check_output_from_sim_telarray(
|
|
112
122
|
output_file_path,
|
|
113
|
-
file_test["
|
|
123
|
+
file_test["expected_output"],
|
|
114
124
|
)
|
|
115
125
|
|
|
116
126
|
|
|
127
|
+
def _validate_model_parameter_json_file(config, model_parameter_validation, db_config):
|
|
128
|
+
"""
|
|
129
|
+
Validate model parameter json file and compare it with a reference parameter from the database.
|
|
130
|
+
|
|
131
|
+
Requires database connection to pull the model parameter for a given telescope or site model.
|
|
132
|
+
|
|
133
|
+
Parameters
|
|
134
|
+
----------
|
|
135
|
+
config: dict
|
|
136
|
+
Configuration dictionary.
|
|
137
|
+
model_parameter_validation: dict
|
|
138
|
+
Dictionary with model parameter validation configuration.
|
|
139
|
+
|
|
140
|
+
"""
|
|
141
|
+
_logger.info(f"Checking model parameter json file: {model_parameter_validation}")
|
|
142
|
+
db = db_handler.DatabaseHandler(mongo_db_config=db_config)
|
|
143
|
+
|
|
144
|
+
reference_parameter_name = model_parameter_validation.get("reference_parameter_name")
|
|
145
|
+
|
|
146
|
+
reference_model_parameter = db.get_model_parameter(
|
|
147
|
+
parameter=reference_parameter_name,
|
|
148
|
+
site=config["configuration"].get("site"),
|
|
149
|
+
array_element_name=config["configuration"].get("telescope"),
|
|
150
|
+
model_version=config["configuration"].get("model_version"),
|
|
151
|
+
)
|
|
152
|
+
parameter_file = (
|
|
153
|
+
Path(config["configuration"]["output_path"])
|
|
154
|
+
/ config["configuration"].get("telescope")
|
|
155
|
+
/ model_parameter_validation["parameter_file"]
|
|
156
|
+
)
|
|
157
|
+
model_parameter = ascii_handler.collect_data_from_file(parameter_file)
|
|
158
|
+
assert _compare_value_from_parameter_dict(
|
|
159
|
+
model_parameter["value"],
|
|
160
|
+
reference_model_parameter[reference_parameter_name]["value"],
|
|
161
|
+
model_parameter_validation["tolerance"],
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
|
|
117
165
|
def compare_files(file1, file2, tolerance=1.0e-5, test_columns=None):
|
|
118
166
|
"""
|
|
119
167
|
Compare two files of file type ecsv, json or yaml.
|
|
@@ -171,8 +219,8 @@ def compare_json_or_yaml_files(file1, file2, tolerance=1.0e-2):
|
|
|
171
219
|
True if the files are equal.
|
|
172
220
|
|
|
173
221
|
"""
|
|
174
|
-
data1 =
|
|
175
|
-
data2 =
|
|
222
|
+
data1 = ascii_handler.collect_data_from_file(file1)
|
|
223
|
+
data2 = ascii_handler.collect_data_from_file(file2)
|
|
176
224
|
data1.pop("schema_version", None)
|
|
177
225
|
data2.pop("schema_version", None)
|
|
178
226
|
|
|
@@ -229,9 +277,9 @@ def compare_ecsv_files(file1, file2, tolerance=1.0e-5, test_columns=None):
|
|
|
229
277
|
cuts applied. This is configured through the test_columns parameter. This is
|
|
230
278
|
a list of dictionaries, where each dictionary contains the following
|
|
231
279
|
key-value pairs:
|
|
232
|
-
-
|
|
233
|
-
-
|
|
234
|
-
-
|
|
280
|
+
- test_column_name: column name to compare.
|
|
281
|
+
- cut_column_name: column for filtering.
|
|
282
|
+
- cut_condition: condition for filtering.
|
|
235
283
|
|
|
236
284
|
Parameters
|
|
237
285
|
----------
|
|
@@ -250,7 +298,7 @@ def compare_ecsv_files(file1, file2, tolerance=1.0e-5, test_columns=None):
|
|
|
250
298
|
table2 = Table.read(file2, format="ascii.ecsv")
|
|
251
299
|
|
|
252
300
|
if test_columns is None:
|
|
253
|
-
test_columns = [{"
|
|
301
|
+
test_columns = [{"test_column_name": col} for col in table1.colnames]
|
|
254
302
|
|
|
255
303
|
def generate_mask(table, column, condition):
|
|
256
304
|
"""Generate a boolean mask based on the condition (note the usage of eval)."""
|
|
@@ -261,12 +309,12 @@ def compare_ecsv_files(file1, file2, tolerance=1.0e-5, test_columns=None):
|
|
|
261
309
|
)
|
|
262
310
|
|
|
263
311
|
for col_dict in test_columns:
|
|
264
|
-
col_name = col_dict["
|
|
312
|
+
col_name = col_dict["test_column_name"]
|
|
265
313
|
mask1 = generate_mask(
|
|
266
|
-
table1, col_dict.get("
|
|
314
|
+
table1, col_dict.get("cut_column_name", ""), col_dict.get("cut_condition", "")
|
|
267
315
|
)
|
|
268
316
|
mask2 = generate_mask(
|
|
269
|
-
table2, col_dict.get("
|
|
317
|
+
table2, col_dict.get("cut_column_name", ""), col_dict.get("cut_condition", "")
|
|
270
318
|
)
|
|
271
319
|
table1_masked, table2_masked = table1[mask1], table2[mask2]
|
|
272
320
|
|
|
@@ -289,12 +337,14 @@ def _validate_simtel_cfg_files(config, simtel_cfg_file):
|
|
|
289
337
|
|
|
290
338
|
"""
|
|
291
339
|
reference_file = Path(simtel_cfg_file)
|
|
292
|
-
test_file =
|
|
293
|
-
"
|
|
340
|
+
test_file = (
|
|
341
|
+
Path(config["configuration"]["output_path"])
|
|
342
|
+
/ f"model/{config['configuration']['model_version']}"
|
|
343
|
+
/ reference_file.name.replace("_test", f"_{config['configuration']['label']}")
|
|
294
344
|
)
|
|
295
345
|
_logger.info(
|
|
296
346
|
f"Comparing simtel cfg files: {reference_file} and {test_file} "
|
|
297
|
-
f"for model version {config['
|
|
347
|
+
f"for model version {config['configuration']['model_version']}"
|
|
298
348
|
)
|
|
299
349
|
return _compare_simtel_cfg_files(reference_file, test_file)
|
|
300
350
|
|