Automatic reduction as an application

未关闭
#151 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
25/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
活跃
技术栈
python

调研方向

Start with the requirements in docs/requirements/data.md and the proposal discussion in #27, then read the referenced issues #81, #148, #152, #68, and #33. The first release needs a durable service that runs reductions across proposals, but its design has unresolved questions about sample identification, configuration, throughput, and framework boundaries. Done means those design decisions are resolved; the issue does not identify implementation files or tests.

由索引模型根据 Issue 内容生成。

描述

Automatic reduction is one application: a service that runs the trigger loop 24/7, and probably a web frontend. It must work with no frontend open, so the loop cannot live in a client application. It is a client of the backend.

Decided (Simon, 2026-11-05)
  • The first release needs no connect() over HTTP. The service can therefore be one process holding local(), a durable log, the loop, and its frontend. Users find its results through SciCat, not by connecting to its backend.
  • Where technique-specific code lives is decided later. Likely direction: a generic service that loads a package with the specs, bindings, and rules of a technique. A person can set the can and empty beam once as configuration, but SANS needs a transmission run per sample, so specs alone do not seem to be enough.
What the first release needs from the framework
  • A durable log and restart. A 24/7 service must restart without reducing every run again. local() passes no log today, and only tests use the file mode of Log. #81 suggests deleting these until the service exists, and this application is now a reason to keep them.
  • Proposals. A client belongs to one proposal and TriggerLoop takes one client, while the service runs across an instrument's proposals. Decide between one loop per proposal and one loop that sends each new file to its proposal's client. See "Proposals" in #27.
  • Which file is a sample run. Rules select by role=, a field no file carries. This is the Open question in the requirements that blocks the design (data).
  • Rule status in the frontend. See "Rule status" in #27; TriggerLoop.status is enough if the frontend shares the process.
  • Telling the frontend what changed. #148.
  • A run skipped for good after a transient failure. #68.
  • Publishing with no frontend open. #152.
Open
  • Does one process keep up? #27 estimates about one request per second, with ThreadPoolExecutor(workers=4) and LoKI reductions that take seconds (assumed). Measure it on a real reduction. Running on a cluster stays a Goal of the requirements, and this may force it earlier.
  • How does an instrument scientist change the configuration of a running service, such as when a new can is measured (story E4)? Is that the frontend's form, and are rules data for it (Open in #33)?
  • #33: which of Lookup, LastBefore, Rule(series=), member_field, Template, and apply stay in the framework.
主要语言
Python
星标
0
派生
1
平均合并
9 小时 40 分钟
30 天内合并 PR
60

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

scipp/essapps 的其他 Issue

查看 scipp/essapps 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。