{"id":18999083,"url":"https://github.com/crossr/hepevd","last_synced_at":"2026-01-22T12:08:26.685Z","repository":{"id":213372783,"uuid":"664089743","full_name":"CrossR/HepEVD","owner":"CrossR","description":"Web-Based event display for Particle Physics Events.","archived":false,"fork":false,"pushed_at":"2025-11-03T22:06:27.000Z","size":868,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-11-04T00:06:46.346Z","etag":null,"topics":["event-display","physics"],"latest_commit_sha":null,"homepage":"https://crossr.github.io/HepEVD/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CrossR.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-07-08T22:11:03.000Z","updated_at":"2025-11-03T22:06:05.000Z","dependencies_parsed_at":"2024-03-05T18:43:49.911Z","dependency_job_id":"4b099555-daee-409e-b30f-4468de23cdfa","html_url":"https://github.com/CrossR/HepEVD","commit_stats":null,"previous_names":["crossr/hep_evd","crossr/hepevd"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/CrossR/HepEVD","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrossR%2FHepEVD","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrossR%2FHepEVD/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrossR%2FHepEVD/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrossR%2FHepEVD/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CrossR","download_url":"https://codeload.github.com/CrossR/HepEVD/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrossR%2FHepEVD/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28662933,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["event-display","physics"],"created_at":"2024-11-08T17:49:15.888Z","updated_at":"2026-01-22T12:08:26.680Z","avatar_url":"https://github.com/CrossR.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HepEVD - \u003ca href=\"https://crossr.github.io/HepEVD/\" alt=\"Contributors\"\u003e\u003cimg src=\"https://img.shields.io/badge/Live_Demo-blue\" /\u003e\u003c/a\u003e\n\nA header-only web-based event display for particle physics events.\n\n![image](https://github.com/CrossR/hep_evd/assets/10038688/badd2e8d-9a88-492f-8f1e-b41094af7e72)\n\n## Code Layout\n\nThe main codebase is split into two sections: the C++ code, and the Javascript code.\nThere is then two further folders, containing the example code, and the Python bindings.\n\n- `include` contains all the actual C++ library code that is responsible for storing\n  the basic objects needed (hits, detector layouts, event markers), as well as the HTTP\n  server that then serves these objects up for the WebUI to show. A HTTP server (serving\n  a JSON API and the UI frontend) was chosen as it works nicely on remote systems, and\n  allows quick changes to be made to the UI without re-running anything.\n\n- `web` contains the actual Javascript code for the event display, utilising `THREE.js`\n  heavily.\n\n- `python_bindings` contains the Python bindings for the C++ code, allowing the C++\n  library to be used from Python.\n\n- `example` contains example code, showing how to use the library. This includes\n  a simple example, showing randomly placed hits in a DUNE FD sized module, as\n  well as an optional client/server example, which demonstrates how to use the\n  library in a client/server mode, which can be useful to preserve state between\n  events. Finally, there is an example of how the Python bindings can be used.\n\n## Installation + Usage\n\nTo run the basic example, you need to pull down the external dependencies, then simply\nbuild the example.\n\n```\n./get_extern_deps.sh\ncd example/\nmake basic\n./basic\n```\n\nOn remote machines, you should be able to use port forwarding to access the webserver\nthat the example sets up from your local browser.\n\nAlternatively, to build and then install the Python bindings, you can run:\n\n```\n./get_extern_deps.sh\n\n# We use a git submodule for nanobind, the Python / C++ bindings library.\ngit submodule update --init --recursive\n\n# You may want to setup a Python Venv for this first...\n# https://docs.python.org/3/library/venv.html\npython -m venv .venv\nsource .venv/bin/activate\n\n# Swap to the Python bindings directory.\ncd python_bindings/\n\n# Build and install the bindings...\npip install .\n\n# Test them...\npython\n\n$ import HepEVD\n```\n\nFrom there, you can then use the library as normal.\n\nAn example of how the library works can be seen in\n`example/test_python_bindings.py`, as well as in the HepEVD wiki.\n\n## Project Integration\n\nThere is some basic support for pulling in HepEVD into a CMake-based project.\nThis is usually not really necessary for basic debugging, but could be useful if\nHepEVD is used extensively.\n\n```cmake\ninclude(FetchContent)\n\nFetchContent_Declare(\n    HepEVD\n    GIT_REPOSITORY https://github.com/CrossR/hep_evd.git\n    GIT_BRANCH main\n)\n\nFetchContent_MakeAvailable(HepEVD)\n\n# Link the library to a target\ntarget_link_libraries(MyBigProject PRIVATE HepEVD)\n```\n\n## Motivation\n\nIt is often useful to be able to view how the interactions in a particle physics event\nlook, to get a better understanding of the event topology and how reconstruction\nalgorithms are operating.\n\nHowever, most built-in or available event displays have two main issues:\n\n- Lack of availability: In a lot of cases, you can not easily spin up an event display\n  whenever you want, meaning that if what you want to look at is not an input or an\n  output, the raw hits or the final reconstruction, you are out of luck. This is not\n  always the case however, but still, general availability of \"I want an event display\n  here, to show this thing\" was a large motivation.\n\n- A secondary, and arguably even bigger limitation is the sorts of available event\n  displays. You may be able to spin up an event display wherever you want in some\n  cases, but they are limited by C++ based GUIs, restricting you to basic figures and\n  requiring hacks and dodgy workarounds to show the actual information you want, rather\n  than utilising more modern and easily hackable interfaces, such as those provided in\n  the web browser.\n\nThe final goal of this library aims to fix those two issues: a simple, header-only\ninclude that can be dropped in without changes to a build system or more, and allows\nevents to be easily shown in the browser. Using the browser means modern, flexible 3D\ndrawing tools can be used, not ROOT-based or similar GUIs, with a further advantage that\na web-based event display trivially works remotely, if you use SSH forwarding.\n\n## Acknowledgements\n\nThe HTTP server in this project utilises\n[cpp-httplib](https://github.com/yhirose/cpp-httplib), to make the server code as simple\nas possible. Similarly, both [nlohmann/json](https://github.com/nlohmann/json) and\n[RapidJSON](https://github.com/Tencent/rapidjson) are used to both\nconvert and parse objects to/from JSON, such that they can be served via the HTTP server.\n\n## Licensing\n\nThis code is released under the MIT License, though there are some exceptions.\nAll of the bundled code has its own license, and there is additional license constraints\non the code in `./integrations/`, due to the nature of that code building upon existing\nfiles from other libraries. Where appropriate, the license has been noted and included\nat the top of each file.\n\nAll of the downloaded external dependencies are MIT-licenesed, and their specific\nlicenses can be found here:\n\n - https://github.com/yhirose/cpp-httplib/blob/master/LICENSE\n - https://github.com/nlohmann/json/blob/develop/LICENSE.MIT\n - https://github.com/Tencent/rapidjson/blob/master/license.txt\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrossr%2Fhepevd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrossr%2Fhepevd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrossr%2Fhepevd/lists"}