From 9c876aaa00a5568c81dd6359c2f07180a1a1cdc4 Mon Sep 17 00:00:00 2001 From: lrdossan Date: Fri, 15 Nov 2024 10:58:51 +0100 Subject: [PATCH] added repository and UI information in guide --- caimira/docs/mkdocs/docs/LICENSE.md | 13 + .../mkdocs/docs/code_documentation/index.md | 4 - .../docs/code_documentation/rest_api.md | 5 +- caimira/docs/mkdocs/docs/index.md | 24 +- caimira/docs/mkdocs/docs/project_overview.md | 487 ------------------ .../mkdocs/docs/project_overview/about.md | 105 ++++ .../docs/project_overview/deployment.md | 140 +++++ .../docs/project_overview/installation.md | 230 +++++++++ .../open_source_acknowledgments.md | 46 +- .../project_overview/user_guide/full_guide.md | 207 ++++++++ .../user_guide/img/window_opening.png | Bin 0 -> 118076 bytes .../user_guide/img/window_type.PNG | Bin 0 -> 48792 bytes .../user_guide/quick_guide.md | 46 ++ caimira/docs/mkdocs/mkdocs.yml | 21 +- caimira/docs/style_docs.py | 4 +- 15 files changed, 809 insertions(+), 523 deletions(-) create mode 100644 caimira/docs/mkdocs/docs/LICENSE.md delete mode 100644 caimira/docs/mkdocs/docs/code_documentation/index.md delete mode 100644 caimira/docs/mkdocs/docs/project_overview.md create mode 100644 caimira/docs/mkdocs/docs/project_overview/about.md create mode 100644 caimira/docs/mkdocs/docs/project_overview/deployment.md create mode 100644 caimira/docs/mkdocs/docs/project_overview/installation.md rename caimira/docs/mkdocs/docs/{ => project_overview}/open_source_acknowledgments.md (79%) create mode 100644 caimira/docs/mkdocs/docs/project_overview/user_guide/full_guide.md create mode 100644 caimira/docs/mkdocs/docs/project_overview/user_guide/img/window_opening.png create mode 100644 caimira/docs/mkdocs/docs/project_overview/user_guide/img/window_type.PNG create mode 100644 caimira/docs/mkdocs/docs/project_overview/user_guide/quick_guide.md diff --git a/caimira/docs/mkdocs/docs/LICENSE.md b/caimira/docs/mkdocs/docs/LICENSE.md new file mode 100644 index 00000000..de49c2af --- /dev/null +++ b/caimira/docs/mkdocs/docs/LICENSE.md @@ -0,0 +1,13 @@ +Copyright 2020-2021 CERN. All rights not expressly granted are reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/caimira/docs/mkdocs/docs/code_documentation/index.md b/caimira/docs/mkdocs/docs/code_documentation/index.md deleted file mode 100644 index 41ac56a3..00000000 --- a/caimira/docs/mkdocs/docs/code_documentation/index.md +++ /dev/null @@ -1,4 +0,0 @@ -# Code-related Documentation - -* [CAiMIRA REST API](rest_api.md) -* [CAiMIRA Models](models.md) diff --git a/caimira/docs/mkdocs/docs/code_documentation/rest_api.md b/caimira/docs/mkdocs/docs/code_documentation/rest_api.md index 295daa0c..7839bb94 100644 --- a/caimira/docs/mkdocs/docs/code_documentation/rest_api.md +++ b/caimira/docs/mkdocs/docs/code_documentation/rest_api.md @@ -210,9 +210,11 @@ The deployment process varies depending on whether changes are pushed to branche ### Branch and Tag-based Deployment For branch pushes: + * All branches (except `live/caimira-test`) trigger the **test** stage in the CI/CD pipeline, ensuring the code passes all necessary tests before it is deployed. For tag creation: + * When a new tag is created, the pipeline skips the previous tests, and it builds `Docker` images, storing them in GitLab's container registry. The images can be manually deployed to the OKD platform for the `PROD` - production environment. ### OKD Platform Deployment @@ -220,6 +222,3 @@ The `cern_caimira` package, which contains the CERN-specific UI, is deployed dir ### Versioning and Tags The repository follows a *semantic versioning* scheme, with tags named according to the `MAJOR.MINOR.PATCH` format (e.g., `v5.0.0`). - - - \ No newline at end of file diff --git a/caimira/docs/mkdocs/docs/index.md b/caimira/docs/mkdocs/docs/index.md index e76a38cb..1513710c 100644 --- a/caimira/docs/mkdocs/docs/index.md +++ b/caimira/docs/mkdocs/docs/index.md @@ -6,13 +6,17 @@ It includes details on the diameter-dependent mathematical model and the code de # Contents: -* [Project Overview](project_overview.md) - -* [Diameter-dependent Model](full_diameter_dependence.md) - -* [Code-related Documentation](code_documentation/index.md) - - * [CAiMIRA REST API](code_documentation/rest_api.md) - * [CAiMIRA Models](code_documentation/models.md) - -* [Open Source Acknowledgments](open_source_acknowledgments.md) \ No newline at end of file +* [Project Overview]() + * [About](project_overview/about.md) + * [Installation](project_overview/installation.md) + * [Deployment](project_overview/deployment.md) + * [User Guide]() + * [Quick Guide](project_overview/user_guide/quick_guide.md) + * [Full Guide](project_overview/user_guide/full_guide.md) + * [Open Source Acknowledgments](project_overview/open_source_acknowledgments.md) + +* [Code Documentation]() + * [Overview](code_documentation/overview.md) + * [Diameter Normalization](code_documentation/diameter_normalization.md) + * [REST API](code_documentation/rest_api.md) + * [Models Module](code_documentation/models.md) \ No newline at end of file diff --git a/caimira/docs/mkdocs/docs/project_overview.md b/caimira/docs/mkdocs/docs/project_overview.md deleted file mode 100644 index b5418862..00000000 --- a/caimira/docs/mkdocs/docs/project_overview.md +++ /dev/null @@ -1,487 +0,0 @@ -# CAiMIRA - CERN Airborne Model for Risk Assessment - -CAiMIRA is a risk assessment tool developed to model the concentration of viruses in enclosed spaces, in order to inform space-management decisions. - -CAiMIRA models the concentration profile of potential virions in enclosed spaces , both as background (room) concentration and during close-proximity interactions, with clear and intuitive graphs. -The user can set a number of parameters, including room volume, exposure time, activity type, mask-wearing and ventilation. -The report generated indicates how to avoid exceeding critical concentrations and chains of airborne transmission in spaces such as individual offices, meeting rooms and labs. - -The risk assessment tool simulates the airborne spread SARS-CoV-2 virus in a finite volume, assuming a homogenous mixture and a two-stage exhaled jet model, and estimates the risk of COVID-19 infection therein. -The results DO NOT include the other known modes of SARS-CoV-2 transmission, such as fomite or blood-bound. -Hence, the output from this model is only valid when the other recommended public health & safety instructions are observed, such as good hand hygiene and other barrier measures. - -The model used is based on scientific publications relating to airborne transmission of infectious diseases, dose-response exposures and aerosol science, as of February 2022. -It can be used to compare the effectiveness of different airborne-related risk mitigation measures. - -Note that this model applies a deterministic approach, i.e., it is assumed at least one person is infected and shedding viruses into the simulated volume. -Nonetheless, it is also important to understand that the absolute risk of infection is uncertain, as it will depend on the probability that someone infected attends the event. -The model is most useful for comparing the impact and effectiveness of different mitigation measures such as ventilation, filtration, exposure time, physical activity, amount and nature of close-range interactions and -the size of the room, considering both long- and short-range airborne transmission modes of COVID-19 in indoor settings. - -This tool is designed to be informative, allowing the user to adapt different settings and model the relative impact on the estimated infection probabilities. -The objective is to facilitate targeted decision-making and investment through comparisons, rather than a singular determination of absolute risk. -While the SARS-CoV-2 virus is in circulation among the population, the notion of 'zero risk' or 'completely safe scenario' does not exist. -Each event modelled is unique, and the results generated therein are only as accurate as the inputs and assumptions. - -## Authors -CAiMIRA was developed by following members of CERN - European Council for Nuclear Research (visit [https://home.cern/](https://home.cern/)): - -Andre Henriques1, Luis Aleixo1, Marco Andreini1, Gabriella Azzopardi2, James Devine3, Philip Elson4, Nicolas Mounet2, Markus Kongstein Rognlien2,6, Nicola Tarocco5 - -1HSE Unit, Occupational Health & Safety Group, CERN
-2Beams Department, Accelerators and Beam Physics Group, CERN
-3Experimental Physics Department, Safety Office, CERN
-4Beams Department, Controls Group, CERN
-5Information Technology Department, Collaboration, Devices & Applications Group, CERN
-6Norwegian University of Science and Technology (NTNU)
- -### Reference and Citation - -**For the use of the CAiMIRA web app** - -CAiMIRA – CERN Airborne Model for Indoor Risk Assessment tool - -[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.6520431.svg)](https://doi.org/10.5281/zenodo.6520431) - -© Copyright 2020-2021 CERN. All rights not expressly granted are reserved. - -**For use of the CAiMIRA model** - -Henriques A, Mounet N, Aleixo L, Elson P, Devine J, Azzopardi G, Andreini M, Rognlien M, Tarocco N, Tang J. (2022). Modelling airborne transmission of SARS-CoV-2 using CARA: risk assessment for enclosed spaces. _Interface Focus 20210076_. [https://doi.org/10.1098/rsfs](https://doi.org/10.1098/rsfs).2021.0076 - -Reference on the Short-range expiratory jet model from: -Jia W, Wei J, Cheng P, Wang Q, Li Y. (2022). Exposure and respiratory infection risk via the short-range airborne route. _Building and Environment_ *219*: 109166. -[https://doi.org/10.1016/j.buildenv.2022.109166](https://doi.org/10.1016/j.buildenv.2022.109166) - -***Open Source Acknowledgments*** - -For a detailed list of the open-source dependencies used in this project along with their respective licenses, please refer to [Open Source Acknowledgments](open_source_acknowledgments.md). This includes both the core dependencies specified in the project's requirements and their transitive dependencies. - -The information also features a distribution diagram of licenses and a brief description of each of them. - -## Applications - -### Calculator - -A risk assessment tool which simulates the airborne spread of the SARS-CoV-2 virus for space managers. - - -### CAiMIRA Expert App and CO₂ App - -A tool to interact with various parameters of the CAiMIRA model. - - -## Disclaimer - -CAiMIRA has not undergone review, approval or certification by competent authorities, and as a result, it cannot be considered as a fully endorsed and reliable tool, namely in the assessment of potential viral emissions from infected hosts to be modelled. - -The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. -In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. - - -## Running CAiMIRA locally - -The easiest way to run a version of CAiMIRA Calculator is to use docker. A pre-built -image of CAiMIRA is made available at [https://gitlab.cern.ch/caimira/caimira/container_registry](https://gitlab.cern.ch/caimira/caimira/container_registry). -In order to run CAiMIRA locally with docker, run the following: - - $ docker run -it -p 8080:8080 gitlab-registry.cern.ch/caimira/caimira/calculator - -This will start a local version of CAiMIRA, which can be visited at [http://localhost:8080/](http://localhost:8080/). - - -## Folder structure - -The project contains two different Python packages: - -- `caimira`: Contains all the backend logic and the calculator model. It is the package published in PyPI. -- `cern_caimira`: Imports and uses the backend package (`caimira`) and includes CERN-specific UI implementation. - -The folder layout follows best practices as described [here](https://ianhopkinson.org.uk/2022/02/understanding-setup-py-setup-cfg-and-pyproject-toml-in-python/). - - -## Development guide - -CAiMIRA is also mirrored to Github if you wish to collaborate on development and can be found at: [https://github.com/CERN/caimira](https://github.com/CERN/caimira) - -### Installing CAiMIRA in editable mode - -In order to install the CAiMIRA's backend logic, create your own virtualenv and, from the root directory of the project, run: - -``` -cd caimira -pip install -e . -``` - -In order to install the CERN-specific UI version, that links to the previously installed backend, activate your virtualenv and, from the root directory of the project, run: - -``` -cd cern_caimira -pip install -e . -``` - -### Running the Calculator app in development mode - -This example describes how to run the calculator with the CERN-specific UI. In the root directory of the project: - -``` -python -m cern_caimira.apps.calculator -``` - -To run with a specific template theme created: - -``` -python -m cern_caimira.apps.calculator --theme=cern_caimira/src/cern_caimira/apps/templates/{theme} -``` - -To run the entire app in a different `APPLICATION_ROOT` path: - -``` -python -m cern_caimira.apps.calculator --app_root=/myroot -``` - -To run the calculator on a different URL path: - -``` -python -m cern_caimira.apps.calculator --prefix=/mycalc -``` - -Each of these commands will start a local version of CAiMIRA, which can be visited at [http://localhost:8080/](http://localhost:8080/). - -### Documentation - -To compile and view CAiMIRA's documentation, follow these steps: - -### 1. Install CAiMIRA with Documentation Dependencies - -First, ensure CAiMIRA is installed along with the `doc` dependencies: - -``` -cd caimira -pip install -e .[doc] -``` - -### 2. Generate Code Documentation in Markdown - -Use `sphinx` with `sphinx_markdown_builder` to generate the documentation in `Markdown` format: - -``` -cd docs/sphinx -sphinx-build -b markdown . _build/markdown -``` - -### 3. Customize and Organize Documentation - -Run the `style_docs.py` script to apply custom styles, move required files, and generate a UML diagram: - -``` -python style_docs.py \ -&& mv sphinx/_build/markdown/index.md mkdocs/docs/code_documentation/models.md \ -&& pyreverse -o png -p UML-CAiMIRA --output-directory mkdocs/docs ../src/caimira/calculator/models/models.py -``` - -### 4. Start the documentation server - -To view the documentation locally, use MkDocs to serve it: - -``` -cd ../mkdocs -python -m mkdocs serve --dev-addr=0.0.0.0:8080 -``` - -The documentation can now be accessed at [http://0.0.0.0:8080/](http://0.0.0.0:8080/). - -### Running the CAiMIRA Expert-App or CO2-App apps in development mode - -#### Disclaimer - -The `ExpertApplication` and `CO2Application` are no longer actively maintained but will remain in the codebase for legacy purposes. -Please note that the functionality of these applications might be compromised due to deprecation issues. - -#### Running the Applications - -These applications only work within Jupyter notebooks. Attempting to run them outside of a Jupyter environment may result in errors or degraded functionality. - -##### Prerequisites - -Make sure you have the needed dependencies installed: - -``` -pip install notebook jupyterlab -``` - -Running with Visual Studio Code (VSCode): - -1. Ensure you have the following extensions installed in VSCode: `Jupyter` and `Python`. - -2. Open VSCode and navigate to the directory containing the notebook. - -3. Open the notebook (e.g. `caimira/apps/expert/caimira.ipynb`) and run the cells by clicking the `run` button next to each cell. - -### Running the tests - -The project contains test files that separately test the functionality of the `caimira` backend and `cern_caimira` UI. - -To test the `caimira` package, from the root repository of the project: - -``` -cd caimira -pip install -e .[test] -python -m pytest -``` - -To test the `cern_caimira` package, from the root repository of the project: - -``` -cd cern_caimira -pip install -e .[test] -python -m pytest -``` - -### Running the profiler - -CAiMIRA includes a profiler designed to identify performance bottlenecks. The profiler is enabled when the environment variable `CAIMIRA_PROFILER_ENABLED` is set to 1. - -When visiting [http://localhost:8080/profiler](http://localhost:8080/profiler), you can start a new session and choose between [PyInstrument](https://github.com/joerick/pyinstrument) or [cProfile](https://docs.python.org/3/library/profile.html#module-cProfile). The app includes two different profilers, mainly because they can give different information. - -Keep the profiler page open. Then, in another window, navigate to any page in CAiMIRA, for example generate a new report. Refresh the profiler page, and click on the `Report` link to see the profiler output. - -The sessions are stored in a local file in the `/tmp` folder. To share it across multiple web nodes, a shared storage should be added to all web nodes. The folder can be customized via the environment variable `CAIMIRA_PROFILER_CACHE_DIR`. - -### CAiMIRA API Usage - -From the root directory of the project: - -1. Run the backend API: - - ``` - python -m caimira.api.app - ``` - -2. The Tornado server will run on port `8081`. - -To test the API functionality, you can send a `POST` request to `http://localhost:8081/virus_report` with the required inputs in the request body. For an example of the required inputs, see [the baseline raw form data](https://gitlab.cern.ch/caimira/caimira/blob/master/caimira/src/caimira/calculator/validators/virus/virus_validator.py#L565). - -The response format will be: - -```json -{ - "status": "success", - "message": "Results generated successfully", - "report_data": { - ... - }, - ... -} -``` - -For further details please refer to the [REST API official documentation](../code_documentation/rest_api/). - -### Building the whole environment for local development - -``` -docker build -f app-config/api-app/Dockerfile -t api-app . -docker build -f app-config/calculator-app/Dockerfile -t calculator-app . -docker build ./app-config/auth-service -t auth-service -``` - -If you are using a computer with ARM CPU (Mac M1/2/3), then add the arg `--platform linux/arm64` to the docker build cmd. - -If you need to debug the Docker build, add the args `--no-cache --progress=plain` to see a more verbose output in your terminal. - -Get the client secret from the CERN Application portal for the `caimira-test` app. See [CERN-SSO-integration](#cern-sso-integration) for more info. -``` -read CLIENT_SECRET -``` - -Define some env vars (copy/paste): -``` -export COOKIE_SECRET=$(openssl rand -hex 50) -export OIDC_SERVER=https://auth.cern.ch/auth -export OIDC_REALM=CERN -export CLIENT_ID=caimira-test -export CLIENT_SECRET=$CLIENT_SECRET -``` - -Run docker compose: -``` -cd app-config -CURRENT_UID=$(id -u):$(id -g) docker compose up -``` - -Then visit [http://localhost:8080/](http://localhost:8080/). - -### Setting up the application on OpenShift - -The [https://cern.ch/caimira](https://cern.ch/caimira) application is running on CERN's OpenShift platform. In order to set it up for the first time, we followed the documentation at [https://paas.docs.cern.ch/](https://paas.docs.cern.ch/). In particular we: - - * Added the OpenShift application deploy key to the GitLab repository - * Created a Python 3.12 (the highest possible at the time of writing) application in OpenShift - * Configured a generic webhook on OpenShift, and call that from the CI of the GitLab repository - -### Updating the caimira-test.web.cern.ch instance - -We have a replica of [https://caimira.web.cern.ch](https://caimira.web.cern.ch) running on [http://caimira-test.web.cern.ch](http://caimira-test.web.cern.ch). Its purpose is to simulate what will happen when -a feature is merged. To push your changes to caimira-test, simply push your branch to `live/caimira-test` and the CI pipeline will trigger the -deployment. To push to this branch, there is a good chance that you will need to force push - you should always force push with care and -understanding why you are doing it. Syntactically, it will look something like (assuming that you have "upstream" as your remote name, -but it may be origin if you haven't configured it differently): - - git push --force upstream name-of-local-branch:live/caimira-test - - -## OpenShift templates - -### First setup - -First, get the [oc](https://docs.okd.io/3.11/cli_reference/get_started_cli.html) client and then login: - -```console -$ oc login https://api.paas.okd.cern.ch -``` - -Then, switch to the project that you want to update: - -```console -$ oc project caimira-test -``` - -Create a new service account in OpenShift to access GitLab container registry: - -```console -$ oc create serviceaccount gitlabci-deployer -serviceaccount "gitlabci-deployer" created -``` - -Grant `edit` permission to the service account to run `oc set image` from CI an update the tag to deploy: -``` -$ oc policy add-role-to-user edit -z gitlabci-deployer -``` - -Get the service account token for GitLab: -``` -# We will refer to the output of this command as `test-token` -$ oc serviceaccounts get-token gitlabci-deployer -<...test-token...> -``` - -Add the token to GitLab to allow GitLab to access OpenShift and define/change image stream tags. Go to `Settings` -> `CI / CD` -> `Variables` -> click on `Expand` button and create the variable `OPENSHIFT_CAIMIRA_TEST_DEPLOY_TOKEN`: insert the token `<...test-token...>`. - -For CI usage, we also suggest creating a service account: - -```console -oc create sa gitlab-config-checker -``` - -Under ``User Management`` -> ``RoleBindings`` create a new `RoleBinding` to grant `View` access to the `gitlab-config-checker` service account: - -* name: `gitlab-config-checker-view-role` -* role name: `view` -* service account: `gitlab-config-checker` - -To get this new user's authentication token go to ``User Management`` -> ``Service Accounts`` -> `gitlab-config-checker` and locate the token in the newly created secret associated with the user (in this case ``gitlab-config-checker-token-XXXX``). Copy the `token` value from `Data`. - -Create the various configurations: - -```console -$ cd app-config/openshift - -$ oc process -f configmap.yaml | oc create -f - -$ oc process -f services.yaml | oc create -f - -$ oc process -f deployments.yaml | oc create -f - -``` - -Manually create the **route** to access the website, see `routes.example.yaml`. -After having created the route, make sure that you extend the HTTP request timeout annotation: the -report generation can take more time than the default 30 seconds. - -``` -$ oc annotate route caimira-route --overwrite haproxy.router.openshift.io/timeout=60s -``` - -### CERN SSO integration - -The SSO integration uses OpenID credentials configured in [CERN Applications portal](https://application-portal.web.cern.ch/). -How to configure the application: - -* Application Identifier: `caimira-test` -* Homepage: `https://caimira-test.web.cern.ch` -* Administrators: `caimira-dev` -* SSO Registration: - * Protocol: `OpenID (OIDC)` - * Redirect URI: `https://caimira-test.web.cern.ch/auth/authorize` - * Leave unchecked all the other checkboxes -* Define new roles: - * Name: `CERN Users` - * Role Identifier: `external-users` - * Leave unchecked checkboxes - * Minimum Level Of Assurance: `CERN (highest)` - * Assign role to groups: `cern-accounts-primary` e-group - * Name: `External accounts` - * Role Identifier: `admin` - * Leave unchecked checkboxes - * Minimum Level Of Assurance: `Any (no restrictions)` - * Assign role to groups: `caimira-app-external-access` e-group - * Name: `Allowed users` - * Role Identifier: `allowed-users` - * Check `This role is required to access my application` - * Minimum Level Of Assurance:`Any (no restrictions)` - * Assign role to groups: `cern-accounts-primary` and `caimira-app-external-access` e-groups - -Copy the client id and client secret and use it below. - -```console -$ COOKIE_SECRET=$(openssl rand -hex 50) -$ oc create secret generic \ - --from-literal="CLIENT_ID=$CLIENT_ID" \ - --from-literal="CLIENT_SECRET=$CLIENT_SECRET" \ - --from-literal="COOKIE_SECRET=$COOKIE_SECRET" \ - auth-service-secrets -``` - -### External APIs - -- **Geographical location:** - There is one external API call to fetch required information related to the geographical location inserted by a user. - The documentation for this geocoding service is available at [https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm) . - Please note that there is no need for keys on this API call. It is **free-of-charge**. - -- **Humidity and Inside Temperature:** - for the `CERN theme` as the authorised sensors are installed at CERN." - -- **ARVE:** - The ARVE Swiss Air Quality System provides trusted air data for commercial buildings in real-time and analyzes it with the help of AI and machine learning algorithms to create actionable insights. - - Create secret: - - ```console - $ read ARVE_CLIENT_ID - $ read ARVE_CLIENT_SECRET - $ read ARVE_API_KEY - $ oc create secret generic \ - --from-literal="ARVE_CLIENT_ID=$ARVE_CLIENT_ID" \ - --from-literal="ARVE_CLIENT_SECRET=$ARVE_CLIENT_SECRET" \ - --from-literal="ARVE_API_KEY=$ARVE_API_KEY" \ - arve-api - ``` - -- **CERN Data Service:** - The CERN data service collects data from various sources and expose them via a REST API endpoint. - - The service is enabled when the environment variable `DATA_SERVICE_ENABLED` is set to 1. - -## Update configuration - -If you need to **update** existing configuration, then modify this repository and after having logged in, run: - -```console -$ cd app-config/openshift - - -$ oc process -f configmap.yaml | oc replace -f - -$ oc process -f services.yaml | oc replace -f - -$ oc process -f deployments.yaml | oc replace -f - -``` - -Be aware that if you create/recreate the environment you must manually create a **route** in OpenShift, -specifying the respective annotation to be exposed outside CERN. diff --git a/caimira/docs/mkdocs/docs/project_overview/about.md b/caimira/docs/mkdocs/docs/project_overview/about.md new file mode 100644 index 00000000..32a773a3 --- /dev/null +++ b/caimira/docs/mkdocs/docs/project_overview/about.md @@ -0,0 +1,105 @@ +Currently, the existing public health measures point to the importance of proper building and environmental engineering control measures, such as proper Indoor Air Quality (IAQ). This pandemic clearly raised increased awareness on airborne transmission of respiratory viruses in indoor settings. Out of the main modes of viral transmission, the airborne route of SARS-CoV-2 seems to have a significant importance to the spread of COVID-19 infections world-wide, hence proper guidance to building engineers or facility managers, on how to prevent on-site transmission, is essential. + +For information on the Airborne Transmission of SARS-CoV-2, feel free to check out the special issue on the Interface Focus journal from Royal Society publishing: [Interface Focus: Volume 12, Issue 2](https://royalsocietypublishing.org/toc/rsfs/2022/12/2) and an CERN HSE Seminar: [https://cds.cern.ch/record/2743403](https://cds.cern.ch/record/2743403). + +## What is CAiMIRA? + +CAiMIRA stands for CERN Airborne Model for Indoor Risk Assessment, a tool developed to assess and model the concentration of airborne viruses in enclosed spaces, specifically focusing on the SARS-CoV-2 virus. Originally named CARA (COVID Airborne Risk Assessment), CAiMIRA was first developed in early 2020 to quantify the risk of long-range airborne spread of SARS-CoV-2 in workplaces. Over time, the model has expanded to include short-range transmission, allowing for comprehensive simulations of both background (room) concentration and close-proximity interactions. + +CAiMIRA features applications with varying flexibility in setting input parameters: + +- CAiMIRA Calculator App +- CAiMIRA Expert App (deprecated) + +These applications produce clear and intuitive graphs, enabling users to adjust settings such as room volume, exposure time, activity type, mask-wearing, and ventilation levels. The tool generates reports indicating how users can avoid exceeding critical concentrations and reduce airborne transmission chains in spaces like individual offices, meeting rooms, and laboratories. + +The mathematical and physical model simulates the airborne spread of SARS-CoV-2 in a finite volume, using a homogenous mixture assumption and a two-stage exhaled jet model to estimate the risk of COVID-19 airborne transmission. Results do not account for other SARS-CoV-2 transmission modes, such as fomite or blood-bound transmission, meaning the output is only valid when paired with public health measures like good hand hygiene and barrier practices. + +The model is based on scientific publications on infectious disease transmission, virology, epidemiology, and aerosol science, as of February 2022. Its methodology, mathematical equations, and parameters are detailed in a peer-reviewed publication, Modelling airborne transmission of SARS-CoV-2 using CARA: risk assessment for enclosed spaces. The short-range model component draws from Jia et al. (2022), Exposure and respiratory infection risk via the short-range airborne route. This foundation enables CAiMIRA to compare the effectiveness of different airborne risk mitigation measures. + +CAiMIRA’s methodology is divided into key steps: + +- Estimating the emission rate of virions +- Estimating the removal rate of virions +- Modeling the concentration of virions within a specified volume over time +- Calculating the dose of inhaled infectious viruses during exposure +- Estimating the probability of COVID-19 infection and the potential number of new cases arising from an event + +The model assumes a deterministic approach—at least one individual is infected and shedding virus into the simulated environment. While it calculates the infection probability for specific scenarios, the model's primary utility is in comparing the relative impact of different preventive measures, such as ventilation, filtration, exposure time, physical activity, and close-range interactions. + +Although CAiMIRA allows users to calculate the infection probability for a specific event given pre-set protection measures, its primary function is to facilitate comparisons between different mitigation, helping users decide on measures to reduce airborne infection risks. Examples include: + +- Comparing slight versus full window openings +- Evaluating intermittent versus continuous ventilation +- Assessing the impact of using FFP2 masks over Type I surgical masks or Cloth masks +- Determining maximum occupancy based on HEPA filter use + +This approach supports informed decision-making and optimized investment by showing the relative effectiveness of each measure. Importantly, while CAiMIRA can guide users in reducing risk, it does not provide an absolute “zero risk” or “completely safe scenario”. + +Risk is unique to each event and setting, influenced by variables such as probability of exposure and input assumptions. + +## Collaboration with the World Health Organization (WHO) + +The tool has attracted the attention of many international organisations, including the World Health Organization (WHO) and the United Nations Office at Geneva (UNOG). In June 2021, CERN shared its own approach towards risk assessments for occupational hazards, which was at the time called CARA, to WHO's COVID Expert Panel. + +As a result, WHO has invited CERN to become a member of a multidisciplinary expert group of international experts called ARIA, which will work to define a standardised algorithm to quantify airborne transmission risk in indoor settings. This will ensure that the model inculdes not only the science related to aerosol science but also the virological effects, such as host-pathogen interaction. + +The collaboration takes place within CERNs wide-ranging engagement with other international organisations, promoting shared solutions to societal challenges. + +## Authors +CAiMIRA was developed by the following members of CERN - European Council for Nuclear Research (visit [https://home.cern/](https://home.cern/)) and WHO - World Health Organization: + +Andre Henriques1, Luis Aleixo1, Marco Andreini1, Gabriella Azzopardi2, James Devine3, Philip Elson4, Nicolas Mounet2, Markus Kongstein Rognlien2,6, Nicola Tarocco5, Luca Fontana7, Alice Simniceanu7 + +1HSE Unit, Occupational Health & Safety Group, CERN
+2Beams Department, Accelerators and Beam Physics Group, CERN
+3Experimental Physics Department, Safety Office, CERN
+4Beams Department, Controls Group, CERN
+5Information Technology Department, Collaboration, Devices & Applications Group, CERN
+6Norwegian University of Science and Technology (NTNU)
+7World Health Organization (WHO)
+ +#### Other contributors + +Anna Efimova1,2, Anel Massalimova1,3, Cole Austin Coughlin1,4, Germain Personne5 + +1Summer Student Programme, CERN
+2M.V. Lomonosov Moscow State University
+3National Research Nuclear University "MEPhI"
+4University of Manitoba
+5Université Clermont Auvergne
+ +## Reference and Citation + +**For the use of the CAiMIRA web app** + +CAiMIRA – CERN Airborne Model for Indoor Risk Assessment tool + +[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.6520431.svg)](https://doi.org/10.5281/zenodo.6520431) + +© Copyright 2020-2021 CERN. All rights not expressly granted are reserved. + +**For use of the CAiMIRA model** + +Henriques A, Mounet N, Aleixo L, Elson P, Devine J, Azzopardi G, Andreini M, Rognlien M, Tarocco N, Tang J. (2022). Modelling airborne transmission of SARS-CoV-2 using CARA: risk assessment for enclosed spaces. _Interface Focus 20210076_. [https://doi.org/10.1098/rsfs.2021.0076](https://doi.org/10.1098/rsfs.2021.0076) + +Reference on the Short-range expiratory jet model from: +Jia W, Wei J, Cheng P, Wang Q, Li Y. (2022). Exposure and respiratory infection risk via the short-range airborne route. _Building and Environment_ *219*: 109166. +[https://doi.org/10.1016/j.buildenv.2022.109166](https://doi.org/10.1016/j.buildenv.2022.109166) + +***Open Source Acknowledgments*** + +For a detailed list of the open-source dependencies used in this project along with their respective licenses, please refer to [Open Source Acknowledgments](open_source_acknowledgments.md). This includes both the core dependencies specified in the project's requirements and their transitive dependencies. + +The information also features a distribution diagram of licenses and a brief description of each of them. + +## Acknowledgements + +We wish to thank CERN at the different Departments working on the project: Occupational Health & Safety and Environmental Protection Unit, Information Technology Department, Beams Department, Experimental Physics Department, Industry, Procurement and Knowledge Transfer Department and International Relations Sector for their support to the study. We also wish to thank our collaborators at the World Health Organization (WHO) for thier endless support to this project, in particular to the members of the ARIA Expert Group. + +## Disclaimer + +CAiMIRA has not undergone review, approval or certification by competent authorities, and as a result, it cannot be considered as a fully endorsed and reliable tool, namely in the assessment of potential viral emissions from infected hosts to be modelled. + +The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. +In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. \ No newline at end of file diff --git a/caimira/docs/mkdocs/docs/project_overview/deployment.md b/caimira/docs/mkdocs/docs/project_overview/deployment.md new file mode 100644 index 00000000..457680d7 --- /dev/null +++ b/caimira/docs/mkdocs/docs/project_overview/deployment.md @@ -0,0 +1,140 @@ +The [https://cern.ch/caimira](https://cern.ch/caimira) application is running on CERN's OpenShift platform. In order to set it up for the first time, we followed the documentation at [https://paas.docs.cern.ch/](https://paas.docs.cern.ch/). In particular we: + + * Added the OpenShift application deploy key to the GitLab repository + * Created a Python 3.12 (the highest possible at the time of writing) application in OpenShift + * Configured a generic webhook on OpenShift, and call that from the CI of the GitLab repository + +## OpenShift templates + +For the first setup, get the [oc](https://docs.okd.io/3.11/cli_reference/get_started_cli.html) client and then login: + +```console +$ oc login https://api.paas.okd.cern.ch +``` + +Then, switch to the project that you want to update: + +```console +$ oc project caimira-test +``` + +Create a new service account in OpenShift to access GitLab container registry: + +```console +$ oc create serviceaccount gitlabci-deployer +serviceaccount "gitlabci-deployer" created +``` + +Grant `edit` permission to the service account to run `oc set image` from CI an update the tag to deploy: +``` +$ oc policy add-role-to-user edit -z gitlabci-deployer +``` + +Get the service account token for GitLab: +``` +# We will refer to the output of this command as `test-token` +$ oc serviceaccounts get-token gitlabci-deployer +<...test-token...> +``` + +Add the token to GitLab to allow GitLab to access OpenShift and define/change image stream tags. Go to `Settings` -> `CI / CD` -> `Variables` -> click on `Expand` button and create the variable `OPENSHIFT_CAIMIRA_TEST_DEPLOY_TOKEN`: insert the token `<...test-token...>`. + +For CI usage, we also suggest creating a service account: + +```console +oc create sa gitlab-config-checker +``` + +Under ``User Management`` -> ``RoleBindings`` create a new `RoleBinding` to grant `View` access to the `gitlab-config-checker` service account: + +* name: `gitlab-config-checker-view-role` +* role name: `view` +* service account: `gitlab-config-checker` + +To get this new user's authentication token go to ``User Management`` -> ``Service Accounts`` -> `gitlab-config-checker` and locate the token in the newly created secret associated with the user (in this case ``gitlab-config-checker-token-XXXX``). Copy the `token` value from `Data`. + +Create the various configurations: + +```console +$ cd app-config/openshift + +$ oc process -f configmap.yaml | oc create -f - +$ oc process -f services.yaml | oc create -f - +$ oc process -f deployments.yaml | oc create -f - +``` + +Manually create the **route** to access the website, see `routes.example.yaml`. +After having created the route, make sure that you extend the HTTP request timeout annotation: the +report generation can take more time than the default 30 seconds. + +``` +$ oc annotate route caimira-route --overwrite haproxy.router.openshift.io/timeout=60s +``` + +## CERN SSO integration + +The SSO integration uses OpenID credentials configured in [CERN Applications portal](https://application-portal.web.cern.ch/). +How to configure the application: + +* Application Identifier: `caimira-test` +* Homepage: `https://caimira-test.web.cern.ch` +* Administrators: `caimira-dev` +* SSO Registration: + * Protocol: `OpenID (OIDC)` + * Redirect URI: `https://caimira-test.web.cern.ch/auth/authorize` + * Leave unchecked all the other checkboxes +* Define new roles: + * Name: `CERN Users` + * Role Identifier: `external-users` + * Leave unchecked checkboxes + * Minimum Level Of Assurance: `CERN (highest)` + * Assign role to groups: `cern-accounts-primary` e-group + * Name: `External accounts` + * Role Identifier: `admin` + * Leave unchecked checkboxes + * Minimum Level Of Assurance: `Any (no restrictions)` + * Assign role to groups: `caimira-app-external-access` e-group + * Name: `Allowed users` + * Role Identifier: `allowed-users` + * Check `This role is required to access my application` + * Minimum Level Of Assurance:`Any (no restrictions)` + * Assign role to groups: `cern-accounts-primary` and `caimira-app-external-access` e-groups + +Copy the client id and client secret and use it below. + +```console +$ COOKIE_SECRET=$(openssl rand -hex 50) +$ oc create secret generic \ + --from-literal="CLIENT_ID=$CLIENT_ID" \ + --from-literal="CLIENT_SECRET=$CLIENT_SECRET" \ + --from-literal="COOKIE_SECRET=$COOKIE_SECRET" \ + auth-service-secrets +``` + +## Updating OpenShift configuration + +If you need to **update** existing configuration, then modify this repository and after having logged in, run: + +```console +$ cd app-config/openshift + + +$ oc process -f configmap.yaml | oc replace -f - +$ oc process -f services.yaml | oc replace -f - +$ oc process -f deployments.yaml | oc replace -f - +``` + +Be aware that if you create/recreate the environment you must manually create a **route** in OpenShift, +specifying the respective annotation to be exposed outside CERN. + + +## Updating the TEST instance + +We have a replica of [https://caimira.web.cern.ch](https://caimira.web.cern.ch) running on [http://caimira-test.web.cern.ch](http://caimira-test.web.cern.ch). Its purpose is to simulate what will happen when +a feature is merged. To push your changes to caimira-test, simply push your branch to `live/caimira-test` and the CI pipeline will trigger the +deployment. To push to this branch, there is a good chance that you will need to force push - you should always force push with care and +understanding why you are doing it. Syntactically, it will look something like (assuming that you have "upstream" as your remote name, +but it may be origin if you haven't configured it differently): + + git push --force upstream name-of-local-branch:live/caimira-test + diff --git a/caimira/docs/mkdocs/docs/project_overview/installation.md b/caimira/docs/mkdocs/docs/project_overview/installation.md new file mode 100644 index 00000000..30b63403 --- /dev/null +++ b/caimira/docs/mkdocs/docs/project_overview/installation.md @@ -0,0 +1,230 @@ +## Docker + +### Using the pre-built image + +The easiest way to run a version of CAiMIRA Calculator is to use docker. A pre-built +image of CAiMIRA is made available at [https://gitlab.cern.ch/caimira/caimira/container_registry](https://gitlab.cern.ch/caimira/caimira/container_registry). +In order to run CAiMIRA locally with docker, run the following: + + $ docker run -it -p 8080:8080 gitlab-registry.cern.ch/caimira/caimira/calculator + +This will start a local version of CAiMIRA, which can be visited at [http://localhost:8080/](http://localhost:8080/). + +### Building the whole environment + +To build the whole environment for local development, from the root directory of the project, run: + +``` +docker build -f app-config/api-app/Dockerfile -t api-app . +docker build -f app-config/calculator-app/Dockerfile -t calculator-app . +docker build ./app-config/auth-service -t auth-service +``` + +If you are using a computer with ARM CPU (Mac M1/2/3), then add the arg `--platform linux/arm64` to the docker build cmd. + +If you need to debug the Docker build, add the args `--no-cache --progress=plain` to see a more verbose output in your terminal. + +Get the client secret from the CERN Application portal for the `caimira-test` app. See [CERN-SSO-integration](#cern-sso-integration) for more info. +``` +read CLIENT_SECRET +``` + +Define some env vars (copy/paste): +``` +export COOKIE_SECRET=$(openssl rand -hex 50) +export OIDC_SERVER=https://auth.cern.ch/auth +export OIDC_REALM=CERN +export CLIENT_ID=caimira-test +export CLIENT_SECRET=$CLIENT_SECRET +``` + +Run docker compose: +``` +cd app-config +CURRENT_UID=$(id -u):$(id -g) docker compose up +``` + +Then visit [http://localhost:8080/](http://localhost:8080/). + +## Development mode + +CAiMIRA is mirrored to Github if you wish to collaborate on development and can be found at: [https://github.com/CERN/caimira](https://github.com/CERN/caimira) + +### Folder structure + +The project contains two different Python packages: + +- `caimira`: Contains all the backend logic and the calculator model. It is the package published in PyPI. +- `cern_caimira`: Imports and uses the backend package (`caimira`) and includes CERN-specific UI implementation. + +The folder layout follows best practices as described [here](https://ianhopkinson.org.uk/2022/02/understanding-setup-py-setup-cfg-and-pyproject-toml-in-python/). + +### Installing and running CAiMIRA + +Installing CAiMIRA in editable mode and running the Calculator App. + +#### Installing + +In order to install the CAiMIRA's backend logic, create your own `virtualenv` and, from the root directory of the project, run: + +``` +cd caimira +pip install -e . +``` + +In order to install the CERN-specific UI version, that links to the previously installed backend, activate your `virtualenv` and, from the root directory of the project, run: + +``` +cd cern_caimira +pip install -e . +``` + +#### Running + +This example describes how to run the calculator with the CERN-specific UI. In the root directory of the project: + +``` +python -m cern_caimira.apps.calculator +``` + +To run with a specific template theme created: + +``` +python -m cern_caimira.apps.calculator --theme=cern_caimira/src/cern_caimira/apps/templates/{theme} +``` + +To run the entire app in a different `APPLICATION_ROOT` path: + +``` +python -m cern_caimira.apps.calculator --app_root=/myroot +``` + +To run the calculator on a different URL path: + +``` +python -m cern_caimira.apps.calculator --prefix=/mycalc +``` + +Each of these commands will start a local version of CAiMIRA, which can be visited at [http://localhost:8080/](http://localhost:8080/). + +#### REST API + +To use the REST API, from the root directory of the project: + +1. Run the backend API: + + ``` + python -m caimira.api.app + ``` + +2. The Tornado server will run on port `8081`. + +To test the API functionality, you can send a `POST` request to `http://localhost:8081/virus_report` with the required inputs in the request body. For an example of the required inputs, see [the baseline raw form data](https://gitlab.cern.ch/caimira/caimira/blob/master/caimira/src/caimira/calculator/validators/virus/virus_validator.py#L565). + +The response format will be: + +```json +{ + "status": "success", + "message": "Results generated successfully", + "report_data": { + ... + }, + ... +} +``` + +For further details please refer to the [REST API documentation page](../code_documentation/rest_api.md). + +#### Running the Expert-Apps + +The CAiMIRA Expert App and the CO2 App are tools to dynamically interact with various parameters of the CAiMIRA model. + +##### Disclaimer + +The `ExpertApplication` and `CO2Application` are no longer actively maintained but will remain in the codebase for legacy purposes. +Please note that the functionality of these applications might be compromised due to deprecation issues. + +##### Running the Applications + +These applications only work within Jupyter notebooks. Attempting to run them outside of a Jupyter environment may result in errors or degraded functionality. + +Make sure you have the needed dependencies installed: + +``` +pip install notebook jupyterlab +``` + +Running with Visual Studio Code (VSCode): + +1. Ensure you have the following extensions installed in VSCode: `Jupyter` and `Python`. + +2. Open VSCode and navigate to the directory containing the notebook. + +3. Open the notebook (e.g. `caimira/apps/expert/caimira.ipynb`) and run the cells by clicking the `run` button next to each cell. + + +### Installing and running tests + +The project contains test files that separately test the functionality of the `caimira` backend and `cern_caimira` UI. + +To test the `caimira` package, from the root repository of the project: + +``` +cd caimira +pip install -e .[test] +python -m pytest +``` + +To test the `cern_caimira` package, from the root repository of the project: + +``` +cd cern_caimira +pip install -e .[test] +python -m pytest +``` + +### Running the profiler + +CAiMIRA includes a profiler designed to identify performance bottlenecks. The profiler is enabled when the environment variable `CAIMIRA_PROFILER_ENABLED` is set to 1. + +When visiting [http://localhost:8080/profiler](http://localhost:8080/profiler), you can start a new session and choose between [PyInstrument](https://github.com/joerick/pyinstrument) or [cProfile](https://docs.python.org/3/library/profile.html#module-cProfile). The app includes two different profilers, mainly because they can give different information. + +Keep the profiler page open. Then, in another window, navigate to any page in CAiMIRA, for example generate a new report. Refresh the profiler page, and click on the `Report` link to see the profiler output. + +The sessions are stored in a local file in the `/tmp` folder. To share it across multiple web nodes, a shared storage should be added to all web nodes. The folder can be customized via the environment variable `CAIMIRA_PROFILER_CACHE_DIR`. + +### Compiling and viewing the docs + +To compile and view CAiMIRA's documentation, follow these steps: + +1. Install CAiMIRA with Documentation Dependencies + + First, ensure CAiMIRA is installed along with the `doc` dependencies: + + cd caimira + pip install -e .[doc] + +2. Generate Code Documentation in Markdown + + Use `sphinx` with `sphinx_markdown_builder` to generate the documentation in `Markdown` format: + + cd docs/sphinx + sphinx-build -b markdown . _build/markdown + +3. Customize and Organize Documentation + + Run the `style_docs.py` script to apply custom styles, move required files, and generate a UML diagram: + + python style_docs.py \ + && mv sphinx/_build/markdown/index.md mkdocs/docs/code_documentation/models.md \ + && pyreverse -o png -p UML-CAiMIRA --output-directory mkdocs/docs ../src/caimira/calculator/models/models.py + +4. Start the documentation server + + To view the documentation locally, use MkDocs to serve it: + + cd ../mkdocs + python -m mkdocs serve --dev-addr=0.0.0.0:8080 + + The documentation can now be accessed at [http://0.0.0.0:8080/](http://0.0.0.0:8080/). diff --git a/caimira/docs/mkdocs/docs/open_source_acknowledgments.md b/caimira/docs/mkdocs/docs/project_overview/open_source_acknowledgments.md similarity index 79% rename from caimira/docs/mkdocs/docs/open_source_acknowledgments.md rename to caimira/docs/mkdocs/docs/project_overview/open_source_acknowledgments.md index ca84fd2a..5c93eb0e 100644 --- a/caimira/docs/mkdocs/docs/open_source_acknowledgments.md +++ b/caimira/docs/mkdocs/docs/project_overview/open_source_acknowledgments.md @@ -1,12 +1,10 @@ -# Open Source Acknowledgments - -# Disclaimer +#### Disclaimer The following list includes the open-source dependencies used in this project, along with their respective licenses. It covers both the core dependencies explicitly specified in the project's requirements, as well as their transitive dependencies (dependencies of dependencies). Including transitive dependencies is essential to acknowledge the full spectrum of open-source contributions that contribute to the functionality of this project. It also ensures compliance with open-source licenses and recognizes the efforts of all contributors, even those indirectly involved. -## CAiMIRA tool is Open Source +## External Libraries ??? "Back-end (Python) Dependencies" ??? "Front-end (JavaScript) Dependencies" @@ -34,10 +32,6 @@ Including transitive dependencies is essential to acknowledge the full spectrum ??? "Other references" - #### Arve - - - Endpoint: `https://www.arveair.com/terms-and-conditions/` - #### Rest Countries - License: [MP License 2.0](https://gitlab.com/restcountries/restcountries/-/blob/master/LICENSE?ref_type=heads) @@ -67,11 +61,43 @@ Including transitive dependencies is essential to acknowledge the full spectrum - Endpoint: `https://www.covid19.admin.ch/en/epidemiologic/case/d/development?epiRelDev=abs` + ### External APIs + + - **Geographical location**: + + There is one external API call to fetch required information related to the geographical location inserted by a user. + The documentation for this geocoding service is available at [https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm) . + Please note that there is no need for keys on this API call. It is **free-of-charge**. + + - **Humidity and Inside Temperature**: + + For the `CERN theme` as the authorized sensors are installed at CERN. + + - **ARVE**: + + The ARVE Swiss Air Quality System provides trusted air data for commercial buildings in real-time and analyzes it with the help of AI and machine learning algorithms to create actionable insights. Terms and Conditions available here [https://www.arveair.com/terms-and-conditions/](https://www.arveair.com/terms-and-conditions/). + + Create secret: + + $ read ARVE_CLIENT_ID + $ read ARVE_CLIENT_SECRET + $ read ARVE_API_KEY + $ oc create secret generic \ + --from-literal="ARVE_CLIENT_ID=$ARVE_CLIENT_ID" \ + --from-literal="ARVE_CLIENT_SECRET=$ARVE_CLIENT_SECRET" \ + --from-literal="ARVE_API_KEY=$ARVE_API_KEY" \ + arve-api + + - **CERN Data Service**: + + The CERN data service collects data from various sources and expose them via a REST API endpoint. + The service is enabled when the environment variable `DATA_SERVICE_ENABLED` is set to 1. + ### License Distribution -![License Distribution](license_distribution.png) +![License Distribution Pie Chart](license_distribution.png) -### License information +## List of Open Source Licenses The list of open-source dependencies provided here includes licenses for both direct dependencies and dependencies of dependencies. This comprehensive list covers a wide range of licenses, each with its own terms and conditions. Below is a summary of the most frequently encountered licenses along with their descriptions and usage: diff --git a/caimira/docs/mkdocs/docs/project_overview/user_guide/full_guide.md b/caimira/docs/mkdocs/docs/project_overview/user_guide/full_guide.md new file mode 100644 index 00000000..c97bd73d --- /dev/null +++ b/caimira/docs/mkdocs/docs/project_overview/user_guide/full_guide.md @@ -0,0 +1,207 @@ +## CAiMIRA Calculator + +This guide helps on how to use the calculator app. For more information on the Airborne Transmission of SARS-CoV-2, feel free to check out the HSE Seminar: [https://cds.cern.ch/record/2743403](https://cds.cern.ch/record/2743403) + +The methodology, mathematical equations and parameters of the model are described here in the CERN Report: [CERN-OPEN-2021-004](https://cds.cern.ch/record/2756083) + +??? "Disclaimer" + + CAiMIRA is a risk assessment tool developed to model the concentration of viruses in enclosed spaces, in order to inform space-management decisions. + + CAiMIRA models the concentration profile of virions in enclosed spaces with clear and intuitive graphs. The user can set a number of parameters, including room volume, exposure time, activity type, mask-wearing and ventilation. The report generated indicates how to avoid exceeding critical concentrations and chains of airborne transmission in spaces such as individual offices, meeting rooms and labs. + + The risk assessment tool simulates the airborne spread SARS-CoV-2 virus in a finite volume, assuming homogenous mixing for the long-range component and a two-stage jet model for short-range, and estimates the risk of COVID-19 airborne transmission therein. The results DO NOT include other known modes of SARS-CoV-2 transmission, such as contact or fomite. Hence, the output from this model is only valid when the other recommended public health & safety instructions are observed, such as adequate physical distancing, good hand hygiene and other barrier measures. + + The model used is based on scientific publications relating to airborne transmission of infectious diseases, dose-response exposures and aerosol science, as of February 2021. It can be used to compare the effectiveness of different airborne-related risk mitigation measures. + + Note that this model applies a deterministic approach, i.e., it is assumed at least one person is infected and shedding viruses into the simulated volume. Nonetheless, it is also important to understand that the absolute risk of infection is uncertain, as it will depend on the probability that someone infected attends the event. The model is most useful for comparing the impact and effectiveness of different mitigation measures such as ventilation, filtration, exposure time, physical activity, amount and nature of close-range interactions and the size of the room, considering both long- and short-range airborne transmission modes of COVID-19 in indoor settings. + + This tool is designed to be informative, allowing the user to adapt different settings and model the relative impact on the estimated infection probabilities. The objective is to facilitate targeted decision-making and investment through comparisons, rather than a singular determination of absolute risk. While the SARS-CoV-2 virus is in circulation among the population, the notion of 'zero risk' or 'completely safe scenario' does not exist. Each event modelled is unique, and the results generated therein are only as accurate as the inputs and assumptions. + + CAiMIRA has not undergone review, approval or certification by competent authorities, and as a result, it cannot be considered as a fully endorsed and reliable tool, namely in the assessment of potential viral emissions from infected hosts to be modelled. + +### Simulation Name & Room number + +In order to be able to trace back the simulations in your workplace risk assessments, performed with the tool, you can give each one a unique name - for example "Office use on Tuesday mornings". The simulation name has no bearing on the calculation. + +A room number is included, if you do not wish to use a formal room number any reference will do - for example "57/2-004". + +### Virus Data + +Please choose the correct virus strain or any reported Variant of Concern (VOC) from the list. Changing this setting alters the properties of the virus which are used for the simulation. This has a significant effect on the probability of infection. The choices are: + +- **SARS-CoV-2 (nominal strain)**, covering typical strains and variants which are not of concern from an epidemiologic point of view of the virus; +- **SARS-CoV-2 (Alpha VOC)**, first identified in the UK at the end of 2020 which is found to be approximately 1.5x more transmissible compared to the non-VOCs; +- **SARS-CoV-2 (Beta VOC)**, first identified in South Africa in May 2020 which is found to be approximately 1.25x more transmissible compared to the non-VOCs; +- **SARS-CoV-2 (Gamma VOC)**, first identified in Brazil in January 2021 which is found to be approximately 2.2x more transmissible compared to the non-VOCs. +- **SARS-CoV-2 (Delta VOC)**, first identified in India towards the end of 2020 which is found to be approximately 60% more transmissible compared to the ALPHA VOC. +- **SARS-CoV-2 (Omicron VOC)**, first identified in South Africa in November 2021 which is found to be at least 2.53x more transmissible compared to the DELTA VOC. + +The user can modify the selected variant from the default, according to the prevalence of the different variants in the local area, e.g. for [Geneva](https://www.covid19.admin.ch/fr/epidemiologic/virus-variants?detGeo=GE). + +N.B. The transmission data for the Gamma variant has been taken from a study data gathered in Manaus, Brazil where the variant was first observed. The local population in Manaus had very high levels of Covid-19 antibodies (>67%) in recent months. This factor has been taken into account by the authors of the study, via statistical adjustments to the transmission value (i.e. it has been increased, to account for spread in a population with significant acquired Covid-19 immunity). However, this value may be revised in the future as more studies of the Gamma VOC transmission in different geographical locations become available. + +#### Vaccine effectiveness + +The vaccination input corresponds to the vaccine type(s) administrated to the exposed population, assuming every exposed (or the occupant in question) has received the vaccine cocktail selected by the user. The respective vaccine effectiveness values were extracted from data available in [Results of COVID-19 Vaccine Effectiveness Studies: An Ongoing Systematic Review - Updated September 8, 2022](https://view-hub.org/resources), using this [script](https://gitlab.cern.ch/caimira/caimira/-/blob/master/caimira/src/caimira/scripts/data/vaccine_effectiveness.py). + +### Room Data + +Please enter either the room volume (in m³) or both the floor area (m²) and the room height (m). This information is available via GIS Portal ([https://gis.cern.ch/gisportal/](https://gis.cern.ch/gisportal/)). + +#### Room heating system + +The use of central heating (e.g. radiators) reduces relative humidity of the indoor air, which can decrease the decay rate of viral infectivity. If your space is heated with such water radiators, select 'Yes'. If your space does not have such heating, or they are not in use in the period of the simulation (e.g. summer), select 'No'. + +### Ventilation type + +There are three main options: + +#### Mechanical ventilation + +If the room has mechanical ventilation, supplying fresh air from outside (either a local or centralized system), you should select this option. In order to make an accurate calculation you will need to know either the flow rate of fresh air supplied in the room or th total number of air changes per hour with fresh air. + +Please bear in mind that any of the two inputs only consider the supply of fresh air. If a portion of air is recirculated, it shall not be accounted for in the inputs. + +#### Natural ventilation + +Natural ventilation refers to rooms which have openable windows. There are many possibilities to calculate natural ventilation air flows, for simplification this tool assumes a single-sided natural ventilation scheme which is a conservative approach for the purpose of this tool. + +Please choose the type of window (see illustration below): + +- Sliding or side-hung +- Top- or bottom-hung + +![How to determine the window type](img/window_type.PNG) + +Please enter the number, height and width and opening distance of the windows (in m). If there are multiple windows of different sizes, you should take an average. + +The window opening distance (in m) is: + +- In the case of Sliding or Side-Hung option, the length the window is moved open. Window opening distance example (image of open window and measuring tape): + + ![How to measure window opening distance](img/window_opening.png) + +- In case of Top- or Bottom-Hung, the distance between the fixed frame and the movable glazed part when open. + +**Notes**: If you are unsure about the opening distance for the window, it is recommended to choose a conservative value (5 cms, 0.05m or 10cms, 0.10m). If you open the window at different distances throughout the day, choose an average value. +When using natural ventilation, the circulation of air is simulated as a function of the difference between the temperature inside the room and the outside air temperature. The average outdoor temperature for each hour of the day has been computed for every month of the year based on historical data for Geneva, Switzerland. It is therefore very important to enter the correct time and date in the event data section. Finally, you must specify if the windows are open permanently (at all the times), or periodically (in intervals for a certain duration during the course of the day) - e.g. open the window for 10 minutes (duration) every 60 minutes (frequency). + +#### No ventilation + +This option assumes there is neither Mechanical nor Natural ventilation in the simulation. + +#### HEPA filtration + +A HEPA filter is a high efficiency particulate matter filter, which removes small airborne particles from the air. They can be very useful for removing particles with viruses from the air in an enclosed space. The calculator allows you to simulate the installation of a HEPA air filter within the room. The recommended airflow rate for the HEPA filter should correspond to a total air exchange rate of 3 - 6 ACH (the higher the better, even beyond 6). + +### Event data + +Here we capture the information about the event being simulated. First enter the number of occupants in the space, if you have a (small) variation in the number of people, please input the average or consider using the expert tool. Within the number of people occupying the space, you should specify how many are infected. + +In case one would like to simulate an event happening at a given time and location, where the epidemiological situation is known, the tool allows for an estimation of the probability of on-site transmission, considering the chances that a given person in the event is infected. The user will need to select **Probabilistic event**, input the number of inhabitants and the the weekly (7-day rolling average) value of new reported laboratory - ⁠confirmed cases at the event location, as well as the confidence level of these inputs. The 7-day rolling average consists in the average of the previous 3 days to subsequent 3 days, generally reported by the different public health authorities (e.g. in Switzerland [here](https://www.covid19.admin.ch/en/epidemiologic/case/d/development?epiRelDev=abs)). These two inputs need to the related, i.e. the values of reported new cases and the number of inhabitants shall correspond to the a same geographical location. For example: + +- Population of Geneva, CH: 508 000 inhabitants +- New lab reported cases in the canton of Geneva: 1000 (7-day rolling average) + +The confidence level allows for an ascertainment bias to the data. The user can add the following options: + +- High - mandatory population wide surveillance +- Medium - recommended population-wide surveillance +- Low - surveillance only for symptomatic patients + +Depending on the epidemiological situation in the chosen location, the public health surveillance can be more or less active. The confidence level will provide an ascertainment bias to the data collected by the user. +The higher the incidence rate (i.e. new cases / population) the higher are the chances of having at least one infected occupant participating to the event. + +For general and recurrent layout simply select the **Deterministic exposure** option. As an example, for a shared office with 4 people, where one person is infected, we enter 4 occupants and 1 infected person. + +#### Activity type + +There are a few predefined activities in the tool at present. + +- **Office** - All persons seated, talking occasionally (1/3rd of the time, with normal breathing the other 2/3rds of the time). Everyone (exposed and infected occupants) is treated the same in this model. +- **Small meeting** - Less than 10 participants. All persons seated, having a conversation (approximately each occupant is 1/N % of the time talking, where N is the number of occupants). Everyone (exposed and infected occupants) is treated the same in this model. +- **Large Meeting** - 10 or more participants. Similar to a seminar with 'speakers and audience'. Infected occupant(s) is standing and speaking 1/3rd of the time, while the other occupants are seated. +- **Library** - All persons seated, breathing only (not talking), all the time. +- **Call Centre** - All persons seated, all talking simultaneously, all the time. This is a conservative profile, i.e. will show an increased P(i) compared to office/meeting activity. Everyone (exposed and infected occupants) is treated the same in this model. +- **Control Room (day shift)** - All persons seated, all talking 50% of the time. This is a conservative profile, i.e. will show an increased P(i) compared to office/meeting activity. Everyone (exposed and infected occupants) is treated the same in this model. +- **Control Room (night shift)** - All persons seated, all talking 10% of the time. Everyone (exposed and infected occupants) is treated the same in this model. +- **Lab** - Based on a typical lab or technical working area, all persons are doing light activity and talking 50% of the time. Everyone (exposed and infected occupants) is treated the same in this model. +- **Workshop** - Based on a mechanical assembly workshop or equipment installation scenario, all persons are doing moderate activity and talking 50% of the time. This activity is equally applicable to bicycling, or walking on a gradient, in the LHC tunnels. Everyone (exposed and infected occupants) is treated the same in this model. +- **Conference/Training (speaker infected)** - Based on a typical conference/training course scenario. One individual (the speaker/trainer) is standing and talking, with all other individuals seated and talking quietly (whispering). In this case it is assumed that the infected person is the speaker/trainer, because this is the worst case in terms of viral shedding. +- **Conference/Training (attendee infected)** - All individuals seated and breathing. In this case it is assumed that the infected person is not the speaker/trainer. +- **Gym** - All persons are doing heavy exercise and breathing (not talking). Everyone (exposed and infected occupants) is treated the same in this model. + +### Timings + +You should enter the time (hours:minutes) for the start and end of the simulation period (i.e. 8:30 to 17:30 for a typical office day). It is important to enter the correct times for the simulation, in particular when using natural ventilation. It is possible to specify a different time for the entry and exit of both the exposed and infected person, however for most cases (where we do not know apriori which of the occupants is infected), it is recommended to set these to the same values as the activity start and end. + +#### When is the event? + +This is included for completeness in all simulations, however it is of particular relevance to those using natural ventilation because of variations in outside air temperature. + +Only the month is used by the model to retrieve the average outdoor air temperatures for the Geneva region. + +### Breaks + +#### Lunch break + +You have the option to specify a lunch break. This will be useful if you plan to simulate a typical full working day. During the lunch break it is assumed that all occupants will leave the simulated space (to go eat lunch somewhere else - restaurant or break room). If you plan to eat lunch in the same area where you have been working, you should select 'No' even if a lunch break will be taken, since the risk of infection is related to the occupation of the simulated space. See 'Split Breaks' if the occupants do not break at the same time. + +It should also be noted that the infection probabilities presented in the report does not take into account any potential exposures during the break times. + +#### Coffee breaks + +You have the option to choose 0(No breaks), 2 or 4 coffee breaks during the simulated period. It is assumed that all occupants vacate the space during the break period. If coffee breaks are taken in-situ, this option should be set to 'No breaks'. + +When enabled, the breaks are spread equally throughout the day - for example if we simulate the period from 9:00 to 18:00, with a lunch break from 13:00 to 14:00 and considering 2 coffee breaks, the tool will schedule the first coffee break around 11:00 and the second around 16:00. The exact timing of the breaks within the day is not particularly critical to an accurate simulation, so you do not need to be concerned about major differences if you take a coffee break at 10:00 instead of 11:00. The variation of coffee breaks can be altered in 5 minute increments up to 30 minutes in length. Note that this doesn't necessarily have to be a coffee break, it can represent any period where the simulated space is vacated. See 'Split Breaks' if the occupants do not break at the same time. + +It should also be noted that the infection probabilities presented in the report does not take into account any potential exposures during the break times. + +#### Split breaks + +You have the option to specify whether the exposed and infected person(s) break at the same time. If not, then you can input separate breaks. This is particularly different when specifying coffee breaks as they are spread evenly throughout the activity times specified. + +If we take an example where the exposed person(s) activity time is from 9:00 to 18:00 and the infected person(s) is from 10:00 to 17:00, with both having a lunch break from 13:00 to 14:00 and have 2 coffee breaks each, we can have two different results: + +1. Specify the default situation where both exposed and infected persons(s) have their breaks at the same time: in this case the coffee break times are calculated based on the activity time of the exposed - both will have their first coffee break around 11:00 and the second around 16:00. + +2. Specify separate breaks for the infected person(s): in this case the coffee breaks will be calculated based on the different activity times (i.e. exposed from 9:00 to 18:00 and infected from 10:00 to 17:00) - the exposed person(s) will have their first coffee break around 11:00 and the second around 16:00, whereas the infected will have their first coffee break around 11:30 and the second around 15:30. + +### Face masks + +The model allows for a simulation with either a continuous wearing of face masks throughout the duration of the event, or have the removed at all times - i.e. all occupants (infected and exposed alike) wear or not masks for the duration of the simulation. Please bear in mind the user inputs shall be aligned with the current applicable public health & safety instructions. Please check what are the applicable rules, before deciding which assumptions are used for the simulation. + +If you have selected the Conference/Training activity type, this equates to the speaker/trainer and all participants either wearing masks throughout the conference/training (Yes), or removing them when seated/standing at their socially distanced positions within the conference/training room (No). Please confirm what are the applicable rules, before deciding which assumptions are used for the simulation + +For the time being only the Type 1 surgical, FFP2, and Cloth masks can be selected. + +### Report + +When you have entered all the necessary information, please click on the Generate Report button to execute the model. With the implementation of Monte Carlo simulations, the browser might take a few seconds to react. + +The report will open in your web browser. It contains a summary of all the input data, which will allow the simulation to be repeated if required in the future as we improve the model. + +#### Results + +This part of the report shows the P(I) or probability of one exposed person getting infected. It is estimated based on the emission rate of virus into the simulated volume, and the amount which is inhaled by exposed individuals. This probability is valid for the simulation duration - i.e. the start and end time. If you are using the natural ventilation option, the simulation is only valid for the selected month, because the following or preceding month will have a different average temperature profile. The expected number of new cases for the simulation is calculated based on the probability of infection, multiplied by the number of exposed occupants. + +The graph shows the variation in the concentration of virions within the simulated volume. It is determined by: + +- The presence of the infected person, who emits airborne viruses in the volume. +- The emission rate is related to the type of activity of the infected person (sitting, light exercise), their level of vocalisation (breathing, speaking or shouting). +- The accumulation of virions in the volume, which is driven, among other factors, by ventilation (if applicable). + - In a mechanical ventilation scenario, the removal rate is constant, based on fresh airflow supply in and out of the simulated space. + - Under natural ventilation conditions, the effectiveness of ventilation relies upon the hourly temperature difference between the inside and outside air temperature. + - A HEPA filter removes virions from the air at a constant rate and is modelled in the same way as mechanical ventilation, however air passed through a HEPA filter is recycled (i.e. it is not fresh air). + +#### QR code + +At the end of the report you can find a unique QR code / hyperlink for this report. This provides an automatic way to review the calculator form with the corresponding specified parameters. This allows for: + +- sharing reports by either scanning or clicking on the QR code to obtain a shareable link. +- easily regenerating reports with any new versions of the CAiMIRA model released in the future. + +### Conclusion + +This tool provides informative comparisons for COVID-19 airborne risk only - see Disclaimer. If you have any comments on your experience with the app, or feedback for potential improvements, please share them with the development team - [send email](mailto:caimira-dev@cern.ch). \ No newline at end of file diff --git a/caimira/docs/mkdocs/docs/project_overview/user_guide/img/window_opening.png b/caimira/docs/mkdocs/docs/project_overview/user_guide/img/window_opening.png new file mode 100644 index 0000000000000000000000000000000000000000..5b96b16910dfd7d7aa65cecf095f25212a4b369f GIT binary patch literal 118076 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℘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 FV1jekTCe~B literal 0 HcmV?d00001 diff --git a/caimira/docs/mkdocs/docs/project_overview/user_guide/img/window_type.PNG b/caimira/docs/mkdocs/docs/project_overview/user_guide/img/window_type.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8d7d7405a65650423a679371e5efc7c4e33ec567 GIT binary patch literal 48792 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

qelc`%}(k>va&XjN7sNkuQQL+*`jh-W&ggj;ha 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 Jm8e1B{{nv@So#0} literal 0 HcmV?d00001 diff --git a/caimira/docs/mkdocs/docs/project_overview/user_guide/quick_guide.md b/caimira/docs/mkdocs/docs/project_overview/user_guide/quick_guide.md new file mode 100644 index 00000000..c12b51ac --- /dev/null +++ b/caimira/docs/mkdocs/docs/project_overview/user_guide/quick_guide.md @@ -0,0 +1,46 @@ +## CAiMIRA Calculator + +This tool simulates the airborne spread of SARS-CoV-2 virus in a finite volume and estimates the risk of COVID-19 infection. It is based on current scientific data and can be used to compare the effectiveness of different mitigation measures. + +### Virus data + +SARS-CoV-2 covers the original "wild type" strain of the virus and three variants of concern (VOC): +- Alpha (also known as B.1.1.7, first identified in UK, Sept 2020), +- Beta (also known as B.1.351, first identified in South Africa, May 2020). +- Gamma (also known as P.1, first identified in Brazil/Japan, Jan 2021). +- Delta (also known as B.1.617.2, first identified in India, Oct 2020). +- Omicron (also known as B.1.1.529, first identified in South Africa, November 2021). + +Modify the default as necessary, according to local area prevalence e.g. for [Geneva](https://www.covid19.admin.ch/fr/epidemiologic/virus-variants?geo=GE). + +### Ventilation data + +- Mechanical ventilation = the HVAC supply of fresh air. Check the flow rates with the concerned technical department. +- Natural ventilation = the type of window opening. The opening distance is between the fixed frame and movable part when open (commonly used values are window height of 1.6m and window opening between 0.15m and 0.6m). In case of periodic opening, specify the duration (e.g. 10 min) per hour. +- HEPA filtration = the air flow of the device. The following values are based on the different fan velocities of a specific commercial device proposed by the HSE Unit: + - Level 6 (max) = 430 m3/h (noisy), + - Level 5 = 250 m3/h (ok w.r.t. noise, recommended), + - Level 4 = 130 m3/h (silent), + - Level 3 = 95 m3/h (silent). + +### Activity types + +The type of activity applies to both the infected and exposed persons: +- Office = all seated, talking 33% of the time, +- Small meeting (< 10 occ.) = all seated, talking time shared between all persons, +- Large meeting (>= 10 occ.) = speaker is standing and speaking 33% of the time, other occupants are seated, +- Call Centre = all seated, continuous talking, +- Control Room (day shift) = all seated, talking 50% of the time, +- Control Room (night shift) = all seated, talking 10% of the time, +- Library = all seated, no talking, just breathing, +- Laboratory = light physical activity, talking 50% of the time, +- Workshop = moderate physical activity, talking 50% of the time, +- Conference/Training (speaker infected) = speaker/trainer standing and talking, rest seated and talking quietly. Speaker/Trainer assumed infected (worst case scenario), +- Conference/Training (attendee infected) = someone in the audience is infected, all are seated and breathing. +- Gym = heavy exercise, no talking, just breathing. + +### Activity breaks + +If coffee breaks are included, they are spread out evenly throughout the day, in addition to any lunch break (if applicable). + +Refer to the [Full Guide](full_guide.md) for more detailed explanations on how to use this tool. \ No newline at end of file diff --git a/caimira/docs/mkdocs/mkdocs.yml b/caimira/docs/mkdocs/mkdocs.yml index be4a94bd..e426338a 100644 --- a/caimira/docs/mkdocs/mkdocs.yml +++ b/caimira/docs/mkdocs/mkdocs.yml @@ -4,18 +4,25 @@ theme: nav: - Home: index.md - - Project Overview: project_overview.md - - Diameter-dependent Model: full_diameter_dependence.md - - Code-related Documentation: - - CAiMIRA REST API: code_documentation/rest_api.md - - CAiMIRA models: code_documentation/models.md - - Open Source Acknowledgments: open_source_acknowledgments.md + - Project Overview: + - About: project_overview/about.md + - Installation: project_overview/installation.md + - Deployment: project_overview/deployment.md + - User Guide: + - Quick Guide: project_overview/user_guide/quick_guide.md + - Full Guide: project_overview/user_guide/full_guide.md + - Open Source Acknowledgments: project_overview/open_source_acknowledgments.md + - License: LICENSE.md + - Code Documentation: + - Diameter Normalization: code_documentation/diameter_normalization.md + - REST API: code_documentation/rest_api.md + - Models Module: code_documentation/models.md markdown_extensions: - pymdownx.arithmatex: generic: true - toc: - toc_depth: '1-2' + toc_depth: '1-3' - admonition - pymdownx.details diff --git a/caimira/docs/style_docs.py b/caimira/docs/style_docs.py index 3b694007..0cfc99fd 100644 --- a/caimira/docs/style_docs.py +++ b/caimira/docs/style_docs.py @@ -199,7 +199,7 @@ def main(): print(f"File '{index_file_path}' does not exist, skipping update.") # Path to the open source acknowledgements markdown file to be updated - acknowledgements_file_path = 'mkdocs/docs/open_source_acknowledgments.md' + acknowledgements_file_path = 'mkdocs/docs/project_overview/open_source_acknowledgments.md' if os.path.isfile(acknowledgements_file_path): # Retrieve package details @@ -209,7 +209,7 @@ def main(): add_python_dependencies_section(acknowledgements_file_path, package_details) # Generate the pie chart - output_image_path = 'mkdocs/docs/license_distribution.png' + output_image_path = 'mkdocs/docs/project_overview/license_distribution.png' generate_license_distribution_pie_chart(package_details, output_image_path) else: print(f"File '{acknowledgements_file_path}' does not exist, skipping update.")