{"id":49156230,"url":"https://github.com/deeplearnphysics/opt0finder","last_synced_at":"2026-04-22T09:03:31.877Z","repository":{"id":351940184,"uuid":"1212884431","full_name":"DeepLearnPhysics/OpT0Finder","owner":"DeepLearnPhysics","description":"Charge-light matching tool at SBN","archived":false,"fork":false,"pushed_at":"2026-04-17T07:09:10.000Z","size":540,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"develop","last_synced_at":"2026-04-17T07:20:17.009Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DeepLearnPhysics.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"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":"2026-04-16T20:36:19.000Z","updated_at":"2026-04-17T07:09:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/DeepLearnPhysics/OpT0Finder","commit_stats":null,"previous_names":["deeplearnphysics/opt0finder"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/DeepLearnPhysics/OpT0Finder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeepLearnPhysics%2FOpT0Finder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeepLearnPhysics%2FOpT0Finder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeepLearnPhysics%2FOpT0Finder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeepLearnPhysics%2FOpT0Finder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DeepLearnPhysics","download_url":"https://codeload.github.com/DeepLearnPhysics/OpT0Finder/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeepLearnPhysics%2FOpT0Finder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32128705,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T08:34:57.708Z","status":"ssl_error","status_checked_at":"2026-04-22T08:34:55.583Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-04-22T09:03:26.782Z","updated_at":"2026-04-22T09:03:31.862Z","avatar_url":"https://github.com/DeepLearnPhysics.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Software for Flash Matching\nICARUS implementation of OpT0Finder. To get started, go to README under `flashmatch/Base`.\n\n## Requirements\n* ROOT version \u003e= 6.22\n* Python \u003e= 3.6\n\n## How to build\n```\nsource configure.sh\nmake -j\n```\nPer-shell (i.e. when you re-login), you have to run `source configure.sh`. No need to re-build unless you would like to (e.g. maybe you modified the source code).\n\n## Example\nComing soon...\n\n# What is Flash Matching?\nIn our detector we assume particle interactions produce signals in both TPC and PMT. *Typically* an interaction signal reconstructed from PMT signal is represented by `recob::OpFlash` and a corresponding representation from the TPC side is a cluster of particles that are produced from the same interaction (or the same root particle, such as a neutrino = neutrino interaction, a cosmic ray, etc.). \n\n`recob::OpFlash` carries two information: a timing in the detector clock + photo-electron (PE) spectrum over PMTs, which is an estimate of photo-electron counts detected by each PMT. Although this is not a strict definition, we consider `recob::OpFlash` to represent one interaction without a granularity of particles in the same interaction. This is a good assumption as a photon detection timing resolution is several to 10 nano-seconds (prompt light time constant is ~6ns, and time of flight is several ns while particles finish traveling in similar time scale). In order to match with a `recob::OpFlash`, TPC interaction unit should be a set of particles that consists one interaction.\n\nThat's a long introduction... but finally! A flash matching is a reconstruction process in which reconstructed interactions (which unit is discussed above) from TPC and PMT are matched :)\n\n## What is OpT0Finder?\nOpT0Finder is a mini-framework for developing and running flash matching algorithms. The top-level program execution is handled by `flashmatch::FlashMatchManager`. If you want to just try running the code and learn by examples, you can skip this section and maybe look at [this] toy-simulation example. In below, I ignore `flashmatch` namespace when specifying C++ class under that scope.\n\nIn OpT0Finder, TPC and PMT interactions are defined as `QCluster_t` and `Flash_t` respectively. So `FlashMatchmanager` is a code to find the right match between sets of `QCluster_t` and `Flash_t`. Though this is not a strict requirement, in general the matching is done by producing a _hypothesis_ `Flash_t`, which is an expected PE per PMT based on `QCluster_t`, and comparing the similarity between the hypothesized and reconstructed (input, provided) `Flash_t`. In doing this, `FlashMatchManager` execute 5 types of algorithms.\n* TPC interaction filter ... optional, can exclude some `QCluster_t` at run time before running matching\n* PMT interaction filter ... optional, can exclude some `Flash_t` at run time before running matching\n* Match prohibit ... optional, can exclude a certain `QCluster_t` and `Flash_t` from matching\n* Hypothesis algorithm ... required, used to generate a hypothesis `Flash_t` from `QCluster_t`.\n* Match algorithm ... required, used to match hypothesis `Flash_t` and reconstructed (input) `Flash_t`.\n\n## Big picture: how does `FlashMatchManager` work?\n`FlashMatchManager` works in 4 big steps:\n\n1. Configure parameters\n2. Register a list of `QCluster_t` = TPC interactions\n3. Register a list of `Flash_t` = PMT interactions\n4. Run flash matching\n\nThat's it! So, in principle, only 4 function calls.\n\nYou can look at `dat/flashmatch.cfg` as an example. By now you should be able to understand the `FlashMatchmanager` configuration. If you are interested in learning about algorithms, you can find README and the source code under `flashmatch/Algorithms` directory. For `FlashMatchManager` itself, the code is under `flashmatch/Base` directory.\n\n## Learning more details?\nThe framework base is defined under `flashmatch/Base` and the algorithms can be found `flashmatch/Algorithms`. Take a look at README there!\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeeplearnphysics%2Fopt0finder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeeplearnphysics%2Fopt0finder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeeplearnphysics%2Fopt0finder/lists"}