CHANGELOG#
All notable changes to the simtools project will be documented in this file. Changes for upcoming releases can be found in the docs/changes directory.
This changelog is generated using Towncrier, see the developer documentation for more information.
v0.38.3 - 2026-10-06#
Bugfixes#
Prefer the dependency catalogue bundled with simtools over a host working-directory catalogue, keeping container defaults consistent with the installed software. Explicit catalogue overrides remain supported. (#2610)
Fix inconsistency in setting output paths between integration test output and validation steps. (#2612)
v0.38.2 - 2026-10-06#
Bugfixes#
Support both filesystem and Git simulation-model readers in integration tests, including Git revisions for production-summary and model-parameter-table validation. Use
output_pathfor generated array-element position files, reservingsimulation_models_pathfor input model repositories. (#2607)Resolve integration-test validation schemas through the shared schema loader using package-relative names, allowing validation with installed simtools packages from any working directory. (#2608)
New Features#
Maintenance#
Reduce external CI build dependencies by caching pinned CORSIKA7 and sim_telarray inputs in private GHCR snapshots. (#2596)
Simplify pytest configuration by mirroring simulation-model and simtools-test environment variables with matching command-line options. Remove the redundant direct test-resource path setting. (#2605)
v0.38.1 - 2026-10-02#
Bugfixes#
Fix absolute path references for simulation model path in two integration tests. (#2595)
Maintenance#
v0.38.0 - 2026-10-01#
Bugfixes#
Do not initialize simulation model reader when generating test resources. (#2525)
Ensure that child processes of
simtools-run-applicationuse the given env file. (#2530)Bugfix in UTM to ground coordinates transformation for non-telescope array elements: ignore missing telescope axis height for altitude calculation. (#2533)
HTCondor container workers now use safe Python path handling and do not inject the submitting checkout into
PYTHONPATH. (#2544)Fix illuminator simulation error handling. (#2555)
Honor the registered array-element list when generating array configurations. (#2563)
Return a failing exit status when model-production directories differ. (#2564)
Stream standalone reduced-event exports and fail when the input pattern matches no files. (#2565)
Report duplicate threshold/run inputs instead of silently dropping one product. (#2566)
Reject event histogram inputs with mixed exposure metadata or binning. (#2567)
Require measured PSF data before running cumulative-PSF ray tracing. (#2568)
Fail illuminator simulation when the requested selection schedules no pairs. (#2570)
Support CORSIKA output validation without an expected shower count. (#2571)
Convert FADC readout samples to nanoseconds when deriving pulse-shape parameters. (#2572)
Validate zenith angles before applying the camera-efficiency secant airmass model. (#2574)
Reject unknown primary particles during automatic trigger-rate spectrum selection. (#2575)
Verify interaction-table SHA-256 digests when supplied by the manifest. (#2576)
Allow camera-efficiency reference comparisons to tolerate architecture-dependent floating-point differences. (#2580)
Fixes minor issues leading to failures of the simulation models documentation generation in the CI in simulation-models. (#2582)
Documentation#
Improve integration test skill. (#2521)
New Features#
Add signal-level production comparison to simtools-compare-productions. (#2469)
Improve simulation production metadata and accessing of production files in file-based systems. Production runs now retain per-process resource records for CORSIKA, multipipe, and sim_telarray. (#2496)
Adds process-level accounting to simulation production execution. (#2512)
Improve metadata collection and validation to include
sim_telarrayand CORSIKA output. (#2513)Replace the
sim_telarraytestefftool by a simtools implementation. (#2516)Add functionality to
simtools-compare-productionsto compare and plot required computing resources. (#2535)Update and cleanup derive_incident_angle to export incident angle model parameters. (#2543)
Warn on DIRAC filename-length overflow in generated runner outputs. (#2547)
Add a service application
simtools-validate-repository-consistencyto be used e.g., in the setting repository to validate complete configuration and metadata files. (#2559)Add ECSV support for model-parameter setting-workflow outputs and validation. (#2562)
Add CORSIKA7 QGSJet-II / URQMD executables for flat and curved atmosphere (selected by
corsika_he_interaction=qgs2). (#2583)
Maintenance#
Exporting trigger threshold as parameter and updating plotting. (#2457)
Simplification in simulation models structure for
CORSIKAandsim_telarrayparameters. (#2493)Remove overwrite.yaml files and move overwrite dictionaries into job grid file metadata. (#2494)
Reduce number of trigger to build-CI for
CORSIKAandsim_telarray. (#2504)Isolate MongoDB routines and support reading simulation models from a fixed Git revision (note! MongodDB now removed). (#2506)
Correct model-table serialization contracts, database asset identity handling, historical camera plotting, and generated model-parameter links. (#2508)
Change azimuth of the simulation-prod integration test to a value that is neither North nor South. (#2510)
Improve efficiency of CI testing changelogs. (#2524)
Adding integration tests for simtools-derive-bias-curves and removing duplication from documentation. (#2526)
Improve efficiency of several simtools applications by avoiding unjustified simulation model initialization. (#2528)
Remove code and schema related to deprecated
pedestal_eventsmodel parameter. (#2531)Rename
simtools-db-get-parameter-from-dbtosimtools-get-model-parameterandsimtools-db-get-array-layouts-from-dbtosimtools-get-array-layout. (#2532)Remove conversion application from
sim_telarrayconfiguration to simtools. (#2534)Speed up coordinate conversion workflows by loading only the required site parameters and caching dependency metadata. Restrict
SIMTOOLS_TESTS_PATHhandling to integration-test configuration. (#2536)Improve application startup by minimizing matplotlib imports. (#2537)
Improve efficiency of schema validation CI (x10 speedup). (#2540)
Address warnings issued during container builds. (#2545)
Remove MongoDB-related code. Simulation models are now retrieved from filesystem or Git sources. (#2548)
Improve file naming for trigger histogram writing; resolve model version issue with lists vs string handling. (#2550)
Add GitHub mirror fallback for integration test dependencies. (#2556)
Remove build-kit cache entries from container building workflows. (#2577)
Address linter issues for python 3.14.7. (#2581)
Add a preparation step to the integration tests workflows to provide required simulation model parameter files. (#2584)
Improve dependency catalogue with better readability and complete list of systems. Allow test CI to select simulation-models and simtools-tests branches, defaulting to main independently of release dependency refs. Use readable Git refs in the dependency catalog and record observed commits in build provenance. Validate Git refs and artifact identifiers, honor optional interaction-table revisions, and bound production image tag lengths. (#2586)
Skip no-commit-to-main check when running the software update workflow. (#2587)
Minimize tests and documentation on dependency versions. (#2588)
Simulation model#
Update default simulation models tag to
v0.18.0.Add new model parameter
illuminator_tower_height. (#2514)
v0.37.0 - 2026-09-01#
API Changes#
Introduce consistent naming scheme for software and model version and tags. (#2466)
Separate the view cone metadata entry into two separate entries for the minimum and maximum view cone angles. This entry is used by the DIRAC file catalog. This change improves clarity and allows for more precise specification of the view cone range when searching for output files. (#2486)
Bugfixes#
Fix local-filesystem compatibility for calibration and simtel-array reports by normalizing missing-table errors and propagating telescope context to plotting lookups. (#2467)
Fix float precision for zenith/azimuth angles in CORSIKA config: angles are now stored with two decimal places instead of as integers, while output file names continue to use rounded integer values. (#2487)
Fix sign error in
_rotate_azimuth_by_180degthat caused zero camera hits for azimuths other than 0 deg and 180 deg. CORSIKA uses a left-handed coordinate system, so the geographic azimuth must be negated before applying the +180° travel-direction reversal. The corrected formula(-az + 180 + D) % 360is self-inverse, so theinvert_operationparameter has been removed. (#2488)
Documentation#
New Features#
Add machine-readable comparison statistics and configurable plot formats to
simtools-compare-productions. Compare selected array layouts independently and write each result to its own output directory. (#2449)Add functionality to plot PSF images in degrees instead of cm, using the effective focal length. This is controlled by the new
plot_images_in_degreesargument in the optics validation application. The plots include as well the name of the telescope in the annotation box. (#2461)Support directory-based trigger-histogram production, glob-based input list selection for
write_reduced_event_lists, and consistent source-checkout imports for HTCondor workers. (#2464)Improve application
simtools-resources-test-generateto prepare test resources from template. (#2477)Require simtools-tests version v0.37.0. (#2478)
Improve error messaging for integration tests when comparisons with reference files fail. (#2485)
Add a
--figure_dpi <dpi>command line parameter to change resolution of generated PNG figures (default is 300). (#2490)
Maintenance#
Ensure consistent version tagging for simtools-prod and simtools-dev images. (#2459)
View cone values printed in the job metadata are now rounded to two decimal places. This change ensures that the view cone values are consistently formatted and avoids potential issues with floating-point precision in the metadata. (#2462)
Move simtools
meta_parameterhandling into simulation-software schemas. (#2472)Add vim and diff to developer container. (#2474)
Resolve simtools-tests directory when using integration tests config files in applications. (#2475)
Fix hardwired version numbers in unit tests. Improve test output for failing tests. (#2478)
Improve robustness of
CORSIKAandsim_telarraybuilds by minimizing repository cloning. (#2480)Apptainer bind de-duplication now compares container destinations, preserving remapped binds safely. (#2484)
Simulation model#
Update default simulation models tag to
v0.17.1. (#2483)
v0.36.0 - 2026-08-20#
Simulation model#
Switch to simulation models version v0.17.0
Bugfixes#
Documentation#
Improve application documentation of
simtools-production-generate-grid. (#2399)
New Features#
Introduce a backend-neutral job execution API with local multiprocessing and optional HTCondor support. (#2406)
Add possibility to plot a single layout in
simtools-plot-array-layoutusing--array_layout_name_from_parameter_file. (#2434)Add integration and unit test benchmarking with dedicated GH page. (#2435)
Add flexible array layout definition for
array_layoutsmodel parameter. (#2436)Add statistical reports with provenance metadata to
simtools-compare-productions. (#2449)Keep consistent UUIDs when writing reduced event lists between temporary files and log files. (#2452)
Maintenance#
Calculating effective focal length as an average over all simulated stars at different offsets and then exporting it as a model parameter. Added errors to image centroids and focal length. (#2425)
Round pointing angles to two decimal places in the metadata file written for the DIRAC interface. (#2427)
Refactor integration test output validation modules. (#2433)
Extend support for handling list-type parameters in the
submit_model_parameter_from_externalapplication. This allows for more complex parameter structures to be passed and processed correctly. (#2437)Remove unit tests’ dependency on repository-local test resources by relocating required fixtures to
tests/unit_tests/resources; support versioned external integration-test resources via environment configuration and CI artifacts; remove obsolete resource-sync tooling and update affected tests and documentation. (#2440)Add the meta_parameter input argument to submit_model_parameter_from_external.py to allow setting the meta parameter flag when submitting a model parameter from an external source. (#2442)
Fix instrument name stripping of OBS- prefix when writing the model parameter JSON. (#2444)
Remove Apptainer build steps from container building due to instabilities in the build process. (#2446)
Add flags to pytest to print out reasons for skipped and xfailed tests. (#2448)
Don’t deploy to PyPI for release candidates. (#2453)
Centralize dependency and runtime version management in
dependency_versions.yml, including simulation-model and simtools-tests versions. Add environment export support for CI while preserving .env overrides (#2454)
v0.35.0 - 2026-08-07#
API Changes#
Set writing of reduced event lists to true by default. Change command line parameter from
--save_reduced_event_liststo--reduced_event_lists. Change--event_data_filecommand line parameter to--event_data_files. (#2398)Add
--show_optionsto list available values for selected command-line options (including those depending on the workspace environment or simulation models). (#2384)Rename ambiguous simtools application CLI and YAML configuration keys, reuse shared argument definitions, and align affected integration-test configurations. (#2403)
Remove ‘telescope’ command line parameter and replace it by
array_layout_namefor the following applications:generate_bias_curve_submissions.py
production_generate_grid.py
simulate_pedestals.py
simulate_prod.py
This resolves the ambiguous usage of single-telescope layout names.
(#2420)
Bugfixes#
Fix
production_generate_grid_horizontal_explicitgrid generation so fixed-energy simulations produce non-empty production tables. (#2357)Fixed simtools-prod container provenance generation to preserve the canonical dependency manifest while ensuring dependency-manifest.json.sha256 is present for verification in branch/release builds. (#2382)
Fix Python package and add resources and schema files. Fix simtools version settings for non-release builds. (#2413)
Fix writing of HA/Dec to metadata. (#2415)
Documentation#
New Features#
Added a sim_telarray logfile crawler and functionality to calculate and plot bias curves. (#2202)
Add metric ‘total number of expected triggered events’ to
simtools-production-derive-monte-carlo-statistics. Add viewcone restriction as additional CL. (#2346)Expand integration testing of generated ECSV tables with schema, content, and metadata validation. (#2356)
Add a filesystem simulation model source for all model-source applications. (#2367)
Run
simulate_prodwithCORSIKA/sim_telarrayand keepCORSIKAoutput. (#2370)Centralize dependency versions in
pyproject.tomland record dependency provenance in built images. (#2376)Write a per-job metadata YAML after simulation completes (e.g., for the DIRAC file catalog). (#2377)
Add rich metadata and simulation model to reduced event list output. Improve
simtools-inspect-fileapplication and allow printout of table and data content. (#2396)Retrieve and store transition energy between high- and low-energy interaction model directly from CORSIKA7 code and store it in
build_opts.yml. Takes into account differences between interaction models. (#2399)Improve integration tests for HDF5 output. Improve documentation of write-reduced-event-lists. (#2402)
Add application configuration to simtools metadata. (#2404)
Add checks that simtools fails fast when the required software is not available (mostly for
simulate*applications). (#2408)Build CORSIKA7 and sim_telarray natively on ARM (no QEMU). (#2414)
Allow selecting a CPU variant when manually triggering production image builds. (#2417)
Maintenance#
Finalize isolation of plotting (matplotlib) routines into the visualization module. (#2344)
Use the non-root
simtoolsuser in runtime containers while retaining root in the development container for bind-mounted editable installs. Update the base image to AlmaLinux 9.8 and Python to version 3.14. (#2351)Replace bash runtime determination of simulation jobs with Python’s time module. (#2354)
Change the minimum supported Python version to 3.14. (#2361)
Improve efficiency for reading model schema files (avoid multiple reading of the same files). (#2362)
Correct camera coordinate documentation and plotting tests while preventing camera plots from mutating pixel coordinates. (#2369)
Major refactoring of command-line interface (simplification, generalization). No changes expected on user-faced API. (#2371)
Improve SonarQube response and indicate soft fails for network errors. (#2372)
Add build validation for CORSIKA7 build scripts. Improve robustness of docker build scripts. (#2373)
Improve version and hadronic interaction model handling for CORSIKA. The
build_opts.ymlfile (typically in/workdir/simulation_software/corsika7/build_opts.yml) is the main source now. Introduce command line parameter to change transition energy from low-to-high energy interaction model. Add a new option to print available models:simtools-simulate-prod --list_available_corsika_models HE model LE model geometry executable epos urqmd curved corsika_epos_urqmd_curved epos urqmd flat corsika_epos_urqmd_flat qgs3 urqmd curved corsika_qgs3_urqmd_curved qgs3 urqmd flat corsika_qgs3_urqmd_flat
(#2374)
Disable Git LFS checkout in CI to avoid consuming the GitHub LFS bandwidth quota. (#2378)
Use reduced event-data HDF5 files instead of log files when calculating the NSB trigger rate. (#2386)
Cleanup of path-related command line parameters and improved and consistent usage of paths. (#2387)
Remove obsolete
simtools-merge-tablesapplication and associatedmerge_tables,_merge,write_table_in_hdf5, andcopy_metadata_to_hdf5functions fromsimtools.io.table_handler. (#2388)Remove the obsolete model-source inspection application and its corresponding tests and documentation. (#2389)
Large refactoring of unit tests with improve assert statements. (#2410)
Move dependency into
dependency_versions.ymlfrompyproject.toml. (#2412)Upload SonarQube report when triggering unit tests manually. (#2418)
Address several SonarQube issues reported on the main branch. (#2419)
v0.34.0 - 2026-07-15#
API Changes#
Changed
simtools-simulate-prodgrid-registration output handling.The command-line option was renamed from
--pack_for_grid_registerto--grid_output_path.When
--grid_output_pathis configured, simulation products are now written as plain files into that directory instead of creating a registration tarball. This includes copied sim_telarray logs, CORSIKA logs, histogram (.hdata) files, existing model archives, moved event output files, and a gzippedsimtools.log.gz. (#2320)
Bugfixes#
Allow integration tests to run from working directories containing a pytest configuration (see simpipe issue #34). (#2312)
Fixes
simtools-simulate-prodjob-grid precedence by rejecting ambiguous mixes of--job_grid_file/--job_grid_rowwith explicit production parameters.Job-grid row resolution now happens inside
simulate_prodbefore settings are loaded; the generic post-load override path was removed.Added parser/source tracking so CLI/YAML conflicts fail clearly while argparse defaults remain valid.
Updated tests, docs, and the integration config to cover direct single-row job-grid execution.
(#2328)
Resolve reading of ecsv-style tables for
simtools-validate-cumulative-psf. (#2342)Fixed schema validation so dimensionless integer columns in generated job grids stay integer-typed instead of being written to ECSV as floats. (#2343)
Documentation#
New Features#
Add application to generate and validate integration test resources:
simtools-resources-test-generate. Used for simtools-tests test generation. (#2279)Allow to run integration and unit tests with resources from a configurable path (
--test_resources_path). Example:pytest -n auto --no-cov --model_version=7.0.0 \\ --test_resources_path=../simtools-tests/simtools-tests/v0.33.0/integration_tests \\ tests/integration_tests ``` ([#2283](https://github.com/gammasim/simtools/pull/2283))
Add generic runtime environment file option to
simtools-run-applicationandsimtools-resources-test-generate.Use
--runtime_environment_filepointing to e.g.runtime_environment: container_engine: podman image: ghcr.io/gammasim/simtools-prod:20260622-v78010-v2025-11-30-rc-generic environment_file: .env options: - "--arch amd64" - "-v /<whatever path>/simpipe:/workdir/external/simpipe:ro"
(#2284)
Add support for running
simtools-simulate-prodwith parameters sourced directly from a production job grid ECSV file. Allows to use--job_grid_file/--job_grid_rowto select a specific row from a job grid file to run a simulation with the parameters defined in that row. (#2291)Added backend-neutral parameter-scan grids for NSB and proton bias-curve simulations, with optional scan fields supported by the HTCondor submission generator. (#2298)
Change simulation production grid from RA/Dec based to HA/Dec based. Simplify production grid table with less columns and more descriptive column names. Update sim_telarray metadata to include array Az/Ze and HA/Dec information. (#2313)
Improve
simtools-plot-corsika-limits:correctly handle viewcone limits for cases of point-like simulations
improve plotting by adding projections of distance and energy axes to 2D distribution panels
set consistent limits to the axes when plotting: always use the broad-range simulation limits
(#2319)
Add functionality to
simtools-resources-test-generateto run a single test generation config file using the--config_fileoption.Example:
simtools-resources-test-generate --test_directory . --simtools_version v0.34.0 --overwrite_collection_files \ --config_file simtools-tests/v0.34.0/integration_tests/config_files/generate_array_config_alpha_north_5.0.0.config.yml ``` ([#2321](https://github.com/gammasim/simtools/pull/2321))Enable
--runtime_environment_filesetting of run time environment (e.g., a container environment) with correct path settings for test resource generation and generic application running. (#2323)Introduce schema-validation for
sim_telarraymetaparameters. To export the full metadata description including all model parameters, use applicationsimtools-export-sim-telarray-metadata-schema. (#2324)Add schema URL to metadata of job grid table. Add functionality to
simtools-validate-file-using-schemato read this schema from the header file. (#2327)Generalize the creation and use of trigger-event histograms with several major improvements:
Add a generic application,
simtools-write-trigger-histograms, to build and write trigger-event histograms from reduced event-data files. The following applications were updated to use these generic histograms:simtools-compare-productionssimtools-production-derive-corsika-limitssimtools-plot-simulated-event-distributionssimtools-production-derive-monte-carlo-statistics
Improve the estimation of required Monte Carlo statistics in
simtools-production-derive-monte-carlo-statisticsby using the generic histograms and by providing a more robust estimate of the relative statistical uncertainty.Improve file-type related utilities:
add a utility application,
simtools-inspect-file, to print the main structure and metadata of a simtools-generated file.add the new modules
simtools.io.file_typeandsimtools.io.file_inspectorwith helper functions to identify and inspect files.
(#2329)
Calculate mean, max, and stdev of shower-reuse as function of energy, core, and angular distance:
filled and saved with
simtools-write-trigger-histogramsplotted with
simtools-plot-simtel-events
(#2331)
Maintenance#
Improve robustness when writing reduced event-data HDF5 files with
simtools-write-reduced-event-lists. (#2296)Increase performance and efficiency of
simtools-write-reduced-event-lists. (#2310)Add flake8-cognitive-complexity to pre-commit stage. (#2311)
Improve efficiency and memory footprint for reading of reduced event data and histogram filling for
simtools-production-derive-corsika-limits. (#2316)Simplify naming of sim_telarray configuration files written to disk for simulation production:
telescope configuration files are now of type
CTAO-LSTS-01.cfg,CTAO-SSTS-25.cfgarray configuration files are of type
CTAO-South-beta.cfgraises an exception if existing configuration files are overwritten by an application.
add a run-number level to the model sub directory to avoid overwriting for applications using several models.
(#2318)
Review and improve pylint options with less disabled messages. (#2330)
Major refactor of application documentation generation:
read command line parameters from their definition in the configuration module (instead of repeating the help messages in the docstring)
allow to read the integration test configuration file and use them as use-case examples in the application documentation
(#2333)
Improve guidance for coding agents and generalize (so they can now be used with Copilot, Claude, and Codex):
add a generic
AGENTS.md(replaces.github/copilot-instructions.md)move skills to
.agents/skillsand add a documentation skill.
(#2337)
Change trigger for simtools-prod and simtools-dev container generation. Don’t push when running on main. Push for tags of type
vXX.YY.ZZ-rc(release candidates). (#2339)Update of tests/resources with re-generated files. General update to model version v7.0.0. (#2340)
v0.33.0 - 2026-06-30#
API Changes#
Remove obsolete
read_value_from_filefunction fromdata_readerand corresponding unit tests. (#2272)
Bugfixes#
Fix writing of CORSIKA input file: add setting of runnumber (
RUNNR),HOST,USER. (#2259)Small bug fix in retrieving run times < 1 s: zero should be treated as a valid value. (#2274)
Fix sim_telarray output validation and include paths, stabilize PSF calculations, correct waveform plot time axes, and validate expected event counts of zero. (#2294)
Documentation#
Improve and expand documentation on how to configure and run simulation productions. (#2253)
New Features#
Improved generation of CORSIKA production grid, including Emax scaling, better interpolation, more plotting. (#2246)
Replace NSB axis in simtools-production-generate-grid by using integrated nsb rate derived from site model. (#2257)
Allow simtools-production-generate-grid to generate large grids with millions of grid points. (#2262)
Add export functionality for mirror list model parameter file to
ecsvformat. (#2273)Add schema for production grid table file. (#2277)
Enforce file length limits for sim_telarray configuration files. (#2287)
Allow
simtools-production-derive-corsika-limitsto skip invalid reduced event-data HDF5 files. (#2289)Add
--ignore_existing_parameter_versionto skip model-parameter version checks in applications and workflows. (#2292)
Maintenance#
Add GitHub pull request template for release candidates. (#2252)
Update
plt.get_cmapcommand to run with matplotlib v3.11. (#2261)Remove obsolete application
simtools-production-merge-corsika-limits. (#2263)Add git-lfs to the simtools development Docker image. (#2266)
Remove FITS support for reduced event data writer and reader. (#2276)
Add McCabe complexity check to ruff settings. (#2302)
Add ruff rule on floating point comparison (currently in ruff preview). (#2304)
v0.32.0 - 2026-06-08#
API Changes#
Change application name
simtools-production-plot-corsika-limitstosimtools-plot-corsika-limitsto align naming with other plotting scripts. (#2243)
Bugfixes#
New Features#
Maintenance#
Increase robustness of CI unit and integration tests. Add caching steps for CORSIKA interaction tables, simulation models, and sonar binary as a fallback. (#2239)
Disable remote model-source runs for nightly integration tests (fail too often with network issues). (#2241)
Add GitHub Copilot skill for integration testing. (#2247)
Fix issue with running SonarQube re-analysis for repeated commits to a PR. (#2249)
Simulation model#
v0.31.0 - 2026-06-03#
API Changes#
Rename
general.ensure_iterabletogeneral.ensure_listto clarify function intent (API change). (#2191)
Bugfixes#
Fixed bug in ground-to-shower coordinate transformation of passing angles in degrees where radians are expected. Fixed coordinate system orientation for transformation. (#2194)
Add ‘moon’ NSB level to legacy simtel writer. Fix TypeError when writing HDF5 tables with object-dtype string columns (e.g.
file_nameinFILE_INFO). (#2210)Fix model parameter validation for dimensionless floats. (#2222)
Fix bug in overwrite-model parameter mechanism for configuration_sim_telarray parameters: parameters were set for all telescopes, rather than only for the specified ones. (#2228)
Fix
instrumentfield in model parameter schema and restrict it to allowed names defined incommon_definitions.schema.yml. (#2232)
New Features#
Add functionality for generating job configurations for a parameter grid to
simulate_prod_htcondor_generator. (#2174)Add Apptainer generation step to
simtools-prodcontainer production step. (#2175)Add functionality to
production_derive_corsika_limitsandplot_simulated_event_distributionsto read in several event data files using glob patterns. (#2176)Add feature to allow for user-defined cosmic-ray spectra on the trigger rate application. (#2177)
Add an event-level production comparison application with multi-production trigger-distribution plots. (#2181)
Add the possibility to run the derivation of CORSIKA limits in parallel - e.g. for several zenith angles. (#2182)
Improve derivation of CORSIKA limits and allow to define a loss fraction per energy bin (‘differential loss’). (#2185)
Major improvements to simulation production configuration preparation with clear separation introduced between observation grid generation and backend submission code. Allow NSHOW to follow a pre-defined power law for simulation production grid definition. (#2190)
Add application to plot CORSIKA limits. Rearrange limits plotting for
production_merge_corsika_limits.py. (#2196)Add schema for CORSIKA limits tables. (#2203)
Add zenith-angle scaling mode for
showers_per_runin production grid generation (#2207)Add a file collection step to simtools-run-application. (#2215)
Allow integration tests to be run from any directory, not only the simtools base directory. (#2216)
Add glob-pattern collection, multi-output-path support, and zenith/azimuth/NSB-encoded plot filenames to
simtools-production-derive-corsika-limits. (#2219)Add illuminator_telescope_visibility model parameter schema (#2220)
Allow a single telescope name (e.g.,
MSTN-05) asarray_layout_name, automatically creating a single-telescope layout without requiring a model entry. (#2221)Add illuminator-telescope visibility model parameter and parallel multi-pair simulation support. A new
illuminator_telescope_visibilityschema defines which telescopes each illuminator can reach. Thesimulate_illuminatorapplication gains--simulate_alland--max_workersoptions to run all valid pairs in parallel via the newMultiIlluminatorSimulatorclass. (#2224)
Maintenance#
Move code from application scripts into modules to improve unit test coverage and maintainability. (#2162)
Improve event data list reading performance. (#2180)
Add unit-test skill to support Copilot. (#2187)
Add CI tests to ensure that every simtools Python module has a corresponding unit test module. (#2193)
Minor fixes to API calls, docstrings, and parameter usage. (#2197)
Allow integration tests configured with
xfail_network_error: trueto xfail on network errors. (#2199)Address security issues reported by GitHub scanner (https://github.com/gammasim/simtools/security/code-scanning). (#2209)
Update simtools-run-application and avoid generation of spurious directory named
output. (#2217)Efficiency improvements for unit tests (mostly in unit tests of the plotting routines). (#2223)
Minor refactoring of unit tests to clearly follow general rules (e.g., outlined in documentation or skills). (#2226)
Improve efficiency of integration tests. (#2227)
v0.30.0 - 2026-05-07#
Bugfixes#
Disable Astropy IERS auto-download in offline/test mode to prevent network timeouts and spurious warnings causing test failures. (#2129)
Fix sim_telarray seed handling when passing a single value to sim_telarray_seed together with sim_telarray_instrument_seed, and add integration coverage for this configuration. (#2131)
Fix contradictory CLI argument behavior by making defaulted simulation options optional so help defaults are actually applied in simulate-prod. (#2135)
Fill
iact_atmo_versionfield correctly in the CORSIKA7 building option file (build_opts.yml). (#2169)
Documentation#
Update contributing and authorship procedures. (#2160)
New Features#
Add option to generate the production grid along declination lines and include a module to plot the production grid in horizontal and equatorial coordinate systems. (#2075)
Added a unified parameter export flow for both file-backed and dict-backed table parameters, with stricter validation and normalization of table content including required
column_unitsforfadc_pulse_shape. Plot table generation now selects the schema document bymodel_parameter_schema_version(with fallback), and sim_telarray/model-source handling was aligned with expanded unit test coverage. (#2088)Add additional printouts and checks for using container images (e.g., if container exists or needs to be pulled). Improve startup procedures for
simtools-run-application. (#2111)Add UUID7-based activity IDs for each application execution, propagate into metadata, and track associated activities in workflow metadata file. (#2113)
Add functionality to update simulation model directly from settings workflows using the model parameter version and derivation activity ID. (#2115)
Add
model_statuskeywords toSimulationModelsInfoschema. (#2116)Add possibility to overwrite model parameters for CORSIKA and sim_telarray configuration from command line. (#2124, #2127)
Add the possibility to plot a single layout from an array layout parameter JSON file. (#2126)
Allow custom list of telescopes for corsika limits derivation. (#2128)
Allow to update
configuration_sim_telarrayfields in model files using the production info files. (#2130)Command-line arguments now take higher precedence than configuration file options. (#2132)
Add command line option to select figure format(s) (e.g., png, pdf):
--figure_format. (#2133)Remove duplication of filling metadata when writing model parameter metadata information. Improve filling of metadata for the case of reading CTAO layouts from the common identifier gitlab repository. (#2134)
Add CORSIKA CLI options for interaction models and runtime paths. (#2137)
Add
simtools-docs-produce-production-summaryapplication to generate a markdown table of production version descriptions from simulation-models info files. (#2139)Allow file-based model parameter tables to be written with different file names than the one stored in the model source. Improve writing of metadata when converting sim_telarray style tables. (#2140)
Add a new application
simtools-write-reduced-event-liststo read event data from sim_telarray and write reduced event lists. (#2141)Allow to specify model version dependent configuration parameters in configuration files. (#2146)
Add functionality to the former array-layout retrieval application to retrieve besides telescopes also calibration array elements. (#2163)
Add CORSIKA v7.850 to simtools-prod image generation pipeline. (#2169)
Add functionality to assign valid telescope numbers to additional MSTs in legacy prod6 simulations. (#2171)
Maintenance#
Consolidate usage of command line configuration; removed duplicated items and solved name conflicts (e.g. zenith vs zenith_angle). (#2096)
Do not use compact numeric list in json for non-dict-type numerical values. (#2114)
Generalize reading from git repositories. Add CTAO git repos as default values. (#2115)
Change legend font size in tabular plotting. (#2119)
Add command line flag to set the setting-workflows git tag for
maintain_simulation_model_add_production. (#2120)Fix writing of dict-table style model parameter files. Improve and simplify API of ModelDataWriter. (#2121)
Improve accuracy and completeness of Copilot instructions. (#2136)
Add retry-attempts for downloading CORSIKA interaction tables in CI to increase robustness against network issues. (#2142)
Add retry-attempts for cloning of model parameter repository to increase robustness against network issues. (#2143)
Use a GitHub Action for dotenv linting instead of direct installation and execution. (#2144)
Remove fail fast for unit test for CI unit tests. (#2145)
Run sonar in pip 3.13. matrix step (was: conda 3.13 step). (#2147)
Update base images to alma linux 9.7. Install GSL from source for sim_telarray. (#2153)
Remove conda option for installation of simtools. (#2154)
Remove
run_modesetup in simulate_illuminator to avoid user confusion. (#2158)Remove obsolete model-source scripts to dump / upload model data. (#2159)
Applied notable run-time optimization for
simtools-derive-mirror-rnda. (#2161)Introducing –all_sites and –all_model_versions tags to auto-generate plotting combinations (#2166)
Improve efficiency and robustness of CI integration tests: simulation models used for local model-source validation are cloned once only (and not once per model version matrix item). (#2167)
Ensure that Apptainer image exists for HTCondor submission scripts. (#2170)
Simulation model#
v0.29.0 - 2026-04-07#
Bugfixes#
Set correct env variable
SIMTOOLS_SIM_TELARRAY_PATHin production image. (#2109)
New Features#
Add support for Gauss-Exponential pulse shape in illuminator simulations (previously only available for flashers). Add Lambertian angular distribution support for illuminators and allow to set the maximum angle when using Lambertian distribution. (#2092)
Maintenance#
Standardized dimensionless-unit handling via
value_conversion.is_dimensionless_unit()/normalize_dimensionless_unit()and updated unit-conversion behavior/tests accordingly (#2092)Moved/centralized overwrite-time model-parameter validation to
DataValidator.validate_model_parameter()and added schema helpers to fetch per-parameter type/unit by schema version. (#2092)Disable markdownlint in pre-commit because it is incompatible with the Node.js version used. Update pyproject.toml to reflect changes made by pyproject-fmt. (#2100)
Simulation model#
Update default simulation models version used in CI to v0.14.0. (#2108)
v0.28.0 - 2026-03-30#
API Changes#
Update command to run development container: use bash -lc (related to updates to git safedir). (#2091)
Bugfixes#
Fix direct-injection type flasher runs, which did not produce any calibration events. Fix bug in pedestal calculation setting: sim_telarray requires
none(and notNone) for the stars option. (#2029)Increase number of flasher photons for test cases from 1e5 to 1e6 to ensure light in MSTs. (#2045)
Increase number of flasher photons for tests and use a new flag to overwrite the model parameter. Skip telescope position file when illuminator has default downward pointing (0, 0, -1). (#2052)
Fix reference frame of photons obtained from sim_telarray ray tracing from pixel (rotated) to non-rotated camera frame. (#2054)
Fixed camera-efficiency unit tests to write temporary outputs instead of modifying committed files in tests/resources. (#2067)
Fixes a bug in CORSIKA starting grammage code accessing telescope_model instead of telescope_models. (#2076)
Add matplotlib figure cleanup in camera plotting unit tests. (#2082)
Fixed CI-only model-source unit-test flakiness by hardening conftest.py model-source test detection. (#2089)
Documentation#
New Features#
Add checks for simulation software executable paths and existence of corsika interaction paths. Remove unused
general.is_executable(which can be replaced byshutil.which). (#2030)Improve testing of simulation output files (CORSIKA, sim_telarray, light source simulations). Test now after the simulation the data, log, and metadata output for expected content. Allows to simplify integration tests, as most tests are already done when running the application. Add new keyword
skip_integration_testto allow to skip temporarily certain tests. (#2035)Write log output to a log file to improve reproducibility (keeping the stream to stderr). The file can either be provided through the command line (via
--log_file) or is generated automatically inoutput_pathwith the patternapplication_label_%Y%m%dT%H%M%SZ.log. (#2039)Add simtools log file to grid output file tar package. (#2040)
Improve
simtools-plot-simtel-eventsand add functionality to plot a number of events for a given telescope (independent of event index). Plots are sorted by plot type for easier comparison. Minor optimization to plotting: i) solve issue with matplotlib warnings ii) read calibration telescope data which is not from first telescope iii) reduce aspect (#2041)Add functionality to plot tables in legacy sim_telarray format using the simtel table reader. (#2048)
Add simulation of point sources at different cardinal directions and the possibility of reading them from a file. Improve PSF plotting. (#2054)
Add functionality to simulate flasher events (full ray tracing) for several telescopes. For full simulations, there are now several options to select the telescopes to simulate:
simulate a single telescope:
--telescopes MSTN-04simulate several telescopes
--telescopes MSTN-04 MSTN-05simulate all telescopes in an array
--layout_name alphaRecommended to uselight_source_type: flat_fielding, which reads for a given telescopes the defined flasher name from the simulation-model source.
Similar functionality for direction injection flasher simulations: the main difference is that in direct mode a single sim_telarray is written, while for full simulation there is one sim_telarray per telescope.
(#2056)
Add support for flasher intensity sequences as in a filter wheel in
simtools-simulate-flasher. (#2062)Use telescope axes offsets in case of MSTs together with the illuminator. (#2077)
Maintenance#
Switch to ‘trigger manually only’ for legacy build workflows for CORSIKA, sim_telarray and simtools. (#1993)
Update author list. (#2019)
Refactor visualization of flasher events to a more generic module (preparation for a long integration test). (#2023)
Reduce verbose debug messages:
remove success message from
schema::validate_deprecation_and_versionremove
No fix applied to corsika_starting_grammage. See issue #2025remove
calibration_model::__init__::Init CalibrationModel(very little information)remove
corsika_runner(l37)::__init__::Init CorsikaRunner(very little information)remove
simtel_config_writer(l815)::write_dummy_telescope_configuration_file::Writing InvalidTelescope telescope config file(duplicated) Add a filter to avoid passwords leaking into log output.
(#2026)
Ensure that all integration test configuration files are consistently lower case. (#2027)
Update and replace flasher simulations test file. (#2033)
Do not include mirror_reflection_random_angle in derivation of mirror alignment parameters. (#2034)
Improve testing of simulation output files (CORSIKA, sim_telarray, light source simulations). Test now after the simulation the data, log, and metadata output for expected content. Allows to simplify integration tests, as most tests are already done when running the application. (#2035)
Modify pre-commit codespell to pass on test files in resources directory. (#2037)
Remove duplication between plot_pixel and camera modules. (#2046)
Improve copilot instructions. (#2048)
Update model parameter repository functionality to allow to update
configuration_corsikaparameters. (#2060)Remove dependency of unit tests on model source. Separate pytest fixture definitions for unit- and integration tests to increase robustness and avoid fixture leakage. (#2061)
Parameter values that are a list of dictionaries are now shown in a separate table in the reports. (#2073)
Change the reports for patch versions to only show differences between patch and minor versions. (#2074)
Add illuminator name to output filenames. (#2078)
Fix CI failure by setting safe Git directory to accommodate stricter ownership checks in newer Git versions. (#2085)
Simulation model#
Add new model parameters to describe:
number of photons emitted by flasher devices (
flasher_photonsandflasher_var_photons); used by light emission packagenumber of flasher photons at each pixel (
flasher_photons_at_pixelandflasher_var_photons_at_pixel); used by flasher simulations of sim_telarray (“direct_injection”)
(#2043)
Change default version for simulation model repository to v0.13.0. (#2083)
v0.27.1 - 2026-02-04#
Maintenance#
Change yaml indent to 2 to synchronize pre-commit settings and output settings throughout all simulation models repositories. (#2021)
0.27.0 - 2026-02-03#
API Changes#
Changes to the setting of seeds for sim_telarray:
use
sim_telarray_random_instrument_instancesandsim_telarray_instrument_seedto generate a random seed file for the given number of configurations.use
sim_telarray_seedtogether withsim_telarray_instrument_seedto set both instrument (configuration) and simulation seeds. These parameters completely fix the seeds and should only be used for testing purposes.
(#1982)
Update naming of simtools-prod images to
<simtools version>-corsika<corsika version>-<avx option>-simtel<sim_telarray version>. (#1984)CORSIKA interactions tables are not part of the CORSIKA7 container anymore and also not added to the simtools-dev container. CORSIKA tables are available from the new CTAO gitlab repository corsika7-interaction-tables. This includes QGSJet-II, QGSJet-III, EPOS, EGS4, etc tables.
To install and use the interaction tables for both production and development:
clone that repository into a separate directory from simtools (recommend the example such that it is reachable from inside the simtools-dev container by
/workdir/external/simpipe/simulation_software/corsika7-interaction-tables/interaction-tables/ensure Git LFS is installed and, after cloning, run
git lfs install(once per system) andgit lfs pullin the cloned repository so that the actual interaction table files (and not only pointer files) are downloadedAdd a new env variable called
SIMTOOLS_CORSIKA_INTERACTION_TABLE_PATHpointing to that path (see example in.env_table)
Integration tests are cloning this repository and making the interaction tables available during testing.
(#1987)
Bugfixes#
Correct calculation of lateral photon densities for histograms generated from CORSIKA. (#1994)
Documentation#
Improve documentation on available container images. Add new page to users guide with most important available images. (#1953)
Improve documentation for CORSIKA and related container images. (#1991)
Add disclosure on using AI tools. (#1992)
Improve documentation for integration tests with additional details on the different types of tests. (#2017)
New Features#
Implement gradient descent for the derivation of mirror_reflection_random_angle. Implement general tools for multiprocessing. (#1911)
Rename simtools-calculate-incident-angles to simtools-derive-incident-angle, add histogram calculation and writing functionality and output metadata. (#1938)
Add functionality to overwrite simulation model parameters from the command line using
--overwrite_model_parameters. (#1960)Use
DATDIRCORSIKA input file flag to point to directory with interaction table files. (#1970)Add EPOS as interaction model and include input flags to CORSIKA input file writer. (#1972)
Simplified and consistent simtools, CORSIKA, and sim_telarray package tagging: i.e.,
simtools-prod-<version>,simtools-dev-<version>,corsika7-<version>-<avx optimization>,sim_telarray-<version>. (#1975)Add random seed module to generate seeds based on numpy.SeedSequence. Add SimtelSeeds data class to hold and generate seeds for sim_telarray simulations. (#1982)
Add CORSIKA v78050, see release notes (KIT gitlab; requires access). (#1983)
Add sim_telarray, hessio, stdtools tagging using the CTAO gitlab release tags. (#1985)
Change of the default interaction model from qgs3 to epos (this allows to avoid to download the Gigabyte large QGSJet tables). (#1987)
Adds support for simulating arbitrary telescope layouts with CORSIKA (including “probe” telescopes for lateral density comparisons), and refactors overwrite-parameter handling to be read/validated once and reused across models. Expand functionality to generated regular arrays of telescopes with different shapes. (#1995)
Add functionality to
simtools-validate-camera-efficiencyto print fraction of light below 290 nm (as required for B-TEL-0095). Introduce simple module describing the atmosphere. (#1998)Add
git-lfsto simtools-prod containers. (#2001)
Maintenance#
Add search patterns in integration tests and fix bug when using an isotropic angular distribution in the illuminator simulations. (#1940)
Unify execution of run scripts by consistently always use
job_manage.submit(). Improved_make_run_commandfor better readability. (#1977)Improve file management for light emission simulations (flasher/illuminators). Change of output file naming and directory tree. (#1981)
Simplified setting of
corsika_seedsandsim_telarray_seeds. (#1982)Solve sphinx errors after update to sphinx 9.10. (#1988)
Add the ability to pass a label to RayTracing instead of using a cached label from the telescope model. (#1999)
Ensure that model data writer is not changing the general output path for all other modules. Change and simplify model data writer API. (#2000)
Reduce the number of unnecessary debug statements. (#2002)
Improve model parameter overwrite function with an explicit
flat_dictstatement to avoid being flooded by warnings likeWARNING::model_parameter(l519)::overwrite_parameters::Parameter MSTS-05 not found in model MSTS-12, cannot overwrite it.(note the error in the warning). (#2003)Add values for camera efficiency application to test against reference values. Add YAML-type output for validate_camera_efficiency. (#2017)
v0.26.0 - 2026-01-08#
API Changes#
Changes in the environment variables set in the
.envfile.Added explicit setting of the simulation software branches:
CORSIKA: e.g.,
SIMTOOLS_CORSIKA_PATH=/workdir/simulation_software/corsika7sim_telarray: e.g.,
SIMTOOLS_SIMTEL_PATH=/workdir/simulation_software/sim_telarray
Added explicit setting of the interaction models:
high-energy interaction model: e.g.,
SIMTOOLS_CORSIKA_HE_INTERACTION=qgs3low-energy interaction model: e.g.,
SIMTOOLS_CORSIKA_LE_INTERACTION=urqmd
For images generated before this change, it is enough to set one single variable:
SIMTOOLS_SIMTEL_PATH=/workdir/sim_telarray/sim_telarray(#1917)
Change in naming of simtools docker images:
CORSIKA image is called e.g.
ghcr.io/gammasim/corsika7:0.26.0-78010-avx512fsim_telarray image is called e.g.
ghcr.io/gammasim/sim_telarray:0.26.0-<sim_telarray version>simtools-dev image is called e.g.
ghcr.io/gammasim/simtools-dev:latest(safe to use the latest tag here)simtools-prod image is called e.g.
ghcr.io/gammasim/simtools-prod:0.26.0-corsika<corsika version>-<avx flag>-simtel<sim_telarray version>
(#1954)
Changed path to
sim_telarraytoSIMTOOLS_SIM_TELARRAY_PATH(fromSIMTOOLS_SIMTEL_PATH). Requires changes by the users to their.envfiles. (#1957)
New Features#
Add integration tests for newly added flasher types MSFx-NectarCam, MSFx-FlashCam, LSFN-design, LSFS-design. (#1817)
Improve handling of model parameters with output schema definition: introduce a legacy model parameter handler. (#1910)
Allow output of flasher angular distribution tables for Lambertian distribution. (#1916)
Refactoring the image building process (CORSIKA/sim_telarray/simtools):
separate images for CORSIKA and sim_telarray
simtools image combined both plus adds for the development image the QGSJet tables
main directory changed to
/workdir/simulation_software/with e.g./workdir/simulation_software/corsika/workdir/simulation_software/sim_telarray
simulation software packages pulled from git repositories
CORSIKA7 from KIT gitlab and CORSIKA build configuration from CTAO gitlab
sim_telarray, hessio, and stdtools from CTAO gitlab
new build process for CORSIKA7 using coconut and configuration files
(#1917)
Introduce central settings module for configuration args, model_source_config, and path definitions.
Use new
settings.config``for simtel_pathusage through all modules.Introduce
corsika_pathandcorsika_he_interaction,corsika_le_interactionsettings to indicate CORSIKA installation path and interaction models.Ensure backwards compatibility to legacy simtools images for paths and build opts configuration files.
(#1921)
Allow to fill and plot simulated event distributions from both CORSIKA and sim_telarray output files. Add simple plotting application
simtools-plot-simulated-event-distributions. (#1934)Use adjustText for the labels in the array layout plot to avoid overlapping labels. (#1937)
Improved functionality to plot Cherenkov photon distributions read from CORSIKA IACT files:
allow to compare distributions from different files
additional 1D and 2D distributions with improved plotting
several bug fixes in relation of weighting and density calculation
This includes a complete refactoring of the class with focus on plotting.
(#1939)
Add building workflow for simtools-prod image. Update docker files and building workflows for CORSIKA, sim_telarray, and simtools. Simplify package naming. (#1954)
Add integration test run to updated production image building. Reuse existing integration tests and simplify building steps. (#1955)
Improved version and build info handling:
simtools application prints at startup now the simtools, model-source, CORSIKA, and sim_telarray versions
simtools applications output full build information for log level
DEBUGadded two new command line options:
--build_infoto print detailed build information of the application--export_build_info EXPORT_BUILD_INFOexport build information to file (json or yaml format)
removed applications
simtools-print-version(above functionality replaces it)Changed path to
sim_telarraytoSIMTOOLS_SIM_TELARRAY_PATH(fromSIMTOOLS_SIMTEL_PATH). This is consistent with the naming of the simulation software packages and the schema values.
(#1957)
Maintenance#
Integrate the new unified flasher pulse shape parameter
flasher_pulse_shape(now a 3-element list[shape, width_ns, exp_decay_ns]). (#1900)Allow test_generate_production_grid.py::test_convert_altaz_to_radec_and_coordinates to xfail due to intermittent network issues. (#1914)
Add logfile pattern checks for full flasher simulations, update integration test files and add a pulse shape mapping. (#1924)
Replace
model_source_configbysettings.config.model_source_configthroughout all modules. (#1927)Moved
simtel_io_event_*modules tosim_eventssubmodule and renamedeventio_handlertofile_info. Updated imports and class names across dependent modules to reflect generalized event file handling. (#1936)Add ERA (Found commented-out code) to ruff configuration (used with precommit). (#1942)
Add PERF settings to ruff (used by pre-commit) for improved maintainability. (#1943)
Update pylint configuration to be more aligned with SonarQ requirements. (#1944)
Move and rename application
simtools-write-array-element-positions-to-repositorytosimtools-maintain-simulation-model-write-array-element-positions. Add integration and unit tests. (#1958)Minor code quality improvements reported by GitHub Code QL. (#1959)
Fixed failing unit tests for
test_visualizeby adding missingplt.close(). (#1967)
Simulation model#
Change default simulation models version to 0.12.0. (#1918)
v0.25.0 - 2025-11-19#
Bugfixes#
Bugfix in comparison of sim-telarray configuration files: ignore system dependent metadata values. (#1873)
Fix thread-safe model-source initialization and idle-resource cleanup. (#1899)
Fix simulation model production table upload: full updates tables need not to search through the model history. This led to the addition of deprecated parameters back into the production. (#1913)
New Features#
Add pulse shape table writer for light emission flasher simulations. (#1851)
Add CORSIKA executable compiled with CURVED option to docker images (
corsika-curved). (#1859)Improve array plotting with more custom configuration options. (#1860, #1862)
Add tests for certain strings in the CORSIKA and sim_telarray log files. (#1882)
Verify that the request and actually simulated number of events is identical for CORSIKA and sim_telarray simulations. (#1883)
Add tests that certain strings do not appear in the CORSIKA and sim_telarray log file (see also PR #1882) (#1885)
Added functionality to plot mirrors and implemented auto plotting of mirrors for the reports. (#1886)
Add test to verify that number of CORSIKA events is consistent with requested number of events. (#1890)
Add application for pulse shape parameter derivation and move existing functionality there. (#1894)
Add possibility to run sim_telarray only using an existing CORSIKA file with
simtools-simulate-prod. (#1896)
Maintenance#
Refactor
simtools-validate-file-using-schemaand improve unit testing of code. (#1857)Introducing a new psf optimizer class and improving exception handling. (#1864)
Update model version to ensure reproducibility if given as MAJOR.MINOR. Revert testing to exact semver version. (#1870)
Improve description of
submit_array_layouts. Fix model parameter writing of instrument for site parameters. (#1872)Introducing a data class and capping maximum learning rate in PSF optimization modules. (#1875)
Remove unused command line parameter
data_directoryfrom simtools-simulate-prod. (#1891)Remove unused command line parameter
number_of_runsfrom simtools-simulate-prod. Simulate always a single run number. (#1893)Introduce consistent naming for pedestal runs and output files: always start with
pedestal...(e.g.,pedestals_dark). (#1904)Suppress remote model-source connection close debug message in unit test. (#1906)
Documentation is now generated for each push. Deployment changed to either the release of a version, merge to main, or manual trigger. (#1907)
Update ignore pattern for log file inspector to ignore warnings on
getpwuidobtained in AIV environment. (#1912)
Simulation model#
Merge all flasher pulse shape parameters (shape, width, exp decay) into a single parameter
flasher_pulse_shape. (#1895)
v0.24.0 - 2025-10-28#
Bugfixes#
Bugfix in validation of generated sim_telarray configuration: missing assert on the outcome of the tests (tests always passed, even with differences). (#1856)
Fixed array trigger file generation to properly combine non-hardstereo telescopes. Previously, each telescope type generated separate trigger lines, preventing software stereo triggers between different telescope types (e.g., SST+MST). Now hardstereo lines remain separate while non-hardstereo telescopes are combined into a single line, enabling cross-telescope-type triggering. (#1863)
New Features#
Add new simulation model parameter
transit_time_random. (#1808)Implement version check for model parameters for any software type. (#1842)
Add possibility to define new base models taking into account the correct history of models for
simtools-maintain-simulation-model-add-production. (#1844)Add possibility to change model parameters from command line using the
--overwrite_model_parameterscommand line parameter. (#1850)
Maintenance#
Change source of simulation-model repository in CI to ‘main’ branch of simulation model repository. Tests against the latest release versions for simtools release candidates (
1.2.3-rc). Allow to configure simulation model repository branches for manually triggered workflows. (#1846)Review and update all XPASS unit tests. (#1855)
Simulation model#
Change default simulation-model repository version to 0.11.0. (#1852)
v0.23.0 - 2025-10-13#
Bugfixes#
Bugfix in comparing model versions in integration tests to decide which tests should run. Bugfix in getting model parameter values with units for the case of value-unit pairs consisting of lists with None entries. (#1805)
Fix a bug where hard stereo trigger was set every time the hard_stereo key existed in dictionary, rather than checking its value. Now it only sets hardstereo if the value is True. (#1813)
Bugfix packing model files: model version was not taken into account correctly. (#1818)
Bugfix in preparing sim_telarray command for shower simulations: power-law configuration (used to fill histograms) set at the wrong place. (#1825)
Bugfix in writing sim_telarray configuration option: “-C show=all” should be last in command. (#1828)
New Features#
Add new CORSKIA / sim_telarray image build for:
CORSIKA 7.8010
Bernloehr package 1.70
sim_telarray 250903
Improved downloading script and handling of QGSJet tables.
(#1824)
Fill telescope design types into sim_telarray metadata field for
camera_config_variantandoptics_config_variant. (#1826)Allow to highlight or grey out telescopes in layout plotting application. (#1829)
Allow to provide integers in scientific notation in yaml configuration files. Currently only implemented for the –number_of_photons argument of calculate_incident_angles.py. (#1837)
Maintenance#
Add application control functionality for all simtools applications. (#1809)
Adding –all_model_versions flag for calibration and software report generation. (#1815)
Replace superlinter in linter CI. Add toml linter and shellcheck to precommit. (#1838)
Update one function used in the tests to comply with version 2.x of pyeventio. (#1840)
v0.22.0 - 2025-09-30#
Bugfixes#
Documentation#
Improve documentation on model-data publication. (#1775)
New Features#
Add software version range validation. Introduce software version for updated or new flasher simulation model parameters. (#1763)
Implement simulation models production table and model parameter update using the
simtools-maintain-simulation-model-add-productionapplication. (#1765)Schema for info.yml files used in simulation models. (#1790)
Add flat-fielding devices for all telescope types. (#1798)
Add the model-repository upload application for simplified publication of repository data. (#1801)
Add flasher exponential decay pulse shape parameter. (#1802)
Maintenance#
Linked parameter plots to parameter comparison reports. (#1661)
Added CLI argument to flexibly change PSF containment percentage as needed. (#1766)
Remove ‘LATEST’ options when setting the
MODEL_SOURCE_SIMULATION_MODEL_VERSIONconfiguration option (require explicit setting of the model version). (#1785)Introduce simpler naming for the model repository. (#1787)
Remove
use_plain_outputoption and generalize output direction generation. (#1792)Simplify generation of production image and remove outdated
build-corsika-simtelarraytarget. (#1794)Increase robustness for unit and integration tests when cloning remote Git repositories. Add a 3x retry. (#1796)
Split CORSIKA/sim_telarray and simtools images into two. (#1797)
Change minimum python version requirement to 3.12 (following CTAO recommendation). (#1799)
Remove ‘instrument:type’ and ‘instrument:site’ in model parameter schema files. (#1803)
v0.21.0 - 2025-09-23#
Bugfixes#
New Features#
Implemented gradient descent minimisation for psf parameter optimisation, KS statistic as a sanity check, and monte carlo error on the simulated psf. (#1717)
Add functionality to work with delta-type production tables of the simulation model for patch updates. (#1758)
Automatic retrieval of the latest patch version for the simulation model. Allow
--model_version=6.0being resolved to the newest version. (#1768)
v0.20.0 - 2025-09-12#
Bugfixes#
Fix warning messages in simtel metadata reader to avoid the log-file testing routines to fail. (#1712)
Developer image is using an old base image with CORSIKA and sim_telarray. Fix naming of containers used in developer image to ensure the most recent are used. (#1716)
Introduce
MODEL_SOURCE_SIMULATION_MODEL_VERSIONto fix instability of environment when introducing new model parameters. (#1729)Fix reduce complexity issue raised in sonar in plot simtel events. (#1735)
Fix bug in schema file for model parameters regarding schema version. Improved printing on error. (#1742)
New Features#
Add new application to calculate telescope and array trigger rates from reduced event lists. (#1685)
Add application to calculate photon incident angles at the camera plane. (#1687)
Add sim_telarry executable compiled with debug options to containers. Allows to generate additional output columns for e.g. sim_telarray ray tracing. (#1715)
Add / update
nsb_spectrummodel parameter and calculate integrated NSB rate. (#1718)Add avx512f and sse4 vector optimization images for production images. (#1741)
Maintenance#
Remove calculate trigger rate application and associated code. Replaced by simtools-derive-trigger-rate (see PR #1685). (#1693)
Improve robustness of image building and downloading autoconf. (#1722)
Improvement of CI-workflow efficiency and documentation. (#1723)
Improve handling of secrets in CI workflows. (#1728)
Add new field
production_table_nameto production table schema. (#1756)Remove Codecov from CI (covered by SonarQube). (#1759)
v0.19.0 - 2025-08-27#
Bugfixes#
Fix bug in reading list of array elements from file. Only layout names were used and the list was read not from file but from the model source. (#1658)
Ensure that run numbers start at 1 for cases no offset if given (HT Condor job submission). (#1686)
Fix array trigger writing for single telescope simulations. (#1690)
Bugfix in shower core calculation in shower coordinates for reduced event data. (#1703)
New Features#
Add additional plots for the derivation of CORSIKA limits. (#1632)
Add a warning to derived corsika limit if they are close to the limits of the simulations. (#1643)
Add an application that merges derived corsika simulation limits for each available grid point. (#1649)
Add curvature radius to testeff command. User for calculation of NSB rates per pixel. (#1651)
Allow to run applications in container environments using simtools-run-application. Introduce separate module (simtools-runner) and improve support for workflow running. (#1657)
Add application to update, modify, and compare production tables. Improve documentation for simulation repository maintenance. (#1660)
Add application to simulate calibration events (pedestals, dark pedestals, flasher). (#1663)
Add functionality to simtools-validate-camera-efficiency to write out model parameter JSON with nsb_pixel_rate. (#1665)
Add functionality to compare derived model parameters with model-source values to integration tests (examples for simtools-validate-camera-efficiency). (#1666)
Add log file inspector for integration tests to fail tests when errors or runtime warnings are reported. (#1674)
Add application to simulate flasher with the light emission package. (#1676)
Add sim_telarray model files to output of each production run. This asserts reproducibility and simplifies debugging. (#1689)
Add model-source indexes to improve lookup efficiency. (#1691)
Add possibility to set random seed for random focal length settings in simtools-derive-mirror-rnda. (#1702)
Maintenance#
Apply more consistent key-name convention with lower-case snake_make to application workflow configurations. (#1636)
Clarify input data to derivation of CORSIKA limits with
simtools-production-derive-corsika-limit. (#1641)Change metadata to lower-case snake make. More consistent usage of schema versions. (#1645)
Add missing plotting configurations for tabular data. (#1647)
Plots are now auto-generated alongside reports. (#1653)
Refactoring of ASCII input io operations. (#1667)
Add a generic writer for structured data for JSON and YAML format. (#1668)
Simplification of legend_handlers class. (#1670)
Change units of shower- and pointing directions in reduced event data from radians to degrees. (#1672)
Generalization of reduced event-data histogram filling (moved from CORSIKA limits derivation modules to generic module). (#1675)
Fix hadolint issue and using parameter expansion for replacement in Dockerfile. (#1680)
Refactor PSF parameter optimization workflow and improve output. Added a flag to export best parameters as JSON files. (#1681)
Revision of main repository readme file and removed duplications. (#1684)
Remove model-source access from the unit test for the
docs_read_parametersmodule. (#1688)Maintenance pass through integration test to remove duplicated tests and improve test efficiency. (#1694)
Improve code quality by addressing SonarQube reliability issues. (#1697)
Unit tests will now fail in the CI for warnings. (#1699)
Fix some security hotspots reported by SonarQube. (#1700)
Improve robustness of Linter CI by caching pre-commit installation. (#1704)
Simulation model#
Addition of FADC long-sum model parameters. (#1659)
v0.18.0 - 2025-07-08#
Bugfixes#
Documentation#
Reorganisation and improvement of the documentation in the GitHub pages. (#1611)
New Features#
Use CTAO telescope names when writing out telescope list in reduced event data tables. (#1616)
Allow CORSIKA limits to use layouts defined in simulation-model repository. (#1619)
Add application / API to plot tabulated model parameters using default plotting configurations defined in model parameters schemas. (#1628)
Allow to use current prod6 simulations for reduced event data generation. (#1631)
Add common array elements ID. Add list with triggered common telescope IDs to reduced event data tables. (#1637)
Maintenance#
Removed unused ‘critical’ log level. (#1604)
Add JSON checker to pre-commit linter. (#1615)
Update test files with proton simulations (simtel output) and add provenance information. (#1617)
Improve linter CI to print file containing non-ascii characters. (#1620)
Replace file lists
tests/resources/simtel_output_files.txtused for testing by explicitly listing of files. (#1629)Add default plotting configuration for tabular data. Introduce consistent lower-cases for keys in plotting configuration schema. (#1635)
v0.17.0 - 2025-06-10#
Bugfixes#
Documentation#
New Features#
Add pixel layout plotting. (#1541)
Enable docker-image generation for vector-optimized CORSIKA 7.8. (#1550)
Add the sequential option to simulations using multipipe. With this option the CORSIKA and sim_telarray instances run in sequential order as far as possible. This mode is useful particularly on the grid, where typically we request a single core per job. (#1561)
Add reading and conversion of primary_id from sim_telarray output. (#1570)
Update
simtools-generate-simtel-event-datato use astropy tables. (#1573)Generalize table reading and writing. Add application to merge tables. (#1580)
Write reduced event data file as part of the cleanup stage of the simtools-simulate-prod application. (#1588)
Use patches for optimized CORSIKA from GitLab repository instead of cloud download. (#1589)
New utility simtools-verify-simulation-model-production-tables to verify completeness of model parameter repository. (#1592)
Add custom copilot instructions to support AI used by developers. (#1594)
Add new application
simtools-submit-array-layoutsto submit new array-layouts definition and validate the telescopes listed. (#1596)Improve layout plotting; adding plotting of background layout. Add plotting of all layouts. (#1597)
Improve printout for assertion error for testing. (#1598)
Add production version and build options to sim_telarrary metadata. (#1601)
Maintenance#
Add unit tests to increase coverage in interpolation handler. (#1504)
Docker file improvements: linter application; bugfix in extra flags for optimized CORSIKA compilation. (#1544)
Include stdout and stderr in error message of integration test. (#1555)
Add pytest-retry package for ‘flaky test’. (#1558)
Reduce number of INFO log messages for published model parameters. (#1559)
Replace the “run_number_start” argument with “run_number_offset” (clearer) and re-introduce the “run_number” argument to allow specifying a run number (to which the offset is added). (#1562)
Use telescope position files for setup in illuminator application and set correct obs level. (#1566)
Improve the names of the various simulation output files. They now follow the current convention in current productions, they contain a bit more information (e.g., the model version where it wasn’t there before), and they are more consistent with each other. (#1568)
Improved interface and interpolation routines to derive production configuration. This creates a pipeline for lookup table generation, production grid generation, creating a grid with limits, which is then further complemented by the production statistics per grid point. (#1569)
Fix unit test to run with astropy 7.1 (and earlier versions) (see #1574). (#1575)
Simplified Sonar setup by moving properties into GitHub workflow. (#1578)
Introduce simplified Codecov configuration. (#1579)
Copy the CORSIKA log in binary mode instead of text mode. (#1582)
Protect against non-unicode characters in CORSIKA log file. (#1583)
Remove obsolete code on submission systems in JobManager. (#1586)
Change dummy trigger thresholds to easier-to-spot values. (#1591)
Fix duplication of some sim_telarray test files in ‘./tests/resources’ and corresponding test fixtures. (#1593)
v0.16.0 - 2025-05-05#
Documentation#
New Features#
Add grid generation production application to generate the grid points for Corsika simulations, with energy thresholds, viewcone and radius interpolation. (#1482)
Add support for multiple versions and the multipipe functionality of sim_telarray (#1496)
Add validation metadata written by sim_telarray with array model parameters. (#1505)
Improve robustness of sim_telarray configuration by adding an invalid (dummy) telescope configuration. (#1509)
Adding functionality for producing simulation configuration reports. (#1510)
Add random seeds from file for instrument configuration. (#1511)
Adapt Docker files and building workflows to CORSIKA 7.8000. (#1512)
Add sim_telarray random seed for instrument configuration to metadata (and metadata tests). (#1515)
Integration test with multipipe and support for packing all output files in grid productions. (#1520)
Add versioning to model parameter schema files. Implement example for
corsika_starting_grammage. (#1523)Added an application to produce calibration device reports. (#1530)
Allow
corsika_starting_grammageto be telescope-type dependent. (#1539)
Maintenance#
Separate TelescopeModel and SiteModel for improved readability in
sim_telarrayconfiguration writer. (#1489)Fix licence definition in pyproject.toml to follow PEP 639. (#1493)
Improve consistency of spelling of
sim_telarray. (#1494)Remove test condition in simulator light emission and mock configuration file access. (#1495)
Refactoring of event scaling application and moving most of the functionality into a new module. (#1498)
Renaming of event scaling methods to production statistics derivation methods. (#1502)
Improved naming and docstrings in simulation runners. (#1519)
Remove duplication of reading yaml/JSON files in simtools.utils.general. (#1522)
Remove duplication in
make_run_commandincorsika_simtel_runnerandsimulator_array. (#1525)Collect pyeventio related functions in new module
simtel_io_file_info. (#1531)Add new field model_parameter_schema_version to model parameter test files. (#1535)
Simulation model#
Change list of applicable array elements and class for
pedestal_eventsmodel parameter. (#1490)
v0.15.0 - 2025-04-04#
Maintenance#
Skip testing of model-data publication for simpipe integration tests. (#1488)
v0.14.0 - 2025-04-03#
Bugfixes#
Fix integration tests publishing values / files to a sandbox model source. (#1453)
Fix building of production images from branches other than
main. (#1467)Add missing
parameterdefinition in model parameter schema. (#1470)Primary degraded map is a parameter applied for all telescope types. (#1475)
Fixes a bug in the selection of the triggered events by telescope IDs for the limits calculation. (#1483)
Fix how integration tests are marked for use cases (used in SimPipe AIV). (#1484)
New Features#
Added functionality to automate report generation for array elements and parameters. (#1436)
Add full set of array pointings to reduced mc event data file if available in the mc header. (#1439)
Add fitting of afterpulse spectrum to derive single pe application. (#1446)
Run scheduled nightly integration and unit tests on the production model source. (#1454)
Generalize extraction of MC event tree from sim_telarrary files; generic writer and reader. (#1458)
Add functionality to generate reports for site-specific parameters. (#1459)
Allow to skip integration tests for the production model source. (#1460)
Add an application to print the versions of simtools, the model source, sim_telarray, and CORSIKA (
simtools-print-version). (#1461)Use files to pass filepaths for simtel event data files and telescope IDs in corsika limits derivation tool. (#1464)
Retrieve CTAO layout definitions. Merge with model parameter value and write to disk. (#1465)
Add tests to ensure that published model table files follow Unicode. (#1473)
Add writing of metadata into sim_telarray configuration files. (#1474)
Update model parameter definitions to reflect those from most recent sim_telarray release. (#1476)
Maintenance#
Remove Docker prod image generation; documentation update and improved workflow naming. (#1447)
Change requirement of arguments in event scaling application and improve documentation. (#1449)
Refactor light emission application and move logic to helper functions. (#1450)
Use consistently numpy dtypes for model parameters. (#1451)
Remove h5py dependency. (#1456)
Store arrays in model parameters as arrays and not as strings. (#1466)
v0.13.0 - 2025-03-19#
Bugfixes#
Fix
nullvalues in YAML-style model parameter schema files. (#1437)
New Features#
Improvements for single pe setting workflow including plotting and metadata handling. (#1398)
Add an application that allows to extract array and shower data and to save them in hdf5 format for the later calculation of production configuration limits. (#1402)
Add integration tests to production image generation. (#1420)
Improve reading of single parameters and files from the model source. Add plotting of tabular data using
parameter_version. (#1426)Improved plotting of tabular data; adding error bars and schema validation for plotting configuration. (#1429)
Add function to get all model parameter data for all model versions. (#1432)
Maintenance#
Run unit and integration tests on model-source setup in the local test environment. (#1424)
Remove tests from pypi package. Remove obsolete
__init__.pyfiles. (#1430)Change base python version from 3.11 to 3.12. (#1433)
Update exporting of sim_telarray model to simtools taking into account the updated file naming (included parameter versions). (#1438)
Robust getting of username in metadata collector in case no user is defined on system level. (#1442)
v0.12.0 - 2025-03-11#
Bugfixes#
v0.11.0 - 2025-03-05#
Bugfixes#
New Features#
Adding two new applications for generating model parameter documentation reports for a given array element either for a given production, or across multiple productions. (#1185)
Add building of optimized corsika binaries (e.g., avx2, avx512) and building of images for different corsika versions. (#1355)
Add a simtool to derive limits for energy, viewcone and radius for a simulation. (#1356)
Add generic
simtools-run-applicationto run one or several simtools using a single configuration file. (#1379)Add reading of model collections from model parameter schemas. (#1380)
Add module for simtools dependency management. Allows to retrieve e.g. sim_telarray and CORSIKA versions. (#1383)
Expanded functionality of application configuration workflows based on the integration test configurations. (#1389)
Set user in Docker images and add possibility to add user information from env/command line. (#1400)
Allow to mark integration tests in their use case config with a corresponding CTAO use case or requirement ID. (#1405)
Run check for changelog entry only on PRs ready for review. (#1416)
Maintenance#
Maintenance in production configuration removing not needed flags and only use metric files. (#1376)
Rename derive-limits application to production-derive-limits. (#1378)
Add YAML file with build opts into CORSIKA/sim_telarray images. (#1382)
Add unit tests for version.py. (#1384)
Improve function naming and unit test coverage in
simtools.utils.names. (#1390)Change checks for software updates from weekly to monthly. (#1394)
Remove duplication in converting sim_telarray string-lists (values, units) to python lists. (#1395)
Improve reading of design models; refactoring and improved docstrings for
simtools.utils.names. (#1396)
Simulation model#
Introduce MSTx-NectarCam and MSTx-FlashCam design models for MSTs (allow both sites). (#1362)
v0.10.0 - 2025-02-17#
Bugfixes#
Schema validation bugfixes. (#1330)
New Features#
Add a simtool to derive (normalize) the single p.e. amplitude spectrum using the
sim_telarraytoolnorm_spe. (#1299)Add validation of simtools-generated configuration files for sim_telarray with reference files. (#1322)
Add schema for fake mirror list. (#1338)
Add additional queries to db handler to retrieve model versions etc. (#1349)
Add fixed model version for testing (instead of
LATEST). (#1365)
Maintenance#
v0.9.0 - 2025-01-22#
Bugfixes#
New Features#
Add an application to plot tables from a file (from the file system or a model parameter file read from the model source). (#1267)
Enhancements to file testing within integration tests. (#1279)
Add a tool to prepare job submission with
simulate_prodfor a HTCondor system. (#1290)Remove functionality in
model_source_handlerto read from simulation model repository. (#1306)
Maintenance#
v0.8.2 - 2024-12-03#
Maintenance#
Move simtools package layout to src-layout. (#1264)
v0.8.1 - 2024-11-26#
Bugfixes#
Fix authentication and writing permits for deployment of simtools to pypi. (#1256)
v0.8.0 - 2024-11-26#
API Changes#
Bugfixes#
Fix triggering of telescopes in light emission package. (#1128)