Databases#
The simtools package uses a prototype MongoDB database to store the simulation model parameters and derived data products. Access to the DB is handled via a dedicated API module (db_handler).
Simulation model parameters are stored in databases (see the Simulation Model section) and synced with the CTAO model parameter repository.
Database structure#
Several different databases are used in simtools.
Important
The structure of the database is currently under revisions and will change in near future. This documentation is therefore incomplete.
Model parameters DB#
The name of the model parameter database needs to be indicated by $SIMTOOLS_DB_SIMULATION_MODEL
environmental variable and defined e.g., in the .env
file. Use CTAO-Simulation-Model-LATEST
to use the latest version of the CTAO simulation model database (simtools will replace LATEST
with the latest version number).
Collections:
telescopes
with the model parameters for each telescope plus the reference design modelsites
with all site-specific parameters (e.g., atmosphere, magnetic field, array layouts)calibration_devices
with the model parameters for e.g., the illumination devicesconfiguration_sim_telarray
with default configuration parameters for the sim_telarray simulationmetadata
containing tables describing the model versionsfs.files
with all file type entries for the model parameters (e.g., the quantum-efficiency tables)
Derived values DB#
Database with derived values DB (e.g., Staging-CTA-Simulation-Model-Derived-Values
defined in db_handler.DB_DERIVED_VALUES
).
Collections are:
derived_values
with the derived values for each telescope or sitefs.files
with file type derived results
Other databases#
All other currently available databases are not in use and kept for historical reasons.
Using the remote database located at DESY#
A prototype remote database is located at DESY. Access to the database is restricted, please contact the developers in order to obtain access.
Database and access configuration is given in the .env
file, see the .env_template file as example:
SIMTOOLS_DB_API_PORT=27017 #Port on the MongoDB server
SIMTOOLS_DB_SERVER='cta-simpipe-protodb.zeuthen.desy.de' # MongoDB server
SIMTOOLS_DB_API_USER=YOUR_USERNAME # username for MongoDB: ask the responsible person
SIMTOOLS_DB_API_PW=YOUR_PASSWORD # Password for MongoDB: ask the responsible person
SIMTOOLS_DB_API_AUTHENTICATION_DATABASE='admin'
SIMTOOLS_DB_SIMULATION_MODEL='CTAO-Simulation-Model-LATEST'
# SIMTOOLS_DB_SIMULATION_MODEL_URL=''
SIMTOOLS_SIMTEL_PATH='/workdir/sim_telarray'
Browse the database#
The mongoDB database can be accessed via the command-line interface mongo
or via a GUI tool like Robo 3T
or Studio 3T
.
Update the database#
Model parameters should first be reviewed and accepted in the model parameter repository before they are uploaded to the database (see the following sections on how to set up a local copy of the model parameter database for testing and development).
Danger
Updating the database is for experts only. Note that updating the databases might have impact on workflows of others. Best to define a new database when adding new values or files.
The following applications are important:
update or define a single model parameter from a json file (as defined in the model parameter repository): db_add_value_from_json_to_db.py
upload a model parameter file: db_add_file_to_db.py
upload all model parameters and files from the model parameter repository: db_add_model_parameters_from_repository_to_db.py
Configure and use a local copy of the model parameter database#
The production version of model-parameter database is a mongoDB instance running on a server at DESY. For testing and development, it might be useful to work with a local copy of the database. The following scripts allow to setup and fill a local database running in a container.
All scripts to setup and fill a local database instance are located in the database_scripts directory.
Startup and configure local database instance#
The script setup_local_db.sh generates a local database instance in a container:
downloads a mongoDB docker image
starts a container with the image and initialize a new database
add a user with ‘readWrite’ role
defines a container network called
simtools-mongo-network
(check withpodman network ls
)
Fill the local database instance#
Option 1: Fill local database from remote DB dump#
Access to a database dump of the production database is required. It is assumed that the dumps
are located in the directory database_scripts/dumps
.
The script ./dump_remote_db.sh
can be used to create a dump of the production database (requires access to this DB and the mongodump
tool).
Use then the upload_dump_to_local_db.sh
to upload this dump to the local database instance.
Note that database names are hardcoded in the scripts and need to be adjusted accordingly.
Option 2: Fill local database from model parameter repository#
The script upload_from_model_repository_to_db.sh
uses the model parameter repository from the CTAO gitlab and
uploads its contents to the local database instance.
Note that repository branches are hardcoded in the scripts and need to be adjusted accordingly.
If you get timeout errors, try to run it run from within the simtools container
Purge the local database instance and all networks, images, containers#
The script purge_local_db.sh
stops and removes the container and deletes all networks, images, and containers.
Danger
Attention: this script removes all local docker containers, images, and networks without awaiting confirmation.
Use the local database instance (with and without docker)#
This requires the following changes to the settings of the environmental variables in .evn
:
# Environmental variables
SIMTOOLS_DB_API_PORT=27017 #Port on the MongoDB server
SIMTOOLS_DB_SERVER='localhost'
SIMTOOLS_DB_API_USER='api' # username for MongoDB
SIMTOOLS_DB_API_PW='password' # Password for MongoDB
SIMTOOLS_DB_API_AUTHENTICATION_DATABASE='admin'
SIMTOOLS_DB_SIMULATION_MODEL='STAGING-CTA-Simulation-Model-LATEST'
SIMTOOLS_DB_SIMULATION_MODEL
is set as an example here to STAGING-CTAO-Simulation-Model-LATEST
and should be changed accordingly.
For using simtools inside a container:
set the
SIMTOOLS_DB_SERVER
in the.env
file to SIMTOOLS_DB_SERVER=’simtools-mongodb’.connect to the local network adding
--network simtools-mongo-network
to thedocker/podman run
command, e.g,:
podman run --rm -it -v "$(pwd)/:/workdir/external" --network simtools-mongo-network ghcr.io/gammasim/simtools-dev:latest bash
For completeness, here the full .env
file to be used with a container:
# Environmental variables
SIMTOOLS_DB_API_PORT=27017 #Port on the MongoDB server
SIMTOOLS_DB_SERVER='simtools-mongodb'
SIMTOOLS_DB_API_USER='api' # username for MongoDB
SIMTOOLS_DB_API_PW='password' # Password for MongoDB
SIMTOOLS_DB_API_AUTHENTICATION_DATABASE='admin'
SIMTOOLS_DB_SIMULATION_MODEL='CTAO-Simulation-Model-LATEST'
SIMTOOLS_SIMTEL_PATH='/workdir/sim_telarray'